83 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						||
 | 
						||
declare(strict_types=1);
 | 
						||
 | 
						||
namespace mirzaev\vk\arangodb\vk;
 | 
						||
 | 
						||
use mirzaev\vk\arangodb\longpoll;
 | 
						||
use mirzaev\vk\arangodb\journal;
 | 
						||
use mirzaev\arangodb\collection;
 | 
						||
use mirzaev\arangodb\document;
 | 
						||
use ArangoDBClient\Document as _document;
 | 
						||
 | 
						||
use ArangoDBClient\Connection as _connection;
 | 
						||
 | 
						||
class group
 | 
						||
{
 | 
						||
    /**
 | 
						||
     * Инициализация
 | 
						||
     *
 | 
						||
     * @param _connection $session Сессия соединения с базой данных
 | 
						||
     * @param int $id Идентификатор ВКонтакте
 | 
						||
     * @param bool $journal Записывать в журнал
 | 
						||
     * @param bool $create Создавать коллекции при их отсутствии
 | 
						||
     *
 | 
						||
     * @return ?_document Инстанция документа
 | 
						||
     */
 | 
						||
    public static function init(_connection $session, int $id, bool $journal = true, bool $create = true): ?_document
 | 
						||
    {
 | 
						||
        // Инициализация коллекции
 | 
						||
        $collection = longpoll::COLLECTION_GROUPS;
 | 
						||
 | 
						||
        if ($create) {
 | 
						||
            // Запрошено создание коллекций в случае их отсутствия
 | 
						||
 | 
						||
            // Создание коллекции
 | 
						||
            collection::init($session, $collection);
 | 
						||
        }
 | 
						||
 | 
						||
        if ($account = collection::search($session, <<<AQL
 | 
						||
                FOR x IN $collection
 | 
						||
                FILTER x.data.data.id == $id
 | 
						||
                LIMIT 1
 | 
						||
                RETURN x.data
 | 
						||
            AQL)) {
 | 
						||
            // Найден аккаунт
 | 
						||
 | 
						||
            return $account;
 | 
						||
        }
 | 
						||
 | 
						||
        if ($account = document::write($session, $collection, ['data' => ['id' => $id]])) {
 | 
						||
            // Аккаунт записан
 | 
						||
 | 
						||
            // Журналирование
 | 
						||
            if ($journal && journal::init($session, $account)->write('create', [
 | 
						||
                'changes' => [
 | 
						||
                    'new' => collection::search($session, <<<AQL
 | 
						||
                            FOR a IN $collection
 | 
						||
                            FILTER a._id == $account
 | 
						||
                            LIMIT 1
 | 
						||
                            RETURN a.data
 | 
						||
                        AQL),
 | 
						||
                    'old' => null
 | 
						||
                ]
 | 
						||
            ])) {
 | 
						||
                // Записаны данные в журнал
 | 
						||
            }
 | 
						||
 | 
						||
            if ($account = collection::search($session, <<<AQL
 | 
						||
                    FOR x IN $collection
 | 
						||
                    FILTER x.data.data.id == $id
 | 
						||
                    LIMIT 1
 | 
						||
                    RETURN x
 | 
						||
                AQL)) {
 | 
						||
                // Найден аккаунт
 | 
						||
 | 
						||
                return $account;
 | 
						||
            }
 | 
						||
        }
 | 
						||
 | 
						||
        return null;
 | 
						||
    }
 | 
						||
}
 |