summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/dav/lib/Connector/Sabre/MaintenancePlugin.php3
-rw-r--r--apps/files_external/tests/Storage/SmbTest.php4
-rw-r--r--apps/files_sharing/css/public.scss7
-rw-r--r--apps/files_sharing/templates/public.php8
-rw-r--r--apps/files_versions/l10n/bg.js2
-rw-r--r--apps/files_versions/l10n/bg.json2
-rw-r--r--apps/workflowengine/l10n/bg.js2
-rw-r--r--apps/workflowengine/l10n/bg.json2
-rw-r--r--core/Command/Upgrade.php3
-rw-r--r--core/ajax/update.php2
-rw-r--r--core/js/contactsmenu.js2
-rw-r--r--core/js/tests/specs/contactsmenuSpec.js2
-rw-r--r--core/l10n/bg.js28
-rw-r--r--core/l10n/bg.json28
-rw-r--r--core/l10n/nl.js1
-rw-r--r--core/l10n/nl.json1
-rw-r--r--lib/base.php51
-rw-r--r--lib/composer/composer/autoload_classmap.php7
-rw-r--r--lib/composer/composer/autoload_static.php7
-rw-r--r--lib/private/Files/Mount/MountPoint.php2
-rw-r--r--lib/private/Files/Storage/Home.php5
-rw-r--r--lib/private/Files/Storage/Local.php15
-rw-r--r--lib/private/Repair.php21
-rw-r--r--lib/private/Repair/NC11/CleanPreviews.php73
-rw-r--r--lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php132
-rw-r--r--lib/private/Repair/NC11/MoveAvatars.php73
-rw-r--r--lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php146
-rw-r--r--lib/private/Repair/NC12/InstallCoreBundle.php80
-rw-r--r--lib/private/Repair/NC12/RepairIdentityProofKeyFolders.php112
-rw-r--r--lib/private/Repair/NC12/UpdateLanguageCodes.php91
-rw-r--r--lib/private/Server.php1
-rw-r--r--lib/private/Share/Share.php107
-rw-r--r--settings/l10n/zh_CN.js7
-rw-r--r--settings/l10n/zh_CN.json7
-rw-r--r--tests/lib/Repair/NC11/CleanPreviewsBackgroundJobTest.php245
-rw-r--r--tests/lib/Repair/NC11/CleanPreviewsTest.php135
-rw-r--r--tests/lib/Repair/NC12/InstallCoreBundleTest.php144
-rw-r--r--tests/lib/Repair/NC12/UpdateLanguageCodesTest.php177
38 files changed, 123 insertions, 1612 deletions
diff --git a/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php b/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php
index 21bffcdb299..36110c81db9 100644
--- a/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php
+++ b/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php
@@ -27,6 +27,7 @@
namespace OCA\DAV\Connector\Sabre;
use OCP\IConfig;
+use OCP\Util;
use Sabre\DAV\Exception\ServiceUnavailable;
use Sabre\DAV\ServerPlugin;
@@ -80,7 +81,7 @@ class MaintenancePlugin extends ServerPlugin {
if ($this->config->getSystemValue('maintenance', false)) {
throw new ServiceUnavailable('System in maintenance mode.');
}
- if (\OC::checkUpgrade(false)) {
+ if (Util::needUpgrade()) {
throw new ServiceUnavailable('Upgrade needed');
}
diff --git a/apps/files_external/tests/Storage/SmbTest.php b/apps/files_external/tests/Storage/SmbTest.php
index edacb498d5e..e3c0408114d 100644
--- a/apps/files_external/tests/Storage/SmbTest.php
+++ b/apps/files_external/tests/Storage/SmbTest.php
@@ -96,11 +96,11 @@ class SmbTest extends \Test\Files\Storage\Storage {
public function testNotifyGetChanges() {
$notifyHandler = $this->instance->notify('');
- usleep(100 * 1000); //give time for the notify to start
+ sleep(1); //give time for the notify to start
$this->instance->file_put_contents('/newfile.txt', 'test content');
$this->instance->rename('/newfile.txt', 'renamed.txt');
$this->instance->unlink('/renamed.txt');
- usleep(100 * 1000); //time for all changes to be processed
+ sleep(1); //time for all changes to be processed
$changes = $notifyHandler->getChanges();
$notifyHandler->stop();
diff --git a/apps/files_sharing/css/public.scss b/apps/files_sharing/css/public.scss
index 51c2bc9f4ce..5edc3f7eb90 100644
--- a/apps/files_sharing/css/public.scss
+++ b/apps/files_sharing/css/public.scss
@@ -39,15 +39,10 @@
}
-#imgframe img,
-#imgframe video {
+#imgframe img {
max-height: 100% !important;
max-width: 100% !important;
}
-#imgframe video {
- width: 854px;
- height: 480px;
-}
#imgframe .text-preview {
display: inline-block;
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 9d28c178dde..3c2bbe5fb59 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -91,13 +91,7 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
<?php if (isset($_['folder'])): ?>
<?php print_unescaped($_['folder']); ?>
<?php else: ?>
- <?php if ($_['previewEnabled'] && substr($_['mimetype'], 0, strpos($_['mimetype'], '/')) === 'video'): ?>
- <div id="imgframe">
- <video tabindex="0" controls="" preload="none" style="max-width: <?php p($_['previewMaxX']); ?>px; max-height: <?php p($_['previewMaxY']); ?>px">
- <source src="<?php p($_['downloadURL']); ?>" type="<?php p($_['mimetype']); ?>" />
- </video>
- </div>
- <?php elseif ($_['previewEnabled'] && substr($_['mimetype'], 0, strpos($_['mimetype'], '/')) == 'audio'): ?>
+ <?php if ($_['previewEnabled'] && substr($_['mimetype'], 0, strpos($_['mimetype'], '/')) == 'audio'): ?>
<div id="imgframe">
<audio tabindex="0" controls="" preload="none" style="width: 100%; max-width: <?php p($_['previewMaxX']); ?>px; max-height: <?php p($_['previewMaxY']); ?>px">
<source src="<?php p($_['downloadURL']); ?>" type="<?php p($_['mimetype']); ?>" />
diff --git a/apps/files_versions/l10n/bg.js b/apps/files_versions/l10n/bg.js
index b9bf92b30ee..84a5c39fe18 100644
--- a/apps/files_versions/l10n/bg.js
+++ b/apps/files_versions/l10n/bg.js
@@ -6,6 +6,8 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Грешка при връщане на {file} към версия {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n байт","%n байта"],
"Restore" : "Възтановяване",
+ "No earlier versions available" : "Няма други налични по-ранни версии",
+ "More versions …" : "Още версии ...",
"No versions available" : "Няма налични версии",
"More versions..." : "Още версии..."
},
diff --git a/apps/files_versions/l10n/bg.json b/apps/files_versions/l10n/bg.json
index 3b16ecd57bc..ea3f3a6d599 100644
--- a/apps/files_versions/l10n/bg.json
+++ b/apps/files_versions/l10n/bg.json
@@ -4,6 +4,8 @@
"Failed to revert {file} to revision {timestamp}." : "Грешка при връщане на {file} към версия {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n байт","%n байта"],
"Restore" : "Възтановяване",
+ "No earlier versions available" : "Няма други налични по-ранни версии",
+ "More versions …" : "Още версии ...",
"No versions available" : "Няма налични версии",
"More versions..." : "Още версии..."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/workflowengine/l10n/bg.js b/apps/workflowengine/l10n/bg.js
index 7646f36302c..8e456e5a738 100644
--- a/apps/workflowengine/l10n/bg.js
+++ b/apps/workflowengine/l10n/bg.js
@@ -1,7 +1,9 @@
OC.L10N.register(
"workflowengine",
{
+ "Saved" : "Запазено",
"Saving failed:" : "Запазването се провали:",
+ "File MIME type" : "Тип MIME файл",
"is" : "е",
"is not" : "не е",
"matches" : "съвпадения",
diff --git a/apps/workflowengine/l10n/bg.json b/apps/workflowengine/l10n/bg.json
index 4788e40881d..a5693cea290 100644
--- a/apps/workflowengine/l10n/bg.json
+++ b/apps/workflowengine/l10n/bg.json
@@ -1,5 +1,7 @@
{ "translations": {
+ "Saved" : "Запазено",
"Saving failed:" : "Запазването се провали:",
+ "File MIME type" : "Тип MIME файл",
"is" : "е",
"is not" : "не е",
"matches" : "съвпадения",
diff --git a/core/Command/Upgrade.php b/core/Command/Upgrade.php
index cadc1f8530c..1611b121f33 100644
--- a/core/Command/Upgrade.php
+++ b/core/Command/Upgrade.php
@@ -39,6 +39,7 @@ use OC\Installer;
use OC\Updater;
use OCP\IConfig;
use OCP\ILogger;
+use OCP\Util;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Input\InputInterface;
@@ -87,7 +88,7 @@ class Upgrade extends Command {
*/
protected function execute(InputInterface $input, OutputInterface $output) {
- if(\OC::checkUpgrade(false)) {
+ if(Util::needUpgrade()) {
if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
// Prepend each line with a little timestamp
$timestampFormatter = new TimestampFormatter($this->config, $output->getFormatter());
diff --git a/core/ajax/update.php b/core/ajax/update.php
index e2bd03b491e..22be2a4f60e 100644
--- a/core/ajax/update.php
+++ b/core/ajax/update.php
@@ -98,7 +98,7 @@ class FeedBackHandler {
}
}
-if (OC::checkUpgrade(false)) {
+if (\OCP\Util::needUpgrade()) {
$config = \OC::$server->getSystemConfig();
if ($config->getValue('upgrade.disable-web', false)) {
diff --git a/core/js/contactsmenu.js b/core/js/contactsmenu.js
index 8d08ea74f4c..9e7ec552830 100644
--- a/core/js/contactsmenu.js
+++ b/core/js/contactsmenu.js
@@ -47,7 +47,7 @@
var ERROR_TEMPLATE = ''
+ '<div class="emptycontent">'
+ ' <div class="icon-search"></div>'
- + ' <h2>' + t('core', 'There was an error loading your contacts') + '</h2>'
+ + ' <h2>' + t('core', 'Could not load your contacts') + '</h2>'
+ '</div>';
var CONTACT_TEMPLATE = ''
+ '{{#if contact.avatar}}'
diff --git a/core/js/tests/specs/contactsmenuSpec.js b/core/js/tests/specs/contactsmenuSpec.js
index 8e57dc35f01..3fa8671e2ac 100644
--- a/core/js/tests/specs/contactsmenuSpec.js
+++ b/core/js/tests/specs/contactsmenuSpec.js
@@ -72,7 +72,7 @@ describe('Contacts menu', function() {
fakeServer.respond();
opening.then(function() {
- expect($menuEl.html()).toContain('There was an error loading your contacts');
+ expect($menuEl.html()).toContain('Could not load your contacts');
expect(console.error).toHaveBeenCalledTimes(1);
done();
}, function(e) {
diff --git a/core/l10n/bg.js b/core/l10n/bg.js
index 8dcd596b798..f22e892cb2f 100644
--- a/core/l10n/bg.js
+++ b/core/l10n/bg.js
@@ -14,10 +14,14 @@ OC.L10N.register(
"No crop data provided" : "Липсват данни за изрязването",
"No valid crop data provided" : "Липсват данни за изрязването",
"Crop is not square" : "Областта не е квадратна",
+ "Password reset is disabled" : "Възстановяването на парола е изключено",
"Couldn't reset password because the token is invalid" : "Нулирането на паролата е невъзможно, защото връзката за удостоверение е невалидна",
"Couldn't reset password because the token is expired" : "Нулирането на паролата е невъзможно, защото връзката за удостоверение е изтекла",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Имейлът за възстановяване на паролата не може да бъде изпратен защо потребителят няма имейл адрес. Свържете се с администратора.",
"%s password reset" : "Паролата на %s е променена",
+ "Password reset" : "Възстановяване на парола",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Кликнете върху следния бутон, за да възстановите паролата си. Ако не сте поискали възстановяване на паролата, игнорирайте този имейл.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Кликнете върху следната връзка, за да възстановите паролата си. Ако не сте поискали възстановяване на паролата, игнорирайте този имейл.",
"Couldn't send reset email. Please contact your administrator." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, свържете се с вашия администратор.",
"Couldn't send reset email. Please make sure your username is correct." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, уверете се, че потребителското име е правилно.",
"Preparing update" : "Подготовка за актуализиране",
@@ -44,6 +48,11 @@ OC.L10N.register(
"%s (incompatible)" : "%s (несъвместим)",
"Following apps have been disabled: %s" : "Следната добавка беше изключена: %s",
"Already up to date" : "Вече е актуална",
+ "Search contacts …" : "Търсене на контакти ...",
+ "No contacts found" : "Няма намерени контакти",
+ "Show all contacts …" : "Покажи всички контакти ...",
+ "There was an error loading your contacts" : "Възникна грешка по време на зареждането на вашите контакти",
+ "Loading your contacts …" : "Зареждане на вашите контакти ...",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Има проблем с проверката за цялостта на кода. Повече информация…</a>",
"Settings" : "Настройки",
"Connection to server lost" : "Връзката със сървъра е загубена",
@@ -62,12 +71,15 @@ OC.L10N.register(
"I know what I'm doing" : "Знам какво правя",
"Password can not be changed. Please contact your administrator." : "Паролата не може да бъде промена. Моля, свържете се с администратора.",
"Reset password" : "Възстановяване на паролата",
+ "Sending email …" : "Изпращане на имейл ...",
"No" : "Не",
"Yes" : "Да",
"No files in here" : "Тук няма файлове",
"Choose" : "Избиране",
"Copy" : "Копиране",
+ "Move" : "Преместване",
"Error loading file picker template: {error}" : "Грешка при зареждането на шаблон за избор на файл: {error}",
+ "OK" : "ОК",
"Error loading message template: {error}" : "Грешка при зареждането на шаблон за съобщения: {error}",
"read-only" : "Само за четене",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} файлов конфликт","{count} файлови кофликта"],
@@ -81,6 +93,8 @@ OC.L10N.register(
"({count} selected)" : "({count} избрани)",
"Error loading file exists template" : "Грешка при зареждането на шаблон за вече съществуващ файл",
"Pending" : "Чакащо",
+ "Copy to {folder}" : "Копирай в {folder}",
+ "Move to {folder}" : "Премести в {folder}",
"Very weak password" : "Много слаба парола",
"Weak password" : "Слаба парола",
"So-so password" : "Не особено добра парола",
@@ -88,6 +102,8 @@ OC.L10N.register(
"Strong password" : "Сигурна парола",
"Error occurred while checking server setup" : "Възникна грешка при проверката на настройките на сървъра.",
"Shared" : "Споделено",
+ "Shared with" : "Споделено с",
+ "Shared by" : "Споделено от",
"Error setting expiration date" : "Грешка при настройване на датата за изтичане",
"The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дни след създаването ѝ.",
"Set expiration date" : "Задаване на дата на изтичане",
@@ -113,6 +129,7 @@ OC.L10N.register(
"group" : "група",
"remote" : "отдалечен",
"email" : "имейл",
+ "shared by {sharer}" : "споделено от {sharer}",
"Unshare" : "Прекратяване на споделяне",
"Could not unshare" : "Споделянето не е прекратено",
"Error while sharing" : "Грешка при споделяне",
@@ -204,7 +221,9 @@ OC.L10N.register(
"Log in" : "Вписване",
"Wrong password." : "Грешна парола",
"Stay logged in" : "Остани вписан",
+ "Forgot password?" : "Забравена парола?",
"Alternative Logins" : "Алтернативни методи на вписване",
+ "Redirecting …" : "Пренасочване ...",
"New password" : "Нова парола",
"New Password" : "Нова парола",
"Two-factor authentication" : "Двуфакторно удостоверяване",
@@ -212,6 +231,8 @@ OC.L10N.register(
"Cancel log in" : "Откажи вписване",
"Use backup code" : "Използвай код за възстановяване",
"Error while validating your second factor" : "Грешка при валидиране на втория ви фактор",
+ "Access through untrusted domain" : "Достъп чрез ненадежден домейн",
+ "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Моля, свържете се с администратора. Ако сте администратор на текущата инстанция, конфигурирайте \"trusted_domains\" настройките в config/config.php. Примерна конфигурация е предоставена в config/config.sample.php.",
"Add \"%s\" as trusted domain" : "Добави \"%s\" като сигурен домейн",
"App update required" : "Изисква се обновяване на добавката",
"%s will be updated to version %s" : "%s ще бъде обновен до версия %s",
@@ -223,6 +244,8 @@ OC.L10N.register(
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "За да избегнеш таймаутове при по-големи инсталации, можеш да изпълниш следните команди в инсталанционната директория:",
"Detailed logs" : "Подробни логове",
"Update needed" : "Нужно е обновяване",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">documentation</a>." : "За помощ, вижте <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацията</a>.",
+ "Upgrade via web on my own risk" : "Актуализиране чрез интернет на собствен риск",
"This %s instance is currently in maintenance mode, which may take a while." : "В момента този %s се обновява, а това може да отнеме време.",
"This page will refresh itself when the %s instance is available again." : "Страницата ще се зареди автоматично, когато %s е отново на линия.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Свържете се със системния администратор ако това съобщение се задържи твърде дълго или се е появило неочаквано.",
@@ -285,6 +308,9 @@ OC.L10N.register(
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Моля, свържете се с администратора. Ако сте администратор на текущата инстанция, конфигурирайте \"trusted_domains\" настройките в config/config.php. Примерна конфигурация е предоставена в config/config.sample.php.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "В зависимост от конфигурацията, като администратор натискайки долния бутон можете да маркирате домейна като сигурен.",
"Please use the command line updater because you have a big instance." : "Моля използвайте съветникът за обновяване в команден ред, защото инстанцията ви е голяма.",
- "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "За помощ, вижте <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацията</a>."
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "За помощ, вижте <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацията</a>.",
+ "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP OPcache не е правилно конфигуриран. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">За по-добри резултати препоръчваме</a> да използвате следните настройки в <code>php.ini</code>:",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Най-вероятно вашите данни и файлове са достъпни от интернет. .htaccess файлът не функционира. Силно препоръчваме да настроите уеб сървъра по такъв начин, че директорията за данни да не бъде достъпна или я преместете извън директорията на уеб сървъра.",
+ "Your PHP does not have freetype support. This will result in broken profile pictures and settings interface." : "PHP не поддържа FreeType. Това ще доведе до неправилното показване на профилните снимки и настройките на интерфейса"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/bg.json b/core/l10n/bg.json
index 3a9482603d3..bd38c76cf56 100644
--- a/core/l10n/bg.json
+++ b/core/l10n/bg.json
@@ -12,10 +12,14 @@
"No crop data provided" : "Липсват данни за изрязването",
"No valid crop data provided" : "Липсват данни за изрязването",
"Crop is not square" : "Областта не е квадратна",
+ "Password reset is disabled" : "Възстановяването на парола е изключено",
"Couldn't reset password because the token is invalid" : "Нулирането на паролата е невъзможно, защото връзката за удостоверение е невалидна",
"Couldn't reset password because the token is expired" : "Нулирането на паролата е невъзможно, защото връзката за удостоверение е изтекла",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Имейлът за възстановяване на паролата не може да бъде изпратен защо потребителят няма имейл адрес. Свържете се с администратора.",
"%s password reset" : "Паролата на %s е променена",
+ "Password reset" : "Възстановяване на парола",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Кликнете върху следния бутон, за да възстановите паролата си. Ако не сте поискали възстановяване на паролата, игнорирайте този имейл.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Кликнете върху следната връзка, за да възстановите паролата си. Ако не сте поискали възстановяване на паролата, игнорирайте този имейл.",
"Couldn't send reset email. Please contact your administrator." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, свържете се с вашия администратор.",
"Couldn't send reset email. Please make sure your username is correct." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, уверете се, че потребителското име е правилно.",
"Preparing update" : "Подготовка за актуализиране",
@@ -42,6 +46,11 @@
"%s (incompatible)" : "%s (несъвместим)",
"Following apps have been disabled: %s" : "Следната добавка беше изключена: %s",
"Already up to date" : "Вече е актуална",
+ "Search contacts …" : "Търсене на контакти ...",
+ "No contacts found" : "Няма намерени контакти",
+ "Show all contacts …" : "Покажи всички контакти ...",
+ "There was an error loading your contacts" : "Възникна грешка по време на зареждането на вашите контакти",
+ "Loading your contacts …" : "Зареждане на вашите контакти ...",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Има проблем с проверката за цялостта на кода. Повече информация…</a>",
"Settings" : "Настройки",
"Connection to server lost" : "Връзката със сървъра е загубена",
@@ -60,12 +69,15 @@
"I know what I'm doing" : "Знам какво правя",
"Password can not be changed. Please contact your administrator." : "Паролата не може да бъде промена. Моля, свържете се с администратора.",
"Reset password" : "Възстановяване на паролата",
+ "Sending email …" : "Изпращане на имейл ...",
"No" : "Не",
"Yes" : "Да",
"No files in here" : "Тук няма файлове",
"Choose" : "Избиране",
"Copy" : "Копиране",
+ "Move" : "Преместване",
"Error loading file picker template: {error}" : "Грешка при зареждането на шаблон за избор на файл: {error}",
+ "OK" : "ОК",
"Error loading message template: {error}" : "Грешка при зареждането на шаблон за съобщения: {error}",
"read-only" : "Само за четене",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} файлов конфликт","{count} файлови кофликта"],
@@ -79,6 +91,8 @@
"({count} selected)" : "({count} избрани)",
"Error loading file exists template" : "Грешка при зареждането на шаблон за вече съществуващ файл",
"Pending" : "Чакащо",
+ "Copy to {folder}" : "Копирай в {folder}",
+ "Move to {folder}" : "Премести в {folder}",
"Very weak password" : "Много слаба парола",
"Weak password" : "Слаба парола",
"So-so password" : "Не особено добра парола",
@@ -86,6 +100,8 @@
"Strong password" : "Сигурна парола",
"Error occurred while checking server setup" : "Възникна грешка при проверката на настройките на сървъра.",
"Shared" : "Споделено",
+ "Shared with" : "Споделено с",
+ "Shared by" : "Споделено от",
"Error setting expiration date" : "Грешка при настройване на датата за изтичане",
"The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дни след създаването ѝ.",
"Set expiration date" : "Задаване на дата на изтичане",
@@ -111,6 +127,7 @@
"group" : "група",
"remote" : "отдалечен",
"email" : "имейл",
+ "shared by {sharer}" : "споделено от {sharer}",
"Unshare" : "Прекратяване на споделяне",
"Could not unshare" : "Споделянето не е прекратено",
"Error while sharing" : "Грешка при споделяне",
@@ -202,7 +219,9 @@
"Log in" : "Вписване",
"Wrong password." : "Грешна парола",
"Stay logged in" : "Остани вписан",
+ "Forgot password?" : "Забравена парола?",
"Alternative Logins" : "Алтернативни методи на вписване",
+ "Redirecting …" : "Пренасочване ...",
"New password" : "Нова парола",
"New Password" : "Нова парола",
"Two-factor authentication" : "Двуфакторно удостоверяване",
@@ -210,6 +229,8 @@
"Cancel log in" : "Откажи вписване",
"Use backup code" : "Използвай код за възстановяване",
"Error while validating your second factor" : "Грешка при валидиране на втория ви фактор",
+ "Access through untrusted domain" : "Достъп чрез ненадежден домейн",
+ "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Моля, свържете се с администратора. Ако сте администратор на текущата инстанция, конфигурирайте \"trusted_domains\" настройките в config/config.php. Примерна конфигурация е предоставена в config/config.sample.php.",
"Add \"%s\" as trusted domain" : "Добави \"%s\" като сигурен домейн",
"App update required" : "Изисква се обновяване на добавката",
"%s will be updated to version %s" : "%s ще бъде обновен до версия %s",
@@ -221,6 +242,8 @@
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "За да избегнеш таймаутове при по-големи инсталации, можеш да изпълниш следните команди в инсталанционната директория:",
"Detailed logs" : "Подробни логове",
"Update needed" : "Нужно е обновяване",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">documentation</a>." : "За помощ, вижте <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацията</a>.",
+ "Upgrade via web on my own risk" : "Актуализиране чрез интернет на собствен риск",
"This %s instance is currently in maintenance mode, which may take a while." : "В момента този %s се обновява, а това може да отнеме време.",
"This page will refresh itself when the %s instance is available again." : "Страницата ще се зареди автоматично, когато %s е отново на линия.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Свържете се със системния администратор ако това съобщение се задържи твърде дълго или се е появило неочаквано.",
@@ -283,6 +306,9 @@
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Моля, свържете се с администратора. Ако сте администратор на текущата инстанция, конфигурирайте \"trusted_domains\" настройките в config/config.php. Примерна конфигурация е предоставена в config/config.sample.php.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "В зависимост от конфигурацията, като администратор натискайки долния бутон можете да маркирате домейна като сигурен.",
"Please use the command line updater because you have a big instance." : "Моля използвайте съветникът за обновяване в команден ред, защото инстанцията ви е голяма.",
- "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "За помощ, вижте <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацията</a>."
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "За помощ, вижте <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацията</a>.",
+ "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP OPcache не е правилно конфигуриран. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">За по-добри резултати препоръчваме</a> да използвате следните настройки в <code>php.ini</code>:",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Най-вероятно вашите данни и файлове са достъпни от интернет. .htaccess файлът не функционира. Силно препоръчваме да настроите уеб сървъра по такъв начин, че директорията за данни да не бъде достъпна или я преместете извън директорията на уеб сървъра.",
+ "Your PHP does not have freetype support. This will result in broken profile pictures and settings interface." : "PHP не поддържа FreeType. Това ще доведе до неправилното показване на профилните снимки и настройките на интерфейса"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/nl.js b/core/l10n/nl.js
index 3524773762f..23c0271dd12 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -276,6 +276,7 @@ OC.L10N.register(
"Username or email" : "Gebruikersnaam of email",
"Log in" : "Inloggen",
"Wrong password." : "Onjuist wachtwoord.",
+ "We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "We hebben meerdere foutieve inlogverzoeken van jouw IP gedetecteerd. Hierdoor wordt je volgende inlogverzoek 30 seconden uitgesteld.",
"Stay logged in" : "Ingelogd blijven",
"Forgot password?" : "Wachtwoord vergeten?",
"Back to log in" : "Terug naar inloggen",
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index 4cbd47c9cd2..176145eca3a 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -274,6 +274,7 @@
"Username or email" : "Gebruikersnaam of email",
"Log in" : "Inloggen",
"Wrong password." : "Onjuist wachtwoord.",
+ "We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "We hebben meerdere foutieve inlogverzoeken van jouw IP gedetecteerd. Hierdoor wordt je volgende inlogverzoek 30 seconden uitgesteld.",
"Stay logged in" : "Ingelogd blijven",
"Forgot password?" : "Wachtwoord vergeten?",
"Back to log in" : "Terug naar inloggen",
diff --git a/lib/base.php b/lib/base.php
index e55cc4b3f93..6e66005b28f 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -236,7 +236,7 @@ class OC {
// Check if config is writable
$configFileWritable = is_writable($configFilePath);
if (!$configFileWritable && !OC_Helper::isReadOnlyConfigEnabled()
- || !$configFileWritable && self::checkUpgrade(false)) {
+ || !$configFileWritable && \OCP\Util::needUpgrade()) {
$urlGenerator = \OC::$server->getURLGenerator();
@@ -290,37 +290,15 @@ class OC {
}
/**
- * Checks if the version requires an update and shows
- * @param bool $showTemplate Whether an update screen should get shown
- * @return bool|void
- */
- public static function checkUpgrade($showTemplate = true) {
- if (\OCP\Util::needUpgrade()) {
- if (function_exists('opcache_reset')) {
- opcache_reset();
- }
- $systemConfig = \OC::$server->getSystemConfig();
- if ($showTemplate && !$systemConfig->getValue('maintenance', false)) {
- self::printUpgradePage();
- exit();
- } else {
- return true;
- }
- }
- return false;
- }
-
- /**
* Prints the upgrade page
+ *
+ * @param \OC\SystemConfig $systemConfig
*/
- private static function printUpgradePage() {
- $systemConfig = \OC::$server->getSystemConfig();
-
+ private static function printUpgradePage(\OC\SystemConfig $systemConfig) {
$disableWebUpdater = $systemConfig->getValue('upgrade.disable-web', false);
$tooBig = false;
if (!$disableWebUpdater) {
$apps = \OC::$server->getAppManager();
- $tooBig = false;
if ($apps->isInstalled('user_ldap')) {
$qb = \OC::$server->getDatabaseConnection()->getQueryBuilder();
@@ -724,7 +702,7 @@ class OC {
);
//setup extra user backends
- if (!self::checkUpgrade(false)) {
+ if (!\OCP\Util::needUpgrade()) {
OC_User::setupBackends();
} else {
// Run upgrades in incognito mode
@@ -807,7 +785,7 @@ class OC {
*/
public static function registerCleanupHooks() {
//don't try to do this before we are properly setup
- if (\OC::$server->getSystemConfig()->getValue('installed', false) && !self::checkUpgrade(false)) {
+ if (\OC::$server->getSystemConfig()->getValue('installed', false) && !\OCP\Util::needUpgrade()) {
// NOTE: This will be replaced to use OCP
$userSession = self::$server->getUserSession();
@@ -929,7 +907,7 @@ class OC {
if (!$systemConfig->getValue('installed', false)) {
\OC::$server->getSession()->clear();
$setupHelper = new OC\Setup(
- \OC::$server->getSystemConfig(),
+ $systemConfig,
\OC::$server->getIniWrapper(),
\OC::$server->getL10N('lib'),
\OC::$server->query(\OCP\Defaults::class),
@@ -949,7 +927,16 @@ class OC {
}
if (substr($requestPath, -3) !== '.js') { // we need these files during the upgrade
self::checkMaintenanceMode();
- self::checkUpgrade();
+
+ if (\OCP\Util::needUpgrade()) {
+ if (function_exists('opcache_reset')) {
+ opcache_reset();
+ }
+ if (!$systemConfig->getValue('maintenance', false)) {
+ self::printUpgradePage($systemConfig);
+ exit();
+ }
+ }
}
// emergency app disabling
@@ -972,7 +959,7 @@ class OC {
OC_App::loadApps(['authentication']);
// Load minimum set of apps
- if (!self::checkUpgrade(false)
+ if (!\OCP\Util::needUpgrade()
&& !$systemConfig->getValue('maintenance', false)) {
// For logged-in users: Load everything
if(\OC::$server->getUserSession()->isLoggedIn()) {
@@ -986,7 +973,7 @@ class OC {
if (!self::$CLI) {
try {
- if (!$systemConfig->getValue('maintenance', false) && !self::checkUpgrade(false)) {
+ if (!$systemConfig->getValue('maintenance', false) && !\OCP\Util::needUpgrade()) {
OC_App::loadApps(array('filesystem', 'logging'));
OC_App::loadApps();
}
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index a1b0650b03a..f29b9334fca 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -803,14 +803,7 @@ return array(
'OC\\Repair\\CleanTags' => $baseDir . '/lib/private/Repair/CleanTags.php',
'OC\\Repair\\Collation' => $baseDir . '/lib/private/Repair/Collation.php',
'OC\\Repair\\MoveUpdaterStepFile' => $baseDir . '/lib/private/Repair/MoveUpdaterStepFile.php',
- 'OC\\Repair\\NC11\\CleanPreviews' => $baseDir . '/lib/private/Repair/NC11/CleanPreviews.php',
- 'OC\\Repair\\NC11\\CleanPreviewsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php',
'OC\\Repair\\NC11\\FixMountStorages' => $baseDir . '/lib/private/Repair/NC11/FixMountStorages.php',
- 'OC\\Repair\\NC11\\MoveAvatars' => $baseDir . '/lib/private/Repair/NC11/MoveAvatars.php',
- 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php',
- 'OC\\Repair\\NC12\\InstallCoreBundle' => $baseDir . '/lib/private/Repair/NC12/InstallCoreBundle.php',
- 'OC\\Repair\\NC12\\RepairIdentityProofKeyFolders' => $baseDir . '/lib/private/Repair/NC12/RepairIdentityProofKeyFolders.php',
- 'OC\\Repair\\NC12\\UpdateLanguageCodes' => $baseDir . '/lib/private/Repair/NC12/UpdateLanguageCodes.php',
'OC\\Repair\\NC13\\AddLogRotateJob' => $baseDir . '/lib/private/Repair/NC13/AddLogRotateJob.php',
'OC\\Repair\\NC13\\RepairInvalidPaths' => $baseDir . '/lib/private/Repair/NC13/RepairInvalidPaths.php',
'OC\\Repair\\OldGroupMembershipShares' => $baseDir . '/lib/private/Repair/OldGroupMembershipShares.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 1bdcd38fcfb..def8abd8c55 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -833,14 +833,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Repair\\CleanTags' => __DIR__ . '/../../..' . '/lib/private/Repair/CleanTags.php',
'OC\\Repair\\Collation' => __DIR__ . '/../../..' . '/lib/private/Repair/Collation.php',
'OC\\Repair\\MoveUpdaterStepFile' => __DIR__ . '/../../..' . '/lib/private/Repair/MoveUpdaterStepFile.php',
- 'OC\\Repair\\NC11\\CleanPreviews' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/CleanPreviews.php',
- 'OC\\Repair\\NC11\\CleanPreviewsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php',
'OC\\Repair\\NC11\\FixMountStorages' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/FixMountStorages.php',
- 'OC\\Repair\\NC11\\MoveAvatars' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatars.php',
- 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php',
- 'OC\\Repair\\NC12\\InstallCoreBundle' => __DIR__ . '/../../..' . '/lib/private/Repair/NC12/InstallCoreBundle.php',
- 'OC\\Repair\\NC12\\RepairIdentityProofKeyFolders' => __DIR__ . '/../../..' . '/lib/private/Repair/NC12/RepairIdentityProofKeyFolders.php',
- 'OC\\Repair\\NC12\\UpdateLanguageCodes' => __DIR__ . '/../../..' . '/lib/private/Repair/NC12/UpdateLanguageCodes.php',
'OC\\Repair\\NC13\\AddLogRotateJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC13/AddLogRotateJob.php',
'OC\\Repair\\NC13\\RepairInvalidPaths' => __DIR__ . '/../../..' . '/lib/private/Repair/NC13/RepairInvalidPaths.php',
'OC\\Repair\\OldGroupMembershipShares' => __DIR__ . '/../../..' . '/lib/private/Repair/OldGroupMembershipShares.php',
diff --git a/lib/private/Files/Mount/MountPoint.php b/lib/private/Files/Mount/MountPoint.php
index bff1f2e3f0c..26150de2bd1 100644
--- a/lib/private/Files/Mount/MountPoint.php
+++ b/lib/private/Files/Mount/MountPoint.php
@@ -152,7 +152,7 @@ class MountPoint implements IMountPoint {
// the root storage could not be initialized, show the user!
throw new \Exception('The root storage could not be initialized. Please contact your local administrator.', $exception->getCode(), $exception);
} else {
- \OCP\Util::writeLog('core', $exception->getMessage(), \OCP\Util::ERROR);
+ \OC::$server->getLogger()->logException($exception, ['level' => \OCP\Util::ERROR]);
}
return;
}
diff --git a/lib/private/Files/Storage/Home.php b/lib/private/Files/Storage/Home.php
index 57b32349324..d2a979c3020 100644
--- a/lib/private/Files/Storage/Home.php
+++ b/lib/private/Files/Storage/Home.php
@@ -25,6 +25,7 @@
*/
namespace OC\Files\Storage;
+
use OC\Files\Cache\HomePropagator;
/**
@@ -43,6 +44,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage {
/**
* Construct a Home storage instance
+ *
* @param array $arguments array with "user" containing the
* storage owner
*/
@@ -51,7 +53,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage {
$datadir = $this->user->getHome();
$this->id = 'home::' . $this->user->getUID();
- parent::__construct(array('datadir' => $datadir));
+ parent::__construct(['datadir' => $datadir]);
}
public function getId() {
@@ -90,6 +92,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage {
/**
* Returns the owner of this home storage
+ *
* @return \OC\User\User owner of this home storage
*/
public function getUser() {
diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php
index ba9b15ce931..a0e20f4cba1 100644
--- a/lib/private/Files/Storage/Local.php
+++ b/lib/private/Files/Storage/Local.php
@@ -59,12 +59,13 @@ class Local extends \OC\Files\Storage\Common {
if (!isset($arguments['datadir']) || !is_string($arguments['datadir'])) {
throw new \InvalidArgumentException('No data directory set for local storage');
}
- $this->datadir = $arguments['datadir'];
+ $this->datadir = str_replace('//', '/', $arguments['datadir']);
// some crazy code uses a local storage on root...
if ($this->datadir === '/') {
$this->realDataDir = $this->datadir;
} else {
- $this->realDataDir = rtrim(realpath($this->datadir), '/') . '/';
+ $realPath = realpath($this->datadir) ?: $this->datadir;
+ $this->realDataDir = rtrim($realPath, '/') . '/';
}
if (substr($this->datadir, -1) !== '/') {
$this->datadir .= '/';
@@ -361,14 +362,18 @@ class Local extends \OC\Files\Storage\Common {
*/
public function getSourcePath($path) {
$fullPath = $this->datadir . $path;
- if ($this->allowSymlinks || $path === '') {
+ $currentPath = $path;
+ if ($this->allowSymlinks || $currentPath === '') {
return $fullPath;
}
$pathToResolve = $fullPath;
$realPath = realpath($pathToResolve);
while ($realPath === false) { // for non existing files check the parent directory
- $pathToResolve = dirname($pathToResolve);
- $realPath = realpath($pathToResolve);
+ $currentPath = dirname($currentPath);
+ if ($currentPath === '' || $currentPath === '.') {
+ return $fullPath;
+ }
+ $realPath = realpath($this->datadir . $currentPath);
}
if ($realPath) {
$realPath = $realPath . '/';
diff --git a/lib/private/Repair.php b/lib/private/Repair.php
index 8562465aad3..2b671662f99 100644
--- a/lib/private/Repair.php
+++ b/lib/private/Repair.php
@@ -35,12 +35,7 @@ use OC\Files\AppData\Factory;
use OC\Repair\CleanTags;
use OC\Repair\Collation;
use OC\Repair\MoveUpdaterStepFile;
-use OC\Repair\NC11\CleanPreviews;
use OC\Repair\NC11\FixMountStorages;
-use OC\Repair\NC11\MoveAvatars;
-use OC\Repair\NC12\InstallCoreBundle;
-use OC\Repair\NC12\UpdateLanguageCodes;
-use OC\Repair\NC12\RepairIdentityProofKeyFolders;
use OC\Repair\NC13\AddLogRotateJob;
use OC\Repair\OldGroupMembershipShares;
use OC\Repair\Owncloud\DropAccountTermsTable;
@@ -133,24 +128,8 @@ class Repair implements IOutput{
new RepairInvalidShares(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()),
new RemoveRootShares(\OC::$server->getDatabaseConnection(), \OC::$server->getUserManager(), \OC::$server->getLazyRootFolder()),
new MoveUpdaterStepFile(\OC::$server->getConfig()),
- new MoveAvatars(
- \OC::$server->getJobList(),
- \OC::$server->getConfig()
- ),
- new CleanPreviews(
- \OC::$server->getJobList(),
- \OC::$server->getUserManager(),
- \OC::$server->getConfig()
- ),
new FixMountStorages(\OC::$server->getDatabaseConnection()),
- new UpdateLanguageCodes(\OC::$server->getDatabaseConnection(), \OC::$server->getConfig()),
- new InstallCoreBundle(
- \OC::$server->query(BundleFetcher::class),
- \OC::$server->getConfig(),
- \OC::$server->query(Installer::class)
- ),
new RepairInvalidPaths(\OC::$server->getDatabaseConnection(), \OC::$server->getConfig()),
- new RepairIdentityProofKeyFolders(\OC::$server->getConfig(), \OC::$server->query(Factory::class), \OC::$server->getRootFolder()),
new AddLogRotateJob(\OC::$server->getJobList()),
];
}
diff --git a/lib/private/Repair/NC11/CleanPreviews.php b/lib/private/Repair/NC11/CleanPreviews.php
deleted file mode 100644
index 94f5d19b795..00000000000
--- a/lib/private/Repair/NC11/CleanPreviews.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-/**
- * @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * 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
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-namespace OC\Repair\NC11;
-
-use OCP\BackgroundJob\IJobList;
-use OCP\IConfig;
-use OCP\IUser;
-use OCP\IUserManager;
-use OCP\Migration\IOutput;
-use OCP\Migration\IRepairStep;
-
-class CleanPreviews implements IRepairStep {
-
- /** @var IJobList */
- private $jobList;
-
- /** @var IUserManager */
- private $userManager;
-
- /** @var IConfig */
- private $config;
-
- /**
- * MoveAvatars constructor.
- *
- * @param IJobList $jobList
- * @param IUserManager $userManager
- * @param IConfig $config
- */
- public function __construct(IJobList $jobList,
- IUserManager $userManager,
- IConfig $config) {
- $this->jobList = $jobList;
- $this->userManager = $userManager;
- $this->config = $config;
- }
-
- /**
- * @return string
- */
- public function getName() {
- return 'Add preview cleanup background jobs';
- }
-
- public function run(IOutput $output) {
- if (!$this->config->getAppValue('core', 'previewsCleanedUp', false)) {
- $this->userManager->callForSeenUsers(function (IUser $user) {
- $this->jobList->add(CleanPreviewsBackgroundJob::class, ['uid' => $user->getUID()]);
- });
- $this->config->setAppValue('core', 'previewsCleanedUp', 1);
- }
- }
-}
diff --git a/lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php b/lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php
deleted file mode 100644
index e713f4dc63a..00000000000
--- a/lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-/**
- * @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * 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
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-namespace OC\Repair\NC11;
-
-use OC\BackgroundJob\QueuedJob;
-use OCP\AppFramework\Utility\ITimeFactory;
-use OCP\BackgroundJob\IJobList;
-use OCP\Files\Folder;
-use OCP\Files\IRootFolder;
-use OCP\Files\NotFoundException;
-use OCP\Files\NotPermittedException;
-use OCP\ILogger;
-use OCP\IUserManager;
-
-class CleanPreviewsBackgroundJob extends QueuedJob {
- /** @var IRootFolder */
- private $rootFolder;
-
- /** @var ILogger */
- private $logger;
-
- /** @var IJobList */
- private $jobList;
-
- /** @var ITimeFactory */
- private $timeFactory;
-
- /** @var IUserManager */
- private $userManager;
-
- /**
- * CleanPreviewsBackgroundJob constructor.
- *
- * @param IRootFolder $rootFolder
- * @param ILogger $logger
- * @param IJobList $jobList
- * @param ITimeFactory $timeFactory
- * @param IUserManager $userManager
- */
- public function __construct(IRootFolder $rootFolder,
- ILogger $logger,
- IJobList $jobList,
- ITimeFactory $timeFactory,
- IUserManager $userManager) {
- $this->rootFolder = $rootFolder;
- $this->logger = $logger;
- $this->jobList = $jobList;
- $this->timeFactory = $timeFactory;
- $this->userManager = $userManager;
- }
-
- public function run($arguments) {
- $uid = $arguments['uid'];
- if (!$this->userManager->userExists($uid)) {
- $this->logger->info('User no longer exists, skip user ' . $uid);
- return;
- }
- $this->logger->info('Started preview cleanup for ' . $uid);
- $empty = $this->cleanupPreviews($uid);
-
- if (!$empty) {
- $this->jobList->add(self::class, ['uid' => $uid]);
- $this->logger->info('New preview cleanup scheduled for ' . $uid);
- } else {
- $this->logger->info('Preview cleanup done for ' . $uid);
- }
- }
-
- /**
- * @param $uid
- * @return bool
- */
- private function cleanupPreviews($uid) {
- try {
- $userFolder = $this->rootFolder->getUserFolder($uid);
- } catch (NotFoundException $e) {
- return true;
- }
-
- $userRoot = $userFolder->getParent();
-
- try {
- /** @var Folder $thumbnailFolder */
- $thumbnailFolder = $userRoot->get('thumbnails');
- } catch (NotFoundException $e) {
- return true;
- }
-
- $thumbnails = $thumbnailFolder->getDirectoryListing();
-
- $start = $this->timeFactory->getTime();
- foreach ($thumbnails as $thumbnail) {
- try {
- $thumbnail->delete();
- } catch (NotPermittedException $e) {
- // Ignore
- }
-
- if (($this->timeFactory->getTime() - $start) > 15) {
- return false;
- }
- }
-
- try {
- $thumbnailFolder->delete();
- } catch (NotPermittedException $e) {
- // Ignore
- }
-
- return true;
- }
-}
diff --git a/lib/private/Repair/NC11/MoveAvatars.php b/lib/private/Repair/NC11/MoveAvatars.php
deleted file mode 100644
index cff591904f1..00000000000
--- a/lib/private/Repair/NC11/MoveAvatars.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-/**
- * @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * 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
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-namespace OC\Repair\NC11;
-
-use OCP\BackgroundJob\IJobList;
-use OCP\IConfig;
-use OCP\Migration\IOutput;
-use OCP\Migration\IRepairStep;
-
-class MoveAvatars implements IRepairStep {
-
- /** @var IJobList */
- private $jobList;
-
- /** @var IConfig */
- private $config;
-
- /**
- * MoveAvatars constructor.
- *
- * @param IJobList $jobList
- * @param IConfig $config
- */
- public function __construct(IJobList $jobList,
- IConfig $config) {
- $this->jobList = $jobList;
- $this->config = $config;
- }
-
- /**
- * @return string
- */
- public function getName() {
- return 'Add move avatar background job';
- }
-
- public function run(IOutput $output) {
- // only run once
- if ($this->config->getAppValue('core', 'moveavatarsdone') === 'yes') {
- $output->info('Repair step already executed');
- return;
- }
- if ($this->config->getSystemValue('enable_avatars', true) === false) {
- $output->info('Avatars are disabled');
- } else {
- $output->info('Add background job');
- $this->jobList->add(MoveAvatarsBackgroundJob::class);
- // if all were done, no need to redo the repair during next upgrade
- $this->config->setAppValue('core', 'moveavatarsdone', 'yes');
- }
- }
-}
diff --git a/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php b/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php
deleted file mode 100644
index 81f375e1b41..00000000000
--- a/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-/**
- * @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * 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
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-namespace OC\Repair\NC11;
-
-use OC\BackgroundJob\QueuedJob;
-use OCP\Files\File;
-use OCP\Files\Folder;
-use OCP\Files\IAppData;
-use OCP\Files\IRootFolder;
-use OCP\Files\NotFoundException;
-use OCP\Files\SimpleFS\ISimpleFolder;
-use OCP\ILogger;
-use OCP\IUser;
-use OCP\IUserManager;
-
-class MoveAvatarsBackgroundJob extends QueuedJob {
-
- /** @var IUserManager */
- private $userManager;
-
- /** @var IRootFolder */
- private $rootFolder;
-
- /** @var IAppData */
- private $appData;
-
- /** @var ILogger */
- private $logger;
-
- /**
- * MoveAvatars constructor.
- */
- public function __construct() {
- $this->userManager = \OC::$server->getUserManager();
- $this->rootFolder = \OC::$server->getRootFolder();
- $this->logger = \OC::$server->getLogger();
- $this->appData = \OC::$server->getAppDataDir('avatar');
- }
-
- public function run($arguments) {
- $this->logger->info('Started migrating avatars to AppData folder');
- $this->moveAvatars();
- $this->logger->info('All avatars migrated to AppData folder');
- }
-
- private function moveAvatars() {
- try {
- $ownCloudAvatars = $this->rootFolder->get('avatars');
- } catch (NotFoundException $e) {
- $ownCloudAvatars = null;
- }
-
- $counter = 0;
- $this->userManager->callForSeenUsers(function (IUser $user) use ($counter, $ownCloudAvatars) {
- $uid = $user->getUID();
-
- \OC\Files\Filesystem::initMountPoints($uid);
- /** @var Folder $userFolder */
- $userFolder = $this->rootFolder->get($uid);
-
- try {
- $userData = $this->appData->getFolder($uid);
- } catch (NotFoundException $e) {
- $userData = $this->appData->newFolder($uid);
- }
-
- $foundAvatars = $this->copyAvatarsFromFolder($userFolder, $userData);
-
- // ownCloud migration?
- if ($foundAvatars === 0 && $ownCloudAvatars instanceof Folder) {
- $parts = $this->buildOwnCloudAvatarPath($uid);
- $userOwnCloudAvatar = $ownCloudAvatars;
- foreach ($parts as $part) {
- try {
- $userOwnCloudAvatar = $userOwnCloudAvatar->get($part);
- } catch (NotFoundException $e) {
- return;
- }
- }
-
- $this->copyAvatarsFromFolder($userOwnCloudAvatar, $userData);
- }
-
- $counter++;
- if ($counter % 100 === 0) {
- $this->logger->info('{amount} avatars migrated', ['amount' => $counter]);
- }
- });
- }
-
- /**
- * @param Folder $source
- * @param ISimpleFolder $target
- * @return int
- * @throws \OCP\Files\NotPermittedException
- * @throws NotFoundException
- */
- protected function copyAvatarsFromFolder(Folder $source, ISimpleFolder $target) {
- $foundAvatars = 0;
- $avatars = $source->getDirectoryListing();
- $regex = '/^avatar\.([0-9]+\.)?(jpg|png)$/';
-
- foreach ($avatars as $avatar) {
- /** @var File $avatar */
- if (preg_match($regex, $avatar->getName())) {
- /*
- * This is not the most effective but it is the most abstract way
- * to handle this. Avatars should be small anyways.
- */
- $newAvatar = $target->newFile($avatar->getName());
- $newAvatar->putContent($avatar->getContent());
- $avatar->delete();
- $foundAvatars++;
- }
- }
-
- return $foundAvatars;
- }
-
- protected function buildOwnCloudAvatarPath($userId) {
- $avatar = substr_replace(substr_replace(md5($userId), '/', 4, 0), '/', 2, 0);
- return explode('/', $avatar);
- }
-}
diff --git a/lib/private/Repair/NC12/InstallCoreBundle.php b/lib/private/Repair/NC12/InstallCoreBundle.php
deleted file mode 100644
index f7a2b07dec0..00000000000
--- a/lib/private/Repair/NC12/InstallCoreBundle.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
- *
- * @author Lukas Reschke <lukas@statuscode.ch>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * 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
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-namespace OC\Repair\NC12;
-
-use OC\App\AppStore\Bundles\BundleFetcher;
-use OC\Installer;
-use OCP\IConfig;
-use OCP\Migration\IOutput;
-use OCP\Migration\IRepairStep;
-
-class InstallCoreBundle implements IRepairStep {
- /** @var BundleFetcher */
- private $bundleFetcher;
- /** @var IConfig */
- private $config;
- /** @var Installer */
- private $installer;
-
- /**
- * @param BundleFetcher $bundleFetcher
- * @param IConfig $config
- * @param Installer $installer
- */
- public function __construct(BundleFetcher $bundleFetcher,
- IConfig $config,
- Installer $installer) {
- $this->bundleFetcher = $bundleFetcher;
- $this->config = $config;
- $this->installer = $installer;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getName() {
- return 'Install new core bundle components';
- }
-
- /**
- * {@inheritdoc}
- */
- public function run(IOutput $output) {
- $versionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0');
-
- if (version_compare($versionFromBeforeUpdate, '12.0.0.14', '>')) {
- return;
- }
-
- $defaultBundle = $this->bundleFetcher->getDefaultInstallationBundle();
- foreach($defaultBundle as $bundle) {
- try {
- $this->installer->installAppBundle($bundle);
- $output->info('Successfully installed core app bundle.');
- } catch (\Exception $e) {
- $output->warning('Could not install core app bundle: ' . $e->getMessage());
- }
- }
- }
-}
diff --git a/lib/private/Repair/NC12/RepairIdentityProofKeyFolders.php b/lib/private/Repair/NC12/RepairIdentityProofKeyFolders.php
deleted file mode 100644
index f8b8b8bdc28..00000000000
--- a/lib/private/Repair/NC12/RepairIdentityProofKeyFolders.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
- *
- * @author Bjoern Schiessle <bjoern@schiessle.org>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * 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
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
-namespace OC\Repair\NC12;
-
-
-use OC\Files\AppData\Factory;
-use OCP\Files\IRootFolder;
-use OCP\Files\SimpleFS\ISimpleFolder;
-use OCP\IConfig;
-use OCP\Migration\IOutput;
-use OCP\Migration\IRepairStep;
-
-class RepairIdentityProofKeyFolders implements IRepairStep {
-
- /** @var IConfig */
- private $config;
-
- /** @var \OC\Files\AppData\AppData */
- private $appDataIdentityProof;
-
- /** @var IRootFolder */
- private $rootFolder;
-
- /** @var string */
- private $identityProofDir;
-
- /**
- * RepairIdentityProofKeyFolders constructor.
- *
- * @param IConfig $config
- * @param Factory $appDataFactory
- * @param IRootFolder $rootFolder
- */
- public function __construct(IConfig $config, Factory $appDataFactory, IRootFolder $rootFolder) {
- $this->config = $config;
- $this->appDataIdentityProof = $appDataFactory->get('identityproof');
- $this->rootFolder = $rootFolder;
-
- $instanceId = $this->config->getSystemValue('instanceid', null);
- if ($instanceId === null) {
- throw new \RuntimeException('no instance id!');
- }
- $this->identityProofDir = 'appdata_' . $instanceId . '/identityproof/';
- }
-
- /**
- * Returns the step's name
- *
- * @return string
- * @since 9.1.0
- */
- public function getName() {
- return "Rename folder with user specific keys";
- }
-
- /**
- * Run repair step.
- * Must throw exception on error.
- *
- * @param IOutput $output
- * @throws \Exception in case of failure
- * @since 9.1.0
- */
- public function run(IOutput $output) {
- $versionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0');
- if (version_compare($versionFromBeforeUpdate, '12.0.1.5', '<=')) {
- $count = $this->repair();
- $output->info('Repaired ' . $count . ' folders');
- }
- }
-
- /**
- * rename all dirs with user specific keys to 'user-uid'
- *
- * @return int
- */
- private function repair() {
- $count = 0;
- $dirListing = $this->appDataIdentityProof->getDirectoryListing();
- /** @var ISimpleFolder $folder */
- foreach ($dirListing as $folder) {
- $name = $folder->getName();
- $node = $this->rootFolder->get($this->identityProofDir . $name);
- $node->move($this->identityProofDir . 'user-' . $name);
- $count++;
- }
-
- return $count;
- }
-}
diff --git a/lib/private/Repair/NC12/UpdateLanguageCodes.php b/lib/private/Repair/NC12/UpdateLanguageCodes.php
deleted file mode 100644
index a8522449d56..00000000000
--- a/lib/private/Repair/NC12/UpdateLanguageCodes.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * 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
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-namespace OC\Repair\NC12;
-
-use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\IConfig;
-use OCP\IDBConnection;
-use OCP\Migration\IOutput;
-use OCP\Migration\IRepairStep;
-
-class UpdateLanguageCodes implements IRepairStep {
- /** @var IDBConnection */
- private $connection;
-
- /** @var IConfig */
- private $config;
-
- /**
- * @param IDBConnection $connection
- * @param IConfig $config
- */
- public function __construct(IDBConnection $connection,
- IConfig $config) {
- $this->connection = $connection;
- $this->config = $config;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getName() {
- return 'Repair language codes';
- }
-
- /**
- * {@inheritdoc}
- */
- public function run(IOutput $output) {
-
- $versionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0');
-
- if (version_compare($versionFromBeforeUpdate, '12.0.0.13', '>')) {
- return;
- }
-
- $languages = [
- 'bg_BG' => 'bg',
- 'cs_CZ' => 'cs',
- 'fi_FI' => 'fi',
- 'hu_HU' => 'hu',
- 'nb_NO' => 'nb',
- 'sk_SK' => 'sk',
- 'th_TH' => 'th',
- ];
-
- foreach ($languages as $oldCode => $newCode) {
- $qb = $this->connection->getQueryBuilder();
-
- $affectedRows = $qb->update('preferences')
- ->set('configvalue', $qb->createNamedParameter($newCode))
- ->where($qb->expr()->eq('appid', $qb->createNamedParameter('core')))
- ->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter('lang')))
- ->andWhere($qb->expr()->eq('configvalue', $qb->createNamedParameter($oldCode), IQueryBuilder::PARAM_STR))
- ->execute();
-
- $output->info('Changed ' . $affectedRows . ' setting(s) from "' . $oldCode . '" to "' . $newCode . '" in preferences table.');
- }
- }
-}
diff --git a/lib/private/Server.php b/lib/private/Server.php
index fb4484c72af..90072f8b63b 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -92,7 +92,6 @@ use OC\Notification\Manager;
use OC\OCS\DiscoveryService;
use OC\Remote\Api\ApiFactory;
use OC\Remote\InstanceFactory;
-use OC\Repair\NC11\CleanPreviewsBackgroundJob;
use OC\RichObjectStrings\Validator;
use OC\Security\Bruteforce\Throttler;
use OC\Security\CertificateManager;
diff --git a/lib/private/Share/Share.php b/lib/private/Share/Share.php
index f06a0998668..8812399c812 100644
--- a/lib/private/Share/Share.php
+++ b/lib/private/Share/Share.php
@@ -784,81 +784,6 @@ class Share extends Constants {
}
/**
- * Retrieve the owner of a connection
- *
- * @param IDBConnection $connection
- * @param int $shareId
- * @throws \Exception
- * @return string uid of share owner
- */
- private static function getShareOwner(IDBConnection $connection, $shareId) {
- $qb = $connection->getQueryBuilder();
-
- $qb->select('uid_owner')
- ->from('share')
- ->where($qb->expr()->eq('id', $qb->createParameter('shareId')))
- ->setParameter(':shareId', $shareId);
- $dbResult = $qb->execute();
- $result = $dbResult->fetch();
- $dbResult->closeCursor();
-
- if (empty($result)) {
- throw new \Exception('Share not found');
- }
-
- return $result['uid_owner'];
- }
-
- /**
- * Set password for a public link share
- *
- * @param IUserSession $userSession
- * @param IDBConnection $connection
- * @param IConfig $config
- * @param int $shareId
- * @param string $password
- * @throws \Exception
- * @return boolean
- */
- public static function setPassword(IUserSession $userSession,
- IDBConnection $connection,
- IConfig $config,
- $shareId, $password) {
- $user = $userSession->getUser();
- if (is_null($user)) {
- throw new \Exception("User not logged in");
- }
-
- $uid = self::getShareOwner($connection, $shareId);
-
- if ($uid !== $user->getUID()) {
- throw new \Exception('Cannot update share of a different user');
- }
-
- if ($password === '') {
- $password = null;
- }
-
- //If passwords are enforced the password can't be null
- if (self::enforcePassword($config) && is_null($password)) {
- throw new \Exception('Cannot remove password');
- }
-
- self::verifyPassword($password);
-
- $qb = $connection->getQueryBuilder();
- $qb->update('share')
- ->set('share_with', $qb->createParameter('pass'))
- ->where($qb->expr()->eq('id', $qb->createParameter('shareId')))
- ->setParameter(':pass', is_null($password) ? null : \OC::$server->getHasher()->hash($password))
- ->setParameter(':shareId', $shareId);
-
- $qb->execute();
-
- return true;
- }
-
- /**
* Checks whether a share has expired, calls unshareItem() if yes.
* @param array $item Share data (usually database row)
* @return boolean True if item was expired, false otherwise.
@@ -2157,14 +2082,6 @@ class Share extends Constants {
}
/**
- * @return bool
- */
- public static function enforceDefaultExpireDate() {
- $enforceDefaultExpireDate = \OC::$server->getConfig()->getAppValue('core', 'shareapi_enforce_expire_date', 'no');
- return ($enforceDefaultExpireDate === "yes") ? true : false;
- }
-
- /**
* @return int
*/
public static function getExpireInterval() {
@@ -2206,30 +2123,6 @@ class Share extends Constants {
}
/**
- * Get all share entries, including non-unique group items
- *
- * @param string $owner
- * @return array
- */
- public static function getAllSharesForOwner($owner) {
- $query = 'SELECT * FROM `*PREFIX*share` WHERE `uid_owner` = ?';
- $result = \OC::$server->getDatabaseConnection()->executeQuery($query, [$owner]);
- return $result->fetchAll();
- }
-
- /**
- * Get all share entries, including non-unique group items for a file
- *
- * @param int $id
- * @return array
- */
- public static function getAllSharesForFileId($id) {
- $query = 'SELECT * FROM `*PREFIX*share` WHERE `file_source` = ?';
- $result = \OC::$server->getDatabaseConnection()->executeQuery($query, [$id]);
- return $result->fetchAll();
- }
-
- /**
* @param string $password
* @throws \Exception
*/
diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js
index 5c0f2bd392d..ad35e90389e 100644
--- a/settings/l10n/zh_CN.js
+++ b/settings/l10n/zh_CN.js
@@ -103,9 +103,15 @@ OC.L10N.register(
"Error: This app can not be enabled because it makes the server unstable" : "错误: 无法启用应用因为它会导致服务器不稳定",
"Error: Could not disable broken app" : "错误: 无法禁用损坏的应用",
"Error while disabling broken app" : "禁用损坏的应用时出错",
+ "App up to date" : "已是最新应用",
+ "Upgrading …" : "正在更新。。。",
+ "Could not upgrade app" : "无法更新应用",
"Updated" : "已更新",
"Removing …" : "正在移除...",
+ "Could not remove app" : "无法移除应用",
"Remove" : "移除",
+ "The app has been enabled but needs to be upgraded. You will be redirected to the upgrade page in 5 seconds." : "已启用该应用,但需要升级。 您将在5秒内跳转到升级页面。",
+ "App upgrade" : "应用更新",
"Approved" : "已认证",
"Experimental" : "实验",
"No apps found for {query}" : "找不到符合 {query} 的应用",
@@ -256,6 +262,7 @@ OC.L10N.register(
"It is strongly proposed to install the required packages on your system to support one of the following locales: %s." : "我们强烈建议在您的系统中安装需要的包以支持下列区域: %s.",
"If your installation is not installed at the root of the domain and uses system Cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果您不是安装在域名的根目录, 并且使用系统 cron 服务时, 可能导致 URL 生成问题. 为了避免这些问题, 请在您的 config.php 文件中设置 \"overwrite.cli.url\" 选项为您的安装根目录路径 (建议: \"%s\")",
"It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "由于下列的技术错误, 无法通过 CLI 执行计划任务:",
+ "Please double check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "请仔细检查<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">安装指南</a>,并检查<a href=\"%s\">日志</a>中是否有错误或警告。",
"All checks passed." : "所有检查已通过.",
"Background jobs" : "后台任务",
"Last job ran %s." : "上次定时任务执行于: %s.",
diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json
index 81ea2021786..173f4e0a17c 100644
--- a/settings/l10n/zh_CN.json
+++ b/settings/l10n/zh_CN.json
@@ -101,9 +101,15 @@
"Error: This app can not be enabled because it makes the server unstable" : "错误: 无法启用应用因为它会导致服务器不稳定",
"Error: Could not disable broken app" : "错误: 无法禁用损坏的应用",
"Error while disabling broken app" : "禁用损坏的应用时出错",
+ "App up to date" : "已是最新应用",
+ "Upgrading …" : "正在更新。。。",
+ "Could not upgrade app" : "无法更新应用",
"Updated" : "已更新",
"Removing …" : "正在移除...",
+ "Could not remove app" : "无法移除应用",
"Remove" : "移除",
+ "The app has been enabled but needs to be upgraded. You will be redirected to the upgrade page in 5 seconds." : "已启用该应用,但需要升级。 您将在5秒内跳转到升级页面。",
+ "App upgrade" : "应用更新",
"Approved" : "已认证",
"Experimental" : "实验",
"No apps found for {query}" : "找不到符合 {query} 的应用",
@@ -254,6 +260,7 @@
"It is strongly proposed to install the required packages on your system to support one of the following locales: %s." : "我们强烈建议在您的系统中安装需要的包以支持下列区域: %s.",
"If your installation is not installed at the root of the domain and uses system Cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果您不是安装在域名的根目录, 并且使用系统 cron 服务时, 可能导致 URL 生成问题. 为了避免这些问题, 请在您的 config.php 文件中设置 \"overwrite.cli.url\" 选项为您的安装根目录路径 (建议: \"%s\")",
"It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "由于下列的技术错误, 无法通过 CLI 执行计划任务:",
+ "Please double check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "请仔细检查<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">安装指南</a>,并检查<a href=\"%s\">日志</a>中是否有错误或警告。",
"All checks passed." : "所有检查已通过.",
"Background jobs" : "后台任务",
"Last job ran %s." : "上次定时任务执行于: %s.",
diff --git a/tests/lib/Repair/NC11/CleanPreviewsBackgroundJobTest.php b/tests/lib/Repair/NC11/CleanPreviewsBackgroundJobTest.php
deleted file mode 100644
index c0e2f0ce1b5..00000000000
--- a/tests/lib/Repair/NC11/CleanPreviewsBackgroundJobTest.php
+++ /dev/null
@@ -1,245 +0,0 @@
-<?php
-/**
- * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * 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
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-namespace Test\Repair\NC11;
-
-use OC\Repair\NC11\CleanPreviewsBackgroundJob;
-use OCP\AppFramework\Utility\ITimeFactory;
-use OCP\BackgroundJob\IJobList;
-use OCP\Files\Folder;
-use OCP\Files\IRootFolder;
-use OCP\Files\NotFoundException;
-use OCP\Files\NotPermittedException;
-use OCP\ILogger;
-use OCP\IUserManager;
-use Test\TestCase;
-
-class CleanPreviewsBackgroundJobTest extends TestCase {
- /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */
- private $rootFolder;
-
- /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
- private $logger;
-
- /** @var IJobList|\PHPUnit_Framework_MockObject_MockObject */
- private $jobList;
-
- /** @var ITimeFactory|\PHPUnit_Framework_MockObject_MockObject */
- private $timeFactory;
-
- /** @var CleanPreviewsBackgroundJob */
- private $job;
-
- /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
- private $userManager;
-
- public function setUp() {
- parent::setUp();
-
- $this->rootFolder = $this->createMock(IRootFolder::class);
- $this->logger = $this->createMock(ILogger::class);
- $this->jobList = $this->createMock(IJobList::class);
- $this->timeFactory = $this->createMock(ITimeFactory::class);
- $this->userManager = $this->createMock(IUserManager::class);
-
- $this->userManager->expects($this->any())->method('userExists')->willReturn(true);
-
- $this->job = new CleanPreviewsBackgroundJob(
- $this->rootFolder,
- $this->logger,
- $this->jobList,
- $this->timeFactory,
- $this->userManager
- );
- }
-
- public function testCleanupPreviewsUnfinished() {
- $userFolder = $this->createMock(Folder::class);
- $userRoot = $this->createMock(Folder::class);
- $thumbnailFolder = $this->createMock(Folder::class);
-
- $this->rootFolder->method('getUserFolder')
- ->with($this->equalTo('myuid'))
- ->willReturn($userFolder);
-
- $userFolder->method('getParent')->willReturn($userRoot);
-
- $userRoot->method('get')
- ->with($this->equalTo('thumbnails'))
- ->willReturn($thumbnailFolder);
-
- $previewFolder1 = $this->createMock(Folder::class);
-
- $previewFolder1->expects($this->once())
- ->method('delete');
-
- $thumbnailFolder->method('getDirectoryListing')
- ->willReturn([$previewFolder1]);
- $thumbnailFolder->expects($this->never())
- ->method('delete');
-
- $this->timeFactory->method('getTime')
- ->will($this->onConsecutiveCalls(100, 200));
-
- $this->jobList->expects($this->once())
- ->method('add')
- ->with(
- $this->equalTo(CleanPreviewsBackgroundJob::class),
- $this->equalTo(['uid' => 'myuid'])
- );
-
- $this->logger->expects($this->at(0))
- ->method('info')
- ->with($this->equalTo('Started preview cleanup for myuid'));
- $this->logger->expects($this->at(1))
- ->method('info')
- ->with($this->equalTo('New preview cleanup scheduled for myuid'));
-
- $this->job->run(['uid' => 'myuid']);
- }
-
- public function testCleanupPreviewsFinished() {
- $userFolder = $this->createMock(Folder::class);
- $userRoot = $this->createMock(Folder::class);
- $thumbnailFolder = $this->createMock(Folder::class);
-
- $this->rootFolder->method('getUserFolder')
- ->with($this->equalTo('myuid'))
- ->willReturn($userFolder);
-
- $userFolder->method('getParent')->willReturn($userRoot);
-
- $userRoot->method('get')
- ->with($this->equalTo('thumbnails'))
- ->willReturn($thumbnailFolder);
-
- $previewFolder1 = $this->createMock(Folder::class);
-
- $previewFolder1->expects($this->once())
- ->method('delete');
-
- $thumbnailFolder->method('getDirectoryListing')
- ->willReturn([$previewFolder1]);
-
- $this->timeFactory->method('getTime')
- ->will($this->onConsecutiveCalls(100, 101));
-
- $this->jobList->expects($this->never())
- ->method('add');
-
- $this->logger->expects($this->at(0))
- ->method('info')
- ->with($this->equalTo('Started preview cleanup for myuid'));
- $this->logger->expects($this->at(1))
- ->method('info')
- ->with($this->equalTo('Preview cleanup done for myuid'));
-
- $thumbnailFolder->expects($this->once())
- ->method('delete');
-
- $this->job->run(['uid' => 'myuid']);
- }
-
-
- public function testNoUserFolder() {
- $this->rootFolder->method('getUserFolder')
- ->with($this->equalTo('myuid'))
- ->willThrowException(new NotFoundException());
-
- $this->logger->expects($this->at(0))
- ->method('info')
- ->with($this->equalTo('Started preview cleanup for myuid'));
- $this->logger->expects($this->at(1))
- ->method('info')
- ->with($this->equalTo('Preview cleanup done for myuid'));
-
- $this->job->run(['uid' => 'myuid']);
- }
-
- public function testNoThumbnailFolder() {
- $userFolder = $this->createMock(Folder::class);
- $userRoot = $this->createMock(Folder::class);
-
- $this->rootFolder->method('getUserFolder')
- ->with($this->equalTo('myuid'))
- ->willReturn($userFolder);
-
- $userFolder->method('getParent')->willReturn($userRoot);
-
- $userRoot->method('get')
- ->with($this->equalTo('thumbnails'))
- ->willThrowException(new NotFoundException());
-
- $this->logger->expects($this->at(0))
- ->method('info')
- ->with($this->equalTo('Started preview cleanup for myuid'));
- $this->logger->expects($this->at(1))
- ->method('info')
- ->with($this->equalTo('Preview cleanup done for myuid'));
-
- $this->job->run(['uid' => 'myuid']);
- }
-
- public function testNotPermittedToDelete() {
- $userFolder = $this->createMock(Folder::class);
- $userRoot = $this->createMock(Folder::class);
- $thumbnailFolder = $this->createMock(Folder::class);
-
- $this->rootFolder->method('getUserFolder')
- ->with($this->equalTo('myuid'))
- ->willReturn($userFolder);
-
- $userFolder->method('getParent')->willReturn($userRoot);
-
- $userRoot->method('get')
- ->with($this->equalTo('thumbnails'))
- ->willReturn($thumbnailFolder);
-
- $previewFolder1 = $this->createMock(Folder::class);
-
- $previewFolder1->expects($this->once())
- ->method('delete')
- ->willThrowException(new NotPermittedException());
-
- $thumbnailFolder->method('getDirectoryListing')
- ->willReturn([$previewFolder1]);
-
- $this->timeFactory->method('getTime')
- ->will($this->onConsecutiveCalls(100, 101));
-
- $this->jobList->expects($this->never())
- ->method('add');
-
- $this->logger->expects($this->at(0))
- ->method('info')
- ->with($this->equalTo('Started preview cleanup for myuid'));
- $this->logger->expects($this->at(1))
- ->method('info')
- ->with($this->equalTo('Preview cleanup done for myuid'));
-
- $thumbnailFolder->expects($this->once())
- ->method('delete')
- ->willThrowException(new NotPermittedException());
-
- $this->job->run(['uid' => 'myuid']);
- }
-}
diff --git a/tests/lib/Repair/NC11/CleanPreviewsTest.php b/tests/lib/Repair/NC11/CleanPreviewsTest.php
deleted file mode 100644
index 8abc6b7bab9..00000000000
--- a/tests/lib/Repair/NC11/CleanPreviewsTest.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-/**
- * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * 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
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-namespace Test\Repair\NC11;
-
-use OC\Repair\NC11\CleanPreviews;
-use OC\Repair\NC11\CleanPreviewsBackgroundJob;
-use OCP\BackgroundJob\IJobList;
-use OCP\IConfig;
-use OCP\IUser;
-use OCP\IUserManager;
-use OCP\Migration\IOutput;
-use Test\TestCase;
-
-class CleanPreviewsTest extends TestCase {
-
-
- /** @var IJobList|\PHPUnit_Framework_MockObject_MockObject */
- private $jobList;
-
- /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
- private $userManager;
-
- /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
- private $config;
-
- /** @var CleanPreviews */
- private $repair;
-
- public function setUp() {
- parent::setUp();
-
- $this->jobList = $this->createMock(IJobList::class);
- $this->userManager = $this->createMock(IUserManager::class);
- $this->config = $this->createMock(IConfig::class);
-
- $this->repair = new CleanPreviews(
- $this->jobList,
- $this->userManager,
- $this->config
- );
- }
-
- public function testGetName() {
- $this->assertSame('Add preview cleanup background jobs', $this->repair->getName());
- }
-
- public function testRun() {
- $user1 = $this->createMock(IUser::class);
- $user1->method('getUID')
- ->willReturn('user1');
- $user2 = $this->createMock(IUser::class);
- $user2->method('getUID')
- ->willReturn('user2');
-
- $this->userManager->expects($this->once())
- ->method('callForSeenUsers')
- ->will($this->returnCallback(function (\Closure $function) use ($user1, $user2) {
- $function($user1);
- $function($user2);
- }));
-
- $this->jobList->expects($this->at(0))
- ->method('add')
- ->with(
- $this->equalTo(CleanPreviewsBackgroundJob::class),
- $this->equalTo(['uid' => 'user1'])
- );
-
- $this->jobList->expects($this->at(1))
- ->method('add')
- ->with(
- $this->equalTo(CleanPreviewsBackgroundJob::class),
- $this->equalTo(['uid' => 'user2'])
- );
-
- $this->config->expects($this->once())
- ->method('getAppValue')
- ->with(
- $this->equalTo('core'),
- $this->equalTo('previewsCleanedUp'),
- $this->equalTo(false)
- )->willReturn(false);
- $this->config->expects($this->once())
- ->method('setAppValue')
- ->with(
- $this->equalTo('core'),
- $this->equalTo('previewsCleanedUp'),
- $this->equalTo(1)
- );
-
- $this->repair->run($this->createMock(IOutput::class));
- }
-
-
- public function testRunAlreadyDoone() {
- $this->userManager->expects($this->never())
- ->method($this->anything());
-
- $this->jobList->expects($this->never())
- ->method($this->anything());
-
- $this->config->expects($this->once())
- ->method('getAppValue')
- ->with(
- $this->equalTo('core'),
- $this->equalTo('previewsCleanedUp'),
- $this->equalTo(false)
- )->willReturn('1');
- $this->config->expects($this->never())
- ->method('setAppValue');
-
- $this->repair->run($this->createMock(IOutput::class));
- }
-
-}
diff --git a/tests/lib/Repair/NC12/InstallCoreBundleTest.php b/tests/lib/Repair/NC12/InstallCoreBundleTest.php
deleted file mode 100644
index 3a72934df86..00000000000
--- a/tests/lib/Repair/NC12/InstallCoreBundleTest.php
+++ /dev/null
@@ -1,144 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
- *
- * @author Lukas Reschke <lukas@statuscode.ch>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * 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
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-namespace Test\Repair\NC12;
-
-use OC\App\AppStore\Bundles\Bundle;
-use OC\App\AppStore\Bundles\BundleFetcher;
-use OC\Installer;
-use OC\Repair\NC12\InstallCoreBundle;
-use OCP\IConfig;
-use OCP\Migration\IOutput;
-use Test\TestCase;
-
-
-class InstallCoreBundleTest extends TestCase {
- /** @var BundleFetcher|\PHPUnit_Framework_MockObject_MockObject */
- private $bundleFetcher;
- /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
- private $config;
- /** @var Installer|\PHPUnit_Framework_MockObject_MockObject */
- private $installer;
- /** @var InstallCoreBundle */
- private $installCoreBundle;
-
- public function setUp() {
- parent::setUp();
- $this->bundleFetcher = $this->createMock(BundleFetcher::class);
- $this->config = $this->createMock(IConfig::class);
- $this->installer = $this->createMock(Installer::class);
-
- $this->installCoreBundle = new InstallCoreBundle(
- $this->bundleFetcher,
- $this->config,
- $this->installer
- );
- }
-
- public function testGetName() {
- $this->assertSame('Install new core bundle components', $this->installCoreBundle->getName());
- }
-
- public function testRunOlder() {
- $this->config
- ->expects($this->once())
- ->method('getSystemValue')
- ->with('version', '0.0.0')
- ->willReturn('12.0.0.15');
- $this->bundleFetcher
- ->expects($this->never())
- ->method('getDefaultInstallationBundle');
- /** @var IOutput|\PHPUnit_Framework_MockObject_MockObject $output */
- $output = $this->createMock(IOutput::class);
- $output
- ->expects($this->never())
- ->method('info');
- $output
- ->expects($this->never())
- ->method('warning');
-
- $this->installCoreBundle->run($output);
- }
-
- public function testRunWithException() {
- $this->config
- ->expects($this->once())
- ->method('getSystemValue')
- ->with('version', '0.0.0')
- ->willReturn('12.0.0.14');
- $bundle = $this->createMock(Bundle::class);
- $this->bundleFetcher
- ->expects($this->once())
- ->method('getDefaultInstallationBundle')
- ->willReturn([
- $bundle,
- ]);
- $this->installer
- ->expects($this->once())
- ->method('installAppBundle')
- ->with($bundle)
- ->willThrowException(new \Exception('ExceptionText'));
- /** @var IOutput|\PHPUnit_Framework_MockObject_MockObject $output */
- $output = $this->createMock(IOutput::class);
- $output
- ->expects($this->never())
- ->method('info');
- $output
- ->expects($this->once())
- ->method('warning')
- ->with('Could not install core app bundle: ExceptionText');
-
- $this->installCoreBundle->run($output);
- }
-
- public function testRun() {
- $this->config
- ->expects($this->once())
- ->method('getSystemValue')
- ->with('version', '0.0.0')
- ->willReturn('12.0.0.14');
- $bundle = $this->createMock(Bundle::class);
- $this->bundleFetcher
- ->expects($this->once())
- ->method('getDefaultInstallationBundle')
- ->willReturn([
- $bundle,
- ]);
- $this->installer
- ->expects($this->once())
- ->method('installAppBundle')
- ->with($bundle);
- /** @var IOutput|\PHPUnit_Framework_MockObject_MockObject $output */
- $output = $this->createMock(IOutput::class);
- $output
- ->expects($this->once())
- ->method('info')
- ->with('Successfully installed core app bundle.');
- $output
- ->expects($this->never())
- ->method('warning');
-
- $this->installCoreBundle->run($output);
- }
-
-}
diff --git a/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php b/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php
deleted file mode 100644
index 46422589541..00000000000
--- a/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @author Morris Jobke <hey@morrisjobke.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * 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
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-namespace Test\Repair\NC12;
-
-use OC\Repair\NC12\UpdateLanguageCodes;
-use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\IConfig;
-use OCP\Migration\IOutput;
-use Test\TestCase;
-
-/**
- * Class UpdateLanguageCodesTest
- *
- * @group DB
- *
- * @package Test\Repair
- */
-class UpdateLanguageCodesTest extends TestCase {
- /** @var \OCP\IDBConnection */
- protected $connection;
-
- /** @var IConfig | \PHPUnit_Framework_MockObject_MockObject */
- private $config;
-
- protected function setUp() {
- parent::setUp();
-
- $this->connection = \OC::$server->getDatabaseConnection();
- $this->config = $this->createMock(IConfig::class);
- }
-
- public function testRun() {
-
- $users = [
- ['userid' => 'user1', 'configvalue' => 'fi_FI'],
- ['userid' => 'user2', 'configvalue' => 'de'],
- ['userid' => 'user3', 'configvalue' => 'fi'],
- ['userid' => 'user4', 'configvalue' => 'ja'],
- ['userid' => 'user5', 'configvalue' => 'bg_BG'],
- ['userid' => 'user6', 'configvalue' => 'ja'],
- ['userid' => 'user7', 'configvalue' => 'th_TH'],
- ['userid' => 'user8', 'configvalue' => 'th_TH'],
- ];
-
- // insert test data
- $qb = $this->connection->getQueryBuilder();
- $qb->insert('preferences')
- ->values([
- 'userid' => $qb->createParameter('userid'),
- 'appid' => $qb->createParameter('appid'),
- 'configkey' => $qb->createParameter('configkey'),
- 'configvalue' => $qb->createParameter('configvalue'),
- ]);
- foreach ($users as $user) {
- $qb->setParameters([
- 'userid' => $user['userid'],
- 'appid' => 'core',
- 'configkey' => 'lang',
- 'configvalue' => $user['configvalue'],
- ])->execute();
- }
-
- // check if test data is written to DB
- $qb = $this->connection->getQueryBuilder();
- $result = $qb->select(['userid', 'configvalue'])
- ->from('preferences')
- ->where($qb->expr()->eq('appid', $qb->createNamedParameter('core')))
- ->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter('lang')))
- ->execute();
-
- $rows = $result->fetchAll();
- $result->closeCursor();
-
- $this->assertSame($users, $rows, 'Asserts that the entries are the ones from the test data set');
-
- /** @var IOutput|\PHPUnit_Framework_MockObject_MockObject $outputMock */
- $outputMock = $this->createMock(IOutput::class);
- $outputMock->expects($this->at(0))
- ->method('info')
- ->with('Changed 1 setting(s) from "bg_BG" to "bg" in preferences table.');
- $outputMock->expects($this->at(1))
- ->method('info')
- ->with('Changed 0 setting(s) from "cs_CZ" to "cs" in preferences table.');
- $outputMock->expects($this->at(2))
- ->method('info')
- ->with('Changed 1 setting(s) from "fi_FI" to "fi" in preferences table.');
- $outputMock->expects($this->at(3))
- ->method('info')
- ->with('Changed 0 setting(s) from "hu_HU" to "hu" in preferences table.');
- $outputMock->expects($this->at(4))
- ->method('info')
- ->with('Changed 0 setting(s) from "nb_NO" to "nb" in preferences table.');
- $outputMock->expects($this->at(5))
- ->method('info')
- ->with('Changed 0 setting(s) from "sk_SK" to "sk" in preferences table.');
- $outputMock->expects($this->at(6))
- ->method('info')
- ->with('Changed 2 setting(s) from "th_TH" to "th" in preferences table.');
-
- $this->config->expects($this->once())
- ->method('getSystemValue')
- ->with('version', '0.0.0')
- ->willReturn('12.0.0.13');
-
- // run repair step
- $repair = new UpdateLanguageCodes($this->connection, $this->config);
- $repair->run($outputMock);
-
- // check if test data is correctly modified in DB
- $qb = $this->connection->getQueryBuilder();
- $result = $qb->select(['userid', 'configvalue'])
- ->from('preferences')
- ->where($qb->expr()->eq('appid', $qb->createNamedParameter('core')))
- ->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter('lang')))
- ->orderBy('userid')
- ->execute();
-
- $rows = $result->fetchAll();
- $result->closeCursor();
-
- // value has changed for one user
- $users[0]['configvalue'] = 'fi';
- $users[4]['configvalue'] = 'bg';
- $users[6]['configvalue'] = 'th';
- $users[7]['configvalue'] = 'th';
- $this->assertSame($users, $rows, 'Asserts that the entries are updated correctly.');
-
- // remove test data
- foreach ($users as $user) {
- $qb = $this->connection->getQueryBuilder();
- $qb->delete('preferences')
- ->where($qb->expr()->eq('userid', $qb->createNamedParameter($user['userid'])))
- ->andWhere($qb->expr()->eq('appid', $qb->createNamedParameter('core')))
- ->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter('lang')))
- ->andWhere($qb->expr()->eq('configvalue', $qb->createNamedParameter($user['configvalue']), IQueryBuilder::PARAM_STR))
- ->execute();
- }
- }
-
- public function testSecondRun() {
- /** @var IOutput|\PHPUnit_Framework_MockObject_MockObject $outputMock */
- $outputMock = $this->createMock(IOutput::class);
- $outputMock->expects($this->never())
- ->method('info');
-
- $this->config->expects($this->once())
- ->method('getSystemValue')
- ->with('version', '0.0.0')
- ->willReturn('12.0.0.14');
-
- // run repair step
- $repair = new UpdateLanguageCodes($this->connection, $this->config);
- $repair->run($outputMock);
- }
-
-}