Ejemplo n.º 1
0
 /**
  * Start a editing session or return an existing one
  * @param string $uid of the user starting a session
  * @param \OCA\Documents\File $file - file object
  * @return array
  * @throws \Exception
  */
 public static function start($uid, $file)
 {
     // Create a directory to store genesis
     $genesis = new Genesis($file);
     list($ownerView, $path) = $file->getOwnerViewAndPath();
     $oldSession = new Db_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 Db_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 = Helper::getMemberColor($uid);
     $member = new Db_Member(array($sessionData['es_id'], $uid, $memberColor, time(), intval($file->isPublicShare()), $file->getToken()));
     if ($member->insert()) {
         // Do we have OC_Avatar in out disposal?
         if (!class_exists('\\OC_Avatar') || \OC_Config::getValue('enable_avatars', true) !== true) {
             $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==';
         } else {
             $imageUrl = $uid;
         }
         $displayName = $file->isPublicShare() ? $uid . ' ' . Db_Member::getGuestPostfix() : \OCP\User::getDisplayName($uid);
         $sessionData['member_id'] = (string) $member->getLastInsertId();
         $op = new Db_Op();
         $op->addMember($sessionData['es_id'], $sessionData['member_id'], $displayName, $memberColor, $imageUrl);
     } else {
         throw new \Exception('Failed to add member into database');
     }
     $sessionData['title'] = basename($path);
     $sessionData['permissions'] = $ownerView->getFilePermissions($path);
     return $sessionData;
 }
Ejemplo n.º 2
0
 /**
  * Start a editing session or return an existing one
  * @param string $uid of the user starting a session
  * @param \OCA\Documents\File $file - file object
  * @return array
  * @throws \Exception
  */
 public static function start($uid, File $file)
 {
     list($ownerView, $path) = $file->getOwnerViewAndPath();
     // Create a directory to store genesis
     $genesis = new Genesis($ownerView, $path, $file->getOwner());
     $oldSession = new Db_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 Db_Session(array($genesis->getPath(), $genesis->getHash(), $file->getOwner(), $file->getFileId()));
         if (!$newSession->insert()) {
             throw new \Exception('Failed to add session into database');
         }
     }
     $session = $oldSession->loadBy('file_id', $file->getFileId())->getData();
     $memberColor = Helper::getRandomColor();
     $member = new Db_Member(array($session['es_id'], $uid, $memberColor, time()));
     if ($member->insert()) {
         // Do we have OC_Avatar in out disposal?
         if (!class_exists('\\OC_Avatar') || \OC_Config::getValue('enable_avatars', true) !== true) {
             //$x['avatar_url'] = \OCP\Util::linkToRoute('documents_user_avatar');
             $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==';
         } else {
             // https://github.com/owncloud/documents/issues/51
             // Temporary stub
             $imageUrl = $uid;
             /*
             				$avatar = new \OC_Avatar($uid);
             				$image = $avatar->get(64);
             					// User has an avatar 
             				if ($image instanceof \OC_Image) {
             					$imageUrl = \OC_Helper::linkToRoute(
             							'core_avatar_get',
             							array( 'user' => $uid, 'size' => 64)
             					) . '?requesttoken=' . \OC::$session->get('requesttoken');
             				} else {
             					//shortcircuit if it's not an image
             					$imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==';
             				}
             */
         }
         $session['member_id'] = (string) $member->getLastInsertId();
         $op = new Db_Op();
         $op->addMember($session['es_id'], $session['member_id'], \OCP\User::getDisplayName($uid), $memberColor, $imageUrl);
     } else {
         throw new \Exception('Failed to add member into database');
     }
     $session['permissions'] = $ownerView->getFilePermissions($path);
     return $session;
 }
Ejemplo n.º 3
0
 /**
  * @brief Cleanup session data on removing the document
  * @param array
  *
  * This function is connected to the delete signal of OC_Filesystem
  * to delete the related info from database
  */
 public static function onDelete($params)
 {
     $info = \OC\Files\Filesystem::getFileInfo($params['path']);
     $fileId = @$info['fileid'];
     if (!$fileId) {
         return;
     }
     $sessionObj = new Db_Session();
     $session = $sessionObj->loadBy('file_id', $fileId)->getData();
     if (!is_array($session) || !isset($session['es_id'])) {
         return;
     }
     Db_Session::cleanUp($session['es_id']);
 }
Ejemplo n.º 4
0
 /**
  * @brief Cleanup session data on removing the document
  * @param array
  *
  * This function is connected to the delete signal of OC_Filesystem
  * to delete the related info from database
  */
 public static function onDelete($params)
 {
     $info = \OC\Files\Filesystem::getFileInfo($params['path']);
     $fileId = @$info['fileid'];
     if (!$fileId) {
         return;
     }
     $session = new Db_Session();
     $session->loadBy('file_id', $fileId);
     if (!$session->getEsId()) {
         return;
     }
     $member = new Db_Member();
     $sessionMembers = $member->getCollectionBy('es_id', $session->getEsId());
     foreach ($sessionMembers as $memberData) {
         if (intval($memberData['status']) === Db_Member::MEMBER_STATUS_ACTIVE) {
             return;
         }
     }
     Db_Session::cleanUp($session->getEsId());
 }
Ejemplo n.º 5
0
 $token = $_GET['t'];
 $tmpl = new \OCP\Template('documents', 'public', 'guest');
 try {
     $file = File::getByShareToken($token);
     if ($file->isPasswordProtected() && !$file->checkPassword(@$_POST['password'])) {
         if (isset($_POST['password'])) {
             $tmpl->assign('wrongpw', true);
         }
         $tmpl->assign('hasPassword', true);
     } else {
         \OCP\Util::addStyle('documents', '3rdparty/webodf/dojo-app');
         \OCP\Util::addStyle('documents', '3rdparty/webodf/editor');
         \OCP\Util::addScript('documents', 'documents');
         if ($file->getFileId()) {
             $session = new Db_Session();
             $session->loadBy('file_id', $file->getFileId());
             if ($session->getEsId()) {
                 $member = new Db_Member();
                 $members = $member->getCollectionBy('es_id', $session->getEsId());
             } else {
                 $members = 0;
             }
             $tmpl->assign('total', count($members) + 1);
         } else {
             $tmpl->assign('total', 1);
         }
         $tmpl->assign('document', $token);
     }
 } catch (\Exception $e) {
     $tmpl->assign('notFound', true);
 }