/**
* Start a editing session or return an existing one
* @param string $uid of the user starting a session
* @param \OCA\Richdocuments\File $file - file object
* @return array
* @throws \Exception
*/
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;
}