summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorroot <roger.szabo@web.de>2016-07-27 15:17:29 +0800
committerroot <roger.szabo@web.de>2016-07-27 15:17:29 +0800
commit2719dcabed16954c7c01114e7a6357089556ad78 (patch)
treebe77987507ad9a51afd10a2c1a14bd92c5b17ad0 /apps
parent1c64ee67afb41f3d3872f1ad59d5c3c900394bbb (diff)
parent95a0714973b4b6b95658c2904a0de7ba93c8eab9 (diff)
downloadnextcloud-server-2719dcabed16954c7c01114e7a6357089556ad78.tar.gz
nextcloud-server-2719dcabed16954c7c01114e7a6357089556ad78.zip
Merge branch 'master' of https://github.com/nextcloud/server
Diffstat (limited to 'apps')
-rw-r--r--apps/comments/img/comments.svg4
-rw-r--r--apps/federatedfilesharing/l10n/cs_CZ.js17
-rw-r--r--apps/federatedfilesharing/l10n/cs_CZ.json17
-rw-r--r--apps/federation/l10n/cs_CZ.js4
-rw-r--r--apps/federation/l10n/cs_CZ.json4
-rw-r--r--apps/files/appinfo/app.php14
-rw-r--r--apps/files/appinfo/routes.php5
-rw-r--r--apps/files/js/filelist.js7
-rw-r--r--apps/files/js/recentfilelist.js106
-rw-r--r--apps/files/js/recentplugin.js117
-rw-r--r--apps/files/l10n/cs_CZ.js1
-rw-r--r--apps/files/l10n/cs_CZ.json1
-rw-r--r--apps/files/l10n/de.js3
-rw-r--r--apps/files/l10n/de.json3
-rw-r--r--apps/files/l10n/de_DE.js3
-rw-r--r--apps/files/l10n/de_DE.json3
-rw-r--r--apps/files/l10n/it.js1
-rw-r--r--apps/files/l10n/it.json1
-rw-r--r--apps/files/l10n/nl.js1
-rw-r--r--apps/files/l10n/nl.json1
-rw-r--r--apps/files/lib/AppInfo/Application.php3
-rw-r--r--apps/files/lib/Controller/ApiController.php65
-rw-r--r--apps/files/lib/Controller/ViewController.php2
-rw-r--r--apps/files/recentlist.php7
-rw-r--r--apps/files/templates/recentlist.php42
-rw-r--r--apps/files/tests/Controller/ApiControllerTest.php8
-rw-r--r--apps/files/tests/Controller/ViewControllerTest.php25
-rw-r--r--apps/files_external/css/settings.css10
-rw-r--r--apps/files_external/js/settings.js1
-rw-r--r--apps/files_trashbin/ajax/undelete.php3
-rw-r--r--apps/systemtags/img/app.svg4
-rw-r--r--apps/theming/js/settings-admin.js8
-rw-r--r--apps/theming/lib/controller/themingcontroller.php3
-rw-r--r--apps/theming/tests/lib/controller/ThemingControllerTest.php9
-rw-r--r--apps/updatenotification/l10n/cs_CZ.js1
-rw-r--r--apps/updatenotification/l10n/cs_CZ.json1
-rw-r--r--apps/user_ldap/lib/Wizard.php2
-rw-r--r--apps/user_ldap/tests/Integration/Bootstrap.php26
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestAccessGroupsMatchFilter.php4
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestBackupServer.php3
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestBatchApplyUserAttributes.php3
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestConnect.php3
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php3
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php3
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php3
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php3
-rw-r--r--apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php3
-rw-r--r--apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php3
48 files changed, 493 insertions, 71 deletions
diff --git a/apps/comments/img/comments.svg b/apps/comments/img/comments.svg
new file mode 100644
index 00000000000..5cdc84a25d7
--- /dev/null
+++ b/apps/comments/img/comments.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1">
+ <path fill="#fff" d="m16 3c-8.8366 0-16 4.9248-16 11s7.1634 11 16 11c0.49926 0 0.98116-0.03174 1.4688-0.0625l8.5312 7.062v-9.406c3.658-2.016 6-5.1198 6-8.594 0-6.0752-7.164-11-16-11z"/>
+</svg>
diff --git a/apps/federatedfilesharing/l10n/cs_CZ.js b/apps/federatedfilesharing/l10n/cs_CZ.js
index 351fed8ad3d..0a6ba02eeac 100644
--- a/apps/federatedfilesharing/l10n/cs_CZ.js
+++ b/apps/federatedfilesharing/l10n/cs_CZ.js
@@ -2,11 +2,28 @@ OC.L10N.register(
"federatedfilesharing",
{
"Federated sharing" : "Propojené sdílení",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené sdílení {name} od {owner}@{remote}?",
+ "Remote share" : "Vzdálené sdílení",
+ "Remote share password" : "Heslo vzdáleného sdílení",
+ "Cancel" : "Zrušit",
+ "Add remote share" : "Přidat propojené sdílení",
"Invalid Federated Cloud ID" : "Neplatné sdružené cloud ID",
+ "Server to server sharing is not enabled on this server" : "Sdílení ze serveru na server není na tomto serveru povoleno",
+ "Couldn't establish a federated share." : "Nepodařilo se ustavit spojené sdílení.",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Nepodařilo se ustavit propojené sdílení, heslo může být nesprávné.",
+ "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Požadavek na spojené sdílení uspěl, obdržíte pozvánku. Zkontrolujte vaše upozornění.",
+ "The mountpoint name contains invalid characters." : "Jméno přípojného bodu obsahuje neplatné znaky.",
+ "Not allowed to create a federated share with the owner." : "ONení povoleno s autorem vytvořit propojené sdílení.",
+ "Invalid or untrusted SSL certificate" : "Neplatný nebo nedůvěryhodný SSL certifikát",
+ "Could not authenticate to remote share, password might be wrong" : "Autentizace ke vzdálenému sdílení selhala, heslo může být nesprávné",
+ "Storage not valid" : "Úložiště není platné",
+ "Federated Share successfully added" : "Propojené sdílení úspěšně přidáno",
+ "Couldn't add remote share" : "Nepodařilo se přidat propojené sdílení",
"Sharing %s failed, because this item is already shared with %s" : "Sdílení položky %s selhalo, protože položka již je s uživatelem %s sdílena",
"Not allowed to create a federated share with the same user" : "Není povoleno vytvořit propojené sdílení s tím samým uživatelem",
"File is already shared with %s" : "Soubor je již sdílen s %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sdílení %s selhalo, %s se nepodařilo nalézt, server pravděpodobně právě není dostupný.",
+ "Could not find share" : "Nelze nalézt sdílení",
"You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Obdrželi jste \"/%3$s\" jako vzdálené sdílení od %1$s (zastupuje %2$s)",
"You received \"/%3$s\" as a remote share from %1$s" : "Obdrželi jste \"/%3$s\" jako vzdálené sdílení od %1$s",
"Accept" : "Přijmout",
diff --git a/apps/federatedfilesharing/l10n/cs_CZ.json b/apps/federatedfilesharing/l10n/cs_CZ.json
index 379ab76a5a3..26c8dd38be7 100644
--- a/apps/federatedfilesharing/l10n/cs_CZ.json
+++ b/apps/federatedfilesharing/l10n/cs_CZ.json
@@ -1,10 +1,27 @@
{ "translations": {
"Federated sharing" : "Propojené sdílení",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené sdílení {name} od {owner}@{remote}?",
+ "Remote share" : "Vzdálené sdílení",
+ "Remote share password" : "Heslo vzdáleného sdílení",
+ "Cancel" : "Zrušit",
+ "Add remote share" : "Přidat propojené sdílení",
"Invalid Federated Cloud ID" : "Neplatné sdružené cloud ID",
+ "Server to server sharing is not enabled on this server" : "Sdílení ze serveru na server není na tomto serveru povoleno",
+ "Couldn't establish a federated share." : "Nepodařilo se ustavit spojené sdílení.",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Nepodařilo se ustavit propojené sdílení, heslo může být nesprávné.",
+ "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Požadavek na spojené sdílení uspěl, obdržíte pozvánku. Zkontrolujte vaše upozornění.",
+ "The mountpoint name contains invalid characters." : "Jméno přípojného bodu obsahuje neplatné znaky.",
+ "Not allowed to create a federated share with the owner." : "ONení povoleno s autorem vytvořit propojené sdílení.",
+ "Invalid or untrusted SSL certificate" : "Neplatný nebo nedůvěryhodný SSL certifikát",
+ "Could not authenticate to remote share, password might be wrong" : "Autentizace ke vzdálenému sdílení selhala, heslo může být nesprávné",
+ "Storage not valid" : "Úložiště není platné",
+ "Federated Share successfully added" : "Propojené sdílení úspěšně přidáno",
+ "Couldn't add remote share" : "Nepodařilo se přidat propojené sdílení",
"Sharing %s failed, because this item is already shared with %s" : "Sdílení položky %s selhalo, protože položka již je s uživatelem %s sdílena",
"Not allowed to create a federated share with the same user" : "Není povoleno vytvořit propojené sdílení s tím samým uživatelem",
"File is already shared with %s" : "Soubor je již sdílen s %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sdílení %s selhalo, %s se nepodařilo nalézt, server pravděpodobně právě není dostupný.",
+ "Could not find share" : "Nelze nalézt sdílení",
"You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Obdrželi jste \"/%3$s\" jako vzdálené sdílení od %1$s (zastupuje %2$s)",
"You received \"/%3$s\" as a remote share from %1$s" : "Obdrželi jste \"/%3$s\" jako vzdálené sdílení od %1$s",
"Accept" : "Přijmout",
diff --git a/apps/federation/l10n/cs_CZ.js b/apps/federation/l10n/cs_CZ.js
index f59d0987dc2..1aa8b18aea7 100644
--- a/apps/federation/l10n/cs_CZ.js
+++ b/apps/federation/l10n/cs_CZ.js
@@ -8,6 +8,8 @@ OC.L10N.register(
"Federation" : "Sdružování",
"Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.",
"Add server automatically once a federated share was created successfully" : "Přidat server automaticky jakmile je úspěšně vytvořeno sdružené sdílení",
- "Trusted Servers" : "Důvěryhodné servery"
+ "Trusted Servers" : "Důvěryhodné servery",
+ "+ Add Nextcloud server" : "+ Přidat Nextcloud server",
+ "Nextcloud Server" : "Server Nextcloud"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/federation/l10n/cs_CZ.json b/apps/federation/l10n/cs_CZ.json
index 21f4243824d..36d7726e0e6 100644
--- a/apps/federation/l10n/cs_CZ.json
+++ b/apps/federation/l10n/cs_CZ.json
@@ -6,6 +6,8 @@
"Federation" : "Sdružování",
"Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.",
"Add server automatically once a federated share was created successfully" : "Přidat server automaticky jakmile je úspěšně vytvořeno sdružené sdílení",
- "Trusted Servers" : "Důvěryhodné servery"
+ "Trusted Servers" : "Důvěryhodné servery",
+ "+ Add Nextcloud server" : "+ Přidat Nextcloud server",
+ "Nextcloud Server" : "Server Nextcloud"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index cc86e9bf270..850c335c27d 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -28,6 +28,7 @@
*/
\OCP\App::registerAdmin('files', 'admin');
+$l = \OC::$server->getL10N('files');
\OC::$server->getNavigationManager()->add(function () {
$urlGenerator = \OC::$server->getURLGenerator();
@@ -49,8 +50,7 @@ $templateManager->registerTemplate('application/vnd.oasis.opendocument.presentat
$templateManager->registerTemplate('application/vnd.oasis.opendocument.text', 'core/templates/filetemplates/template.odt');
$templateManager->registerTemplate('application/vnd.oasis.opendocument.spreadsheet', 'core/templates/filetemplates/template.ods');
-\OCA\Files\App::getNavigationManager()->add(function () {
- $l = \OC::$server->getL10N('files');
+\OCA\Files\App::getNavigationManager()->add(function () use ($l) {
return [
'id' => 'files',
'appname' => 'files',
@@ -60,6 +60,16 @@ $templateManager->registerTemplate('application/vnd.oasis.opendocument.spreadshe
];
});
+\OCA\Files\App::getNavigationManager()->add(function () use ($l) {
+ return [
+ 'id' => 'recent',
+ 'appname' => 'files',
+ 'script' => 'recentlist.php',
+ 'order' => 2,
+ 'name' => $l->t('Recent'),
+ ];
+});
+
\OC::$server->getActivityManager()->registerExtension(function() {
return new \OCA\Files\Activity(
\OC::$server->query('L10NFactory'),
diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php
index 34bb1011773..7b5ac63a160 100644
--- a/apps/files/appinfo/routes.php
+++ b/apps/files/appinfo/routes.php
@@ -51,6 +51,11 @@ $application->registerRoutes(
'requirements' => array('tagName' => '.+'),
),
array(
+ 'name' => 'API#getRecentFiles',
+ 'url' => '/api/v1/recent/',
+ 'verb' => 'GET'
+ ),
+ array(
'name' => 'API#updateFileSorting',
'url' => '/api/v1/sorting',
'verb' => 'POST'
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index f0b16a57886..24cccb3a5c8 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -175,6 +175,11 @@
_clientSideSort: true,
/**
+ * Whether or not users can change the sort attribute or direction
+ */
+ _allowSorting: true,
+
+ /**
* Current directory
* @type String
*/
@@ -718,7 +723,7 @@
$target = $target.closest('a');
}
sort = $target.attr('data-sort');
- if (sort) {
+ if (sort && this._allowSorting) {
if (this._sort === sort) {
this.setSort(sort, (this._sortDirection === 'desc')?'asc':'desc', true, true);
}
diff --git a/apps/files/js/recentfilelist.js b/apps/files/js/recentfilelist.js
new file mode 100644
index 00000000000..e8c61cbfe2d
--- /dev/null
+++ b/apps/files/js/recentfilelist.js
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+// HACK: this piece needs to be loaded AFTER the files app (for unit tests)
+$(document).ready(function () {
+ (function (OCA) {
+ /**
+ * @class OCA.Files.RecentFileList
+ * @augments OCA.Files.RecentFileList
+ *
+ * @classdesc Recent file list.
+ * Displays the list of recently modified files
+ *
+ * @param $el container element with existing markup for the #controls
+ * and a table
+ * @param [options] map of options, see other parameters
+ */
+ var RecentFileList = function ($el, options) {
+ options.sorting = {
+ mode: 'mtime',
+ direction: 'desc'
+ };
+ this.initialize($el, options);
+ this._allowSorting = false;
+ };
+ RecentFileList.prototype = _.extend({}, OCA.Files.FileList.prototype,
+ /** @lends OCA.Files.RecentFileList.prototype */ {
+ id: 'recent',
+ appName: t('files', 'Recent'),
+
+ _clientSideSort: true,
+ _allowSelection: false,
+
+ /**
+ * @private
+ */
+ initialize: function () {
+ OCA.Files.FileList.prototype.initialize.apply(this, arguments);
+ if (this.initialized) {
+ return;
+ }
+ OC.Plugins.attach('OCA.Files.RecentFileList', this);
+ },
+
+ updateEmptyContent: function () {
+ var dir = this.getCurrentDirectory();
+ if (dir === '/') {
+ // root has special permissions
+ this.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty);
+ this.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty);
+ }
+ else {
+ OCA.Files.FileList.prototype.updateEmptyContent.apply(this, arguments);
+ }
+ },
+
+ getDirectoryPermissions: function () {
+ return OC.PERMISSION_READ | OC.PERMISSION_DELETE;
+ },
+
+ updateStorageStatistics: function () {
+ // no op because it doesn't have
+ // storage info like free space / used space
+ },
+
+ reload: function () {
+ this.showMask();
+ if (this._reloadCall) {
+ this._reloadCall.abort();
+ }
+
+ // there is only root
+ this._setCurrentDir('/', false);
+
+ this._reloadCall = $.ajax({
+ url: OC.generateUrl('/apps/files/api/v1/recent'),
+ type: 'GET',
+ dataType: 'json'
+ });
+ var callBack = this.reloadCallback.bind(this);
+ return this._reloadCall.then(callBack, callBack);
+ },
+
+ reloadCallback: function (result) {
+ delete this._reloadCall;
+ this.hideMask();
+
+ if (result.files) {
+ this.setFiles(result.files.sort(this._sortComparator));
+ return true;
+ }
+ return false;
+ }
+ });
+
+ OCA.Files.RecentFileList = RecentFileList;
+ })(OCA);
+});
+
diff --git a/apps/files/js/recentplugin.js b/apps/files/js/recentplugin.js
new file mode 100644
index 00000000000..fcd427b18a2
--- /dev/null
+++ b/apps/files/js/recentplugin.js
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+(function (OCA) {
+ /**
+ * @namespace OCA.Files.RecentPlugin
+ *
+ * Registers the recent file list from the files app sidebar.
+ */
+ OCA.Files.RecentPlugin = {
+ name: 'Recent',
+
+ /**
+ * @type OCA.Files.RecentFileList
+ */
+ recentFileList: null,
+
+ attach: function () {
+ var self = this;
+ $('#app-content-recent').on('show.plugin-recent', function (e) {
+ self.showFileList($(e.target));
+ });
+ $('#app-content-recent').on('hide.plugin-recent', function () {
+ self.hideFileList();
+ });
+ },
+
+ detach: function () {
+ if (this.recentFileList) {
+ this.recentFileList.destroy();
+ OCA.Files.fileActions.off('setDefault.plugin-recent', this._onActionsUpdated);
+ OCA.Files.fileActions.off('registerAction.plugin-recent', this._onActionsUpdated);
+ $('#app-content-recent').off('.plugin-recent');
+ this.recentFileList = null;
+ }
+ },
+
+ showFileList: function ($el) {
+ if (!this.recentFileList) {
+ this.recentFileList = this._createRecentFileList($el);
+ }
+ return this.recentFileList;
+ },
+
+ hideFileList: function () {
+ if (this.recentFileList) {
+ this.recentFileList.$fileList.empty();
+ }
+ },
+
+ /**
+ * Creates the recent file list.
+ *
+ * @param $el container for the file list
+ * @return {OCA.Files.RecentFileList} file list
+ */
+ _createRecentFileList: function ($el) {
+ var fileActions = this._createFileActions();
+ // register recent list for sidebar section
+ return new OCA.Files.RecentFileList(
+ $el, {
+ fileActions: fileActions,
+ scrollContainer: $('#app-content')
+ }
+ );
+ },
+
+ _createFileActions: function () {
+ // inherit file actions from the files app
+ var fileActions = new OCA.Files.FileActions();
+ // note: not merging the legacy actions because legacy apps are not
+ // compatible with the sharing overview and need to be adapted first
+ fileActions.registerDefaultActions();
+ fileActions.merge(OCA.Files.fileActions);
+
+ if (!this._globalActionsInitialized) {
+ // in case actions are registered later
+ this._onActionsUpdated = _.bind(this._onActionsUpdated, this);
+ OCA.Files.fileActions.on('setDefault.plugin-recent', this._onActionsUpdated);
+ OCA.Files.fileActions.on('registerAction.plugin-recent', this._onActionsUpdated);
+ this._globalActionsInitialized = true;
+ }
+
+ // when the user clicks on a folder, redirect to the corresponding
+ // folder in the files app instead of opening it directly
+ fileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename, context) {
+ OCA.Files.App.setActiveView('files', {silent: true});
+ var path = OC.joinPaths(context.$file.attr('data-path'), filename);
+ OCA.Files.App.fileList.changeDirectory(path, true, true);
+ });
+ fileActions.setDefault('dir', 'Open');
+ return fileActions;
+ },
+
+ _onActionsUpdated: function (ev) {
+ if (ev.action) {
+ this.recentFileList.fileActions.registerAction(ev.action);
+ } else if (ev.defaultAction) {
+ this.recentFileList.fileActions.setDefault(
+ ev.defaultAction.mime,
+ ev.defaultAction.name
+ );
+ }
+ }
+ };
+
+})(OCA);
+
+OC.Plugins.register('OCA.Files.App', OCA.Files.RecentPlugin);
+
diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js
index 54789e62b10..53123735bd7 100644
--- a/apps/files/l10n/cs_CZ.js
+++ b/apps/files/l10n/cs_CZ.js
@@ -21,6 +21,7 @@ OC.L10N.register(
"Invalid directory." : "Neplatný adresář",
"Files" : "Soubory",
"All files" : "Všechny soubory",
+ "Recent" : "Nedávné",
"File could not be found" : "Soubor nelze nalézt",
"Home" : "Domů",
"Close" : "Zavřít",
diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json
index 7758fc3b539..cdee6637638 100644
--- a/apps/files/l10n/cs_CZ.json
+++ b/apps/files/l10n/cs_CZ.json
@@ -19,6 +19,7 @@
"Invalid directory." : "Neplatný adresář",
"Files" : "Soubory",
"All files" : "Všechny soubory",
+ "Recent" : "Nedávné",
"File could not be found" : "Soubor nelze nalézt",
"Home" : "Domů",
"Close" : "Zavřít",
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index 8ef62cbc126..5e9c8cff6a7 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -21,6 +21,7 @@ OC.L10N.register(
"Invalid directory." : "Ungültiges Verzeichnis.",
"Files" : "Dateien",
"All files" : "Alle Dateien",
+ "Recent" : "Akuelle",
"File could not be found" : "Datei konnte nicht gefunden werden",
"Home" : "Home",
"Close" : "Schließen",
@@ -33,7 +34,7 @@ OC.L10N.register(
"Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.",
"Uploading..." : "Hochladen…",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde{plural_s} übrig",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
"{hours}:{minutes}h" : "{hours}:{minutes}h",
"{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute{plural_s} übrig",
"{minutes}:{seconds}m" : "{minutes}:{seconds}m",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index 532aced68dc..12f845fabae 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -19,6 +19,7 @@
"Invalid directory." : "Ungültiges Verzeichnis.",
"Files" : "Dateien",
"All files" : "Alle Dateien",
+ "Recent" : "Akuelle",
"File could not be found" : "Datei konnte nicht gefunden werden",
"Home" : "Home",
"Close" : "Schließen",
@@ -31,7 +32,7 @@
"Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.",
"Uploading..." : "Hochladen…",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde{plural_s} übrig",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
"{hours}:{minutes}h" : "{hours}:{minutes}h",
"{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute{plural_s} übrig",
"{minutes}:{seconds}m" : "{minutes}:{seconds}m",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index 8be185156f8..c707e1f84e6 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -21,6 +21,7 @@ OC.L10N.register(
"Invalid directory." : "Ungültiges Verzeichnis.",
"Files" : "Dateien",
"All files" : "Alle Dateien",
+ "Recent" : "Aktuelle",
"File could not be found" : "Datei konnte nicht gefunden werden",
"Home" : "Home",
"Close" : "Schließen",
@@ -33,7 +34,7 @@ OC.L10N.register(
"Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.",
"Uploading..." : "Hochladen…",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde{plural_s} übrig",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
"{hours}:{minutes}h" : "{hours}:{minutes}h",
"{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute{plural_s} übrig",
"{minutes}:{seconds}m" : "{minutes}:{seconds}m",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index d96cbf265db..8fcd141ac8d 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -19,6 +19,7 @@
"Invalid directory." : "Ungültiges Verzeichnis.",
"Files" : "Dateien",
"All files" : "Alle Dateien",
+ "Recent" : "Aktuelle",
"File could not be found" : "Datei konnte nicht gefunden werden",
"Home" : "Home",
"Close" : "Schließen",
@@ -31,7 +32,7 @@
"Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.",
"Uploading..." : "Hochladen…",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde{plural_s} übrig",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
"{hours}:{minutes}h" : "{hours}:{minutes}h",
"{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute{plural_s} übrig",
"{minutes}:{seconds}m" : "{minutes}:{seconds}m",
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 0d0bacf0d5d..363419c3643 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -21,6 +21,7 @@ OC.L10N.register(
"Invalid directory." : "Cartella non valida.",
"Files" : "File",
"All files" : "Tutti i file",
+ "Recent" : "Recenti",
"File could not be found" : "Il file non può essere trovato",
"Home" : "Home",
"Close" : "Chiudi",
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index e82b31e5e77..16571b6bd98 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -19,6 +19,7 @@
"Invalid directory." : "Cartella non valida.",
"Files" : "File",
"All files" : "Tutti i file",
+ "Recent" : "Recenti",
"File could not be found" : "Il file non può essere trovato",
"Home" : "Home",
"Close" : "Chiudi",
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index 364cf47b83b..afe80ac40ef 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -21,6 +21,7 @@ OC.L10N.register(
"Invalid directory." : "Ongeldige directory.",
"Files" : "Bestanden",
"All files" : "Alle bestanden",
+ "Recent" : "Recent",
"File could not be found" : "Bestand kon niet worden gevonden",
"Home" : "Thuis",
"Close" : "Sluiten",
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index 0d9d311199c..b66089f59d1 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -19,6 +19,7 @@
"Invalid directory." : "Ongeldige directory.",
"Files" : "Bestanden",
"All files" : "Alle bestanden",
+ "Recent" : "Recent",
"File could not be found" : "Bestand kon niet worden gevonden",
"Home" : "Thuis",
"Close" : "Sluiten",
diff --git a/apps/files/lib/AppInfo/Application.php b/apps/files/lib/AppInfo/Application.php
index fac8e3a3a4b..fc91e05ba7e 100644
--- a/apps/files/lib/AppInfo/Application.php
+++ b/apps/files/lib/AppInfo/Application.php
@@ -47,7 +47,8 @@ class Application extends App {
$c->query('TagService'),
$server->getPreviewManager(),
$server->getShareManager(),
- $server->getConfig()
+ $server->getConfig(),
+ $server->getUserFolder()
);
});
diff --git a/apps/files/lib/Controller/ApiController.php b/apps/files/lib/Controller/ApiController.php
index 57eb43bbe9c..7ce83bfca15 100644
--- a/apps/files/lib/Controller/ApiController.php
+++ b/apps/files/lib/Controller/ApiController.php
@@ -31,6 +31,7 @@ namespace OCA\Files\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Controller;
+use OCP\Files\Folder;
use OCP\IConfig;
use OCP\IRequest;
use OCP\AppFramework\Http\DataResponse;
@@ -39,7 +40,7 @@ use OCP\AppFramework\Http\Response;
use OCA\Files\Service\TagService;
use OCP\IPreview;
use OCP\Share\IManager;
-use OCP\Files\Node;
+use OC\Files\Node\Node;
use OCP\IUserSession;
/**
@@ -58,12 +59,18 @@ class ApiController extends Controller {
private $userSession;
/** IConfig */
private $config;
+ /** @var Folder */
+ private $userFolder;
/**
* @param string $appName
* @param IRequest $request
+ * @param IUserSession $userSession
* @param TagService $tagService
* @param IPreview $previewManager
+ * @param IManager $shareManager
+ * @param IConfig $config
+ * @param Folder $userFolder
*/
public function __construct($appName,
IRequest $request,
@@ -71,13 +78,15 @@ class ApiController extends Controller {
TagService $tagService,
IPreview $previewManager,
IManager $shareManager,
- IConfig $config) {
+ IConfig $config,
+ Folder $userFolder) {
parent::__construct($appName, $request);
$this->userSession = $userSession;
$this->tagService = $tagService;
$this->previewManager = $previewManager;
$this->shareManager = $shareManager;
$this->config = $config;
+ $this->userFolder = $userFolder;
}
/**
@@ -143,6 +152,28 @@ class ApiController extends Controller {
}
/**
+ * @param \OCP\Files\Node[] $nodes
+ * @return array
+ */
+ private function formatNodes(array $nodes) {
+ return array_values(array_map(function (Node $node) {
+ /** @var \OC\Files\Node\Node $shareTypes */
+ $shareTypes = $this->getShareTypes($node);
+ $file = \OCA\Files\Helper::formatFileInfo($node->getFileInfo());
+ $parts = explode('/', dirname($node->getPath()), 4);
+ if (isset($parts[3])) {
+ $file['path'] = '/' . $parts[3];
+ } else {
+ $file['path'] = '/';
+ }
+ if (!empty($shareTypes)) {
+ $file['shareTypes'] = $shareTypes;
+ }
+ return $file;
+ }, $nodes));
+ }
+
+ /**
* Returns a list of all files tagged with the given tag.
*
* @NoAdminRequired
@@ -151,28 +182,28 @@ class ApiController extends Controller {
* @return DataResponse
*/
public function getFilesByTag($tagName) {
- $files = array();
$nodes = $this->tagService->getFilesByTag($tagName);
- foreach ($nodes as &$node) {
- $shareTypes = $this->getShareTypes($node);
- $fileInfo = $node->getFileInfo();
- $file = \OCA\Files\Helper::formatFileInfo($fileInfo);
- $parts = explode('/', dirname($fileInfo->getPath()), 4);
- if(isset($parts[3])) {
- $file['path'] = '/' . $parts[3];
- } else {
- $file['path'] = '/';
- }
+ $files = $this->formatNodes($nodes);
+ foreach ($files as &$file) {
$file['tags'] = [$tagName];
- if (!empty($shareTypes)) {
- $file['shareTypes'] = $shareTypes;
- }
- $files[] = $file;
}
return new DataResponse(['files' => $files]);
}
/**
+ * Returns a list of recently modifed files.
+ *
+ * @NoAdminRequired
+ *
+ * @return DataResponse
+ */
+ public function getRecentFiles() {
+ $nodes = $this->userFolder->getRecent(100);
+ $files = $this->formatNodes($nodes);
+ return new DataResponse(['files' => $files]);
+ }
+
+ /**
* Return a list of share types for outgoing shares
*
* @param Node $node file node
diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php
index 5e342e6589b..9dbe06ff789 100644
--- a/apps/files/lib/Controller/ViewController.php
+++ b/apps/files/lib/Controller/ViewController.php
@@ -173,9 +173,11 @@ class ViewController extends Controller {
\OCP\Util::addscript('files', 'search');
\OCP\Util::addScript('files', 'favoritesfilelist');
+ \OCP\Util::addScript('files', 'recentfilelist');
\OCP\Util::addScript('files', 'tagsplugin');
\OCP\Util::addScript('files', 'gotoplugin');
\OCP\Util::addScript('files', 'favoritesplugin');
+ \OCP\Util::addScript('files', 'recentplugin');
\OCP\Util::addScript('files', 'detailfileinfoview');
\OCP\Util::addScript('files', 'sidebarpreviewmanager');
diff --git a/apps/files/recentlist.php b/apps/files/recentlist.php
new file mode 100644
index 00000000000..1976be4894a
--- /dev/null
+++ b/apps/files/recentlist.php
@@ -0,0 +1,7 @@
+<?php
+// Check if we are a user
+OCP\User::checkLoggedIn();
+
+$tmpl = new OCP\Template('files', 'recentlist', '');
+
+$tmpl->printPage();
diff --git a/apps/files/templates/recentlist.php b/apps/files/templates/recentlist.php
new file mode 100644
index 00000000000..1667eb4cc8d
--- /dev/null
+++ b/apps/files/templates/recentlist.php
@@ -0,0 +1,42 @@
+<?php /** @var $l OC_L10N */ ?>
+<div id='notification'></div>
+
+<div id="emptycontent" class="hidden"></div>
+
+<input type="hidden" name="dir" value="" id="dir">
+
+<div class="nofilterresults hidden">
+ <div class="icon-search"></div>
+ <h2><?php p($l->t('No entries found in this folder')); ?></h2>
+ <p></p>
+</div>
+
+<table id="filestable">
+ <thead>
+ <tr>
+ <th id='headerName' class="hidden column-name">
+ <div id="headerName-container">
+ <a class="name sort columntitle"
+ data-sort="name"><span><?php p($l->t('Name')); ?></span></a>
+ </div>
+ </th>
+ <th id="headerSize" class="hidden column-size">
+ <a class="size sort columntitle"
+ data-sort="size"><span><?php p($l->t('Size')); ?></span></a>
+ </th>
+ <th id="headerDate" class="hidden column-mtime">
+ <a id="modified" class="columntitle"
+ data-sort="mtime"><span><?php p($l->t('Modified')); ?></span><span
+ class="sort-indicator"></span></a>
+ <span class="selectedActions"><a href="" class="delete-selected">
+ <span><?php p($l->t('Delete')) ?></span>
+ <span class="icon icon-delete"></span>
+ </a></span>
+ </th>
+ </tr>
+ </thead>
+ <tbody id="fileList">
+ </tbody>
+ <tfoot>
+ </tfoot>
+</table>
diff --git a/apps/files/tests/Controller/ApiControllerTest.php b/apps/files/tests/Controller/ApiControllerTest.php
index 1d39c88021b..348150e0e08 100644
--- a/apps/files/tests/Controller/ApiControllerTest.php
+++ b/apps/files/tests/Controller/ApiControllerTest.php
@@ -59,6 +59,8 @@ class ApiControllerTest extends TestCase {
private $shareManager;
/** @var \OCP\IConfig */
private $config;
+ /** @var \OC\Files\Node\Folder */
+ private $userFolder;
public function setUp() {
$this->request = $this->getMockBuilder('\OCP\IRequest')
@@ -82,6 +84,9 @@ class ApiControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$this->config = $this->getMock('\OCP\IConfig');
+ $this->userFolder = $this->getMockBuilder('\OC\Files\Node\Folder')
+ ->disableOriginalConstructor()
+ ->getMock();
$this->apiController = new ApiController(
$this->appName,
@@ -90,7 +95,8 @@ class ApiControllerTest extends TestCase {
$this->tagService,
$this->preview,
$this->shareManager,
- $this->config
+ $this->config,
+ $this->userFolder
);
}
diff --git a/apps/files/tests/Controller/ViewControllerTest.php b/apps/files/tests/Controller/ViewControllerTest.php
index ceb48a2241f..373f8c25152 100644
--- a/apps/files/tests/Controller/ViewControllerTest.php
+++ b/apps/files/tests/Controller/ViewControllerTest.php
@@ -191,7 +191,16 @@ class ViewControllerTest extends TestCase {
'appname' => 'files',
'script' => 'list.php',
'order' => 0,
- 'name' => new \OC_L10N_String(new \OC_L10N('files'), 'All files', []),
+ 'name' => (string)new \OC_L10N_String(new \OC_L10N('files'), 'All files', []),
+ 'active' => false,
+ 'icon' => '',
+ ],
+ [
+ 'id' => 'recent',
+ 'appname' => 'files',
+ 'script' => 'recentlist.php',
+ 'order' => 2,
+ 'name' => (string)new \OC_L10N_String(new \OC_L10N('files'), 'Recent', []),
'active' => false,
'icon' => '',
],
@@ -209,7 +218,7 @@ class ViewControllerTest extends TestCase {
'appname' => 'files_sharing',
'script' => 'list.php',
'order' => 10,
- 'name' => new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared with you', []),
+ 'name' => (string)new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared with you', []),
'active' => false,
'icon' => '',
],
@@ -218,7 +227,7 @@ class ViewControllerTest extends TestCase {
'appname' => 'files_sharing',
'script' => 'list.php',
'order' => 15,
- 'name' => new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared with others', []),
+ 'name' => (string)new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared with others', []),
'active' => false,
'icon' => '',
],
@@ -227,7 +236,7 @@ class ViewControllerTest extends TestCase {
'appname' => 'files_sharing',
'script' => 'list.php',
'order' => 20,
- 'name' => new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared by link', []),
+ 'name' => (string)new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared by link', []),
'active' => false,
'icon' => '',
],
@@ -236,7 +245,7 @@ class ViewControllerTest extends TestCase {
'appname' => 'systemtags',
'script' => 'list.php',
'order' => 25,
- 'name' => new \OC_L10N_String(new \OC_L10N('systemtags'), 'Tags', []),
+ 'name' => (string)new \OC_L10N_String(new \OC_L10N('systemtags'), 'Tags', []),
'active' => false,
'icon' => '',
],
@@ -245,7 +254,7 @@ class ViewControllerTest extends TestCase {
'appname' => 'files_trashbin',
'script' => 'list.php',
'order' => 50,
- 'name' => new \OC_L10N_String(new \OC_L10N('files_trashbin'), 'Deleted files', []),
+ 'name' => (string)new \OC_L10N_String(new \OC_L10N('files_trashbin'), 'Deleted files', []),
'active' => false,
'icon' => '',
],
@@ -273,6 +282,10 @@ class ViewControllerTest extends TestCase {
'content' => null,
],
[
+ 'id' => 'recent',
+ 'content' => null,
+ ],
+ [
'id' => 'favorites',
'content' => null,
],
diff --git a/apps/files_external/css/settings.css b/apps/files_external/css/settings.css
index 6dfb012b15e..4d5dc69a4e7 100644
--- a/apps/files_external/css/settings.css
+++ b/apps/files_external/css/settings.css
@@ -68,23 +68,23 @@ td.mountPoint, td.backend { width:160px; }
padding-left: 25px;
}
-#body-settings .select2-results .select2-result-label {
+.files-external-select2 .select2-results .select2-result-label {
height: 32px;
padding: 3px;
}
-.select2-results .select2-result-label > span {
+.files-external-select2 .select2-results .select2-result-label > span {
display: block;
position: relative;
}
-.select2-results .select2-result-label .avatardiv {
+.files-external-select2 .select2-results .select2-result-label .avatardiv {
display:inline-block;
}
-.select2-results .select2-result-label .avatardiv + span {
+.files-external-select2 .select2-results .select2-result-label .avatardiv + span {
position: absolute;
top: 5px;
margin-left: 10px;
}
-.select2-results .select2-result-label .avatardiv[data-type="group"] + span {
+.files-external-select2 .select2-results .select2-result-label .avatardiv[data-type="group"] + span {
vertical-align: top;
top: 6px;
position: absolute;
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js
index 921bf92e775..fc6edefc648 100644
--- a/apps/files_external/js/settings.js
+++ b/apps/files_external/js/settings.js
@@ -93,6 +93,7 @@ function addSelect2 ($elements, userListLimit) {
placeholder: t('files_external', 'All users. Type to select user or group.'),
allowClear: true,
multiple: true,
+ dropdownCssClass: 'files-external-select2',
//minimumInputLength: 1,
ajax: {
url: OC.generateUrl('apps/files_external/applicable'),
diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php
index 9095c551b4f..ba671325372 100644
--- a/apps/files_trashbin/ajax/undelete.php
+++ b/apps/files_trashbin/ajax/undelete.php
@@ -29,7 +29,6 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
\OC::$server->getSession()->close();
-$files = $_POST['files'];
$dir = '/';
if (isset($_POST['dir'])) {
$dir = rtrim((string)$_POST['dir'], '/'). '/';
@@ -50,7 +49,7 @@ if (isset($_POST['allfiles']) && (string)$_POST['allfiles'] === 'true') {
$list[] = $fileName;
}
} else {
- $list = json_decode($files);
+ $list = json_decode($_POST['files']);
}
$error = array();
diff --git a/apps/systemtags/img/app.svg b/apps/systemtags/img/app.svg
new file mode 100644
index 00000000000..8bfd246078e
--- /dev/null
+++ b/apps/systemtags/img/app.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0">
+ <path fill="#fff" d="m12.372 1.9224-9.614 0.02632c-0.54322 0-0.69312 0.41974-0.69406 0.69208l-0.030264 9.6034 17.446 17.444c0.39376 0.39658 1.0247 0.39394 1.4184 0l8.9138-8.9138c0.39344-0.39376 0.3979-1.0265 0.004-1.4205l-0.0022 0.01752-16.734-16.734-0.7082-0.70834zm-4.3336 3.7044a2.2876 2.2876 0 0 1 2.2876 2.288 2.2876 2.2876 0 0 1 -2.2876 2.2882 2.2876 2.2876 0 0 1 -2.288 -2.2882 2.2876 2.2876 0 0 1 2.288 -2.288z"/>
+</svg>
diff --git a/apps/theming/js/settings-admin.js b/apps/theming/js/settings-admin.js
index 85e781411ed..941ec5c711b 100644
--- a/apps/theming/js/settings-admin.js
+++ b/apps/theming/js/settings-admin.js
@@ -75,11 +75,11 @@ function preview(setting, value) {
var logos = document.getElementsByClassName('logo-icon');
var timestamp = new Date().getTime();
if (value !== '') {
- logos[0].style.background = "url('" + OC.generateUrl('/apps/theming/logo') + "?v" + timestamp + "')";
- logos[0].style.backgroundSize = "62px 34px";
+ logos[0].style.backgroundImage = "url('" + OC.generateUrl('/apps/theming/logo') + "?v" + timestamp + "')";
+ logos[0].style.backgroundSize = "contain";
} else {
- logos[0].style.background = "url('" + OC.getRootPath() + '/core/img/logo-icon.svg?v' + timestamp +"')";
- logos[0].style.backgroundSize = "62px 34px";
+ logos[0].style.backgroundImage = "url('" + OC.getRootPath() + '/core/img/logo-icon.svg?v' + timestamp +"')";
+ logos[0].style.backgroundSize = "contain";
}
}
}
diff --git a/apps/theming/lib/controller/themingcontroller.php b/apps/theming/lib/controller/themingcontroller.php
index 571e0ab79a5..3e5d6f3e0d1 100644
--- a/apps/theming/lib/controller/themingcontroller.php
+++ b/apps/theming/lib/controller/themingcontroller.php
@@ -224,10 +224,11 @@ class ThemingController extends Controller {
if($logo !== '') {
$responseCss .= sprintf('#header .logo {
background-image: url(\'./logo?v='.$cacheBusterValue.'\');
+ background-size: contain;
}
#header .logo-icon {
background-image: url(\'./logo?v='.$cacheBusterValue.'\');
- background-size: 62px 34px;
+ background-size: contain;
}'
);
}
diff --git a/apps/theming/tests/lib/controller/ThemingControllerTest.php b/apps/theming/tests/lib/controller/ThemingControllerTest.php
index 1acfdff020c..24eb0510f99 100644
--- a/apps/theming/tests/lib/controller/ThemingControllerTest.php
+++ b/apps/theming/tests/lib/controller/ThemingControllerTest.php
@@ -383,10 +383,11 @@ class ThemingControllerTest extends TestCase {
$expected = new Http\DataDownloadResponse('#header .logo {
background-image: url(\'./logo?v=0\');
+ background-size: contain;
}
#header .logo-icon {
background-image: url(\'./logo?v=0\');
- background-size: 62px 34px;
+ background-size: contain;
}', 'style', 'text/css');
$expected->cacheFor(3600);
@$this->assertEquals($expected, $this->themingController->getStylesheet());
@@ -445,10 +446,11 @@ class ThemingControllerTest extends TestCase {
$expected = new Http\DataDownloadResponse('#body-user #header,#body-settings #header,#body-public #header,#body-login,.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid {background-color: #000}#header .logo {
background-image: url(\'./logo?v=0\');
+ background-size: contain;
}
#header .logo-icon {
background-image: url(\'./logo?v=0\');
- background-size: 62px 34px;
+ background-size: contain;
}#body-login {
background-image: url(\'./loginbackground?v=0\');
}', 'style', 'text/css');
@@ -479,10 +481,11 @@ class ThemingControllerTest extends TestCase {
$expected = new Http\DataDownloadResponse('#body-user #header,#body-settings #header,#body-public #header,#body-login,.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid {background-color: #fff}#header .logo {
background-image: url(\'./logo?v=0\');
+ background-size: contain;
}
#header .logo-icon {
background-image: url(\'./logo?v=0\');
- background-size: 62px 34px;
+ background-size: contain;
}#body-login {
background-image: url(\'./loginbackground?v=0\');
}#header .header-appname, #expandDisplayName { color: #000000; } #header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); } .searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid { color: #000; border: 1px solid rgba(0, 0, 0, .5); }', 'style', 'text/css');
diff --git a/apps/updatenotification/l10n/cs_CZ.js b/apps/updatenotification/l10n/cs_CZ.js
index 37fef1c73f9..56dcfdd7aee 100644
--- a/apps/updatenotification/l10n/cs_CZ.js
+++ b/apps/updatenotification/l10n/cs_CZ.js
@@ -15,6 +15,7 @@ OC.L10N.register(
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Vždy můžete aktualizovat na novější verzi / experimentální kanál. Poté ale nelze nikdy provést downgrade zpět na nižší stabilní kanál.",
"Notify members of the following groups about available updates:" : "Upozorňovat členy následujících skupin na dostupné aktualizace:",
"Only notification for app updates are available." : "Je možné pouze upozornění na dostupné aktualizace aplikací.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Zvolený kanál aktualizací označuje dedikovaná upozornění pro server za zastaralá.",
"The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/updatenotification/l10n/cs_CZ.json b/apps/updatenotification/l10n/cs_CZ.json
index 29f2c9a027c..3f93f490446 100644
--- a/apps/updatenotification/l10n/cs_CZ.json
+++ b/apps/updatenotification/l10n/cs_CZ.json
@@ -13,6 +13,7 @@
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Vždy můžete aktualizovat na novější verzi / experimentální kanál. Poté ale nelze nikdy provést downgrade zpět na nižší stabilní kanál.",
"Notify members of the following groups about available updates:" : "Upozorňovat členy následujících skupin na dostupné aktualizace:",
"Only notification for app updates are available." : "Je možné pouze upozornění na dostupné aktualizace aplikací.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Zvolený kanál aktualizací označuje dedikovaná upozornění pro server za zastaralá.",
"The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/user_ldap/lib/Wizard.php b/apps/user_ldap/lib/Wizard.php
index be4d1821ee1..573d30f0005 100644
--- a/apps/user_ldap/lib/Wizard.php
+++ b/apps/user_ldap/lib/Wizard.php
@@ -498,7 +498,7 @@ class Wizard extends LDAPUtility {
throw new \Exception('Could not connect to LDAP');
}
- $obclasses = array('groupOfNames', 'group', 'posixGroup', '*');
+ $obclasses = array('groupOfNames', 'groupOfUniqueNames', 'group', 'posixGroup', '*');
$this->determineFeature($obclasses,
'objectclass',
'ldap_groupfilter_objectclass',
diff --git a/apps/user_ldap/tests/Integration/Bootstrap.php b/apps/user_ldap/tests/Integration/Bootstrap.php
new file mode 100644
index 00000000000..f52f1322171
--- /dev/null
+++ b/apps/user_ldap/tests/Integration/Bootstrap.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+define('CLI_TEST_RUN', true);
+require_once __DIR__ . '/../../../../lib/base.php';
+require_once __DIR__ . '/setup-scripts/config.php';
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestAccessGroupsMatchFilter.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAccessGroupsMatchFilter.php
index 4fcc8334338..2411a46d8ee 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestAccessGroupsMatchFilter.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAccessGroupsMatchFilter.php
@@ -23,10 +23,9 @@
namespace OCA\User_LDAP\Tests\Integration\Lib;
-
use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest;
-require_once __DIR__ . '/../../../../../lib/base.php';
+require_once __DIR__ . '/../Bootstrap.php';
class IntegrationTestAccessGroupsMatchFilter extends AbstractIntegrationTest {
@@ -118,7 +117,6 @@ class IntegrationTestAccessGroupsMatchFilter extends AbstractIntegrationTest {
}
}
-require_once(__DIR__ . '/../setup-scripts/config.php');
$test = new IntegrationTestAccessGroupsMatchFilter($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestBackupServer.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestBackupServer.php
index 1d4bd05b8a5..f433930bd26 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestBackupServer.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestBackupServer.php
@@ -27,7 +27,7 @@ use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest;
use OCA\User_LDAP\Mapping\UserMapping;
use OCA\User_LDAP\User_LDAP;
-require_once __DIR__ . '/../../../../../lib/base.php';
+require_once __DIR__ . '/../Bootstrap.php';
class IntegrationTestBackupServer extends AbstractIntegrationTest {
/** @var UserMapping */
@@ -113,7 +113,6 @@ class IntegrationTestBackupServer extends AbstractIntegrationTest {
}
}
-require_once(__DIR__ . '/../setup-scripts/config.php');
$test = new IntegrationTestBackupServer($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestBatchApplyUserAttributes.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestBatchApplyUserAttributes.php
index 2574877fca4..89ce764e51a 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestBatchApplyUserAttributes.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestBatchApplyUserAttributes.php
@@ -26,7 +26,7 @@ namespace OCA\User_LDAP\Tests\Integration\Lib;
use OCA\User_LDAP\Mapping\UserMapping;
use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest;
-require_once __DIR__ . '/../../../../../lib/base.php';
+require_once __DIR__ . '/../Bootstrap.php';
class IntegrationTestBatchApplyUserAttributes extends AbstractIntegrationTest {
/**
@@ -68,7 +68,6 @@ class IntegrationTestBatchApplyUserAttributes extends AbstractIntegrationTest {
}
-require_once(__DIR__ . '/../setup-scripts/config.php');
$test = new IntegrationTestBatchApplyUserAttributes($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestConnect.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestConnect.php
index 85a185c8ac6..44b16aed6a1 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestConnect.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestConnect.php
@@ -27,7 +27,7 @@ use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest;
use OCA\User_LDAP\Mapping\UserMapping;
use OCA\User_LDAP\User_LDAP;
-require_once __DIR__ . '/../../../../../lib/base.php';
+require_once __DIR__ . '/../Bootstrap.php';
class IntegrationTestConnect extends AbstractIntegrationTest {
/** @var UserMapping */
@@ -161,7 +161,6 @@ class IntegrationTestConnect extends AbstractIntegrationTest {
}
}
-require_once(__DIR__ . '/../setup-scripts/config.php');
$test = new IntegrationTestConnect($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php
index 4d20d52595e..eb4a0a5c9cf 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php
@@ -25,7 +25,7 @@ namespace OCA\User_LDAP\Tests\Integration\Lib;
use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest;
-require_once __DIR__ . '/../../../../../lib/base.php';
+require_once __DIR__ . '/../Bootstrap.php';
class IntegrationTestCountUsersByLoginName extends AbstractIntegrationTest {
@@ -61,7 +61,6 @@ class IntegrationTestCountUsersByLoginName extends AbstractIntegrationTest {
}
}
-require_once(__DIR__ . '/../setup-scripts/config.php');
$test = new IntegrationTestCountUsersByLoginName($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php
index 56f44cc58b2..32fc2151a7c 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php
@@ -27,7 +27,7 @@ use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest;
use OCA\User_LDAP\Mapping\UserMapping;
use OCA\User_LDAP\User_LDAP;
-require_once __DIR__ . '/../../../../../lib/base.php';
+require_once __DIR__ . '/../Bootstrap.php';
class IntegrationTestFetchUsersByLoginName extends AbstractIntegrationTest {
/** @var UserMapping */
@@ -74,7 +74,6 @@ class IntegrationTestFetchUsersByLoginName extends AbstractIntegrationTest {
}
-require_once(__DIR__ . '/../setup-scripts/config.php');
$test = new IntegrationTestFetchUsersByLoginName($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php
index 7acd49af00a..3826cbdae51 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php
@@ -27,7 +27,7 @@ use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest;
use OCA\User_LDAP\Mapping\UserMapping;
use OCA\User_LDAP\User_LDAP;
-require_once __DIR__ . '/../../../../../lib/base.php';
+require_once __DIR__ . '/../Bootstrap.php';
class IntegrationTestPaging extends AbstractIntegrationTest {
/** @var UserMapping */
@@ -76,7 +76,6 @@ class IntegrationTestPaging extends AbstractIntegrationTest {
}
}
-require_once(__DIR__ . '/../setup-scripts/config.php');
$test = new IntegrationTestPaging($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php
index a4db8cae681..95c14ca8947 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php
@@ -28,7 +28,7 @@ use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest;
use OCA\User_LDAP\Mapping\UserMapping;
use OCA\User_LDAP\User_LDAP;
-require_once __DIR__ . '/../../../../../lib/base.php';
+require_once __DIR__ . '/../Bootstrap.php';
class IntegrationTestUserHome extends AbstractIntegrationTest {
/** @var UserMapping */
@@ -169,7 +169,6 @@ class IntegrationTestUserHome extends AbstractIntegrationTest {
}
}
-require_once(__DIR__ . '/../setup-scripts/config.php');
$test = new IntegrationTestUserHome($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();
diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php
index bd4da5ea97f..7c8f9475b41 100644
--- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php
+++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php
@@ -29,7 +29,7 @@ use OCA\User_LDAP\User\User;
use OCA\User_LDAP\Mapping\UserMapping;
use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest;
-require_once __DIR__ . '/../../../../../../lib/base.php';
+require_once __DIR__ . '/../../Bootstrap.php';
class IntegrationTestUserAvatar extends AbstractIntegrationTest {
/** @var UserMapping */
@@ -148,7 +148,6 @@ class IntegrationTestUserAvatar extends AbstractIntegrationTest {
}
}
-require_once(__DIR__ . '/../../setup-scripts/config.php');
$test = new IntegrationTestUserAvatar($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();
diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php
index de86e17d014..ab0d2ffdcce 100644
--- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php
+++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php
@@ -26,7 +26,7 @@ namespace OCA\User_LDAP\Tests\Integration\Lib\User;
use OCA\User_LDAP\Mapping\UserMapping;
use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest;
-require_once __DIR__ . '/../../../../../../lib/base.php';
+require_once __DIR__ . '/../../Bootstrap.php';
class IntegrationTestUserDisplayName extends AbstractIntegrationTest {
/** @var UserMapping */
@@ -100,7 +100,6 @@ class IntegrationTestUserDisplayName extends AbstractIntegrationTest {
}
}
-require_once(__DIR__ . '/../../setup-scripts/config.php');
$test = new IntegrationTestUserDisplayName($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();