Cleanup session data if original file is removed
This commit is contained in:
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;
|
||||
}
|
||||
|
16
lib/op.php
16
lib/op.php
@ -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…
x
Reference in New Issue
Block a user