generated from mirzaev/pot
	
		
			
				
	
	
		
			147 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| 
 | ||
| declare(strict_types=1);
 | ||
| 
 | ||
| namespace mirzaev\site\account\controllers;
 | ||
| 
 | ||
| // Файлы проекта
 | ||
| use mirzaev\site\account\controllers\core;
 | ||
| use mirzaev\site\account\models\account_model as account;
 | ||
| use mirzaev\site\account\models\session_model as session;
 | ||
| use mirzaev\site\account\models\vk_model as vk;
 | ||
| 
 | ||
| // Библиотека для ArangoDB
 | ||
| use ArangoDBClient\Document as _document;
 | ||
| use stdClass;
 | ||
| 
 | ||
| // Фреймворк для ВКонтакте
 | ||
| use mirzaev\vk\core as api;
 | ||
| 
 | ||
| /**
 | ||
|  * Контроллер аккаунтов
 | ||
|  *
 | ||
|  * @package mirzaev\site\account\controllers
 | ||
|  * @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
 | ||
|  */
 | ||
| final class account_controller extends core
 | ||
| {
 | ||
|     /**
 | ||
|      * Страница профиля
 | ||
|      *
 | ||
|      * @param array $parameters Параметры запроса
 | ||
|      */
 | ||
|     public function index(array $parameters = []): ?string
 | ||
|     {
 | ||
|         return null;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * Инициализация
 | ||
|      *
 | ||
|      * @param array $parameters Параметры запроса
 | ||
|      */
 | ||
|     public function initialization(array $parameters = []): ?string
 | ||
|     {
 | ||
|         if ($this->variables['account'] instanceof _document) {
 | ||
|             // Найден аккаунт
 | ||
| 
 | ||
|             if ($this->variables['vk'] instanceof _document) {
 | ||
|                 // Найден аккаунт ВКонтакте
 | ||
| 
 | ||
|                 // Инициализация данных аккаунта ВКонтакте
 | ||
|                 vk::parse($this->variables['vk'], $this->variables['errors']['vk']);
 | ||
|             }
 | ||
| 
 | ||
|             // Запись кода ответа
 | ||
|             http_response_code(200);
 | ||
| 
 | ||
|             return null;
 | ||
|         } else {
 | ||
|             // Не найден аккаунт
 | ||
| 
 | ||
|             // Запись кода ответа
 | ||
|             http_response_code(401);
 | ||
| 
 | ||
|             // Запись заголовка ответа с ключом аккаунта
 | ||
|             header('session: ' . $this->variables['session']->hash);
 | ||
| 
 | ||
|             return null;
 | ||
|         }
 | ||
| 
 | ||
|         // Запись кода ответа
 | ||
|         http_response_code(500);
 | ||
| 
 | ||
|         return null;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * Связь аккаунта с аккаунтом ВКонтакте
 | ||
|      *
 | ||
|      * @param array $parameters Параметры запроса
 | ||
|      */
 | ||
|     public function connect(array $parameters = []): ?string
 | ||
|     {
 | ||
|         if ($this->variables['session']->hash === $parameters['state']) {
 | ||
|             // Совпадает хеш сессии с полученным хешем из ответа ВКонтакте
 | ||
| 
 | ||
|             if (!empty($response = vk::key($parameters['code'], $this->variables['errors']['vk']))) {
 | ||
|                 // Получены данные аккаунта ВКонтакте
 | ||
| 
 | ||
|                 if (($this->variables['vk'] = vk::initialization($response, $this->variables['errors']['vk'])) instanceof _document) {
 | ||
|                     // Инициализирован аккаунт ВКонтакте
 | ||
| 
 | ||
|                     if (($this->variables['account'] = vk::account($this->variables['vk'])) instanceof _document) {
 | ||
|                         // Найден аккаунт (существующий)
 | ||
| 
 | ||
|                         if (session::connect($this->variables['session'], $this->variables['account'], $this->variables['errors']['session'])) {
 | ||
|                             // Связана сессия с аккаунтом
 | ||
|                         }
 | ||
|                     } else if (($this->variables['account'] = account::create($this->variables['errors']['account'])) instanceof _document) {
 | ||
|                         // Найден аккаунт (создан новый)
 | ||
| 
 | ||
|                         if (session::connect($this->variables['session'], $this->variables['account'], $this->variables['errors']['session'])) {
 | ||
|                             // Связана сессия с аккаунтом
 | ||
| 
 | ||
|                             if (account::connect($this->variables['account'], $this->variables['vk'], $this->variables['errors']['account'])) {
 | ||
|                                 // Связан аккаунт с аккаунтом ВКонтакте
 | ||
|                             }
 | ||
|                         }
 | ||
|                     }
 | ||
| 
 | ||
|                     // Инициализация робота для аккаунта ВКонтакте
 | ||
|                     $this->vk = api::init()->user(key: $this->variables['vk']->access['key']);
 | ||
| 
 | ||
|                     if ($this->variables['vk'] instanceof _document) {
 | ||
|                         // Инициализирован робот для аккаунта ВКонтакте
 | ||
| 
 | ||
|                         // Инициализация данных аккаунта ВКонтакте
 | ||
|                         $data = vk::parse($this->vk, $this->variables['errors']['vk']);
 | ||
|                         var_dump($data); die;
 | ||
| 
 | ||
|                         if ($data instanceof stdClass) {
 | ||
|                             // Получены данные ВКонтакте
 | ||
| 
 | ||
|                             // Запись в базу данных
 | ||
|                             vk::update($this->variables['vk'], $data, $this->variables['errors']['vk']);
 | ||
|                         }
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         // Генерация представления
 | ||
|         return $this->view->render(DIRECTORY_SEPARATOR . 'account' . DIRECTORY_SEPARATOR . 'vk.html', $this->variables);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * Генерация панели аккаунта
 | ||
|      *
 | ||
|      * @param array $parameters Параметры запроса
 | ||
|      */
 | ||
|     public function panel(array $parameters = []): ?string
 | ||
|     {
 | ||
|         // Генерация представления
 | ||
|         return $this->view->render(DIRECTORY_SEPARATOR . 'account' . DIRECTORY_SEPARATOR . 'panel.html', $this->variables);
 | ||
|     }
 | ||
| }
 |