Cleanup session data if original file is removed

pull/1/head
Victor Dubiniuk 11 years ago
parent 4d0bf663d9
commit 136f445581

@ -40,3 +40,6 @@ OC::$CLASSPATH['OCA\Documents\SessionController'] = 'documents/ajax/sessionContr
OC::$CLASSPATH['OCA\Documents\UserController'] = 'documents/ajax/userController.php';
OC::$CLASSPATH['OCA\Documents\Download_Simple'] = 'documents/lib/download/simple.php';
OC::$CLASSPATH['OCA\Documents\Download_Range'] = 'documents/lib/download/range.php';
//Listen to delete file signal
\OCP\Util::connectHook('OC_Filesystem', 'delete', "OCA\Documents\Storage", "onDelete");

@ -14,6 +14,8 @@ namespace OCA\Documents;
class Member extends Db{
const DB_TABLE = '`*PREFIX*documents_member`';
const ACTIVITY_THRESHOLD = 60; // 10 Minutes
const MEMBER_STATUS_ACTIVE = 1;
@ -21,7 +23,7 @@ class Member extends Db{
public static function add($esId, $displayname, $color){
$query = \OCP\DB::prepare('
INSERT INTO `*PREFIX*documents_member` (`es_id`, `uid`, `color`, `last_activity`)
INSERT INTO ' . self::DB_TABLE . ' (`es_id`, `uid`, `color`, `last_activity`)
VALUES (?, ?, ?, ?)
');
$query->execute(array(
@ -31,11 +33,11 @@ class Member extends Db{
time()
));
return \OCP\DB::insertid(`*PREFIX*documents_member`);
return \OCP\DB::insertid(self::DB_TABLE);
}
public static function getMember($id){
$query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*documents_member` WHERE `member_id`= ?');
$query = \OCP\DB::prepare('SELECT * FROM ' . self::DB_TABLE . ' WHERE `member_id`= ?');
$result = $query->execute(array($id));
return $result->fetchRow();
}
@ -47,13 +49,13 @@ class Member extends Db{
}
$stmt = self::buildPlaceholders($ids);
$query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*documents_member` WHERE `member_id` IN (' . $stmt . ')');
$query = \OCP\DB::prepare('SELECT * FROM ' . self::DB_TABLE . ' WHERE `member_id` IN (' . $stmt . ')');
$result = $query->execute($ids);
return $result->fetchAll();
}
public static function updateMemberActivity($memberId){
$query = \OCP\DB::prepare('UPDATE `*PREFIX*documents_member` SET `last_activity`=? WHERE `member_id`=?');
$query = \OCP\DB::prepare('UPDATE ' . self::DB_TABLE . ' SET `last_activity`=? WHERE `member_id`=?');
$query->execute(array(
time(),
$memberId
@ -67,7 +69,7 @@ class Member extends Db{
$activeSince = $lastActivity;
}
$query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*documents_member` WHERE `es_id`= ? AND `last_activity` > ?');
$query = \OCP\DB::prepare('SELECT * FROM ' . self::DB_TABLE . ' WHERE `es_id`= ? AND `last_activity` > ?');
$result = $query->execute(array($esId, $activeSince));
return $result->fetchAll();
}
@ -82,7 +84,7 @@ class Member extends Db{
$query = \OCP\DB::prepare('
SELECT `member_id`
FROM `*PREFIX*documents_member`
FROM ' . self::DB_TABLE . '
WHERE `es_id`= ?
AND `last_activity`<?
AND `status`=?
@ -106,7 +108,7 @@ class Member extends Db{
*/
protected static function deactivate($esId, $time){
$query = \OCP\DB::prepare('
UPDATE `*PREFIX*documents_member`
UPDATE ' . self::DB_TABLE . '
SET `status`=?
WHERE `es_id`=?
AND `last_activity`<?
@ -118,6 +120,11 @@ class Member extends Db{
));
}
public static function deleteBySessionId($esId){
$query = \OCP\DB::prepare('DELETE FROM ' . self::DB_TABLE . ' WHERE `es_id` = ?');
$query->execute($esId);
}
protected static function getInactivityPeriod(){
return time() - self::ACTIVITY_THRESHOLD;
}

@ -13,9 +13,11 @@ namespace OCA\Documents;
class Op {
const DB_TABLE = '`*PREFIX*documents_op`';
public static function add($esId, $memberId, $opspec){
$query = \OCP\DB::prepare('
INSERT INTO `*PREFIX*documents_op` (`es_id`, `member`, `opspec`)
INSERT INTO ' . self::DB_TABLE . ' (`es_id`, `member`, `opspec`)
VALUES (?, ?, ?)
');
$query->execute(array(
@ -23,9 +25,8 @@ class Op {
$memberId,
$opspec,
));
// throw something - if query fails - thats fatal
return \OCP\DB::insertid(`*PREFIX*documents_op`);
return \OCP\DB::insertid(self::DB_TABLE);
}
public static function addOpsArray($esId, $memberId, $ops){
@ -43,7 +44,7 @@ class Op {
public static function getHeadSeq($esId){
$query = \OCP\DB::prepare('
SELECT `seq`
FROM `*PREFIX*documents_op`
FROM ' . self::DB_TABLE . '
WHERE `es_id`=?
ORDER BY `seq` DESC
', 1);
@ -77,7 +78,7 @@ class Op {
}
$query = \OCP\DB::prepare('
SELECT `opspec`
FROM `*PREFIX*documents_op`
FROM ' . self::DB_TABLE . '
WHERE `es_id`=?
AND `seq`>?
ORDER BY `seq` ASC
@ -86,6 +87,11 @@ class Op {
return $result->fetchAll();
}
public static function deleteBySessionId($esId){
$query = \OCP\DB::prepare('DELETE FROM ' . self::DB_TABLE . ' WHERE `es_id` = ?');
$query->execute($esId);
}
public static function removeCursor($esId, $memberId){
return self::add(
$esId,

@ -12,10 +12,11 @@
namespace OCA\Documents;
class Session extends Db{
const DB_TABLE = '`*PREFIX*documents_session`';
public static function add($genesis, $hash, $fileId){
$query = \OCP\DB::prepare('
INSERT INTO `*PREFIX*documents_session` (`es_id`, `genesis_url`, `genesis_hash`, `owner`, `file_id`)
INSERT INTO ' . self::DB_TABLE . ' (`es_id`, `genesis_url`, `genesis_hash`, `owner`, `file_id`)
VALUES (?, ?, ?, ?, ?)
');
@ -35,13 +36,13 @@ class Session extends Db{
}
public static function getAll(){
$query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*documents_session`');
$query = \OCP\DB::prepare('SELECT * FROM ' . self::DB_TABLE);
$result = $query->execute();
return $result->fetchAll();
}
public static function getSession($id){
$query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*documents_session` WHERE `es_id`= ?');
$query = \OCP\DB::prepare('SELECT * FROM ' . self::DB_TABLE . ' WHERE `es_id`= ?');
$result = $query->execute(array($id));
return $result->fetchRow();
}
@ -50,7 +51,7 @@ class Session extends Db{
$query = \OCP\DB::prepare('
SELECT `s`.*, COUNT(`m`.`member_id`) AS `users`
FROM `*PREFIX*documents_session` AS `s`
FROM ' . self::DB_TABLE . ' AS `s`
LEFT JOIN `*PREFIX*documents_member` AS `m` ON `s`.`es_id`=`m`.`es_id`
AND `m`.`status`='. Member::MEMBER_STATUS_ACTIVE .'
AND `m`.`uid` != ?
@ -88,7 +89,7 @@ class Session extends Db{
}
$stmt = self::buildPlaceholders($fileIds);
$query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*documents_session` WHERE `file_id` IN (' . $stmt .')');
$query = \OCP\DB::prepare('SELECT * FROM ' . self::DB_TABLE . ' WHERE `file_id` IN (' . $stmt .')');
$result = $query->execute($fileIds);
$sessions = $result->fetchAll();
if (!is_array($sessions)){
@ -109,7 +110,7 @@ class Session extends Db{
$query = \OCP\DB::prepare('
SELECT `s`.*, COUNT(`m`.`member_id`) AS `users`
FROM `*PREFIX*documents_session` AS `s`
FROM ' . self::DB_TABLE . ' AS `s`
LEFT JOIN `*PREFIX*documents_member` AS `m` ON `s`.`es_id`=`m`.`es_id`
AND `m`.`status`='. Member::MEMBER_STATUS_ACTIVE .'
WHERE `s`.`file_id` IN (' . $stmt .')
@ -123,6 +124,11 @@ class Session extends Db{
}
return $info;
}
public static function deleteByFileid($fileId){
$query = \OCP\DB::prepare('DELETE FROM ' . self::DB_TABLE . ' WHERE `file_id` = ?');
$query->execute($fileId);
}
protected static function getUniqueSessionId(){
do {

@ -42,18 +42,27 @@ class Storage {
}
/**
* @brief Copy files to trash bin
* @brief Cleanup session data on removing the document
* @param array
*
* This function is connected to the delete signal of OC_Filesystem
* to copy the file to the trash bin
* to delete the related info from database
*/
public static function onDelete($params) {
if ( \OCP\App::isEnabled('files_trashbin') ) {
$path = $params['path'];
Trashbin::move2trash($path);
$info = \OC\Files\Filesystem::getFileInfo($params['path']);
$fileId = @$info['fileid'];
if (!$fileId){
return;
}
$session = Session::getSessionByFileId($fileId);
if (!is_array($session)){
return;
}
Member::deleteBySessionId($session['es_id']);
Op::deleteBySessionId($session['es_id']);
Session::deleteByFileid($fileId);
}
}

Loading…
Cancel
Save