OCA\Richdocuments\Db\Session::start PHP Метод

start() публичный статический Метод

Start a editing session or return an existing one
public static start ( string $uid, File $file ) : array
$uid string of the user starting a session
$file OCA\Richdocuments\File - file object
Результат array
    public static function start($uid, $file)
    {
        // Create a directory to store genesis
        $genesis = new \OCA\Richdocuments\Genesis($file);
        $oldSession = new Session();
        $oldSession->loadBy('file_id', $file->getFileId());
        //If there is no existing session we need to start a new one
        if (!$oldSession->hasData()) {
            $newSession = new Session(array($genesis->getPath(), $genesis->getHash(), $file->getOwner(), $file->getFileId()));
            if (!$newSession->insert()) {
                throw new \Exception('Failed to add session into database');
            }
        }
        $sessionData = $oldSession->loadBy('file_id', $file->getFileId())->getData();
        $memberColor = \OCA\Richdocuments\Helper::getMemberColor($uid);
        $member = new \OCA\Richdocuments\Db\Member([$sessionData['es_id'], $uid, $memberColor, time(), intval($file->isPublicShare()), $file->getToken()]);
        if (!$member->insert()) {
            throw new \Exception('Failed to add member into database');
        }
        $sessionData['member_id'] = (string) $member->getLastInsertId();
        // Do we have OC_Avatar in out disposal?
        if (\OC::$server->getConfig()->getSystemValue('enable_avatars', true) !== true) {
            $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==';
        } else {
            $imageUrl = $uid;
        }
        $displayName = $file->isPublicShare() ? $uid . ' ' . \OCA\Richdocuments\Db\Member::getGuestPostfix() : \OC::$server->getUserSession()->getUser()->getDisplayName($uid);
        $userId = $file->isPublicShare() ? $displayName : \OC::$server->getUserSession()->getUser()->getUID();
        $op = new \OCA\Richdocuments\Db\Op();
        $op->addMember($sessionData['es_id'], $sessionData['member_id'], $displayName, $userId, $memberColor, $imageUrl);
        $sessionData['title'] = basename($file->getPath());
        $sessionData['permissions'] = $file->getPermissions();
        return $sessionData;
    }

Usage Example

 /**
  * @NoAdminRequired
  */
 public function join($fileId)
 {
     try {
         $view = \OC\Files\Filesystem::getView();
         $path = $view->getPath($fileId);
         if ($view->isUpdatable($path)) {
             $file = new File($fileId);
             $response = Db\Session::start($this->uid, $file);
         } else {
             $info = $view->getFileInfo($path);
             $response = ['permissions' => $info['permissions'], 'id' => $fileId];
         }
         $response = array_merge($response, ['status' => 'success']);
     } catch (\Exception $e) {
         $this->logger->warning('Starting a session failed. Reason: ' . $e->getMessage(), ['app' => $this->appName]);
         $response = ['status' => 'error'];
     }
     return $response;
 }