diff options
Diffstat (limited to 'lib/fileobserver.php')
-rw-r--r-- | lib/fileobserver.php | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/lib/fileobserver.php b/lib/fileobserver.php new file mode 100644 index 00000000000..08a67521f03 --- /dev/null +++ b/lib/fileobserver.php @@ -0,0 +1,82 @@ +<?php + +/** +* ownCloud +* +* @author Frank Karlitschek +* @copyright 2010 Frank Karlitschek karlitschek@kde.org +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +*/ + +define('OC_FILEACTION_WRITE',2); +define('OC_FILEACTION_READ',4); +define('OC_FILEACTION_DELETE',8); +define('OC_FILEACTION_CREATE',16); +define('OC_FILEACTION_RENAME',32); + +/** + * base class for file observers + */ +class OC_FILEOBSERVER{ + private $mask; + + public function __construct($arguments){} + + public function __get($name){ + switch($name){ + case 'mask': + return $this->mask; + } + } + + public function notify($path,$action){} +} + +/** + * observer that makes automatic backups + */ +class OC_FILEOBSERVER_BACKUP extends OC_FILEOBSERVER{ + private $storage; + + public function __construct($arguments){ + $this->mask=OC_FILEACTION_WRITE+OC_FILEACTION_DELETE+OC_FILEACTION_CREATE+OC_FILEACTION_RENAME; + $this->storage=$arguments['storage']; + } + + public function notify($path,$action,$storage){ + switch($action){ + case OC_FILEACTION_DELETE: + if($storage->is_dir($path)){ + $this->storage->delTree($path); + }else{ + $this->storage->unlink($path); + } + break; + case OC_FILEACTION_CREATE: + if($storage->is_dir($path)){ + $this->storage->mkdir($path); + break; + } + case OC_FILEACTION_WRITE: + $tmpFile=$storage->toTmpFile($path); + $this->storage->fromTmpFile($tmpFile,$path); + break; + case OC_FILEACTION_RENAME: + list($source,$target)=explode('->',$path); + $this->storage->rename($source,$target); + } + } +} +?>
\ No newline at end of file |