Instagram

—Vložit do DB

INSERT INTO `settings_config` (`id`, `name`, `value`, `hidden`, `type`, `note`, `visible`) VALUES ('ADMIN_INSTAGRAM', 'Přidat tlačítko instagramu do adminu pro přihlášení', '1', 0, 'input', 'Přidá tlačítko přihlásit se přes instagram do nastavení webu, po přihlášení se zobrazí instagram příspěvky na webu.', 0);

—app/lang/admin.cs_CZ.neon

setting:
	..............

	instagram_login_failed: 'Chyba komunikace s instagramem'
	instagram_login_invalid: 'Neplatné přihlášení, zkuste se přihlásit znovu.'
	instagram_remove: 'Odhlásit a odstranit data instagramu'
	instagram_remove_confirm: 'Opravdu smazat načtená data a odhlásit se z instagramu? Z webu zmizí část s Vašimi instagram příspěvky a pro opětovné zobrazení bude nutné se znovu přihlásit.'
instagram_cleanup:
	default_header: 'Odstranění dat instagramu ze systému'
	success: 'Instagram úspěšně odhlášen ze systému a všechna načtená data instagramu vymazána.'
	failed: 'Nepodařilo se vyčistit ze systému všechny data instagramu, zkuste akci opakovat.'

—app/presenters/Admin/NastaveniPresenter.php

public function renderWeb()
{
	$domain = str_replace('www.', '', parse_url($this->link('//Nastaveni:web'))['host']);

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, 'https://www.czechgroup.cz/api/instagram/get?' . http_build_query(['fields' => 'username', 'domain' => $domain, 'token' => hash_hmac('sha256', json_encode(['fields' => 'username']), $domain)]));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$result = curl_exec($ch);
	$result = json_decode($result, true);

	if (!empty($result)) {
		if (!isset($result['error'])) {
			$this->template->instagramUser = $result['username'];
		} else {
			switch ($result['error_code']) {
				case('UNAUTHORIZED'):
					$this->template->instagramError = true;
					break;
				case('LOGIN_INVALID'):
					$this->template->instagramInvalidLogin = true;
					break;
			}
		}
	} else {
		$this->template->instagramError = true;
	}

	$this->template->domain = $domain;
	$this->template->redirect_uri = $this->link('//Nastaveni:web');
	$this->template->czechgroupLoginToken = hash_hmac('sha256', json_encode(['redirect_uri' => $this->link('//Nastaveni:web')]), $domain); //Token je keyed sha256 hash json encoded parameterů (vyjma tokenu a domény)
	$this->template->instagramCached = (file_exists('../temp/instagramCache.json') || isset($this->template->instagramUser));
}

public function renderInstagramCleanup()
{
	$domain = str_replace('www.', '', parse_url($this->link('//Nastaveni:web'))['host']);
	$success = true;

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, 'https://www.czechgroup.cz/api/instagram/removeDataWebCall?' . http_build_query(['action' => 'data-only', 'domain' => $domain, 'token' => hash_hmac('sha256', json_encode(['action' => 'data-only']), $domain)]));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$result = curl_exec($ch);
	$result = json_decode($result, true);

	if (file_exists('../temp/instagramCache.json')) {
		$success = unlink('../temp/instagramCache.json');
	}
	if ($success && isset($result['state'])) {
		$this->template->success = true;
	} else {
		$this->template->success = false;
	}
}

public function renderRedirects()

—app/presenters/Admin/templates/Nastaveni/instagramCleanup.latte
CELÉ Z DEMO

—app/presenters/Admin/templates/Nastaveni/web.latte

<h2 class="h2">{_admin.setting.default_header}</h2>

<div n:if="$web['ADMIN_INSTAGRAM']" class="row">
	<div class="col-4 col-md-4 col-lg-4">
		<a href="https://www.czechgroup.cz/api/instagram/login?redirect_uri={$redirect_uri}&domain={$domain}&token={$czechgroupLoginToken}"
				class="btn btn-info"><i class="fa fa-instagram"></i> Přihlásit přes instagram
		</a>
	</div>
