From 595b2fbf962b20c71b2ece67c46add57973fd18d Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Thu, 23 Oct 2014 23:08:55 +0300 Subject: [PATCH 1/9] Migrate major controllers to appframework --- ajax/controller.php | 42 ------- ajax/otpoll.php | 7 +- appinfo/app.php | 3 - appinfo/application.php | 66 +++++++++++ appinfo/routes.php | 95 ++++----------- .../documentcontroller.php | 94 +++++++++------ .../sessioncontroller.php | 108 +++++++++++------- .../usercontroller.php | 74 +++++++----- js/documents.js | 18 ++- 9 files changed, 279 insertions(+), 228 deletions(-) delete mode 100644 ajax/controller.php create mode 100644 appinfo/application.php rename ajax/documentController.php => controller/documentcontroller.php (89%) rename ajax/sessionController.php => controller/sessioncontroller.php (67%) rename ajax/userController.php => controller/usercontroller.php (50%) diff --git a/ajax/controller.php b/ajax/controller.php deleted file mode 100644 index 348e6999..00000000 --- a/ajax/controller.php +++ /dev/null @@ -1,42 +0,0 @@ -load($memberId); - if ($member->getIsGuest() || is_null($member->getIsGuest())){ - Controller::preDispatchGuest(false); - } else { - Controller::preDispatch(false); + if (!$member->getIsGuest()){ + \OCP\JSON::checkLoggedIn(); } try { diff --git a/appinfo/app.php b/appinfo/app.php index 331ceeef..a0bc023a 100755 --- a/appinfo/app.php +++ b/appinfo/app.php @@ -35,9 +35,6 @@ OCP\App::addNavigationEntry(array( ); OC::$CLASSPATH['OCA\Documents\Controller'] = 'documents/ajax/controller.php'; -OC::$CLASSPATH['OCA\Documents\DocumentController'] = 'documents/ajax/documentController.php'; -OC::$CLASSPATH['OCA\Documents\SessionController'] = 'documents/ajax/sessionController.php'; -OC::$CLASSPATH['OCA\Documents\UserController'] = 'documents/ajax/userController.php'; //Script for registering file actions OCP\Util::addScript('documents', 'viewer/viewer'); diff --git a/appinfo/application.php b/appinfo/application.php new file mode 100644 index 00000000..25cb3c1c --- /dev/null +++ b/appinfo/application.php @@ -0,0 +1,66 @@ +getContainer(); + + /** + * Controllers + */ + $container->registerService('UserController', function($c) { + return new UserController( + $c->query('AppName'), + $c->query('Request') + ); + }); + $container->registerService('SessionController', function($c) { + return new SessionController( + $c->query('AppName'), + $c->query('Request'), + $c->query('UserId') + ); + }); + $container->registerService('DocumentController', function($c) { + return new DocumentController( + $c->query('AppName'), + $c->query('Request'), + $c->query('CoreConfig'), + $c->query('L10N'), + $c->query('UserId') + ); + }); + + /** + * Core + */ + + $container->registerService('CoreConfig', function($c) { + return $c->query('ServerContainer')->getConfig(); + }); + $container->registerService('L10N', function($c) { + return $c->query('ServerContainer')->getL10N($c->query('AppName')); + }); + $container->registerService('UserId', function() { + return \OCP\User::getUser(); + }); + } +} diff --git a/appinfo/routes.php b/appinfo/routes.php index 4502537c..d2c69f1c 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -3,12 +3,35 @@ * ownCloud - Documents App * * @author Victor Dubiniuk - * @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com + * @copyright 2013-2014 Victor Dubiniuk victor.dubiniuk@gmail.com * * This file is licensed under the Affero General Public License version 3 or * later. */ +namespace OCA\Documents; + +$application = new \OCA\Documents\AppInfo\Application(); +$application->registerRoutes($this, array( + 'routes' => array( + //users + array('name' => 'user#getAvatar', 'url' => 'ajax/user/avatar', 'verb' => 'GET'), + array('name' => 'user#rename', 'url' => 'ajax/user/rename', 'verb' => 'POST'), + array('name' => 'user#disconnect', 'url' => 'ajax/user/disconnect/{memberId}', 'verb' => 'POST'), + array('name' => 'user#disconnectGuest', 'url' => 'ajax/user/disconnectGuest/{memberId}', 'verb' => 'POST'), + //session + array('name' => 'session#joinAsUser', 'url' => 'ajax/session/joinasuser/{fileId}', 'verb' => 'POST'), + array('name' => 'session#joinAsGuest', 'url' => 'ajax/session/joinasguest/{token}', 'verb' => 'POST'), + array('name' => 'session#save', 'url' => 'ajax/session/save', 'verb' => 'POST'), + //documents + array('name' => 'document#create', 'url' => 'ajax/documents/create', 'verb' => 'POST'), + array('name' => 'document#serve', 'url' => 'ajax/genesis/{esId}', 'verb' => array('GET', 'HEAD')), + array('name' => 'document#rename', 'url' => 'ajax/documents/rename/{fileId}', 'verb' => 'POST'), + array('name' => 'document#listAll', 'url' => 'ajax/documents/list', 'verb' => 'GET'), + ) +)); + + /** @var $this \OC\Route\Router */ $this->create('documents_ajax_admin', 'ajax/admin.php') @@ -36,78 +59,8 @@ $this->create('documents_ajax_settings', 'ajax/settings.php') $this->create('documents_index', '') ->get() ->actionInclude('documents/index.php'); - -$this->create('documents_documents_create', 'ajax/documents/create') - ->post() - ->action('\OCA\Documents\DocumentController', 'create') -; -$this->create('documents_genesis', 'ajax/genesis/{es_id}') - ->post() - ->action('\OCA\Documents\DocumentController', 'serve') -; -$this->create('documents_rename', 'ajax/documents/rename/{file_id}') - ->post() - ->action('\OCA\Documents\DocumentController', 'rename') -; -$this->create('documents_genesis', 'ajax/genesis/{es_id}') - ->get() - ->action('\OCA\Documents\DocumentController', 'serve') -; - -$this->create('documents_documents_list', 'ajax/documents/list') - ->get() - ->action('\OCA\Documents\DocumentController', 'listAll') -; - -/** - * Session routes - */ -$this->create('documents_session_joinasuser', 'ajax/session/joinasuser/{file_id}') - ->get() - ->action('\OCA\Documents\SessionController', 'joinAsUser') -; -$this->create('documents_session_joinasuser', 'ajax/session/joinasuser/{file_id}') - ->post() - ->action('\OCA\Documents\SessionController', 'joinAsUser') -; -$this->create('documents_session_joinasguest', 'ajax/session/joinasguest/{token}') - ->get() - ->action('\OCA\Documents\SessionController', 'joinAsGuest') -; -$this->create('documents_session_joinasguest', 'ajax/session/joinasguest/{token}') - ->post() - ->action('\OCA\Documents\SessionController', 'joinAsGuest') -; - -$this->create('documents_session_save', 'ajax/session/save') - ->post() - ->action('\OCA\Documents\SessionController', 'save') -; $this->create('documents_otpoll', 'ajax/otpoll.php') ->post() ->actionInclude('documents/ajax/otpoll.php') ; - -/** - * User routes - */ -$this->create('documents_user_avatar', 'ajax/user/avatar') - ->get() - ->action('\OCA\Documents\UserController', 'sendAvatar') -; - -$this->create('documents_user_rename', 'ajax/user/rename/{member_id}') - ->post() - ->action('\OCA\Documents\UserController', 'rename') -; - -$this->create('documents_user_disconnect', 'ajax/user/disconnect/{member_id}') - ->post() - ->action('\OCA\Documents\UserController', 'disconnectUser') -; - -$this->create('documents_user_disconnectGuest', 'ajax/user/disconnectGuest/{member_id}') - ->post() - ->action('\OCA\Documents\UserController', 'disconnectGuest') -; diff --git a/ajax/documentController.php b/controller/documentcontroller.php similarity index 89% rename from ajax/documentController.php rename to controller/documentcontroller.php index c10bbe93..2ae78500 100644 --- a/ajax/documentController.php +++ b/controller/documentcontroller.php @@ -1,26 +1,48 @@ uid = $uid; + $this->l10n = $l10n; + $this->settings = $settings; + } + + /** + * @NoAdminRequired + */ + public function create(){ + $view = new \OC\Files\View('/' . $this->uid . '/files'); + $dir = $this->settings->getUserValue($this->uid, $this->appName, 'save_path', '/'); if (!$view->is_dir($dir)){ $dir = '/'; } @@ -37,59 +59,60 @@ class DocumentController extends Controller{ if ($view->file_put_contents($path, $content)){ $info = $view->getFileInfo($path); - \OCP\JSON::success(array ('fileid' => $info['fileid']) ); + $response = array( + 'status' => 'success', + 'fileid' => $info['fileid'] + ); } else { - \OCP\JSON::error( - array ('message' => Config::getL10n()->t('Can\'t create document')) + $response = array( + 'status' => 'error', + 'message' => $this->l10n->t('Can\'t create document') ); } + return $response; } - /** + * @NoAdminRequired + * @PublicPage * Process partial/complete file download - * @param array $args - array containing session id as an element with a key es_id */ - public static function serve($args){ + public function serve($esId){ $session = new Db\Session(); - $session->load(@$args['es_id']); - - self::preDispatchGuest(); + $session->load($esId); $filename = $session->getGenesisUrl() ? $session->getGenesisUrl() : ''; $download = new Download($session->getOwner(), $filename); $download->sendResponse(); } - - public static function rename($args){ - self::preDispatch(); - - $fileId = intval(Helper::getArrayValueByKey($args, 'file_id', 0)); - $name = Helper::getArrayValueByKey($_POST, 'name'); + /** + * @NoAdminRequired + */ + public function rename($fileId){ + $name = $this->request->post['name']; $view = \OC\Files\Filesystem::getView(); $path = $view->getPath($fileId); - if (isset($name) && $view->is_file($path) && $view->isUpdatable($path)) { + if ($name && $view->is_file($path) && $view->isUpdatable($path)) { $newPath = dirname($path) . '/' . $name; if ($view->rename($path, $newPath)) { - \OCP\JSON::success(); - return; + return array('status' => 'success'); } } - \OCP\JSON::error(array( - 'message' => Config::getL10n()->t('You don\'t have permission to rename this document') - )); + return array( + 'status' => 'error', + 'message' => $this->l10n->t('You don\'t have permission to rename this document') + ); } /** + * @NoAdminRequired * lists the documents the user has access to (including shared files, once the code in core has been fixed) * also adds session and member info for these files */ - public static function listAll(){ - self::preDispatch(); - + public function listAll(){ $found = Storage::getDocuments(); $fileIds = array(); @@ -117,6 +140,9 @@ class DocumentController extends Controller{ $members[$session['es_id']] = $member->getActiveCollection($session['es_id']); } - \OCP\JSON::success(array('documents' => $documents,'sessions' => $sessions,'members' => $members)); + return array( + 'status' => 'success', 'documents' => $documents,'sessions' => $sessions,'members' => $members + ); } + } diff --git a/ajax/sessionController.php b/controller/sessioncontroller.php similarity index 67% rename from ajax/sessionController.php rename to controller/sessioncontroller.php index 79f35f5a..785df5c5 100644 --- a/ajax/sessionController.php +++ b/controller/sessioncontroller.php @@ -1,86 +1,108 @@ uid = $uid; + } + + /** + * @NoAdminRequired + * @PublicPage + */ + public function joinAsGuest($token, $name){ + $uid = substr($name, 0, 16); try { - $token = Helper::getArrayValueByKey($args, 'token'); $file = File::getByShareToken($token); if ($file->isPasswordProtected() && !$file->checkPassword('')){ throw new \Exception('Not authorized'); } - $session = Db\Session::start($uid, $file); - \OCP\JSON::success($session); + + $response = array_merge( + Db\Session::start($uid, $file), + array('status'=>'success') + ); } catch (\Exception $e){ Helper::warnLog('Starting a session failed. Reason: ' . $e->getMessage()); - \OCP\JSON::error(); - exit(); + $response = array ( + 'status'=>'error' + ); } - } - - public static function joinAsUser($args){ - $uid = self::preDispatch(); - $fileId = Helper::getArrayValueByKey($args, 'file_id'); + return $response; + } + + /** + * @NoAdminRequired + */ + public function joinAsUser($fileId){ try { $view = \OC\Files\Filesystem::getView(); $path = $view->getPath($fileId); if ($view->isUpdatable($path)) { $file = new File($fileId); - $session = Db\Session::start($uid, $file); - \OCP\JSON::success($session); + $response = Db\Session::start($this->uid, $file); } else { $info = $view->getFileInfo($path); - \OCP\JSON::success(array( + $response = array( 'permissions' => $info['permissions'], 'id' => $fileId - )); + ); } - exit(); + $response = array_merge( + $response, + array('status'=>'success') + ); } catch (\Exception $e){ Helper::warnLog('Starting a session failed. Reason: ' . $e->getMessage()); - \OCP\JSON::error(); - exit(); + $response = array ( + 'status'=>'error' + ); } + + return $response; } - /** + * @NoAdminRequired + * @PublicPage * Store the document content to its origin */ - public static function save(){ + public function save(){ try { - $esId = @$_SERVER['HTTP_WEBODF_SESSION_ID']; + $esId = $this->request->server['HTTP_WEBODF_SESSION_ID']; if (!$esId){ throw new \Exception('Session id can not be empty'); } - $memberId = @$_SERVER['HTTP_WEBODF_MEMBER_ID']; + $memberId = $this->request->server['HTTP_WEBODF_MEMBER_ID']; $currentMember = new Db\Member(); $currentMember->load($memberId); - if (is_null($currentMember->getIsGuest()) || $currentMember->getIsGuest()){ - self::preDispatchGuest(); - } else { - $uid = self::preDispatch(); - } //check if member belongs to the session if ($esId != $currentMember->getEsId()){ @@ -88,8 +110,9 @@ class SessionController extends Controller{ } // Extra info for future usage - // $sessionRevision = Helper::getArrayValueByKey($_SERVER, 'HTTP_WEBODF_SESSION_REVISION'); + // $sessionRevision = $this->request->server['HTTP_WEBODF_SESSION_REVISION']; + //NB ouch! New document content is passed as an input stream content $stream = fopen('php://input','r'); if (!$stream){ throw new \Exception('New content missing'); @@ -114,11 +137,13 @@ class SessionController extends Controller{ } catch (\Exception $e){ //File was deleted or unshared. We need to save content as new file anyway //Sorry, but for guests it would be lost :( - if (isset($uid)){ - $view = new \OC\Files\View('/' . $uid . '/files'); + if ($this->uid){ + $view = new \OC\Files\View('/' . $this->uid . '/files'); - $dir = \OCP\Config::getUserValue(\OCP\User::getUser(), 'documents', 'save_path', ''); + $dir = \OCP\Config::getUserValue($this->uid, 'documents', 'save_path', ''); $path = Helper::getNewFileName($view, $dir . 'New Document.odt'); + } else { + throw $e; } } @@ -165,12 +190,13 @@ class SessionController extends Controller{ $view->touch($path); } - \OCP\JSON::success(); + $response = array('status'=>'success'); } catch (\Exception $e){ Helper::warnLog('Saving failed. Reason:' . $e->getMessage()); - //\OCP\JSON::error(array('message'=>$e->getMessage())); \OC_Response::setStatus(500); + $response = array(); } - exit(); + + return $response; } } diff --git a/ajax/userController.php b/controller/usercontroller.php similarity index 50% rename from ajax/userController.php rename to controller/usercontroller.php index c43186b6..27b76edd 100644 --- a/ajax/userController.php +++ b/controller/usercontroller.php @@ -1,49 +1,64 @@ disconnect($memberId, $esId); } - public static function disconnectGuest($args){ - self::preDispatchGuest(); - self::disconnect($args); + /** + * @NoAdminRequired + * @PublicPage + */ + public function disconnectGuest($memberId, $esId){ + return $this->disconnect($memberId, $esId); } - protected static function disconnect($args){ - $esId = @$_POST['esId']; + private function disconnect($memberId, $esId){ $member = new Db\Member(); - $member->loadBy('member_id', $args['member_id']); + $member->loadBy('member_id', $memberId); if ($esId && $member->hasData()){ if ($member->getEsId() === $esId && $member->getStatus() == Db\Member::MEMBER_STATUS_ACTIVE){ - $member->deactivate(array($args['member_id'])); + $member->deactivate(array($memberId)); $op = new Db\Op(); - $op->removeMember($esId, $args['member_id']); + $op->removeMember($esId, $memberId); } } - \OCP\JSON::success(); - exit(); + + return array('status'=>'success'); } - public static function rename($args){ - self::preDispatchGuest(); - - $memberId = Helper::getArrayValueByKey($args, 'member_id'); - $name = Helper::getArrayValueByKey($_POST, 'name'); + /** + * @NoAdminRequired + * @PublicPage + * @param int $memberId + * @param string $name + */ + public function rename($memberId, $name){ $member = new Db\Member(); $member->load($memberId); @@ -59,18 +74,23 @@ class UserController extends Controller{ $op = new Db\Op(); $op->changeNick($member->getEsId(), $memberId, $name); } - \OCP\JSON::success(); + + return array('status'=>'success'); } - /** + * @NoAdminRequired + * @NoCSRFRequired + * @PublicPage + * * Stub - sends a generic avatar */ - public static function sendAvatar(){ - self::preDispatch(false); - $image = new \OC_Image('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P7Xw0wspKVBX09ExNOT1quqHH3788erVHs/q1WvWDA6uWEF+b9DSEolD9C41lYueB+gWTwcd2dav19bW1SnKgQM9PX19XV2iKAg8X1lZWjp6dEHBjTfyvMnkcJSUAEAg0N4O6C7jxxK6tjgcV14JKMro0TffDFRXHz78ySeh0ObNO3e+9lpb23PPrVkzNHT33ZHAR8twm5jhOnZGcY4E0KlGl7+za3Jy7PjxgwcPHx4crK4WBJ7fvfuKKzSN41jWYHA4xo1bsYLjeD4hITcXoIsoQM9qnsuEPpMIAqnS2+3TpgGalpV1881Ad3cwKEmatn37P//53HOh0LvvfvRRZeXOnWvWrF8fCDz+uM/n95OgMxzIaFcTfT1ax54J5+hJ6VQ72ww4fUbQNnFC8fEVFTNmCMLSpTfcMHeuxXLrrUVFY8dWVPD8hAmFhddeazQmJiYkuFwAwwwNNTYCQCBAjqXQqEZRyO8GaMZNysKAIFitAGAy2e0AYLFkZwOhEMdZrUBbW2trVZWq7t9/6ND27bJcU3Po0MmTdXXvvLN5czC4dm1LS3u7qpLMAKBxEzGJ09vROtbnsQ/xnudSRk9XRgMcTUistq4FgecBi6WkZOJEnp81a/bsGTMMhoULc3JycqzW3Nz0dLt90iRFcbnS0vLzDYaUlKSk9HSOMxgMBlIOJwezFIUU4/x+n6+vT9M6Onp6mptDoZaWzs7aWk1zu93uU6dEsaqqujoY3LNn9+69e2X544/b2zs7VZWeaKIAUk2BiwVw9P2x7ostFxhLRM8I6nqi2+En/IdrU02JFQRCjNmcm5uVxbLFxRkZo0axbHa2y5WWxnFZWQkJVivLJiYaDDyvaUajzxcIAD5fd3dvr6p2dra3d3UpSnMzcYFHj5I6PV32w39TE64p4LF0NOCx9MiPrV/kYC4WIacDPHw78hRp5G5yeHukwWi0r6a+OFpHHqDRATwbMdTCzz8P+JF+I0YBjDxOGxvwaB3rMGKsE2ixopBYRITvModr+jm1bNq+OGEB8LP5mWo0sCO1/FgzIBqgs0Un555AXZbLclkuy3+B/B+iYBQdKn9hfAAAACV0RVh0Y3JlYXRlLWRhdGUAMjAwOS0xMS0yOFQyMjo0NDo1Ni0wNzowMGFOGmwAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTAtMDItMjBUMjM6MjY6MjQtMDc6MDAuw1DWAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEwLTAxLTExVDA4OjU3OjQzLTA3OjAwwqyWbAAAADJ0RVh0TGljZW5zZQBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1B1YmxpY19kb21haW4//erPAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDA5LTExLTI4VDIyOjQ0OjU2LTA3OjAwPv9sWAAAABl0RVh0U291cmNlAFRhbmdvIEljb24gTGlicmFyeVTP7YIAAAA6dEVYdFNvdXJjZV9VUkwAaHR0cDovL3RhbmdvLmZyZWVkZXNrdG9wLm9yZy9UYW5nb19JY29uX0xpYnJhcnm8yK3WAAAAcnRFWHRzdmc6YmFzZS11cmkAZmlsZTovLy9tbnQvb2dyZS9wcml2eS9kb2NzL2ljb25zL29wZW5faWNvbl9saWJyYXJ5LWRldmVsL2ljb25zL3RhbmdvL3N2ZzJwbmcvZW1vdGVzL2ZhY2Utc21pbGUtMi5zdmerBUU8AAAAAElFTkSuQmCC'); + public function getAvatar(){ + $image = new \OC_Image('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'); \OC_Util::obEnd(); echo $image->show(); } + } diff --git a/js/documents.js b/js/documents.js index 377c28ca..e443c1b8 100644 --- a/js/documents.js +++ b/js/documents.js @@ -487,11 +487,17 @@ var documentsMain = { }, changeNick: function(memberId, name, node){ - var url = OC.generateUrl('apps/documents/ajax/user/rename/{member_id}', {member_id: memberId}); - $.post( - url, - { name : name }, - function(result) { + var url = OC.generateUrl('apps/documents/ajax/user/rename'); + $.ajax({ + url: url, + type: "POST", + data: JSON.stringify({ + name : name, + memberId : memberId + }), + contentType: 'application/json; charset=utf-8', + dataType:"json", + success: function(result) { if (result && result.status === 'error') { if (result.message){ documentsMain.UI.notify(result.message); @@ -499,7 +505,7 @@ var documentsMain = { return; } } - ); + }); }, onNickChange: function(memberId, fullNameNode){ From 33dfec880466a2bb646641f2940636b3cc28124f Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Sun, 26 Oct 2014 15:47:56 +0300 Subject: [PATCH 2/9] Migrate settings controllers to appframework --- ajax/admin.php | 70 ------------------ ajax/personal.php | 40 ----------- ajax/settings.php | 30 -------- appinfo/app.php | 2 - appinfo/application.php | 10 +++ appinfo/routes.php | 16 ++--- controller/documentcontroller.php | 4 +- controller/settingscontroller.php | 116 ++++++++++++++++++++++++++++++ js/settings.js | 2 +- lib/config.php | 36 ++++++++++ 10 files changed, 170 insertions(+), 156 deletions(-) delete mode 100644 ajax/admin.php delete mode 100644 ajax/personal.php delete mode 100644 ajax/settings.php create mode 100644 controller/settingscontroller.php diff --git a/ajax/admin.php b/ajax/admin.php deleted file mode 100644 index 524b9780..00000000 --- a/ajax/admin.php +++ /dev/null @@ -1,70 +0,0 @@ - - array('message' => Config::getL10n()->t('Format filter server is down or misconfigured') ) - )); - exit(); - } - } else { - $targetFilter = 'odt:writer8'; - $targetExtension = 'odt'; - $input = '0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAAKQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////7///8hAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAAP7///8iAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAA/v///yoAAAD+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAQAAAP7////+////BAAAAAUAAAAGAAAABwAAAAgAAAD+////CgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAP7///9FAAAA/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkLURva3VtZW50AAoAAABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAAAQACAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAAAUAQAACQAAAAEAAABQAAAAAgAAAFgAAAAEAAAAvAAAAAgAAADIAAAACQAAANgAAAAKAAAA5AAAAAsAAADwAAAADAAAAPwAAAANAAAACAEAAAIAAADp/QAAHgAAAFwAAADQkNCy0YLQvtC80LDRgtC40LfQuNGA0L7QstCw0L3QvdCw0Y8g0LHQsNC90LrQvtCy0YHQutCw0Y8g0YHQuNGB0YLQtdC80LAgwqvQodCiLdCR0LDQvdC6wrsgAB4AAAADAAAAUEMAAB4AAAAHAAAAZnN2Y3h2AAAeAAAAAgAAADMAAABAAAAAAAAAAAAAAABAAAAAABzeaCTYywFAAAAAABzXRbJzzAFAAAAAwJREgxIAigAKAAEAWwAPAAIAAAAAAAAAegAAEPH/AgB6AAAABgBOAG8AcgBtAGEAbAAAACwAAAASZGgBAQADJANhJAMxJABehAAAXYQAAGCExQJBJAAqJAE3JAE1JAEzJAEvAEIqAE9KBABRSgQAQ0oYAG1IGQRzSBkEUEoEAF5KBABhShQAX0gBBG5IBAh0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AwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAyADQAXwA4ADMANAAxADAANgAwADMAOAAZAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2AF8AOAAzADQAMQAwADYAMAAzADgAGQBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADgAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMANABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADQAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwA2AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAyADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADIAMgBfADgAMwA0ADEAMAA2ADAAMwA4ACgAXw -AlAEQAMAAlAEEAMAAlAEQAMAAlAEIAOAAlAEQAMQAlADgAMQAlAEQAMQAlADgAMwAlAEQAMAAlAEIARAAlAEQAMAAlAEIARQAlAEQAMAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADIANABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMgA2AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAyADgAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADMAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwAyAF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAzADQAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADEAOABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwA4AF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMQAlADgAMAAyADkAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQA0ADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADQAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANAA0AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQA0ADYAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADQAOABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANQAwAF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMAAlAEIAMAA0ADEAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAwADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADgAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADAAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANQAyAF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAwADQAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADAANgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMAA4AF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMQAlADgAMwAxADMAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAxADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADEAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMQA0AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAxADYAXwA4ADMANAAxADAANgAwADMAOAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAOAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAADgAAAAEAAQAAAAEAAAD/D/8P/w//D/8P/w//D/8P/ -w8AAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAQAABehDcCYIQAABXGBQABNwIGAgAAAC4AAQAAAAAAAQMAAAAAAAAAAAAAAAAAAAAAABAAAF6EOAJghAAAFcYFAAE4AgYEAAAALgABAC4AAQAAAAAAAQMFAAAAAAAAAAAAAAAAAAAAABAAAF6ENwJghAAAFcYFAAE3AgYGAAAALgABAC4AAgAuAAEAAAAAAAEDBQcAAAAAAAAAAAAAAAAAAAAQAABehMAGYIR4/RXGBQABwAYGCAAAAC4AAQAuAAIALgADAC4AAQAAAAAAAQMFBwkAAAAAAAAAAAAAAAAAABAAAF6EuAhghOj8FcYFAAG4CAYKAAAALgABAC4AAgAuAAMALgAEAC4AAQAAAAAAAQMFBwkLAAAAAAAAAAAAAAAAABAAAF6EsApghFj8FcYFAAGwCgYMAAAALgABAC4AAgAuAAMALgAEAC4ABQAuAAEAAAAAAAEDBQcJCw0AAAAAAAAAAAAAAAAQAABehKgMYITI+xXGBQABqAwGDgAAAC4AAQAuAAIALgADAC4ABAAuAAUALgAGAC4AAQAAAAAAAQMFBwkLDQ8AAAAAAAAAAAAAABAAAF6EoA5ghDj7FcYFAAGgDgYQAAAALgABAC4AAgAuAAMALgAEAC4ABQAuAAYALgAHAC4AAQAAAAAAAQMFBwkLDQ8RAAAAAAAAAAAAABAAAF6E4BBghGD6FcYFAAHgEAYSAAAALgABAC4AAgAuAAMALgAEAC4ABQAuAAYALgAHAC4ACAAuAAEAAAABAAAAAAAAAAAAAAAAAAAA////////AQAAAAAAAAAAACIAAAAAAAAAAhAAAAAAAAAAIgAAAFAAAAgAAAAADQAAAEcWkAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgAAADUWkAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTAHkAbQBiAG8AbAAAADMmkAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAHIAaQBhAGwAAABpFpABAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATABpAGIAZQByAGEAdABpAG8AbgAgAFMAZQByAGkAZgAAAFQAaQBtAGUAcwAgAE4AZQB3ACAAUgBvAG0AYQBuAAAARxaQAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAaQBtAGUAcwAgAE4AZQB3ACAAUgBvAG0AYQBuAAAATxaQAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAaQBtAGUAcwAgAE4AZQB3ACAAUgBvAG0AYQBuACAAQwBZAFIAAAA/NJABAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQwBvAHUAcgBpAGUAcgAgAE4AZQB3AAAAOwaQAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcAaQBuAGcAZABpAG4AZwBzAAAAUyaQAQEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwAaQBiAGUAcgBhAHQAaQBvAG4AIABTAGEAbgBzAAAAQQByAGkAYQBsAAAASwaQAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcAZQBuAFEAdQBhAG4AWQBpACAAWgBlAG4AIABIAGUAaQAAADkGkAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGAHIAZQBlAFMAYQBuAHMAAAA5JJABAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARgByAGUAZQBTAGEAbgBzAAAANxaQAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMAYQBtAGIAcgBpAGEAAABCAAQAAQiNGAAAxQIAAGgBAAAAAFJ8+YaBRCdHlgzzRgEAAAAAAAIAAAAFAAAAAQACAAAABACDkAIAAAACAAAABQAAAAEAAgAAAAIAAAAAAAAAJwMAIAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9ms8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7KUBAU0gCQQAAPASvwAAAAAAADAAAAAAAAgAAEQIAAAOAENhb2xhbjgwAAAAAAAAAAAAAAAAAAAAAAAACQQWAKgOAAAAAAAAAAAAAA4AAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAANAAAA//8PAAUAAAABAAAA//8PAAYAAAABAAAA//8PAAAAAAAAAAAAAAAAAAAAAACIAAAAAACyGQAAAAAAALIZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIaAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2GgAAaAAAAJ4aAAAMAAAAqhoAAAwAAAAAAAAAAAAAAKEzAACAAwAAthoAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQcAABcEAAAQC0AAHQCAAC0LwAAPAEAAIAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITcAAGICAAAAAAAAAAAAAIwzAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCHAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiGgAA4AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAshkAADgAAADMGgAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8DAAAB4AAABgMwAAGAAAAAAAAAAAAAAA6hkAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeDMAAAgAAAAAAAAAAAAAAIAzAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AGUAcwB0AAwAEwAgAFQATwBDACAAFAAVAAwACAANAA0ADQANAA0AEwAgAFAAQQBHAEUAIAAUADEAFQANAA0ADQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAKCAAADAgAABYIAAAYCAAAGggAABwIAAAeCAAAKAgAACoIAAA2CAAAOAgAADoIAAA8CAAAQggAAAD9AP39APgA8e7x7vEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDBKaQAADTBKaQADagAAAABVCAEJA2oAAAAAVQgBA1UIAQAOAAgAAAoIAAAcCAAAIAgAACIIAAAkCAAAJggAACgIAAA+CAAAQAgAAEIIAABECAAA+QAAAAAAAAAAAAAAAPcAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA8wAAAAAAAAAAAAAAAPEAAAAAAAAAAAAAAADvAAAAAAAAAAAAAAAA7QAAAAAAAAAAAAAAAOsAAAAAAAAAAAAAAADpAAAAAAAAAAAAAAAA5wAAAAAAAAAAAAAAAOUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAYAAAAEAAAABAAAAAQAAAAEAAAABgAAAAQAAAAV0AA3GBQAB6CkKAAs0AB+w0C8gsOA9IbBuBCKwaAIjkMUCGLDQAiSQUwMyUAAAMZBoATBwAAAAADNQAAAoMgAOMAA3AB+w0C8gsOA9IbBuBCKwaAIjkMUCGLDQAiSQUwMyUAAAMZBoATBwAAAAADNQAAAoMgAoMgAJMAA3AB+w0C8gsOA9IbBuBCKwaAIjkMUCGLDQAiSQUwMyUAAAMZBoATBwAAAAADNQAAAoMgAOMAAJMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/ -wAAAQACAAAAAAAAAAAAAAAAAAAAAAACAAAAAtXN1ZwuGxCTlwgAKyz5rkQAAAAF1c3VnC4bEJOXCAArLPmuXAAAABgAAAABAAAAAQAAABAAAAACAAAA6f0AABgAAAABAAAAAQAAABAAAAACAAAA6f0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgBvAG8AdAAgAEUAbgB0AHIAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYABQD//////////wEAAAAGCQIAAAAAAMAAAAAAAABGAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAgBEAAAAAAAABAEMAbwBtAHAATwBiAGoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgACAAIAAAAEAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqAAAAAAAAAAEATwBsAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIA/////wMAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABQAAAAAAAAAMQBUAGEAYgBsAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAgD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAgzkAAAAAAAAFAFMAdQBtAG0AYQByAHkASQBuAGYAbwByAG0AYQB0AGkAbwBuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAUAAAAHAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAABEAQAAAAAAAFcAbwByAGQARABvAGMAdQBtAGUAbgB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAIABgAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAKgOAAAAAAAATwBiAGoAZQBjAHQAUABvAG8AbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAQD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAFAEQAbwBjAHUAbQBlAG4AdABTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAOAACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAB0AAAAAAAAAA=='; - - $infile = \OCP\Files::tmpFile(); - $outdir = \OCP\Files::tmpFolder(); - $outfile = $outdir . '/' . basename($infile) . '.' . $targetExtension; - $cmd = Helper::findOpenOffice(); - - $params = ' --headless --convert-to ' . escapeshellarg($targetFilter) . ' --outdir ' - . escapeshellarg($outdir) - . ' --writer '. escapeshellarg($infile) - . ' -env:UserInstallation=file://' . escapeshellarg(get_temp_dir()) . ' 2>&1' - ; - file_put_contents($infile, $input); - - $result = shell_exec($cmd . $params); - $exists = file_exists($outfile); - - if (!$exists){ - Helper::warnLog('Conversion failed. Raw output:' . $result); - \OCP\JSON::error(array( 'data'=> - array('message' => Config::getL10n()->t('Conversion failed. Check log for details.') ) - )); - exit(); - } else { - unlink($outfile); - } - } - - \OCP\JSON::success(array( 'data'=>array('message'=>Config::getL10n()->t('Saved')) )); -} catch (\Exception $e){ - \OCP\JSON::error(array( 'data'=> - array('message' => $e->getMessage() ) - )); -} diff --git a/ajax/personal.php b/ajax/personal.php deleted file mode 100644 index bcb846a3..00000000 --- a/ajax/personal.php +++ /dev/null @@ -1,40 +0,0 @@ - array('message'=> $l->t('An error occurred while changing directory.')) - ) - ); - } - } - \OCP\Config::setUserValue(\OCP\User::getUser(), 'documents', 'save_path', $savePath); - \OCP\JSON::success( - array( - 'data' => array('message'=> $l->t('Directory saved successfully.')) - ) - ); - exit(); -} - -exit(); diff --git a/ajax/settings.php b/ajax/settings.php deleted file mode 100644 index 385cd40b..00000000 --- a/ajax/settings.php +++ /dev/null @@ -1,30 +0,0 @@ - \OCP\Config::getAppValue('documents', 'unstable', 'false') - )); -} -exit(); \ No newline at end of file diff --git a/appinfo/app.php b/appinfo/app.php index a0bc023a..76af5487 100755 --- a/appinfo/app.php +++ b/appinfo/app.php @@ -34,8 +34,6 @@ OCP\App::addNavigationEntry(array( 'name' => OCA\Documents\Config::getL10n()->t('Documents')) ); -OC::$CLASSPATH['OCA\Documents\Controller'] = 'documents/ajax/controller.php'; - //Script for registering file actions OCP\Util::addScript('documents', 'viewer/viewer'); diff --git a/appinfo/application.php b/appinfo/application.php index 25cb3c1c..ce87db53 100644 --- a/appinfo/application.php +++ b/appinfo/application.php @@ -16,6 +16,7 @@ use \OCP\AppFramework\App; use \OCA\Documents\Controller\UserController; use \OCA\Documents\Controller\SessionController; use \OCA\Documents\Controller\DocumentController; +use \OCA\Documents\Controller\SettingsController; class Application extends App { public function __construct (array $urlParams = array()) { @@ -48,6 +49,15 @@ class Application extends App { $c->query('UserId') ); }); + $container->registerService('SettingsController', function($c) { + return new SettingsController( + $c->query('AppName'), + $c->query('Request'), + $c->query('CoreConfig'), + $c->query('L10N'), + $c->query('UserId') + ); + }); /** * Core diff --git a/appinfo/routes.php b/appinfo/routes.php index d2c69f1c..a6ef87c5 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -28,17 +28,17 @@ $application->registerRoutes($this, array( array('name' => 'document#serve', 'url' => 'ajax/genesis/{esId}', 'verb' => array('GET', 'HEAD')), array('name' => 'document#rename', 'url' => 'ajax/documents/rename/{fileId}', 'verb' => 'POST'), array('name' => 'document#listAll', 'url' => 'ajax/documents/list', 'verb' => 'GET'), + //settings + array('name' => 'settings#savePersonal', 'url' => 'ajax/personal.php', 'verb' => 'POST'), + array('name' => 'settings#setUnstable', 'url' => 'ajax/config/unstable', 'verb' => 'POST'), + array('name' => 'settings#setConverter', 'url' => 'ajax/admin.php', 'verb' => 'POST'), ) )); /** @var $this \OC\Route\Router */ - -$this->create('documents_ajax_admin', 'ajax/admin.php') - ->actionInclude('documents/ajax/admin.php'); - $this->create('documents_ajax_download', 'ajax/download.php') - ->actionInclude('documents/ajax/admin.php'); + ->actionInclude('documents/ajax/download.php'); $this->create('documents_ajax_mimes', 'ajax/mimes.php') ->actionInclude('documents/ajax/mimes.php'); @@ -46,12 +46,6 @@ $this->create('documents_ajax_mimes', 'ajax/mimes.php') $this->create('documents_ajax_otpoll', 'ajax/otpoll.php') ->actionInclude('documents/ajax/otpoll.php'); -$this->create('documents_ajax_personal', 'ajax/personal.php') - ->actionInclude('documents/ajax/personal.php'); - -$this->create('documents_ajax_settings', 'ajax/settings.php') - ->actionInclude('documents/ajax/settings.php'); - /** * Document routes */ diff --git a/controller/documentcontroller.php b/controller/documentcontroller.php index 2ae78500..7bf6e422 100644 --- a/controller/documentcontroller.php +++ b/controller/documentcontroller.php @@ -66,7 +66,7 @@ class DocumentController extends Controller{ } else { $response = array( 'status' => 'error', - 'message' => $this->l10n->t('Can\'t create document') + 'message' => (string) $this->l10n->t('Can\'t create document') ); } return $response; @@ -103,7 +103,7 @@ class DocumentController extends Controller{ } return array( 'status' => 'error', - 'message' => $this->l10n->t('You don\'t have permission to rename this document') + 'message' => (string) $this->l10n->t('You don\'t have permission to rename this document') ); } diff --git a/controller/settingscontroller.php b/controller/settingscontroller.php new file mode 100644 index 00000000..9f459bf0 --- /dev/null +++ b/controller/settingscontroller.php @@ -0,0 +1,116 @@ +uid = $uid; + $this->settings = $settings; + $this->l10n = $l10n; + } + + /** + * @NoAdminRequired + */ + public function savePersonal($savePath){ + if (is_null($savePath)){ + $savePath = '/'; + } + $status = true; + if (\OC\Files\Filesystem::file_exists($savePath) === false ){ + $status = \OC\Files\Filesystem::mkdir($savePath); + } + + if ($status){ + $this->settings->setUserValue($this->uid, $this->appName, 'save_path', $savePath); + $response = array( + 'status' => 'success', + 'data' => array('message'=> $this->l10n->t('Directory saved successfully.')) + ); + } else { + $response = array( + 'status' => 'error', + 'data' => array( + 'message'=> $this->l10n->t('An error occurred while changing directory.') + ) + ); + } + return $response; + } + + public function setUnstable($unstable){ + if (!is_null($unstable)){ + $this->settings->setAppValue($this->appName, 'unstable', $unstable); + } + return array('status' => 'success'); + } + + public function setConverter($converter, $url){ + if (!is_null($converter)){ + $this->settings->setAppValue($this->appName, 'converter', $converter); + } + + if (!is_null($url)){ + $this->settings->setAppValue($this->appName, 'converter_url', $url); + } + + $response = array( + 'status' => 'success', + 'data' => array('message' => (string) $this->l10n->t('Saved')) + ); + + if ($this->settings->getAppValue($this->appName, 'converter', 'local') != 'local'){ + if (!Converter::checkConnection()){ + Helper::warnLog('Bad response from Format Filter Server'); + $response = array( + 'status' => 'error', + 'data'=> + array('message' => (string) $this->l10n->t('Format filter server is down or misconfigured') ) + ); + } + } else { + try { + if (!Config::testConversion()){ + Helper::warnLog('Conversion failed. Raw output:' . $result); + $response = array( + 'status' => 'error', + 'data'=> + array('message' => (string) $this->l10n->t('Conversion failed. Check log for details.') ) + ); + } + } catch (\Exception $e){ + $response = array( + 'status' => 'error', + 'data'=> array('message' => $e->getMessage()) + ); + } + } + + return $response; + } +} diff --git a/js/settings.js b/js/settings.js index 399189a3..c071e109 100644 --- a/js/settings.js +++ b/js/settings.js @@ -5,7 +5,7 @@ $(document).ready(function(){ var data = { unstable : $('#webodf-unstable').attr('checked')==="checked" }; - $.post(OC.filePath('documents', 'ajax', 'settings.php'), data, documentsSettings.afterSave); + $.post(OC.generateUrl('apps/documents/ajax/config/unstable'), data, documentsSettings.afterSave); }, afterSave : function(){ documentsMain.useUnstable = $('#webodf-unstable').attr('checked')==="checked" diff --git a/lib/config.php b/lib/config.php index 52ee7825..0ff8c469 100644 --- a/lib/config.php +++ b/lib/config.php @@ -15,6 +15,42 @@ namespace OCA\Documents; class Config { const APP_NAME = 'documents'; + public static function testConversion(){ + $targetFilter = 'odt:writer8'; + $targetExtension = 'odt'; + $input = '0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAAKQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////7///8hAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAAP7///8iAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAA/v///yoAAAD+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAQAAAP7////+////BAAAAAUAAAAGAAAABwAAAAgAAAD+////CgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAP7///9FAAAA/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkLURva3VtZW50AAoAAABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAAAQACAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAAAUAQAACQAAAAEAAABQAAAAAgAAAFgAAAAEAAAAvAAAAAgAAADIAAAACQAAANgAAAAKAAAA5AAAAAsAAADwAAAADAAAAPwAAAANAAAACAEAAAIAAADp/QAAHgAAAFwAAADQkNCy0YLQvtC80LDRgtC40LfQuNGA0L7QstCw0L3QvdCw0Y8g0LHQsNC90LrQvtCy0YHQutCw0Y8g0YHQuNGB0YLQtdC80LAgwqvQodCiLdCR0LDQvdC6wrsgAB4AAAADAAAAUEMAAB4AAAAHAAAAZnN2Y3h2AAAeAAAAAgAAADMAAABAAAAAAAAAAAAAAABAAAAAABzeaCTYywFAAAAAABzXRbJzzAFAAAAAwJREgxIAigAKAAEAWwAPAAIAAAAAAAAAegAAEPH/AgB6AAAABgBOAG8AcgBtAGEAbAAAACwAAAASZGgBAQADJANhJAMxJABehAAAXYQAAGCExQJBJAAqJAE3JAE1JAEzJAEvAEIqAE9KBABRSgQAQ0oYAG1IGQRzSBkEUEoEAF5KBABhShQAX0gBBG5IBAh0SAQIACoAARABAAIAKgAAAAkASABlAGEAZABpAG4AZwAgADEAAAACAAEABABDSiAAQAACEAEAAgBAAAAACQBIAGUAYQBkAGkAbgBnACAAMgAAABMAAgBAJgEKJgELRgEACiYBC0YBAAAIAENKHABhShwAOAADEAEAAgA4AAAACQBIAGUAYQBkAGkAbgBnACAAMwAAABMAAwBAJgIKJgILRgEACiYCC0YBAAAAAEgABBABAAIASAAAAAkASABlAGEAZABpAG4AZwAgADQAAAAcAAQAQCYDCiYDC0YBAAomAwtGAQADJAFhJAEGJAEIAENKJABLSAEAUAAFEAEAAgBQAAAACQBIAGUAYQBkAGkAbgBnACAANQAAABcABQADJAFhJAFehAAAXYQAAGCEAAAGJAEAEwBPSgUAUUoFAENKIAA1CAFeSgUAADoABhABAAIAOgAAAAkASABlAGEAZABpAG4AZwAgADYAAAAR +AA +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gAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAyADQAXwA4ADMANAAxADAANgAwADMAOAAZAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2AF8AOAAzADQAMQAwADYAMAAzADgAGQBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADgAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMANABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADQAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwA2AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAyADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADIAMgBfADgAMwA0ADEAMAA2ADAAMwA4ACgAXw +AlAEQAMAAlAEEAMAAlAEQAMAAlAEIAOAAlAEQAMQAlADgAMQAlAEQAMQAlADgAMwAlAEQAMAAlAEIARAAlAEQAMAAlAEIARQAlAEQAMAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADIANABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMgA2AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAyADgAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADMAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwAyAF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAzADQAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADEAOABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwA4AF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMQAlADgAMAAyADkAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQA0ADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADQAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANAA0AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQA0ADYAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADQAOABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANQAwAF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMAAlAEIAMAA0ADEAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAwADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADgAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADAAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANQAyAF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAwADQAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADAANgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMAA4AF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMQAlADgAMwAxADMAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAxADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADEAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAX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PAEAAIAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITcAAGICAAAAAAAAAAAAAIwzAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCHAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiGgAA4AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAshkAADgAAADMGgAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8DAAAB4AAABgMwAAGAAAAAAAAAAAAAAA6hkAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeDMAAAgAAAAAAAAAAAAAAIAzAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AGUAcwB0AAwAEwAgAFQATwBDACAAFAAVAAwACAANAA0ADQANAA0AEwAgAFAAQQBHAEUAIAAUADEAFQANAA0ADQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAKCAAADAgAABYIAAAYCAAAGggAABwIAAAeCAAAKAgAACoIAAA2CAAAOAgAADoIAAA8CAAAQggAAAD9AP39APgA8e7x7vEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDBKaQAADTBKaQADagAAAABVCAEJA2oAAAAAVQgBA1UIAQAOAAgAAAoIAAAcCAAAIAgAACIIAAAkCAAAJggAACgIAAA+CAAAQAgAAEIIAABECAAA+QAAAAAAAAAAAAAAAPcAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA8wAAAAAAAAAAAAAAAPEAAAAAAAAAAAAAAADvAAAAAAAAAAAAAAAA7QAAAAAAAAAAAAAAAOsAAAAAAAAAAAAAAADpAAAAAAAAAAAAAAAA5wAAAAAAAAAAAAAAAOUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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'; + + $infile = \OCP\Files::tmpFile(); + $outdir = \OCP\Files::tmpFolder(); + $outfile = $outdir . '/' . basename($infile) . '.' . $targetExtension; + $cmd = Helper::findOpenOffice(); + + $params = ' --headless --convert-to ' . escapeshellarg($targetFilter) . ' --outdir ' + . escapeshellarg($outdir) + . ' --writer '. escapeshellarg($infile) + . ' -env:UserInstallation=file://' . escapeshellarg(get_temp_dir()) . ' 2>&1' + ; + file_put_contents($infile, $input); + + $result = shell_exec($cmd . $params); + $exists = file_exists($outfile); + + if (!$exists){ + return false; + } else { + unlink($outfile); + } + return true; + } + public static function getL10n(){ return \OCP\Util::getL10N(self::APP_NAME); } From 45c30440b808c1c9d6c07563cba8fddcb19ec279 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Tue, 28 Oct 2014 01:59:49 +0300 Subject: [PATCH 3/9] Move download to documentcontroller --- ajax/download.php | 30 ------------------------------ appinfo/routes.php | 4 +--- controller/documentcontroller.php | 20 ++++++++++++++++++++ js/viewer/viewer.js | 3 ++- 4 files changed, 23 insertions(+), 34 deletions(-) delete mode 100644 ajax/download.php diff --git a/ajax/download.php b/ajax/download.php deleted file mode 100644 index 0146514c..00000000 --- a/ajax/download.php +++ /dev/null @@ -1,30 +0,0 @@ -getId()); - $genesis = new Genesis($file); - $fullPath = $genesis->getPath(); - } else { - $fullPath = '/files' . $path; - } - $download = new Download(\OCP\User::getUser(), $fullPath); - $download->sendResponse(); -} -exit(); \ No newline at end of file diff --git a/appinfo/routes.php b/appinfo/routes.php index a6ef87c5..f023407d 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -28,6 +28,7 @@ $application->registerRoutes($this, array( array('name' => 'document#serve', 'url' => 'ajax/genesis/{esId}', 'verb' => array('GET', 'HEAD')), array('name' => 'document#rename', 'url' => 'ajax/documents/rename/{fileId}', 'verb' => 'POST'), array('name' => 'document#listAll', 'url' => 'ajax/documents/list', 'verb' => 'GET'), + array('name' => 'document#download', 'url' => 'ajax/download.php', 'verb' => array('GET', 'HEAD')), //settings array('name' => 'settings#savePersonal', 'url' => 'ajax/personal.php', 'verb' => 'POST'), array('name' => 'settings#setUnstable', 'url' => 'ajax/config/unstable', 'verb' => 'POST'), @@ -37,9 +38,6 @@ $application->registerRoutes($this, array( /** @var $this \OC\Route\Router */ -$this->create('documents_ajax_download', 'ajax/download.php') - ->actionInclude('documents/ajax/download.php'); - $this->create('documents_ajax_mimes', 'ajax/mimes.php') ->actionInclude('documents/ajax/mimes.php'); diff --git a/controller/documentcontroller.php b/controller/documentcontroller.php index 7bf6e422..ae671ec8 100644 --- a/controller/documentcontroller.php +++ b/controller/documentcontroller.php @@ -21,6 +21,8 @@ use \OCA\Documents\Db; use \OCA\Documents\Helper; use \OCA\Documents\Storage; use \OCA\Documents\Download; +use \OCA\Documents\File; +use OCA\Documents\Genesis; class DocumentController extends Controller{ @@ -86,6 +88,24 @@ class DocumentController extends Controller{ $download->sendResponse(); } + /** + * @NoAdminRequired + */ + public function download($path){ + if ($path){ + if (\OC\Files\Filesystem::getMimeType($path) !== \OCA\Documents\Filter\Office::NATIVE_MIMETYPE){ + $fileInfo = \OC\Files\Filesystem::getFileInfo($path); + $file = new File($fileInfo->getId()); + $genesis = new Genesis($file); + $fullPath = $genesis->getPath(); + } else { + $fullPath = '/files' . $path; + } + $download = new Download($this->uid, $fullPath); + $download->sendResponse(); + } + } + /** * @NoAdminRequired */ diff --git a/js/viewer/viewer.js b/js/viewer/viewer.js index 12aa7e35..ef00d014 100644 --- a/js/viewer/viewer.js +++ b/js/viewer/viewer.js @@ -63,7 +63,8 @@ var odfViewer = { } else { //Public page, files app, etc var dirName = $('#dir').val()!='/' ? $('#dir').val() + '/' : '/'; - var location = OC.filePath('documents', 'ajax', 'download.php') + '?path=' + dirName + encodeURIComponent(filename); + var location = OC.filePath('documents', 'ajax', 'download.php') + '?path=' + dirName + encodeURIComponent(filename) + + '&requesttoken=' + oc_requesttoken; OC.addStyle('documents', '3rdparty/webodf/editor'); } From 815194cddb294b6ccd6e42f3221b01bb0fe4287d Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Tue, 28 Oct 2014 18:50:58 +0300 Subject: [PATCH 4/9] Move supported mimes to settings controller --- ajax/mimes.php | 19 ------------------- appinfo/routes.php | 4 +--- controller/settingscontroller.php | 12 ++++++++++++ js/viewer/viewer.js | 2 +- 4 files changed, 14 insertions(+), 23 deletions(-) delete mode 100644 ajax/mimes.php diff --git a/ajax/mimes.php b/ajax/mimes.php deleted file mode 100644 index 2031a040..00000000 --- a/ajax/mimes.php +++ /dev/null @@ -1,19 +0,0 @@ - Filter::getAll()) -); - -exit(); \ No newline at end of file diff --git a/appinfo/routes.php b/appinfo/routes.php index f023407d..fd723f42 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -33,14 +33,12 @@ $application->registerRoutes($this, array( array('name' => 'settings#savePersonal', 'url' => 'ajax/personal.php', 'verb' => 'POST'), array('name' => 'settings#setUnstable', 'url' => 'ajax/config/unstable', 'verb' => 'POST'), array('name' => 'settings#setConverter', 'url' => 'ajax/admin.php', 'verb' => 'POST'), + array('name' => 'settings#getSupportedMimes', 'url' => 'ajax/mimes.php', 'verb' => 'GET'), ) )); /** @var $this \OC\Route\Router */ -$this->create('documents_ajax_mimes', 'ajax/mimes.php') - ->actionInclude('documents/ajax/mimes.php'); - $this->create('documents_ajax_otpoll', 'ajax/otpoll.php') ->actionInclude('documents/ajax/otpoll.php'); diff --git a/controller/settingscontroller.php b/controller/settingscontroller.php index 9f459bf0..0dddd0d7 100644 --- a/controller/settingscontroller.php +++ b/controller/settingscontroller.php @@ -20,6 +20,7 @@ use \OCP\AppFramework\Http\JSONResponse; use OCA\Documents\Converter; use OCA\Documents\Config; use OCA\Documents\Helper; +use OCA\Documents\Filter; class SettingsController extends Controller{ @@ -34,6 +35,17 @@ class SettingsController extends Controller{ $this->l10n = $l10n; } + /** + * @NoAdminRequired + */ + public function getSupportedMimes(){ + return array( + 'status' => 'success', + 'mimes' => Filter::getAll() + ); + } + + /** * @NoAdminRequired */ diff --git a/js/viewer/viewer.js b/js/viewer/viewer.js index ef00d014..799929d2 100644 --- a/js/viewer/viewer.js +++ b/js/viewer/viewer.js @@ -108,7 +108,7 @@ $(document).ready(function() { && typeof OCA.Files !== 'undefined' && typeof OCA.Files.fileActions !== 'undefined' ) { - $.post( + $.get( OC.filePath('documents', 'ajax', 'mimes.php'), {}, odfViewer.register From d7b06b635a330d02ca423ba579333632ba6e4f10 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Tue, 28 Oct 2014 20:21:27 +0300 Subject: [PATCH 5/9] Move otpoll to session controller --- ajax/otpoll.php | 119 ------------------------------ appinfo/routes.php | 13 +--- controller/sessioncontroller.php | 121 +++++++++++++++++++++++++++++++ lib/request.php | 48 ------------ 4 files changed, 124 insertions(+), 177 deletions(-) delete mode 100644 ajax/otpoll.php delete mode 100644 lib/request.php diff --git a/ajax/otpoll.php b/ajax/otpoll.php deleted file mode 100644 index 18c82475..00000000 --- a/ajax/otpoll.php +++ /dev/null @@ -1,119 +0,0 @@ -body = $body; - } - - public function getBody(){ - return $this->body; - } -} - -\OCP\JSON::checkAppEnabled('documents'); -$response = array(); - -try{ - $request = new Request(); - $esId = $request->getParam('args/es_id'); - - $session = new Db\Session(); - $session->load($esId); - - $memberId = $request->getParam('args/member_id'); - $member = new Db\Member(); - $member->load($memberId); - - if (!$member->getIsGuest()){ - \OCP\JSON::checkLoggedIn(); - } - - try { - $file = new File($session->getFileId()); - } catch (\Exception $e){ - Helper::warnLog('Error. Session no longer exists. ' . $e->getMessage()); - $ex = new BadRequestException(); - $ex->setBody($request->getRawRequest()); - throw $ex; - } - - $command = $request->getParam('command'); - switch ($command){ - case 'sync_ops': - $seqHead = (string) $request->getParam('args/seq_head'); - if (!is_null($seqHead)){ - $ops = $request->getParam('args/client_ops'); - $hasOps = is_array($ops) && count($ops)>0; - - $op = new Db\Op(); - $currentHead = $op->getHeadSeq($esId); - - try { - $member->updateActivity($memberId); - } catch (\Exception $e){ - //Db error. Not critical - } - - // TODO handle the case ($currentHead == "") && ($seqHead != "") - if ($seqHead == $currentHead) { - // matching heads - if ($hasOps) { - // incoming ops without conflict - // Add incoming ops, respond with a new head - $newHead = Db\Op::addOpsArray($esId, $memberId, $ops); - $response["result"] = 'added'; - $response["head_seq"] = $newHead ? $newHead : $currentHead; - } else { - // no incoming ops (just checking for new ops...) - $response["result"] = 'new_ops'; - $response["ops"] = array(); - $response["head_seq"] = $currentHead; - } - } else { // HEADs do not match - $response["ops"] = $op->getOpsAfterJson($esId, $seqHead); - $response["head_seq"] = $currentHead; - $response["result"] = $hasOps ? 'conflict' : 'new_ops'; - } - - $inactiveMembers = $member->updateByTimeout($esId); - foreach ($inactiveMembers as $inactive){ - $op->removeCursor($esId, $inactive); - $op->removeMember($esId, $inactive); - } - - } else { - // Error - no seq_head passed - throw new BadRequestException(); - } - - break; - default: - $ex = new BadRequestException(); - $ex->setBody($request->getRawRequest()); - throw $ex; - break; - } - - \OCP\JSON::success($response); -} catch (BadRequestException $e){ - header('HTTP/1.1 400: BAD REQUEST'); - \OCP\JSON::error( array( - 'err' => 'bad request:[' . $e->getBody() . ']', - )); -} -exit(); diff --git a/appinfo/routes.php b/appinfo/routes.php index fd723f42..7b6260d6 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -23,6 +23,7 @@ $application->registerRoutes($this, array( array('name' => 'session#joinAsUser', 'url' => 'ajax/session/joinasuser/{fileId}', 'verb' => 'POST'), array('name' => 'session#joinAsGuest', 'url' => 'ajax/session/joinasguest/{token}', 'verb' => 'POST'), array('name' => 'session#save', 'url' => 'ajax/session/save', 'verb' => 'POST'), + array('name' => 'session#poll', 'url' => 'ajax/otpoll.php', 'verb' => 'POST'), //documents array('name' => 'document#create', 'url' => 'ajax/documents/create', 'verb' => 'POST'), array('name' => 'document#serve', 'url' => 'ajax/genesis/{esId}', 'verb' => array('GET', 'HEAD')), @@ -37,20 +38,12 @@ $application->registerRoutes($this, array( ) )); - -/** @var $this \OC\Route\Router */ -$this->create('documents_ajax_otpoll', 'ajax/otpoll.php') - ->actionInclude('documents/ajax/otpoll.php'); - /** * Document routes */ +/** @var $this \OC\Route\Router */ + $this->create('documents_index', '') ->get() ->actionInclude('documents/index.php'); - -$this->create('documents_otpoll', 'ajax/otpoll.php') - ->post() - ->actionInclude('documents/ajax/otpoll.php') -; diff --git a/controller/sessioncontroller.php b/controller/sessioncontroller.php index 785df5c5..57a23e81 100644 --- a/controller/sessioncontroller.php +++ b/controller/sessioncontroller.php @@ -13,13 +13,28 @@ namespace OCA\Documents\Controller; use \OCP\AppFramework\Controller; use \OCP\IRequest; +use \OCP\AppFramework\Http; use \OCP\AppFramework\Http\JSONResponse; + use \OCA\Documents\Db; use \OCA\Documents\File; use \OCA\Documents\Helper; use OCA\Documents\Filter; +class BadRequestException extends \Exception { + + protected $body = ""; + + public function setBody($body){ + $this->body = $body; + } + + public function getBody(){ + return $this->body; + } +} + class SessionController extends Controller{ protected $uid; @@ -88,6 +103,112 @@ class SessionController extends Controller{ return $response; } + public function poll($command, $args){ + $response = new JSONResponse(); + + try{ + $esId = isset($args['es_id']) ? $args['es_id'] : null; + + $session = new Db\Session(); + $session->load($esId); + + $memberId = isset($args['member_id']) ? $args['member_id'] : null; + $member = new Db\Member(); + $member->load($memberId); + + if (!$member->getIsGuest()){ + \OCP\JSON::checkLoggedIn(); + } + + try { + $file = new File($session->getFileId()); + } catch (\Exception $e){ + Helper::warnLog('Error. Session no longer exists. ' . $e->getMessage()); + $ex = new BadRequestException(); + $ex->setBody( + implode(',', $this->request->getParams()) + ); + throw $ex; + } + + switch ($command){ + case 'sync_ops': + $seqHead = (string) isset($args['seq_head']) ? $args['seq_head'] : null; + if (!is_null($seqHead)){ + $ops = isset($args['client_ops']) ? $args['client_ops'] : null; + $hasOps = is_array($ops) && count($ops)>0; + + $op = new Db\Op(); + $currentHead = $op->getHeadSeq($esId); + + try { + $member->updateActivity($memberId); + } catch (\Exception $e){ + //Db error. Not critical + } + + // TODO handle the case ($currentHead == "") && ($seqHead != "") + if ($seqHead == $currentHead) { + // matching heads + if ($hasOps) { + // incoming ops without conflict + // Add incoming ops, respond with a new head + $newHead = Db\Op::addOpsArray($esId, $memberId, $ops); + $response->setData( + array( + 'result' => 'added', + 'head_seq' => $newHead ? $newHead : $currentHead + ) + ); + } else { + // no incoming ops (just checking for new ops...) + $response->setData( + array( + 'result' => 'new_ops', + 'ops' => array(), + 'head_seq' => $currentHead + ) + ); + } + } else { // HEADs do not match + $response->setData( + array( + 'result' => $hasOps ? 'conflict' : 'new_ops', + 'ops' => $op->getOpsAfterJson($esId, $seqHead), + 'head_seq' => $currentHead, + ) + ); + } + + $inactiveMembers = $member->updateByTimeout($esId); + foreach ($inactiveMembers as $inactive){ + $op->removeCursor($esId, $inactive); + $op->removeMember($esId, $inactive); + } + } else { + // Error - no seq_head passed + throw new BadRequestException(); + } + + break; + default: + $ex = new BadRequestException(); + $ex->setBody( + implode(',', $this->request->getParams()) + ); + throw $ex; + break; + } + } catch (BadRequestException $e){ + $response->setStatus(Http::STATUS_BAD_REQUEST); + $response->setData( + array('err' => 'bad request:[' . $e->getBody() . ']') + ); + } + return $response; + } + + /** * @NoAdminRequired * @PublicPage diff --git a/lib/request.php b/lib/request.php deleted file mode 100644 index 07f51a54..00000000 --- a/lib/request.php +++ /dev/null @@ -1,48 +0,0 @@ -rawRequest = file_get_contents('php://input'); - $this->data = json_decode($this->rawRequest, true); - } - - public function getRawRequest(){ - return $this->rawRequest; - } - - public function getParam($name){ - if (empty($name)){ - return $this->data; - } - - $path = explode('/', $name); - - reset($path); - $index = current($path); - $param = $this->data; - do { - if (!array_key_exists($index, $param)){ - return null; - } - $param = $param[$index]; - } while (($index = next($path)) !== false); - - return $param; - } -} - \ No newline at end of file From cf9fb6c809edb55285bb10bcefa5b7c4cdb987dd Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Tue, 28 Oct 2014 20:23:15 +0300 Subject: [PATCH 6/9] Send Json content-type to avoid guessing --- js/3rdparty/webodf/editor/server/pullbox/Server.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/3rdparty/webodf/editor/server/pullbox/Server.js b/js/3rdparty/webodf/editor/server/pullbox/Server.js index 9b749fdc..9f0b2551 100644 --- a/js/3rdparty/webodf/editor/server/pullbox/Server.js +++ b/js/3rdparty/webodf/editor/server/pullbox/Server.js @@ -81,11 +81,12 @@ define("webodf/editor/server/pullbox/Server", [], function () { cbError(0, xhr.statusText); } -runtime.log("Sending message to server: "+messageString); + runtime.log("Sending message to server: "+messageString); // create body data for request from metadata and payload // do the request xhr.open('POST', args.url, true); + xhr.setRequestHeader("Content-type","application/json"); if (token) { xhr.setRequestHeader("requesttoken", token); } From 4f19683c03d50e0905351f13c6f100fb8ad4ff4e Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Tue, 28 Oct 2014 22:38:08 +0300 Subject: [PATCH 7/9] Inject logger --- appinfo/application.php | 6 +++++- appinfo/routes.php | 2 +- controller/sessioncontroller.php | 14 ++++++++------ controller/settingscontroller.php | 8 ++++---- lib/config.php | 1 + 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/appinfo/application.php b/appinfo/application.php index ce87db53..f44fd803 100644 --- a/appinfo/application.php +++ b/appinfo/application.php @@ -37,6 +37,7 @@ class Application extends App { return new SessionController( $c->query('AppName'), $c->query('Request'), + $c->query('Logger'), $c->query('UserId') ); }); @@ -54,6 +55,7 @@ class Application extends App { $c->query('AppName'), $c->query('Request'), $c->query('CoreConfig'), + $c->query('Logger'), $c->query('L10N'), $c->query('UserId') ); @@ -62,7 +64,9 @@ class Application extends App { /** * Core */ - + $container->registerService('Logger', function($c) { + return $c->query('ServerContainer')->getLogger(); + }); $container->registerService('CoreConfig', function($c) { return $c->query('ServerContainer')->getConfig(); }); diff --git a/appinfo/routes.php b/appinfo/routes.php index 7b6260d6..3395fdf3 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -26,7 +26,7 @@ $application->registerRoutes($this, array( array('name' => 'session#poll', 'url' => 'ajax/otpoll.php', 'verb' => 'POST'), //documents array('name' => 'document#create', 'url' => 'ajax/documents/create', 'verb' => 'POST'), - array('name' => 'document#serve', 'url' => 'ajax/genesis/{esId}', 'verb' => array('GET', 'HEAD')), + array('name' => 'document#serve', 'url' => 'ajax/genesis/{esId}', 'verb' => 'GET', 'HEAD'), array('name' => 'document#rename', 'url' => 'ajax/documents/rename/{fileId}', 'verb' => 'POST'), array('name' => 'document#listAll', 'url' => 'ajax/documents/list', 'verb' => 'GET'), array('name' => 'document#download', 'url' => 'ajax/download.php', 'verb' => array('GET', 'HEAD')), diff --git a/controller/sessioncontroller.php b/controller/sessioncontroller.php index 57a23e81..9891a395 100644 --- a/controller/sessioncontroller.php +++ b/controller/sessioncontroller.php @@ -38,10 +38,12 @@ class BadRequestException extends \Exception { class SessionController extends Controller{ protected $uid; + protected $logger; - public function __construct($appName, IRequest $request, $uid){ + public function __construct($appName, IRequest $request, $logger, $uid){ parent::__construct($appName, $request); $this->uid = $uid; + $this->logger = $logger; } /** @@ -62,7 +64,7 @@ class SessionController extends Controller{ array('status'=>'success') ); } catch (\Exception $e){ - Helper::warnLog('Starting a session failed. Reason: ' . $e->getMessage()); + $this->logger->warning('Starting a session failed. Reason: ' . $e->getMessage(), array('app' => $this->appName)); $response = array ( 'status'=>'error' ); @@ -94,7 +96,7 @@ class SessionController extends Controller{ array('status'=>'success') ); } catch (\Exception $e){ - Helper::warnLog('Starting a session failed. Reason: ' . $e->getMessage()); + $this->logger->warning('Starting a session failed. Reason: ' . $e->getMessage(), array('app' => $this->appName)); $response = array ( 'status'=>'error' ); @@ -123,7 +125,7 @@ class SessionController extends Controller{ try { $file = new File($session->getFileId()); } catch (\Exception $e){ - Helper::warnLog('Error. Session no longer exists. ' . $e->getMessage()); + $this->logger->warning('Error. Session no longer exists. ' . $e->getMessage(), array('app' => $this->appName)); $ex = new BadRequestException(); $ex->setBody( implode(',', $this->request->getParams()) @@ -302,7 +304,7 @@ class SessionController extends Controller{ // Not a last user if ($memberCount>0){ // Update genesis hash to prevent conflicts - Helper::debugLog('Update hash'); + $this->logger->debug('Update hash', array('app' => $this->appName)); $session->updateGenesisHash($esId, sha1($data['content'])); } else { // Last user. Kill session data @@ -313,7 +315,7 @@ class SessionController extends Controller{ } $response = array('status'=>'success'); } catch (\Exception $e){ - Helper::warnLog('Saving failed. Reason:' . $e->getMessage()); + $this->logger->warning('Saving failed. Reason:' . $e->getMessage(), array('app' => $this->appName)); \OC_Response::setStatus(500); $response = array(); } diff --git a/controller/settingscontroller.php b/controller/settingscontroller.php index 0dddd0d7..401bb87d 100644 --- a/controller/settingscontroller.php +++ b/controller/settingscontroller.php @@ -19,19 +19,20 @@ use \OCP\AppFramework\Http\JSONResponse; use OCA\Documents\Converter; use OCA\Documents\Config; -use OCA\Documents\Helper; use OCA\Documents\Filter; class SettingsController extends Controller{ private $uid; private $settings; + private $logger; private $l10n; - public function __construct($appName, IRequest $request, IConfig $settings, IL10N $l10n, $uid){ + public function __construct($appName, IRequest $request, IConfig $settings, $logger, IL10N $l10n, $uid){ parent::__construct($appName, $request); $this->uid = $uid; $this->settings = $settings; + $this->logger = $logger; $this->l10n = $l10n; } @@ -98,7 +99,7 @@ class SettingsController extends Controller{ if ($this->settings->getAppValue($this->appName, 'converter', 'local') != 'local'){ if (!Converter::checkConnection()){ - Helper::warnLog('Bad response from Format Filter Server'); + $this->logger->warning('Bad response from Format Filter Server', array('app' => $this->appName)); $response = array( 'status' => 'error', 'data'=> @@ -108,7 +109,6 @@ class SettingsController extends Controller{ } else { try { if (!Config::testConversion()){ - Helper::warnLog('Conversion failed. Raw output:' . $result); $response = array( 'status' => 'error', 'data'=> diff --git a/lib/config.php b/lib/config.php index 0ff8c469..4238d760 100644 --- a/lib/config.php +++ b/lib/config.php @@ -44,6 +44,7 @@ wAAAQACAAAAAAAAAAAAAAAAAAAAAAACAAAAAtXN1ZwuGxCTlwgAKyz5rkQAAAAF1c3VnC4bEJOXCAArL $exists = file_exists($outfile); if (!$exists){ + Helper::warnLog('Conversion test failed. Raw output:' . $result); return false; } else { unlink($outfile); From 4180d6655552ce5287f07c3e7b09e55e3219c378 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Tue, 28 Oct 2014 22:56:03 +0300 Subject: [PATCH 8/9] Fix missing header on error --- js/documents.js | 1 + 1 file changed, 1 insertion(+) diff --git a/js/documents.js b/js/documents.js index e443c1b8..99fd819b 100644 --- a/js/documents.js +++ b/js/documents.js @@ -656,6 +656,7 @@ var documentsMain = { } documentsMain.show(); + $('header,footer,nav').show(); }, From 7416b8b5d6d461eb8e172b25126fee77df00f358 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Wed, 29 Oct 2014 00:52:43 +0300 Subject: [PATCH 9/9] Implement downloadresponse via appframework --- controller/documentcontroller.php | 10 +-- lib/download.php | 113 ----------------------------- lib/download/range.php | 92 ------------------------ lib/download/simple.php | 50 ------------- lib/downloadresponse.php | 115 ++++++++++++++++++++++++++++++ 5 files changed, 121 insertions(+), 259 deletions(-) delete mode 100644 lib/download.php delete mode 100644 lib/download/range.php delete mode 100644 lib/download/simple.php create mode 100644 lib/downloadresponse.php diff --git a/controller/documentcontroller.php b/controller/documentcontroller.php index ae671ec8..dd2cc69a 100644 --- a/controller/documentcontroller.php +++ b/controller/documentcontroller.php @@ -21,8 +21,10 @@ use \OCA\Documents\Db; use \OCA\Documents\Helper; use \OCA\Documents\Storage; use \OCA\Documents\Download; +use \OCA\Documents\DownloadResponse; use \OCA\Documents\File; use OCA\Documents\Genesis; +use \OCA\Documents\View; class DocumentController extends Controller{ @@ -84,8 +86,7 @@ class DocumentController extends Controller{ $session->load($esId); $filename = $session->getGenesisUrl() ? $session->getGenesisUrl() : ''; - $download = new Download($session->getOwner(), $filename); - $download->sendResponse(); + return new DownloadResponse($this->request, $session->getOwner(), $filename); } /** @@ -101,11 +102,12 @@ class DocumentController extends Controller{ } else { $fullPath = '/files' . $path; } - $download = new Download($this->uid, $fullPath); - $download->sendResponse(); + + return new DownloadResponse($this->request, $this->uid, $fullPath); } } + /** * @NoAdminRequired */ diff --git a/lib/download.php b/lib/download.php deleted file mode 100644 index 255591d4..00000000 --- a/lib/download.php +++ /dev/null @@ -1,113 +0,0 @@ -filepath = $filepath; - - if (isset($_SERVER['HTTP_RANGE'])) { - $this->instance = new Download\Range($owner, $filepath); - } else { - $this->instance = new Download\Simple($owner, $filepath); - } - - $this->view = $this->getView($owner); - } - - protected function getView($owner){ - return new View('/' . $owner); - } - - /** - * Send the requested content - */ - public function sendResponse(){ - \OCP\Response::disableCaching(); - - if (!$this->fileExists()){ - $this->sendNotFound(); - } - - $this->instance->sendResponse(); - exit(); - } - - /** - * Get the name of the requested file - * @return String - */ - protected function getFilename(){ - return basename($this->filepath); - } - - /** - * Get the size of the requested file - */ - protected function getFilesize(){ - return $this->view->filesize($this->filepath); - } - - /** - * Get the mimetype of the requested file - * @return string - */ - protected function getMimeType(){ - return $this->view->getMimeType($this->filepath); - } - - /** - * Check if the requested file exists - * @return bool - */ - protected function fileExists(){ - return $this->view->file_exists($this->filepath); - } - - /** - * Send 404 Response - */ - protected function sendNotFound(){ - header("HTTP/1.0 404 Not Found"); - $tmpl = new \OCP\Template('', '404', 'guest'); - $tmpl->assign('file', $this->filepath); - $tmpl->printPage(); - exit; - } -} diff --git a/lib/download/range.php b/lib/download/range.php deleted file mode 100644 index 8344a531..00000000 --- a/lib/download/range.php +++ /dev/null @@ -1,92 +0,0 @@ -view = $this->getView($owner); - $this->filepath = $filepath; - } - - /** - * Send the requested parts of the file - */ - public function sendResponse(){ - if (!preg_match('/^bytes=\d*-\d*(,\d*-\d*)*$/', $_SERVER['HTTP_RANGE'])){ - $this->sendNotSatisfiable(); - } - - $mimetype = $this->getMimeType(); - $content = $this->view->file_get_contents($this->filepath); - $data = \OCA\Documents\Filter::read($content, $mimetype); - $size = strlen($data['content']); - - $ranges = explode(',', substr($_SERVER['HTTP_RANGE'], 6)); - foreach ($ranges as $range){ - $parts = explode('-', $range); - - if ($parts[0]==='' && $parts[1]=='') { - $this->sendNotSatisfiable(); - } - if ($parts[0]==='') { - $start = $size - $parts[1]; - $end = $size - 1; - } - else { - $start = $parts[0]; - $end = ($parts[1]==='') ? $size - 1 : $parts[1]; - } - - if ($start > $end){ - $this->sendNotSatisfiable(); - } - - $buffer = substr($data['content'], $start, $end - $start); - $md5Sum = md5($buffer); - - // send the headers and data - header("Content-Length: " . ($end - $start)); - header("Content-md5: " . $md5Sum); - header("Accept-Ranges: bytes"); - header('Content-Range: bytes ' . $start . '-' . ($end) . '/' . $size); - header("Connection: close"); - header("Content-type: " . $data['mimetype']); - header('Content-Disposition: attachment; filename=' . $this->getFilename()); - \OC_Util::obEnd(); - echo $buffer; - flush(); - } - } - - /** - * Send 416 if we can't satisfy the requested ranges - */ - protected function sendNotSatisfiable(){ - header('HTTP/1.1 416 Requested Range Not Satisfiable'); - header('Content-Range: bytes */' . $this->getFilesize()); // Required in 416. - exit; - } -} diff --git a/lib/download/simple.php b/lib/download/simple.php deleted file mode 100644 index 916249e7..00000000 --- a/lib/download/simple.php +++ /dev/null @@ -1,50 +0,0 @@ -view = $this->getView($owner); - $this->filepath = $filepath; - } - - /** - * Send the whole file content as a response - */ - public function sendResponse(){ - $mimetype = $this->getMimeType(); - $content = $this->view->file_get_contents($this->filepath); - $data = \OCA\Documents\Filter::read($content, $mimetype); - - header( 'Content-Type:' . $data['mimetype'] ); - - $encodedName = rawurlencode($this->getFilename()); - if (preg_match("/MSIE/", $_SERVER["HTTP_USER_AGENT"])){ - header( - 'Content-Disposition: attachment; filepath="' . $encodedName . '"' - ); - } else { - header('Content-Disposition: attachment; filepath*=UTF-8\'\'' . $encodedName - . '; filepath="' . $encodedName . '"'); - } - - header('Content-Length: ' . strlen($data['content'])); - - \OC_Util::obEnd(); - - echo $data['content']; - } -} diff --git a/lib/downloadresponse.php b/lib/downloadresponse.php new file mode 100644 index 00000000..618aea9f --- /dev/null +++ b/lib/downloadresponse.php @@ -0,0 +1,115 @@ +request = $request; + $this->user = $user; + $this->path = $path; + $this->view = new View('/' . $user); + if (!$this->view->file_exists($path)){ + $this->setStatus(Http::STATUS_NOT_FOUND); + } + } + + public function render(){ + if ($this->status === Http::STATUS_NOT_FOUND){ + return ''; + } + + $info = $this->view->getFileInfo($this->path); + $this->ETag = $info['etag']; + + $content = $this->view->file_get_contents($this->path); + $data = \OCA\Documents\Filter::read($content, $info['mimetype']); + $size = strlen($data['content']); + + + if (!is_null($this->request->server['HTTP_RANGE'])){ + $isValidRange = preg_match('/^bytes=\d*-\d*(,\d*-\d*)*$/', $this->request->server['HTTP_RANGE']); + if (!$isValidRange){ + return $this->sendRangeNotSatisfiable($size); + } + + $ranges = explode(',', substr($this->request->server['HTTP_RANGE'], 6)); + foreach ($ranges as $range){ + $parts = explode('-', $range); + + if ($parts[0]==='' && $parts[1]=='') { + $this->sendNotSatisfiable($size); + } + if ($parts[0]==='') { + $start = $size - $parts[1]; + $end = $size - 1; + } else { + $start = $parts[0]; + $end = ($parts[1]==='') ? $size - 1 : $parts[1]; + } + + if ($start > $end){ + $this->sendNotSatisfiable($size); + } + + $buffer = substr($data['content'], $start, $end - $start); + $md5Sum = md5($buffer); + + // send the headers and data + $this->addHeader('Content-Length', $end - $start); + $this->addHeader('Content-md5', $md5Sum); + $this->addHeader('Accept-Ranges', 'bytes'); + $this->addHeader('Content-Range', 'bytes ' . $start . '-' . ($end) . '/' . $size); + $this->addHeader('Connection', 'close'); + $this->addHeader('Content-Type', $data['mimetype']); + $this->addContentDispositionHeader(); + return $buffer; + } + } + + $this->addHeader('Content-Type', $data['mimetype']); + $this->addContentDispositionHeader(); + $this->addHeader('Content-Length', $size); + + return $data['content']; + } + + /** + * Send 416 if we can't satisfy the requested ranges + */ + protected function sendRangeNotSatisfiable($filesize){ + $this->setStatus(Http::STATUS_REQUEST_RANGE_NOT_SATISFIABLE); + $this->addHeader('Content-Range', 'bytes */' . $filesize); // Required in 416. + return ''; + } + + protected function addContentDispositionHeader(){ + $encodedName = rawurlencode(basename($this->path)); + $isIE = preg_match("/MSIE/", $this->request->server["HTTP_USER_AGENT"]); + if ($isIE){ + $this->addHeader( + 'Content-Disposition', + 'attachment; filename="' . $encodedName . '"' + ); + } else { + $this->addHeader( + 'Content-Disposition', + 'attachment; filename*=UTF-8\'\'' . $encodedName . '; filepath="' . $encodedName . '"' + ); + } + } +}