summaryrefslogtreecommitdiffstats
path: root/apps/files_sharing
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_sharing')
-rw-r--r--apps/files_sharing/api/local.php (renamed from apps/files_sharing/lib/api.php)6
-rw-r--r--apps/files_sharing/api/server2server.php224
-rw-r--r--apps/files_sharing/appinfo/app.php26
-rw-r--r--apps/files_sharing/appinfo/database.xml15
-rw-r--r--apps/files_sharing/appinfo/routes.php10
-rw-r--r--apps/files_sharing/appinfo/version2
-rw-r--r--apps/files_sharing/js/app.js3
-rw-r--r--apps/files_sharing/js/public.js4
-rw-r--r--apps/files_sharing/js/share.js74
-rw-r--r--apps/files_sharing/js/sharedfilelist.js2
-rw-r--r--apps/files_sharing/l10n/cs_CZ.js2
-rw-r--r--apps/files_sharing/l10n/cs_CZ.json2
-rw-r--r--apps/files_sharing/l10n/da.js2
-rw-r--r--apps/files_sharing/l10n/da.json2
-rw-r--r--apps/files_sharing/l10n/de.js2
-rw-r--r--apps/files_sharing/l10n/de.json2
-rw-r--r--apps/files_sharing/l10n/de_DE.js2
-rw-r--r--apps/files_sharing/l10n/de_DE.json2
-rw-r--r--apps/files_sharing/l10n/en_GB.js2
-rw-r--r--apps/files_sharing/l10n/en_GB.json2
-rw-r--r--apps/files_sharing/l10n/es.js1
-rw-r--r--apps/files_sharing/l10n/es.json1
-rw-r--r--apps/files_sharing/l10n/fi_FI.js2
-rw-r--r--apps/files_sharing/l10n/fi_FI.json2
-rw-r--r--apps/files_sharing/l10n/fr.js2
-rw-r--r--apps/files_sharing/l10n/fr.json2
-rw-r--r--apps/files_sharing/l10n/ja.js2
-rw-r--r--apps/files_sharing/l10n/ja.json2
-rw-r--r--apps/files_sharing/l10n/nl.js2
-rw-r--r--apps/files_sharing/l10n/nl.json2
-rw-r--r--apps/files_sharing/l10n/pt_BR.js2
-rw-r--r--apps/files_sharing/l10n/pt_BR.json2
-rw-r--r--apps/files_sharing/l10n/ru.js2
-rw-r--r--apps/files_sharing/l10n/ru.json2
-rw-r--r--apps/files_sharing/l10n/tr.js2
-rw-r--r--apps/files_sharing/l10n/tr.json2
-rw-r--r--apps/files_sharing/lib/activity.php196
-rw-r--r--apps/files_sharing/lib/cache.php62
-rw-r--r--apps/files_sharing/lib/external/manager.php18
-rw-r--r--apps/files_sharing/lib/external/mount.php5
-rw-r--r--apps/files_sharing/lib/helper.php24
-rw-r--r--apps/files_sharing/lib/sharedmount.php4
-rw-r--r--apps/files_sharing/tests/api.php60
-rw-r--r--apps/files_sharing/tests/cache.php34
-rw-r--r--apps/files_sharing/tests/js/shareSpec.js20
-rw-r--r--apps/files_sharing/tests/js/sharedfilelistSpec.js20
-rw-r--r--apps/files_sharing/tests/server2server.php102
47 files changed, 816 insertions, 145 deletions
diff --git a/apps/files_sharing/lib/api.php b/apps/files_sharing/api/local.php
index 8556036f118..d9291c29f61 100644
--- a/apps/files_sharing/lib/api.php
+++ b/apps/files_sharing/api/local.php
@@ -1,6 +1,6 @@
<?php
/**
- * ownCloud
+ * ownCloud - OCS API for local shares
*
* @author Bjoern Schiessle
* @copyright 2013 Bjoern Schiessle schiessle@owncloud.com
@@ -20,9 +20,9 @@
*
*/
-namespace OCA\Files\Share;
+namespace OCA\Files_Sharing\API;
-class Api {
+class Local {
/**
* get all shares
diff --git a/apps/files_sharing/api/server2server.php b/apps/files_sharing/api/server2server.php
new file mode 100644
index 00000000000..2949e2dd09c
--- /dev/null
+++ b/apps/files_sharing/api/server2server.php
@@ -0,0 +1,224 @@
+<?php
+/**
+ * ownCloud - OCS API for server-to-server shares
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.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_Sharing\API;
+
+class Server2Server {
+
+ /**
+ * create a new share
+ *
+ * @param array $params
+ * @return \OC_OCS_Result
+ */
+ public function createShare($params) {
+
+ if (!$this->isS2SEnabled(true)) {
+ return \OC_OCS_Result(null, 503, 'Server does not support server-to-server sharing');
+ }
+
+ $remote = isset($_POST['remote']) ? $_POST['remote'] : null;
+ $token = isset($_POST['token']) ? $_POST['token'] : null;
+ $name = isset($_POST['name']) ? $_POST['name'] : null;
+ $owner = isset($_POST['owner']) ? $_POST['owner'] : null;
+ $shareWith = isset($_POST['shareWith']) ? $_POST['shareWith'] : null;
+ $remoteId = isset($_POST['remote_id']) ? (int)$_POST['remote_id'] : null;
+
+ if ($remote && $token && $name && $owner && $remoteId && $shareWith) {
+
+ if(!\OCP\Util::isValidFileName($name)) {
+ return new \OC_OCS_Result(null, 400, 'The mountpoint name contains invalid characters.');
+ }
+
+ if (!\OCP\User::userExists($shareWith)) {
+ return new \OC_OCS_Result(null, 400, 'User does not exists');
+ }
+
+ \OC_Util::setupFS($shareWith);
+
+ $mountPoint = \OC\Files\Filesystem::normalizePath('/' . $name);
+ $name = \OCP\Files::buildNotExistingFileName('/', $name);
+
+ try {
+ \OCA\Files_Sharing\Helper::addServer2ServerShare($remote, $token, $name, $mountPoint, $owner, $shareWith, '', $remoteId);
+
+ \OC::$server->getActivityManager()->publishActivity(
+ 'files_sharing', \OCA\Files_Sharing\Activity::SUBJECT_REMOTE_SHARE_RECEIVED, array($owner), '', array(),
+ '', '', $shareWith, \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::PRIORITY_LOW);
+
+ return new \OC_OCS_Result();
+ } catch (\Exception $e) {
+ return new \OC_OCS_Result(null, 500, 'server can not add remote share, ' . $e->getMessage());
+ }
+ }
+
+ return new \OC_OCS_Result(null, 400, 'server can not add remote share, missing parameter');
+ }
+
+ /**
+ * accept server-to-server share
+ *
+ * @param array $params
+ * @return \OC_OCS_Result
+ */
+ public function acceptShare($params) {
+
+ if (!$this->isS2SEnabled()) {
+ return \OC_OCS_Result(null, 503, 'Server does not support server-to-server sharing');
+ }
+
+ $id = $params['id'];
+ $token = isset($_POST['token']) ? $_POST['token'] : null;
+ $share = self::getShare($id, $token);
+
+ if ($share) {
+ list($file, $link) = self::getFile($share['uid_owner'], $share['file_source']);
+
+ \OC::$server->getActivityManager()->publishActivity(
+ 'files_sharing', \OCA\Files_Sharing\Activity::SUBJECT_REMOTE_SHARE_ACCEPTED, array($share['share_with'], basename($file)), '', array(),
+ $file, $link, $share['uid_owner'], \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::PRIORITY_LOW);
+ }
+
+ return new \OC_OCS_Result();
+ }
+
+ /**
+ * decline server-to-server share
+ *
+ * @param array $params
+ * @return \OC_OCS_Result
+ */
+ public function declineShare($params) {
+
+ if (!$this->isS2SEnabled()) {
+ return \OC_OCS_Result(null, 503, 'Server does not support server-to-server sharing');
+ }
+
+ $id = $params['id'];
+ $token = isset($_POST['token']) ? $_POST['token'] : null;
+
+ $share = $this->getShare($id, $token);
+
+ if ($share) {
+ // userId must be set to the user who unshares
+ \OCP\Share::unshare($share['item_type'], $share['item_source'], $share['share_type'], null, $share['uid_owner']);
+
+ list($file, $link) = $this->getFile($share['uid_owner'], $share['file_source']);
+
+ \OC::$server->getActivityManager()->publishActivity(
+ 'files_sharing', \OCA\Files_Sharing\Activity::SUBJECT_REMOTE_SHARE_DECLINED, array($share['share_with'], basename($file)), '', array(),
+ $file, $link, $share['uid_owner'], \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::PRIORITY_LOW);
+ }
+
+ return new \OC_OCS_Result();
+ }
+
+ /**
+ * remove server-to-server share if it was unshared by the owner
+ *
+ * @param array $params
+ * @return \OC_OCS_Result
+ */
+ public function unshare($params) {
+
+ if (!$this->isS2SEnabled()) {
+ return \OC_OCS_Result(null, 503, 'Server does not support server-to-server sharing');
+ }
+
+ $id = $params['id'];
+ $token = isset($_POST['token']) ? $_POST['token'] : null;
+
+ $query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share_external` WHERE `remote_id` = ? AND `share_token` = ?');
+ $query->execute(array($id, $token));
+ $share = $query->fetchRow();
+
+ if ($token && $id && !empty($share)) {
+
+ $owner = $share['owner'] . '@' . $share['remote'];
+ $mountpoint = $share['mountpoint'];
+ $user = $share['user'];
+
+ $query = \OCP\DB::prepare('DELETE FROM `*PREFIX*share_external` WHERE `remote_id` = ? AND `share_token` = ?');
+ $query->execute(array($id, $token));
+
+ \OC::$server->getActivityManager()->publishActivity(
+ 'files_sharing', \OCA\Files_Sharing\Activity::SUBJECT_REMOTE_SHARE_DECLINED, array($owner, $mountpoint), '', array(),
+ '', '', $user, \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::PRIORITY_MEDIUM);
+ }
+
+ return new \OC_OCS_Result();
+ }
+
+ /**
+ * get share
+ *
+ * @param int $id
+ * @param string $token
+ * @return array
+ */
+ private function getShare($id, $token) {
+ $query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `id` = ? AND `token` = ? AND `share_type` = ?');
+ $query->execute(array($id, $token, \OCP\Share::SHARE_TYPE_REMOTE));
+ $share = $query->fetchRow();
+
+ return $share;
+ }
+
+ /**
+ * get file
+ *
+ * @param string $user
+ * @param int $fileSource
+ * @return array with internal path of the file and a absolute link to it
+ */
+ private function getFile($user, $fileSource) {
+ \OC_Util::setupFS($user);
+
+ $file = \OC\Files\Filesystem::getPath($fileSource);
+ $args = \OC\Files\Filesystem::is_dir($file) ? array('dir' => $file) : array('dir' => dirname($file), 'scrollto' => $file);
+ $link = \OCP\Util::linkToAbsolute('files', 'index.php', $args);
+
+ return array($file, $link);
+
+ }
+
+ /**
+ * check if server-to-server sharing is enabled
+ *
+ * @param bool $incoming
+ * @return bool
+ */
+ private function isS2SEnabled($incoming = false) {
+
+ $result = \OCP\App::isEnabled('files_sharing');
+
+ if ($incoming) {
+ $result = $result && \OCA\Files_Sharing\Helper::isIncomingServer2serverShareEnabled();
+ } else {
+ $result = $result && \OCA\Files_Sharing\Helper::isOutgoingServer2serverShareEnabled();
+ }
+
+ return $result;
+ }
+
+}
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index a01f8d98c7d..36d148dce96 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -8,7 +8,6 @@ OC::$CLASSPATH['OC\Files\Cache\Shared_Cache'] = 'files_sharing/lib/cache.php';
OC::$CLASSPATH['OC\Files\Cache\Shared_Permissions'] = 'files_sharing/lib/permissions.php';
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';
OC::$CLASSPATH['OCA\Files\Share\Proxy'] = 'files_sharing/lib/proxy.php';
@@ -28,6 +27,10 @@ OCP\Util::addScript('files_sharing', 'external');
OC_FileProxy::register(new OCA\Files\Share\Proxy());
+\OC::$server->getActivityManager()->registerExtension(function() {
+ return new \OCA\Files_Sharing\Activity();
+});
+
$config = \OC::$server->getConfig();
if ($config->getAppValue('core', 'shareapi_enabled', 'yes') === 'yes') {
@@ -52,14 +55,17 @@ if ($config->getAppValue('core', 'shareapi_enabled', 'yes') === 'yes') {
"name" => $l->t('Shared with others')
)
);
- \OCA\Files\App::getNavigationManager()->add(
- array(
- "id" => 'sharinglinks',
- "appname" => 'files_sharing',
- "script" => 'list.php',
- "order" => 20,
- "name" => $l->t('Shared by link')
- )
- );
+ // Check if sharing by link is enabled
+ if ($config->getAppValue('core', 'shareapi_allow_links', 'yes') === 'yes') {
+ \OCA\Files\App::getNavigationManager()->add(
+ array(
+ "id" => 'sharinglinks',
+ "appname" => 'files_sharing',
+ "script" => 'list.php',
+ "order" => 20,
+ "name" => $l->t('Shared by link')
+ )
+ );
+ }
}
}
diff --git a/apps/files_sharing/appinfo/database.xml b/apps/files_sharing/appinfo/database.xml
index 73d64c527b7..38718ab0773 100644
--- a/apps/files_sharing/appinfo/database.xml
+++ b/apps/files_sharing/appinfo/database.xml
@@ -23,6 +23,12 @@
<comments>Url of the remove owncloud instance</comments>
</field>
<field>
+ <name>remote_id</name>
+ <type>integer</type>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+ <field>
<name>share_token</name>
<type>text</type>
<notnull>true</notnull>
@@ -32,7 +38,7 @@
<field>
<name>password</name>
<type>text</type>
- <notnull>true</notnull>
+ <notnull>false</notnull>
<length>64</length>
<comments>Optional password for the public share</comments>
</field>
@@ -71,6 +77,13 @@
<length>32</length>
<comments>md5 hash of the mountpoint</comments>
</field>
+ <field>
+ <name>accepted</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
<index>
<name>sh_external_user</name>
<field>
diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php
index 68f33d94995..41bdf554fc5 100644
--- a/apps/files_sharing/appinfo/routes.php
+++ b/apps/files_sharing/appinfo/routes.php
@@ -22,25 +22,25 @@ $this->create('sharing_external_test_remote', '/testremote')
OC_API::register('get',
'/apps/files_sharing/api/v1/shares',
- array('\OCA\Files\Share\Api', 'getAllShares'),
+ array('\OCA\Files_Sharing\API\Local', 'getAllShares'),
'files_sharing');
OC_API::register('post',
'/apps/files_sharing/api/v1/shares',
- array('\OCA\Files\Share\Api', 'createShare'),
+ array('\OCA\Files_Sharing\API\Local', 'createShare'),
'files_sharing');
OC_API::register('get',
'/apps/files_sharing/api/v1/shares/{id}',
- array('\OCA\Files\Share\Api', 'getShare'),
+ array('\OCA\Files_Sharing\API\Local', 'getShare'),
'files_sharing');
OC_API::register('put',
'/apps/files_sharing/api/v1/shares/{id}',
- array('\OCA\Files\Share\Api', 'updateShare'),
+ array('\OCA\Files_Sharing\API\Local', 'updateShare'),
'files_sharing');
OC_API::register('delete',
'/apps/files_sharing/api/v1/shares/{id}',
- array('\OCA\Files\Share\Api', 'deleteShare'),
+ array('\OCA\Files_Sharing\API\Local', 'deleteShare'),
'files_sharing');
diff --git a/apps/files_sharing/appinfo/version b/apps/files_sharing/appinfo/version
index be14282b7ff..7d8568351b4 100644
--- a/apps/files_sharing/appinfo/version
+++ b/apps/files_sharing/appinfo/version
@@ -1 +1 @@
-0.5.3
+0.5.4
diff --git a/apps/files_sharing/js/app.js b/apps/files_sharing/js/app.js
index 1314304c567..ff6997ab12f 100644
--- a/apps/files_sharing/js/app.js
+++ b/apps/files_sharing/js/app.js
@@ -30,6 +30,7 @@ OCA.Sharing.App = {
this._inFileList = new OCA.Sharing.FileList(
$el,
{
+ id: 'shares.self',
scrollContainer: $('#app-content'),
sharedWithUser: true,
fileActions: this._createFileActions()
@@ -49,6 +50,7 @@ OCA.Sharing.App = {
this._outFileList = new OCA.Sharing.FileList(
$el,
{
+ id: 'shares.others',
scrollContainer: $('#app-content'),
sharedWithUser: false,
fileActions: this._createFileActions()
@@ -68,6 +70,7 @@ OCA.Sharing.App = {
this._linkFileList = new OCA.Sharing.FileList(
$el,
{
+ id: 'shares.link',
scrollContainer: $('#app-content'),
linksOnly: true,
fileActions: this._createFileActions()
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 0627ed6ab54..2ddcd84d4c1 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -53,6 +53,7 @@ OCA.Sharing.PublicApp = {
this.fileList = new OCA.Files.FileList(
$el,
{
+ id: 'files.public',
scrollContainer: $(window),
dragOptions: dragOptions,
folderDropOptions: folderDropOptions,
@@ -61,6 +62,9 @@ OCA.Sharing.PublicApp = {
);
this.files = OCA.Files.Files;
this.files.initialize();
+ // TODO: move to PublicFileList.initialize() once
+ // the code was split into a separate class
+ OC.Plugins.attach('OCA.Sharing.PublicFileList', this.fileList);
}
var mimetype = $('#mimetype').val();
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index 8474c66d4b8..bbd107e070e 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -17,46 +17,47 @@
*/
OCA.Sharing.Util = {
/**
- * Initialize the sharing app overrides of the default
- * file list.
+ * Initialize the sharing plugin.
*
* Registers the "Share" file action and adds additional
* DOM attributes for the sharing file info.
*
- * @param {OCA.Files.FileActions} fileActions file actions to extend
+ * @param {OCA.Files.FileList} fileList file list to be extended
*/
- initialize: function(fileActions) {
- if (OCA.Files.FileList) {
- var oldCreateRow = OCA.Files.FileList.prototype._createRow;
- OCA.Files.FileList.prototype._createRow = function(fileData) {
- var tr = oldCreateRow.apply(this, arguments);
- var sharePermissions = fileData.permissions;
- if (fileData.mountType && fileData.mountType === "external-root"){
- // for external storages we cant use the permissions of the mountpoint
- // instead we show all permissions and only use the share permissions from the mountpoint to handle resharing
- sharePermissions = sharePermissions | (OC.PERMISSION_ALL & ~OC.PERMISSION_SHARE);
- }
- if (fileData.type === 'file') {
- // files can't be shared with delete permissions
- sharePermissions = sharePermissions & ~OC.PERMISSION_DELETE;
- }
- tr.attr('data-share-permissions', sharePermissions);
- if (fileData.shareOwner) {
- tr.attr('data-share-owner', fileData.shareOwner);
- // user should always be able to rename a mount point
- if (fileData.isShareMountPoint) {
- tr.attr('data-permissions', fileData.permissions | OC.PERMISSION_UPDATE);
- }
- }
- if (fileData.recipientsDisplayName) {
- tr.attr('data-share-recipients', fileData.recipientsDisplayName);
- }
- return tr;
- };
+ attach: function(fileList) {
+ if (fileList.id === 'trashbin') {
+ return;
}
+ var fileActions = fileList.fileActions;
+ var oldCreateRow = fileList._createRow;
+ fileList._createRow = function(fileData) {
+ var tr = oldCreateRow.apply(this, arguments);
+ var sharePermissions = fileData.permissions;
+ if (fileData.mountType && fileData.mountType === "external-root"){
+ // for external storages we cant use the permissions of the mountpoint
+ // instead we show all permissions and only use the share permissions from the mountpoint to handle resharing
+ sharePermissions = sharePermissions | (OC.PERMISSION_ALL & ~OC.PERMISSION_SHARE);
+ }
+ if (fileData.type === 'file') {
+ // files can't be shared with delete permissions
+ sharePermissions = sharePermissions & ~OC.PERMISSION_DELETE;
+ }
+ tr.attr('data-share-permissions', sharePermissions);
+ if (fileData.shareOwner) {
+ tr.attr('data-share-owner', fileData.shareOwner);
+ // user should always be able to rename a mount point
+ if (fileData.isShareMountPoint) {
+ tr.attr('data-permissions', fileData.permissions | OC.PERMISSION_UPDATE);
+ }
+ }
+ if (fileData.recipientsDisplayName) {
+ tr.attr('data-share-recipients', fileData.recipientsDisplayName);
+ }
+ return tr;
+ };
// use delegate to catch the case with multiple file lists
- $('#content').delegate('#fileList', 'fileActionsReady', function(ev){
+ fileList.$el.on('fileActionsReady', function(ev){
var fileList = ev.fileList;
var $files = ev.$files;
@@ -198,12 +199,5 @@
};
})();
-$(document).ready(function() {
- // FIXME: HACK: do not init when running unit tests, need a better way
- if (!window.TESTING) {
- if (!_.isUndefined(OC.Share) && !_.isUndefined(OCA.Files)) {
- OCA.Sharing.Util.initialize(OCA.Files.fileActions);
- }
- }
-});
+OC.Plugins.register('OCA.Files.FileList', OCA.Sharing.Util);
diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js
index 7a7c24993c0..2c7d6c7d43a 100644
--- a/apps/files_sharing/js/sharedfilelist.js
+++ b/apps/files_sharing/js/sharedfilelist.js
@@ -38,6 +38,7 @@
_sharedWithUser: false,
_linksOnly: false,
_clientSideSort: true,
+ _allowSelection: false,
/**
* @private
@@ -55,6 +56,7 @@
if (options && options.linksOnly) {
this._linksOnly = true;
}
+ OC.Plugins.attach('OCA.Sharing.FileList', this);
},
_renderRow: function() {
diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js
index 6b2c05b4dfb..bace06b0c41 100644
--- a/apps/files_sharing/l10n/cs_CZ.js
+++ b/apps/files_sharing/l10n/cs_CZ.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "Nebyla nalezena instalace ownCloud na {remote}",
"Invalid ownCloud url" : "Neplatná ownCloud url",
"Shared by" : "Sdílí",
+ "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo složka byla nasdílena z <strong>jiného serveru</strong>",
+ "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
"This share is password-protected" : "Toto sdílení je chráněno heslem",
"The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.",
"Password" : "Heslo",
diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json
index 276887c770f..3071cd251d3 100644
--- a/apps/files_sharing/l10n/cs_CZ.json
+++ b/apps/files_sharing/l10n/cs_CZ.json
@@ -17,6 +17,8 @@
"No ownCloud installation found at {remote}" : "Nebyla nalezena instalace ownCloud na {remote}",
"Invalid ownCloud url" : "Neplatná ownCloud url",
"Shared by" : "Sdílí",
+ "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo složka byla nasdílena z <strong>jiného serveru</strong>",
+ "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
"This share is password-protected" : "Toto sdílení je chráněno heslem",
"The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.",
"Password" : "Heslo",
diff --git a/apps/files_sharing/l10n/da.js b/apps/files_sharing/l10n/da.js
index de8c6102993..76ab4a877f7 100644
--- a/apps/files_sharing/l10n/da.js
+++ b/apps/files_sharing/l10n/da.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "Der blev ikke fundet en ownCloud-installation på {remote}",
"Invalid ownCloud url" : "Ugyldig ownCloud-URL",
"Shared by" : "Delt af",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe blev delt fra <strong>en anden server</strong>",
+ "You received a new remote share from %s" : "Du modtog en ny ekstern deling fra %s",
"This share is password-protected" : "Delingen er beskyttet af kodeord",
"The password is wrong. Try again." : "Kodeordet er forkert. Prøv igen.",
"Password" : "Kodeord",
diff --git a/apps/files_sharing/l10n/da.json b/apps/files_sharing/l10n/da.json
index 996d45436c6..316c66f5d35 100644
--- a/apps/files_sharing/l10n/da.json
+++ b/apps/files_sharing/l10n/da.json
@@ -17,6 +17,8 @@
"No ownCloud installation found at {remote}" : "Der blev ikke fundet en ownCloud-installation på {remote}",
"Invalid ownCloud url" : "Ugyldig ownCloud-URL",
"Shared by" : "Delt af",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe blev delt fra <strong>en anden server</strong>",
+ "You received a new remote share from %s" : "Du modtog en ny ekstern deling fra %s",
"This share is password-protected" : "Delingen er beskyttet af kodeord",
"The password is wrong. Try again." : "Kodeordet er forkert. Prøv igen.",
"Password" : "Kodeord",
diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index c3160792e1c..81ebd86723d 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "Keine OwnCloud-Installation auf {remote} gefunden",
"Invalid ownCloud url" : "Ungültige OwnCloud-URL",
"Shared by" : "Geteilt von ",
+ "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder Ordner wurde von <strong>einem anderen Server</strong> geteilt",
+ "You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.",
"Password" : "Passwort",
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index 62a74cf445b..ceae453aa66 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -17,6 +17,8 @@
"No ownCloud installation found at {remote}" : "Keine OwnCloud-Installation auf {remote} gefunden",
"Invalid ownCloud url" : "Ungültige OwnCloud-URL",
"Shared by" : "Geteilt von ",
+ "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder Ordner wurde von <strong>einem anderen Server</strong> geteilt",
+ "You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.",
"Password" : "Passwort",
diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js
index e50a15dd29e..ec97bcba393 100644
--- a/apps/files_sharing/l10n/de_DE.js
+++ b/apps/files_sharing/l10n/de_DE.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "Keine OwnCloud-Installation auf {remote} gefunden",
"Invalid ownCloud url" : "Ungültige OwnCloud-Adresse",
"Shared by" : "Geteilt von",
+ "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder Ordner wurde von <strong>einem anderen Server</strong> geteilt",
+ "You received a new remote share from %s" : "Sie haben eine neue Remotefreigabe von %s erhalten",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
"Password" : "Passwort",
diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json
index 129769939e5..2dd35e35310 100644
--- a/apps/files_sharing/l10n/de_DE.json
+++ b/apps/files_sharing/l10n/de_DE.json
@@ -17,6 +17,8 @@
"No ownCloud installation found at {remote}" : "Keine OwnCloud-Installation auf {remote} gefunden",
"Invalid ownCloud url" : "Ungültige OwnCloud-Adresse",
"Shared by" : "Geteilt von",
+ "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder Ordner wurde von <strong>einem anderen Server</strong> geteilt",
+ "You received a new remote share from %s" : "Sie haben eine neue Remotefreigabe von %s erhalten",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
"Password" : "Passwort",
diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js
index 07cc91c6621..c5dfd1a7674 100644
--- a/apps/files_sharing/l10n/en_GB.js
+++ b/apps/files_sharing/l10n/en_GB.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "No ownCloud installation found at {remote}",
"Invalid ownCloud url" : "Invalid ownCloud URL",
"Shared by" : "Shared by",
+ "A file or folder was shared from <strong>another server</strong>" : "A file or folder was shared from <strong>another server</strong>",
+ "You received a new remote share from %s" : "You received a new remote share from %s",
"This share is password-protected" : "This share is password-protected",
"The password is wrong. Try again." : "The password is wrong. Try again.",
"Password" : "Password",
diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json
index f0e6f5b5bed..a145d68425c 100644
--- a/apps/files_sharing/l10n/en_GB.json
+++ b/apps/files_sharing/l10n/en_GB.json
@@ -17,6 +17,8 @@
"No ownCloud installation found at {remote}" : "No ownCloud installation found at {remote}",
"Invalid ownCloud url" : "Invalid ownCloud URL",
"Shared by" : "Shared by",
+ "A file or folder was shared from <strong>another server</strong>" : "A file or folder was shared from <strong>another server</strong>",
+ "You received a new remote share from %s" : "You received a new remote share from %s",
"This share is password-protected" : "This share is password-protected",
"The password is wrong. Try again." : "The password is wrong. Try again.",
"Password" : "Password",
diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js
index 922c52aeaa0..d7bfe45928f 100644
--- a/apps/files_sharing/l10n/es.js
+++ b/apps/files_sharing/l10n/es.js
@@ -19,6 +19,7 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "No se encontró una instalación de ownCloud en {remote}",
"Invalid ownCloud url" : "URL de ownCloud inválido",
"Shared by" : "Compartido por",
+ "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>",
"This share is password-protected" : "Este elemento compartido esta protegido por contraseña",
"The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.",
"Password" : "Contraseña",
diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json
index 8339a435be0..d7d3331ab22 100644
--- a/apps/files_sharing/l10n/es.json
+++ b/apps/files_sharing/l10n/es.json
@@ -17,6 +17,7 @@
"No ownCloud installation found at {remote}" : "No se encontró una instalación de ownCloud en {remote}",
"Invalid ownCloud url" : "URL de ownCloud inválido",
"Shared by" : "Compartido por",
+ "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>",
"This share is password-protected" : "Este elemento compartido esta protegido por contraseña",
"The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.",
"Password" : "Contraseña",
diff --git a/apps/files_sharing/l10n/fi_FI.js b/apps/files_sharing/l10n/fi_FI.js
index bb02376e115..ad455736d86 100644
--- a/apps/files_sharing/l10n/fi_FI.js
+++ b/apps/files_sharing/l10n/fi_FI.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "ownCloud-asennusta ei löytynyt kohteesta {remote}",
"Invalid ownCloud url" : "Virheellinen ownCloud-osoite",
"Shared by" : "Jakanut",
+ "A file or folder was shared from <strong>another server</strong>" : "Tiedosto tai kansio jaettiin <strong>toiselta palvelimelta</strong>",
+ "You received a new remote share from %s" : "Vastaanotit uuden etäjaon käyttäjältä %s",
"This share is password-protected" : "Tämä jako on suojattu salasanalla",
"The password is wrong. Try again." : "Väärä salasana. Yritä uudelleen.",
"Password" : "Salasana",
diff --git a/apps/files_sharing/l10n/fi_FI.json b/apps/files_sharing/l10n/fi_FI.json
index 84b681252dc..83423ae1bcd 100644
--- a/apps/files_sharing/l10n/fi_FI.json
+++ b/apps/files_sharing/l10n/fi_FI.json
@@ -17,6 +17,8 @@
"No ownCloud installation found at {remote}" : "ownCloud-asennusta ei löytynyt kohteesta {remote}",
"Invalid ownCloud url" : "Virheellinen ownCloud-osoite",
"Shared by" : "Jakanut",
+ "A file or folder was shared from <strong>another server</strong>" : "Tiedosto tai kansio jaettiin <strong>toiselta palvelimelta</strong>",
+ "You received a new remote share from %s" : "Vastaanotit uuden etäjaon käyttäjältä %s",
"This share is password-protected" : "Tämä jako on suojattu salasanalla",
"The password is wrong. Try again." : "Väärä salasana. Yritä uudelleen.",
"Password" : "Salasana",
diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js
index 98f1a46627d..734f1091f75 100644
--- a/apps/files_sharing/l10n/fr.js
+++ b/apps/files_sharing/l10n/fr.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "Aucune installation ownCloud n'a été trouvée sur {remote}",
"Invalid ownCloud url" : "URL ownCloud invalide",
"Shared by" : "Partagé par",
+ "A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>",
+ "You received a new remote share from %s" : "Vous avez reçu un partage distant de %s",
"This share is password-protected" : "Ce partage est protégé par un mot de passe",
"The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.",
"Password" : "Mot de passe",
diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json
index c7145f92e98..5fbdc5da72b 100644
--- a/apps/files_sharing/l10n/fr.json
+++ b/apps/files_sharing/l10n/fr.json
@@ -17,6 +17,8 @@
"No ownCloud installation found at {remote}" : "Aucune installation ownCloud n'a été trouvée sur {remote}",
"Invalid ownCloud url" : "URL ownCloud invalide",
"Shared by" : "Partagé par",
+ "A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>",
+ "You received a new remote share from %s" : "Vous avez reçu un partage distant de %s",
"This share is password-protected" : "Ce partage est protégé par un mot de passe",
"The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.",
"Password" : "Mot de passe",
diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js
index c0626abb222..42bb76958ec 100644
--- a/apps/files_sharing/l10n/ja.js
+++ b/apps/files_sharing/l10n/ja.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "{remote} にはownCloudがインストールされていません",
"Invalid ownCloud url" : "無効なownCloud URL です",
"Shared by" : "共有者:",
+ "A file or folder was shared from <strong>another server</strong>" : "ファイルまたはフォルダーは <strong>他のサーバー</strong>から共有されました",
+ "You received a new remote share from %s" : "%sからリモート共有のリクエストは\n届きました。",
"This share is password-protected" : "この共有はパスワードで保護されています",
"The password is wrong. Try again." : "パスワードが間違っています。再試行してください。",
"Password" : "パスワード",
diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json
index 1a199b9e6dc..87128114d7c 100644
--- a/apps/files_sharing/l10n/ja.json
+++ b/apps/files_sharing/l10n/ja.json
@@ -17,6 +17,8 @@
"No ownCloud installation found at {remote}" : "{remote} にはownCloudがインストールされていません",
"Invalid ownCloud url" : "無効なownCloud URL です",
"Shared by" : "共有者:",
+ "A file or folder was shared from <strong>another server</strong>" : "ファイルまたはフォルダーは <strong>他のサーバー</strong>から共有されました",
+ "You received a new remote share from %s" : "%sからリモート共有のリクエストは\n届きました。",
"This share is password-protected" : "この共有はパスワードで保護されています",
"The password is wrong. Try again." : "パスワードが間違っています。再試行してください。",
"Password" : "パスワード",
diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js
index e997a1167f4..e566b2618b2 100644
--- a/apps/files_sharing/l10n/nl.js
+++ b/apps/files_sharing/l10n/nl.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "Geen ownCloud installatie gevonden op {remote}",
"Invalid ownCloud url" : "Ongeldige ownCloud url",
"Shared by" : "Gedeeld door",
+ "A file or folder was shared from <strong>another server</strong>" : "Een bestand of map werd gedeeld vanaf <strong>een andere server</strong>",
+ "You received a new remote share from %s" : "U ontving een nieuwe externe share van %s",
"This share is password-protected" : "Deze share is met een wachtwoord beveiligd",
"The password is wrong. Try again." : "Wachtwoord ongeldig. Probeer het nogmaals.",
"Password" : "Wachtwoord",
diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json
index 9d6fd9c37ca..a386c43fe9c 100644
--- a/apps/files_sharing/l10n/nl.json
+++ b/apps/files_sharing/l10n/nl.json
@@ -17,6 +17,8 @@
"No ownCloud installation found at {remote}" : "Geen ownCloud installatie gevonden op {remote}",
"Invalid ownCloud url" : "Ongeldige ownCloud url",
"Shared by" : "Gedeeld door",
+ "A file or folder was shared from <strong>another server</strong>" : "Een bestand of map werd gedeeld vanaf <strong>een andere server</strong>",
+ "You received a new remote share from %s" : "U ontving een nieuwe externe share van %s",
"This share is password-protected" : "Deze share is met een wachtwoord beveiligd",
"The password is wrong. Try again." : "Wachtwoord ongeldig. Probeer het nogmaals.",
"Password" : "Wachtwoord",
diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js
index 57d2018282c..d7cb4df4dbe 100644
--- a/apps/files_sharing/l10n/pt_BR.js
+++ b/apps/files_sharing/l10n/pt_BR.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "Nenhuma instalação ownCloud encontrada em {remote}",
"Invalid ownCloud url" : "Url invalida para ownCloud",
"Shared by" : "Compartilhado por",
+ "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhada a partir de <strong>outro servidor</strong>",
+ "You received a new remote share from %s" : "Você recebeu um novo compartilhamento remoto de %s",
"This share is password-protected" : "Este compartilhamento esta protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
"Password" : "Senha",
diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json
index 1587aca9832..73be570ebd0 100644
--- a/apps/files_sharing/l10n/pt_BR.json
+++ b/apps/files_sharing/l10n/pt_BR.json
@@ -17,6 +17,8 @@
"No ownCloud installation found at {remote}" : "Nenhuma instalação ownCloud encontrada em {remote}",
"Invalid ownCloud url" : "Url invalida para ownCloud",
"Shared by" : "Compartilhado por",
+ "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhada a partir de <strong>outro servidor</strong>",
+ "You received a new remote share from %s" : "Você recebeu um novo compartilhamento remoto de %s",
"This share is password-protected" : "Este compartilhamento esta protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
"Password" : "Senha",
diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js
index f8a73755cd1..ad639cc5bcc 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"No ownCloud installation found at {remote}" : "Не найдено ownCloud на {remote}",
"Invalid ownCloud url" : "Неверный адрес ownCloud",
"Shared by" : "Опубликовано",
+ "A file or folder was shared from <strong>another server</strong>" : "Файл или папка, опубликованная на <strong>другом сервере</strong>",
+ "You received a new remote share from %s" : "Вы получили новую публикацию от %s",
"This share is password-protected" : "Для доступа к информации необходимо ввести пароль",
"The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.",
"Password" : "Пароль",
diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index ab20e0c3e92..21607bc8163 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -17,6 +17,8 @@
"No ownCloud installation found at {remote}" : "Не найдено ownCloud на {remote}",
"Invalid ownCloud url" : "Неверный адрес ownCloud",
"Shared by" : "Опубликовано",
+ "A file or folder was shared from <strong>another server</strong>" : "Файл или папка, опубликованная на <strong>другом сервере</strong>",
+ "You received a new remote share from %s" : "Вы получили новую публикацию от %s",
"This share is password-protected" : "Для доступа к информации необходимо ввести пароль",
"The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.",
"Password" : "Пароль",
diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js
index 7bbeefc9622..1b0082f6c1f 100644
--- a/apps/files_sharing/l10n/tr.js
+++ b/apps/files_sharing/l10n/tr.js
@@ -36,6 +36,6 @@ OC.L10N.register(
"Direct link" : "Doğrudan bağlantı",
"Server-to-Server Sharing" : "Sunucu-Sunucu Paylaşımı",
"Allow users on this server to send shares to other servers" : "Bu sunucudaki kullanıcıların diğer sunuculara paylaşım göndermelerine izin ver",
- "Allow users on this server to receive shares from other servers" : "Bu sunucudaki kullanıcıların diğer sunucularda paylaşım almalarına izin ver"
+ "Allow users on this server to receive shares from other servers" : "Bu sunucudaki kullanıcıların diğer sunuculardan paylaşım almalarına izin ver"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json
index f91ab02288b..b9b4e46569e 100644
--- a/apps/files_sharing/l10n/tr.json
+++ b/apps/files_sharing/l10n/tr.json
@@ -34,6 +34,6 @@
"Direct link" : "Doğrudan bağlantı",
"Server-to-Server Sharing" : "Sunucu-Sunucu Paylaşımı",
"Allow users on this server to send shares to other servers" : "Bu sunucudaki kullanıcıların diğer sunuculara paylaşım göndermelerine izin ver",
- "Allow users on this server to receive shares from other servers" : "Bu sunucudaki kullanıcıların diğer sunucularda paylaşım almalarına izin ver"
+ "Allow users on this server to receive shares from other servers" : "Bu sunucudaki kullanıcıların diğer sunuculardan paylaşım almalarına izin ver"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/lib/activity.php b/apps/files_sharing/lib/activity.php
new file mode 100644
index 00000000000..979df1c1da6
--- /dev/null
+++ b/apps/files_sharing/lib/activity.php
@@ -0,0 +1,196 @@
+<?php
+/**
+ * ownCloud - publish activities
+ *
+ * @copyright (c) 2014, ownCloud Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.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_Sharing;
+
+class Activity implements \OCP\Activity\IExtension {
+
+ const TYPE_REMOTE_SHARE = 'remote_share';
+ const SUBJECT_REMOTE_SHARE_RECEIVED = 'remote_share_received';
+ const SUBJECT_REMOTE_SHARE_ACCEPTED = 'remote_share_accepted';
+ const SUBJECT_REMOTE_SHARE_DECLINED = 'remote_share_declined';
+ const SUBJECT_REMOTE_SHARE_UNSHARED = 'remote_share_unshared';
+
+ /**
+ * The extension can return an array of additional notification types.
+ * If no additional types are to be added false is to be returned
+ *
+ * @param string $languageCode
+ * @return array|false
+ */
+ public function getNotificationTypes($languageCode) {
+ $l = \OC::$server->getL10N('files_sharing', $languageCode);
+ return array(self::TYPE_REMOTE_SHARE => $l->t('A file or folder was shared from <strong>another server</strong>'));
+ }
+
+ /**
+ * The extension can filter the types based on the filter if required.
+ * In case no filter is to be applied false is to be returned unchanged.
+ *
+ * @param array $types
+ * @param string $filter
+ * @return array|false
+ */
+ public function filterNotificationTypes($types, $filter) {
+ return $types;
+ }
+
+ /**
+ * For a given method additional types to be displayed in the settings can be returned.
+ * In case no additional types are to be added false is to be returned.
+ *
+ * @param string $method
+ * @return array|false
+ */
+ public function getDefaultTypes($method) {
+ if ($method === 'stream') {
+ return array(self::TYPE_REMOTE_SHARE);
+ }
+
+ return false;
+ }
+
+ /**
+ * The extension can translate a given message to the requested languages.
+ * If no translation is available false is to be returned.
+ *
+ * @param string $app
+ * @param string $text
+ * @param array $params
+ * @param boolean $stripPath
+ * @param boolean $highlightParams
+ * @param string $languageCode
+ * @return string|false
+ */
+ public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) {
+
+ $l = \OC::$server->getL10N('files_sharing', $languageCode);
+
+ if (!$text) {
+ return '';
+ }
+
+ if ($app === 'files_sharing') {
+ switch ($text) {
+ case self::SUBJECT_REMOTE_SHARE_RECEIVED:
+ return $l->t('You received a new remote share from %s', $params)->__toString();
+ case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
+ return $l->t('%1$s accepted remote share %2$s', $params)->__toString();
+ case self::SUBJECT_REMOTE_SHARE_DECLINED:
+ return $l->t('%1$s declined remote share %2$s', $params)->__toString();
+ case self::SUBJECT_REMOTE_SHARE_UNSHARED:
+ return $l->t('%1$s unshared %2$s', $params)->__toString();
+ }
+ }
+ }
+
+ /**
+ * The extension can define the type of parameters for translation
+ *
+ * Currently known types are:
+ * * file => will strip away the path of the file and add a tooltip with it
+ * * username => will add the avatar of the user
+ *
+ * @param string $app
+ * @param string $text
+ * @return array|false
+ */
+ public function getSpecialParameterList($app, $text) {
+ if ($app === 'files_sharing') {
+ switch ($text) {
+ case self::SUBJECT_REMOTE_SHARE_RECEIVED:
+ return array(
+ 0 => '',// We can not use 'username' since the user is in a different ownCloud
+ );
+ case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
+ case self::SUBJECT_REMOTE_SHARE_DECLINED:
+ case self::SUBJECT_REMOTE_SHARE_UNSHARED:
+ return array(
+ 0 => '',// We can not use 'username' since the user is in a different ownCloud
+ 1 => 'file',
+ );
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * A string naming the css class for the icon to be used can be returned.
+ * If no icon is known for the given type false is to be returned.
+ *
+ * @param string $type
+ * @return string|false
+ */
+ public function getTypeIcon($type) {
+ return 'icon-share';
+ }
+
+ /**
+ * The extension can define the parameter grouping by returning the index as integer.
+ * In case no grouping is required false is to be returned.
+ *
+ * @param array $activity
+ * @return integer|false
+ */
+ public function getGroupParameter($activity) {
+ return false;
+ }
+
+ /**
+ * The extension can define additional navigation entries. The array returned has to contain two keys 'top'
+ * and 'apps' which hold arrays with the relevant entries.
+ * If no further entries are to be added false is no be returned.
+ *
+ * @return array|false
+ */
+ public function getNavigation() {
+ return false;
+ }
+
+ /**
+ * The extension can check if a customer filter (given by a query string like filter=abc) is valid or not.
+ *
+ * @param string $filterValue
+ * @return boolean
+ */
+ public function isFilterValid($filterValue) {
+ return false;
+ }
+
+ /**
+ * For a given filter the extension can specify the sql query conditions including parameters for that query.
+ * In case the extension does not know the filter false is to be returned.
+ * The query condition and the parameters are to be returned as array with two elements.
+ * E.g. return array('`app` = ? and `message` like ?', array('mail', 'ownCloud%'));
+ *
+ * @param string $filter
+ * @return array|false
+ */
+ public function getQueryForFilter($filter) {
+ if ($filter === 'shares') {
+ return array('`app` = ? and `type` = ?', array('files_sharing', self::TYPE_REMOTE_SHARE));
+ }
+ return false;
+ }
+
+}
diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 270ed704bbd..e3bee145876 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -89,16 +89,18 @@ class Shared_Cache extends Cache {
$cache = $this->getSourceCache($file);
if ($cache) {
$data = $cache->get($this->files[$file]);
- $data['displayname_owner'] = \OC_User::getDisplayName($this->storage->getSharedFrom());
- $data['path'] = $file;
- if ($file === '') {
- $data['is_share_mount_point'] = true;
- }
- $data['uid_owner'] = $this->storage->getOwner($file);
- if (isset($data['permissions'])) {
- $data['permissions'] &= $this->storage->getPermissions($file);
- } else {
- $data['permissions'] = $this->storage->getPermissions($file);
+ if ($data) {
+ $data['displayname_owner'] = \OC_User::getDisplayName($this->storage->getSharedFrom());
+ $data['path'] = $file;
+ if ($file === '') {
+ $data['is_share_mount_point'] = true;
+ }
+ $data['uid_owner'] = $this->storage->getOwner($file);
+ if (isset($data['permissions'])) {
+ $data['permissions'] &= $this->storage->getPermissions($file);
+ } else {
+ $data['permissions'] = $this->storage->getPermissions($file);
+ }
}
return $data;
}
@@ -343,6 +345,46 @@ class Shared_Cache extends Cache {
}
/**
+ * search for files by tag
+ *
+ * @param string|int $tag tag to search for
+ * @param string $userId owner of the tags
+ * @return array file data
+ */
+ public function searchByTag($tag, $userId) {
+ // TODO: inject this
+ $tagger = \OC::$server->getTagManager()->load('files', null, null, $userId);
+ $result = array();
+ $exploreDirs = array('');
+ // FIXME: this is so wrong and unefficient, need to replace with actual DB queries
+ while (count($exploreDirs) > 0) {
+ $dir = array_pop($exploreDirs);
+ $files = $this->getFolderContents($dir);
+ // no results?
+ if (!$files) {
+ // maybe it's a single shared file
+ $file = $this->get('');
+ $tags = $tagger->getTagsForObjects(array((int)$file['fileid']));
+ if (!empty($tags) && in_array($tag, current($tags))) {
+ $result[] = $file;
+ }
+ continue;
+ }
+ foreach ($files as $file) {
+ if ($file['mimetype'] === 'httpd/unix-directory') {
+ $exploreDirs[] = ltrim($dir . '/' . $file['name'], '/');
+ } else {
+ $tags = $tagger->getTagsForObjects(array((int)$file['fileid']));
+ if (!empty($tags) && in_array($tag, current($tags))) {
+ $result[] = $file;
+ }
+ }
+ }
+ }
+ return $result;
+ }
+
+ /**
* get the size of a folder and set it in the cache
*
* @param string $path
diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index 8176302a86a..b52e1a5044e 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -24,7 +24,7 @@ class Manager {
private $mountManager;
/**
- * @var \OC\Files\Storage\Loader
+ * @var \OC\Files\Storage\StorageFactory
*/
private $storageLoader;
@@ -37,10 +37,10 @@ class Manager {
* @param \OCP\IDBConnection $connection
* @param \OC\Files\Mount\Manager $mountManager
* @param \OC\User\Session $userSession
- * @param \OC\Files\Storage\Loader $storageLoader
+ * @param \OC\Files\Storage\StorageFactory $storageLoader
*/
public function __construct(\OCP\IDBConnection $connection, \OC\Files\Mount\Manager $mountManager,
- \OC\Files\Storage\Loader $storageLoader, \OC\User\Session $userSession) {
+ \OC\Files\Storage\StorageFactory $storageLoader, \OC\User\Session $userSession) {
$this->connection = $connection;
$this->mountManager = $mountManager;
$this->userSession = $userSession;
@@ -50,14 +50,8 @@ class Manager {
public function addShare($remote, $token, $password, $name, $owner) {
$user = $this->userSession->getUser();
if ($user) {
- $query = $this->connection->prepare('
- INSERT INTO `*PREFIX*share_external`
- (`remote`, `share_token`, `password`, `name`, `owner`, `user`, `mountpoint`, `mountpoint_hash`)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)
- ');
$mountPoint = Filesystem::normalizePath('/' . $name);
- $hash = md5($mountPoint);
- $query->execute(array($remote, $token, $password, $name, $owner, $user->getUID(), $mountPoint, $hash));
+ \OCA\Files_Sharing\Helper::addServer2ServerShare($remote, $token, $name, $mountPoint, $owner, $user->getUID(), $password, -1, true);
$options = array(
'remote' => $remote,
@@ -81,9 +75,9 @@ class Manager {
$query = $this->connection->prepare('
SELECT `remote`, `share_token`, `password`, `mountpoint`, `owner`
FROM `*PREFIX*share_external`
- WHERE `user` = ?
+ WHERE `user` = ? AND `accepted` = ?
');
- $query->execute(array($user->getUID()));
+ $query->execute(array($user->getUID(), 1));
while ($row = $query->fetch()) {
$row['manager'] = $this;
diff --git a/apps/files_sharing/lib/external/mount.php b/apps/files_sharing/lib/external/mount.php
index e564dded69a..6fd9882cb2a 100644
--- a/apps/files_sharing/lib/external/mount.php
+++ b/apps/files_sharing/lib/external/mount.php
@@ -8,9 +8,10 @@
namespace OCA\Files_Sharing\External;
+use OC\Files\Mount\MountPoint;
use OC\Files\Mount\MoveableMount;
-class Mount extends \OC\Files\Mount\Mount implements MoveableMount {
+class Mount extends MountPoint implements MoveableMount {
/**
* @var \OCA\Files_Sharing\External\Manager
@@ -22,7 +23,7 @@ class Mount extends \OC\Files\Mount\Mount implements MoveableMount {
* @param string $mountpoint
* @param array $options
* @param \OCA\Files_Sharing\External\Manager $manager
- * @param \OC\Files\Storage\Loader $loader
+ * @param \OC\Files\Storage\StorageFactory $loader
*/
public function __construct($storage, $mountpoint, $options, $manager, $loader = null) {
parent::__construct($storage, $mountpoint, $options, $loader);
diff --git a/apps/files_sharing/lib/helper.php b/apps/files_sharing/lib/helper.php
index f7204a8db8f..c83debe952f 100644
--- a/apps/files_sharing/lib/helper.php
+++ b/apps/files_sharing/lib/helper.php
@@ -21,6 +21,30 @@ class Helper {
}
/**
+ * add server-to-server share to database
+ *
+ * @param string $remote
+ * @param string $token
+ * @param string $name
+ * @param string $mountPoint
+ * @param string $owner
+ * @param string $user
+ * @param string $password
+ * @param int $remoteId
+ * @param bool $accepted
+ */
+ public static function addServer2ServerShare($remote, $token, $name, $mountPoint, $owner, $user, $password='', $remoteId=-1, $accepted = false) {
+ $accepted = $accepted ? 1 : 0;
+ $query = \OCP\DB::prepare('
+ INSERT INTO `*PREFIX*share_external`
+ (`remote`, `share_token`, `password`, `name`, `owner`, `user`, `mountpoint`, `mountpoint_hash`, `accepted`, `remote_id`)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+ ');
+ $hash = md5($mountPoint);
+ $query->execute(array($remote, $token, $password, $name, $owner, $user, $mountPoint, $hash, $accepted, $remoteId));
+ }
+
+ /**
* Sets up the filesystem and user for public sharing
* @param string $token string share token
* @param string $relativePath optional path relative to the share
diff --git a/apps/files_sharing/lib/sharedmount.php b/apps/files_sharing/lib/sharedmount.php
index a93ecfb3b1b..d16dbf89ccf 100644
--- a/apps/files_sharing/lib/sharedmount.php
+++ b/apps/files_sharing/lib/sharedmount.php
@@ -8,13 +8,13 @@
namespace OCA\Files_Sharing;
-use OC\Files\Mount\Mount;
+use OC\Files\Mount\MountPoint;
use OC\Files\Mount\MoveableMount;
/**
* Shared mount points can be moved by the user
*/
-class SharedMount extends Mount implements MoveableMount {
+class SharedMount extends MountPoint implements MoveableMount {
/**
* @var \OC\Files\Storage\Shared $storage
*/
diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php
index 1259197423b..dd6de15010f 100644
--- a/apps/files_sharing/tests/api.php
+++ b/apps/files_sharing/tests/api.php
@@ -76,7 +76,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2;
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertTrue($result->succeeded());
$data = $result->getData();
@@ -93,7 +93,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['path'] = $this->folder;
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
// check if API call was successful
$this->assertTrue($result->succeeded());
@@ -129,7 +129,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertFalse($result->succeeded());
@@ -138,7 +138,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
$_POST['password'] = '';
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertFalse($result->succeeded());
// share with password should succeed
@@ -146,7 +146,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
$_POST['password'] = 'foo';
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertTrue($result->succeeded());
$data = $result->getData();
@@ -157,7 +157,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['password'] = 'bar';
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertTrue($result->succeeded());
// removing password should fail
@@ -166,7 +166,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['password'] = '';
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertFalse($result->succeeded());
// cleanup
@@ -187,7 +187,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2;
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertTrue($result->succeeded());
$data = $result->getData();
@@ -213,7 +213,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2;
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertTrue($result->succeeded());
$data = $result->getData();
@@ -238,7 +238,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2;
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertFalse($result->succeeded());
@@ -259,7 +259,7 @@ class Test_Files_Sharing_Api extends TestCase {
\OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, 31);
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -286,7 +286,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = $this->filename;
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -323,7 +323,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = $this->filename;
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -333,7 +333,7 @@ class Test_Files_Sharing_Api extends TestCase {
// now also ask for the reshares
$_GET['reshares'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -378,7 +378,7 @@ class Test_Files_Sharing_Api extends TestCase {
// call getShare() with share ID
$params = array('id' => $share['id']);
- $result = Share\Api::getShare($params);
+ $result = \OCA\Files_Sharing\API\Local::getShare($params);
$this->assertTrue($result->succeeded());
@@ -413,7 +413,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = $this->folder;
$_GET['subfiles'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -470,7 +470,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = $value['query'];
$_GET['subfiles'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -521,7 +521,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = '/';
$_GET['subfiles'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -583,7 +583,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = '/';
$_GET['subfiles'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -652,7 +652,7 @@ class Test_Files_Sharing_Api extends TestCase {
$expectedPath1 = $this->subfolder;
$_GET['path'] = $expectedPath1;
- $result1 = Share\Api::getAllShares(array());
+ $result1 = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result1->succeeded());
@@ -664,7 +664,7 @@ class Test_Files_Sharing_Api extends TestCase {
$expectedPath2 = $this->folder . $this->subfolder;
$_GET['path'] = $expectedPath2;
- $result2 = Share\Api::getAllShares(array());
+ $result2 = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result2->succeeded());
@@ -734,7 +734,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = '/';
$_GET['subfiles'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -771,7 +771,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params = array('id' => 0);
- $result = Share\Api::getShare($params);
+ $result = \OCA\Files_Sharing\API\Local::getShare($params);
$this->assertEquals(404, $result->getStatusCode());
$meta = $result->getMeta();
@@ -831,7 +831,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['permissions'] = 1;
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$meta = $result->getMeta();
$this->assertTrue($result->succeeded(), $meta['message']);
@@ -859,7 +859,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['password'] = 'foo';
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertTrue($result->succeeded());
@@ -919,7 +919,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['publicUpload'] = 'true';
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertTrue($result->succeeded());
@@ -977,7 +977,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['expireDate'] = $dateWithinRange->format('Y-m-d');
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertTrue($result->succeeded());
@@ -995,7 +995,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['expireDate'] = $dateOutOfRange->format('Y-m-d');
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertFalse($result->succeeded());
@@ -1033,7 +1033,7 @@ class Test_Files_Sharing_Api extends TestCase {
$this->assertEquals(2, count($items));
foreach ($items as $item) {
- $result = Share\Api::deleteShare(array('id' => $item['id']));
+ $result = \OCA\Files_Sharing\API\Local::deleteShare(array('id' => $item['id']));
$this->assertTrue($result->succeeded());
}
@@ -1072,7 +1072,7 @@ class Test_Files_Sharing_Api extends TestCase {
$this->assertEquals(1, count($items));
$item = reset($items);
- $result3 = Share\Api::deleteShare(array('id' => $item['id']));
+ $result3 = \OCA\Files_Sharing\API\Local::deleteShare(array('id' => $item['id']));
$this->assertTrue($result3->succeeded());
diff --git a/apps/files_sharing/tests/cache.php b/apps/files_sharing/tests/cache.php
index aec1983bad3..b60bba73db8 100644
--- a/apps/files_sharing/tests/cache.php
+++ b/apps/files_sharing/tests/cache.php
@@ -204,6 +204,40 @@ class Test_Files_Sharing_Cache extends TestCase {
$this->verifyFiles($check, $results);
}
+ /**
+ * Test searching by tag
+ */
+ function testSearchByTag() {
+ $userId = \OC::$server->getUserSession()->getUser()->getUId();
+ $id1 = $this->sharedCache->get('bar.txt')['fileid'];
+ $id2 = $this->sharedCache->get('subdir/another too.txt')['fileid'];
+ $id3 = $this->sharedCache->get('subdir/not a text file.xml')['fileid'];
+ $id4 = $this->sharedCache->get('subdir/another.txt')['fileid'];
+ $tagManager = \OC::$server->getTagManager()->load('files', null, null, $userId);
+ $tagManager->tagAs($id1, 'tag1');
+ $tagManager->tagAs($id1, 'tag2');
+ $tagManager->tagAs($id2, 'tag1');
+ $tagManager->tagAs($id3, 'tag1');
+ $tagManager->tagAs($id4, 'tag2');
+ $results = $this->sharedStorage->getCache()->searchByTag('tag1', $userId);
+ $check = array(
+ array(
+ 'name' => 'bar.txt',
+ 'path' => 'bar.txt'
+ ),
+ array(
+ 'name' => 'another too.txt',
+ 'path' => 'subdir/another too.txt'
+ ),
+ array(
+ 'name' => 'not a text file.xml',
+ 'path' => 'subdir/not a text file.xml'
+ ),
+ );
+ $this->verifyFiles($check, $results);
+ $tagManager->delete(array('tag1', 'tag2'));
+ }
+
function testGetFolderContentsInRoot() {
$results = $this->user2View->getDirectoryContent('/');
diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js
index 2cf5dc47b63..e5b5de314d7 100644
--- a/apps/files_sharing/tests/js/shareSpec.js
+++ b/apps/files_sharing/tests/js/shareSpec.js
@@ -9,7 +9,6 @@
*/
describe('OCA.Sharing.Util tests', function() {
- var oldFileListPrototype;
var fileList;
var testFiles;
@@ -24,10 +23,6 @@ describe('OCA.Sharing.Util tests', function() {
}
beforeEach(function() {
- // back up prototype, as it will be extended by
- // the sharing code
- oldFileListPrototype = _.extend({}, OCA.Files.FileList.prototype);
-
var $content = $('<div id="content"></div>');
$('#testArea').append($content);
// dummy file list
@@ -41,12 +36,12 @@ describe('OCA.Sharing.Util tests', function() {
$('#content').append($div);
var fileActions = new OCA.Files.FileActions();
- OCA.Sharing.Util.initialize(fileActions);
fileList = new OCA.Files.FileList(
$div, {
fileActions : fileActions
}
);
+ OCA.Sharing.Util.attach(fileList);
testFiles = [{
id: 1,
@@ -67,7 +62,6 @@ describe('OCA.Sharing.Util tests', function() {
};
});
afterEach(function() {
- OCA.Files.FileList.prototype = oldFileListPrototype;
delete OCA.Sharing.sharesLoaded;
delete OC.Share.droppedDown;
fileList.destroy();
@@ -105,7 +99,7 @@ describe('OCA.Sharing.Util tests', function() {
$action = $tr.find('.action-share');
expect($action.hasClass('permanent')).toEqual(false);
expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder.svg');
expect($action.find('img').length).toEqual(1);
});
it('shows simple share text with share icon', function() {
@@ -125,7 +119,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($action.hasClass('permanent')).toEqual(true);
expect($action.find('>span').text()).toEqual('Shared');
expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder-shared.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
expect($action.find('img').length).toEqual(1);
});
it('shows simple share text with public icon when shared with link', function() {
@@ -146,7 +140,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($action.hasClass('permanent')).toEqual(true);
expect($action.find('>span').text()).toEqual('Shared');
expect(OC.basename($action.find('img').attr('src'))).toEqual('public.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder-public.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-public.svg');
expect($action.find('img').length).toEqual(1);
});
it('shows owner name when owner is available', function() {
@@ -167,7 +161,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($action.hasClass('permanent')).toEqual(true);
expect($action.find('>span').text()).toEqual('User One');
expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder-shared.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
});
it('shows recipients when recipients are available', function() {
var $action, $tr;
@@ -187,7 +181,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($action.hasClass('permanent')).toEqual(true);
expect($action.find('>span').text()).toEqual('Shared with User One, User Two');
expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder-shared.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
expect($action.find('img').length).toEqual(1);
});
it('shows static share text when file shared with user that has no share permission', function() {
@@ -209,7 +203,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($action.hasClass('permanent')).toEqual(true);
expect($action.find('>span').text().trim()).toEqual('User One');
expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder-shared.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
expect($action.find('img').length).toEqual(1);
});
});
diff --git a/apps/files_sharing/tests/js/sharedfilelistSpec.js b/apps/files_sharing/tests/js/sharedfilelistSpec.js
index dc6931af6e8..7fdc6345e38 100644
--- a/apps/files_sharing/tests/js/sharedfilelistSpec.js
+++ b/apps/files_sharing/tests/js/sharedfilelistSpec.js
@@ -9,8 +9,7 @@
*/
describe('OCA.Sharing.FileList tests', function() {
- var testFiles, alertStub, notificationStub, fileList, fileActions;
- var oldFileListPrototype;
+ var testFiles, alertStub, notificationStub, fileList;
beforeEach(function() {
alertStub = sinon.stub(OC.dialogs, 'alert');
@@ -46,18 +45,11 @@ describe('OCA.Sharing.FileList tests', function() {
'<div id="emptycontent">Empty content message</div>' +
'</div>'
);
- // back up prototype, as it will be extended by
- // the sharing code
- oldFileListPrototype = _.extend({}, OCA.Files.FileList.prototype);
- fileActions = new OCA.Files.FileActions();
- OCA.Sharing.Util.initialize(fileActions);
});
afterEach(function() {
- OCA.Files.FileList.prototype = oldFileListPrototype;
testFiles = undefined;
fileList.destroy();
fileList = undefined;
- fileActions = undefined;
notificationStub.restore();
alertStub.restore();
@@ -72,6 +64,7 @@ describe('OCA.Sharing.FileList tests', function() {
sharedWithUser: true
}
);
+ OCA.Sharing.Util.attach(fileList);
fileList.reload();
@@ -193,6 +186,7 @@ describe('OCA.Sharing.FileList tests', function() {
sharedWithUser: false
}
);
+ OCA.Sharing.Util.attach(fileList);
fileList.reload();
@@ -433,6 +427,7 @@ describe('OCA.Sharing.FileList tests', function() {
linksOnly: true
}
);
+ OCA.Sharing.Util.attach(fileList);
fileList.reload();
@@ -575,11 +570,8 @@ describe('OCA.Sharing.FileList tests', function() {
'</div>');
$('#content').append($div);
- fileList = new OCA.Files.FileList(
- $div, {
- fileActions: fileActions
- }
- );
+ fileList = new OCA.Files.FileList($div);
+ OCA.Sharing.Util.attach(fileList);
});
it('external storage root folder', function () {
diff --git a/apps/files_sharing/tests/server2server.php b/apps/files_sharing/tests/server2server.php
new file mode 100644
index 00000000000..7aec0c4951f
--- /dev/null
+++ b/apps/files_sharing/tests/server2server.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * ownCloud - test server-to-server OCS API
+ *
+ * @copyright (c) ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.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/>.
+ *
+ */
+
+use OCA\Files_Sharing\Tests\TestCase;
+
+/**
+ * Class Test_Files_Sharing_Api
+ */
+class Test_Files_Sharing_S2S_OCS_API extends TestCase {
+
+ const TEST_FOLDER_NAME = '/folder_share_api_test';
+
+ private $s2s;
+
+ protected function setUp() {
+ parent::setUp();
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ \OCP\Share::registerBackend('test', 'Test_Share_Backend');
+
+ $this->s2s = new \OCA\Files_Sharing\API\Server2Server();
+ }
+
+ protected function tearDown() {
+ $query = \OCP\DB::prepare('DELETE FROM `*PREFIX*share_external`');
+ $query->execute();
+
+ parent::tearDown();
+ }
+
+ /**
+ * @medium
+ */
+ function testCreateShare() {
+ // simulate a post request
+ $_POST['remote'] = 'localhost';
+ $_POST['token'] = 'token';
+ $_POST['name'] = 'name';
+ $_POST['owner'] = 'owner';
+ $_POST['shareWith'] = self::TEST_FILES_SHARING_API_USER2;
+ $_POST['remote_id'] = 1;
+
+ $result = $this->s2s->createShare(null);
+
+ $this->assertTrue($result->succeeded());
+
+ $query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share_external` WHERE `remote_id` = ?');
+ $result = $query->execute(array('1'));
+ $data = $result->fetchRow();
+
+ $this->assertSame('localhost', $data['remote']);
+ $this->assertSame('token', $data['share_token']);
+ $this->assertSame('/name', $data['name']);
+ $this->assertSame('owner', $data['owner']);
+ $this->assertSame(self::TEST_FILES_SHARING_API_USER2, $data['user']);
+ $this->assertSame(1, (int)$data['remote_id']);
+ $this->assertSame(0, (int)$data['accepted']);
+ }
+
+
+ function testDeclineShare() {
+ $dummy = \OCP\DB::prepare('
+ INSERT INTO `*PREFIX*share`
+ (`share_type`, `uid_owner`, `item_type`, `item_source`, `item_target`, `file_source`, `file_target`, `permissions`, `stime`, `token`)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+ ');
+ $dummy->execute(array(\OCP\Share::SHARE_TYPE_REMOTE, self::TEST_FILES_SHARING_API_USER1, 'test', '1', '/1', '1', '/test.txt', '1', time(), 'token'));
+
+ $verify = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share`');
+ $result = $verify->execute();
+ $data = $result->fetchAll();
+ $this->assertSame(1, count($data));
+
+ $_POST['token'] = 'token';
+ $this->s2s->declineShare(array('id' => $data[0]['id']));
+
+ $verify = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share`');
+ $result = $verify->execute();
+ $data = $result->fetchAll();
+ $this->assertEmpty($data);
+ }
+}