</div>
{if isset($_GET['instagramError']) || isset($instagramError)}
	<div class="row">
		<div class="col-6 col-md-6 col-lg-6">
			{_'admin.setting.instagram_login_failed'}
		</div>
	</div>
{/if}
{if isset($_GET['instagramInvalidLogin']) || isset($instagramInvalidLogin)}
	<div class="row">
		<div class="col-6 col-md-6 col-lg-6">
			{_'admin.setting.instagram_login_invalid'}
		</div>
	</div>
{/if}
{if isset($instagramUser)}
	<div class="row">
		<div class="col-6 col-md-6 col-lg-6">
			{_'admin.layout.login_as'}
			<a href="https://www.instagram.com/{$instagramUser}" target="_BLANK">@{$instagramUser}</a>
		</div>
	</div>
{/if}
{if $instagramCached}
	<div class="row">
		<div class="col-6 col-md-6 col-lg-6">
			<a n:href="Nastaveni:instagramCleanup"
					onclick="return confirm({_'admin.setting.instagram_remove_confirm'})">{_'admin.setting.instagram_remove'}</a>
		</div>
	</div>
{/if}


{form nastaveniWebu class => "form-horizontal"}

—app/presenters/Front/BasePresenter.php
NAKONEC FUNKCE beforeRender()

$domain = str_replace('www.', '', parse_url($this->link('//Homepage:page'))['host']);

if (!file_exists('../temp/instagramCache.json') || empty(json_decode(file_get_contents('../temp/instagramCache.json'), true)['expire']) || json_decode(file_get_contents('../temp/instagramCache.json'), true)['expire'] < time() || empty(json_decode(file_get_contents('../temp/instagramCache.json'), true)['urls'])) {
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, 'https://www.czechgroup.cz/api/instagram/get?' . http_build_query(['fields' => 'username,media', 'domain' => $domain, 'token' => hash_hmac('sha256', json_encode(['fields' => 'username,media']), $domain)]));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$result = curl_exec($ch);
	$result = json_decode($result, true);
	$instagramPhotosUrls = [];
	if (!isset($result['error'])) {
		$this->template->instagramUsername = $result['username'];
		foreach ($result['media'] as $data) {
			if ($data['media_type'] == 'VIDEO') {
				$instagramPhotosUrls[] = $data['thumbnail_url'];
			} else {
				$instagramPhotosUrls[] = $data['media_url'];
			}
		}
	}

	if (!empty($instagramPhotosUrls)) {
		file_put_contents('../temp/instagramCache.json', json_encode(['urls' => $instagramPhotosUrls, 'username' => $this->template->instagramUsername, 'expire' => strtotime('+2 hours')]));
		$this->template->instagramData = $instagramPhotosUrls;
	}
} else {
	$instagramCache = json_decode(file_get_contents('../temp/instagramCache.json'), true);
	$this->template->instagramData = $instagramCache['urls'];
	$this->template->instagramUsername = $instagramCache['username'];
}

—app/presenters/Front/InstagramPresenter.php
CELÉ Z DEMO

—app/router/RouterFactory.php

$frontRoutes[] = new Route('/api/eshop/pohoda/stock', 'Pohoda:stock');
$frontRoutes[] = new Route('/api/eshop/pohoda/orders', 'Pohoda:orders');
$frontRoutes[] = new Route('/api/instagram/do', 'Instagram:do');

$adminRoutes[] = new Route('/admin/nastaveni/presmerovani-list', 'Nastaveni:redirectsList');
$adminRoutes[] = new Route('/admin/nastaveni', 'Nastaveni:web');
$adminRoutes[] = new Route('/admin/nastaveni/instagram-cleanup', 'Nastaveni:instagramCleanup');

 

Nevíte si rady?
Neváhejte se zeptat

Nevíte si rady nebo potřebujete něco konzultovat? Nápovědu stále zdokonalujeme na základě vašich požadavků a postřehů. Uvádíme co nejvíce možných variant, které používáme na řešení jednotlivých částí webu, mějte ale na paměti, že projekty řešíme individuálně na základě konkrétních potřeb.

Nádražní 876
560 02 Česká Třebová

honza.cech@czechgroup.cz

+420 774 201 483

*
*