Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/richdocuments.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/db/session.php')
-rw-r--r--lib/db/session.php212
1 files changed, 0 insertions, 212 deletions
diff --git a/lib/db/session.php b/lib/db/session.php
deleted file mode 100644
index 583cd342..00000000
--- a/lib/db/session.php
+++ /dev/null
@@ -1,212 +0,0 @@
-<?php
-
-/**
- * ownCloud - Richdocuments App
- *
- * @author Victor Dubiniuk
- * @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
- *
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- */
-
-namespace OCA\Richdocuments\Db;
-
-use OCP\Security\ISecureRandom;
-
-use OCA\Richdocuments\Filter;
-
-/**
- * Session management
- *
- * @method string getEsId()
- * @method int getFileId()
- * @method string getGenesisUrl()
- * @method string getOwner()
- * @method string getGenesisHash()
- *
- */
-class Session extends \OCA\Richdocuments\Db {
-
- /**
- * DB table
- */
- const DB_TABLE = '`*PREFIX*richdocuments_session`';
- protected $tableName = '`*PREFIX*richdocuments_session`';
-
- protected $insertStatement = 'INSERT INTO `*PREFIX*richdocuments_session` (`es_id`, `genesis_url`, `genesis_hash`, `owner`, `file_id`)
- VALUES (?, ?, ?, ?, ?)';
-
- protected $loadStatement = 'SELECT * FROM `*PREFIX*richdocuments_session` WHERE `es_id`= ?';
-
- /**
- * 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;
- }
-
- public static function cleanUp($esId){
- $session = new Session();
- $session->deleteBy('es_id', $esId);
-
- $member = new \OCA\Richdocuments\Db\Member();
- $member->deleteBy('es_id', $esId);
-
- $op= new \OCA\Richdocuments\Db\Op();
- $op->deleteBy('es_id', $esId);
- }
-
-
- public function syncOps($memberId, $currentHead, $clientHead, $clientOps){
- $hasOps = count($clientOps)>0;
- $op = new \OCA\Richdocuments\Db\Op();
-
- // TODO handle the case ($currentHead == "") && ($seqHead != "")
- if ($clientHead == $currentHead) {
- // matching heads
- if ($hasOps) {
- // incoming ops without conflict
- // Add incoming ops, respond with a new head
- $newHead = \OCA\Richdocuments\Db\Op::addOpsArray($this->getEsId(), $memberId, $clientOps);
- $result = array(
- 'result' => 'added',
- 'head_seq' => $newHead ? $newHead : $currentHead
- );
- } else {
- // no incoming ops (just checking for new ops...)
- $result = array(
- 'result' => 'new_ops',
- 'ops' => array(),
- 'head_seq' => $currentHead
- );
- }
- } else { // HEADs do not match
- $result = array(
- 'result' => $hasOps ? 'conflict' : 'new_ops',
- 'ops' => $op->getOpsAfterJson($this->getEsId(), $clientHead),
- 'head_seq' => $currentHead,
- );
- }
-
- return $result;
- }
-
- public function insert(){
- $esId = $this->getUniqueSessionId();
- array_unshift($this->data, $esId);
- return parent::insert();
- }
-
- public function updateGenesisHash($esId, $genesisHash){
- return $this->execute(
- 'UPDATE `*PREFIX*richdocuments_session` SET `genesis_hash`=? WHERE `es_id`=?',
- array(
- $genesisHash, $esId
- )
- );
- }
-
- public function getInfo($esId){
- $result = $this->execute('
- SELECT `s`.*, COUNT(`m`.`member_id`) AS `users`
- FROM ' . $this->tableName . ' AS `s`
- LEFT JOIN `*PREFIX*richdocuments_member` AS `m` ON `s`.`es_id`=`m`.`es_id`
- AND `m`.`status`=' . Db\Member::MEMBER_STATUS_ACTIVE . '
- AND `m`.`uid` != ?
- WHERE `s`.`es_id` = ?
- GROUP BY `m`.`es_id`
- ',
- [
- \OC::$server->getUserSession()->getUser()->getUID(),
- $esId
- ]
- );
-
- $info = $result->fetch();
- if (!is_array($info)){
- $info = array();
- }
- return $info;
- }
-
- protected function getUniqueSessionId(){
- $testSession = new Session();
- do{
- $id = \OC::$server->getSecureRandom()
- ->getMediumStrengthGenerator()
- ->generate(30, ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS);
- } while ($testSession->load($id)->hasData());
-
- return $id;
- }
-}