diff --git a/.gitignore b/.gitignore
index e61ec6f035..b24edc9128 100644
--- a/.gitignore
+++ b/.gitignore
@@ -86,6 +86,11 @@ nbproject
# Node Modules
/build/node_modules/
+# nodejs
+/build/lib/
+/npm-debug.log
+
+
# Tests - auto-generated files
/data-autotest
/tests/coverage*
diff --git a/.gitmodules b/.gitmodules
index b9c1a3702c..bc2beee81a 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,3 @@
[submodule "3rdparty"]
path = 3rdparty
- url = git://github.com/owncloud/3rdparty.git
+ url = https://github.com/owncloud/3rdparty.git
diff --git a/apps/files/ajax/download.php b/apps/files/ajax/download.php
index 1f7e42e0d3..4b4a7f8948 100644
--- a/apps/files/ajax/download.php
+++ b/apps/files/ajax/download.php
@@ -21,12 +21,6 @@
*
*/
-// only need filesystem apps
-$RUNTIME_APPTYPES=array('filesystem');
-
-// Init owncloud
-
-
// Check if we are a user
OCP\User::checkLoggedIn();
\OC::$session->close();
diff --git a/apps/files/ajax/getstoragestats.php b/apps/files/ajax/getstoragestats.php
index 17415b6933..dd8af39bad 100644
--- a/apps/files/ajax/getstoragestats.php
+++ b/apps/files/ajax/getstoragestats.php
@@ -1,8 +1,5 @@
close();
diff --git a/apps/files/ajax/rawlist.php b/apps/files/ajax/rawlist.php
index 6c2569e2eb..f18bbffb74 100644
--- a/apps/files/ajax/rawlist.php
+++ b/apps/files/ajax/rawlist.php
@@ -1,8 +1,5 @@
close();
diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php
index 826f72fb0e..a8acfdb6e6 100644
--- a/apps/files/appinfo/remote.php
+++ b/apps/files/appinfo/remote.php
@@ -22,12 +22,6 @@
* License along with this library. If not, see .
*
*/
-// load needed apps
-$RUNTIME_APPTYPES = array('filesystem', 'authentication', 'logging');
-
-OC_App::loadApps($RUNTIME_APPTYPES);
-
-OC_Util::obEnd();
// Backends
$authBackend = new OC_Connector_Sabre_Auth();
diff --git a/apps/files/command/scan.php b/apps/files/command/scan.php
index f334f29a93..25ab70af36 100644
--- a/apps/files/command/scan.php
+++ b/apps/files/command/scan.php
@@ -58,7 +58,6 @@ class Scan extends Command {
protected function execute(InputInterface $input, OutputInterface $output) {
if ($input->getOption('all')) {
- \OC_App::loadApps('authentication');
$users = $this->userManager->search('');
} else {
$users = $input->getArgument('user_id');
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index af863aca33..1bac5d2b7d 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -77,10 +77,10 @@
}
/* make sure there's enough room for the file actions */
#body-user #filestable {
- min-width: 750px;
+ min-width: 688px; /* 768 (mobile break) - 80 (nav width) */
}
#body-user #controls {
- min-width: 600px;
+ min-width: 688px; /* 768 (mobile break) - 80 (nav width) */
}
#filestable tbody tr { background-color:#fff; height:40px; }
diff --git a/apps/files/css/mobile.css b/apps/files/css/mobile.css
new file mode 100644
index 0000000000..3ad7d63483
--- /dev/null
+++ b/apps/files/css/mobile.css
@@ -0,0 +1,68 @@
+@media only screen and (max-width: 768px) {
+
+/* don’t require a minimum width for files table */
+#body-user #filestable {
+ min-width: initial !important;
+}
+
+/* do not show Deleted Files on mobile, not optimized yet and button too long */
+#controls #trash {
+ display: none;
+}
+
+/* hide size and date columns */
+table th#headerSize,
+table td.filesize,
+table th#headerDate,
+table td.date {
+ display: none;
+}
+
+/* remove shift for multiselect bar to account for missing navigation */
+table.multiselect thead {
+ padding-left: 0;
+}
+
+/* restrict length of displayed filename to prevent overflow */
+table td.filename .nametext {
+ max-width: 75% !important;
+}
+
+/* always show actions on mobile, not only on hover */
+#fileList a.action {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)" !important;
+ filter: alpha(opacity=20) !important;
+ opacity: .2 !important;
+ display: inline !important;
+}
+/* do not show Rename or Versions on mobile */
+#fileList .action.action-rename,
+#fileList .action.action-versions {
+ display: none !important;
+}
+/* some padding for better clickability */
+#fileList a.action img {
+ padding: 0 6px 0 12px;
+}
+/* hide text of the actions on mobile */
+#fileList a.action span {
+ display: none;
+}
+
+/* ellipsis on file names */
+.nametext {
+ width: 60%;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+/* proper notification area for multi line messages */
+#notification-container {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+}
+}
diff --git a/apps/files/index.php b/apps/files/index.php
index c66cd40fb5..73601d2621 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -27,6 +27,7 @@ OCP\User::checkLoggedIn();
// Load the files we need
OCP\Util::addStyle('files', 'files');
OCP\Util::addStyle('files', 'upload');
+OCP\Util::addStyle('files', 'mobile');
OCP\Util::addscript('files', 'file-upload');
OCP\Util::addscript('files', 'jquery.iframe-transport');
OCP\Util::addscript('files', 'jquery.fileupload');
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 9a69d7b368..a7d1fa9d8a 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -15,21 +15,33 @@ var FileActions = {
defaults: {},
icons: {},
currentFile: null,
- register: function (mime, name, permissions, icon, action) {
+ register: function (mime, name, permissions, icon, action, displayName) {
if (!FileActions.actions[mime]) {
FileActions.actions[mime] = {};
}
if (!FileActions.actions[mime][name]) {
FileActions.actions[mime][name] = {};
}
+ if (!displayName) {
+ displayName = t('files', name);
+ }
FileActions.actions[mime][name]['action'] = action;
FileActions.actions[mime][name]['permissions'] = permissions;
+ FileActions.actions[mime][name]['displayName'] = displayName;
FileActions.icons[name] = icon;
},
setDefault: function (mime, name) {
FileActions.defaults[mime] = name;
},
get: function (mime, type, permissions) {
+ var actions = this.getActions(mime, type, permissions);
+ var filteredActions = {};
+ $.each(actions, function (name, action) {
+ filteredActions[name] = action.action;
+ });
+ return filteredActions;
+ },
+ getActions: function (mime, type, permissions) {
var actions = {};
if (FileActions.actions.all) {
actions = $.extend(actions, FileActions.actions.all);
@@ -51,7 +63,7 @@ var FileActions = {
var filteredActions = {};
$.each(actions, function (name, action) {
if (action.permissions & permissions) {
- filteredActions[name] = action.action;
+ filteredActions[name] = action;
}
});
return filteredActions;
@@ -82,7 +94,7 @@ var FileActions = {
*/
display: function (parent, triggerEvent) {
FileActions.currentFile = parent;
- var actions = FileActions.get(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions());
+ var actions = FileActions.getActions(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions());
var file = FileActions.getCurrentFile();
var nameLinks;
if (FileList.findFileEl(file).data('renaming')) {
@@ -105,15 +117,16 @@ var FileActions = {
event.data.actionFunc(file);
};
- var addAction = function (name, action) {
+ var addAction = function (name, action, displayName) {
// NOTE: Temporary fix to prevent rename action in root of Shared directory
if (name === 'Rename' && $('#dir').val() === '/Shared') {
return true;
}
if ((name === 'Download' || action !== defaultAction) && name !== 'Delete') {
+
var img = FileActions.icons[name],
- actionText = t('files', name),
+ actionText = displayName,
actionContainer = 'a.name>span.fileactions';
if (name === 'Rename') {
@@ -125,7 +138,7 @@ var FileActions = {
if (img.call) {
img = img(file);
}
- var html = '';
+ var html = '';
if (img) {
html += '';
}
@@ -133,8 +146,7 @@ var FileActions = {
var element = $(html);
element.data('action', name);
- //alert(element);
- element.on('click', {a: null, elem: parent, actionFunc: actions[name]}, actionHandler);
+ element.on('click', {a: null, elem: parent, actionFunc: actions[name].action}, actionHandler);
parent.find(actionContainer).append(element);
}
@@ -142,12 +154,15 @@ var FileActions = {
$.each(actions, function (name, action) {
if (name !== 'Share') {
- addAction(name, action);
+ displayName = action.displayName;
+ ah = action.action;
+
+ addAction(name, ah, displayName);
}
});
if(actions.Share && !($('#dir').val() === '/' && file === 'Shared')){
- // t('files', 'Share')
- addAction('Share', actions.Share);
+ displayName = t('files', 'Share');
+ addAction('Share', actions.Share, displayName);
}
// remove the existing delete action
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 503bf68113..cda4e823a7 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -71,7 +71,7 @@ window.FileList={
});
// filename td
td = $('
').attr({
- "class": "filename",
+ "class": "filename svg",
"style": 'background-image:url('+iconurl+'); background-size: 32px;'
});
var rand = Math.random().toString(16).slice(2);
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 1186a72a44..1137364db4 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -196,11 +196,14 @@ var Files = {
if (width !== Files.lastWidth) {
if ((width < Files.lastWidth || firstRun) && width < Files.breadcrumbsWidth) {
if (Files.hiddenBreadcrumbs === 0) {
- Files.breadcrumbsWidth -= $(Files.breadcrumbs[1]).get(0).offsetWidth;
- $(Files.breadcrumbs[1]).find('a').hide();
- $(Files.breadcrumbs[1]).append('...');
- Files.breadcrumbsWidth += $(Files.breadcrumbs[1]).get(0).offsetWidth;
- Files.hiddenBreadcrumbs = 2;
+ bc = $(Files.breadcrumbs[1]).get(0);
+ if (typeof bc != 'undefined') {
+ Files.breadcrumbsWidth -= bc.offsetWidth;
+ $(Files.breadcrumbs[1]).find('a').hide();
+ $(Files.breadcrumbs[1]).append('...');
+ Files.breadcrumbsWidth += bc.offsetWidth;
+ Files.hiddenBreadcrumbs = 2;
+ }
}
var i = Files.hiddenBreadcrumbs;
while (width < Files.breadcrumbsWidth && i > 1 && i < Files.breadcrumbs.length - 1) {
diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php
index 2c0335f3cc..ac958e5dfd 100644
--- a/apps/files/l10n/ru.php
+++ b/apps/files/l10n/ru.php
@@ -3,7 +3,9 @@ $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Невозможно переместить %s - файл с таким именем уже существует",
"Could not move %s" => "Невозможно переместить %s",
"File name cannot be empty." => "Имя файла не может быть пустым.",
+"\"%s\" is an invalid file name." => "\"%s\" это не правильное имя файла.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неправильное имя: символы '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.",
+"The target folder has been moved or deleted." => "Целевой каталог был перемещен или удален.",
"The name %s is already used in the folder %s. Please choose a different name." => "Имя %s уже используется для каталога %s. Пожалуйста, выберите другое имя.",
"Not a valid source" => "Неправильный источник",
"Server is not allowed to open URLs, please check the server configuration" => "Сервер не позволяет открывать URL-адреса, пожалуйста, проверьте настройки сервера",
@@ -27,6 +29,8 @@ $TRANSLATIONS = array(
"Invalid directory." => "Неверный каталог.",
"Files" => "Файлы",
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Невозможно загрузить {filename}, так как это либо каталог, либо файл нулевого размера",
+"Total file size {size1} exceeds upload limit {size2}" => "Полный размер файла {size1} превышает лимит по загрузке {size2}",
+"Not enough free space, you are uploading {size1} but only {size2} is left" => "Не достаточно свободного места, Вы загружаете {size1} но осталось только {size2}",
"Upload cancelled." => "Загрузка отменена.",
"Could not get result from server." => "Не удалось получить ответ от сервера.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.",
@@ -48,6 +52,7 @@ $TRANSLATIONS = array(
"_%n file_::_%n files_" => array("%n файл","%n файла","%n файлов"),
"{dirs} and {files}" => "{dirs} и {files}",
"_Uploading %n file_::_Uploading %n files_" => array("Закачка %n файла","Закачка %n файлов","Закачка %n файлов"),
+"\"{name}\" is an invalid file name." => "\"{name}\" это не правильное имя файла.",
"Your storage is full, files can not be updated or synced anymore!" => "Ваше хранилище заполнено, произведите очистку перед загрузкой новых файлов.",
"Your storage is almost full ({usedSpacePercent}%)" => "Ваше хранилище почти заполнено ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Приложение для шифрования активно, но ваши ключи не инициализированы, пожалуйста, перелогиньтесь",
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index 5b0bad7f34..34acd9c4f5 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -5,15 +5,15 @@
' +
+ '');
+ $toggle = $('#owncloud');
+ $navigation = $('#navigation');
+ });
+
+ afterEach(function() {
+ OC._matchMedia = oldMatchMedia;
+ });
+ it('Sets up menu toggle in mobile mode', function() {
+ OC._matchMedia.returns({matches: true});
+ window.initCore();
+ expect($toggle.hasClass('menutoggle')).toEqual(true);
+ expect($navigation.hasClass('menu')).toEqual(true);
+ });
+ it('Does not set up menu toggle in desktop mode', function() {
+ OC._matchMedia.returns({matches: false});
+ window.initCore();
+ expect($toggle.hasClass('menutoggle')).toEqual(false);
+ expect($navigation.hasClass('menu')).toEqual(false);
+ });
+ it('Switches on menu toggle when mobile mode changes', function() {
+ var mq = {matches: false};
+ OC._matchMedia.returns(mq);
+ window.initCore();
+ expect($toggle.hasClass('menutoggle')).toEqual(false);
+ mq.matches = true;
+ $(window).trigger('resize');
+ expect($toggle.hasClass('menutoggle')).toEqual(true);
+ });
+ it('Switches off menu toggle when mobile mode changes', function() {
+ var mq = {matches: true};
+ OC._matchMedia.returns(mq);
+ window.initCore();
+ expect($toggle.hasClass('menutoggle')).toEqual(true);
+ mq.matches = false;
+ $(window).trigger('resize');
+ expect($toggle.hasClass('menutoggle')).toEqual(false);
+ });
+ it('Clicking menu toggle toggles navigation in mobile mode', function() {
+ OC._matchMedia.returns({matches: true});
+ window.initCore();
+ $navigation.hide(); // normally done through media query triggered CSS
+ expect($navigation.is(':visible')).toEqual(false);
+ $toggle.click();
+ expect($navigation.is(':visible')).toEqual(true);
+ $toggle.click();
+ expect($navigation.is(':visible')).toEqual(false);
+ });
+ it('Clicking menu toggle does not toggle navigation in desktop mode', function() {
+ OC._matchMedia.returns({matches: false});
+ window.initCore();
+ expect($navigation.is(':visible')).toEqual(true);
+ $toggle.click();
+ expect($navigation.is(':visible')).toEqual(true);
+ });
+ it('Switching to mobile mode hides navigation', function() {
+ var mq = {matches: false};
+ OC._matchMedia.returns(mq);
+ window.initCore();
+ expect($navigation.is(':visible')).toEqual(true);
+ mq.matches = true;
+ $(window).trigger('resize');
+ expect($navigation.is(':visible')).toEqual(false);
+ });
+ it('Switching to desktop mode shows navigation', function() {
+ var mq = {matches: true};
+ OC._matchMedia.returns(mq);
+ window.initCore();
+ expect($navigation.is(':visible')).toEqual(false);
+ mq.matches = false;
+ $(window).trigger('resize');
+ expect($navigation.is(':visible')).toEqual(true);
+ });
+ it('Switch to desktop with opened menu then back to mobile resets toggle', function() {
+ var mq = {matches: true};
+ OC._matchMedia.returns(mq);
+ window.initCore();
+ expect($navigation.is(':visible')).toEqual(false);
+ $toggle.click();
+ expect($navigation.is(':visible')).toEqual(true);
+ mq.matches = false;
+ $(window).trigger('resize');
+ expect($navigation.is(':visible')).toEqual(true);
+ mq.matches = true;
+ $(window).trigger('resize');
+ expect($navigation.is(':visible')).toEqual(false);
+ $toggle.click();
+ expect($navigation.is(':visible')).toEqual(true);
+ });
+ });
});
diff --git a/core/l10n/es.php b/core/l10n/es.php
index 7f4d46aa1f..52f1a15089 100644
--- a/core/l10n/es.php
+++ b/core/l10n/es.php
@@ -1,6 +1,6 @@
"La fecha de caducidad está en el pasado.",
+"Expiration date is in the past." => "Ha pasado la fecha de caducidad",
"Couldn't send mail to following users: %s " => "No se pudo enviar el mensaje a los siguientes usuarios: %s",
"Turned on maintenance mode" => "Modo mantenimiento activado",
"Turned off maintenance mode" => "Modo mantenimiento desactivado",
@@ -105,7 +105,7 @@ $TRANSLATIONS = array(
"Edit tags" => "Editar etiquetas",
"Error loading dialog template: {error}" => "Error cargando plantilla de diálogo: {error}",
"No tags selected for deletion." => "No hay etiquetas seleccionadas para borrar.",
-"Please reload the page." => "Vuelva a cargar la página.",
+"Please reload the page." => "Recargue/Actualice la página",
"The update was unsuccessful. Please report this issue to the ownCloud community." => "La actualización ha fracasado. Por favor, informe de este problema a la Comunidad de ownCloud.",
"The update was successful. Redirecting you to ownCloud now." => "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.",
"%s password reset" => "%s restablecer contraseña",
@@ -179,6 +179,6 @@ $TRANSLATIONS = array(
"Thank you for your patience." => "Gracias por su paciencia.",
"Updating ownCloud to version %s, this may take a while." => "Actualizando ownCloud a la versión %s, esto puede demorar un tiempo.",
"This ownCloud instance is currently being updated, which may take a while." => "Esta versión de owncloud se está actualizando, esto puede demorar un tiempo.",
-"Please reload this page after a short time to continue using ownCloud." => "Por favor , recargue esta instancia de onwcloud tras un corto periodo de tiempo y continue usándolo."
+"Please reload this page after a short time to continue using ownCloud." => "Por favor, recargue la página tras un corto periodo de tiempo para continuar usando ownCloud"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/ru.php b/core/l10n/ru.php
index 8d84e7d31b..e2fdc36be0 100644
--- a/core/l10n/ru.php
+++ b/core/l10n/ru.php
@@ -1,5 +1,6 @@
"Дата истечения срока действия в прошлом.",
"Couldn't send mail to following users: %s " => "Невозможно отправить письмо следующим пользователям: %s",
"Turned on maintenance mode" => "Режим отладки включён",
"Turned off maintenance mode" => "Режим отладки отключён",
@@ -56,6 +57,11 @@ $TRANSLATIONS = array(
"(all selected)" => "(выбраны все)",
"({count} selected)" => "({count} выбрано)",
"Error loading file exists template" => "Ошибка при загрузке шаблона существующего файла",
+"Very weak password" => "Очень слабый пароль",
+"Weak password" => "Слабый пароль",
+"So-so password" => "Так себе пароль",
+"Good password" => "Хороший пароль",
+"Strong password" => "Устойчивый к взлому пароль",
"Shared" => "Общие",
"Share" => "Открыть доступ",
"Error" => "Ошибка",
@@ -103,6 +109,7 @@ $TRANSLATIONS = array(
"The update was unsuccessful. Please report this issue to the ownCloud community." => "При обновлении произошла ошибка. Пожалуйста сообщите об этом в ownCloud сообщество.",
"The update was successful. Redirecting you to ownCloud now." => "Обновление прошло успешно. Перенаправляемся в Ваш ownCloud...",
"%s password reset" => "%s сброс пароля",
+"A problem has occurred whilst sending the email, please contact your administrator." => "Произошла ошибка при отправке сообщения электронной почты, пожалуйста, свяжитесь с Вашим администратором.",
"Use the following link to reset your password: {link}" => "Используйте следующую ссылку чтобы сбросить пароль: {link}",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders. If it is not there ask your local administrator ." => "Ссылка для сброса пароля отправлена вам по электронной почте. Если вы не получите письмо в пределах одной-двух минут, проверьте папку Спам. Если письма там нет, обратитесь к своему администратору.",
"Request failed! Did you make sure your email/username was right?" => "Запрос не удался. Вы уверены, что email или имя пользователя указаны верно?",
@@ -115,6 +122,8 @@ $TRANSLATIONS = array(
"To login page" => "На страницу авторизации",
"New password" => "Новый пароль",
"Reset password" => "Сбросить пароль",
+"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Mac OS X не поддерживается и %s не будет работать правильно на этой платформе. Используйте ее на свой страх и риск!",
+"For the best results, please consider using a GNU/Linux server instead." => "Для достижения наилучших результатов, пожалуйста, рассмотрите возможность использовать взамен GNU/Linux сервер.",
"Personal" => "Личное",
"Users" => "Пользователи",
"Apps" => "Приложения",
@@ -140,6 +149,7 @@ $TRANSLATIONS = array(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает.",
"For information how to properly configure your server, please see the documentation." => "Для информации, как правильно настроить Ваш сервер, пожалуйста загляните в документацию.",
"Create an admin account" => "Создать учётную запись администратора",
+"Storage & database" => "Система хранения данных & база данных",
"Data folder" => "Директория с данными",
"Configure the database" => "Настройка базы данных",
"will be used" => "будет использовано",
@@ -162,6 +172,7 @@ $TRANSLATIONS = array(
"remember" => "запомнить",
"Log in" => "Войти",
"Alternative Logins" => "Альтернативные имена пользователя",
+"Hey there,
just letting you know that %s shared %s with you. View it!
" => "Здравствуйте,
просто даём вам знать, что %s открыл доступ к %s для вас. Посмотреть!
",
"This ownCloud instance is currently in single user mode." => "Эта установка ownCloud в настоящее время в однопользовательском режиме.",
"This means only administrators can use the instance." => "Это значит, что только администраторы могут использовать эту установку.",
"Contact your system administrator if this message persists or appeared unexpectedly." => "Обратитесь к вашему системному администратору если это сообщение не исчезает или появляется неожиданно.",
diff --git a/core/l10n/sl.php b/core/l10n/sl.php
index 2cfdfd1189..49eb4f9aa6 100644
--- a/core/l10n/sl.php
+++ b/core/l10n/sl.php
@@ -122,6 +122,8 @@ $TRANSLATIONS = array(
"To login page" => "Na prijavno stran",
"New password" => "Novo geslo",
"Reset password" => "Ponastavi geslo",
+"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Sistem Mac OS X ni podprt, zato %s ne bo deloval zanesljivo v tem okolju. Program uporabljate na lastno odgovornost! ",
+"For the best results, please consider using a GNU/Linux server instead." => "Za najbolj še rezultate je priporočljivo uporabljati strežnik GNU/Linux.",
"Personal" => "Osebno",
"Users" => "Uporabniki",
"Apps" => "Programi",
diff --git a/core/l10n/tr.php b/core/l10n/tr.php
index 03544cd3c0..affa1b063d 100644
--- a/core/l10n/tr.php
+++ b/core/l10n/tr.php
@@ -111,7 +111,7 @@ $TRANSLATIONS = array(
"%s password reset" => "%s parola sıfırlama",
"A problem has occurred whilst sending the email, please contact your administrator." => "E-posta gönderilirken bir hata oluştu. Lütfen yönetinizle iletişime geçin.",
"Use the following link to reset your password: {link}" => "Parolanızı sıfırlamak için bu bağlantıyı kullanın: {link}",
-"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders. If it is not there ask your local administrator ." => "Parolanızı değiştirme bağlantısı e-posta adresinize gönderildi. Eğer makül bir süre içerisinde mesajı almadıysanız spam/junk dizinini kontrol ediniz. Eğer orada da bulamazsanız sistem yöneticinize sorunuz.",
+"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders. If it is not there ask your local administrator ." => "Parolanızı değiştirme bağlantısı e-posta adresinize gönderildi. Eğer makül bir süre içerisinde mesajı almadıysanız spam/junk/gereksiz dizinini kontrol ediniz. Eğer yine bulamazsanız sistem yöneticinize sorunuz.",
"Request failed! Did you make sure your email/username was right?" => "İstek başarısız! E-posta ve/veya kullanıcı adınızın doğru olduğundan emin misiniz?",
"You will receive a link to reset your password via Email." => "Parolanızı sıfırlamak için bir bağlantıyı e-posta olarak alacaksınız.",
"Username" => "Kullanıcı Adı",
diff --git a/core/setup/controller.php b/core/setup/controller.php
index bb9c9101fe..1a8e9b2b76 100644
--- a/core/setup/controller.php
+++ b/core/setup/controller.php
@@ -20,7 +20,7 @@ class Controller {
$errors = array('errors' => $e);
if(count($e) > 0) {
- $options = array_merge($post, $opts, $errors);
+ $options = array_merge($opts, $post, $errors);
$this->display($options);
}
else {
@@ -28,7 +28,8 @@ class Controller {
}
}
else {
- $this->display($opts);
+ $options = array_merge($opts, $post);
+ $this->display($options);
}
}
@@ -41,6 +42,7 @@ class Controller {
'dbname' => '',
'dbtablespace' => '',
'dbhost' => '',
+ 'dbtype' => '',
);
$parameters = array_merge($defaults, $post);
diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php
index 91157b923a..5788d1d5bd 100644
--- a/core/templates/layout.guest.php
+++ b/core/templates/layout.guest.php
@@ -36,7 +36,7 @@