diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php index ffdcbf05109aa70f57ed02c75cb006a7576f061a..bdaea64bb90bf326b6c0545a8f216228e7380e20 100644 --- a/apps/files_sharing/appinfo/app.php +++ b/apps/files_sharing/appinfo/app.php @@ -8,6 +8,7 @@ OC::$CLASSPATH['OC\Files\Cache\Shared_Permissions'] = 'files_sharing/lib/permiss OC::$CLASSPATH['OC\Files\Cache\Shared_Updater'] = 'files_sharing/lib/updater.php'; OC::$CLASSPATH['OC\Files\Cache\Shared_Watcher'] = 'files_sharing/lib/watcher.php'; OC::$CLASSPATH['OCA\Files\Share\Api'] = 'files_sharing/lib/api.php'; +OC::$CLASSPATH['OCA\Files\Share\Maintainer'] = 'files_sharing/lib/maintainer.php'; OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup'); OCP\Share::registerBackend('file', 'OC_Share_Backend_File'); OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file'); @@ -17,3 +18,4 @@ OCP\Util::addScript('files_sharing', 'share'); \OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Shared_Updater', 'renameHook'); \OC_Hook::connect('OCP\Share', 'post_shared', '\OC\Files\Cache\Shared_Updater', 'shareHook'); \OC_Hook::connect('OCP\Share', 'pre_unshare', '\OC\Files\Cache\Shared_Updater', 'shareHook'); +\OC_Hook::connect('OC_Appconfig', 'post_set_value', '\OCA\Files\Share\Maintainer', 'configChangeHook'); diff --git a/apps/files_sharing/lib/maintainer.php b/apps/files_sharing/lib/maintainer.php new file mode 100644 index 0000000000000000000000000000000000000000..bbb3268410e641a9309edf7e0f828b2ceb530976 --- /dev/null +++ b/apps/files_sharing/lib/maintainer.php @@ -0,0 +1,44 @@ +<?php +/** + * ownCloud + * + * @author Morris Jobke + * @copyright 2013 Morris Jobke morris.jobke@gmail.com + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ + +namespace OCA\Files\Share; + +/** + * Maintains stuff around the sharing functionality + * + * for example: on disable of "allow links" it removes all link shares + */ + +class Maintainer { + + /** + * Keeps track of the "allow links" config setting + * and removes all link shares if the config option is set to "no" + * + * @param array with app, key, value as named values + */ + static public function configChangeHook($params) { + if($params['app'] === 'core' && $params['key'] === 'shareapi_allow_links' && $params['value'] === 'no') { + \OCP\Share::removeAllLinkShares(); + } + } + +} diff --git a/core/js/share.js b/core/js/share.js index 270eab356e1fceadf607934842147e0d98d12e45..25126d3c23080cca6e1cf0e270d29eae29d81ad5 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -203,7 +203,19 @@ OC.Share={ html += '<input id="shareWith" type="text" placeholder="'+t('core', 'Share with')+'" />'; html += '<ul id="shareWithList">'; html += '</ul>'; - if (link) { + var linksAllowed = false; + $.ajax({ + type: 'GET', + url: OC.filePath('core', 'ajax', 'appconfig.php'), + data: { action:'getValue', app:'core', key:'shareapi_allow_links', defaultValue:'yes' }, + async: false, + success: function(result) { + if (result && result.status === 'success' && result.data === 'yes') { + linksAllowed = true; + } + } + }); + if (link && linksAllowed) { html += '<div id="link">'; html += '<input type="checkbox" name="linkCheckbox" id="linkCheckbox" value="1" /><label for="linkCheckbox">'+t('core', 'Share with link')+'</label>'; html += '<br />'; diff --git a/lib/private/appconfig.php b/lib/private/appconfig.php index e615d838173e9a182d2397be10a9d5cad98577f9..4f170e054e9bd0148586d3f9eb6a4eb60edb5149 100644 --- a/lib/private/appconfig.php +++ b/lib/private/appconfig.php @@ -134,6 +134,12 @@ class OC_Appconfig{ .' WHERE `appid` = ? AND `configkey` = ?' ); $query->execute( array( $value, $app, $key )); } + // TODO where should this be documented? + \OC_Hook::emit('OC_Appconfig', 'post_set_value', array( + 'app' => $app, + 'key' => $key, + 'value' => $value + )); } /** diff --git a/lib/public/share.php b/lib/public/share.php index 1b6f5d05f10979d16a404151f00a0d8a811cefd4..59150e1964fbba857625bbac7f4594508879961b 100644 --- a/lib/public/share.php +++ b/lib/public/share.php @@ -960,6 +960,10 @@ class Share { $queryArgs = array($itemType); } } + if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') !== 'yes') { + $where .= ' AND `share_type` != ?'; + $queryArgs[] = self::SHARE_TYPE_LINK; + } if (isset($shareType)) { // Include all user and group items if ($shareType == self::$shareTypeUserAndGroups && isset($shareWith)) { @@ -1717,6 +1721,18 @@ class Share { } } + /** + * Delete all shares with type SHARE_TYPE_LINK + */ + public static function removeAllLinkShares() { + // Delete any link shares + $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*share` WHERE `share_type` = ?'); + $result = $query->execute(array(self::SHARE_TYPE_LINK)); + while ($item = $result->fetchRow()) { + self::delete($item['id']); + } + } + /** * Hook Listeners */