diff options
226 files changed, 2740 insertions, 1217 deletions
diff --git a/3rdparty b/3rdparty -Subproject 57245d2a64c99aab8a438f909988e7a4ffef5b2 +Subproject 82d02dd48ad11312bd740c57720dc84b4d66fa8 diff --git a/apps/files/ajax/move.php b/apps/files/ajax/move.php index 3a07554ad00..12760d4415f 100644 --- a/apps/files/ajax/move.php +++ b/apps/files/ajax/move.php @@ -19,10 +19,16 @@ if(\OC\Files\Filesystem::file_exists($target . '/' . $file)) { if ($target != '' || strtolower($file) != 'shared') { $targetFile = \OC\Files\Filesystem::normalizePath($target . '/' . $file); $sourceFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $file); - if(\OC\Files\Filesystem::rename($sourceFile, $targetFile)) { - OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $file ))); - } else { - OCP\JSON::error(array("data" => array( "message" => $l->t("Could not move %s", array($file)) ))); + try { + if(\OC\Files\Filesystem::rename($sourceFile, $targetFile)) { + OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $file ))); + } else { + OCP\JSON::error(array("data" => array( "message" => $l->t("Could not move %s", array($file)) ))); + } + } catch (\OCP\Files\NotPermittedException $e) { + OCP\JSON::error(array("data" => array( "message" => $l->t("Permission denied") ))); + } catch (\Exception $e) { + OCP\JSON::error(array("data" => array( "message" => $e->getMessage()))); } }else{ OCP\JSON::error(array("data" => array( "message" => $l->t("Could not move %s", array($file)) ))); diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php index 606576760ec..46629e1b602 100644 --- a/apps/files/ajax/newfile.php +++ b/apps/files/ajax/newfile.php @@ -16,7 +16,7 @@ $content = isset( $_REQUEST['content'] ) ? $_REQUEST['content'] : ''; $source = isset( $_REQUEST['source'] ) ? trim($_REQUEST['source'], '/\\') : ''; if($source) { - $eventSource=new OC_EventSource(); + $eventSource = \OC::$server->createEventSource(); } else { OC_JSON::callCheck(); } diff --git a/apps/files/ajax/scan.php b/apps/files/ajax/scan.php index 3ec7f9394b1..da5a2ce6f26 100644 --- a/apps/files/ajax/scan.php +++ b/apps/files/ajax/scan.php @@ -15,7 +15,7 @@ if (isset($_GET['users'])) { $users = array(OC_User::getUser()); } -$eventSource = new OC_EventSource(); +$eventSource = \OC::$server->createEventSource(); $listener = new ScanListener($eventSource); foreach ($users as $user) { @@ -39,12 +39,12 @@ class ScanListener { private $lastCount = 0; /** - * @var \OC_EventSource event source to pass events to + * @var \OCP\IEventSource event source to pass events to */ private $eventSource; /** - * @param \OC_EventSource $eventSource + * @param \OCP\IEventSource $eventSource */ public function __construct($eventSource) { $this->eventSource = $eventSource; diff --git a/apps/files/css/upload.css b/apps/files/css/upload.css index bdc258b5064..98754b910de 100644 --- a/apps/files/css/upload.css +++ b/apps/files/css/upload.css @@ -137,3 +137,27 @@ .oc-dialog .oc-dialog-buttonrow .cancel { float:left; } + +.highlightUploaded { + -webkit-animation: highlightAnimation 2s 1; + -moz-animation: highlightAnimation 2s 1; + -o-animation: highlightAnimation 2s 1; + animation: highlightAnimation 2s 1; +} + +@-webkit-keyframes highlightAnimation { + 0% { background-color: rgba(255, 255, 140, 1); } + 100% { background-color: rgba(0, 0, 0, 0); } +} +@-moz-keyframes highlightAnimation { + 0% { background-color: rgba(255, 255, 140, 1); } + 100% { background-color: rgba(0, 0, 0, 0); } +} +@-o-keyframes highlightAnimation { + 0% { background-color: rgba(255, 255, 140, 1); } + 100% { background-color: rgba(0, 0, 0, 0); } +} +@keyframes highlightAnimation { + 0% { background-color: rgba(255, 255, 140, 1); } + 100% { background-color: rgba(0, 0, 0, 0); } +} diff --git a/apps/files/download.php b/apps/files/download.php index 6b055e99a53..664a69c5959 100644 --- a/apps/files/download.php +++ b/apps/files/download.php @@ -34,7 +34,7 @@ if(!\OC\Files\Filesystem::file_exists($filename)) { exit; } -$ftype=\OC\Files\Filesystem::getMimeType( $filename ); +$ftype=\OC_Helper::getSecureMimeType(\OC\Files\Filesystem::getMimeType( $filename )); header('Content-Type:'.$ftype); OCP\Response::setContentDispositionHeader(basename($filename), 'attachment'); diff --git a/apps/files/js/app.js b/apps/files/js/app.js index 6f5206fcdb6..89098e3a8a3 100644 --- a/apps/files/js/app.js +++ b/apps/files/js/app.js @@ -24,6 +24,7 @@ initialize: function() { this.navigation = new OCA.Files.Navigation($('#app-navigation')); + var urlParams = OC.Util.History.parseUrlQuery(); var fileActions = new OCA.Files.FileActions(); // default actions fileActions.registerDefaultActions(); @@ -47,7 +48,8 @@ dragOptions: dragOptions, folderDropOptions: folderDropOptions, fileActions: fileActions, - allowLegacyActions: true + allowLegacyActions: true, + scrollTo: urlParams.scrollto } ); this.files.initialize(); @@ -58,7 +60,7 @@ this._setupEvents(); // trigger URL change event handlers - this._onPopState(OC.Util.History.parseUrlQuery()); + this._onPopState(urlParams); }, /** diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js index ff999bae4ff..460c2435642 100644 --- a/apps/files/js/file-upload.js +++ b/apps/files/js/file-upload.js @@ -427,6 +427,14 @@ OC.Upload = { data.textStatus = 'servererror'; data.errorThrown = result[0].data.message; // error message has been translated on server fu._trigger('fail', e, data); + } else { // Successful upload + // Checking that the uploaded file is the last one and contained in the current directory + if (data.files[0] === data.originalFiles[data.originalFiles.length - 1] && + result[0].directory === FileList.getCurrentDirectory()) { + // Scroll to the last uploaded file and highlight all of them + var fileList = _.pluck(data.originalFiles, 'name'); + FileList.highlightFiles(fileList); + } } }, /** @@ -621,7 +629,7 @@ OC.Upload = { }, function(result) { if (result.status === 'success') { - FileList.add(result.data, {hidden: hidden, animate: true}); + FileList.add(result.data, {hidden: hidden, animate: true, scrollTo: true}); } else { OC.dialogs.alert(result.data.message, t('core', 'Could not create file')); } @@ -637,7 +645,7 @@ OC.Upload = { }, function(result) { if (result.status === 'success') { - FileList.add(result.data, {hidden: hidden, animate: true}); + FileList.add(result.data, {hidden: hidden, animate: true, scrollTo: true}); } else { OC.dialogs.alert(result.data.message, t('core', 'Could not create folder')); } diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index fd11a80248d..522ff627529 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -110,9 +110,10 @@ * @param $el container element with existing markup for the #controls * and a table * @param options map of options, see other parameters - * @param scrollContainer scrollable container, defaults to $(window) - * @param dragOptions drag options, disabled by default - * @param folderDropOptions folder drop options, disabled by default + * @param options.scrollContainer scrollable container, defaults to $(window) + * @param options.dragOptions drag options, disabled by default + * @param options.folderDropOptions folder drop options, disabled by default + * @param options.scrollTo name of file to scroll to after the first load */ initialize: function($el, options) { var self = this; @@ -172,6 +173,12 @@ this.setupUploadEvents(); this.$container.on('scroll', _.bind(this._onScroll, this)); + + if (options.scrollTo) { + this.$fileList.one('updated', function() { + self.scrollTo(options.scrollTo); + }); + } }, /** @@ -715,9 +722,10 @@ * * @param fileData map of file attributes * @param options map of attributes: - * - "updateSummary": true to update the summary after adding (default), false otherwise - * - "silent": true to prevent firing events like "fileActionsReady" - * - "animate": true to animate preview loading (defaults to true here) + * @param options.updateSummary true to update the summary after adding (default), false otherwise + * @param options.silent true to prevent firing events like "fileActionsReady" + * @param options.animate true to animate preview loading (defaults to true here) + * @param options.scrollTo true to automatically scroll to the file's location * @return new tr element (not appended to the table) */ add: function(fileData, options) { @@ -766,6 +774,10 @@ }); } + if (options.scrollTo) { + this.scrollTo(fileData.name); + } + // defaults to true if not defined if (typeof(options.updateSummary) === 'undefined' || !!options.updateSummary) { this.fileSummary.add(fileData, true); @@ -1523,16 +1535,15 @@ this.$table.removeClass('hidden'); }, scrollTo:function(file) { - //scroll to and highlight preselected file - var $scrollToRow = this.findFileEl(file); - if ($scrollToRow.exists()) { - $scrollToRow.addClass('searchresult'); - $(window).scrollTop($scrollToRow.position().top); - //remove highlight when hovered over - $scrollToRow.one('hover', function() { - $scrollToRow.removeClass('searchresult'); - }); + if (!_.isArray(file)) { + file = [file]; } + this.highlightFiles(file, function($tr) { + $tr.addClass('searchresult'); + $tr.one('hover', function() { + $tr.removeClass('searchresult'); + }); + }); }, filter:function(query) { this.$fileList.find('tr').each(function(i,e) { @@ -1632,6 +1643,18 @@ }, /** + * Shows a "permission denied" notification + */ + _showPermissionDeniedNotification: function() { + var message = t('core', 'You don’t have permission to upload or create files here'); + OC.Notification.show(message); + //hide notification after 10 sec + setTimeout(function() { + OC.Notification.hide(); + }, 5000); + }, + + /** * Setup file upload events related to the file-upload plugin */ setupUploadEvents: function() { @@ -1662,6 +1685,12 @@ // remember as context data.context = dropTarget; + // if permissions are specified, only allow if create permission is there + var permissions = dropTarget.data('permissions'); + if (!_.isUndefined(permissions) && (permissions & OC.PERMISSION_CREATE) === 0) { + self._showPermissionDeniedNotification(); + return false; + } var dir = dropTarget.data('file'); // if from file list, need to prepend parent dir if (dir) { @@ -1686,6 +1715,7 @@ // cancel uploads to current dir if no permission var isCreatable = (self.getDirectoryPermissions() & OC.PERMISSION_CREATE) !== 0; if (!isCreatable) { + self._showPermissionDeniedNotification(); return false; } } @@ -1856,6 +1886,62 @@ self.updateStorageStatistics(); }); + }, + + /** + * Scroll to the last file of the given list + * Highlight the list of files + * @param files array of filenames, + * @param {Function} [highlightFunction] optional function + * to be called after the scrolling is finished + */ + highlightFiles: function(files, highlightFunction) { + // Detection of the uploaded element + var filename = files[files.length - 1]; + var $fileRow = this.findFileEl(filename); + + while(!$fileRow.exists() && this._nextPage(false) !== false) { // Checking element existence + $fileRow = this.findFileEl(filename); + } + + if (!$fileRow.exists()) { // Element not present in the file list + return; + } + + var currentOffset = this.$container.scrollTop(); + var additionalOffset = this.$el.find("#controls").height()+this.$el.find("#controls").offset().top; + + // Animation + var _this = this; + this.$container.animate({ + // Scrolling to the top of the new element + scrollTop: currentOffset + $fileRow.offset().top - $fileRow.height() * 2 - additionalOffset + }, { + duration: 500, + complete: function() { + // Highlighting function + var highlightRow = highlightFunction; + + if (!highlightRow) { + highlightRow = function($fileRow) { + $fileRow.addClass("highlightUploaded"); + setTimeout(function() { + $fileRow.removeClass("highlightUploaded"); + }, 2500); + }; + } + + // Loop over uploaded files + for(var i=0; i<files.length; i++) { + var $fileRow = _this.findFileEl(files[i]); + + if($fileRow.length !== 0) { // Checking element existence + highlightRow($fileRow); + } + } + + } + }); } }; diff --git a/apps/files/js/files.js b/apps/files/js/files.js index df0c40a4405..5fcf99d24af 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -433,7 +433,12 @@ var folderDropOptions = { return false; } - var targetPath = FileList.getCurrentDirectory() + '/' + $(this).closest('tr').data('file'); + var $tr = $(this).closest('tr'); + if (($tr.data('permissions') & OC.PERMISSION_CREATE) === 0) { + FileList._showPermissionDeniedNotification(); + return false; + } + var targetPath = FileList.getCurrentDirectory() + '/' + $tr.data('file'); var files = FileList.getSelectedFiles(); if (files.length === 0) { diff --git a/apps/files/l10n/ast.php b/apps/files/l10n/ast.php index c62ee6ea8d8..acac6819db4 100644 --- a/apps/files/l10n/ast.php +++ b/apps/files/l10n/ast.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Modificáu", "_%n folder_::_%n folders_" => array("%n carpeta","%n carpetes"), "_%n file_::_%n files_" => array("%n ficheru","%n ficheros"), +"You don’t have permission to upload or create files here" => "Nun tienes permisu pa xubir o crear ficheros equí", "_Uploading %n file_::_Uploading %n files_" => array("Xubiendo %n ficheru","Xubiendo %n ficheros"), "\"{name}\" is an invalid file name." => "\"{name}\" ye un nome de ficheru inválidu.", "Your storage is full, files can not be updated or synced anymore!" => "L'almacenamientu ta completu, ¡yá nun se pueden anovar o sincronizar ficheros!", @@ -83,7 +84,6 @@ $TRANSLATIONS = array( "New folder" => "Nueva carpeta", "Folder" => "Carpeta", "From link" => "Dende enllaz", -"You don’t have permission to upload or create files here" => "Nun tienes permisu pa xubir o crear ficheros equí", "Nothing in here. Upload something!" => "Nun hai nada equí. ¡Xubi daqué!", "Download" => "Descargar", "Upload too large" => "La xuba ye abondo grande", diff --git a/apps/files/l10n/az.php b/apps/files/l10n/az.php index a41af8e8ca2..bfbb118b1b9 100644 --- a/apps/files/l10n/az.php +++ b/apps/files/l10n/az.php @@ -26,6 +26,7 @@ $TRANSLATIONS = array( "Save" => "Saxlamaq", "New folder" => "Yeni qovluq", "Folder" => "Qovluq", +"Nothing in here. Upload something!" => "Burda heçnə yoxdur. Nese yükləyin!", "Download" => "Yüklə" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php index a5e0e5f073c..dc067cc777c 100644 --- a/apps/files/l10n/bg_BG.php +++ b/apps/files/l10n/bg_BG.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Променен на", "_%n folder_::_%n folders_" => array("%n папка","%n папки"), "_%n file_::_%n files_" => array("%n файл","%n файла"), +"You don’t have permission to upload or create files here" => "Нямаш разрешение да създаваш или качваш файлове тук.", "_Uploading %n file_::_Uploading %n files_" => array("Качване на %n файл","Качване на %n файла."), "\"{name}\" is an invalid file name." => "\"{name}\" е непозволено име за файл.", "Your storage is full, files can not be updated or synced anymore!" => "Заделеното място е запълнено, повече файлове не могат да бъдат синхронизирани или опреснени!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Нова папка", "Folder" => "Папка", "From link" => "От връзка", -"You don’t have permission to upload or create files here" => "Нямаш разрешение да създаваш или качваш файлове тук.", "Nothing in here. Upload something!" => "Тук няма нищо. Качи нещо!", "Download" => "Изтегли", "Upload too large" => "Прекалено голям файл за качване.", diff --git a/apps/files/l10n/bn_BD.php b/apps/files/l10n/bn_BD.php index 7e7b8461720..eb50851c864 100644 --- a/apps/files/l10n/bn_BD.php +++ b/apps/files/l10n/bn_BD.php @@ -1,9 +1,12 @@ <?php $TRANSLATIONS = array( +"Storage not available" => "সংরক্ষণের স্থান নেই", +"Storage invalid" => "সংরক্ষণাগার বৈধ নয়", "Unknown error" => "অজানা জটিলতা", "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." => "নামটি সঠিক নয়, '\\', '/', '<', '>', ':', '\"', '|', '?' এবং '*' অনুমোদিত নয়।", "No file was uploaded. Unknown error" => "কোন ফাইল আপলোড করা হয় নি। সমস্যার কারণটি অজ্ঞাত।", "There is no error, the file uploaded with success" => "কোন সমস্যা হয় নি, ফাইল আপলোড সুসম্পন্ন হয়েছে।", diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php index 8d1efeedb5d..534235284c8 100644 --- a/apps/files/l10n/ca.php +++ b/apps/files/l10n/ca.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Modificat", "_%n folder_::_%n folders_" => array("%n carpeta","%n carpetes"), "_%n file_::_%n files_" => array("%n fitxer","%n fitxers"), +"You don’t have permission to upload or create files here" => "No teniu permisos per a pujar o crear els fitxers aquí", "_Uploading %n file_::_Uploading %n files_" => array("Pujant %n fitxer","Pujant %n fitxers"), "\"{name}\" is an invalid file name." => "\"{name}\" no es un fitxer vàlid.", "Your storage is full, files can not be updated or synced anymore!" => "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden actualitzar o sincronitzar!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Carpeta nova", "Folder" => "Carpeta", "From link" => "Des d'enllaç", -"You don’t have permission to upload or create files here" => "No teniu permisos per a pujar o crear els fitxers aquí", "Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!", "Download" => "Baixa", "Upload too large" => "La pujada és massa gran", diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php index 79e3da299ff..eded4543744 100644 --- a/apps/files/l10n/cs_CZ.php +++ b/apps/files/l10n/cs_CZ.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Upraveno", "_%n folder_::_%n folders_" => array("%n složka","%n složky","%n složek"), "_%n file_::_%n files_" => array("%n soubor","%n soubory","%n souborů"), +"You don’t have permission to upload or create files here" => "Nemáte oprávnění zde nahrávat či vytvářet soubory", "_Uploading %n file_::_Uploading %n files_" => array("Nahrávám %n soubor","Nahrávám %n soubory","Nahrávám %n souborů"), "\"{name}\" is an invalid file name." => "\"{name}\" je neplatným názvem souboru.", "Your storage is full, files can not be updated or synced anymore!" => "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory.", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Nová složka", "Folder" => "Složka", "From link" => "Z odkazu", -"You don’t have permission to upload or create files here" => "Nemáte oprávnění zde nahrávat či vytvářet soubory", "Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.", "Download" => "Stáhnout", "Upload too large" => "Odesílaný soubor je příliš velký", diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php index 82fef518e6b..455f2b6e4be 100644 --- a/apps/files/l10n/da.php +++ b/apps/files/l10n/da.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Ændret", "_%n folder_::_%n folders_" => array("%n mappe","%n mapper"), "_%n file_::_%n files_" => array("%n fil","%n filer"), +"You don’t have permission to upload or create files here" => "Du har ikke tilladelse til at uploade eller oprette filer her", "_Uploading %n file_::_Uploading %n files_" => array("Uploader %n fil","Uploader %n filer"), "\"{name}\" is an invalid file name." => "'{name}' er et ugyldigt filnavn.", "Your storage is full, files can not be updated or synced anymore!" => "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkroniseres længere!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Ny Mappe", "Folder" => "Mappe", "From link" => "Fra link", -"You don’t have permission to upload or create files here" => "Du har ikke tilladelse til at uploade eller oprette filer her", "Nothing in here. Upload something!" => "Her er tomt. Upload noget!", "Download" => "Download", "Upload too large" => "Upload er for stor", diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php index 603177bae56..94f8eb5e86e 100644 --- a/apps/files/l10n/de.php +++ b/apps/files/l10n/de.php @@ -6,7 +6,7 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Konnte %s nicht verschieben. Eine Datei mit diesem Namen existiert bereits", "Could not move %s" => "Konnte %s nicht verschieben", "File name cannot be empty." => "Der Dateiname darf nicht leer sein.", -"\"%s\" is an invalid file name." => "\"%s\" ist kein gültiger Dateiname.", +"\"%s\" is an invalid file name." => "»%s« ist kein gültiger Dateiname.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.", "The target folder has been moved or deleted." => "Der Zielordner wurde verschoben oder gelöscht.", "The name %s is already used in the folder %s. Please choose a different name." => "Der Name %s wird bereits im Ordner %s benutzt. Bitte wähle einen anderen Namen.", @@ -61,8 +61,9 @@ $TRANSLATIONS = array( "Modified" => "Geändert", "_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"), "_%n file_::_%n files_" => array("%n Datei","%n Dateien"), +"You don’t have permission to upload or create files here" => "Du besitzt hier keine Berechtigung, um Dateien hochzuladen oder zu erstellen", "_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hochgeladen","%n Dateien werden hochgeladen"), -"\"{name}\" is an invalid file name." => "\"{name}\" ist kein gültiger Dateiname.", +"\"{name}\" is an invalid file name." => "»{name}« ist kein gültiger Dateiname.", "Your storage is full, files can not be updated or synced anymore!" => "Dein Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Your storage is almost full ({usedSpacePercent}%)" => "Dein Speicher ist fast voll ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Die Verschlüsselung-App ist aktiviert, aber Deine Schlüssel sind nicht initialisiert. Bitte melden Dich nochmals ab und wieder an.", @@ -77,14 +78,13 @@ $TRANSLATIONS = array( "max. possible: " => "maximal möglich:", "Save" => "Speichern", "WebDAV" => "WebDAV", -"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" => "Verwenden Sie diese Adresse, um <a href=\"%s\" target=\"_blank\">via WebDAV auf Ihre Dateien zuzugreifen</a>", +"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" => "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>", "New" => "Neu", "New text file" => "Neue Textdatei", "Text file" => "Textdatei", "New folder" => "Neuer Ordner", "Folder" => "Ordner", "From link" => "Von einem Link", -"You don’t have permission to upload or create files here" => "Du besitzt hier keine Berechtigung, um Dateien hochzuladen oder zu erstellen", "Nothing in here. Upload something!" => "Alles leer. Lade etwas hoch!", "Download" => "Herunterladen", "Upload too large" => "Der Upload ist zu groß", diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php index 5c5e4694630..29e74110e99 100644 --- a/apps/files/l10n/de_DE.php +++ b/apps/files/l10n/de_DE.php @@ -61,8 +61,9 @@ $TRANSLATIONS = array( "Modified" => "Geändert", "_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"), "_%n file_::_%n files_" => array("%n Datei","%n Dateien"), +"You don’t have permission to upload or create files here" => "Sie besitzen hier keine Berechtigung Dateien hochzuladen oder zu erstellen", "_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hoch geladen","%n Dateien werden hoch geladen"), -"\"{name}\" is an invalid file name." => "\"{name}\" ist kein gültiger Dateiname.", +"\"{name}\" is an invalid file name." => "»{name}« ist kein gültiger Dateiname.", "Your storage is full, files can not be updated or synced anymore!" => "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Your storage is almost full ({usedSpacePercent}%)" => "Ihr Speicher ist fast voll ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte melden sich nochmals ab und wieder an.", @@ -77,14 +78,13 @@ $TRANSLATIONS = array( "max. possible: " => "maximal möglich:", "Save" => "Speichern", "WebDAV" => "WebDAV", -"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" => "Verwenden Sie diese Adresse, um <a href=\"%s\" target=\"_blank\">via WebDAV auf Ihre Dateien zuzugreifen</a>", +"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" => "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>", "New" => "Neu", "New text file" => "Neue Textdatei", "Text file" => "Textdatei", "New folder" => "Neuer Ordner", "Folder" => "Ordner", "From link" => "Von einem Link", -"You don’t have permission to upload or create files here" => "Sie besitzen hier keine Berechtigung Dateien hochzuladen oder zu erstellen", "Nothing in here. Upload something!" => "Alles leer. Laden Sie etwas hoch!", "Download" => "Herunterladen", "Upload too large" => "Der Upload ist zu groß", diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php index 0528ee92919..14896802ffd 100644 --- a/apps/files/l10n/el.php +++ b/apps/files/l10n/el.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Τροποποιήθηκε", "_%n folder_::_%n folders_" => array("%n φάκελος","%n φάκελοι"), "_%n file_::_%n files_" => array("%n αρχείο","%n αρχεία"), +"You don’t have permission to upload or create files here" => "Δεν έχετε δικαιώματα φόρτωσης ή δημιουργίας αρχείων εδώ", "_Uploading %n file_::_Uploading %n files_" => array("Ανέβασμα %n αρχείου","Ανέβασμα %n αρχείων"), "\"{name}\" is an invalid file name." => "Το \"{name}\" είναι μη έγκυρο όνομα αρχείου.", "Your storage is full, files can not be updated or synced anymore!" => "Ο αποθηκευτικός σας χώρος είναι γεμάτος, τα αρχεία δεν μπορούν να ενημερωθούν ή να συγχρονιστούν πια!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Νέος κατάλογος", "Folder" => "Φάκελος", "From link" => "Από σύνδεσμο", -"You don’t have permission to upload or create files here" => "Δεν έχετε δικαιώματα φόρτωσης ή δημιουργίας αρχείων εδώ", "Nothing in here. Upload something!" => "Δεν υπάρχει τίποτα εδώ. Ανεβάστε κάτι!", "Download" => "Λήψη", "Upload too large" => "Πολύ μεγάλο αρχείο προς αποστολή", diff --git a/apps/files/l10n/en_GB.php b/apps/files/l10n/en_GB.php index 0fde6d11aad..6b192c23ffe 100644 --- a/apps/files/l10n/en_GB.php +++ b/apps/files/l10n/en_GB.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Modified", "_%n folder_::_%n folders_" => array("%n folder","%n folders"), "_%n file_::_%n files_" => array("%n file","%n files"), +"You don’t have permission to upload or create files here" => "You don’t have permission to upload or create files here", "_Uploading %n file_::_Uploading %n files_" => array("Uploading %n file","Uploading %n files"), "\"{name}\" is an invalid file name." => "\"{name}\" is an invalid file name.", "Your storage is full, files can not be updated or synced anymore!" => "Your storage is full, files can not be updated or synced anymore!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "New folder", "Folder" => "Folder", "From link" => "From link", -"You don’t have permission to upload or create files here" => "You don’t have permission to upload or create files here", "Nothing in here. Upload something!" => "Nothing in here. Upload something!", "Download" => "Download", "Upload too large" => "Upload too large", diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php index 51d2cb9874d..e8538e47acf 100644 --- a/apps/files/l10n/eo.php +++ b/apps/files/l10n/eo.php @@ -47,6 +47,7 @@ $TRANSLATIONS = array( "Modified" => "Modifita", "_%n folder_::_%n folders_" => array("%n dosierujo","%n dosierujoj"), "_%n file_::_%n files_" => array("%n dosiero","%n dosieroj"), +"You don’t have permission to upload or create files here" => "Vi ne havas permeson alŝuti aŭ krei dosierojn ĉi tie", "_Uploading %n file_::_Uploading %n files_" => array("Alŝutatas %n dosiero","Alŝutatas %n dosieroj"), "Your storage is full, files can not be updated or synced anymore!" => "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!", "Your storage is almost full ({usedSpacePercent}%)" => "Via memoro preskaŭ plenas ({usedSpacePercent}%)", @@ -63,7 +64,6 @@ $TRANSLATIONS = array( "New folder" => "Nova dosierujo", "Folder" => "Dosierujo", "From link" => "El ligilo", -"You don’t have permission to upload or create files here" => "Vi ne havas permeson alŝuti aŭ krei dosierojn ĉi tie", "Nothing in here. Upload something!" => "Nenio estas ĉi tie. Alŝutu ion!", "Download" => "Elŝuti", "Upload too large" => "Alŝuto tro larĝa", diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php index 5e1257034f6..06f916b893e 100644 --- a/apps/files/l10n/es.php +++ b/apps/files/l10n/es.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Modificado", "_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"), "_%n file_::_%n files_" => array("%n archivo","%n archivos"), +"You don’t have permission to upload or create files here" => "No tienes permisos para subir o crear archivos aquí.", "_Uploading %n file_::_Uploading %n files_" => array("Subiendo %n archivo","Subiendo %n archivos"), "\"{name}\" is an invalid file name." => "\"{name}\" es un nombre de archivo inválido.", "Your storage is full, files can not be updated or synced anymore!" => "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Nueva carpeta", "Folder" => "Carpeta", "From link" => "Desde enlace", -"You don’t have permission to upload or create files here" => "No tienes permisos para subir o crear archivos aquí.", "Nothing in here. Upload something!" => "No hay nada aquí. ¡Suba algo!", "Download" => "Descargar", "Upload too large" => "Subida demasido grande", diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php index 9568fb1b2fe..8b9fe78791e 100644 --- a/apps/files/l10n/es_AR.php +++ b/apps/files/l10n/es_AR.php @@ -51,6 +51,7 @@ $TRANSLATIONS = array( "Modified" => "Modificado", "_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"), "_%n file_::_%n files_" => array("%n archivo","%n archivos"), +"You don’t have permission to upload or create files here" => "No tienes permisos para subir o crear archivos aquí", "_Uploading %n file_::_Uploading %n files_" => array("Subiendo %n archivo","Subiendo %n archivos"), "Your storage is full, files can not be updated or synced anymore!" => "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando", "Your storage is almost full ({usedSpacePercent}%)" => "El almacenamiento está casi lleno ({usedSpacePercent}%)", @@ -71,7 +72,6 @@ $TRANSLATIONS = array( "New folder" => "Nueva Carpeta", "Folder" => "Carpeta", "From link" => "Desde enlace", -"You don’t have permission to upload or create files here" => "No tienes permisos para subir o crear archivos aquí", "Nothing in here. Upload something!" => "No hay nada. ¡Subí contenido!", "Download" => "Descargar", "Upload too large" => "El tamaño del archivo que querés subir es demasiado grande", diff --git a/apps/files/l10n/es_MX.php b/apps/files/l10n/es_MX.php index 58ca3c470b4..d11bc4301df 100644 --- a/apps/files/l10n/es_MX.php +++ b/apps/files/l10n/es_MX.php @@ -51,6 +51,7 @@ $TRANSLATIONS = array( "Modified" => "Modificado", "_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"), "_%n file_::_%n files_" => array("%n archivo","%n archivos"), +"You don’t have permission to upload or create files here" => "No tienes permisos para subir o crear archivos aquí.", "_Uploading %n file_::_Uploading %n files_" => array("Subiendo %n archivo","Subiendo %n archivos"), "Your storage is full, files can not be updated or synced anymore!" => "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!", "Your storage is almost full ({usedSpacePercent}%)" => "Su almacenamiento está casi lleno ({usedSpacePercent}%)", @@ -71,7 +72,6 @@ $TRANSLATIONS = array( "New folder" => "Nueva carpeta", "Folder" => "Carpeta", "From link" => "Desde enlace", -"You don’t have permission to upload or create files here" => "No tienes permisos para subir o crear archivos aquí.", "Nothing in here. Upload something!" => "No hay nada aquí. ¡Suba algo!", "Download" => "Descargar", "Upload too large" => "Subida demasido grande", diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php index 46246047ac9..12714c17acf 100644 --- a/apps/files/l10n/et_EE.php +++ b/apps/files/l10n/et_EE.php @@ -12,6 +12,7 @@ $TRANSLATIONS = array( "The name %s is already used in the folder %s. Please choose a different name." => "Nimi %s on juba kasutusel kataloogis %s. Palun vali mõni teine nimi.", "Not a valid source" => "Pole korrektne lähteallikas", "Server is not allowed to open URLs, please check the server configuration" => "Server ei võimalda URL-ide avamist, palun kontrolli serveri seadistust", +"The file exceeds your quota by %s" => "Fail ületab sinu limiidi: %s", "Error while downloading %s to %s" => "Viga %s allalaadimisel %s", "Error when creating the file" => "Viga faili loomisel", "Folder name cannot be empty." => "Kataloogi nimi ei saa olla tühi.", @@ -60,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Muudetud", "_%n folder_::_%n folders_" => array("%n kataloog","%n kataloogi"), "_%n file_::_%n files_" => array("%n fail","%n faili"), +"You don’t have permission to upload or create files here" => "Sul puuduvad õigused siia failide üleslaadimiseks või tekitamiseks", "_Uploading %n file_::_Uploading %n files_" => array("Laadin üles %n faili","Laadin üles %n faili"), "\"{name}\" is an invalid file name." => "\"{name}\" on vigane failinimi.", "Your storage is full, files can not be updated or synced anymore!" => "Sinu andmemaht on täis! Faile ei uuendata ega sünkroniseerita!", @@ -83,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Uus kaust", "Folder" => "Kaust", "From link" => "Allikast", -"You don’t have permission to upload or create files here" => "Sul puuduvad õigused siia failide üleslaadimiseks või tekitamiseks", "Nothing in here. Upload something!" => "Siin pole midagi. Lae midagi üles!", "Download" => "Lae alla", "Upload too large" => "Üleslaadimine on liiga suur", diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php index 6f6726b83d0..c7d5ceec02d 100644 --- a/apps/files/l10n/eu.php +++ b/apps/files/l10n/eu.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Aldatuta", "_%n folder_::_%n folders_" => array("karpeta %n","%n karpeta"), "_%n file_::_%n files_" => array("fitxategi %n","%n fitxategi"), +"You don’t have permission to upload or create files here" => "Ez duzu fitxategiak hona igotzeko edo hemen sortzeko baimenik", "_Uploading %n file_::_Uploading %n files_" => array("Fitxategi %n igotzen","%n fitxategi igotzen"), "\"{name}\" is an invalid file name." => "\"{name}\" ez da fitxategi izen baliogarria.", "Your storage is full, files can not be updated or synced anymore!" => "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Karpeta berria", "Folder" => "Karpeta", "From link" => "Estekatik", -"You don’t have permission to upload or create files here" => "Ez duzu fitxategiak hona igotzeko edo hemen sortzeko baimenik", "Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!", "Download" => "Deskargatu", "Upload too large" => "Igoera handiegia da", diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php index 3acbfc9308f..896b19807b1 100644 --- a/apps/files/l10n/fi_FI.php +++ b/apps/files/l10n/fi_FI.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Muokattu", "_%n folder_::_%n folders_" => array("%n kansio","%n kansiota"), "_%n file_::_%n files_" => array("%n tiedosto","%n tiedostoa"), +"You don’t have permission to upload or create files here" => "Käyttöoikeutesi eivät riitä tiedostojen lähettämiseen tai kansioiden luomiseen tähän sijaintiin", "_Uploading %n file_::_Uploading %n files_" => array("Lähetetään %n tiedosto","Lähetetään %n tiedostoa"), "\"{name}\" is an invalid file name." => "\"{name}\" on virheellinen tiedostonimi.", "Your storage is full, files can not be updated or synced anymore!" => "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Uusi kansio", "Folder" => "Kansio", "From link" => "Linkistä", -"You don’t have permission to upload or create files here" => "Käyttöoikeutesi eivät riitä tiedostojen lähettämiseen tai kansioiden luomiseen tähän sijaintiin", "Nothing in here. Upload something!" => "Täällä ei ole mitään. Lähetä tänne jotakin!", "Download" => "Lataa", "Upload too large" => "Lähetettävä tiedosto on liian suuri", diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php index 52a8cc36714..7b6ce8ef162 100644 --- a/apps/files/l10n/fr.php +++ b/apps/files/l10n/fr.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Modifié", "_%n folder_::_%n folders_" => array("%n dossier","%n dossiers"), "_%n file_::_%n files_" => array("%n fichier","%n fichiers"), +"You don’t have permission to upload or create files here" => "Vous n'avez pas la permission de téléverser ou de créer des fichiers ici", "_Uploading %n file_::_Uploading %n files_" => array("Téléversement de %n fichier","Téléversement de %n fichiers"), "\"{name}\" is an invalid file name." => "\"{name}\" n'est pas un nom de fichier valide.", "Your storage is full, files can not be updated or synced anymore!" => "Votre espage de stockage est plein, les fichiers ne peuvent plus être téléversés ou synchronisés !", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Nouveau dossier", "Folder" => "Dossier", "From link" => "Depuis le lien", -"You don’t have permission to upload or create files here" => "Vous n'avez pas la permission de téléverser ou de créer des fichiers ici", "Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)", "Download" => "Télécharger", "Upload too large" => "Téléversement trop volumineux", diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php index 5a84dbbaf5a..0671a0ac474 100644 --- a/apps/files/l10n/gl.php +++ b/apps/files/l10n/gl.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Modificado", "_%n folder_::_%n folders_" => array("%n cartafol","%n cartafoles"), "_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"), +"You don’t have permission to upload or create files here" => "Non ten permisos para enviar ou crear ficheiros aquí.", "_Uploading %n file_::_Uploading %n files_" => array("Cargando %n ficheiro","Cargando %n ficheiros"), "\"{name}\" is an invalid file name." => "«{name}» é un nome incorrecto de ficheiro.", "Your storage is full, files can not be updated or synced anymore!" => "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Novo cartafol", "Folder" => "Cartafol", "From link" => "Desde a ligazón", -"You don’t have permission to upload or create files here" => "Non ten permisos para enviar ou crear ficheiros aquí.", "Nothing in here. Upload something!" => "Aquí non hai nada. Envíe algo.", "Download" => "Descargar", "Upload too large" => "Envío grande de máis", diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php index 85c439ecab1..1a8d2a6f548 100644 --- a/apps/files/l10n/hu_HU.php +++ b/apps/files/l10n/hu_HU.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Módosítva", "_%n folder_::_%n folders_" => array("%n mappa","%n mappa"), "_%n file_::_%n files_" => array("%n állomány","%n állomány"), +"You don’t have permission to upload or create files here" => "Önnek nincs jogosultsága ahhoz, hogy ide állományokat töltsön föl, vagy itt újakat hozzon létre", "_Uploading %n file_::_Uploading %n files_" => array("%n állomány feltöltése","%n állomány feltöltése"), "\"{name}\" is an invalid file name." => "\"{name}\" érvénytelen, mint fájlnév.", "Your storage is full, files can not be updated or synced anymore!" => "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Új mappa", "Folder" => "Mappa", "From link" => "Feltöltés linkről", -"You don’t have permission to upload or create files here" => "Önnek nincs jogosultsága ahhoz, hogy ide állományokat töltsön föl, vagy itt újakat hozzon létre", "Nothing in here. Upload something!" => "Itt nincs semmi. Töltsön fel valamit!", "Download" => "Letöltés", "Upload too large" => "A feltöltés túl nagy", diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php index 1a6a1bc384b..b8b362d5b48 100644 --- a/apps/files/l10n/id.php +++ b/apps/files/l10n/id.php @@ -49,6 +49,7 @@ $TRANSLATIONS = array( "Modified" => "Dimodifikasi", "_%n folder_::_%n folders_" => array("%n folder"), "_%n file_::_%n files_" => array("%n berkas"), +"You don’t have permission to upload or create files here" => "Anda tidak memiliki akses untuk mengunggah atau membuat berkas disini", "_Uploading %n file_::_Uploading %n files_" => array("Mengunggah %n berkas"), "Your storage is full, files can not be updated or synced anymore!" => "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!", "Your storage is almost full ({usedSpacePercent}%)" => "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)", @@ -69,7 +70,6 @@ $TRANSLATIONS = array( "New folder" => "Map baru", "Folder" => "Folder", "From link" => "Dari tautan", -"You don’t have permission to upload or create files here" => "Anda tidak memiliki akses untuk mengunggah atau membuat berkas disini", "Nothing in here. Upload something!" => "Tidak ada apa-apa di sini. Unggah sesuatu!", "Download" => "Unduh", "Upload too large" => "Yang diunggah terlalu besar", diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php index 3561cff294a..a2a583940b6 100644 --- a/apps/files/l10n/it.php +++ b/apps/files/l10n/it.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Modificato", "_%n folder_::_%n folders_" => array("%n cartella","%n cartelle"), "_%n file_::_%n files_" => array("%n file","%n file"), +"You don’t have permission to upload or create files here" => "Qui non hai i permessi di caricare o creare file", "_Uploading %n file_::_Uploading %n files_" => array("Caricamento di %n file in corso","Caricamento di %n file in corso"), "\"{name}\" is an invalid file name." => "\"{name}\" non è un nome file valido.", "Your storage is full, files can not be updated or synced anymore!" => "Lo spazio di archiviazione è pieno, i file non possono essere più aggiornati o sincronizzati!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Nuova cartella", "Folder" => "Cartella", "From link" => "Da collegamento", -"You don’t have permission to upload or create files here" => "Qui non hai i permessi di caricare o creare file", "Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!", "Download" => "Scarica", "Upload too large" => "Caricamento troppo grande", diff --git a/apps/files/l10n/ja.php b/apps/files/l10n/ja.php index b3c31925618..a1e7fe232c6 100644 --- a/apps/files/l10n/ja.php +++ b/apps/files/l10n/ja.php @@ -60,6 +60,7 @@ $TRANSLATIONS = array( "Modified" => "更新日時", "_%n folder_::_%n folders_" => array("%n 個のフォルダー"), "_%n file_::_%n files_" => array("%n 個のファイル"), +"You don’t have permission to upload or create files here" => "ここにファイルをアップロードもしくは作成する権限がありません", "_Uploading %n file_::_Uploading %n files_" => array("%n 個のファイルをアップロード中"), "\"{name}\" is an invalid file name." => "\"{name}\" は無効なファイル名です。", "Your storage is full, files can not be updated or synced anymore!" => "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!", @@ -82,7 +83,6 @@ $TRANSLATIONS = array( "New folder" => "新しいフォルダー", "Folder" => "フォルダー", "From link" => "リンク", -"You don’t have permission to upload or create files here" => "ここにファイルをアップロードもしくは作成する権限がありません", "Nothing in here. Upload something!" => "ここには何もありません。何かアップロードしてください。", "Download" => "ダウンロード", "Upload too large" => "アップロードには大きすぎます。", diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php index c6e8870c467..b342b375c77 100644 --- a/apps/files/l10n/ko.php +++ b/apps/files/l10n/ko.php @@ -51,6 +51,7 @@ $TRANSLATIONS = array( "Modified" => "수정됨", "_%n folder_::_%n folders_" => array("폴더 %n개"), "_%n file_::_%n files_" => array("파일 %n개"), +"You don’t have permission to upload or create files here" => "여기에 파일을 업로드하거나 만들 권한이 없습니다", "_Uploading %n file_::_Uploading %n files_" => array("파일 %n개 업로드 중"), "Your storage is full, files can not be updated or synced anymore!" => "저장 공간이 가득 찼습니다. 파일을 업데이트하거나 동기화할 수 없습니다!", "Your storage is almost full ({usedSpacePercent}%)" => "저장 공간이 거의 가득 찼습니다 ({usedSpacePercent}%)", @@ -71,7 +72,6 @@ $TRANSLATIONS = array( "New folder" => "새 폴더", "Folder" => "폴더", "From link" => "링크에서", -"You don’t have permission to upload or create files here" => "여기에 파일을 업로드하거나 만들 권한이 없습니다", "Nothing in here. Upload something!" => "내용이 없습니다. 업로드할 수 있습니다!", "Download" => "다운로드", "Upload too large" => "업로드한 파일이 너무 큼", diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php index d07a8c82d3b..e1c16c8a80f 100644 --- a/apps/files/l10n/lt_LT.php +++ b/apps/files/l10n/lt_LT.php @@ -51,6 +51,7 @@ $TRANSLATIONS = array( "Modified" => "Pakeista", "_%n folder_::_%n folders_" => array("%n aplankas","%n aplankai","%n aplankų"), "_%n file_::_%n files_" => array("%n failas","%n failai","%n failų"), +"You don’t have permission to upload or create files here" => "Jūs neturite leidimo čia įkelti arba kurti failus", "_Uploading %n file_::_Uploading %n files_" => array("Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"), "Your storage is full, files can not be updated or synced anymore!" => "Jūsų visa vieta serveryje užimta", "Your storage is almost full ({usedSpacePercent}%)" => "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)", @@ -71,7 +72,6 @@ $TRANSLATIONS = array( "New folder" => "Naujas aplankas", "Folder" => "Katalogas", "From link" => "Iš nuorodos", -"You don’t have permission to upload or create files here" => "Jūs neturite leidimo čia įkelti arba kurti failus", "Nothing in here. Upload something!" => "Čia tuščia. Įkelkite ką nors!", "Download" => "Atsisiųsti", "Upload too large" => "Įkėlimui failas per didelis", diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php index 1baf5dad99d..5acadc8189c 100644 --- a/apps/files/l10n/nb_NO.php +++ b/apps/files/l10n/nb_NO.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Endret", "_%n folder_::_%n folders_" => array("%n mappe","%n mapper"), "_%n file_::_%n files_" => array("%n fil","%n filer"), +"You don’t have permission to upload or create files here" => "Du har ikke tillatelse til å laste opp eller opprette filer her", "_Uploading %n file_::_Uploading %n files_" => array("Laster opp %n fil","Laster opp %n filer"), "\"{name}\" is an invalid file name." => "\"{name}\" er et uglydig filnavn.", "Your storage is full, files can not be updated or synced anymore!" => "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Ny mappe", "Folder" => "Mappe", "From link" => "Fra lenke", -"You don’t have permission to upload or create files here" => "Du har ikke tillatelse til å laste opp eller opprette filer her", "Nothing in here. Upload something!" => "Ingenting her. Last opp noe!", "Download" => "Last ned", "Upload too large" => "Filen er for stor", diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php index 68910e7419a..f40e1bcad9f 100644 --- a/apps/files/l10n/nl.php +++ b/apps/files/l10n/nl.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Aangepast", "_%n folder_::_%n folders_" => array("","%n mappen"), "_%n file_::_%n files_" => array("%n bestand","%n bestanden"), +"You don’t have permission to upload or create files here" => "U hebt geen toestemming om hier te uploaden of bestanden te maken", "_Uploading %n file_::_Uploading %n files_" => array("%n bestand aan het uploaden","%n bestanden aan het uploaden"), "\"{name}\" is an invalid file name." => "\"{name}\" is een ongeldige bestandsnaam.", "Your storage is full, files can not be updated or synced anymore!" => "Uw opslagruimte zit vol, Bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Nieuwe map", "Folder" => "Map", "From link" => "Vanaf link", -"You don’t have permission to upload or create files here" => "U hebt geen toestemming om hier te uploaden of bestanden te maken", "Nothing in here. Upload something!" => "Er bevindt zich hier niets. Upload een bestand!", "Download" => "Downloaden", "Upload too large" => "Upload is te groot", diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php index 09c460864eb..27be124bb29 100644 --- a/apps/files/l10n/pl.php +++ b/apps/files/l10n/pl.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Modyfikacja", "_%n folder_::_%n folders_" => array("%n katalog","%n katalogi","%n katalogów"), "_%n file_::_%n files_" => array("%n plik","%n pliki","%n plików"), +"You don’t have permission to upload or create files here" => "Nie masz uprawnień do wczytywania lub tworzenia plików w tym miejscu", "_Uploading %n file_::_Uploading %n files_" => array("Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"), "\"{name}\" is an invalid file name." => "\"{name}\" jest nieprawidłową nazwą pliku.", "Your storage is full, files can not be updated or synced anymore!" => "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Nowy folder", "Folder" => "Folder", "From link" => "Z odnośnika", -"You don’t have permission to upload or create files here" => "Nie masz uprawnień do wczytywania lub tworzenia plików w tym miejscu", "Nothing in here. Upload something!" => "Pusto. Wyślij coś!", "Download" => "Pobierz", "Upload too large" => "Ładowany plik jest za duży", diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php index 7efa6f12e10..95a04279fee 100644 --- a/apps/files/l10n/pt_BR.php +++ b/apps/files/l10n/pt_BR.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Modificado", "_%n folder_::_%n folders_" => array("%n pasta","%n pastas"), "_%n file_::_%n files_" => array("%n arquivo","%n arquivos"), +"You don’t have permission to upload or create files here" => "Você não tem permissão para enviar ou criar arquivos aqui", "_Uploading %n file_::_Uploading %n files_" => array("Enviando %n arquivo","Enviando %n arquivos"), "\"{name}\" is an invalid file name." => "\"{name}\" é um nome de arquivo inválido.", "Your storage is full, files can not be updated or synced anymore!" => "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Nova pasta", "Folder" => "Pasta", "From link" => "Do link", -"You don’t have permission to upload or create files here" => "Você não tem permissão para enviar ou criar arquivos aqui", "Nothing in here. Upload something!" => "Nada aqui. Carregue alguma coisa!", "Download" => "Baixar", "Upload too large" => "Arquivo muito grande para envio", diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php index dfa599e10ac..372b412fc00 100644 --- a/apps/files/l10n/pt_PT.php +++ b/apps/files/l10n/pt_PT.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Modificado", "_%n folder_::_%n folders_" => array("%n pasta","%n pastas"), "_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"), +"You don’t have permission to upload or create files here" => "Você não tem permissão para enviar ou criar ficheiros aqui", "_Uploading %n file_::_Uploading %n files_" => array("A carregar %n ficheiro","A carregar %n ficheiros"), "\"{name}\" is an invalid file name." => "\"{name}\" é um nome de ficheiro inválido.", "Your storage is full, files can not be updated or synced anymore!" => "O seu armazenamento está cheio, os ficheiros já não podem ser atualizados ou sincronizados.", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Nova Pasta", "Folder" => "Pasta", "From link" => "Da hiperligação", -"You don’t have permission to upload or create files here" => "Você não tem permissão para enviar ou criar ficheiros aqui", "Nothing in here. Upload something!" => "Vazio. Envie alguma coisa!", "Download" => "Transferir", "Upload too large" => "Upload muito grande", diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php index d84a80af97e..d94a4a772a6 100644 --- a/apps/files/l10n/ro.php +++ b/apps/files/l10n/ro.php @@ -60,6 +60,7 @@ $TRANSLATIONS = array( "Modified" => "Modificat", "_%n folder_::_%n folders_" => array("%n director","%n directoare","%n directoare"), "_%n file_::_%n files_" => array("%n fișier","%n fișiere","%n fișiere"), +"You don’t have permission to upload or create files here" => "Nu aveti permisiunea de a incarca sau crea fisiere aici", "_Uploading %n file_::_Uploading %n files_" => array("Se încarcă %n fișier.","Se încarcă %n fișiere.","Se încarcă %n fișiere."), "\"{name}\" is an invalid file name." => "\"{name}\" este un nume de fișier nevalid.", "Your storage is full, files can not be updated or synced anymore!" => "Spațiul de stocare este plin, fișierele nu mai pot fi actualizate sau sincronizate!", @@ -82,7 +83,6 @@ $TRANSLATIONS = array( "New folder" => "Un nou dosar", "Folder" => "Dosar", "From link" => "De la adresa", -"You don’t have permission to upload or create files here" => "Nu aveti permisiunea de a incarca sau crea fisiere aici", "Nothing in here. Upload something!" => "Nimic aici. Încarcă ceva!", "Download" => "Descarcă", "Upload too large" => "Fișierul încărcat este prea mare", diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php index e0eb7d81484..b1136d15bed 100644 --- a/apps/files/l10n/ru.php +++ b/apps/files/l10n/ru.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Изменён", "_%n folder_::_%n folders_" => array("%n каталог","%n каталога","%n каталогов"), "_%n file_::_%n files_" => array("%n файл","%n файла","%n файлов"), +"You don’t have permission to upload or create files here" => "У вас нет прав для загрузки или создания файлов здесь.", "_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!" => "Ваше хранилище заполнено, произведите очистку перед загрузкой новых файлов.", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Новый каталог", "Folder" => "Каталог", "From link" => "Объект по ссылке", -"You don’t have permission to upload or create files here" => "У вас нет прав для загрузки или создания файлов здесь.", "Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!", "Download" => "Скачать", "Upload too large" => "Файл слишком велик", diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php index 788ad7facc8..e582c40fedf 100644 --- a/apps/files/l10n/sk_SK.php +++ b/apps/files/l10n/sk_SK.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Upravené", "_%n folder_::_%n folders_" => array("%n priečinok","%n priečinky","%n priečinkov"), "_%n file_::_%n files_" => array("%n súbor","%n súbory","%n súborov"), +"You don’t have permission to upload or create files here" => "Nemáte oprávnenie sem nahrávať alebo vytvoriť súbory", "_Uploading %n file_::_Uploading %n files_" => array("Nahrávam %n súbor","Nahrávam %n súbory","Nahrávam %n súborov"), "\"{name}\" is an invalid file name." => "\"{name}\" je neplatné meno súboru.", "Your storage is full, files can not be updated or synced anymore!" => "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Nový priečinok", "Folder" => "Priečinok", "From link" => "Z odkazu", -"You don’t have permission to upload or create files here" => "Nemáte oprávnenie sem nahrávať alebo vytvoriť súbory", "Nothing in here. Upload something!" => "Žiadny súbor. Nahrajte niečo!", "Download" => "Sťahovanie", "Upload too large" => "Nahrávanie je príliš veľké", diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php index 0c58be5b57f..432d8c8eae9 100644 --- a/apps/files/l10n/sl.php +++ b/apps/files/l10n/sl.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Spremenjeno", "_%n folder_::_%n folders_" => array("%n mapa","%n mapi","%n mape","%n map"), "_%n file_::_%n files_" => array("%n datoteka","%n datoteki","%n datoteke","%n datotek"), +"You don’t have permission to upload or create files here" => "Ni ustreznih dovoljenj za pošiljanje ali ustvarjanje datotek na tem mestu.", "_Uploading %n file_::_Uploading %n files_" => array("Posodabljanje %n datoteke","Posodabljanje %n datotek","Posodabljanje %n datotek","Posodabljanje %n datotek"), "\"{name}\" is an invalid file name." => "\"{name}\" je neveljavno ime datoteke.", "Your storage is full, files can not be updated or synced anymore!" => "Shramba je povsem napolnjena. Datotek ni več mogoče posodabljati in usklajevati!", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Nova mapa", "Folder" => "Mapa", "From link" => "Iz povezave", -"You don’t have permission to upload or create files here" => "Ni ustreznih dovoljenj za pošiljanje ali ustvarjanje datotek na tem mestu.", "Nothing in here. Upload something!" => "Tukaj še ni ničesar. Najprej je treba kakšno datoteko poslati v oblak!", "Download" => "Prejmi", "Upload too large" => "Prekoračenje omejitve velikosti", diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php index 907b1410cb8..953946f3809 100644 --- a/apps/files/l10n/sv.php +++ b/apps/files/l10n/sv.php @@ -57,6 +57,7 @@ $TRANSLATIONS = array( "Modified" => "Ändrad", "_%n folder_::_%n folders_" => array("%n mapp","%n mappar"), "_%n file_::_%n files_" => array("%n fil","%n filer"), +"You don’t have permission to upload or create files here" => "Du har ej tillåtelse att ladda upp eller skapa filer här", "_Uploading %n file_::_Uploading %n files_" => array("Laddar upp %n fil","Laddar upp %n filer"), "\"{name}\" is an invalid file name." => "\"{name}\" är ett ogiltligt filnamn.", "Your storage is full, files can not be updated or synced anymore!" => "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!", @@ -79,7 +80,6 @@ $TRANSLATIONS = array( "New folder" => "Ny mapp", "Folder" => "Mapp", "From link" => "Från länk", -"You don’t have permission to upload or create files here" => "Du har ej tillåtelse att ladda upp eller skapa filer här", "Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!", "Download" => "Ladda ner", "Upload too large" => "För stor uppladdning", diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php index c8a6a8f0db1..1d6ef9427b7 100644 --- a/apps/files/l10n/tr.php +++ b/apps/files/l10n/tr.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "Değiştirilme", "_%n folder_::_%n folders_" => array("%n dizin","%n dizin"), "_%n file_::_%n files_" => array("%n dosya","%n dosya"), +"You don’t have permission to upload or create files here" => "Buraya dosya yükleme veya oluşturma izniniz yok", "_Uploading %n file_::_Uploading %n files_" => array("%n dosya yükleniyor","%n dosya yükleniyor"), "\"{name}\" is an invalid file name." => "\"{name}\" geçersiz bir dosya adı.", "Your storage is full, files can not be updated or synced anymore!" => "Depolama alanınız dolu, artık dosyalar güncellenmeyecek veya eşitlenmeyecek.", @@ -84,7 +85,6 @@ $TRANSLATIONS = array( "New folder" => "Yeni klasör", "Folder" => "Klasör", "From link" => "Bağlantıdan", -"You don’t have permission to upload or create files here" => "Buraya dosya yükleme veya oluşturma izniniz yok", "Nothing in here. Upload something!" => "Burada hiçbir şey yok. Bir şeyler yükleyin!", "Download" => "İndir", "Upload too large" => "Yükleme çok büyük", diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php index 9a27ecd228a..dc9e4b64c14 100644 --- a/apps/files/l10n/uk.php +++ b/apps/files/l10n/uk.php @@ -55,6 +55,7 @@ $TRANSLATIONS = array( "Modified" => "Змінено", "_%n folder_::_%n folders_" => array("%n тека","%n тека","%n теки"), "_%n file_::_%n files_" => array("%n файл","%n файлів","%n файли"), +"You don’t have permission to upload or create files here" => "У вас недостатньо прав для завантаження або створення файлів тут", "_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!" => "Ваше сховище переповнене, файли більше не можуть бути оновлені або синхронізовані !", @@ -76,7 +77,6 @@ $TRANSLATIONS = array( "New folder" => "Нова тека", "Folder" => "Тека", "From link" => "З посилання", -"You don’t have permission to upload or create files here" => "У вас недостатньо прав для завантаження або створення файлів тут", "Nothing in here. Upload something!" => "Тут нічого немає. Відвантажте що-небудь!", "Download" => "Завантажити", "Upload too large" => "Файл занадто великий", diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php index 6d1e84172fe..a754b9d5a5d 100644 --- a/apps/files/l10n/vi.php +++ b/apps/files/l10n/vi.php @@ -50,6 +50,7 @@ $TRANSLATIONS = array( "Modified" => "Thay đổi", "_%n folder_::_%n folders_" => array("%n thư mục"), "_%n file_::_%n files_" => array("%n tập tin"), +"You don’t have permission to upload or create files here" => "Bạn không có quyền upload hoặc tạo files ở đây", "_Uploading %n file_::_Uploading %n files_" => array("Đang tải lên %n tập tin"), "Your storage is full, files can not be updated or synced anymore!" => "Your storage is full, files can not be updated or synced anymore!", "Your storage is almost full ({usedSpacePercent}%)" => "Your storage is almost full ({usedSpacePercent}%)", @@ -68,7 +69,6 @@ $TRANSLATIONS = array( "New folder" => "Tạo thư mục", "Folder" => "Thư mục", "From link" => "Từ liên kết", -"You don’t have permission to upload or create files here" => "Bạn không có quyền upload hoặc tạo files ở đây", "Nothing in here. Upload something!" => "Không có gì ở đây .Hãy tải lên một cái gì đó !", "Download" => "Tải về", "Upload too large" => "Tập tin tải lên quá lớn", diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php index 3550451826a..f24218f2784 100644 --- a/apps/files/l10n/zh_CN.php +++ b/apps/files/l10n/zh_CN.php @@ -60,6 +60,7 @@ $TRANSLATIONS = array( "Modified" => "修改日期", "_%n folder_::_%n folders_" => array("%n 文件夹"), "_%n file_::_%n files_" => array("%n个文件"), +"You don’t have permission to upload or create files here" => "您没有权限来上传湖州哦和创建文件", "_Uploading %n file_::_Uploading %n files_" => array("上传 %n 个文件"), "\"{name}\" is an invalid file name." => "“{name}”是一个无效的文件名。", "Your storage is full, files can not be updated or synced anymore!" => "您的存储空间已满,文件将无法更新或同步!", @@ -82,7 +83,6 @@ $TRANSLATIONS = array( "New folder" => "增加文件夹", "Folder" => "文件夹", "From link" => "来自链接", -"You don’t have permission to upload or create files here" => "您没有权限来上传湖州哦和创建文件", "Nothing in here. Upload something!" => "这里还什么都没有。上传些东西吧!", "Download" => "下载", "Upload too large" => "上传文件过大", diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php index e269cca3168..67084f28a55 100644 --- a/apps/files/l10n/zh_TW.php +++ b/apps/files/l10n/zh_TW.php @@ -61,6 +61,7 @@ $TRANSLATIONS = array( "Modified" => "修改時間", "_%n folder_::_%n folders_" => array("%n 個資料夾"), "_%n file_::_%n files_" => array("%n 個檔案"), +"You don’t have permission to upload or create files here" => "您沒有權限在這裡上傳或建立檔案", "_Uploading %n file_::_Uploading %n files_" => array("%n 個檔案正在上傳"), "\"{name}\" is an invalid file name." => "{name} 是無效的檔名", "Your storage is full, files can not be updated or synced anymore!" => "您的儲存空間已滿,沒有辦法再更新或是同步檔案!", @@ -83,7 +84,6 @@ $TRANSLATIONS = array( "New folder" => "新資料夾", "Folder" => "資料夾", "From link" => "從連結", -"You don’t have permission to upload or create files here" => "您沒有權限在這裡上傳或建立檔案", "Nothing in here. Upload something!" => "這裡還沒有東西,上傳一些吧!", "Download" => "下載", "Upload too large" => "上傳過大", diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index cad564323b4..65a89ef85cd 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -1835,7 +1835,6 @@ describe('OCA.Files.FileList tests', function() { // but it makes it possible to simulate the event triggering to // test the response of the handlers $uploader = $('#file_upload_start'); - fileList.setupUploadEvents(); fileList.setFiles(testFiles); }); @@ -1912,6 +1911,16 @@ describe('OCA.Files.FileList tests', function() { ev = dropOn(fileList.$fileList.find('th:first')); expect(ev.result).toEqual(false); + expect(notificationStub.calledOnce).toEqual(true); + }); + it('drop on an folder does not trigger upload if no upload permission on that folder', function() { + var $tr = fileList.findFileEl('somedir'); + var ev; + $tr.data('permissions', OC.PERMISSION_READ); + ev = dropOn($tr); + + expect(ev.result).toEqual(false); + expect(notificationStub.calledOnce).toEqual(true); }); it('drop on a file row inside the table triggers upload to current folder', function() { var ev; diff --git a/apps/files_encryption/l10n/et_EE.php b/apps/files_encryption/l10n/et_EE.php index 7e298d8e663..bbf0ee4dca3 100644 --- a/apps/files_encryption/l10n/et_EE.php +++ b/apps/files_encryption/l10n/et_EE.php @@ -31,6 +31,7 @@ $TRANSLATIONS = array( "Repeat New Recovery key password" => "Korda uut taastevõtme parooli", "Change Password" => "Muuda parooli", "Your private key password no longer matches your log-in password." => "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.", +"Set your old private key password to your current log-in password:" => "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", " If you don't remember your old password you can ask your administrator to recover your files." => "Kui sa ei mäleta oma vana parooli, siis palu oma süsteemihalduril taastada ligipääs failidele.", "Old log-in password" => "Vana sisselogimise parool", "Current log-in password" => "Praegune sisselogimise parool", diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php index 50a73bd5f9a..3486b8db51b 100644 --- a/apps/files_external/appinfo/app.php +++ b/apps/files_external/appinfo/app.php @@ -111,9 +111,9 @@ OC_Mount_Config::registerBackend('\OC\Files\Storage\Swift', array( 'user' => (string)$l->t('Username'), 'bucket' => (string)$l->t('Bucket'), 'region' => '&'.$l->t('Region (optional for OpenStack Object Storage)'), - 'key' => '*'.$l->t('API Key (required for Rackspace Cloud Files)'), + 'key' => '&*'.$l->t('API Key (required for Rackspace Cloud Files)'), 'tenant' => '&'.$l->t('Tenantname (required for OpenStack Object Storage)'), - 'password' => '*'.$l->t('Password (required for OpenStack Object Storage)'), + 'password' => '&*'.$l->t('Password (required for OpenStack Object Storage)'), 'service_name' => '&'.$l->t('Service Name (required for OpenStack Object Storage)'), 'url' => '&'.$l->t('URL of identity endpoint (required for OpenStack Object Storage)'), 'timeout' => '&'.$l->t('Timeout of HTTP requests in seconds'), diff --git a/apps/files_external/l10n/da.php b/apps/files_external/l10n/da.php index 5f8e3a92c67..34b6261fae1 100644 --- a/apps/files_external/l10n/da.php +++ b/apps/files_external/l10n/da.php @@ -15,6 +15,7 @@ $TRANSLATIONS = array( "Amazon S3 and compliant" => "Amazon S3 og kompatible", "Access Key" => "Adgangsnøgle", "Secret Key" => "Hemmelig Nøgle ", +"Hostname" => "Værtsnavn", "Port" => "Port", "Region" => "Region", "Enable SSL" => "Aktiver SSL", @@ -35,6 +36,7 @@ $TRANSLATIONS = array( "Password (required for OpenStack Object Storage)" => "Adgangskode (påkrævet for OpenStack Object Storage)", "Service Name (required for OpenStack Object Storage)" => "Service Navn (påkrævet for OpenStack Object Storage)", "URL of identity endpoint (required for OpenStack Object Storage)" => "URL på slutpunkt for identitet (påkrævet for OpenStack Object Storage)", +"Timeout of HTTP requests in seconds" => "Tidsudløb for HTTP-forespørgsler i sekunder", "Share" => "Del", "SMB / CIFS using OC login" => "SMB / CIFS med OC-login", "Username as share" => "Brugernavn som deling", @@ -47,6 +49,8 @@ $TRANSLATIONS = array( "Error configuring Google Drive storage" => "Fejl ved konfiguration af Google Drive plads", "Personal" => "Personligt", "System" => "System", +"All users. Type to select user or group." => "Alle brugere. Indtast for at vælge bruger eller gruppe.", +"(group)" => "(gruppe)", "Saved" => "Gemt", "<b>Note:</b> " => "<b>Note:</b> ", " and " => "og", diff --git a/apps/files_external/l10n/de_DE.php b/apps/files_external/l10n/de_DE.php index e55b0f3dbf6..fbeacb43178 100644 --- a/apps/files_external/l10n/de_DE.php +++ b/apps/files_external/l10n/de_DE.php @@ -19,7 +19,7 @@ $TRANSLATIONS = array( "Port" => "Port", "Region" => "Region", "Enable SSL" => "SSL aktivieren", -"Enable Path Style" => "Pfad-Stil aktivieren", +"Enable Path Style" => "Pfadstil aktivieren", "App key" => "App-Schlüssel", "App secret" => "Geheime Zeichenkette der App", "Host" => "Host", @@ -40,9 +40,9 @@ $TRANSLATIONS = array( "Share" => "Teilen", "SMB / CIFS using OC login" => "SMB / CIFS mit OC-Login", "Username as share" => "Benutzername als Freigabe", -"URL" => "URL", +"URL" => "Adresse", "Secure https://" => "Sicherer HTTPS://", -"Remote subfolder" => "Remote-Unterordner:", +"Remote subfolder" => "Entfernter Unterordner:", "Access granted" => "Zugriff gestattet", "Error configuring Dropbox storage" => "Fehler beim Einrichten von Dropbox", "Grant access" => "Zugriff gestatten", diff --git a/apps/files_external/l10n/es.php b/apps/files_external/l10n/es.php index 1692d94fd44..07cbd4a2d3c 100644 --- a/apps/files_external/l10n/es.php +++ b/apps/files_external/l10n/es.php @@ -15,6 +15,7 @@ $TRANSLATIONS = array( "Amazon S3 and compliant" => "Amazon S3 y compatibilidad", "Access Key" => "Clave de Acceso", "Secret Key" => "Clave Secreta", +"Hostname" => "Nombre de equipo", "Port" => "Puerto", "Region" => "Región", "Enable SSL" => "Habilitar SSL", diff --git a/apps/files_external/l10n/et_EE.php b/apps/files_external/l10n/et_EE.php index 01fe9db3b1d..55992a44e6d 100644 --- a/apps/files_external/l10n/et_EE.php +++ b/apps/files_external/l10n/et_EE.php @@ -15,6 +15,7 @@ $TRANSLATIONS = array( "Amazon S3 and compliant" => "Amazon S3 ja ühilduv", "Access Key" => "Ligipääsu võti", "Secret Key" => "Salavõti", +"Hostname" => "Hostinimi", "Port" => "Port", "Region" => "Piirkond", "Enable SSL" => "SSL-i kasutamine", @@ -35,6 +36,7 @@ $TRANSLATIONS = array( "Password (required for OpenStack Object Storage)" => "Parool (vajalik OpenStack Object Storage puhul)", "Service Name (required for OpenStack Object Storage)" => "Teenuse nimi (vajalik OpenStack Object Storage puhul)", "URL of identity endpoint (required for OpenStack Object Storage)" => "Tuvastuse URL lõpp-punkt (vajalik OpenStack Object Storage puhul)", +"Timeout of HTTP requests in seconds" => "HTTP päringute aegumine sekundites", "Share" => "Jaga", "SMB / CIFS using OC login" => "SMB / CIFS kasutades OC logimist", "Username as share" => "Kasutajanimi kui jagamine", diff --git a/apps/files_external/l10n/fr.php b/apps/files_external/l10n/fr.php index bb164cbadb3..b31415b48f9 100644 --- a/apps/files_external/l10n/fr.php +++ b/apps/files_external/l10n/fr.php @@ -15,6 +15,7 @@ $TRANSLATIONS = array( "Amazon S3 and compliant" => "Compatible avec Amazon S3", "Access Key" => "Clé d'accès", "Secret Key" => "Clé secrète", +"Hostname" => "Nom de l'hôte", "Port" => "Port", "Region" => "Région", "Enable SSL" => "Activer SSL", @@ -35,6 +36,7 @@ $TRANSLATIONS = array( "Password (required for OpenStack Object Storage)" => "Mot de passe (requis pour OpenStack Object Storage)", "Service Name (required for OpenStack Object Storage)" => "Nom du service (requit pour le stockage OpenStack)", "URL of identity endpoint (required for OpenStack Object Storage)" => "URL du point d'accès d'identité (requis pour le stockage OpenStack)", +"Timeout of HTTP requests in seconds" => "Temps maximal de requête HTTP en seconde", "Share" => "Partager", "SMB / CIFS using OC login" => "SMB / CIFS utilise le nom d'utilisateur OC", "Username as share" => "Nom d'utilisateur du partage", @@ -47,6 +49,8 @@ $TRANSLATIONS = array( "Error configuring Google Drive storage" => "Erreur lors de la configuration du support de stockage Google Drive", "Personal" => "Personnel", "System" => "Système", +"All users. Type to select user or group." => "Tous les utilisateurs. Commencez à saisir pour sélectionner un utilisateur ou un groupe.", +"(group)" => "(groupe)", "Saved" => "Sauvegarder", "<b>Note:</b> " => "<b>Attention :</b>", " and " => "et", diff --git a/apps/files_external/l10n/ja.php b/apps/files_external/l10n/ja.php index 84e261307b4..494708e63dd 100644 --- a/apps/files_external/l10n/ja.php +++ b/apps/files_external/l10n/ja.php @@ -15,6 +15,7 @@ $TRANSLATIONS = array( "Amazon S3 and compliant" => "Amazon S3 と互換ストレージ", "Access Key" => "アクセスキー", "Secret Key" => "シークレットキー", +"Hostname" => "ホスト名", "Port" => "ポート", "Region" => "都道府県", "Enable SSL" => "SSLを有効", @@ -35,6 +36,7 @@ $TRANSLATIONS = array( "Password (required for OpenStack Object Storage)" => "パスワード (OpenStack Object Storage用に必要)", "Service Name (required for OpenStack Object Storage)" => "サービス名 (OpenStack Object Storage用に必要)", "URL of identity endpoint (required for OpenStack Object Storage)" => "識別用エンドポイントURL (OpenStack Object Storage用に必要)", +"Timeout of HTTP requests in seconds" => "HTTP接続タイムアウト秒数", "Share" => "共有", "SMB / CIFS using OC login" => "ownCloudログインで SMB/CIFSを使用", "Username as share" => "共有名", @@ -47,6 +49,8 @@ $TRANSLATIONS = array( "Error configuring Google Drive storage" => "Googleドライブストレージの設定エラー", "Personal" => "個人", "System" => "システム", +"All users. Type to select user or group." => "全てのユーザー.ユーザー、グループを追加", +"(group)" => "(グループ)", "Saved" => "保存されました", "<b>Note:</b> " => "<b>注意:</b> ", " and " => "と", diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php index 47ab3294673..1c56d180e2f 100644 --- a/apps/files_external/lib/swift.php +++ b/apps/files_external/lib/swift.php @@ -26,6 +26,7 @@ use Guzzle\Http\Exception\ClientErrorResponseException; use OpenCloud; use OpenCloud\Common\Exceptions; use OpenCloud\OpenStack; +use OpenCloud\Rackspace; use OpenCloud\ObjectStore\Resource\DataObject; use OpenCloud\ObjectStore\Exception; @@ -67,15 +68,16 @@ class Swift extends \OC\Files\Storage\Common { return $path; } - const SUBCONTAINER_FILE='.subcontainers'; + const SUBCONTAINER_FILE = '.subcontainers'; /** * translate directory path to container name + * * @param string $path * @return string */ private function getContainerName($path) { - $path=trim(trim($this->root, '/') . "/".$path, '/.'); + $path = trim(trim($this->root, '/') . "/" . $path, '/.'); return str_replace('/', '\\', $path); } @@ -93,20 +95,21 @@ class Swift extends \OC\Files\Storage\Common { } public function __construct($params) { - if ((!isset($params['key']) and !isset($params['password'])) - or !isset($params['user']) or !isset($params['bucket']) - or !isset($params['region'])) { + if ((empty($params['key']) and empty($params['password'])) + or empty($params['user']) or empty($params['bucket']) + or empty($params['region']) + ) { throw new \Exception("API Key or password, Username, Bucket and Region have to be configured."); } $this->id = 'swift::' . $params['user'] . md5($params['bucket']); $this->bucket = $params['bucket']; - if (!isset($params['url'])) { + if (empty($params['url'])) { $params['url'] = 'https://identity.api.rackspacecloud.com/v2.0/'; } - if (!isset($params['service_name'])) { + if (empty($params['service_name'])) { $params['service_name'] = 'cloudFiles'; } @@ -114,21 +117,25 @@ class Swift extends \OC\Files\Storage\Common { 'username' => $params['user'], ); - if (isset($params['password'])) { + if (!empty($params['password'])) { $settings['password'] = $params['password']; - } else if (isset($params['key'])) { + } else if (!empty($params['key'])) { $settings['apiKey'] = $params['key']; } - if (isset($params['tenant'])) { + if (!empty($params['tenant'])) { $settings['tenantName'] = $params['tenant']; } - if (isset($params['timeout'])) { + if (!empty($params['timeout'])) { $settings['timeout'] = $params['timeout']; } - $this->anchor = new OpenStack($params['url'], $settings); + if (isset($settings['apiKey'])) { + $this->anchor = new Rackspace($params['url'], $settings); + } else { + $this->anchor = new OpenStack($params['url'], $settings); + } $this->connection = $this->anchor->objectStoreService($params['service_name'], $params['region']); @@ -150,7 +157,7 @@ class Swift extends \OC\Files\Storage\Common { return false; } - if($path !== '.') { + if ($path !== '.') { $path .= '/'; } @@ -236,7 +243,7 @@ class Swift extends \OC\Files\Storage\Common { \OC\Files\Stream\Dir::register('swift' . $path, $files); return opendir('fakedir://swift' . $path); - } catch (Exception $e) { + } catch (\Exception $e) { \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); return false; } @@ -246,11 +253,14 @@ class Swift extends \OC\Files\Storage\Common { public function stat($path) { $path = $this->normalizePath($path); - if ($this->is_dir($path) && $path != '.') { + if ($path === '.') { + $path = ''; + } else if ($this->is_dir($path)) { $path .= '/'; } try { + /** @var DataObject $object */ $object = $this->container->getPartialObject($path); } catch (ClientErrorResponseException $e) { \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); @@ -274,7 +284,7 @@ class Swift extends \OC\Files\Storage\Common { } $stat = array(); - $stat['size'] = (int) $object->getContentLength(); + $stat['size'] = (int)$object->getContentLength(); $stat['mtime'] = $mtime; $stat['atime'] = time(); return $stat; @@ -416,7 +426,7 @@ class Swift extends \OC\Files\Storage\Common { try { $source = $this->container->getPartialObject($path1); - $source->copy($this->bucket.'/'.$path2); + $source->copy($this->bucket . '/' . $path2); } catch (ClientErrorResponseException $e) { \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); return false; @@ -429,7 +439,7 @@ class Swift extends \OC\Files\Storage\Common { try { $source = $this->container->getPartialObject($path1 . '/'); - $source->copy($this->bucket.'/'.$path2 . '/'); + $source->copy($this->bucket . '/' . $path2 . '/'); } catch (ClientErrorResponseException $e) { \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); return false; @@ -499,6 +509,28 @@ class Swift extends \OC\Files\Storage\Common { unlink($tmpFile); } + public function hasUpdated($path, $time) { + if ($this->is_file($path)) { + return parent::hasUpdated($path, $time); + } + $path = $this->normalizePath($path); + $dh = $this->opendir($path); + $content = array(); + while (($file = readdir($dh)) !== false) { + $content[] = $file; + } + if ($path === '.') { + $path = ''; + } + $cachedContent = $this->getCache()->getFolderContents($path); + $cachedNames = array_map(function ($content) { + return $content['name']; + }, $cachedContent); + sort($cachedNames); + sort($content); + return $cachedNames != $content; + } + /** * check if curl is installed */ diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index bcf99d01edb..bf90c0b5dfc 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -1,5 +1,7 @@ <?php // Load other apps for file previews +use OCA\Files_Sharing\Helper; + OC_App::loadApps(); $appConfig = \OC::$server->getAppConfig(); @@ -11,8 +13,12 @@ if ($appConfig->getValue('core', 'shareapi_allow_links', 'yes') !== 'yes') { exit(); } +// Legacy sharing links via public.php have the token in $GET['t'] if (isset($_GET['t'])) { $token = $_GET['t']; +} + +if (isset($token)) { $linkItem = OCP\Share::getShareByToken($token, false); if (is_array($linkItem) && isset($linkItem['uid_owner'])) { // seems to be a valid share @@ -132,6 +138,7 @@ if (isset($path)) { $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path)); $tmpl->assign('dirToken', $linkItem['token']); $tmpl->assign('sharingToken', $token); + $tmpl->assign('server2serversharing', Helper::isOutgoingServer2serverShareEnabled()); $tmpl->assign('protected', isset($linkItem['share_with']) ? 'true' : 'false'); $urlLinkIdentifiers= (isset($token)?'&t='.$token:'') diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php index 42103296d87..a4b3289d4c6 100644 --- a/apps/files_sharing/templates/public.php +++ b/apps/files_sharing/templates/public.php @@ -23,13 +23,18 @@ <div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div> <div class="header-right"> <span id="details"> - <span id="save" data-protected="<?php p($_['protected'])?>" data-owner="<?php p($_['displayName'])?>" data-name="<?php p($_['filename'])?>"> + <?php + if ($_['server2serversharing']) { + ?> + <span id="save" data-protected="<?php p($_['protected']) ?>" + data-owner="<?php p($_['displayName']) ?>" data-name="<?php p($_['filename']) ?>"> <button id="save-button"><?php p($l->t('Add to your ownCloud')) ?></button> <form class="save-form hidden" action="#"> <input type="text" id="remote_address" placeholder="example.com/owncloud"/> <button id="save-button-confirm" class="icon-confirm svg"></button> </form> </span> + <?php } ?> <a href="<?php p($_['downloadURL']); ?>" id="download" class="button"> <img class="svg" alt="" src="<?php print_unescaped(OCP\image_path("core", "actions/download.svg")); ?>"/> <span id="download-text"><?php p($l->t('Download'))?></span> diff --git a/apps/user_ldap/l10n/bn_BD.php b/apps/user_ldap/l10n/bn_BD.php index 8cabd10a5d2..4b8bcc51126 100644 --- a/apps/user_ldap/l10n/bn_BD.php +++ b/apps/user_ldap/l10n/bn_BD.php @@ -1,14 +1,62 @@ <?php $TRANSLATIONS = array( +"Failed to clear the mappings." => "মানচিত্রায়ন মুছতে ব্যার্থ হলো।", +"Failed to delete the server configuration" => "সার্ভার কনফিগারেশন মোছা ব্যার্থ হলো", +"The configuration is valid and the connection could be established!" => "কনফিগারেশনটি বৈধ এবং যোগাযোগ প্রতিষ্ঠা করা যায়!", +"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "কনফিগারেশনটি বৈধ তবে Bind ব্যার্থ। দয়া করে সার্ভার নিয়ামকসমূহ এবং ব্যবহারকারী পরীক্ষা করুন।", +"The configuration is invalid. Please have a look at the logs for further details." => "কনফিহারেশনটি অবৈধ। বিস্তারিত জানতে দয়া করে লগ দেখুন।", +"No action specified" => "কোন কার্যাদেশ সুনির্দিষ্ট নয়", +"No configuration specified" => " কোন কনফিগারেসন সুনির্দিষ্ট নয়", +"No data specified" => "কোন ডাটা সুনির্দিষ্ট নয়", +" Could not set configuration %s" => "%s কনফিগারেসন ঠিক করা গেল না", "Deletion failed" => "মুছার আদেশ ব্যার্থ হলো", +"Take over settings from recent server configuration?" => "সদ্য সার্ভার কনফিগারেসন থেকে নিয়ামকসমূহ নিতে হবে?", +"Keep settings?" => "নিয়ামকসমূহ সংরক্ষণ করবো?", +"{nthServer}. Server" => "{nthServer}. সার্ভার", +"Cannot add server configuration" => "সার্ভার কনফিগারেসন যোগ করা যাবেনা", +"mappings cleared" => "মানচিত্রায়ন মোছা হলো", "Success" => "সাফল্য", "Error" => "সমস্যা", -"_%s group found_::_%s groups found_" => array("",""), -"_%s user found_::_%s users found_" => array("",""), +"Please specify a Base DN" => "দয়া করে একটি Base DN নির্দিষ্ট করুন", +"Could not determine Base DN" => "Base DN নির্ধারণ করা গেলনা", +"Please specify the port" => "পোর্ট সুনির্দিষ্ট করুন", +"Configuration OK" => "কনফিগারেসন ঠিক আছে", +"Configuration incorrect" => "ভুল কনফিগারেসন", +"Configuration incomplete" => "অসম্পূর্ণ কনফিগারেসন", +"Select groups" => "গ্রুপ নির্ধারণ", +"Select object classes" => "অবজেক্ট ক্লাস নির্ধারণ", +"Select attributes" => "বৈশিষ্ট্য নির্ধারণ", +"Connection test succeeded" => "যোগাযোগ পরীক্ষা সার্থক", +"Connection test failed" => "যোগাযোগ পরীক্ষা ব্যার্থ", +"Do you really want to delete the current Server Configuration?" => "আপনি কি সত্যিই চলতি সার্ভার কনফিগারেসন মুছতে চান?", +"Confirm Deletion" => "মোছার আদেশ নিশ্চিত করুন", +"_%s group found_::_%s groups found_" => array("%s গ্রুপ পাওয়া গেছে","%s গ্রুপ পাওয়া গেছে"), +"_%s user found_::_%s users found_" => array("%s ব্যাবহারকারী পাওয়া গেছে","%s ব্যাবহারকারী পাওয়া গেছে"), +"Could not find the desired feature" => "চাহিদামাফিক ফিচারটি পাওয়া গেলনা", +"Invalid Host" => "অবৈধ হোস্ট", "Server" => "সার্ভার", +"User Filter" => "ব্যবহারকারী তালিকা ছাঁকনী", +"Login Filter" => "প্রবেশ ছাঁকনী", "Group Filter" => "গোষ্ঠী ছাঁকনী", "Save" => "সংরক্ষণ", +"Test Configuration" => "পরীক্ষামূলক কনফিগারেসন", "Help" => "সহায়িকা", +"Groups meeting these criteria are available in %s:" => "প্রদত্ত বৈশিষ্ট্য অনুযায়ী %s এ প্রাপ্তব্য গ্রুপসমূহ:", +"only those object classes:" => "শুধুমাত্র সেইসব অবজেক্ট ক্লাস:", +"only from those groups:" => "শুধুমাত্র বর্ণিত গ্রুপসমূহ হতে:", +"Edit raw filter instead" => "অসম্পূর্ণ ফিল্টার সম্পাদনা করুন", +"Raw LDAP filter" => "অসম্পূর্ণ LDAP ফিল্টার", +"The filter specifies which LDAP groups shall have access to the %s instance." => "ফিল্টারটি %s সার্ভারে কোন কোন LDAP গ্রুপ প্রবেশাধিকার পাবে তা নির্ধারণ করে।", +"groups found" => "গ্রুপ পাওয়া গেছে", +"Users login with this attribute:" => "এই বৈশিষ্ট্য নিয়ে ব্যবহারকারী প্রবেশ করতে পারেন:", +"LDAP Username:" => "LDAP ব্যাবহারকারী নাম:", +"LDAP Email Address:" => "LDAP ই-মেইল ঠিকানা:", +"Other Attributes:" => "অন্যান্য বৈশিষ্ট্য:", +"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "প্রবেশ প্রচেষ্টা নিলে প্রযোজ্য ফিল্টার নির্ধারণ করে। প্রবেশকালে %%uid ব্যাবহারকারীর নামকে প্রতিস্থাপন করে। ঊদাহরণ: \"uid=%%uid\"", +"1. Server" => "1. সার্ভার", +"%s. Server:" => "%s. সার্ভার:", +"Add Server Configuration" => "সার্ভার কনফিগারেসন যোগ কর", +"Delete Configuration" => "কনফিগারেসন মুছে ফেল", "Host" => "হোস্ট", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL আবশ্যক না হলে আপনি এই প্রটোকলটি মুছে ফেলতে পারেন । এরপর শুরু করুন এটা দিয়ে ldaps://", "Port" => "পোর্ট", @@ -16,7 +64,9 @@ $TRANSLATIONS = array( "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. পরিচয় গোপন রেখে অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।", "Password" => "কূটশব্দ", "For anonymous access, leave DN and Password empty." => "অজ্ঞাতকুলশীল অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।", +"One Base DN per line" => "লাইনপ্রতি একটি Base DN", "You can specify Base DN for users and groups in the Advanced tab" => "সুচারু ট্যঅবে গিয়ে আপনি ব্যবহারকারি এবং গোষ্ঠীসমূহের জন্য ভিত্তি DN নির্ধারণ করতে পারেন।", +"users found" => "ব্যাবহারকারী পাওয়া গেছে", "Back" => "পেছনে যাও", "Continue" => "চালিয়ে যাও", "Expert" => "দক্ষ", diff --git a/apps/user_ldap/l10n/da.php b/apps/user_ldap/l10n/da.php index 73a183cb76e..d8639caf984 100644 --- a/apps/user_ldap/l10n/da.php +++ b/apps/user_ldap/l10n/da.php @@ -1,37 +1,75 @@ <?php $TRANSLATIONS = array( +"Failed to clear the mappings." => "Mislykkedes med at rydde afbildningerne.", "Failed to delete the server configuration" => "Kunne ikke slette server konfigurationen", "The configuration is valid and the connection could be established!" => "Konfigurationen er korrekt og forbindelsen kunne etableres!", +"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Konfigurationen er gyldig, men Bind'en mislykkedes. Tjek venligst serverindstillingerne og akkreditiverne.", +"The configuration is invalid. Please have a look at the logs for further details." => "Konfigurationen er ugyldig. Se venligst i loggen for yderligere detaljer.", +"No action specified" => "Der er ikke angivet en handling", +"No configuration specified" => "Der er ikke angivet en konfiguration", +"No data specified" => "Der er ikke angivet data", +" Could not set configuration %s" => "Kunne ikke indstille konfigurationen %s", "Deletion failed" => "Fejl ved sletning", "Take over settings from recent server configuration?" => "Overtag indstillinger fra nylig server konfiguration? ", "Keep settings?" => "Behold indstillinger?", +"{nthServer}. Server" => "{nthServer}. server", "Cannot add server configuration" => "Kan ikke tilføje serverkonfiguration", +"mappings cleared" => "afbildninger blev ryddet", "Success" => "Succes", "Error" => "Fejl", +"Please specify a Base DN" => "Angiv venligst en Base DN", +"Could not determine Base DN" => "Kunne ikke fastslå Base DN", +"Please specify the port" => "Angiv venligst porten", +"Configuration OK" => "Konfigurationen er OK", +"Configuration incorrect" => "Konfigurationen er ikke korrekt", +"Configuration incomplete" => "Konfigurationen er ikke komplet", "Select groups" => "Vælg grupper", +"Select object classes" => "Vælg objektklasser", +"Select attributes" => "Vælg attributter", "Connection test succeeded" => "Forbindelsestest lykkedes", "Connection test failed" => "Forbindelsestest mislykkedes", "Do you really want to delete the current Server Configuration?" => "Ønsker du virkelig at slette den nuværende Server Konfiguration?", "Confirm Deletion" => "Bekræft Sletning", -"_%s group found_::_%s groups found_" => array("",""), -"_%s user found_::_%s users found_" => array("",""), +"_%s group found_::_%s groups found_" => array("Der blev fundet %s gruppe","Der blev fundet %s grupper"), +"_%s user found_::_%s users found_" => array("Der blev fundet %s bruger","Der blev fundet %s brugere"), +"Could not find the desired feature" => "Fandt ikke den ønskede funktion", +"Invalid Host" => "Ugyldig vært", +"Server" => "Server", +"User Filter" => "Brugerfilter", +"Login Filter" => "Login-filter", "Group Filter" => "Gruppe Filter", "Save" => "Gem", "Test Configuration" => "Test Konfiguration", "Help" => "Hjælp", +"Groups meeting these criteria are available in %s:" => "Grupper som modsvarer disse kriterier er tilgængelige i %s:", +"only those object classes:" => "kun disse objektklasser:", +"only from those groups:" => "kun fra disse grupper:", +"Edit raw filter instead" => "Redigér det rå filter i stedet", +"Raw LDAP filter" => "Råt LDAP-filter", +"groups found" => "grupper blev fundet", +"Users login with this attribute:" => "Brugeres login med dette attribut:", +"LDAP Username:" => "LDAP-brugernavn:", +"LDAP Email Address:" => "LDAP-emailadresse:", +"Other Attributes:" => "Andre attributter:", +"1. Server" => "1. server", +"%s. Server:" => "%s. server:", "Add Server Configuration" => "Tilføj Server Konfiguration", +"Delete Configuration" => "Slet konfiguration", "Host" => "Host", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Du kan udelade protokollen, medmindre du skal bruge SSL. Start i så fald med ldaps://", "Port" => "Port", "User DN" => "Bruger DN", "Password" => "Kodeord", "For anonymous access, leave DN and Password empty." => "For anonym adgang, skal du lade DN og Adgangskode tomme.", +"One Base DN per line" => "Ét Base DN per linje", "You can specify Base DN for users and groups in the Advanced tab" => "You can specify Base DN for users and groups in the Advanced tab", "Back" => "Tilbage", "Continue" => "Videre", +"Expert" => "Ekspert", "Advanced" => "Avanceret", "Connection Settings" => "Forbindelsesindstillinger ", "Configuration Active" => "Konfiguration Aktiv", +"When unchecked, this configuration will be skipped." => "Hvis der ikke er markeret, så springes denne konfiguration over.", "Backup (Replica) Host" => "Backup (Replika) Vært", "Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Opgiv en ikke obligatorisk backup server. Denne skal være en replikation af hoved-LDAP/AD serveren.", "Backup (Replica) Port" => "Backup (Replika) Port", @@ -39,13 +77,24 @@ $TRANSLATIONS = array( "Only connect to the replica server." => "Forbind kun til replika serveren.", "Turn off SSL certificate validation." => "Deaktiver SSL certifikat validering", "Cache Time-To-Live" => "Cache Time-To-Live", +"in seconds. A change empties the cache." => "i sekunder. En ændring vil tømme cachen.", "User Display Name Field" => "User Display Name Field", "Base User Tree" => "Base Bruger Træ", +"One User Base DN per line" => "Én bruger-Base DN per linje", +"Optional; one attribute per line" => "Valgfrit; én attribut per linje", "Base Group Tree" => "Base Group Tree", +"One Group Base DN per line" => "Ét gruppe-Base DN per linje", +"Group Search Attributes" => "Attributter for gruppesøgning", "Group-Member association" => "Group-Member association", +"Nested Groups" => "Indlejrede grupper", +"Special Attributes" => "Specielle attributter", "Quota Field" => "Kvote Felt", "in bytes" => "i bytes", "Email Field" => "Email Felt", -"Internal Username" => "Internt Brugernavn" +"Internal Username" => "Internt Brugernavn", +"Internal Username Attribute:" => "Internt attribut for brugernavn:", +"Override UUID detection" => "Tilsidesæt UUID-detektering", +"UUID Attribute for Users:" => "UUID-attribut for brugere:", +"UUID Attribute for Groups:" => "UUID-attribut for grupper:" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php index dceb2206dbe..7f0d32ead68 100644 --- a/apps/user_ldap/lib/wizard.php +++ b/apps/user_ldap/lib/wizard.php @@ -379,7 +379,7 @@ class Wizard extends LDAPUtility { do { $result = $this->access->searchGroups($filter, array('cn'), $limit, $offset); foreach($result as $item) { - $groupNames[] = $item['cn']; + $groupNames[] = $item[0]; $groupEntries[] = $item; } $offset += $limit; diff --git a/apps/user_webdavauth/l10n/bn_BD.php b/apps/user_webdavauth/l10n/bn_BD.php index 30ca2cdfa06..e182e26e9f5 100644 --- a/apps/user_webdavauth/l10n/bn_BD.php +++ b/apps/user_webdavauth/l10n/bn_BD.php @@ -1,6 +1,8 @@ <?php $TRANSLATIONS = array( +"WebDAV Authentication" => "WebDAV অনুমোদন", "Address:" => "ঠিকানা", -"Save" => "সংরক্ষণ" +"Save" => "সংরক্ষণ", +"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ব্যবহারকারীর তথ্যাদি এই ঠিকানায় পাঠানো হবে। এই প্লাগইন প্রত্যুত্তর পরীক্ষা করে দেখবে এবং HTTP statuscodes 401 and 403 কে অবৈধ তথ্যাদিরূপে অনুবাদ করে অন্য সকল প্রত্যুত্তরকে বৈধতা দেবে। " ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/config/config.sample.php b/config/config.sample.php index d232e18ab08..71105a8b10d 100755 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -35,6 +35,9 @@ $CONFIG = array( /* Define the salt used to hash the user passwords. All your user passwords are lost if you lose this string. */ "passwordsalt" => "", +/* Secret used by ownCloud for various purposes, e.g. to encrypt data. If you lose this string there will be data corruption. */ +"secret" => "", + /* Force use of HTTPS connection (true = use HTTPS) */ "forcessl" => false, diff --git a/core/ajax/update.php b/core/ajax/update.php index 627ada080c8..419992c9891 100644 --- a/core/ajax/update.php +++ b/core/ajax/update.php @@ -3,8 +3,12 @@ set_time_limit(0); require_once '../../lib/base.php'; if (OC::checkUpgrade(false)) { + // if a user is currently logged in, their session must be ignored to + // avoid side effects + \OC_User::setIncognitoMode(true); + $l = new \OC_L10N('core'); - $eventSource = new OC_EventSource(); + $eventSource = \OC::$server->createEventSource(); $updater = new \OC\Updater(\OC_Log::$object); $updater->listen('\OC\Updater', 'maintenanceStart', function () use ($eventSource, $l) { $eventSource->send('success', (string)$l->t('Turned on maintenance mode')); diff --git a/core/css/header.css b/core/css/header.css index f83ef451ce6..0223f5f18b9 100644 --- a/core/css/header.css +++ b/core/css/header.css @@ -42,8 +42,7 @@ } #header .logo { - background-image: url(../img/logo.svg); - background-repeat: no-repeat; + background: url(../img/logo.svg) no-repeat center; width: 252px; height: 120px; margin: 0 auto; diff --git a/core/css/styles.css b/core/css/styles.css index 2f8f9612f78..64b37c89b0b 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -39,31 +39,31 @@ body { #nojavascript { - position: absolute; + position: fixed; top: 0; bottom: 0; - z-index: 999; + z-index: 9000; width: 100%; text-align: center; - background-color: rgba(50,0,0,0.5); - color: white; - text-shadow: 0px 0px 5px black; + background-color: rgba(0,0,0,0.5); + color: #fff; line-height: 125%; - font-size: x-large; + font-size: 24px; } #nojavascript div { + display: block; + position: relative; width: 50%; - top: 40%; - position: absolute; - left: 50%; - margin-left: -25%; + top: 35%; + margin: 0px auto; } #nojavascript a { - color: #ccc; - text-decoration: underline; + color: #fff; + border-bottom: 2px dotted #fff; } -#nojavascript a:hover { - color: #aaa; +#nojavascript a:hover, +#nojavascript a:focus { + color: #ddd; } @@ -678,7 +678,6 @@ label.infield { #body-login .wrapper { min-height: 100%; margin: 0 auto -70px; - width: 300px; } #body-login footer, #body-login .push { height: 70px; diff --git a/core/js/js.js b/core/js/js.js index 9a60b0aad69..89682e3013f 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -246,6 +246,7 @@ var OC={ url = '/' + url; } + // TODO save somewhere whether the webserver is able to skip the index.php to have shorter links (e.g. for sharing) return OC.webroot + '/index.php' + _build(url, params); }, @@ -259,7 +260,7 @@ var OC={ filePath:function(app,type,file){ var isCore=OC.coreApps.indexOf(app)!==-1, link=OC.webroot; - if((file.substring(file.length-3) === 'php' || file.substring(file.length-3) === 'css') && !isCore){ + if(file.substring(file.length-3) === 'php' && !isCore){ link+='/index.php/apps/' + app; if (file != 'index.php') { link+='/'; diff --git a/core/js/setup.js b/core/js/setup.js index aa9dc895479..253a12d9e6f 100644 --- a/core/js/setup.js +++ b/core/js/setup.js @@ -23,18 +23,21 @@ $(document).ready(function() { $('#use_other_db').slideUp(250); $('#use_oracle_db').slideUp(250); $('#sqliteInformation').show(); + $('#dbname').attr('pattern','[0-9a-zA-Z$_-]+'); }); $('#mysql,#pgsql,#mssql').click(function() { $('#use_other_db').slideDown(250); $('#use_oracle_db').slideUp(250); $('#sqliteInformation').hide(); + $('#dbname').attr('pattern','[0-9a-zA-Z$_-]+'); }); $('#oci').click(function() { $('#use_other_db').slideDown(250); $('#use_oracle_db').show(250); $('#sqliteInformation').hide(); + $('#dbname').attr('pattern','[0-9a-zA-Z$_-.]+'); }); $('input[checked]').trigger('click'); diff --git a/core/js/share.js b/core/js/share.js index f1652370d35..67ddd9c4870 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -672,8 +672,11 @@ OC.Share={ } // TODO: use oc webroot ? - var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service='+service+'&t='+token; - + if (service !== 'files') { + var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service='+service+'&t='+token; + } else { + var link = parent.location.protocol+'//'+location.host+OC.generateUrl('/s/')+token; + } } $('#linkText').val(link); $('#linkText').show('blind'); diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js index 3af56c490e6..c61528f6686 100644 --- a/core/js/tests/specs/coreSpec.js +++ b/core/js/tests/specs/coreSpec.js @@ -134,6 +134,26 @@ describe('Core base tests', function() { expect(escapeHTML('This is a good string without HTML.')).toEqual('This is a good string without HTML.'); }); }); + describe('filePath', function() { + beforeEach(function() { + OC.webroot = 'http://localhost'; + OC.appswebroots['files'] = OC.webroot + '/apps3/files'; + }); + afterEach(function() { + delete OC.appswebroots['files']; + }); + + it('Uses a direct link for css and images,' , function() { + expect(OC.filePath('core', 'css', 'style.css')).toEqual('http://localhost/core/css/style.css'); + expect(OC.filePath('files', 'css', 'style.css')).toEqual('http://localhost/apps3/files/css/style.css'); + expect(OC.filePath('core', 'img', 'image.png')).toEqual('http://localhost/core/img/image.png'); + expect(OC.filePath('files', 'img', 'image.png')).toEqual('http://localhost/apps3/files/img/image.png'); + }); + it('Routes PHP files via index.php,' , function() { + expect(OC.filePath('core', 'ajax', 'test.php')).toEqual('http://localhost/index.php/core/ajax/test.php'); + expect(OC.filePath('files', 'ajax', 'test.php')).toEqual('http://localhost/index.php/apps/files/ajax/test.php'); + }); + }); describe('Link functions', function() { var TESTAPP = 'testapp'; var TESTAPP_ROOT = OC.webroot + '/appsx/testapp'; diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js index 06c4b98df2a..e712ea58bc2 100644 --- a/core/js/tests/specs/shareSpec.js +++ b/core/js/tests/specs/shareSpec.js @@ -151,7 +151,7 @@ describe('OC.Share tests', function() { expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true); // this is how the OC.Share class does it... var link = parent.location.protocol + '//' + location.host + - OC.linkTo('', 'public.php')+'?service=files&t=tehtoken'; + OC.generateUrl('/s/') + 'tehtoken'; expect($('#dropdown #linkText').val()).toEqual(link); }); it('does not show populated link share when a link share exists for a different file', function() { @@ -243,7 +243,7 @@ describe('OC.Share tests', function() { expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true); // this is how the OC.Share class does it... var link = parent.location.protocol + '//' + location.host + - OC.linkTo('', 'public.php')+'?service=files&t=tehtoken'; + OC.generateUrl('/s/') + 'tehtoken'; expect($('#dropdown #linkText').val()).toEqual(link); // nested one @@ -258,7 +258,7 @@ describe('OC.Share tests', function() { expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true); // this is how the OC.Share class does it... link = parent.location.protocol + '//' + location.host + - OC.linkTo('', 'public.php')+'?service=files&t=anothertoken'; + OC.generateUrl('/s/') + 'anothertoken'; expect($('#dropdown #linkText').val()).toEqual(link); }); describe('expiration date', function() { diff --git a/core/l10n/af_ZA.php b/core/l10n/af_ZA.php index 9bf6340f45b..6bdbfe50be2 100644 --- a/core/l10n/af_ZA.php +++ b/core/l10n/af_ZA.php @@ -90,8 +90,6 @@ $TRANSLATIONS = array( "Security Warning" => "Sekuriteits waarskuwing", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Jou PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Opdateer asseblief jou PHP instelasie om %s veilig te gebruik", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Geen moontlikheid om 'n ewekansige getal genereer nie. Stel asb. die PHP OpenSSL byvoeging in werking.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sonder die moontlikheid om 'n ewekansige getal te genereer kan 'n aanvaller wagwoord herstel tekens voorspel en jou rekening oor neem.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Jou data gids en leers is moontlik toeganklik vanaf die internet omdat die .htaccess leer nie werk nie.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Vir inligting oor hoe om jou bediener behoorlik op te stel, sien asseblief die<a href=\"%s\" target=\"_blank\">dokumentasie</a>.", "Create an <strong>admin account</strong>" => "Skep `n <strong>admin-rekening</strong>", diff --git a/core/l10n/ar.php b/core/l10n/ar.php index 4c154be74d4..3f1d2854181 100644 --- a/core/l10n/ar.php +++ b/core/l10n/ar.php @@ -88,8 +88,6 @@ $TRANSLATIONS = array( "Security Warning" => "تحذير أمان", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "يرجى تحديث نسخة PHP لاستخدام %s بطريقة آمنة", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "لا يوجد مولّد أرقام عشوائية ، الرجاء تفعيل الـ PHP OpenSSL extension.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "بدون وجود مولد أرقام عشوائية آمن قد يتمكن المهاجم من التنبؤ بكلمات اعادة ضبط كلمة المرور والتمكن من السيطرة على حسابك", "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 <a href=\"%s\" target=\"_blank\">documentation</a>." => "لمزيد من المعلومات عن كيفية إعداد خادمك، يرجى الاطلاع على <a href=\"%s\" target=\"_blank\">صفحة المساعدة</a>.", "Create an <strong>admin account</strong>" => "أضف </strong>مستخدم رئيسي <strong>", diff --git a/core/l10n/ast.php b/core/l10n/ast.php index 8cd1a571c4b..0875508d227 100644 --- a/core/l10n/ast.php +++ b/core/l10n/ast.php @@ -145,8 +145,6 @@ $TRANSLATIONS = array( "Security Warning" => "Avisu de seguridá", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "La to versión de PHP ye vulnerable al ataque NULL Byte (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Por favor, anova la to instalación de PHP pa usar %s de mou seguru.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nun ta disponible'l xenerador de númberos al debalu, por favor activa la estensión PHP OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ensin un xenerador de númberos al debalu, un atacante podría aldovinar los tokens pa restablecer la contraseña y tomar el control de la cuenta.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "El to direutoriu de datos y ficheros seique ye accesible dende internet por mor qu'el ficheru .htaccess nun furrula.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Pa informase de cómo configurar el so sirvidor, por favor güeya la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" => "Crea una <strong>cuenta d'alministrador</strong>", @@ -163,7 +161,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Va usase SQLite como base de datos. Pa instalaciones más grandes, recomiéndase cambiar esto.", "Finish setup" => "Finar la configuración ", "Finishing …" => "Finando ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Esta aplicación necesita JavaScript pa funcionar correutamente. Por favor <a href=\"http://enable-javascript.com/\" target=\"_blank\">habilita JavaScript</a> y recarga esta interface.", "%s is available. Get more information on how to update." => "Ta disponible %s. Consigui más información en cómo anovar·", "Log out" => "Zarrar sesión", "Server side authentication failed!" => "Falló l'autenticación nel sirvidor!", diff --git a/core/l10n/az.php b/core/l10n/az.php index a214bb0334b..a2b65e38217 100644 --- a/core/l10n/az.php +++ b/core/l10n/az.php @@ -13,6 +13,8 @@ $TRANSLATIONS = array( "Settings" => "Quraşdırmalar", "Folder" => "Qovluq", "Saving..." => "Saxlama...", +"No" => "Xeyir", +"Yes" => "Bəli", "Ok" => "Oldu", "_{count} file conflict_::_{count} file conflicts_" => array("",""), "Cancel" => "Dayandır", @@ -23,6 +25,7 @@ $TRANSLATIONS = array( "Strong password" => "Çətin şifrə", "Share" => "Yayımla", "Error" => "Səhv", +"Share link" => "Linki yayımla", "Send" => "Göndər", "group" => "qrup", "can share" => "yayımlaya bilərsiniz", diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php index 0047bba7250..f57c17d9a54 100644 --- a/core/l10n/bg_BG.php +++ b/core/l10n/bg_BG.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Предупреждение за Сигурноста", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Твоята PHP версия е податлива на NULL Byte атака (CVE-2006-7243).", "Please update your PHP installation to use %s securely." => "Моля, обнови своята PHP инсталация, за да използваш %s сигурно.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Не е открит сигурен генератор на произволни числа, моля включи OpenSLL добавката за PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без сигурен генератор на произволни числа хакер може да предскаже линковете за възстановяване на паролата и да се сдобие с контрол върху твоят профил.", "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 <a href=\"%s\" target=\"_blank\">documentation</a>." => "За информация как правилно да настроиш сървъра си, моля прегледай <a href=\"%s\" target=\"_blank\">документацията</a>.", "Create an <strong>admin account</strong>" => "Създаване на <strong>админ профил</strong>.", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite ще бъде използван за база данни. За по-големи инсталации препоръчваме това да бъде променено.", "Finish setup" => "Завършване на настройките", "Finishing …" => "Завършване...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Програмата изисква JavaScript, за да работи правилно. Моля, <a href=\"http://enable-javascript.com/\" target=\"_blank\">включи JavaScript</a> и презареди страницата.", "%s is available. Get more information on how to update." => "%s е на разположение. Прочети повече как да обновиш. ", "Log out" => "Отписване", "Server side authentication failed!" => "Заверяването в сървъра неуспешно!", diff --git a/core/l10n/ca.php b/core/l10n/ca.php index 82132fa751c..d515002c95b 100644 --- a/core/l10n/ca.php +++ b/core/l10n/ca.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Avís de seguretat", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "La versió de PHP que useu és vulnerable a l'atac per NULL Byte (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Actualitzeu la instal·lació de PHP per usar %s de forma segura.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "No està disponible el generador de nombres aleatoris segurs, habiliteu l'extensió de PHP OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sense un generador de nombres aleatoris segurs un atacant podria predir els senyals per restablir la contrasenya i prendre-us el compte.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Per informació de com configurar el servidor, comproveu la <a href=\"%s\" target=\"_blank\">documentació</a>.", "Create an <strong>admin account</strong>" => "Crea un <strong>compte d'administrador</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "S'utilitzarà SQLite com a base de dades. Per instal·lacions grans recomanem que la canvieu.", "Finish setup" => "Acaba la configuració", "Finishing …" => "Acabant...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Aquesta aplicació necessita tenir JavaScript activat per funcionar correctament. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Activeu JavaScript</a> i carregueu aquesta interfície de nou.", "%s is available. Get more information on how to update." => "%s està disponible. Obtingueu més informació de com actualitzar.", "Log out" => "Surt", "Server side authentication failed!" => "L'autenticació del servidor ha fallat!", diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php index 04861c9dbc4..bd6beb08e42 100644 --- a/core/l10n/cs_CZ.php +++ b/core/l10n/cs_CZ.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Bezpečnostní upozornění", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Verze vašeho PHP je napadnutelná pomocí techniky \"NULL Byte\" (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Aktualizujte prosím vaši instanci PHP pro bezpečné používání %s.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Není dostupný žádný bezpečný generátor náhodných čísel. Povolte, prosím, rozšíření OpenSSL v PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez bezpečného generátoru náhodných čísel může útočník předpovědět token pro obnovu hesla a převzít kontrolu nad Vaším účtem.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Pro informace, jak správně nastavit váš server, se podívejte do <a href=\"%s\" target=\"_blank\">dokumentace</a>.", "Create an <strong>admin account</strong>" => "Vytvořit <strong>účet správce</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Bude použita databáze SQLite. Pro větší instalace doporučujeme toto změnit.", "Finish setup" => "Dokončit nastavení", "Finishing …" => "Dokončuji...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Tato aplikace vyžaduje pro svou správnou funkčnost povolený JavaScript. Prosím <a href=\"http://enable-javascript.com/\" target=\"_blank\">povolte JavaScript</a> a znovu načtěte toto rozhraní.", "%s is available. Get more information on how to update." => "%s je dostupná. Získejte více informací k postupu aktualizace.", "Log out" => "Odhlásit se", "Server side authentication failed!" => "Autentizace na serveru selhala!", diff --git a/core/l10n/cy_GB.php b/core/l10n/cy_GB.php index 5c61ddfb5e7..77169ad6960 100644 --- a/core/l10n/cy_GB.php +++ b/core/l10n/cy_GB.php @@ -74,8 +74,6 @@ $TRANSLATIONS = array( "Cloud not found" => "Methwyd canfod cwmwl", "Security Warning" => "Rhybudd Diogelwch", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Mae eich fersiwn PHP yn agored i ymosodiad NULL Byte (CVE-2006-7243)", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Does dim cynhyrchydd rhifau hap diogel ar gael, galluogwch estyniad PHP OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Heb gynhyrchydd rhifau hap diogel efallai y gall ymosodwr ragweld tocynnau ailosod cyfrinair a meddiannu eich cyfrif.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Mwy na thebyg fod modd cyrraedd eich cyfeiriadur data a ffeilau o'r rhyngrwyd oherwydd nid yw'r ffeil .htaccess yn gweithio. ", "Create an <strong>admin account</strong>" => "Crewch <strong>gyfrif gweinyddol</strong>", "Password" => "Cyfrinair", diff --git a/core/l10n/da.php b/core/l10n/da.php index 4faa85d8b86..1bde2e5917c 100644 --- a/core/l10n/da.php +++ b/core/l10n/da.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Sikkerhedsadvarsel", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Din PHP-version er sårbar overfor et NULL Byte angreb (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Opdater venligst din PHP installation for at anvende %s sikkert.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ingen sikker tilfældighedsgenerator til tal er tilgængelig. Aktiver venligst OpenSSL udvidelsen.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Uden en sikker tilfældighedsgenerator til tal kan en angriber måske gætte dit gendan kodeord og overtage din konto", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Dine data mappe og filer er sandsynligvis tilgængelige fra internettet fordi .htaccess filen ikke virker.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "For information om, hvordan du konfigurerer din server korrekt se <a href=\"%s\" target=\"_blank\">dokumentationen</a>.", "Create an <strong>admin account</strong>" => "Opret en <strong>administratorkonto</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite bliver brugt som database. For større installationer anbefaler vi at ændre dette.", "Finish setup" => "Afslut opsætning", "Finishing …" => "Færdigbehandler ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Programmet forudsætter at JavaScript er aktiveret for at kunne afvikles korrekt. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Aktiver JavaScript</a> og genindlæs siden..", "%s is available. Get more information on how to update." => "%s er tilgængelig. Få mere information om, hvordan du opdaterer.", "Log out" => "Log ud", "Server side authentication failed!" => "Server side godkendelse mislykkedes!", diff --git a/core/l10n/de.php b/core/l10n/de.php index ecb90aa29ab..8695d775293 100644 --- a/core/l10n/de.php +++ b/core/l10n/de.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Sicherheitswarnung", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Deine PHP Version ist durch die NULL Byte Attacke (CVE-2006-7243) angreifbar", "Please update your PHP installation to use %s securely." => "Bitte aktualisiere Deine PHP-Installation um %s sicher nutzen zu können.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktiviere die PHP-Erweiterung für OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage die Tokens für das Zurücksetzen der Passwörter vorherzusehen und Konten zu übernehmen.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Für Informationen, wie Du Deinen Server richtig konfigurierst, lies bitte die <a href=\"%s\" target=\"_blank\">Dokumentation</a>.", "Create an <strong>admin account</strong>" => "<strong>Administrator-Konto</strong> anlegen", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite wird als Datenbank benutzt. Für größere Installationen wird empfohlen, dies zu ändern.", "Finish setup" => "Installation abschließen", "Finishing …" => "Abschließen ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Diese Anwendung benötigt ein aktiviertes JavaScript zum korrekten Betrieb. Bitte <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktiviere JavaScript</a> und lade diese Schnittstelle neu.", "%s is available. Get more information on how to update." => "%s ist verfügbar. Hole weitere Informationen zu Aktualisierungen ein.", "Log out" => "Abmelden", "Server side authentication failed!" => "Serverseitige Authentifizierung fehlgeschlagen!", diff --git a/core/l10n/de_CH.php b/core/l10n/de_CH.php index 7acfbb8780e..84a48b98e8c 100644 --- a/core/l10n/de_CH.php +++ b/core/l10n/de_CH.php @@ -85,8 +85,6 @@ $TRANSLATIONS = array( "Security Warning" => "Sicherheitshinweis", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Ihre PHP Version ist durch die NULL Byte Attacke (CVE-2006-7243) angreifbar", "Please update your PHP installation to use %s securely." => "Bitte aktualisieren Sie Ihre PHP-Installation um %s sicher nutzen zu können.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktivieren Sie die PHP-Erweiterung für OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage, die Tokens für das Zurücksetzen der Passwörter vorherzusehen und Ihr Konto zu übernehmen.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Für Informationen, wie Sie Ihren Server richtig konfigurieren lesen Sie bitte die <a href=\"%s\" target=\"_blank\">Dokumentation</a>.", "Create an <strong>admin account</strong>" => "<strong>Administrator-Konto</strong> anlegen", diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php index 2b65d977ee1..72491fc27f9 100644 --- a/core/l10n/de_DE.php +++ b/core/l10n/de_DE.php @@ -6,7 +6,7 @@ $TRANSLATIONS = array( "Updated database" => "Datenbank aktualisiert", "Checked database schema update" => "Datenbank-Schemenaktualisierung geprüft", "Checked database schema update for apps" => "Datenbank-Schemenaktualisierung für Apps geprüft", -"Updated \"%s\" to %s" => "\"%s\" zu %s aktualisiert", +"Updated \"%s\" to %s" => "»%s« zu %s aktualisiert", "Disabled incompatible apps: %s" => "Deaktivierte inkompatible Apps: %s", "No image or file provided" => "Weder Bild noch ein Datei wurden zur Verfügung gestellt", "Unknown filetype" => "Unbekannter Dateityp", @@ -37,7 +37,7 @@ $TRANSLATIONS = array( "Folder" => "Ordner", "Image" => "Bild", "Audio" => "Audio", -"Saving..." => "Speichern...", +"Saving..." => "Speichervorgang …", "Couldn't send reset email. Please contact your administrator." => "Die E-Mail zum Zurücksetzen konnte nicht versendet werden. Bitte kontaktieren Sie Ihren Administrator.", "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.<br>If it is not there ask your local administrator." => "Der Link zum Rücksetzen Ihres Passworts ist an Ihre E-Mail-Adresse geschickt worden. Wenn Sie ihn nicht innerhalb einer vernünftigen Zeit empfängen, prüfen Sie Ihre Spam-Verzeichnisse.<br>Wenn er nicht dort ist, fragen Sie Ihren lokalen Administrator.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" => "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wiederzubekommen, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?", @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Sicherheitshinweis", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Ihre PHP Version ist durch die NULL Byte Attacke (CVE-2006-7243) angreifbar", "Please update your PHP installation to use %s securely." => "Bitte aktualisieren Sie Ihre PHP-Installation um %s sicher nutzen zu können.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktivieren Sie die PHP-Erweiterung für OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage, die Tokens für das Zurücksetzen der Passwörter vorherzusehen und Ihr Konto zu übernehmen.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Bitte lesen Sie die <a href=\"%s\" target=\"_blank\">Dokumentation</a>, um zu erfahren, wie Sie Ihren Server richtig konfigurieren können.", "Create an <strong>admin account</strong>" => "<strong>Administrator-Konto</strong> anlegen", @@ -165,10 +163,9 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite wird als Datenbank benutzt. Für größere Installationen wird empfohlen, dies zu ändern.", "Finish setup" => "Installation abschließen", "Finishing …" => "Abschließen ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Diese Anwendung benötigt ein aktiviertes JavaScript zum korrekten Betrieb. Bitte <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktivieren Sie JavaScript</a> und laden Sie diese Schnittstelle neu.", "%s is available. Get more information on how to update." => "%s ist verfügbar. Holen Sie weitere Informationen zu Aktualisierungen ein.", "Log out" => "Abmelden", -"Server side authentication failed!" => "Die Authentifizierung auf dem Server ist fehlgeschlagen!", +"Server side authentication failed!" => "Die Legitimierung auf dem Server ist fehlgeschlagen!", "Please contact your administrator." => "Bitte kontaktieren Sie Ihren Administrator.", "Forgot your password? Reset it!" => "Passwort vergessen? Setzen Sie es zurück!", "remember" => "merken", @@ -182,7 +179,7 @@ $TRANSLATIONS = array( "You are accessing the server from an untrusted domain." => "Sie greifen von einer nicht vertrauenswürdigen Domain auf den Server zu.", "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." => "Bitte kontaktieren Sie Ihren Administrator. Wenn Sie aktuell Administrator dieser Instanz sind, konfigurieren Sie bitte die \"trusted_domain\" - Einstellung in config/config.php. Eine Beispielkonfiguration wird unter config/config.sample.php bereit gestellt.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." => "Abhängig von Ihrer Konfiguration können Sie auch als Administrator, zum Vertrauen dieser Domain, den unteren Button verwenden.", -"Add \"%s\" as trusted domain" => "\"%s\" als vertrauenswürdige Domain hinzufügen", +"Add \"%s\" as trusted domain" => "»%s« als vertrauenswürdige Domain hinzufügen", "%s will be updated to version %s." => "%s wird auf Version %s aktualisiert.", "The following apps will be disabled:" => "Die folgenden Apps werden deaktiviert:", "The theme %s has been disabled." => "Das Theme %s wurde deaktiviert.", diff --git a/core/l10n/el.php b/core/l10n/el.php index df55094ae6b..1e3d1d973ab 100644 --- a/core/l10n/el.php +++ b/core/l10n/el.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Προειδοποίηση Ασφαλείας", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Η PHP ειναι ευαλωτη στην NULL Byte επιθεση (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Παρακαλώ ενημερώστε την εγκατάσταση της PHP ώστε να χρησιμοποιήσετε το %s με ασφάλεια.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Δεν είναι διαθέσιμο το πρόσθετο δημιουργίας τυχαίων αριθμών ασφαλείας, παρακαλώ ενεργοποιήστε το πρόσθετο της PHP, OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Χωρίς το πρόσθετο δημιουργίας τυχαίων αριθμών ασφαλείας, μπορεί να διαρρεύσει ο λογαριασμός σας από επιθέσεις στο διαδίκτυο.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Για πληροφορίες πως να ρυθμίσετε ορθά τον διακομιστή σας, παρακαλώ δείτε την <a href=\"%s\" target=\"_blank\">τεκμηρίωση</a>.", "Create an <strong>admin account</strong>" => "Δημιουργήστε έναν <strong>λογαριασμό διαχειριστή</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Η SQLIte θα χρησιμοποιηθεί ως βάση δεδομένων. Για μεγαλύτερες εγκαταστάσεις σας συνιστούμε να το αλλάξετε.", "Finish setup" => "Ολοκλήρωση εγκατάστασης", "Finishing …" => "Ολοκλήρωση...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Αυτή η εφαρμογή απαιτεί η JavaScript να είναι ενεργοποιημένη για σωστή λειτουργία. Παρακαλώ <a href=\"http://enable-javascript.com/\" target=\"_blank\">ενεργοποιήστε τη JavaScript</a> και επαναφορτώστε αυτή τη διεπαφή.", "%s is available. Get more information on how to update." => "%s είναι διαθέσιμη. Δείτε περισσότερες πληροφορίες στο πώς να αναβαθμίσετε.", "Log out" => "Αποσύνδεση", "Server side authentication failed!" => "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!", diff --git a/core/l10n/en_GB.php b/core/l10n/en_GB.php index ccfd56d02af..5aa403748a5 100644 --- a/core/l10n/en_GB.php +++ b/core/l10n/en_GB.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Security Warning", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Please update your PHP installation to use %s securely.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "No secure random number generator is available, please enable the PHP OpenSSL extension.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Your data directory and files are probably accessible from the internet because the .htaccess file does not work.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>.", "Create an <strong>admin account</strong>" => "Create an <strong>admin account</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite will be used as database. For larger installations we recommend changing this.", "Finish setup" => "Finish setup", "Finishing …" => "Finishing …", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface.", "%s is available. Get more information on how to update." => "%s is available. Get more information on how to update.", "Log out" => "Log out", "Server side authentication failed!" => "Server side authentication failed!", diff --git a/core/l10n/eo.php b/core/l10n/eo.php index a17b532c603..59bc44327be 100644 --- a/core/l10n/eo.php +++ b/core/l10n/eo.php @@ -105,7 +105,6 @@ $TRANSLATIONS = array( "Security Warning" => "Sekureca averto", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Via PHP versio estas sendefenda je la NULL bajto atako (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Bonvolu ĝisdatigi vian PHP-instalon por uzi %s sekure.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ne disponeblas sekura generilo de hazardaj numeroj; bonvolu kapabligi la OpenSSL-kromaĵon por PHP.", "Create an <strong>admin account</strong>" => "Krei <strong>administran konton</strong>", "Password" => "Pasvorto", "Data folder" => "Datuma dosierujo", diff --git a/core/l10n/es.php b/core/l10n/es.php index f4ad2011253..23ff798eef9 100644 --- a/core/l10n/es.php +++ b/core/l10n/es.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Advertencia de seguridad", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Su versión de PHP es vulnerable al ataque de Byte NULL (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Por favor, actualice su instalación PHP para usar %s con seguridad.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "No está disponible un generador de números aleatorios seguro, por favor habilite la extensión OpenSSL de PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sin un generador de números aleatorios seguro, un atacante podría predecir los tokens de restablecimiento de contraseñas y tomar el control de su cuenta.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" => "Crear una <strong>cuenta de administrador</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Se usará SQLite como base de datos. Para instalaciones más grandes, es recomendable cambiar esto.", "Finish setup" => "Completar la instalación", "Finishing …" => "Finalizando...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Esta aplicación requiere que se habilite JavaScript para su correcta operación. Por favor <a href=\"http://enable-javascript.com/es\" target=\"_blank\">habilite JavaScript</a> y vuelva a cargar esta interfaz.", "%s is available. Get more information on how to update." => "%s está disponible. Obtener más información de como actualizar.", "Log out" => "Salir", "Server side authentication failed!" => "La autenticación a fallado en el servidor.", diff --git a/core/l10n/es_AR.php b/core/l10n/es_AR.php index d6112e4ef7a..83cb6827131 100644 --- a/core/l10n/es_AR.php +++ b/core/l10n/es_AR.php @@ -125,8 +125,6 @@ $TRANSLATIONS = array( "Security Warning" => "Advertencia de seguridad", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "La versión de PHP que tenés, es vulnerable al ataque de byte NULL (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Por favor, actualizá tu instalación PHP para poder usar %s de manera segura.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "No hay disponible ningún generador de números aleatorios seguro. Por favor, habilitá la extensión OpenSSL de PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sin un generador de números aleatorios seguro un atacante podría predecir las pruebas de reinicio de tu contraseña y tomar control de tu cuenta.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Tu directorio de datos y tus archivos probablemente son accesibles a través de internet, ya que el archivo .htaccess no está funcionando.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Para información sobre cómo configurar apropiadamente tu servidor, por favor mirá la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" => "Crear una <strong>cuenta de administrador</strong>", @@ -140,7 +138,6 @@ $TRANSLATIONS = array( "Database host" => "Huésped de la base de datos", "Finish setup" => "Completar la instalación", "Finishing …" => "Finalizando...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Esta aplicación requiere de JavaScript para su correcto funcionamiento. Por favor <a href=\"http://enable-javascript.com/\" target=\"_blank\">habilite JavaScript</a> y recargue.", "%s is available. Get more information on how to update." => "%s está disponible. Obtené más información sobre cómo actualizar.", "Log out" => "Cerrar la sesión", "Server side authentication failed!" => "¡Falló la autenticación del servidor!", diff --git a/core/l10n/es_MX.php b/core/l10n/es_MX.php index a143d8abedb..dad6eb33e20 100644 --- a/core/l10n/es_MX.php +++ b/core/l10n/es_MX.php @@ -118,8 +118,6 @@ $TRANSLATIONS = array( "Security Warning" => "Advertencia de seguridad", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Su versión de PHP es vulnerable al ataque de Byte NULL (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Por favor, actualice su instalación PHP para usar %s con seguridad.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "No está disponible un generador de números aleatorios seguro, por favor habilite la extensión OpenSSL de PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sin un generador de números aleatorios seguro, un atacante podría predecir los tokens de restablecimiento de contraseñas y tomar el control de su cuenta.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" => "Crear una <strong>cuenta de administrador</strong>", @@ -133,7 +131,6 @@ $TRANSLATIONS = array( "Database host" => "Host de la base de datos", "Finish setup" => "Completar la instalación", "Finishing …" => "Finalizando …", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Esta aplicación requiere que se habilite JavaScript para su correcta operación. Por favor <a href=\"http://enable-javascript.com/es\" target=\"_blank\">habilite JavaScript</a> y vuelva a cargar esta interfaz.", "%s is available. Get more information on how to update." => "%s esta disponible. Obtener mas información de como actualizar.", "Log out" => "Salir", "Server side authentication failed!" => "La autenticación a fallado en el servidor.", diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php index d941c7d2bea..f2428a28e18 100644 --- a/core/l10n/et_EE.php +++ b/core/l10n/et_EE.php @@ -5,6 +5,8 @@ $TRANSLATIONS = array( "Turned off maintenance mode" => "Haldusrežiimis välja lülitatud", "Updated database" => "Uuendatud andmebaas", "Checked database schema update" => "Andmebaasi skeemi uuendus kontrollitud", +"Checked database schema update for apps" => "Andmebaasi skeemi uuendus rakendustele on kontrollitud", +"Updated \"%s\" to %s" => "Uuendatud \"%s\" -> %s", "Disabled incompatible apps: %s" => "Keelatud mitteühilduvad rakendid: %s", "No image or file provided" => "Ühtegi pilti või faili pole pakutud", "Unknown filetype" => "Tundmatu failitüüp", @@ -145,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Turvahoiatus", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Sinu PHP versioon on haavatav NULL Baidi (CVE-2006-7243) rünnakuga.", "Please update your PHP installation to use %s securely." => "Palun uuenda oma paigaldatud PHP-d tagamaks %s turvalisus.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Turvalist juhuslike numbrite generaatorit pole saadaval. Palun luba PHP-s OpenSSL laiendus.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ilma turvalise juhuslike numbrite generaatorita võib ründaja ennustada paroolivahetuse võtme ning hõivata su konto.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Su andmete kataloog ja failid on tõenäoliselt internetist vabalt saadaval kuna .htaccess fail ei toimi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Serveri korrektseks seadistuseks palun tutvu <a href=\"%s\" target=\"_blank\">dokumentatsiooniga</a>.", "Create an <strong>admin account</strong>" => "Loo <strong>admini konto</strong>", @@ -163,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Andmebaasina kasutatakse SQLite-t. Suuremate paigalduste puhul me soovitame seda muuta.", "Finish setup" => "Lõpeta seadistamine", "Finishing …" => "Lõpetamine ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "See rakendus vajab toimimiseks JavaScripti. Palun <a href=\"http://enable-javascript.com/\" target=\"_blank\">luba JavaScript</a> ning laadi see leht uuesti.", "%s is available. Get more information on how to update." => "%s on saadaval. Vaata lähemalt kuidas uuendada.", "Log out" => "Logi välja", "Server side authentication failed!" => "Serveripoolne autentimine ebaõnnestus!", @@ -179,12 +178,14 @@ $TRANSLATIONS = array( "Thank you for your patience." => "Täname kannatlikkuse eest.", "You are accessing the server from an untrusted domain." => "Sa kasutad serverit usalduseta asukohast", "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." => "Palun võta ühendust oma saidi administraatoriga. Kui sa oled ise administraator, siis seadista failis config/config.php sätet \"trusted_domain\". Näidis seadistused leiad failist 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." => "Sõltuvalt sinu seadetest võib ka administraator kasutada allolevat nuppu, et seda domeeni usaldusväärseks märkida.", "Add \"%s\" as trusted domain" => "Lisa \"%s\" usaldusväärse domeenina", "%s will be updated to version %s." => "%s uuendatakse versioonile %s.", "The following apps will be disabled:" => "Järgnevad rakendid keelatakse:", "The theme %s has been disabled." => "Teema %s on keelatud.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Enne jätkamist veendu, et andmebaas, seadete ning andmete kataloog on varundatud.", "Start update" => "Käivita uuendus", +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Suurtel saitidel aegumise vältimiseks võid sa paigalduskaustas käivitada järgmise käsu:", "This ownCloud instance is currently being updated, which may take a while." => "Seda ownCloud instantsi hetkel uuendatakse, võib võtta veidi aega.", "Please reload this page after a short time to continue using ownCloud." => "Palun laadi see leht uuesti veidi aja pärast jätkamaks ownCloud kasutamist." ); diff --git a/core/l10n/eu.php b/core/l10n/eu.php index b216b066052..ad7274e9d98 100644 --- a/core/l10n/eu.php +++ b/core/l10n/eu.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Segurtasun abisua", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Zure PHP bertsioa NULL Byte erasoak (CVE-2006-7243) mendera dezake.", "Please update your PHP installation to use %s securely." => "Mesedez eguneratu zure PHP instalazioa %s seguru erabiltzeko", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ez dago hausazko zenbaki sortzaile segururik eskuragarri, mesedez gatiu PHP OpenSSL extensioa.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Hausazko zenbaki sortzaile segururik gabe erasotzaile batek pasahitza berrezartzeko kodeak iragarri ditzake eta zure kontuaz jabetu.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Zure zerbitrzaria ongi konfiguratzeko, mezedez <a href=\"%s\" target=\"_blank\">dokumentazioa</a> ikusi.", "Create an <strong>admin account</strong>" => "Sortu <strong>kudeatzaile kontu<strong> bat", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite erabiliko da datu-base gisa. Instalazio handiagoetarako gomendatzen dugu aldatzea.", "Finish setup" => "Bukatu konfigurazioa", "Finishing …" => "Bukatzen...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Aplikazio honek ongi funtzionatzeko JavaScript gaitua behar du. Mesedez <a href=\"http://enable-javascript.com/\" target=\"_blank\">gaitu JavaScript</a> eta birkargatu interfaze hau.", "%s is available. Get more information on how to update." => "%s erabilgarri dago. Eguneratzeaz argibide gehiago eskuratu.", "Log out" => "Saioa bukatu", "Server side authentication failed!" => "Zerbitzari aldeko autentifikazioak huts egin du!", diff --git a/core/l10n/fa.php b/core/l10n/fa.php index 95d933c6039..e78b69f3569 100644 --- a/core/l10n/fa.php +++ b/core/l10n/fa.php @@ -125,8 +125,6 @@ $TRANSLATIONS = array( "Cheers!" => "سلامتی!", "Security Warning" => "اخطار امنیتی", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "نسخه ی PHP شما در برابر حملات NULL Byte آسیب پذیر است.(CVE-2006-7243)", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "هیچ مولد تصادفی امن در دسترس نیست، لطفا فرمت PHP OpenSSL را فعال نمایید.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "بدون وجود یک تولید کننده اعداد تصادفی امن ، یک مهاجم ممکن است این قابلیت را داشته باشد که پیشگویی کند پسوورد های راه انداز گرفته شده و کنترلی روی حساب کاربری شما داشته باشد .", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "فایلها و فهرست های داده های شما قابل از اینترنت قابل دسترسی هستند، چونکه فایل htacces. کار نمی کند.", "Create an <strong>admin account</strong>" => "لطفا یک <strong> شناسه برای مدیر</strong> بسازید", "Password" => "گذرواژه", diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php index cfccf041907..85b172166f5 100644 --- a/core/l10n/fi_FI.php +++ b/core/l10n/fi_FI.php @@ -146,8 +146,6 @@ $TRANSLATIONS = array( "Security Warning" => "Turvallisuusvaroitus", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "PHP-asennuksesi on haavoittuvainen NULL Byte -hyökkäykselle (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Päivitä PHP-asennus varmistaaksesi, että %s on turvallinen käyttää.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Turvallista satunnaislukugeneraattoria ei ole käytettävissä, ota käyttöön PHP:n OpenSSL-laajennus", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ilman turvallinen satunnaislukugeneraattori, hyökkääjä saattaa pystyä ennustamaan salasanan tunnuksineen ja ottaa tilisi.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Datakansiosi ja tiedostosi ovat mitä luultavimmin muiden saavutettavissa internetistä, koska .htaccess-tiedosto ei toimi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Lisätietoja palvelimen asetuksien määrittämisestä on saatavilla <a href=\"%s\" target=\"_blank\">dokumentaatiosta</a>.", "Create an <strong>admin account</strong>" => "Luo <strong>ylläpitäjän tunnus</strong>", @@ -164,7 +162,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLitea käytetään tietokantana. Laajoja asennuksia varten tämä asetus kannattaa muuttaa. ", "Finish setup" => "Viimeistele asennus", "Finishing …" => "Valmistellaan…", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Tämä sovellus vaatii toimiakseen JavaScriptin käyttöä. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Ota JavaScript käyttöön</a> ja päivitä tämä käyttöliittymä.", "%s is available. Get more information on how to update." => "%s on saatavilla. Lue lisätietoja, miten päivitys asennetaan.", "Log out" => "Kirjaudu ulos", "Server side authentication failed!" => "Palvelimen puoleinen tunnistautuminen epäonnistui!", diff --git a/core/l10n/fr.php b/core/l10n/fr.php index c9a7d023dda..32e440466c9 100644 --- a/core/l10n/fr.php +++ b/core/l10n/fr.php @@ -145,8 +145,6 @@ $TRANSLATIONS = array( "Security Warning" => "Avertissement de sécurité", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Votre version de PHP est vulnérable à l'attaque par caractère NULL (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Veuillez mettre à jour votre installation PHP pour utiliser %s de façon sécurisée.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Aucun générateur de nombre aléatoire sécurisé n'est disponible, veuillez activer l'extension PHP OpenSSL", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sans générateur de nombre aléatoire sécurisé, un attaquant peut être en mesure de prédire les jetons de réinitialisation du mot de passe, et ainsi prendre le contrôle de votre compte utilisateur.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Votre répertoire data est certainement accessible depuis l'internet car le fichier .htaccess ne semble pas fonctionner", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Pour les informations de configuration de votre serveur, veuillez lire la <a href=\"%s\" target=\"_blank\">documentation</a>.", "Create an <strong>admin account</strong>" => "Créer un <strong>compte administrateur</strong>", @@ -163,7 +161,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite va être utilisée comme base de donnée. Pour des installations plus volumineuse, nous vous conseillons de changer ce réglage.", "Finish setup" => "Terminer l'installation", "Finishing …" => "En cours de finalisation...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Cette application nécessite que JavaScript soit activé pour fonctionner correctement. Veuillez <a href=\"http://enable-javascript.com/\" target=\"_blank\">activer JavaScript</a> puis charger à nouveau cette interface.", "%s is available. Get more information on how to update." => "%s est disponible. Obtenez plus d'informations sur la façon de mettre à jour.", "Log out" => "Se déconnecter", "Server side authentication failed!" => "L'authentification côté serveur a échoué !", diff --git a/core/l10n/gl.php b/core/l10n/gl.php index b5f2c416ece..9321caab2a8 100644 --- a/core/l10n/gl.php +++ b/core/l10n/gl.php @@ -145,8 +145,6 @@ $TRANSLATIONS = array( "Security Warning" => "Aviso de seguranza", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "A súa versión de PHP é vulnerábel a un ataque de byte nulo (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Actualice a instalación de PHP para empregar %s de xeito seguro.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Non hai un xerador de números ao chou dispoñíbel. Active o engadido de OpenSSL para PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sen un xerador seguro de números ao chou podería acontecer que predicindo as cadeas de texto de reinicio de contrasinais se afagan coa súa conta.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "O seu directorio de datos e os ficheiros probabelmente sexan accesíbeis desde a Internet xa que o ficheiro .htaccess non está a traballar.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Para obter información sobre como como configurar axeitadamente o seu servidor, vexa a <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" => "Crear unha <strong>contra de administrador</strong>", @@ -163,7 +161,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Empregarase SQLite como base de datos. Para instalacións máis grandes recomendámoslle que cambie isto.", "Finish setup" => "Rematar a configuración", "Finishing …" => "Rematando ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Esta aplicación require que o JavaScript estea activado para unha operativa correcta. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Active o JavaScript</a> e volva a cargar a interface.", "%s is available. Get more information on how to update." => "%s está dispoñíbel. Obteña máis información sobre como actualizar.", "Log out" => "Desconectar", "Server side authentication failed!" => "A autenticación fracasou do lado do servidor!", diff --git a/core/l10n/he.php b/core/l10n/he.php index e0277c68936..0cc44614349 100644 --- a/core/l10n/he.php +++ b/core/l10n/he.php @@ -79,8 +79,6 @@ $TRANSLATIONS = array( "Security Warning" => "אזהרת אבטחה", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "גרסת ה־PHP פגיעה בפני התקפת בית NULL/ריק (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "נא לעדכן את התקנת ה-PHP שלך כדי להשתמש ב-%s בצורה מאובטחת.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "אין מחולל מספרים אקראיים מאובטח, נא להפעיל את ההרחבה OpenSSL ב־PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "ללא מחולל מספרים אקראיים מאובטח תוקף יכול לנבא את מחרוזות איפוס הססמה ולהשתלט על החשבון שלך.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "תיקיית וקבצי המידע שלך כנראה נגישים מהאינטרנט מכיוון שקובץ ה.htaccess לא עובד.", "Create an <strong>admin account</strong>" => "יצירת <strong>חשבון מנהל</strong>", "Password" => "סיסמא", diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php index 3493016282b..46d3b02e51a 100644 --- a/core/l10n/hu_HU.php +++ b/core/l10n/hu_HU.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Biztonsági figyelmeztetés", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Az Ön PHP verziója sebezhető a NULL bájtos támadással szemben (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Kérjük frissítse a telepített PHP csomagjait, hogy biztonságos legyen az %s szolgáltatása.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nem érhető el megfelelő véletlenszám-generátor, telepíteni kellene a PHP OpenSSL kiegészítését.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Megfelelő véletlenszám-generátor hiányában egy támadó szándékú idegen képes lehet megjósolni a jelszóvisszaállító tokent, és Ön helyett belépni.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Az adatkönyvtár és a benne levő állományok valószínűleg közvetlenül is elérhetők az internetről, mert a .htaccess állomány nem érvényesül.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "A kiszolgáló megfelelő beállításához kérjük olvassa el a <a href=\"%sl\" target=\"_blank\">dokumentációt</a>.", "Create an <strong>admin account</strong>" => "<strong>Rendszergazdai belépés</strong> létrehozása", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Adatbázisként az SQLite-ot fogjuk használni. Nagyobb telepítések esetén javasoljuk, hogy változtassa meg ezt a beállítást.", "Finish setup" => "A beállítások befejezése", "Finishing …" => "Befejezés ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Az alkalmazás megfelelő működéséhez szükség van JavaScriptre. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Engedélyezze a JavaScriptet</a> és frissítse az oldalt!", "%s is available. Get more information on how to update." => "%s rendelkezésre áll. További információ a frissítéshez.", "Log out" => "Kilépés", "Server side authentication failed!" => "A szerveroldali hitelesítés sikertelen!", diff --git a/core/l10n/id.php b/core/l10n/id.php index 3bdbb1dc576..a525b34fb16 100644 --- a/core/l10n/id.php +++ b/core/l10n/id.php @@ -127,8 +127,6 @@ $TRANSLATIONS = array( "Security Warning" => "Peringatan Keamanan", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Versi PHP Anda rentan terhadap serangan NULL Byte (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Silakan perbarui instalasi PHP anda untuk menggunakan %s dengan aman.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Generator acak yang aman tidak tersedia, silakan aktifkan ekstensi OpenSSL pada PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Tanpa generator acak, penyerang mungkin dapat menebak token penyetelan sandi dan mengambil alih akun Anda.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Kemungkinan direktori data dan berkas anda dapat diakses dari internet karena berkas .htaccess tidak berfungsi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Untuk informasi cara mengkonfigurasi server anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\">dokumentasi</a>.", "Create an <strong>admin account</strong>" => "Buat sebuah <strong>akun admin</strong>", @@ -143,7 +141,6 @@ $TRANSLATIONS = array( "Database host" => "Host basis data", "Finish setup" => "Selesaikan instalasi", "Finishing …" => "Menyelesaikan ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Aplikasi ini memerlukan JavaScript yang diaktifkan untuk beroperasi dengan benar. Silahkan <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktifkan JavaScript</a> and re-load this interface.", "%s is available. Get more information on how to update." => "%s tersedia. Dapatkan informasi lebih lanjut tentang cara memperbarui.", "Log out" => "Keluar", "Server side authentication failed!" => "Otentikasi dari sisi server gagal!", diff --git a/core/l10n/is.php b/core/l10n/is.php index 6c3b1507cf3..b1095a49bfb 100644 --- a/core/l10n/is.php +++ b/core/l10n/is.php @@ -72,8 +72,6 @@ $TRANSLATIONS = array( "Access forbidden" => "Aðgangur bannaður", "Cloud not found" => "Ský finnst ekki", "Security Warning" => "Öryggis aðvörun", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Enginn traustur slembitölugjafi í boði, vinsamlegast virkjaðu PHP OpenSSL viðbótina.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Án öruggs slembitölugjafa er mögulegt að sjá fyrir öryggis auðkenni til að endursetja lykilorð og komast inn á aðganginn þinn.", "Create an <strong>admin account</strong>" => "Útbúa <strong>vefstjóra aðgang</strong>", "Password" => "Lykilorð", "Data folder" => "Gagnamappa", diff --git a/core/l10n/it.php b/core/l10n/it.php index 1b85e41c0c5..34d78a3e21d 100644 --- a/core/l10n/it.php +++ b/core/l10n/it.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Avviso di sicurezza", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "La tua versione di PHP è vulnerabile all'attacco NULL Byte (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Aggiorna la tua installazione di PHP per utilizzare %s in sicurezza.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Non è disponibile alcun generatore di numeri casuali sicuro. Abilita l'estensione OpenSSL di PHP", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Senza un generatore di numeri casuali sicuro, un malintenzionato potrebbe riuscire a individuare i token di ripristino delle password e impossessarsi del tuo account.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Per informazioni su come configurare correttamente il tuo server, vedi la <a href=\"%s\" target=\"_blank\">documentazione</a>.", "Create an <strong>admin account</strong>" => "Crea un <strong>account amministratore</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite sarà utilizzato come database. Per installazioni più grandi consigliamo di cambiarlo.", "Finish setup" => "Termina la configurazione", "Finishing …" => "Completamento...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "L'applicazione richiede che JavaScript sia abilitato per un corretto funzionamento. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Abilita JavaScript</a> e ricarica questa interfaccia.", "%s is available. Get more information on how to update." => "%s è disponibile. Ottieni ulteriori informazioni sull'aggiornamento.", "Log out" => "Esci", "Server side authentication failed!" => "Autenticazione lato server non riuscita!", diff --git a/core/l10n/ja.php b/core/l10n/ja.php index 1ede67fb976..98b702d1fb8 100644 --- a/core/l10n/ja.php +++ b/core/l10n/ja.php @@ -145,8 +145,6 @@ $TRANSLATIONS = array( "Security Warning" => "セキュリティ警告", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "あなたのPHPのバージョンには、Null Byte攻撃(CVE-2006-7243)という脆弱性が含まれています。", "Please update your PHP installation to use %s securely." => "%s を安全に利用するため、インストールされているPHPをアップデートしてください。", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "セキュアな乱数生成器が利用可能ではありません。PHPのOpenSSL拡張を有効にしてください。", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "セキュアな乱数生成器が無い場合、攻撃者がパスワードリセットのトークンを予測してアカウントを乗っ取られる可能性があります。", "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 <a href=\"%s\" target=\"_blank\">documentation</a>." => "サーバーを適正に設定する情報は、こちらの<a href=\"%s\" target=\"_blank\">ドキュメント</a>を参照してください。", "Create an <strong>admin account</strong>" => "<strong>管理者アカウント</strong>を作成してください", @@ -163,7 +161,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite をデータベースとして利用します。大規模な運用では、利用しないことをお勧めします。", "Finish setup" => "セットアップを完了します", "Finishing …" => "作業を完了しています ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "このアプリケーションを使用するにはJavaScriptが必要です。\n<a href=\"http://enable-javascript.com/\" target=\"_blank\">JavaScriptを有効にし</a>、インターフェースを更新してください。 ", "%s is available. Get more information on how to update." => "%s が利用可能です。アップデート方法について詳細情報を確認してください。", "Log out" => "ログアウト", "Server side authentication failed!" => "サーバーサイドの認証に失敗しました!", diff --git a/core/l10n/ka_GE.php b/core/l10n/ka_GE.php index 872b81ea9dc..31201abb898 100644 --- a/core/l10n/ka_GE.php +++ b/core/l10n/ka_GE.php @@ -76,8 +76,6 @@ $TRANSLATIONS = array( "Cloud not found" => "ღრუბელი არ არსებობს", "Security Warning" => "უსაფრთხოების გაფრთხილება", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "თქვენი PHP ვერსია შეიცავს საფრთხეს NULL Byte შეტევებისთვის (CVE-2006-7243)", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "შემთხვევითი სიმბოლოების გენერატორი არ არსებობს, გთხოვთ ჩართოთ PHP OpenSSL გაფართოება.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "შემთხვევითი სიმბოლოების გენერატორის გარეშე, შემტევმა შეიძლება ამოიცნოს თქვენი პაროლი შეგიცვალოთ ის და დაეუფლოს თქვენს ექაუნთს.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "თქვენი data დირექტორია და ფაილები დაშვებადია ინტერნეტში რადგან .htaccess ფაილი არ მუშაობს.", "Create an <strong>admin account</strong>" => "შექმენი <strong>ადმინ ექაუნტი</strong>", "Password" => "პაროლი", diff --git a/core/l10n/ko.php b/core/l10n/ko.php index e6ec7919399..4616a276e60 100644 --- a/core/l10n/ko.php +++ b/core/l10n/ko.php @@ -129,8 +129,6 @@ $TRANSLATIONS = array( "Security Warning" => "보안 경고", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "사용 중인 PHP 버전이 NULL 바이트 공격에 취약합니다 (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "%s의 보안을 위하여 PHP 버전을 업데이트하십시오.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "안전한 난수 생성기를 사용할 수 없습니다. PHP의 OpenSSL 확장을 활성화해 주십시오.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "안전한 난수 생성기를 사용하지 않으면 공격자가 암호 초기화 토큰을 추측하여 계정을 탈취할 수 있습니다.", "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 <a href=\"%s\" target=\"_blank\">documentation</a>." => "올바른 서버 설정을 위한 정보는 <a href=\"%s\" target=\"_blank\">문서</a>를 참조하십시오.", "Create an <strong>admin account</strong>" => "<strong>관리자 계정</strong> 만들기", @@ -146,7 +144,6 @@ $TRANSLATIONS = array( "Database host" => "데이터베이스 호스트", "Finish setup" => "설치 완료", "Finishing …" => "완료 중 ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "이 애플리케이션을 올바르게 사용하려면 자바스크립트를 활성화해야 합니다. <a href=\"http://enable-javascript.com/\" target=\"_blank\">자바스크립트를 활성화</a>한 다음 인터페이스를 새로 고치십시오.", "%s is available. Get more information on how to update." => "%s을(를) 사용할 수 있습니다. 업데이트하는 방법에 대해서 자세한 정보를 얻으십시오.", "Log out" => "로그아웃", "Server side authentication failed!" => "서버 인증 실패!", diff --git a/core/l10n/lb.php b/core/l10n/lb.php index d5e38405cea..24f8850f12a 100644 --- a/core/l10n/lb.php +++ b/core/l10n/lb.php @@ -99,8 +99,6 @@ $TRANSLATIONS = array( "Security Warning" => "Sécherheets-Warnung", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Deng PHP-Versioun ass verwonnbar duerch d'NULL-Byte-Attack (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Aktualiséier w.e.gl deng PHP-Installatioun fir %s sécher kennen ze benotzen.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Et ass kee sécheren Zoufallsgenerator verfügbar. Aktivéier w.e.gl d'OpenSSL-Erweiderung vu PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ouni e sécheren Zoufallsgenerator kann en Ugräifer d'Passwuert-Zrécksetzungs-Schlësselen viraussoen an en Account iwwerhuelen.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Däin Daten-Dossier an deng Fichieren si wahrscheinlech iwwert den Internet accessibel well den .htaccess-Fichier net funktionnéiert.", "Create an <strong>admin account</strong>" => "En <strong>Admin-Account</strong> uleeën", "Password" => "Passwuert", diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php index 0f86486a63d..66a2e192a9e 100644 --- a/core/l10n/lt_LT.php +++ b/core/l10n/lt_LT.php @@ -118,8 +118,6 @@ $TRANSLATIONS = array( "Security Warning" => "Saugumo pranešimas", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Jūsų PHP versija yra pažeidžiama prieš NULL Byte ataką (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Prašome atnaujinti savo PHP, kad saugiai naudoti %s.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Saugaus atsitiktinių skaičių generatoriaus nėra, prašome įjungti PHP OpenSSL modulį.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Be saugaus atsitiktinių skaičių generatoriaus, piktavaliai gali atspėti Jūsų slaptažodį ir pasisavinti paskyrą.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Jūsų failai yra tikriausiai prieinami per internetą nes .htaccess failas neveikia.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Kad gauti informaciją apie tai kaip tinkamai sukonfigūruoti savo serverį, prašome skaityti <a href=\"%s\" target=\"_blank\">dokumentaciją</a>.", "Create an <strong>admin account</strong>" => "Sukurti <strong>administratoriaus paskyrą</strong>", @@ -133,7 +131,6 @@ $TRANSLATIONS = array( "Database host" => "Duomenų bazės serveris", "Finish setup" => "Baigti diegimą", "Finishing …" => "Baigiama ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Šiai programai reikia įjungti JavaScript, kad ji veiktų tvarkingai. Prašome <a href=\"http://enable-javascript.com/\" target=\"_blank\">įjungti JavaScript</a> ir perkrauti šią sąsają.", "%s is available. Get more information on how to update." => "%s yra prieinama. Gaukite daugiau informacijos apie atnaujinimą.", "Log out" => "Atsijungti", "Server side authentication failed!" => "Autentikacija serveryje nepavyko!", diff --git a/core/l10n/lv.php b/core/l10n/lv.php index 1be63923f4f..166ecf80370 100644 --- a/core/l10n/lv.php +++ b/core/l10n/lv.php @@ -80,8 +80,6 @@ $TRANSLATIONS = array( "Security Warning" => "Brīdinājums par drošību", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Jūsu PHP ir ievainojamība pret NULL Byte uzbrukumiem (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Lūdzu atjauniniet PHP instalāciju lai varētu droši izmantot %s.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nav pieejams drošs nejaušu skaitļu ģenerators. Lūdzu, aktivējiet PHP OpenSSL paplašinājumu.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez droša nejaušu skaitļu ģeneratora uzbrucējs var paredzēt paroļu atjaunošanas marķierus un pārņem jūsu kontu.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Visticamāk, jūsu datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Vairāk informācijai kā konfigurēt serveri, lūdzu skatiet <a href=\"%s\" target=\"_blank\">dokumentāciju</a>.", "Create an <strong>admin account</strong>" => "Izveidot <strong>administratora kontu</strong>", diff --git a/core/l10n/mk.php b/core/l10n/mk.php index cefcf1e989d..ebe2bb6df14 100644 --- a/core/l10n/mk.php +++ b/core/l10n/mk.php @@ -107,8 +107,6 @@ $TRANSLATIONS = array( "Cheers!" => "Поздрав!", "Security Warning" => "Безбедносно предупредување", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Вашата верзија на PHP е ранлива на NULL Byte attack (CVE-2006-7243)", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Не е достапен безбеден генератор на случајни броеви, Ве молам озвоможете го OpenSSL PHP додатокот.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без сигурен генератор на случајни броеви напаѓач може да ги предвиди жетоните за ресетирање на лозинка и да преземе контрола врз Вашата сметка. ", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Вашиот директориум со податоци и датотеки се веројатно достапни преку интенернт поради што .htaccess датотеката не функционира.", "Create an <strong>admin account</strong>" => "Направете <strong>администраторска сметка</strong>", "Password" => "Лозинка", diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php index 21cbf739b67..9a6e6e89331 100644 --- a/core/l10n/nb_NO.php +++ b/core/l10n/nb_NO.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Sikkerhetsadvarsel", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "PHP-versjonen din er sårbar for NULL Byte attack (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Vennligst oppdater PHP-installasjonen din for å bruke %s på en sikker måte.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ingen sikker slumptallsgenerator er tilgjengelig. Vennligst aktiver PHP OpenSSL-utvidelsen.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Uten en sikker slumptallsgenerator er det mulig at en angriper kan forutse tokens for tilbakestilling av passord og ta over kontoen din.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "For informasjon om hvordan du setter opp serveren din riktig, se <a href=\"%s\" target=\"_blank\">dokumentasjonen</a>.", "Create an <strong>admin account</strong>" => "Opprett en <strong>administrator-konto</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite vil bli brukt som database. For større installasjoner anbefaler vi å endre dette.", "Finish setup" => "Fullfør oppsetting", "Finishing …" => "Ferdigstiller ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Denne applikasjonen trenger JavaScript for å fungere korrekt. Vennligst <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktiver JavaScript</a> og last dette grensesnittet på nytt.", "%s is available. Get more information on how to update." => "%s er tilgjengelig. Få mer informasjon om hvordan du kan oppdatere.", "Log out" => "Logg ut", "Server side authentication failed!" => "Autentisering feilet på serveren!", diff --git a/core/l10n/nl.php b/core/l10n/nl.php index f4ba6ae12f5..b295084ec2c 100644 --- a/core/l10n/nl.php +++ b/core/l10n/nl.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Beveiligingswaarschuwing", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Uw PHP-versie is kwetsbaar voor de NULL byte aanval (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Werk uw PHP installatie bij om %s veilig te kunnen gebruiken.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Er kon geen willekeurig nummer worden gegenereerd. Zet de PHP OpenSSL-extentie aan.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Zonder random nummer generator is het mogelijk voor een aanvaller om de resettokens van wachtwoorden te voorspellen. Dit kan leiden tot het inbreken op uw account.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Uw gegevensdirectory en bestanden zijn vermoedelijk bereikbaar vanaf het internet omdat het .htaccess-bestand niet functioneert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Bekijk de <a href=\"%s\" target=\"_blank\">documentatie</a> voor Informatie over het correct configureren van uw server.", "Create an <strong>admin account</strong>" => "Maak een <strong>beheerdersaccount</strong> aan", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we dit te veranderen.", "Finish setup" => "Installatie afronden", "Finishing …" => "Afronden ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Deze applicatie heeft JavaScript nodig om correct te functioneren. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Activeer JavaScript</a> en herlaad deze interface.", "%s is available. Get more information on how to update." => "%s is beschikbaar. Verkrijg meer informatie over het bijwerken.", "Log out" => "Afmelden", "Server side authentication failed!" => "Authenticatie bij de server mislukte!", diff --git a/core/l10n/nn_NO.php b/core/l10n/nn_NO.php index 3c58ea6555e..d51e750f3ed 100644 --- a/core/l10n/nn_NO.php +++ b/core/l10n/nn_NO.php @@ -103,8 +103,6 @@ $TRANSLATIONS = array( "Security Warning" => "Tryggleiksåtvaring", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "PHP-utgåva di er sårbar for NULL-byteåtaket (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Ver venleg og oppdater PHP-installasjonen din til å brukar %s trygt.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ingen tilgjengeleg tilfeldig nummer-generator, ver venleg og aktiver OpenSSL-utvidinga i PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Utan ein trygg tilfeldig nummer-generator er det enklare for ein åtakar å gjetta seg fram til passordnullstillingskodar og dimed ta over kontoen din.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Datamappa og filene dine er sannsynlegvis tilgjengelege frå Internett sidan .htaccess-fila ikkje fungerer.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Ver venleg og les <a href=\"%s\" target=\"_blank\">dokumentasjonen</a> for meir informasjon om korleis du konfigurerer tenaren din.", "Create an <strong>admin account</strong>" => "Lag ein <strong>admin-konto</strong>", diff --git a/core/l10n/pl.php b/core/l10n/pl.php index bfd2b6da6ef..115ebcbad7e 100644 --- a/core/l10n/pl.php +++ b/core/l10n/pl.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Ostrzeżenie o zabezpieczeniach", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Twója wersja PHP jest narażona na NULL Byte attack (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Proszę uaktualnij swoją instalacje PHP aby używać %s bezpiecznie.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Bezpieczny generator liczb losowych jest niedostępny. Włącz rozszerzenie OpenSSL w PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez bezpiecznego generatora liczb losowych, osoba atakująca może przewidzieć token resetujący hasło i przejąć kontrolę nad twoim kontem.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Twój katalog danych i pliki są prawdopodobnie dostępne z poziomu internetu, ponieważ plik .htaccess nie działa.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Aby uzyskać informacje jak poprawnie skonfigurować swój serwer, zapoznaj się z <a href=\"%s\" target=\"_blank\">dokumentacją</a>.", "Create an <strong>admin account</strong>" => "Utwórz <strong>konta administratora</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Jako baza danych zostanie użyty SQLite. Dla większych instalacji doradzamy zmianę na inną.", "Finish setup" => "Zakończ konfigurowanie", "Finishing …" => "Kończę ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Ta aplikacja wymaga włączenia JavaScript do poprawnego działania. Proszę <a href=\"http://enable-javascript.com/\" target=\"_blank\">włączyć JavaScript</a> i przeładować stronę.", "%s is available. Get more information on how to update." => "%s jest dostępna. Dowiedz się więcej na temat aktualizacji.", "Log out" => "Wyloguj", "Server side authentication failed!" => "Uwierzytelnianie po stronie serwera nie powiodło się!", diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php index 79abd1964d6..15405882c41 100644 --- a/core/l10n/pt_BR.php +++ b/core/l10n/pt_BR.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Aviso de Segurança", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Sua versão do PHP está vulnerável ao ataque NULL Byte (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Por favor, atualize sua instalação PHP para usar %s segurança.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nenhum gerador de número aleatório de segurança disponível. Habilite a extensão OpenSSL do PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sem um gerador de número aleatório de segurança, um invasor pode ser capaz de prever os símbolos de redefinição de senhas e assumir sua conta.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Seu diretório de dados e arquivos são provavelmente acessíveis pela internet, porque o .htaccess não funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Para obter informações sobre como configurar corretamente o seu servidor, consulte a <a href=\"%s\" target=\"_blank\">documentação</a>.", "Create an <strong>admin account</strong>" => "Criar uma <strong>conta de administrador</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "O SQLite será usado como banco de dados. Para grandes instalações nós recomendamos mudar isto.", "Finish setup" => "Concluir configuração", "Finishing …" => "Finalizando ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Esta aplicação requer JavaScript habilidado para correta operação.\nPor favor <a href=\"http://enable-javascript.com/\" target=\"_blank\">habilite o JavaScript</a> e recarregue esta intercace.", "%s is available. Get more information on how to update." => "%s está disponível. Obtenha mais informações sobre como atualizar.", "Log out" => "Sair", "Server side authentication failed!" => "Autenticação do servidor falhou!", diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php index 24f4d0c2f4d..dbcfcdf8d98 100644 --- a/core/l10n/pt_PT.php +++ b/core/l10n/pt_PT.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Aviso de Segurança", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "A sua versão do PHP é vulnerável ao ataque Byte Null (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Por favor atualize a sua versão PHP instalada para usar o %s com segurança.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Não existe nenhum gerador seguro de números aleatórios, por favor, active a extensão OpenSSL no PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sem nenhum gerador seguro de números aleatórios, uma pessoa mal intencionada pode prever a sua password, reiniciar as seguranças adicionais e tomar conta da sua conta. ", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"%s\" target=\"_blank\">documentação</a>.", "Create an <strong>admin account</strong>" => "Criar uma <strong>conta administrativa</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Será usado SQLite como base de dados. Para instalações maiores é recomendável a sua alteração.", "Finish setup" => "Acabar instalação", "Finishing …" => "A terminar...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Esta aplicação requer JavaScript ativado para uma operação correta. Por favor <a href=\"http://enable-javascript.com/\" target=\"_blank\">ative o JavaScript</a> e recarregue esta interface.", "%s is available. Get more information on how to update." => "%s está disponível. Tenha mais informações como actualizar.", "Log out" => "Sair", "Server side authentication failed!" => "Autenticação do lado do servidor falhou!", diff --git a/core/l10n/ro.php b/core/l10n/ro.php index 55f67a032d7..fe717125d06 100644 --- a/core/l10n/ro.php +++ b/core/l10n/ro.php @@ -113,8 +113,6 @@ $TRANSLATIONS = array( "Security Warning" => "Avertisment de securitate", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Versiunea dvs. PHP este vulnerabilă la un atac cu un octet NULL (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Te rog actualizează versiunea PHP pentru a utiliza %s în mod securizat.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nu este disponibil niciun generator securizat de numere aleatoare, vă rog activați extensia PHP OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Fără generatorul securizat de numere aleatoare , un atacator poate anticipa simbolurile de resetare a parolei și poate prelua controlul asupra contului tău.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Directorul tău de date și fișiere sunt probabil accesibile de pe Internet, deoarece fișierul .htaccess nu funcționează.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Pentru informații despre cum să configurezi serverul, vezi <a href=\"%s\" target=\"_blank\">documentația</a>.", "Create an <strong>admin account</strong>" => "Crează un <strong>cont de administrator</strong>", diff --git a/core/l10n/ru.php b/core/l10n/ru.php index 9cdaced35d5..c3f63642b47 100644 --- a/core/l10n/ru.php +++ b/core/l10n/ru.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Предупреждение безопасности", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Ваша версия PHP уязвима к атаке NULL Byte (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Пожалуйста обновите Вашу PHP конфигурацию для безопасного использования %s.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Отсутствует защищенный генератор случайных чисел, пожалуйста, включите расширение PHP OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без защищенного генератора случайных чисел злоумышленник может предугадать токены сброса пароля и завладеть Вашей учетной записью.", "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 <a href=\"%s\" target=\"_blank\">documentation</a>." => "Для информации, как правильно настроить Ваш сервер, пожалуйста загляните в <a hrev=\"%s\"target=\"blank\">документацию</a>.", "Create an <strong>admin account</strong>" => "Создать <strong>учётную запись администратора</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite будет использован в качестве базы данных. Мы рекомендуем изменить это для крупных установок.", "Finish setup" => "Завершить установку", "Finishing …" => "Завершаем...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Это приложение требует включённый JavaScript для корректной работы. Пожалуйста, <a href=\"http://enable-javascript.com/\" target=\"_blank\">включите JavaScript</a> и перезагрузите интерфейс.", "%s is available. Get more information on how to update." => "%s доступно. Получить дополнительную информацию о порядке обновления.", "Log out" => "Выйти", "Server side authentication failed!" => "Неудачная аутентификация с сервером!", diff --git a/core/l10n/si_LK.php b/core/l10n/si_LK.php index cad09c5ed10..e0763d7a924 100644 --- a/core/l10n/si_LK.php +++ b/core/l10n/si_LK.php @@ -59,7 +59,6 @@ $TRANSLATIONS = array( "Access forbidden" => "ඇතුල් වීම තහනම්", "Cloud not found" => "සොයා ගත නොහැක", "Security Warning" => "ආරක්ෂක නිවේදනයක්", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "ආරක්ෂිත අහඹු සංඛ්යා උත්පාදකයක් නොමැති නම් ඔබගේ ගිණුමට පහරදෙන අයකුට එහි මුරපද යළි පිහිටුවීමට අවශ්ය ටෝකන පහසුවෙන් සොයාගෙන ඔබගේ ගිණුම පැහැරගත හැක.", "Password" => "මුර පදය", "Data folder" => "දත්ත ෆෝල්ඩරය", "Configure the database" => "දත්ත සමුදාය හැඩගැසීම", diff --git a/core/l10n/sk_SK.php b/core/l10n/sk_SK.php index 847184b3bdb..2a539cce1d0 100644 --- a/core/l10n/sk_SK.php +++ b/core/l10n/sk_SK.php @@ -145,8 +145,6 @@ $TRANSLATIONS = array( "Security Warning" => "Bezpečnostné varovanie", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Verzia Vášho PHP je napadnuteľná pomocou techniky \"NULL Byte\" (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Aktualizujte prosím vašu inštanciu PHP pre bezpečné používanie %s.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nie je dostupný žiadny bezpečný generátor náhodných čísel, prosím, povoľte rozšírenie OpenSSL v PHP.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez bezpečného generátora náhodných čísel môže útočník predpovedať token pre obnovu hesla a prevziať kontrolu nad vaším kontom.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Váš priečinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Pre informácie, ako správne nastaviť váš server, sa pozrite do <a href=\"%s\" target=\"_blank\">dokumentácie</a>.", "Create an <strong>admin account</strong>" => "Vytvoriť <strong>administrátorský účet</strong>", @@ -163,7 +161,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Ako databáza bude použitá SQLite. Pri väčších inštaláciách odporúčame zmeniť na inú.", "Finish setup" => "Dokončiť inštaláciu", "Finishing …" => "Dokončujem...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Táto aplikácia vyžaduje JavaScript a tento musí byť povolený pre správnu funkciu aplikácie. Prosím <a href=\"http://enable-javascript.com/\" target=\"_blank\">povoľte JavaScript</a> a znovunačítajte toto rozhranie.", "%s is available. Get more information on how to update." => "%s je dostupná. Získajte viac informácií o postupe aktualizácie.", "Log out" => "Odhlásiť", "Server side authentication failed!" => "Autentifikácia na serveri zlyhala!", diff --git a/core/l10n/sl.php b/core/l10n/sl.php index 7212e5a27b3..25c01c8032a 100644 --- a/core/l10n/sl.php +++ b/core/l10n/sl.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Varnostno opozorilo", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Uporabljena različica PHP je ranljiva za napad NULL Byte (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Za varno uporabo storitve %s, je treba posodobiti namestitev PHP", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Na voljo ni nobenega varnega ustvarjalnika naključnih števil. Omogočiti je treba razširitev PHP OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Brez varnega ustvarjalnika naključnih števil je mogoče napovedati žetone za ponastavitev gesla, s čimer je mogoče prevzeti nadzor nad računom.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Podatkovna mapa in datoteke so najverjetneje javno dostopni preko interneta, saj datoteka .htaccess ni ustrezno nastavljena.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Za več informacij o pravilnem nastavljanju strežnika, kliknite na povezavo do <a href=\"%s\" target=\"_blank\">dokumentacije</a>.", "Create an <strong>admin account</strong>" => "Ustvari <strong>skrbniški račun</strong>", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Za podatkovno zbirko bo uporabljen SQLite. Za večje zbirke je priporočljivo to zamenjati.", "Finish setup" => "Končaj nastavitev", "Finishing …" => "Poteka zaključevanje opravila ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Program zahteva omogočeno skriptno podporo. Za pravilno delovanje je treba omogočiti <a href=\"http://enable-javascript.com/\" target=\"_blank\">JavaScript</a> in nato ponovno osvežiti vmesnik.", "%s is available. Get more information on how to update." => "%s je na voljo. Pridobite več podrobnosti za posodobitev.", "Log out" => "Odjava", "Server side authentication failed!" => "Overitev s strežnika je spodletela!", diff --git a/core/l10n/sq.php b/core/l10n/sq.php index 498bc7362b8..654d991d6d5 100644 --- a/core/l10n/sq.php +++ b/core/l10n/sq.php @@ -82,8 +82,6 @@ $TRANSLATIONS = array( "Security Warning" => "Paralajmërim sigurie", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Versioni juaj i PHP-së është i cënueshëm nga sulmi NULL Byte (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Ju lutem azhurnoni instalimin tuaj të PHP-së që të përdorni %s -in në mënyrë të sigurt.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nuk disponohet asnjë krijues numrash të rastësishëm, ju lutem aktivizoni shtesën PHP OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Pa një krijues numrash të rastësishëm të sigurt një person i huaj mund të jetë në gjendje të parashikojë kodin dhe të marri llogarinë tuaj.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Dosja dhe skedarët e të dhënave tuaja mbase janë të arritshme nga interneti sepse skedari .htaccess nuk po punon.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Për më shumë informacion mbi konfigurimin e duhur të serverit tuaj, ju lutem shikoni <a href=\"%s\" target=\"_blank\">dokumentacionin</a>.", "Create an <strong>admin account</strong>" => "Krijo një <strong>llogari administruesi</strong>", diff --git a/core/l10n/sr.php b/core/l10n/sr.php index 27df2546c78..fb315967707 100644 --- a/core/l10n/sr.php +++ b/core/l10n/sr.php @@ -70,8 +70,6 @@ $TRANSLATIONS = array( "Access forbidden" => "Забрањен приступ", "Cloud not found" => "Облак није нађен", "Security Warning" => "Сигурносно упозорење", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Поуздан генератор случајних бројева није доступан, предлажемо да укључите PHP проширење OpenSSL.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без поузданог генератора случајнох бројева нападач лако може предвидети лозинку за поништавање кључа шифровања и отети вам налог.", "Create an <strong>admin account</strong>" => "Направи <strong>административни налог</strong>", "Password" => "Лозинка", "Data folder" => "Фацикла података", diff --git a/core/l10n/sr@latin.php b/core/l10n/sr@latin.php index 459d4d812de..6bcaaa3320d 100644 --- a/core/l10n/sr@latin.php +++ b/core/l10n/sr@latin.php @@ -82,8 +82,6 @@ $TRANSLATIONS = array( "Cloud not found" => "Oblak nije nađen", "Security Warning" => "Bezbednosno upozorenje", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Vaša PHP verzija je ranjiva na ", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nije dostupan generator slučajnog broja, molimo omogućite PHP OpenSSL ekstenziju.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez generatora slučajnog broja napadač može predvideti token za reset lozinke i preuzeti Vaš nalog.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Vaši podaci i direktorijumi su verovatno dostupni sa interneta jer .htaccess fajl ne funkcioniše.", "Create an <strong>admin account</strong>" => "Napravi <strong>administrativni nalog</strong>", "Password" => "Lozinka", diff --git a/core/l10n/sv.php b/core/l10n/sv.php index caa6ff5eb2d..e52d3f81756 100644 --- a/core/l10n/sv.php +++ b/core/l10n/sv.php @@ -144,8 +144,6 @@ $TRANSLATIONS = array( "Security Warning" => "Säkerhetsvarning", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Din version av PHP är sårbar för NULL byte attack (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Var god uppdatera din PHP-installation för att använda %s säkert.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ingen säker slumptalsgenerator finns tillgänglig. Du bör aktivera PHP OpenSSL-tillägget.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Utan en säker slumptalsgenerator kan angripare få möjlighet att förutsäga lösenordsåterställningar och ta över ditt konto.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "För information hur du korrekt konfigurerar din servern, se ownCloud <a href=\"%s\" target=\"_blank\">dokumentationen</a>.", "Create an <strong>admin account</strong>" => "Skapa ett <strong>administratörskonto</strong>", @@ -162,7 +160,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite kommer att användas som databas. För större installationer rekommenderar vi att du ändrar databastyp.", "Finish setup" => "Avsluta installation", "Finishing …" => "Avslutar ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Denna applikation kräver JavaScript aktiverat för att fungera korrekt. Vänligen <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktivera JavaScript</a> och ladda om gränssnittet.", "%s is available. Get more information on how to update." => "%s är tillgänglig. Få mer information om hur du går tillväga för att uppdatera.", "Log out" => "Logga ut", "Server side authentication failed!" => "Servern misslyckades med autentisering!", diff --git a/core/l10n/ta_LK.php b/core/l10n/ta_LK.php index 0cd67b00e7d..ac613efaac2 100644 --- a/core/l10n/ta_LK.php +++ b/core/l10n/ta_LK.php @@ -67,8 +67,6 @@ $TRANSLATIONS = array( "Access forbidden" => "அணுக தடை", "Cloud not found" => "Cloud காணப்படவில்லை", "Security Warning" => "பாதுகாப்பு எச்சரிக்கை", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "குறிப்பிட்ட எண்ணிக்கை பாதுகாப்பான புறப்பாக்கி / உண்டாக்கிகள் இல்லை, தயவுசெய்து PHP OpenSSL நீட்சியை இயலுமைப்படுத்துக. ", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "பாதுகாப்பான சீரற்ற எண்ணிக்கையான புறப்பாக்கி இல்லையெனின், தாக்குனரால் கடவுச்சொல் மீளமைப்பு அடையாளவில்லைகள் முன்மொழியப்பட்டு உங்களுடைய கணக்கை கைப்பற்றலாம்.", "Create an <strong>admin account</strong>" => "<strong> நிர்வாக கணக்கொன்றை </strong> உருவாக்குக", "Password" => "கடவுச்சொல்", "Data folder" => "தரவு கோப்புறை", diff --git a/core/l10n/th_TH.php b/core/l10n/th_TH.php index 67a5c34e569..f4cee72b4f4 100644 --- a/core/l10n/th_TH.php +++ b/core/l10n/th_TH.php @@ -76,8 +76,6 @@ $TRANSLATIONS = array( "Access forbidden" => "การเข้าถึงถูกหวงห้าม", "Cloud not found" => "ไม่พบ Cloud", "Security Warning" => "คำเตือนเกี่ยวกับความปลอดภัย", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "ยังไม่มีตัวสร้างหมายเลขแบบสุ่มให้ใช้งาน, กรุณาเปิดใช้งานส่วนเสริม PHP OpenSSL", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "หากปราศจากตัวสร้างหมายเลขแบบสุ่มที่ช่วยป้องกันความปลอดภัย ผู้บุกรุกอาจสามารถที่จะคาดคะเนรหัสยืนยันการเข้าถึงเพื่อรีเซ็ตรหัสผ่าน และเอาบัญชีของคุณไปเป็นของตนเองได้", "Create an <strong>admin account</strong>" => "สร้าง <strong>บัญชีผู้ดูแลระบบ</strong>", "Password" => "รหัสผ่าน", "Data folder" => "โฟลเดอร์เก็บข้อมูล", diff --git a/core/l10n/tr.php b/core/l10n/tr.php index 762f3d286a0..5b7b56c21f3 100644 --- a/core/l10n/tr.php +++ b/core/l10n/tr.php @@ -147,8 +147,6 @@ $TRANSLATIONS = array( "Security Warning" => "Güvenlik Uyarısı", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "PHP sürümünüz NULL Byte saldırısına açık (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "%s yazılımını güvenli olarak kullanmak için, lütfen PHP kurulumunuzu güncelleyin.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Güvenli rastgele sayı üreticisi bulunamadı. Lütfen PHP OpenSSL eklentisini etkinleştirin.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Güvenli rastgele sayı üreticisi olmadan saldırganlar parola sıfırlama simgelerini tahmin edip hesabınızı ele geçirebilir.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Veri klasörünüz ve dosyalarınız .htaccess dosyası çalışmadığı için İnternet'ten erişime açık.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Sunucunuzu nasıl ayarlayacağınıza dair bilgi için, lütfen <a href=\"%s\" target=\"_blank\">belgelendirme sayfasını</a> ziyaret edin.", "Create an <strong>admin account</strong>" => "Bir <strong>yönetici hesabı</strong> oluşturun", @@ -165,7 +163,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Veritabanı olarak SQLite kullanılacak. Daha büyük kurulumlar için bunu değiştirmenizi öneririz.", "Finish setup" => "Kurulumu tamamla", "Finishing …" => "Tamamlanıyor ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Uygulama, doğru çalışabilmesi için JavaScript'in etkinleştirilmesini gerektiriyor. Lütfen <a href=\"http://enable-javascript.com/\" target=\"_blank\">JavaScript'i etkinleştirin</a> ve bu arayüzü yeniden yükleyin.", "%s is available. Get more information on how to update." => "%s kullanılabilir. Nasıl güncelleyeceğiniz hakkında daha fazla bilgi alın.", "Log out" => "Çıkış yap", "Server side authentication failed!" => "Sunucu taraflı yetkilendirme başarısız!", diff --git a/core/l10n/uk.php b/core/l10n/uk.php index cce88a15938..c55dba41920 100644 --- a/core/l10n/uk.php +++ b/core/l10n/uk.php @@ -124,8 +124,6 @@ $TRANSLATIONS = array( "Security Warning" => "Попередження про небезпеку", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Ваша версія PHP вразлива для атак NULL Byte (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Будь ласка, оновіть вашу інсталяцію PHP для використання %s безпеки.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Не доступний безпечний генератор випадкових чисел, будь ласка, активуйте PHP OpenSSL додаток.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без безпечного генератора випадкових чисел зловмисник може визначити токени скидання пароля і заволодіти Вашим обліковим записом.", "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 <a href=\"%s\" target=\"_blank\">documentation</a>." => "Для отримання інформації, як правильно налаштувати сервер, див. <a href=\"%s\" target=\"_blank\">документацію</a>.", "Create an <strong>admin account</strong>" => "Створити <strong>обліковий запис адміністратора</strong>", diff --git a/core/l10n/ur_PK.php b/core/l10n/ur_PK.php index d82210e5629..3ba7bdeb4ef 100644 --- a/core/l10n/ur_PK.php +++ b/core/l10n/ur_PK.php @@ -104,8 +104,6 @@ $TRANSLATIONS = array( "Security Warning" => "حفاظتی انتباہ", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "آپ کا پی ایچ پی ورین نل بائٹ کے حملے کے خطرے سے دوچار ہے (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => " براہ مہربانی %s کو بحفاظت استعمال کرنے کے پی ایچ پی کی تنصیب اپڈیٹ کریں", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "کوئ محفوظ بے ترتیب نمبر جنریٹر موجود نہیں مہربانی کر کے پی ایچ پی اوپن ایس ایس ایل ایکسٹنشن چالو کریں.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "ایک محفوظ بے ترتیب نمبر جنریٹر کے بغیر ایک حملہ آور پاس ورڈ ری سیٹ ٹوکن کی پیشن گوئی کرنے کے قابل اور اپ کے حساب پر قبضہ کر سکتا ہے", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "آپ کی ڈیٹا ڈائریکٹری اور فائلیں امکان ہےانٹرنیٹ سے قابل رسائی ہیں کیونکہ htaccess. فائل کام نہیں کرتا ہے", "Create an <strong>admin account</strong>" => "ایک<strong> ایڈمن اکاؤنٹ</strong> بنائیں", "Password" => "پاسورڈ", diff --git a/core/l10n/vi.php b/core/l10n/vi.php index 6ca34d2c8ce..13b19dcd9c1 100644 --- a/core/l10n/vi.php +++ b/core/l10n/vi.php @@ -116,8 +116,6 @@ $TRANSLATIONS = array( "Security Warning" => "Cảnh bảo bảo mật", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Phiên bản PHP của bạn có lỗ hổng NULL Byte attack (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Vui lòng cập nhật bản cài đặt PHP để sử dụng %s một cách an toàn.", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Không an toàn ! chức năng random number generator đã có sẵn ,vui lòng bật PHP OpenSSL extension.", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Nếu không có random number generator , Hacker có thể thiết lập lại mật khẩu và chiếm tài khoản của bạn.", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Để biết thêm thông tin và cách cấu hình đúng vui lòng xem thêm <a href=\"%s\" target=\"_blank\">tài l</a>.", "Create an <strong>admin account</strong>" => "Tạo một <strong>tài khoản quản trị</strong>", @@ -131,7 +129,6 @@ $TRANSLATIONS = array( "Database host" => "Database host", "Finish setup" => "Cài đặt hoàn tất", "Finishing …" => "Đang hoàn thành ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "Ứng dụng này yêu cầu JavaScript để hoạt động. Vui lòng <a href=\"http://enable-javascript.com/\" target=\"_blank\">kích hoạt JavaScript</a> và tải lại giao diện này.", "%s is available. Get more information on how to update." => "%s còn trống. Xem thêm thông tin cách cập nhật.", "Log out" => "Đăng xuất", "Server side authentication failed!" => "Xác thực phía máy chủ không thành công!", diff --git a/core/l10n/zh_CN.php b/core/l10n/zh_CN.php index 7cb94219ad7..1e44db106b0 100644 --- a/core/l10n/zh_CN.php +++ b/core/l10n/zh_CN.php @@ -145,8 +145,6 @@ $TRANSLATIONS = array( "Security Warning" => "安全警告", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "你的PHP版本容易受到空字节攻击 (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "为保证安全使用 %s 请更新您的PHP。", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "随机数生成器无效,请启用PHP的OpenSSL扩展", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "没有安全随机码生成器,攻击者可能会猜测密码重置信息从而窃取您的账户", "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 <a href=\"%s\" target=\"_blank\">documentation</a>." => "关于如何配置服务器,请参见 <a href=\"%s\" target=\"_blank\">此文档</a>。", "Create an <strong>admin account</strong>" => "创建<strong>管理员账号</strong>", @@ -163,7 +161,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "将会使用 SQLite 为数据库。我们不建议大型站点使用 SQLite。", "Finish setup" => "安装完成", "Finishing …" => "正在结束 ...", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "此程序需要启用JavaScript才能正常运行。请<a href=\"http://enable-javascript.com/\" target=\"_blank\">启用JavaScript</a> 并重新加载此接口。", "%s is available. Get more information on how to update." => "%s 可用。获取更多关于如何升级的信息。", "Log out" => "注销", "Server side authentication failed!" => "服务端验证失败!", diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php index 8c68c240135..d5569202b59 100644 --- a/core/l10n/zh_TW.php +++ b/core/l10n/zh_TW.php @@ -146,8 +146,6 @@ $TRANSLATIONS = array( "Security Warning" => "安全性警告", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "您的 PHP 版本無法抵抗 NULL Byte 攻擊 (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "請更新 PHP 以安全地使用 %s。", -"No secure random number generator is available, please enable the PHP OpenSSL extension." => "沒有可用的亂數產生器,請啟用 PHP 中的 OpenSSL 擴充功能。", -"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "若沒有安全的亂數產生器,攻擊者可能可以預測密碼重設信物,然後控制您的帳戶。", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "您的資料目錄看起來可以被 Internet 公開存取,因為 .htaccess 設定並未生效。", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "請參考<a href=\"%s\" target=\"_blank\">說明文件</a>以瞭解如何正確設定您的伺服器。", "Create an <strong>admin account</strong>" => "建立一個<strong>管理者帳號</strong>", @@ -164,7 +162,6 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "將會使用 SQLite 作為資料庫,在大型安裝中建議使用其他種資料庫", "Finish setup" => "完成設定", "Finishing …" => "即將完成…", -"This application requires JavaScript to be enabled for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and re-load this interface." => "這個應用程式需要啟用 Javascript 才能正常運作,請<a href=\"http://enable-javascript.com/\" target=\"_blank\">啟用 Javascript</a> 然後重新載入頁面", "%s is available. Get more information on how to update." => "%s 已經釋出,瞭解更多資訊以進行更新。", "Log out" => "登出", "Server side authentication failed!" => "伺服器端認證失敗!", diff --git a/core/routes.php b/core/routes.php index 28a3680dd91..fac67f23175 100644 --- a/core/routes.php +++ b/core/routes.php @@ -100,6 +100,11 @@ $this->create('core_avatar_post_cropped', '/avatar/cropped') ->post() ->action('OC\Core\Avatar\Controller', 'postCroppedAvatar'); +// Sharing routes +$this->create('core_share_show_share', '/s/{token}') + ->get() + ->action('OC\Core\Share\Controller', 'showShare'); + // used for heartbeat $this->create('heartbeat', '/heartbeat')->action(function(){ // do nothing diff --git a/core/setup/controller.php b/core/setup/controller.php index 91b90e0adef..5da94e83ccc 100644 --- a/core/setup/controller.php +++ b/core/setup/controller.php @@ -153,7 +153,6 @@ class Controller { 'hasMSSQL' => $hasMSSQL, 'databases' => $databases, 'directory' => $datadir, - 'secureRNG' => \OC_Util::secureRNGAvailable(), 'htaccessWorking' => $htaccessWorking, 'vulnerableToNullByte' => $vulnerableToNullByte, 'errors' => $errors, diff --git a/core/share/controller.php b/core/share/controller.php new file mode 100644 index 00000000000..c1741af0d98 --- /dev/null +++ b/core/share/controller.php @@ -0,0 +1,23 @@ +<?php +/** + * Copyright (c) 2014 Christopher Schäpers <christopher@schaepers.it> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Core\Share; + +class Controller { + public static function showShare($args) { + \OC_Util::checkAppEnabled('files_sharing'); + + $token = $args['token']; + + \OC_App::loadApp('files_sharing'); + \OC_User::setIncognitoMode(true); + + require_once \OC_App::getAppPath('files_sharing') .'/public.php'; + } +} +?> diff --git a/core/templates/altmail.php b/core/templates/altmail.php index b2b45e454a7..38531d109b7 100644 --- a/core/templates/altmail.php +++ b/core/templates/altmail.php @@ -2,7 +2,7 @@ print_unescaped($l->t("Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n", array($_['user_displayname'], $_['filename'], $_['link']))); if ( isset($_['expiration']) ) { print_unescaped($l->t("The share will expire on %s.", array($_['expiration']))); - print_unescaped('\n\n'); + print_unescaped("\n\n"); } // TRANSLATORS term at the end of a mail p($l->t("Cheers!")); diff --git a/core/templates/installation.php b/core/templates/installation.php index f934e3a86c2..b74d4caf107 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -27,13 +27,6 @@ <?php p($l->t('Please update your PHP installation to use %s securely.', $theme->getName() )); ?></p> </fieldset> <?php endif; ?> - <?php if(!$_['secureRNG']): ?> - <fieldset class="warning"> - <legend><strong><?php p($l->t('Security Warning'));?></strong></legend> - <p><?php p($l->t('No secure random number generator is available, please enable the PHP OpenSSL extension.'));?><br/> - <?php p($l->t('Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account.'));?></p> - </fieldset> - <?php endif; ?> <?php if(!$_['htaccessWorking']): ?> <fieldset class="warning"> <legend><strong><?php p($l->t('Security Warning'));?></strong></legend> diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php index 127e99be84d..009cfe21c3f 100644 --- a/core/templates/layout.base.php +++ b/core/templates/layout.base.php @@ -31,6 +31,7 @@ <?php endforeach; ?> </head> <body id="body-public"> + <noscript><div id="nojavascript"><div><?php print_unescaped($l->t('This application requires JavaScript for correct operation. Please <a href="http://enable-javascript.com/" target="_blank">enable JavaScript</a> and reload the page.')); ?></div></div></noscript> <?php print_unescaped($_['content']); ?> </body> </html> diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php index 00950802fec..fb34769ff7c 100644 --- a/core/templates/layout.guest.php +++ b/core/templates/layout.guest.php @@ -12,7 +12,7 @@ </title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0"> - <meta name="apple-itunes-app" content="app-id=543672169"> + <meta name="apple-itunes-app" content="app-id=<?php p($theme->getiTunesAppId()); ?>"> <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>" /> <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>" /> <?php foreach($_['cssfiles'] as $cssfile): ?> @@ -33,6 +33,7 @@ <?php endforeach; ?> </head> <body id="body-login"> + <noscript><div id="nojavascript"><div><?php print_unescaped($l->t('This application requires JavaScript for correct operation. Please <a href="http://enable-javascript.com/" target="_blank">enable JavaScript</a> and reload the page.')); ?></div></div></noscript> <div class="wrapper"><!-- for sticky footer --> <div class="v-align"><!-- vertically centred box --> <header><div id="header"> diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index 69a181735ca..7bc2511f03e 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -16,7 +16,7 @@ <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"> - <meta name="apple-itunes-app" content="app-id=543672169"> + <meta name="apple-itunes-app" content="app-id=<?php p($theme->getiTunesAppId()); ?>"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="apple-mobile-web-app-title" content="<?php p((!empty($_['application']) && $_['appid']!='files')? $_['application']:'ownCloud'); ?>"> @@ -40,7 +40,7 @@ <?php endforeach; ?> </head> <body id="<?php p($_['bodyid']);?>"> - <noscript><div id="nojavascript"><div><?php print_unescaped($l->t('This application requires JavaScript to be enabled for correct operation. Please <a href="http://enable-javascript.com/" target="_blank">enable JavaScript</a> and re-load this interface.')); ?></div></div></noscript> + <noscript><div id="nojavascript"><div><?php print_unescaped($l->t('This application requires JavaScript for correct operation. Please <a href="http://enable-javascript.com/" target="_blank">enable JavaScript</a> and reload the page.')); ?></div></div></noscript> <div id="notification-container"> <div id="notification"></div> <?php if ($_['updateAvailable']): ?> diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 9a469450af0..cb738b617fe 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -23,32 +23,32 @@ msgstr "" msgid "Couldn't send mail to following users: %s " msgstr "" -#: ajax/update.php:10 +#: ajax/update.php:14 msgid "Turned on maintenance mode" msgstr "" -#: ajax/update.php:13 +#: ajax/update.php:17 msgid "Turned off maintenance mode" msgstr "" -#: ajax/update.php:16 +#: ajax/update.php:20 msgid "Updated database" msgstr "" -#: ajax/update.php:19 +#: ajax/update.php:23 msgid "Checked database schema update" msgstr "" -#: ajax/update.php:22 +#: ajax/update.php:26 msgid "Checked database schema update for apps" msgstr "" -#: ajax/update.php:25 +#: ajax/update.php:29 #, php-format msgid "Updated \"%s\" to %s" msgstr "" -#: ajax/update.php:33 +#: ajax/update.php:37 #, php-format msgid "Disabled incompatible apps: %s" msgstr "" @@ -149,27 +149,27 @@ msgstr "" msgid "December" msgstr "" -#: js/js.js:497 +#: js/js.js:498 msgid "Settings" msgstr "" -#: js/js.js:586 +#: js/js.js:587 msgid "File" msgstr "" -#: js/js.js:587 +#: js/js.js:588 msgid "Folder" msgstr "" -#: js/js.js:588 +#: js/js.js:589 msgid "Image" msgstr "" -#: js/js.js:589 +#: js/js.js:590 msgid "Audio" msgstr "" -#: js/js.js:603 +#: js/js.js:604 msgid "Saving..." msgstr "" @@ -308,12 +308,12 @@ msgstr "" msgid "Share" msgstr "" -#: js/share.js:326 js/share.js:340 js/share.js:347 js/share.js:1002 +#: js/share.js:326 js/share.js:340 js/share.js:347 js/share.js:1005 #: templates/installation.php:10 msgid "Error" msgstr "" -#: js/share.js:328 js/share.js:1065 +#: js/share.js:328 js/share.js:1068 msgid "Error while sharing" msgstr "" @@ -418,27 +418,27 @@ msgstr "" msgid "delete" msgstr "" -#: js/share.js:983 +#: js/share.js:986 msgid "Password protected" msgstr "" -#: js/share.js:1002 +#: js/share.js:1005 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:1023 +#: js/share.js:1026 msgid "Error setting expiration date" msgstr "" -#: js/share.js:1052 +#: js/share.js:1055 msgid "Sending ..." msgstr "" -#: js/share.js:1063 +#: js/share.js:1066 msgid "Email sent" msgstr "" -#: js/share.js:1087 +#: js/share.js:1090 msgid "Warning" msgstr "" @@ -514,8 +514,8 @@ msgid "You will receive a link to reset your password via Email." msgstr "" #: lostpassword/templates/lostpassword.php:8 -#: lostpassword/templates/lostpassword.php:9 templates/installation.php:51 -#: templates/installation.php:54 templates/login.php:23 templates/login.php:27 +#: lostpassword/templates/lostpassword.php:9 templates/installation.php:44 +#: templates/installation.php:47 templates/login.php:23 templates/login.php:27 msgid "Username" msgstr "" @@ -631,7 +631,6 @@ msgid "Cheers!" msgstr "" #: templates/installation.php:25 templates/installation.php:32 -#: templates/installation.php:39 msgid "Security Warning" msgstr "" @@ -646,94 +645,83 @@ msgstr "" #: templates/installation.php:33 msgid "" -"No secure random number generator is available, please enable the PHP " -"OpenSSL extension." -msgstr "" - -#: templates/installation.php:34 -msgid "" -"Without a secure random number generator an attacker may be able to predict " -"password reset tokens and take over your account." -msgstr "" - -#: templates/installation.php:40 -msgid "" "Your data directory and files are probably accessible from the internet " "because the .htaccess file does not work." msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:35 #, php-format msgid "" "For information how to properly configure your server, please see the <a " "href=\"%s\" target=\"_blank\">documentation</a>." msgstr "" -#: templates/installation.php:48 +#: templates/installation.php:41 msgid "Create an <strong>admin account</strong>" msgstr "" -#: templates/installation.php:59 templates/installation.php:62 +#: templates/installation.php:52 templates/installation.php:55 #: templates/login.php:33 templates/login.php:36 msgid "Password" msgstr "" -#: templates/installation.php:72 +#: templates/installation.php:65 msgid "Storage & database" msgstr "" -#: templates/installation.php:79 +#: templates/installation.php:72 msgid "Data folder" msgstr "" -#: templates/installation.php:92 +#: templates/installation.php:85 msgid "Configure the database" msgstr "" -#: templates/installation.php:96 +#: templates/installation.php:89 #, php-format msgid "Only %s is available." msgstr "" -#: templates/installation.php:111 templates/installation.php:113 +#: templates/installation.php:104 templates/installation.php:106 msgid "Database user" msgstr "" -#: templates/installation.php:119 templates/installation.php:122 +#: templates/installation.php:112 templates/installation.php:115 msgid "Database password" msgstr "" -#: templates/installation.php:127 templates/installation.php:129 +#: templates/installation.php:120 templates/installation.php:122 msgid "Database name" msgstr "" -#: templates/installation.php:137 templates/installation.php:139 +#: templates/installation.php:130 templates/installation.php:132 msgid "Database tablespace" msgstr "" -#: templates/installation.php:146 templates/installation.php:148 +#: templates/installation.php:139 templates/installation.php:141 msgid "Database host" msgstr "" -#: templates/installation.php:157 +#: templates/installation.php:150 msgid "" "SQLite will be used as database. For larger installations we recommend to " "change this." msgstr "" -#: templates/installation.php:159 +#: templates/installation.php:152 msgid "Finish setup" msgstr "" -#: templates/installation.php:159 +#: templates/installation.php:152 msgid "Finishing …" msgstr "" +#: templates/layout.base.php:34 templates/layout.guest.php:36 #: templates/layout.user.php:43 msgid "" -"This application requires JavaScript to be enabled for correct operation. " -"Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable " -"JavaScript</a> and re-load this interface." +"This application requires JavaScript for correct operation. Please <a href=" +"\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> " +"and reload the page." msgstr "" #: templates/layout.user.php:47 diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 3a6e4910acb..f78012d8538 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -35,11 +35,15 @@ msgstr "" msgid "Could not move %s - File with this name already exists" msgstr "" -#: ajax/move.php:25 ajax/move.php:28 +#: ajax/move.php:26 ajax/move.php:34 #, php-format msgid "Could not move %s" msgstr "" +#: ajax/move.php:29 +msgid "Permission denied" +msgstr "" + #: ajax/newfile.php:58 js/files.js:103 msgid "File name cannot be empty." msgstr "" @@ -185,28 +189,28 @@ msgstr "" msgid "Could not get result from server." msgstr "" -#: js/file-upload.js:502 +#: js/file-upload.js:510 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/file-upload.js:567 +#: js/file-upload.js:575 msgid "URL cannot be empty" msgstr "" -#: js/file-upload.js:571 js/filelist.js:1290 +#: js/file-upload.js:579 js/filelist.js:1302 msgid "{new_name} already exists" msgstr "" -#: js/file-upload.js:626 +#: js/file-upload.js:634 msgid "Could not create file" msgstr "" -#: js/file-upload.js:642 +#: js/file-upload.js:650 msgid "Could not create folder" msgstr "" -#: js/file-upload.js:689 +#: js/file-upload.js:697 msgid "Error fetching URL" msgstr "" @@ -234,55 +238,59 @@ msgstr "" msgid "Rename" msgstr "" -#: js/filelist.js:685 js/filelist.js:1818 +#: js/filelist.js:692 js/filelist.js:1848 msgid "Pending" msgstr "" -#: js/filelist.js:1241 +#: js/filelist.js:1253 msgid "Error moving file." msgstr "" -#: js/filelist.js:1249 +#: js/filelist.js:1261 msgid "Error moving file" msgstr "" -#: js/filelist.js:1249 +#: js/filelist.js:1261 msgid "Error" msgstr "" -#: js/filelist.js:1338 +#: js/filelist.js:1350 msgid "Could not rename file" msgstr "" -#: js/filelist.js:1460 +#: js/filelist.js:1472 msgid "Error deleting file." msgstr "" -#: js/filelist.js:1563 templates/list.php:61 +#: js/filelist.js:1574 templates/list.php:61 msgid "Name" msgstr "" -#: js/filelist.js:1564 templates/list.php:72 +#: js/filelist.js:1575 templates/list.php:72 msgid "Size" msgstr "" -#: js/filelist.js:1565 templates/list.php:75 +#: js/filelist.js:1576 templates/list.php:75 msgid "Modified" msgstr "" -#: js/filelist.js:1575 js/filesummary.js:141 js/filesummary.js:168 +#: js/filelist.js:1586 js/filesummary.js:141 js/filesummary.js:168 msgid "%n folder" msgid_plural "%n folders" msgstr[0] "" msgstr[1] "" -#: js/filelist.js:1581 js/filesummary.js:142 js/filesummary.js:169 +#: js/filelist.js:1592 js/filesummary.js:142 js/filesummary.js:169 msgid "%n file" msgid_plural "%n files" msgstr[0] "" msgstr[1] "" -#: js/filelist.js:1711 js/filelist.js:1750 +#: js/filelist.js:1649 templates/list.php:47 +msgid "You don’t have permission to upload or create files here" +msgstr "" + +#: js/filelist.js:1741 js/filelist.js:1780 msgid "Uploading %n file" msgid_plural "Uploading %n files" msgstr[0] "" @@ -388,10 +396,6 @@ msgstr "" msgid "From link" msgstr "" -#: templates/list.php:47 -msgid "You don’t have permission to upload or create files here" -msgstr "" - #: templates/list.php:52 msgid "Nothing in here. Upload something!" msgstr "" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 2e1a166bd47..560ee3006d3 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index cca1e67d514..ed0757a7317 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 50fe2779365..46b57552f10 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -129,20 +129,20 @@ msgstr "" msgid "For more info, please ask the person who sent this link." msgstr "" -#: templates/public.php:27 +#: templates/public.php:31 msgid "Add to your ownCloud" msgstr "" -#: templates/public.php:35 +#: templates/public.php:40 msgid "Download" msgstr "" -#: templates/public.php:66 +#: templates/public.php:71 #, php-format msgid "Download %s" msgstr "" -#: templates/public.php:70 +#: templates/public.php:75 msgid "Direct link" msgstr "" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index 390916484d4..a03aae3d74d 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index aa94b463a21..6a80c88ba7f 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 235e5403b46..42bd85f8ef0 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -33,52 +33,52 @@ msgstr "" msgid "See %s" msgstr "" -#: base.php:209 private/util.php:442 +#: base.php:209 private/util.php:444 #, php-format msgid "" "This can usually be fixed by %sgiving the webserver write access to the " "config directory%s." msgstr "" -#: base.php:581 +#: base.php:583 msgid "Sample configuration detected" msgstr "" -#: base.php:582 +#: base.php:584 msgid "" "It has been detected that the sample configuration has been copied. This can " "break your installation and is unsupported. Please read the documentation " "before performing changes on config.php" msgstr "" -#: private/app.php:374 +#: private/app.php:391 msgid "Help" msgstr "" -#: private/app.php:387 +#: private/app.php:404 msgid "Personal" msgstr "" -#: private/app.php:398 +#: private/app.php:415 msgid "Settings" msgstr "" -#: private/app.php:410 +#: private/app.php:427 msgid "Users" msgstr "" -#: private/app.php:423 +#: private/app.php:440 msgid "Admin" msgstr "" -#: private/app.php:1118 +#: private/app.php:1135 #, php-format msgid "" "App \\\"%s\\\" can't be installed because it is not compatible with this " "version of ownCloud." msgstr "" -#: private/app.php:1130 +#: private/app.php:1147 msgid "No app name specified" msgstr "" @@ -90,7 +90,7 @@ msgstr "" msgid "Invalid image" msgstr "" -#: private/defaults.php:42 +#: private/defaults.php:44 msgid "web services under your control" msgstr "" @@ -262,13 +262,13 @@ msgstr "" msgid "Set an admin password." msgstr "" -#: private/setup.php:170 +#: private/setup.php:175 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: private/setup.php:171 +#: private/setup.php:176 #, php-format msgid "Please double check the <a href='%s'>installation guides</a>." msgstr "" @@ -327,78 +327,78 @@ msgid "" "are allowed" msgstr "" -#: private/share/share.php:654 +#: private/share/share.php:657 #, php-format msgid "Sharing %s failed, because sharing with links is not allowed" msgstr "" -#: private/share/share.php:661 +#: private/share/share.php:664 #, php-format msgid "Share type %s is not valid for %s" msgstr "" -#: private/share/share.php:863 +#: private/share/share.php:866 #, php-format msgid "" "Setting permissions for %s failed, because the permissions exceed " "permissions granted to %s" msgstr "" -#: private/share/share.php:924 +#: private/share/share.php:927 #, php-format msgid "Setting permissions for %s failed, because the item was not found" msgstr "" -#: private/share/share.php:962 +#: private/share/share.php:965 #, php-format msgid "" "Cannot set expiration date. Shares cannot expire later than %s after they " "have been shared" msgstr "" -#: private/share/share.php:970 +#: private/share/share.php:973 msgid "Cannot set expiration date. Expiration date is in the past" msgstr "" -#: private/share/share.php:1095 +#: private/share/share.php:1098 #, php-format msgid "Sharing backend %s must implement the interface OCP\\Share_Backend" msgstr "" -#: private/share/share.php:1102 +#: private/share/share.php:1105 #, php-format msgid "Sharing backend %s not found" msgstr "" -#: private/share/share.php:1108 +#: private/share/share.php:1111 #, php-format msgid "Sharing backend for %s not found" msgstr "" -#: private/share/share.php:1526 +#: private/share/share.php:1529 #, php-format msgid "Sharing %s failed, because the user %s is the original sharer" msgstr "" -#: private/share/share.php:1535 +#: private/share/share.php:1538 #, php-format msgid "" "Sharing %s failed, because the permissions exceed permissions granted to %s" msgstr "" -#: private/share/share.php:1551 +#: private/share/share.php:1554 #, php-format msgid "Sharing %s failed, because resharing is not allowed" msgstr "" -#: private/share/share.php:1563 +#: private/share/share.php:1566 #, php-format msgid "" "Sharing %s failed, because the sharing backend for %s could not find its " "source" msgstr "" -#: private/share/share.php:1577 +#: private/share/share.php:1580 #, php-format msgid "" "Sharing %s failed, because the file could not be found in the file cache" @@ -409,51 +409,51 @@ msgstr "" msgid "Could not find category \"%s\"" msgstr "" -#: private/template/functions.php:134 +#: private/template/functions.php:152 msgid "seconds ago" msgstr "" -#: private/template/functions.php:135 +#: private/template/functions.php:153 msgid "%n minute ago" msgid_plural "%n minutes ago" msgstr[0] "" msgstr[1] "" -#: private/template/functions.php:136 +#: private/template/functions.php:154 msgid "%n hour ago" msgid_plural "%n hours ago" msgstr[0] "" msgstr[1] "" -#: private/template/functions.php:137 +#: private/template/functions.php:155 msgid "today" msgstr "" -#: private/template/functions.php:138 +#: private/template/functions.php:156 msgid "yesterday" msgstr "" -#: private/template/functions.php:140 +#: private/template/functions.php:158 msgid "%n day go" msgid_plural "%n days ago" msgstr[0] "" msgstr[1] "" -#: private/template/functions.php:142 +#: private/template/functions.php:160 msgid "last month" msgstr "" -#: private/template/functions.php:143 +#: private/template/functions.php:161 msgid "%n month ago" msgid_plural "%n months ago" msgstr[0] "" msgstr[1] "" -#: private/template/functions.php:145 +#: private/template/functions.php:163 msgid "last year" msgstr "" -#: private/template/functions.php:146 +#: private/template/functions.php:164 msgid "years ago" msgstr "" @@ -475,147 +475,147 @@ msgstr "" msgid "The username is already being used" msgstr "" -#: private/util.php:427 +#: private/util.php:429 msgid "No database drivers (sqlite, mysql, or postgresql) installed." msgstr "" -#: private/util.php:434 +#: private/util.php:436 #, php-format msgid "" "Permissions can usually be fixed by %sgiving the webserver write access to " "the root directory%s." msgstr "" -#: private/util.php:441 +#: private/util.php:443 msgid "Cannot write into \"config\" directory" msgstr "" -#: private/util.php:455 +#: private/util.php:457 msgid "Cannot write into \"apps\" directory" msgstr "" -#: private/util.php:456 +#: private/util.php:458 #, php-format msgid "" "This can usually be fixed by %sgiving the webserver write access to the apps " "directory%s or disabling the appstore in the config file." msgstr "" -#: private/util.php:470 +#: private/util.php:472 #, php-format msgid "Cannot create \"data\" directory (%s)" msgstr "" -#: private/util.php:471 +#: private/util.php:473 #, php-format msgid "" "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the " "webserver write access to the root directory</a>." msgstr "" -#: private/util.php:487 +#: private/util.php:489 #, php-format msgid "Setting locale to %s failed" msgstr "" -#: private/util.php:490 +#: private/util.php:492 msgid "" "Please install one of these locales on your system and restart your " "webserver." msgstr "" -#: private/util.php:494 +#: private/util.php:496 msgid "Please ask your server administrator to install the module." msgstr "" -#: private/util.php:498 private/util.php:505 private/util.php:512 -#: private/util.php:526 private/util.php:533 private/util.php:540 -#: private/util.php:547 private/util.php:554 private/util.php:561 -#: private/util.php:576 +#: private/util.php:500 private/util.php:507 private/util.php:514 +#: private/util.php:528 private/util.php:535 private/util.php:542 +#: private/util.php:549 private/util.php:556 private/util.php:563 +#: private/util.php:578 #, php-format msgid "PHP module %s not installed." msgstr "" -#: private/util.php:568 +#: private/util.php:570 #, php-format msgid "PHP %s or higher is required." msgstr "" -#: private/util.php:569 +#: private/util.php:571 msgid "" "Please ask your server administrator to update PHP to the latest version. " "Your PHP version is no longer supported by ownCloud and the PHP community." msgstr "" -#: private/util.php:587 +#: private/util.php:589 msgid "" "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work " "properly." msgstr "" -#: private/util.php:588 +#: private/util.php:590 msgid "" "PHP Safe Mode is a deprecated and mostly useless setting that should be " "disabled. Please ask your server administrator to disable it in php.ini or " "in your webserver config." msgstr "" -#: private/util.php:595 +#: private/util.php:597 msgid "" "Magic Quotes is enabled. ownCloud requires that it is disabled to work " "properly." msgstr "" -#: private/util.php:596 +#: private/util.php:598 msgid "" "Magic Quotes is a deprecated and mostly useless setting that should be " "disabled. Please ask your server administrator to disable it in php.ini or " "in your webserver config." msgstr "" -#: private/util.php:610 +#: private/util.php:612 msgid "PHP modules have been installed, but they are still listed as missing?" msgstr "" -#: private/util.php:611 +#: private/util.php:613 msgid "Please ask your server administrator to restart the web server." msgstr "" -#: private/util.php:641 +#: private/util.php:643 msgid "PostgreSQL >= 9 required" msgstr "" -#: private/util.php:642 +#: private/util.php:644 msgid "Please upgrade your database version" msgstr "" -#: private/util.php:649 +#: private/util.php:651 msgid "Error occurred while checking PostgreSQL version" msgstr "" -#: private/util.php:650 +#: private/util.php:652 msgid "" "Please make sure you have PostgreSQL >= 9 or check the logs for more " "information about the error" msgstr "" -#: private/util.php:715 +#: private/util.php:717 msgid "" "Please change the permissions to 0770 so that the directory cannot be listed " "by other users." msgstr "" -#: private/util.php:724 +#: private/util.php:726 #, php-format msgid "Data directory (%s) is readable by other users" msgstr "" -#: private/util.php:745 +#: private/util.php:747 #, php-format msgid "Data directory (%s) is invalid" msgstr "" -#: private/util.php:746 +#: private/util.php:748 msgid "" "Please check that the data directory contains a file \".ocdata\" in its root." msgstr "" diff --git a/l10n/templates/private.pot b/l10n/templates/private.pot index 1ee314d029c..147885f1bdf 100644 --- a/l10n/templates/private.pot +++ b/l10n/templates/private.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -18,34 +18,34 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: app.php:374 +#: app.php:391 msgid "Help" msgstr "" -#: app.php:387 +#: app.php:404 msgid "Personal" msgstr "" -#: app.php:398 +#: app.php:415 msgid "Settings" msgstr "" -#: app.php:410 +#: app.php:427 msgid "Users" msgstr "" -#: app.php:423 +#: app.php:440 msgid "Admin" msgstr "" -#: app.php:1118 +#: app.php:1135 #, php-format msgid "" "App \\\"%s\\\" can't be installed because it is not compatible with this " "version of ownCloud." msgstr "" -#: app.php:1130 +#: app.php:1147 msgid "No app name specified" msgstr "" @@ -57,7 +57,7 @@ msgstr "" msgid "Invalid image" msgstr "" -#: defaults.php:42 +#: defaults.php:44 msgid "web services under your control" msgstr "" @@ -222,13 +222,13 @@ msgstr "" msgid "Set an admin password." msgstr "" -#: setup.php:170 +#: setup.php:175 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "" -#: setup.php:171 +#: setup.php:176 #, php-format msgid "Please double check the <a href='%s'>installation guides</a>." msgstr "" @@ -286,78 +286,78 @@ msgid "" "are allowed" msgstr "" -#: share/share.php:654 +#: share/share.php:657 #, php-format msgid "Sharing %s failed, because sharing with links is not allowed" msgstr "" -#: share/share.php:661 +#: share/share.php:664 #, php-format msgid "Share type %s is not valid for %s" msgstr "" -#: share/share.php:863 +#: share/share.php:866 #, php-format msgid "" "Setting permissions for %s failed, because the permissions exceed " "permissions granted to %s" msgstr "" -#: share/share.php:924 +#: share/share.php:927 #, php-format msgid "Setting permissions for %s failed, because the item was not found" msgstr "" -#: share/share.php:962 +#: share/share.php:965 #, php-format msgid "" "Cannot set expiration date. Shares cannot expire later than %s after they " "have been shared" msgstr "" -#: share/share.php:970 +#: share/share.php:973 msgid "Cannot set expiration date. Expiration date is in the past" msgstr "" -#: share/share.php:1095 +#: share/share.php:1098 #, php-format msgid "Sharing backend %s must implement the interface OCP\\Share_Backend" msgstr "" -#: share/share.php:1102 +#: share/share.php:1105 #, php-format msgid "Sharing backend %s not found" msgstr "" -#: share/share.php:1108 +#: share/share.php:1111 #, php-format msgid "Sharing backend for %s not found" msgstr "" -#: share/share.php:1526 +#: share/share.php:1529 #, php-format msgid "Sharing %s failed, because the user %s is the original sharer" msgstr "" -#: share/share.php:1535 +#: share/share.php:1538 #, php-format msgid "" "Sharing %s failed, because the permissions exceed permissions granted to %s" msgstr "" -#: share/share.php:1551 +#: share/share.php:1554 #, php-format msgid "Sharing %s failed, because resharing is not allowed" msgstr "" -#: share/share.php:1563 +#: share/share.php:1566 #, php-format msgid "" "Sharing %s failed, because the sharing backend for %s could not find its " "source" msgstr "" -#: share/share.php:1577 +#: share/share.php:1580 #, php-format msgid "" "Sharing %s failed, because the file could not be found in the file cache" @@ -368,51 +368,51 @@ msgstr "" msgid "Could not find category \"%s\"" msgstr "" -#: template/functions.php:134 +#: template/functions.php:152 msgid "seconds ago" msgstr "" -#: template/functions.php:135 +#: template/functions.php:153 msgid "%n minute ago" msgid_plural "%n minutes ago" msgstr[0] "" msgstr[1] "" -#: template/functions.php:136 +#: template/functions.php:154 msgid "%n hour ago" msgid_plural "%n hours ago" msgstr[0] "" msgstr[1] "" -#: template/functions.php:137 +#: template/functions.php:155 msgid "today" msgstr "" -#: template/functions.php:138 +#: template/functions.php:156 msgid "yesterday" msgstr "" -#: template/functions.php:140 +#: template/functions.php:158 msgid "%n day go" msgid_plural "%n days ago" msgstr[0] "" msgstr[1] "" -#: template/functions.php:142 +#: template/functions.php:160 msgid "last month" msgstr "" -#: template/functions.php:143 +#: template/functions.php:161 msgid "%n month ago" msgid_plural "%n months ago" msgstr[0] "" msgstr[1] "" -#: template/functions.php:145 +#: template/functions.php:163 msgid "last year" msgstr "" -#: template/functions.php:146 +#: template/functions.php:164 msgid "years ago" msgstr "" @@ -434,152 +434,152 @@ msgstr "" msgid "The username is already being used" msgstr "" -#: util.php:427 +#: util.php:429 msgid "No database drivers (sqlite, mysql, or postgresql) installed." msgstr "" -#: util.php:434 +#: util.php:436 #, php-format msgid "" "Permissions can usually be fixed by %sgiving the webserver write access to " "the root directory%s." msgstr "" -#: util.php:441 +#: util.php:443 msgid "Cannot write into \"config\" directory" msgstr "" -#: util.php:442 +#: util.php:444 #, php-format msgid "" "This can usually be fixed by %sgiving the webserver write access to the " "config directory%s." msgstr "" -#: util.php:455 +#: util.php:457 msgid "Cannot write into \"apps\" directory" msgstr "" -#: util.php:456 +#: util.php:458 #, php-format msgid "" "This can usually be fixed by %sgiving the webserver write access to the apps " "directory%s or disabling the appstore in the config file." msgstr "" -#: util.php:470 +#: util.php:472 #, php-format msgid "Cannot create \"data\" directory (%s)" msgstr "" -#: util.php:471 +#: util.php:473 #, php-format msgid "" "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the " "webserver write access to the root directory</a>." msgstr "" -#: util.php:487 +#: util.php:489 #, php-format msgid "Setting locale to %s failed" msgstr "" -#: util.php:490 +#: util.php:492 msgid "" "Please install one of these locales on your system and restart your " "webserver." msgstr "" -#: util.php:494 +#: util.php:496 msgid "Please ask your server administrator to install the module." msgstr "" -#: util.php:498 util.php:505 util.php:512 util.php:526 util.php:533 -#: util.php:540 util.php:547 util.php:554 util.php:561 util.php:576 +#: util.php:500 util.php:507 util.php:514 util.php:528 util.php:535 +#: util.php:542 util.php:549 util.php:556 util.php:563 util.php:578 #, php-format msgid "PHP module %s not installed." msgstr "" -#: util.php:568 +#: util.php:570 #, php-format msgid "PHP %s or higher is required." msgstr "" -#: util.php:569 +#: util.php:571 msgid "" "Please ask your server administrator to update PHP to the latest version. " "Your PHP version is no longer supported by ownCloud and the PHP community." msgstr "" -#: util.php:587 +#: util.php:589 msgid "" "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work " "properly." msgstr "" -#: util.php:588 +#: util.php:590 msgid "" "PHP Safe Mode is a deprecated and mostly useless setting that should be " "disabled. Please ask your server administrator to disable it in php.ini or " "in your webserver config." msgstr "" -#: util.php:595 +#: util.php:597 msgid "" "Magic Quotes is enabled. ownCloud requires that it is disabled to work " "properly." msgstr "" -#: util.php:596 +#: util.php:598 msgid "" "Magic Quotes is a deprecated and mostly useless setting that should be " "disabled. Please ask your server administrator to disable it in php.ini or " "in your webserver config." msgstr "" -#: util.php:610 +#: util.php:612 msgid "PHP modules have been installed, but they are still listed as missing?" msgstr "" -#: util.php:611 +#: util.php:613 msgid "Please ask your server administrator to restart the web server." msgstr "" -#: util.php:641 +#: util.php:643 msgid "PostgreSQL >= 9 required" msgstr "" -#: util.php:642 +#: util.php:644 msgid "Please upgrade your database version" msgstr "" -#: util.php:649 +#: util.php:651 msgid "Error occurred while checking PostgreSQL version" msgstr "" -#: util.php:650 +#: util.php:652 msgid "" "Please make sure you have PostgreSQL >= 9 or check the logs for more " "information about the error" msgstr "" -#: util.php:715 +#: util.php:717 msgid "" "Please change the permissions to 0770 so that the directory cannot be listed " "by other users." msgstr "" -#: util.php:724 +#: util.php:726 #, php-format msgid "Data directory (%s) is readable by other users" msgstr "" -#: util.php:745 +#: util.php:747 #, php-format msgid "Data directory (%s) is invalid" msgstr "" -#: util.php:746 +#: util.php:748 msgid "" "Please check that the data directory contains a file \".ocdata\" in its root." msgstr "" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index e9c151c3e28..63795ee308a 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index c9cc7084d70..f1d70320e1e 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index e6c36281180..e62dded0899 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-09-03 01:54-0400\n" +"POT-Creation-Date: 2014-09-09 01:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/lib/base.php b/lib/base.php index 1a99835040a..5d52db68cb7 100644 --- a/lib/base.php +++ b/lib/base.php @@ -554,7 +554,9 @@ class OC { OC_Group::useBackend(new OC_Group_Database()); //setup extra user backends - OC_User::setupBackends(); + if (!self::checkUpgrade(false)) { + OC_User::setupBackends(); + } self::registerCacheHooks(); self::registerFilesystemHooks(); @@ -583,6 +585,21 @@ class OC { ); return; } + + $host = OC_Request::insecureServerHost(); + // if the host passed in headers isn't trusted + if (!OC::$CLI + // overwritehost is always trusted + && OC_Request::getOverwriteHost() === null + && !OC_Request::isTrustedDomain($host) + ) { + header('HTTP/1.1 400 Bad Request'); + header('Status: 400 Bad Request'); + $tmpl = new OCP\Template('core', 'untrustedDomain', 'guest'); + $tmpl->assign('domain', $_SERVER['SERVER_NAME']); + $tmpl->printPage(); + return; + } } private static function registerLocalAddressBook() { @@ -683,21 +700,6 @@ class OC { exit(); } - $host = OC_Request::insecureServerHost(); - // if the host passed in headers isn't trusted - if (!OC::$CLI - // overwritehost is always trusted - && OC_Request::getOverwriteHost() === null - && !OC_Request::isTrustedDomain($host) - ) { - header('HTTP/1.1 400 Bad Request'); - header('Status: 400 Bad Request'); - $tmpl = new OCP\Template('core', 'untrustedDomain', 'guest'); - $tmpl->assign('domain', $_SERVER['SERVER_NAME']); - $tmpl->printPage(); - return; - } - $request = OC_Request::getPathInfo(); if (substr($request, -3) !== '.js') { // we need these files during the upgrade self::checkMaintenanceMode(); @@ -943,7 +945,7 @@ class OC { if (defined("DEBUG") && DEBUG) { OC_Log::write('core', 'Setting remember login to cookie', OC_Log::DEBUG); } - $token = OC_Util::generateRandomBytes(32); + $token = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(32); OC_Preferences::setValue($userid, 'login_token', $token, time()); OC_User::setMagicInCookie($userid, $token); } else { diff --git a/lib/l10n/et_EE.php b/lib/l10n/et_EE.php index 365c2e1f96a..9209d9bb6b3 100644 --- a/lib/l10n/et_EE.php +++ b/lib/l10n/et_EE.php @@ -5,6 +5,7 @@ $TRANSLATIONS = array( "See %s" => "Vaata %s", "This can usually be fixed by %sgiving the webserver write access to the config directory%s." => "Tavaliselt saab selle lahendada %s andes veebiserverile seadete kataloogile \"config\" kirjutusõigused %s", "Sample configuration detected" => "Tuvastati näidisseaded", +"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" => "Tuvastati, et kopeeriti näidisseaded. See võib lõhkuda sinu saidi ja see pole toetatud. Palun loe enne faili config.php muutmist dokumentatsiooni", "Help" => "Abiinfo", "Personal" => "Isiklik", "Settings" => "Seaded", @@ -65,6 +66,7 @@ $TRANSLATIONS = array( "Share type %s is not valid for %s" => "Jagamise tüüp %s ei ole õige %s jaoks", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" => "Lubade seadistus %s jaoks ebaõnnestus, kuna antud õigused ületavad %s jaoks määratud õigusi", "Setting permissions for %s failed, because the item was not found" => "Lubade seadistus %s jaoks ebaõnnestus, kuna üksust ei leitud", +"Cannot set expiration date. Shares cannot expire later than %s after they have been shared" => "Aegumise kuupäeva ei saa määrata. Jagamised ei saa aeguda hiljem kui %s peale jagamist.", "Cannot set expiration date. Expiration date is in the past" => "Aegumiskuupäeva ei saa määrata. Aegumise kuupäev on minevikus", "Sharing backend %s must implement the interface OCP\\Share_Backend" => "Jagamise tagarakend %s peab kasutusele võtma OCP\\Share_Backend liidese", "Sharing backend %s not found" => "Jagamise tagarakendit %s ei leitud", @@ -97,6 +99,7 @@ $TRANSLATIONS = array( "Cannot create \"data\" directory (%s)" => "Ei suuda luua \"data\" kataloogi (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." => "Tavaliselt saab selle lahendada <a href=\"%s\" target=\"_blank\">andes veebiserverile juur-kataloogile kirjutusõigused</a>.", "Setting locale to %s failed" => "Lokaadi %s määramine ebaõnnestus.", +"Please install one of these locales on your system and restart your webserver." => "Palun paigalda mõni neist lokaatides oma süsteemi ning taaskäivita veebiserver.", "Please ask your server administrator to install the module." => "Palu oma serveri haldajal moodul paigadalda.", "PHP module %s not installed." => "PHP moodulit %s pole paigaldatud.", "PHP %s or higher is required." => "PHP %s või uuem on nõutav.", diff --git a/lib/l10n/fr.php b/lib/l10n/fr.php index ae49d583336..3f1fe6a9925 100644 --- a/lib/l10n/fr.php +++ b/lib/l10n/fr.php @@ -97,6 +97,7 @@ $TRANSLATIONS = array( "Cannot create \"data\" directory (%s)" => "Impossible de créer le répertoire \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." => "Ce problème est généralement résolu <a href=\"%s\" target=\"_blank\">en donnant au serveur web un accès en écriture au répertoire racine</a>.", "Setting locale to %s failed" => "Le choix de la langue pour %s a échoué", +"Please install one of these locales on your system and restart your webserver." => "Veuillez installer l'une de ces langues sur votre système et redémarrer votre serveur web.", "Please ask your server administrator to install the module." => "Veuillez demander à votre administrateur d’installer le module.", "PHP module %s not installed." => "Le module PHP %s n’est pas installé.", "PHP %s or higher is required." => "PHP %s ou supérieur est requis.", diff --git a/lib/private/app.php b/lib/private/app.php index d10d352b432..3eed9e3c443 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -172,17 +172,29 @@ class OC_App { */ protected static $enabledAppsCache = array(); - public static function getEnabledApps($forceRefresh = false) { + /** + * Returns apps enabled for the current user. + * + * @param bool $forceRefresh whether to refresh the cache + * @param bool $all whether to return apps for all users, not only the + * currently logged in one + */ + public static function getEnabledApps($forceRefresh = false, $all = false) { if (!OC_Config::getValue('installed', false)) { return array(); } - if (!$forceRefresh && !empty(self::$enabledAppsCache)) { + // in incognito mode or when logged out, $user will be false, + // which is also the case during an upgrade + $user = null; + if (!$all) { + $user = \OC_User::getUser(); + } + if (is_string($user) && !$forceRefresh && !empty(self::$enabledAppsCache)) { return self::$enabledAppsCache; } $apps = array(); $appConfig = \OC::$server->getAppConfig(); $appStatus = $appConfig->getValues(false, 'enabled'); - $user = \OC_User::getUser(); foreach ($appStatus as $app => $enabled) { if ($app === 'files') { continue; @@ -192,11 +204,16 @@ class OC_App { } else if ($enabled !== 'no') { $groups = json_decode($enabled); if (is_array($groups)) { - foreach ($groups as $group) { - if (\OC_Group::inGroup($user, $group)) { - $apps[] = $app; - break; + if (is_string($user)) { + foreach ($groups as $group) { + if (\OC_Group::inGroup($user, $group)) { + $apps[] = $app; + break; + } } + } else { + // global, consider app as enabled + $apps[] = $app; } } } diff --git a/lib/private/appframework/core/api.php b/lib/private/appframework/core/api.php index ba6b9f95cb2..279f4bf97f7 100644 --- a/lib/private/appframework/core/api.php +++ b/lib/private/appframework/core/api.php @@ -110,12 +110,11 @@ class API implements IApi{ /** - * used to return and open a new eventsource - * @return \OC_EventSource a new open EventSource class + * used to return and open a new event source + * @return \OCP\IEventSource a new open EventSource class */ public function openEventSource(){ - # TODO: use public api - return new \OC_EventSource(); + return \OC::$server->createEventSource(); } /** diff --git a/lib/private/connector/sabre/directory.php b/lib/private/connector/sabre/directory.php index 9904c3525c4..9cd7c553f0b 100644 --- a/lib/private/connector/sabre/directory.php +++ b/lib/private/connector/sabre/directory.php @@ -230,4 +230,13 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node return $props; } + /** + * Returns the size of the node, in bytes + * + * @return int + */ + public function getSize() { + return $this->info->getSize(); + } + } diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php index 44c86e69719..5333583e78d 100644 --- a/lib/private/connector/sabre/file.php +++ b/lib/private/connector/sabre/file.php @@ -102,13 +102,16 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\ throw new OC_Connector_Sabre_Exception_FileLocked($e->getMessage(), $e->getCode(), $e); } + // if content length is sent by client: // double check if the file was fully received // compare expected and actual size - $expected = $_SERVER['CONTENT_LENGTH']; - $actual = $this->fileView->filesize($partFilePath); - if ($actual != $expected) { - $this->fileView->unlink($partFilePath); - throw new \Sabre\DAV\Exception\BadRequest('expected filesize ' . $expected . ' got ' . $actual); + if (isset($_SERVER['CONTENT_LENGTH'])) { + $expected = $_SERVER['CONTENT_LENGTH']; + $actual = $this->fileView->filesize($partFilePath); + if ($actual != $expected) { + $this->fileView->unlink($partFilePath); + throw new \Sabre\DAV\Exception\BadRequest('expected filesize ' . $expected . ' got ' . $actual); + } } // rename to correct path diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php index 30d1b1a872c..7f369d0e2e1 100644 --- a/lib/private/connector/sabre/filesplugin.php +++ b/lib/private/connector/sabre/filesplugin.php @@ -38,6 +38,7 @@ class OC_Connector_Sabre_FilesPlugin extends \Sabre\DAV\ServerPlugin $server->xmlNamespaces[self::NS_OWNCLOUD] = 'oc'; $server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}id'; $server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}permissions'; + $server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}size'; $this->server = $server; $this->server->subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties')); @@ -74,12 +75,17 @@ class OC_Connector_Sabre_FilesPlugin extends \Sabre\DAV\ServerPlugin } $permissions = $node->getDavPermissions(); - if (!is_null($fileId)) { + if (!is_null($permissions)) { $returnedProperties[200][$permissionsPropertyName] = $permissions; } - } + if ($node instanceof OC_Connector_Sabre_Directory) { + $sizePropertyName = '{' . self::NS_OWNCLOUD . '}size'; + + /** @var $node OC_Connector_Sabre_Directory */ + $returnedProperties[200][$sizePropertyName] = $node->getSize(); + } } /** diff --git a/lib/private/db/adapter.php b/lib/private/db/adapter.php index 975b9432286..6742ccdbb45 100644 --- a/lib/private/db/adapter.php +++ b/lib/private/db/adapter.php @@ -51,13 +51,18 @@ class Adapter { . str_repeat('?,', count($input)-1).'? ' // Is there a prettier alternative? . 'FROM `' . $table . '` WHERE '; + $inserts = array_values($input); foreach($input as $key => $value) { - $query .= '`' . $key . '` = ? AND '; + $query .= '`' . $key . '`'; + if (is_null($value)) { + $query .= ' IS NULL AND '; + } else { + $inserts[] = $value; + $query .= ' = ? AND '; + } } $query = substr($query, 0, strlen($query) - 5); $query .= ' HAVING COUNT(*) = 0'; - $inserts = array_values($input); - $inserts = array_merge($inserts, $inserts); try { return $this->conn->executeUpdate($query, $inserts); diff --git a/lib/private/db/adaptersqlite.php b/lib/private/db/adaptersqlite.php index fa6d308ae32..5b9c5a437da 100644 --- a/lib/private/db/adaptersqlite.php +++ b/lib/private/db/adaptersqlite.php @@ -21,13 +21,21 @@ class AdapterSqlite extends Adapter { // NOTE: For SQLite we have to use this clumsy approach // otherwise all fieldnames used must have a unique key. $query = 'SELECT COUNT(*) FROM `' . $table . '` WHERE '; - foreach($input as $key => $value) { - $query .= '`' . $key . '` = ? AND '; + $inserts = array(); + foreach ($input as $key => $value) { + $query .= '`' . $key . '`'; + if (is_null($value)) { + $query .= ' IS NULL AND '; + } else { + $inserts[] = $value; + $query .= ' = ? AND '; + } } $query = substr($query, 0, strlen($query) - 5); + try { $stmt = $this->conn->prepare($query); - $result = $stmt->execute(array_values($input)); + $result = $stmt->execute($inserts); } catch(\Doctrine\DBAL\DBALException $e) { $entry = 'DB Error: "'.$e->getMessage() . '"<br />'; $entry .= 'Offending command was: ' . $query . '<br />'; diff --git a/lib/private/defaults.php b/lib/private/defaults.php index 3996cc081ed..cc6c819f03f 100644 --- a/lib/private/defaults.php +++ b/lib/private/defaults.php @@ -19,6 +19,7 @@ class OC_Defaults { private $defaultBaseUrl; private $defaultSyncClientUrl; private $defaultiOSClientUrl; + private $defaultiTunesAppId; private $defaultAndroidClientUrl; private $defaultDocBaseUrl; private $defaultDocVersion; @@ -36,6 +37,7 @@ class OC_Defaults { $this->defaultBaseUrl = 'https://owncloud.org'; $this->defaultSyncClientUrl = 'https://owncloud.org/sync-clients/'; $this->defaultiOSClientUrl = 'https://itunes.apple.com/us/app/owncloud/id543672169?mt=8'; + $this->defaultiTunesAppId = '543672169'; $this->defaultAndroidClientUrl = 'https://play.google.com/store/apps/details?id=com.owncloud.android'; $this->defaultDocBaseUrl = 'http://doc.owncloud.org'; $this->defaultDocVersion = $version[0] . '.0'; // used to generate doc links @@ -95,6 +97,18 @@ class OC_Defaults { } /** + * Returns the AppId for the App Store for the iOS Client + * @return string AppId + */ + public function getiTunesAppId() { + if ($this->themeExist('getiTunesAppId')) { + return $this->theme->getiTunesAppId(); + } else { + return $this->defaultiTunesAppId; + } + } + + /** * Returns the URL to Google Play for the Android Client * @return string URL */ diff --git a/lib/private/eventsource.php b/lib/private/eventsource.php index 192c1446b5a..53947f3a2f2 100644 --- a/lib/private/eventsource.php +++ b/lib/private/eventsource.php @@ -1,25 +1,10 @@ <?php - /** -* ownCloud -* -* @author Robin Appelman -* @copyright 2012 Robin Appelman icewind1991@gmail.com -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE -* License as published by the Free Software Foundation; either -* version 3 of the License, or any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU AFFERO GENERAL PUBLIC LICENSE for more details. -* -* You should have received a copy of the GNU Affero General Public -* License along with this library. If not, see <http://www.gnu.org/licenses/>. -* -*/ + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ /** * wrapper for server side events (http://en.wikipedia.org/wiki/Server-sent_events) @@ -27,51 +12,73 @@ * * use server side events with caution, to many open requests can hang the server */ -class OC_EventSource{ +class OC_EventSource implements \OCP\IEventSource { + /** + * @var bool + */ private $fallback; - private $fallBackId=0; - public function __construct() { + /** + * @var int + */ + private $fallBackId = 0; + + /** + * @var bool + */ + private $started = false; + + protected function init() { + if ($this->started) { + return; + } + $this->started = true; + + // prevent php output buffering, caching and nginx buffering OC_Util::obEnd(); header('Cache-Control: no-cache'); header('X-Accel-Buffering: no'); - $this->fallback=isset($_GET['fallback']) and $_GET['fallback']=='true'; - if($this->fallback) { - $this->fallBackId=$_GET['fallback_id']; + $this->fallback = isset($_GET['fallback']) and $_GET['fallback'] == 'true'; + if ($this->fallback) { + $this->fallBackId = (int)$_GET['fallback_id']; header("Content-Type: text/html"); - echo str_repeat('<span></span>'.PHP_EOL, 10); //dummy data to keep IE happy - }else{ + echo str_repeat('<span></span>' . PHP_EOL, 10); //dummy data to keep IE happy + } else { header("Content-Type: text/event-stream"); } - if( !OC_Util::isCallRegistered()) { + if (!OC_Util::isCallRegistered()) { $this->send('error', 'Possible CSRF attack. Connection will be closed.'); $this->close(); exit(); } flush(); - } /** * send a message to the client + * * @param string $type * @param mixed $data * + * @throws \BadMethodCallException * if only one parameter is given, a typeless message will be send with that parameter as data */ - public function send($type, $data=null) { - if(is_null($data)) { - $data=$type; - $type=null; + public function send($type, $data = null) { + if ($data and !preg_match('/^[A-Za-z0-9_]+$/', $type)) { + throw new BadMethodCallException('Type needs to be alphanumeric ('. $type .')'); + } + $this->init(); + if (is_null($data)) { + $data = $type; + $type = null; } - if($this->fallback) { - $fallBackId = OC_Util::sanitizeHTML($this->fallBackId); - $response='<script type="text/javascript">window.parent.OC.EventSource.fallBackCallBack(' - .$fallBackId.',"' . $type . '",' . OCP\JSON::encode($data) . ')</script>' . PHP_EOL; + if ($this->fallback) { + $response = '<script type="text/javascript">window.parent.OC.EventSource.fallBackCallBack(' + . $this->fallBackId . ',"' . $type . '",' . OCP\JSON::encode($data) . ')</script>' . PHP_EOL; echo $response; - }else{ - if($type) { - echo 'event: ' . $type.PHP_EOL; + } else { + if ($type) { + echo 'event: ' . $type . PHP_EOL; } echo 'data: ' . OCP\JSON::encode($data) . PHP_EOL; } @@ -80,9 +87,9 @@ class OC_EventSource{ } /** - * close the connection of the even source + * close the connection of the event source */ public function close() { - $this->send('__internal__', 'close');//server side closing can be an issue, let the client do it + $this->send('__internal__', 'close'); //server side closing can be an issue, let the client do it } } diff --git a/lib/private/files.php b/lib/private/files.php index 739dae64180..06fc2dc9109 100644 --- a/lib/private/files.php +++ b/lib/private/files.php @@ -49,7 +49,7 @@ class OC_Files { header('Content-Type: application/zip'); } else { $filesize = \OC\Files\Filesystem::filesize($filename); - header('Content-Type: '.\OC\Files\Filesystem::getMimeType($filename)); + header('Content-Type: '.\OC_Helper::getSecureMimeType(\OC\Files\Filesystem::getMimeType($filename))); if ($filesize > -1) { header("Content-Length: ".$filesize); } diff --git a/lib/private/files/cache/changepropagator.php b/lib/private/files/cache/changepropagator.php index 30f2e675e2e..2967c8f6259 100644 --- a/lib/private/files/cache/changepropagator.php +++ b/lib/private/files/cache/changepropagator.php @@ -57,9 +57,11 @@ class ChangePropagator { */ list($storage, $internalPath) = $this->view->resolvePath($parent); - $cache = $storage->getCache(); - $id = $cache->getId($internalPath); - $cache->update($id, array('mtime' => $time, 'etag' => $storage->getETag($internalPath))); + if ($storage) { + $cache = $storage->getCache(); + $id = $cache->getId($internalPath); + $cache->update($id, array('mtime' => $time, 'etag' => $storage->getETag($internalPath))); + } } } diff --git a/lib/private/files/cache/homecache.php b/lib/private/files/cache/homecache.php index 06ae62015a5..2b3967c8807 100644 --- a/lib/private/files/cache/homecache.php +++ b/lib/private/files/cache/homecache.php @@ -39,6 +39,9 @@ class HomeCache extends Cache { $totalSize = 0 + $sum; $unencryptedSize = 0 + $unencryptedSum; $entry['size'] += 0; + if (!isset($entry['unencrypted_size'])) { + $entry['unencrypted_size'] = 0; + } $entry['unencrypted_size'] += 0; if ($entry['size'] !== $totalSize) { $this->update($id, array('size' => $totalSize)); diff --git a/lib/private/files/cache/updater.php b/lib/private/files/cache/updater.php index 0e5e07c587d..c303ff24b1f 100644 --- a/lib/private/files/cache/updater.php +++ b/lib/private/files/cache/updater.php @@ -1,6 +1,6 @@ <?php /** - * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com> + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> * This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. @@ -9,165 +9,116 @@ namespace OC\Files\Cache; /** - * listen to filesystem hooks and change the cache accordingly + * Update the cache and propagate changes */ class Updater { + /** + * @var \OC\Files\View + */ + protected $view; /** - * resolve a path to a storage and internal path - * - * @param string $path the relative path - * @return array an array consisting of the storage and the internal path + * @var \OC\Files\Cache\ChangePropagator */ - static public function resolvePath($path) { - $view = \OC\Files\Filesystem::getView(); - return $view->resolvePath($path); + protected $propagator; + + /** + * @param \OC\Files\View $view + */ + public function __construct($view) { + $this->view = $view; + $this->propagator = new ChangePropagator($view); } /** - * perform a write update + * Update the cache for $path * - * @param string $path the relative path of the file + * @param string $path + * @param int $time */ - static public function writeUpdate($path) { + public function update($path, $time = null) { /** * @var \OC\Files\Storage\Storage $storage * @var string $internalPath */ - list($storage, $internalPath) = self::resolvePath($path); + list($storage, $internalPath) = $this->view->resolvePath($path); if ($storage) { + $this->propagator->addChange($path); $cache = $storage->getCache($internalPath); $scanner = $storage->getScanner($internalPath); $data = $scanner->scan($internalPath, Scanner::SCAN_SHALLOW); + $this->correctParentStorageMtime($storage, $internalPath); $cache->correctFolderSize($internalPath, $data); - self::correctFolder($path, $storage->filemtime($internalPath)); - self::correctParentStorageMtime($storage, $internalPath); + $this->propagator->propagateChanges($time); } } /** - * perform a delete update + * Remove $path from the cache * - * @param string $path the relative path of the file + * @param string $path */ - static public function deleteUpdate($path) { + public function remove($path) { /** * @var \OC\Files\Storage\Storage $storage * @var string $internalPath */ - list($storage, $internalPath) = self::resolvePath($path); + list($storage, $internalPath) = $this->view->resolvePath($path); if ($storage) { $parent = dirname($internalPath); if ($parent === '.') { $parent = ''; } + $this->propagator->addChange($path); $cache = $storage->getCache($internalPath); $cache->remove($internalPath); $cache->correctFolderSize($parent); - self::correctFolder($path, time()); - self::correctParentStorageMtime($storage, $internalPath); + $this->correctParentStorageMtime($storage, $internalPath); + $this->propagator->propagateChanges(); } } /** - * preform a rename update - * - * @param string $from the relative path of the source file - * @param string $to the relative path of the target file + * @param string $source + * @param string $target */ - static public function renameUpdate($from, $to) { + public function rename($source, $target) { /** - * @var \OC\Files\Storage\Storage $storageFrom - * @var \OC\Files\Storage\Storage $storageTo - * @var string $internalFrom - * @var string $internalTo + * @var \OC\Files\Storage\Storage $sourceStorage + * @var \OC\Files\Storage\Storage $targetStorage + * @var string $sourceInternalPath + * @var string $targetInternalPath */ - list($storageFrom, $internalFrom) = self::resolvePath($from); + list($sourceStorage, $sourceInternalPath) = $this->view->resolvePath($source); // if it's a moved mountpoint we dont need to do anything - if ($internalFrom === '') { + if ($sourceInternalPath === '') { return; } - list($storageTo, $internalTo) = self::resolvePath($to); - if ($storageFrom && $storageTo) { - if ($storageFrom === $storageTo) { - $cache = $storageFrom->getCache($internalFrom); - $cache->move($internalFrom, $internalTo); - if (pathinfo($internalFrom, PATHINFO_EXTENSION) !== pathinfo($internalTo, PATHINFO_EXTENSION)) { - // redetect mime type change - $mimeType = $storageTo->getMimeType($internalTo); - $fileId = $storageTo->getCache()->getId($internalTo); - $storageTo->getCache()->update($fileId, array('mimetype' => $mimeType)); + list($targetStorage, $targetInternalPath) = $this->view->resolvePath($target); + + if ($sourceStorage && $targetStorage) { + if ($sourceStorage === $targetStorage) { + $cache = $sourceStorage->getCache($sourceInternalPath); + $cache->move($sourceInternalPath, $targetInternalPath); + + if (pathinfo($sourceInternalPath, PATHINFO_EXTENSION) !== pathinfo($targetInternalPath, PATHINFO_EXTENSION)) { + // handle mime type change + $mimeType = $sourceStorage->getMimeType($targetInternalPath); + $fileId = $cache->getId($targetInternalPath); + $cache->update($fileId, array('mimetype' => $mimeType)); } - $cache->correctFolderSize($internalFrom); - $cache->correctFolderSize($internalTo); - self::correctFolder($from, time()); - self::correctFolder($to, time()); - self::correctParentStorageMtime($storageFrom, $internalFrom); - self::correctParentStorageMtime($storageTo, $internalTo); - } else { - self::deleteUpdate($from); - self::writeUpdate($to); - } - } - } - /** - * get file owner and path - * @param string $filename - * @return string[] with the owner's uid and the owner's path - */ - private static function getUidAndFilename($filename) { - - $uid = \OC\Files\Filesystem::getOwner($filename); - \OC\Files\Filesystem::initMountPoints($uid); - - $filename = (strpos($filename, '/') !== 0) ? '/' . $filename : $filename; - if ($uid != \OCP\User::getUser()) { - $info = \OC\Files\Filesystem::getFileInfo($filename); - if (!$info) { - return array($uid, '/files' . $filename); - } - $ownerView = new \OC\Files\View('/' . $uid . '/files'); - $filename = $ownerView->getPath($info['fileid']); - } - return array($uid, '/files' . $filename); - } - - /** - * Update the mtime and ETag of all parent folders - * - * @param string $path - * @param string $time - */ - static public function correctFolder($path, $time) { - if ($path !== '' && $path !== '/' && $path !== '\\') { - list($owner, $realPath) = self::getUidAndFilename(dirname($path)); - - /** - * @var \OC\Files\Storage\Storage $storage - * @var string $internalPath - */ - $view = new \OC\Files\View('/' . $owner); - - list($storage, $internalPath) = $view->resolvePath($realPath); - $cache = $storage->getCache(); - $id = $cache->getId($internalPath); - - while ($id !== -1) { - $cache->update($id, array('mtime' => $time, 'etag' => $storage->getETag($internalPath))); - if ($realPath !== '') { - $realPath = dirname($realPath); - if ($realPath === DIRECTORY_SEPARATOR) { - $realPath = ""; - } - // check storage for parent in case we change the storage in this step - list($storage, $internalPath) = $view->resolvePath($realPath); - $cache = $storage->getCache(); - $id = $cache->getId($internalPath); - } else { - $id = -1; - } + $cache->correctFolderSize($sourceInternalPath); + $cache->correctFolderSize($targetInternalPath); + $this->correctParentStorageMtime($sourceStorage, $sourceInternalPath); + $this->correctParentStorageMtime($targetStorage, $targetInternalPath); + $this->propagator->addChange($source); + $this->propagator->addChange($target); + } else { + $this->remove($source); + $this->update($target); } + $this->propagator->propagateChanges(); } } @@ -177,52 +128,17 @@ class Updater { * @param \OC\Files\Storage\Storage $storage * @param string $internalPath */ - static private function correctParentStorageMtime($storage, $internalPath) { + private function correctParentStorageMtime($storage, $internalPath) { $cache = $storage->getCache(); $parentId = $cache->getParentId($internalPath); $parent = dirname($internalPath); - - if ($parent === '.' || $parent === '/' || $parent === '\\') { - $parent = ''; - } - if ($parentId != -1) { $cache->update($parentId, array('storage_mtime' => $storage->filemtime($parent))); } } - /** - * @param array $params - */ - static public function writeHook($params) { - self::writeUpdate($params['path']); - } - - /** - * @param array $params - */ - static public function touchHook($params) { - $path = $params['path']; - list($storage, $internalPath) = self::resolvePath($path); - $cache = $storage->getCache(); - $id = $cache->getId($internalPath); - if ($id !== -1) { - $cache->update($id, array('etag' => $storage->getETag($internalPath))); - } - self::writeUpdate($path); - } - - /** - * @param array $params - */ - static public function renameHook($params) { - self::renameUpdate($params['oldpath'], $params['newpath']); - } - - /** - * @param array $params - */ - static public function deleteHook($params) { - self::deleteUpdate($params['path']); + public function __destruct() { + // propagate any leftover changes + $this->propagator->propagateChanges(); } } diff --git a/lib/private/files/objectstore/objectstorestorage.php b/lib/private/files/objectstore/objectstorestorage.php index 0292d777064..241864bcccd 100644 --- a/lib/private/files/objectstore/objectstorestorage.php +++ b/lib/private/files/objectstore/objectstorestorage.php @@ -82,7 +82,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common { $parentExists = true; // we are done when the root folder was meant to be created - if ($dirName === $path) { + if ($dirName === $path) { return true; } } @@ -290,38 +290,10 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common { public function rename($source, $target) { $source = $this->normalizePath($source); $target = $this->normalizePath($target); - $stat1 = $this->stat($source); - if (isset($stat1['mimetype']) && $stat1['mimetype'] === 'httpd/unix-directory') { - $this->remove($target); - $dir = $this->opendir($source); - $this->mkdir($target); - while ($file = readdir($dir)) { - if (!Filesystem::isIgnoredDir($file)) { - if (!$this->rename($source . '/' . $file, $target . '/' . $file)) { - return false; - } - } - } - closedir($dir); - $this->remove($source); - return true; - } else { - if (is_array($stat1)) { - $parent = $this->stat(dirname($target)); - if (is_array($parent)) { - $this->remove($target); - $stat1['parent'] = $parent['fileid']; - $stat1['path'] = $target; - $stat1['path_hash'] = md5($target); - $stat1['name'] = \OC_Util::basename($target); - $stat1['mtime'] = time(); - $stat1['etag'] = $this->getETag($target); - $this->getCache()->update($stat1['fileid'], $stat1); - return true; - } - } - } - return false; + $this->remove($target); + $this->getCache()->move($source, $target); + $this->touch(dirname($target)); + return true; } public function getMimeType($path) { diff --git a/lib/private/files/view.php b/lib/private/files/view.php index d310a0fa4e1..95f3e9a2c7f 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -31,8 +31,14 @@ use OC\Files\Mount\MoveableMount; class View { private $fakeRoot = ''; + /** + * @var \OC\Files\Cache\Updater + */ + protected $updater; + public function __construct($root = '') { $this->fakeRoot = $root; + $this->updater = new Updater($this); } public function getAbsolutePath($path = '/') { @@ -168,10 +174,10 @@ class View { * @param string $path relative to data/ * @return boolean */ - protected function removeMount($mount, $path){ + protected function removeMount($mount, $path) { if ($mount instanceof MoveableMount) { // cut of /user/files to get the relative path to data/user/files - $pathParts= explode('/', $path, 4); + $pathParts = explode('/', $path, 4); $relPath = '/' . $pathParts[3]; \OC_Hook::emit( Filesystem::CLASSNAME, "umount", @@ -194,7 +200,7 @@ class View { } public function rmdir($path) { - $absolutePath= $this->getAbsolutePath($path); + $absolutePath = $this->getAbsolutePath($path); $mount = Filesystem::getMountManager()->find($absolutePath); if ($mount->getInternalPath($absolutePath) === '') { return $this->removeMount($mount, $path); @@ -304,7 +310,16 @@ class View { $hooks[] = 'write'; } $result = $this->basicOperation('touch', $path, $hooks, $mtime); - if (!$result) { //if native touch fails, we emulate it by changing the mtime in the cache + if (!$result) { + // If create file fails because of permissions on external storage like SMB folders, + // check file exists and return false if not. + if(!$this->file_exists($path)){ + return false; + } + if (is_null($mtime)) { + $mtime = time(); + } + //if native touch fails, we emulate it by changing the mtime in the cache $this->putFileInfo($path, array('mtime' => $mtime)); } return true; @@ -368,10 +383,8 @@ class View { list ($count, $result) = \OC_Helper::streamCopy($data, $target); fclose($target); fclose($data); + $this->updater->update($path); if ($this->shouldEmitHooks($path) && $result !== false) { - Updater::writeHook(array( - 'path' => $this->getHookPath($path) - )); $this->emit_file_hooks_post($exists, $path); } \OC_FileProxy::runPostProxies('file_put_contents', $absolutePath, $count); @@ -396,7 +409,7 @@ class View { $postFix = (substr($path, -1, 1) === '/') ? '/' : ''; $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path)); $mount = Filesystem::getMountManager()->find($absolutePath . $postFix); - if ($mount->getInternalPath($absolutePath) === '') { + if ($mount and $mount->getInternalPath($absolutePath) === '') { return $this->removeMount($mount, $absolutePath); } return $this->basicOperation('unlink', $path, array('delete')); @@ -489,15 +502,14 @@ class View { } } } - if ($this->shouldEmitHooks() && (Cache\Scanner::isPartialFile($path1) && !Cache\Scanner::isPartialFile($path2)) && $result !== false) { + if ((Cache\Scanner::isPartialFile($path1) && !Cache\Scanner::isPartialFile($path2)) && $result !== false) { // if it was a rename from a part file to a regular file it was a write and not a rename operation - Updater::writeHook(array('path' => $this->getHookPath($path2))); - $this->emit_file_hooks_post($exists, $path2); + $this->updater->update($path2); + if ($this->shouldEmitHooks()) { + $this->emit_file_hooks_post($exists, $path2); + } } elseif ($this->shouldEmitHooks() && $result !== false) { - Updater::renameHook(array( - 'oldpath' => $this->getHookPath($path1), - 'newpath' => $this->getHookPath($path2) - )); + $this->updater->rename($path1, $path2); \OC_Hook::emit( Filesystem::CLASSNAME, Filesystem::signal_post_rename, @@ -576,6 +588,7 @@ class View { fclose($target); } } + $this->updater->update($path2); if ($this->shouldEmitHooks() && $result !== false) { \OC_Hook::emit( Filesystem::CLASSNAME, @@ -754,7 +767,19 @@ class View { } else { $result = $storage->$operation($internalPath); } + $result = \OC_FileProxy::runPostProxies($operation, $this->getAbsolutePath($path), $result); + + if (in_array('delete', $hooks)) { + $this->updater->remove($path); + } + if (in_array('write', $hooks)) { + $this->updater->update($path); + } + if (in_array('touch', $hooks)) { + $this->updater->update($path, $extraParam); + } + if ($this->shouldEmitHooks($path) && $result !== false) { if ($operation != 'fopen') { //no post hooks for fopen, the file stream is still open $this->runHooks($hooks, $path, true); @@ -808,16 +833,6 @@ class View { $run = true; if ($this->shouldEmitHooks($path)) { foreach ($hooks as $hook) { - // manually triger updater hooks to ensure they are called first - if ($post) { - if ($hook == 'write') { - Updater::writeHook(array('path' => $path)); - } elseif ($hook == 'touch') { - Updater::touchHook(array('path' => $path)); - } else if ($hook == 'delete') { - Updater::deleteHook(array('path' => $path)); - } - } if ($hook != 'read') { \OC_Hook::emit( Filesystem::CLASSNAME, diff --git a/lib/private/helper.php b/lib/private/helper.php index 7c1edd1b058..f696b5a8900 100644 --- a/lib/private/helper.php +++ b/lib/private/helper.php @@ -129,12 +129,12 @@ class OC_Helper { * Returns a absolute url to the given service. */ public static function linkToPublic($service, $add_slash = false) { - return OC::$server->getURLGenerator()->getAbsoluteURL( - self::linkTo( - '', 'public.php') . '?service=' . $service - . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : '' - ) - ); + if ($service === 'files') { + $url = OC::$server->getURLGenerator()->getAbsoluteURL('/s'); + } else { + $url = OC::$server->getURLGenerator()->getAbsoluteURL(self::linkTo('', 'public.php').'?service='.$service); + } + return $url . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : ''); } /** diff --git a/lib/private/preview.php b/lib/private/preview.php index cc15ab84fe7..086d9c0272a 100755 --- a/lib/private/preview.php +++ b/lib/private/preview.php @@ -24,6 +24,7 @@ require_once 'preview/svg.php'; require_once 'preview/txt.php'; require_once 'preview/unknown.php'; require_once 'preview/office.php'; +require_once 'preview/tiff.php'; class Preview { //the thumbnail folder diff --git a/lib/private/preview/office-cl.php b/lib/private/preview/office-cl.php index 81e0cf4b6ae..42d2cbf34fc 100644 --- a/lib/private/preview/office-cl.php +++ b/lib/private/preview/office-cl.php @@ -29,7 +29,7 @@ if (!\OC_Util::runningOnWindows()) { $tmpDir = get_temp_dir(); - $defaultParameters = ' -env:UserInstallation=file://' . escapeshellarg($tmpDir) . ' --headless --nologo --nofirststartwizard --invisible --norestore -convert-to pdf -outdir '; + $defaultParameters = ' -env:UserInstallation=file://' . escapeshellarg($tmpDir . '/owncloud-' . \OC_Util::getInstanceId().'/') . ' --headless --nologo --nofirststartwizard --invisible --norestore -convert-to pdf -outdir '; $clParameters = \OCP\Config::getSystemValue('preview_office_cl_parameters', $defaultParameters); $exec = $this->cmd . $clParameters . escapeshellarg($tmpDir) . ' ' . escapeshellarg($absPath); diff --git a/lib/private/preview/office.php b/lib/private/preview/office.php index 16e395cb1a8..b47cbc6e08f 100644 --- a/lib/private/preview/office.php +++ b/lib/private/preview/office.php @@ -17,7 +17,7 @@ if (extension_loaded('imagick')) { if (!\OC_Util::runningOnWindows()) { $whichLibreOffice = ($isShellExecEnabled ? shell_exec('command -v libreoffice') : ''); $isLibreOfficeAvailable = !empty($whichLibreOffice); - $whichOpenOffice = ($isShellExecEnabled ? shell_exec('command -v libreoffice') : ''); + $whichOpenOffice = ($isShellExecEnabled ? shell_exec('command -v openoffice') : ''); $isOpenOfficeAvailable = !empty($whichOpenOffice); //let's see if there is libreoffice or openoffice on this machine if($isShellExecEnabled && ($isLibreOfficeAvailable || $isOpenOfficeAvailable || is_string(\OC_Config::getValue('preview_libreoffice_path', null)))) { diff --git a/lib/private/preview/tiff.php b/lib/private/preview/tiff.php new file mode 100644 index 00000000000..c435ec71352 --- /dev/null +++ b/lib/private/preview/tiff.php @@ -0,0 +1,48 @@ +<?php +/** + * Copyright (c) 2013-2014 Georg Ehrke georg@ownCloud.com + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +namespace OC\Preview; + +use Imagick; + +if (extension_loaded('imagick')) { + + $checkImagick = new Imagick(); + + if(count($checkImagick->queryFormats('TIFF')) === 1) { + + class TIFF extends Provider { + + public function getMimeType() { + return '/image\/tiff/'; + } + + public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) { + $tmpPath = $fileview->toTmpFile($path); + + //create imagick object from TIFF + try{ + $tiff = new Imagick($tmpPath); + $tiff->setImageFormat('png'); + } catch (\Exception $e) { + \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR); + return false; + } + + unlink($tmpPath); + + //new image object + $image = new \OC_Image($tiff); + //check if image object is valid + return $image->valid() ? $image : false; + } + + } + + \OC\Preview::registerProvider('OC\Preview\TIFF'); + } +} diff --git a/lib/private/repair.php b/lib/private/repair.php index 46b5ae46399..4ff446f8608 100644 --- a/lib/private/repair.php +++ b/lib/private/repair.php @@ -71,6 +71,7 @@ class Repair extends BasicEmitter { return array( new \OC\Repair\RepairMimeTypes(), new \OC\Repair\RepairLegacyStorages(\OC::$server->getConfig(), \OC_DB::getConnection()), + new \OC\Repair\RepairConfig(), ); } diff --git a/lib/private/security/crypto.php b/lib/private/security/crypto.php new file mode 100644 index 00000000000..6fdff8d92a2 --- /dev/null +++ b/lib/private/security/crypto.php @@ -0,0 +1,115 @@ +<?php +/** + * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + + +namespace OC\Security; + +use Crypt_AES; +use Crypt_Hash; +use OCP\Security\ICrypto; +use OCP\Security\ISecureRandom; +use OCP\Security\StringUtils; +use OCP\IConfig; + +/** + * Class Crypto provides a high-level encryption layer using AES-CBC. If no key has been provided + * it will use the secret defined in config.php as key. Additionally the message will be HMAC'd. + * + * Usage: + * $encryptWithDefaultPassword = \OC::$server->getCrypto()->encrypt('EncryptedText'); + * $encryptWithCustompassword = \OC::$server->getCrypto()->encrypt('EncryptedText', 'password'); + * + * @package OC\Security + */ +class Crypto implements ICrypto { + /** @var Crypt_AES $cipher */ + private $cipher; + /** @var int */ + private $ivLength = 16; + /** @var IConfig */ + private $config; + /** @var ISecureRandom */ + private $random; + + function __construct(IConfig $config, ISecureRandom $random) { + $this->cipher = new Crypt_AES(); + $this->config = $config; + $this->random = $random; + } + + /** + * @param string $message The message to authenticate + * @param string $password Password to use (defaults to `secret` in config.php) + * @return string Calculated HMAC + */ + public function calculateHMAC($message, $password = '') { + if($password === '') { + $password = $this->config->getSystemValue('secret'); + } + + // Append an "a" behind the password and hash it to prevent reusing the same password as for encryption + $password = hash('sha512', $password . 'a'); + + $hash = new Crypt_Hash('sha512'); + $hash->setKey($password); + return $hash->hash($message); + } + + /** + * Encrypts a value and adds an HMAC (Encrypt-Then-MAC) + * @param string $plaintext + * @param string $password Password to encrypt, if not specified the secret from config.php will be taken + * @return string Authenticated ciphertext + */ + public function encrypt($plaintext, $password = '') { + if($password === '') { + $password = $this->config->getSystemValue('secret'); + } + $this->cipher->setPassword($password); + + $iv = $this->random->getLowStrengthGenerator()->generate($this->ivLength); + $this->cipher->setIV($iv); + + $ciphertext = bin2hex($this->cipher->encrypt($plaintext)); + $hmac = bin2hex($this->calculateHMAC($ciphertext.$iv, $password)); + + return $ciphertext.'|'.$iv.'|'.$hmac; + } + + /** + * Decrypts a value and verifies the HMAC (Encrypt-Then-Mac) + * @param string $authenticatedCiphertext + * @param string $password Password to encrypt, if not specified the secret from config.php will be taken + * @return string plaintext + * @throws \Exception If the HMAC does not match + */ + public function decrypt($authenticatedCiphertext, $password = '') { + if($password === '') { + $password = $this->config->getSystemValue('secret'); + } + $this->cipher->setPassword($password); + + $parts = explode('|', $authenticatedCiphertext); + if(sizeof($parts) !== 3) { + throw new \Exception('Authenticated ciphertext could not be decoded.'); + } + + $ciphertext = hex2bin($parts[0]); + $iv = $parts[1]; + $hmac = hex2bin($parts[2]); + + $this->cipher->setIV($iv); + + if(!StringUtils::equals($this->calculateHMAC($parts[0].$parts[1], $password), $hmac)) { + throw new \Exception('HMAC does not match.'); + } + + return $this->cipher->decrypt($ciphertext); + } + +} diff --git a/lib/private/security/securerandom.php b/lib/private/security/securerandom.php new file mode 100644 index 00000000000..2402e863fb0 --- /dev/null +++ b/lib/private/security/securerandom.php @@ -0,0 +1,79 @@ +<?php +/** + * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Security; + +use RandomLib; +use Sabre\DAV\Exception; +use OCP\Security\ISecureRandom; + +/** + * Class SecureRandom provides a layer around RandomLib to generate + * secure random strings. + * + * Usage: + * \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(10); + * + * @package OC\Security + */ +class SecureRandom implements ISecureRandom { + + /** @var \RandomLib\Factory */ + var $factory; + /** @var \RandomLib\Generator */ + var $generator; + + function __construct() { + $this->factory = new RandomLib\Factory; + } + + /** + * Convenience method to get a low strength random number generator. + * + * Low Strength should be used anywhere that random strings are needed + * in a non-cryptographical setting. They are not strong enough to be + * used as keys or salts. They are however useful for one-time use tokens. + * + * @return $this + */ + public function getLowStrengthGenerator() { + $this->generator = $this->factory->getLowStrengthGenerator(); + return $this; + } + + /** + * Convenience method to get a medium strength random number generator. + * + * Medium Strength should be used for most needs of a cryptographic nature. + * They are strong enough to be used as keys and salts. However, they do + * take some time and resources to generate, so they should not be over-used + * + * @return $this + */ + public function getMediumStrengthGenerator() { + $this->generator = $this->factory->getMediumStrengthGenerator(); + return $this; + } + + /** + * Generate a random string of specified length. + * @param string $length The length of the generated string + * @param string $characters An optional list of characters to use if no characterlist is + * specified 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./ + * is used. + * @return string + * @throws \Exception If the generator is not initialized. + */ + public function generate($length, $characters = '') { + if(is_null($this->generator)) { + throw new \Exception('Generator is not initialized.'); + } + + return $this->generator->generateString($length, $characters); + } +} diff --git a/lib/private/security/stringutils.php b/lib/private/security/stringutils.php new file mode 100644 index 00000000000..33a3a708012 --- /dev/null +++ b/lib/private/security/stringutils.php @@ -0,0 +1,42 @@ +<?php +/** + * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Security; + +class StringUtils { + + /** + * Compares whether two strings are equal. To prevent guessing of the string + * length this is done by comparing two hashes against each other and afterwards + * a comparison of the real string to prevent against the unlikely chance of + * collisions. + * + * Be aware that this function may leak whether the string to compare have a different + * length. + * + * @param string $expected The expected value + * @param string $input The input to compare against + * @return bool True if the two strings are equal, otherwise false. + */ + public static function equals($expected, $input) { + + if(function_exists('hash_equals')) { + return hash_equals($expected, $input); + } + + $randomString = \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(10); + + if(hash('sha512', $expected.$randomString) === hash('sha512', $input.$randomString)) { + if($expected === $input) { + return true; + } + } + + return false; + } +}
\ No newline at end of file diff --git a/lib/private/server.php b/lib/private/server.php index 5d40f1327f6..912d5c4f635 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -10,6 +10,8 @@ use OC\Security\CertificateManager; use OC\DB\ConnectionWrapper; use OC\Files\Node\Root; use OC\Files\View; +use OC\Security\Crypto; +use OC\Security\SecureRandom; use OCP\IServerContainer; use OCP\ISession; @@ -201,6 +203,12 @@ class Server extends SimpleContainer implements IServerContainer { $this->registerService('Search', function ($c) { return new Search(); }); + $this->registerService('SecureRandom', function($c) { + return new SecureRandom(); + }); + $this->registerService('Crypto', function($c) { + return new Crypto(\OC::$server->getConfig(), \OC::$server->getSecureRandom()); + }); $this->registerService('Db', function ($c) { return new Db(); }); @@ -468,6 +476,24 @@ class Server extends SimpleContainer implements IServerContainer { } /** + * Returns a SecureRandom instance + * + * @return \OCP\Security\ISecureRandom + */ + function getSecureRandom() { + return $this->query('SecureRandom'); + } + + /** + * Returns a Crypto instance + * + * @return \OCP\Security\ICrypto + */ + function getCrypto() { + return $this->query('Crypto'); + } + + /** * Returns an instance of the db facade * * @return \OCP\IDb @@ -492,4 +518,13 @@ class Server extends SimpleContainer implements IServerContainer { } return new CertificateManager($user); } + + /** + * Create a new event source + * + * @return \OCP\IEventSource + */ + function createEventSource() { + return new \OC_EventSource(); + } } diff --git a/lib/private/setup.php b/lib/private/setup.php index 2e23aae8838..7ea4c1bcd26 100644 --- a/lib/private/setup.php +++ b/lib/private/setup.php @@ -67,14 +67,19 @@ class OC_Setup { } //generate a random salt that is used to salt the local user passwords - $salt = OC_Util::generateRandomBytes(30); - OC_Config::setValue('passwordsalt', $salt); + $salt = \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(30); + \OC::$server->getConfig()->setSystemValue('passwordsalt', $salt); + + // generate a secret + $secret = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(48); + \OC::$server->getConfig()->setSystemValue('secret', $secret); //write the config file - OC_Config::setValue('trusted_domains', $trustedDomains); - OC_Config::setValue('datadirectory', $datadir); - OC_Config::setValue('dbtype', $dbtype); - OC_Config::setValue('version', implode('.', OC_Util::getVersion())); + \OC::$server->getConfig()->setSystemValue('trusted_domains', $trustedDomains); + \OC::$server->getConfig()->setSystemValue('datadirectory', $datadir); + \OC::$server->getConfig()->setSystemValue('dbtype', $dbtype); + \OC::$server->getConfig()->setSystemValue('version', implode('.', OC_Util::getVersion())); + try { $dbSetup->initialize($options); $dbSetup->setupDatabase($username); diff --git a/lib/private/share/constants.php b/lib/private/share/constants.php index 4c398c43c2d..798327cc154 100644 --- a/lib/private/share/constants.php +++ b/lib/private/share/constants.php @@ -34,7 +34,7 @@ class Constants { const FORMAT_STATUSES = -2; const FORMAT_SOURCES = -3; // ToDo Check if it is still in use otherwise remove it - const TOKEN_LENGTH = 32; // see db_structure.xml + const TOKEN_LENGTH = 15; // old (oc7) length is 32, keep token length in db at least that for compatibility protected static $shareTypeUserAndGroups = -1; protected static $shareTypeGroupUserUnique = 2; diff --git a/lib/private/share/mailnotifications.php b/lib/private/share/mailnotifications.php index 4a92503bdd3..2f704fb2b3c 100644 --- a/lib/private/share/mailnotifications.php +++ b/lib/private/share/mailnotifications.php @@ -52,7 +52,7 @@ class MailNotifications { * @param string $sender user id (if nothing is set we use the currently logged-in user) */ public function __construct($sender = null) { - $this->l = \OC::$server->getL10N('core'); + $this->l = \OC::$server->getL10N('lib'); $this->senderId = $sender; diff --git a/lib/private/share/share.php b/lib/private/share/share.php index e2e9b94125e..8441e6a94c4 100644 --- a/lib/private/share/share.php +++ b/lib/private/share/share.php @@ -640,7 +640,10 @@ class Share extends \OC\Share\Constants { if (isset($oldToken)) { $token = $oldToken; } else { - $token = \OC_Util::generateRandomBytes(self::TOKEN_LENGTH); + $token = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(self::TOKEN_LENGTH, + \OCP\Security\ISecureRandom::CHAR_LOWER.\OCP\Security\ISecureRandom::CHAR_UPPER. + \OCP\Security\ISecureRandom::CHAR_DIGITS + ); } $result = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, $token, $itemSourceName, $expirationDate); diff --git a/lib/private/template/functions.php b/lib/private/template/functions.php index 3cbf0d9748f..05467e61185 100644 --- a/lib/private/template/functions.php +++ b/lib/private/template/functions.php @@ -24,6 +24,34 @@ function print_unescaped($string) { } /** + * Shortcut for adding scripts to a page + * @param string $app the appname + * @param string $file the filename + */ +function script($app, $file) { + OC_Util::addScript($app, $file); +} + +/** + * Shortcut for adding styles to a page + * @param string $app the appname + * @param string $file the filename + */ +function style($app, $file) { + OC_Util::addStyle($app, $file); +} + +/** + * Shortcut for HTML imports + * @param string $app the appname + * @param string $file the path relative to the app's component folder + */ +function component($app, $file) { + $url = link_to($app, 'component/' . $file . '.html'); + OC_Util::addHeader('link', array('rel' => 'import', 'href' => $url)); +} + +/** * make OC_Helper::linkTo available as a simple function * @param string $app app * @param string $file file diff --git a/lib/private/user.php b/lib/private/user.php index 509a7c71209..a79fc2ce834 100644 --- a/lib/private/user.php +++ b/lib/private/user.php @@ -428,7 +428,7 @@ class OC_User { * generates a password */ public static function generatePassword() { - return OC_Util::generateRandomBytes(30); + return \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(30); } /** diff --git a/lib/private/user/session.php b/lib/private/user/session.php index 11938db5076..5517e08a25d 100644 --- a/lib/private/user/session.php +++ b/lib/private/user/session.php @@ -234,7 +234,7 @@ class Session implements IUserSession, Emitter { } // replace successfully used token with a new one \OC_Preferences::deleteKey($uid, 'login_token', $currentToken); - $newToken = \OC_Util::generateRandomBytes(32); + $newToken = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(32); \OC_Preferences::setValue($uid, 'login_token', $newToken, time()); $this->setMagicInCookie($user->getUID(), $newToken); diff --git a/lib/private/util.php b/lib/private/util.php index adb7fb83d28..a130d997ca3 100755 --- a/lib/private/util.php +++ b/lib/private/util.php @@ -5,6 +5,8 @@ * */ class OC_Util { + const USER_AGENT = 'ownCloud Server Crawler'; + public static $scripts = array(); public static $styles = array(); public static $headers = array(); @@ -758,8 +760,8 @@ class OC_Util { foreach ($errors as $value) { $parameters[$value] = true; } - if (!empty($_POST['user'])) { - $parameters["username"] = $_POST['user']; + if (!empty($_REQUEST['user'])) { + $parameters["username"] = $_REQUEST['user']; $parameters['user_autofocus'] = false; } else { $parameters["username"] = ''; @@ -905,7 +907,7 @@ class OC_Util { $id = OC_Config::getValue('instanceid', null); if (is_null($id)) { // We need to guarantee at least one letter in instanceid so it can be used as the session_name - $id = 'oc' . self::generateRandomBytes(10); + $id = 'oc' . \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(10); OC_Config::$object->setValue('instanceid', $id); } return $id; @@ -940,7 +942,7 @@ class OC_Util { // Check if a token exists if (!\OC::$server->getSession()->exists('requesttoken')) { // No valid token found, generate a new one. - $requestToken = self::generateRandomBytes(20); + $requestToken = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(30); \OC::$server->getSession()->set('requesttoken', $requestToken); } else { // Valid token already exists, send it @@ -1208,54 +1210,20 @@ class OC_Util { * * @param int $length of the random string * @return string - * @throws Exception when no secure RNG source is available - * Please also update secureRNGAvailable if you change something here + * @deprecated Use \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate($length); instead */ public static function generateRandomBytes($length = 30) { - // Try to use openssl_random_pseudo_bytes - if (function_exists('openssl_random_pseudo_bytes')) { - $pseudoByte = bin2hex(openssl_random_pseudo_bytes($length, $strong)); - if ($strong == true) { - return substr($pseudoByte, 0, $length); // Truncate it to match the length - } - } - - // Try to use /dev/urandom - if (!self::runningOnWindows()) { - $fp = @file_get_contents('/dev/urandom', false, null, 0, $length); - if ($fp !== false) { - $string = substr(bin2hex($fp), 0, $length); - return $string; - } - } - - // No random numbers are better then bad random numbers - throw new \Exception('No secure random number generator available, please install the php-openssl extension'); + return \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate($length, \OCP\Security\ISecureRandom::CHAR_LOWER.\OCP\Security\ISecureRandom::CHAR_DIGITS); } /** * Checks if a secure random number generator is available * - * @return bool + * @return true + * @deprecated Function will be removed in the future and does only return true. */ public static function secureRNGAvailable() { - // Check openssl_random_pseudo_bytes - if (function_exists('openssl_random_pseudo_bytes')) { - openssl_random_pseudo_bytes(1, $strong); - if ($strong == true) { - return true; - } - } - - // Check /dev/urandom - if (!self::runningOnWindows()) { - $fp = @file_get_contents('/dev/urandom', false, null, 0, 1); - if ($fp !== false) { - return true; - } - } - - return false; + return true; } /** @@ -1281,7 +1249,7 @@ class OC_Util { curl_setopt($curl, CURLOPT_URL, $url); - curl_setopt($curl, CURLOPT_USERAGENT, "ownCloud Server Crawler"); + curl_setopt($curl, CURLOPT_USERAGENT, self::USER_AGENT); if (OC_Config::getValue('proxy', '') != '') { curl_setopt($curl, CURLOPT_PROXY, OC_Config::getValue('proxy')); } @@ -1303,6 +1271,7 @@ class OC_Util { curl_setopt($rcurl, CURLOPT_NOBODY, true); curl_setopt($rcurl, CURLOPT_FORBID_REUSE, false); curl_setopt($rcurl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($rcurl, CURLOPT_USERAGENT, self::USER_AGENT); do { curl_setopt($rcurl, CURLOPT_URL, $newURL); $header = curl_exec($rcurl); @@ -1337,6 +1306,7 @@ class OC_Util { if (OC_Config::getValue('proxy', '') != '') { $contextArray = array( 'http' => array( + 'header' => 'User-Agent: ' . self::USER_AGENT . "\r\n", 'timeout' => 10, 'proxy' => OC_Config::getValue('proxy') ) @@ -1344,6 +1314,7 @@ class OC_Util { } else { $contextArray = array( 'http' => array( + 'header' => 'User-Agent: ' . self::USER_AGENT . "\r\n", 'timeout' => 10 ) ); @@ -1490,9 +1461,11 @@ class OC_Util { } /** - * Check whether the instance needs to preform an upgrade + * Check whether the instance needs to perform an upgrade, + * either when the core version is higher or any app requires + * an upgrade. * - * @return bool + * @return bool whether the core or any app needs an upgrade */ public static function needUpgrade() { if (OC_Config::getValue('installed', false)) { @@ -1502,14 +1475,16 @@ class OC_Util { return true; } - // also check for upgrades for apps - $apps = \OC_App::getEnabledApps(); + // also check for upgrades for apps (independently from the user) + $apps = \OC_App::getEnabledApps(false, true); + $shouldUpgrade = false; foreach ($apps as $app) { if (\OC_App::shouldUpgrade($app)) { - return true; + $shouldUpgrade = true; + break; } } - return false; + return $shouldUpgrade; } else { return false; } diff --git a/lib/public/ieventsource.php b/lib/public/ieventsource.php new file mode 100644 index 00000000000..eb7853c5e90 --- /dev/null +++ b/lib/public/ieventsource.php @@ -0,0 +1,34 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCP; + +/** + * wrapper for server side events (http://en.wikipedia.org/wiki/Server-sent_events) + * includes a fallback for older browsers and IE + * + * use server side events with caution, to many open requests can hang the server + * + * The event source will initialize the connection to the client when the first data is sent + */ +interface IEventSource { + /** + * send a message to the client + * + * @param string $type + * @param mixed $data + * + * if only one parameter is given, a typeless message will be send with that parameter as data + */ + public function send($type, $data = null); + + /** + * close the connection of the event source + */ + public function close(); +} diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php index 60b0b497c54..1abf0d9938d 100644 --- a/lib/public/iservercontainer.php +++ b/lib/public/iservercontainer.php @@ -235,4 +235,11 @@ interface IServerContainer { * @return \OCP\ICertificateManager */ function getCertificateManager($user = null); + + /** + * Create a new event source + * + * @return \OCP\IEventSource + */ + function createEventSource(); } diff --git a/lib/public/security/icrypto.php b/lib/public/security/icrypto.php new file mode 100644 index 00000000000..e55eea8dd66 --- /dev/null +++ b/lib/public/security/icrypto.php @@ -0,0 +1,46 @@ +<?php +/** + * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCP\Security; + +/** + * Class Crypto provides a high-level encryption layer using AES-CBC. If no key has been provided + * it will use the secret defined in config.php as key. Additionally the message will be HMAC'd. + * + * Usage: + * $encryptWithDefaultPassword = \OC::$server->getCrypto()->encrypt('EncryptedText'); + * $encryptWithCustomPassword = \OC::$server->getCrypto()->encrypt('EncryptedText', 'password'); + * + * @package OCP\Security + */ +interface ICrypto { + + /** + * @param string $message The message to authenticate + * @param string $password Password to use (defaults to `secret` in config.php) + * @return string Calculated HMAC + */ + public function calculateHMAC($message, $password = ''); + + /** + * Encrypts a value and adds an HMAC (Encrypt-Then-MAC) + * @param string $plaintext + * @param string $password Password to encrypt, if not specified the secret from config.php will be taken + * @return string Authenticated ciphertext + */ + public function encrypt($plaintext, $password = ''); + + /** + * Decrypts a value and verifies the HMAC (Encrypt-Then-Mac) + * @param string $authenticatedCiphertext + * @param string $password Password to encrypt, if not specified the secret from config.php will be taken + * @return string plaintext + * @throws \Exception If the HMAC does not match + */ + public function decrypt($authenticatedCiphertext, $password = ''); +} diff --git a/lib/public/security/isecurerandom.php b/lib/public/security/isecurerandom.php new file mode 100644 index 00000000000..3de60f8d717 --- /dev/null +++ b/lib/public/security/isecurerandom.php @@ -0,0 +1,61 @@ +<?php +/** + * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCP\Security; + +/** + * Class SecureRandom provides a layer around RandomLib to generate + * secure random numbers. + * + * Usage: + * $rng = new \OC\Security\SecureRandom(); + * $randomString = $rng->getMediumStrengthGenerator()->generateString(30); + * + * @package OCP\Security + */ +interface ISecureRandom { + + /** + * Flags for characters that can be used for <code>generate($length, $characters)</code> + */ + const CHAR_UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + const CHAR_LOWER = 'abcdefghijklmnopqrstuvwxyz'; + const CHAR_DIGITS = '0123456789'; + const CHAR_SYMBOLS = '!\"#$%&\\\'()* +,-./:;<=>?@[\]^_`{|}~'; + + /** + * Convenience method to get a low strength random number generator. + * + * Low Strength should be used anywhere that random strings are needed + * in a non-cryptographical setting. They are not strong enough to be + * used as keys or salts. They are however useful for one-time use tokens. + * + * @return $this + */ + public function getLowStrengthGenerator(); + + /** + * Convenience method to get a medium strength random number generator. + * + * Medium Strength should be used for most needs of a cryptographic nature. + * They are strong enough to be used as keys and salts. However, they do + * take some time and resources to generate, so they should not be over-used + * + * @return $this + */ + public function getMediumStrengthGenerator(); + + /** + * Generate a random string of specified length. + * @param string $length The length of the generated string + * @param string $characters An optional list of characters to use + * @return string + * @throws \Exception + */ + public function generate($length, $characters = ''); +} diff --git a/lib/public/security/stringutils.php b/lib/public/security/stringutils.php new file mode 100644 index 00000000000..8e7b132724e --- /dev/null +++ b/lib/public/security/stringutils.php @@ -0,0 +1,25 @@ +<?php +/** + * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + + +namespace OCP\Security; + +class StringUtils { + /** + * Compares whether two strings are equal. To prevent guessing of the string + * length this is done by comparing two hashes against each other and afterwards + * a comparison of the real string to prevent against the unlikely chance of + * collisions. + * @param string $expected The expected value + * @param string $input The input to compare against + * @return bool True if the two strings are equal, otherwise false. + */ + public static function equals($expected, $input) { + return \OC\Security\StringUtils::equals($expected, $input); + } +} diff --git a/lib/public/util.php b/lib/public/util.php index bc1b90a2c89..2f657facfe8 100644 --- a/lib/public/util.php +++ b/lib/public/util.php @@ -505,6 +505,7 @@ class Util { * Generates a cryptographic secure pseudo-random string * @param int $length of the random string * @return string + * @deprecated Use \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate($length); instead */ public static function generateRandomBytes($length = 30) { return \OC_Util::generateRandomBytes($length); diff --git a/lib/repair/repairconfig.php b/lib/repair/repairconfig.php new file mode 100644 index 00000000000..e09d8e8fe7a --- /dev/null +++ b/lib/repair/repairconfig.php @@ -0,0 +1,37 @@ +<?php +/** + * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Repair; + +use OC\Hooks\BasicEmitter; +use OC\RepairStep; +use Sabre\DAV\Exception; + +class RepairConfig extends BasicEmitter implements RepairStep { + + public function getName() { + return 'Repair config'; + } + + /** + * Updates the configuration after running an update + */ + public function run() { + $this->addSecret(); + } + + /** + * Adds a secret to config.php + */ + private function addSecret() { + if(\OC::$server->getConfig()->getSystemValue('secret', null) === null) { + $secret = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(48); + \OC::$server->getConfig()->setSystemValue('secret', $secret); + } + } +} diff --git a/search/js/result.js b/search/js/result.js index 857b4fe1f22..13be0b552bf 100644 --- a/search/js/result.js +++ b/search/js/result.js @@ -80,7 +80,7 @@ OC.search.showResults=function(results){ containerName = '/'; } var containerLink = OC.linkTo('files', 'index.php') - +'?dir='+encodeURIComponent(parent) + +'/?dir='+encodeURIComponent(parent) +'&scrollto='+encodeURIComponent(type[i].name); row.find('td.result a') .attr('href', containerLink) diff --git a/settings/admin.php b/settings/admin.php index cf37726189b..65deed6b883 100755 --- a/settings/admin.php +++ b/settings/admin.php @@ -38,7 +38,7 @@ $tmpl->assign('mail_smtppassword', OC_Config::getValue( "mail_smtppassword", '' $tmpl->assign('entries', $entries); $tmpl->assign('entriesremain', $entriesremain); $tmpl->assign('htaccessworking', $htaccessworking); -$tmpl->assign('internetconnectionworking', OC_Util::isInternetConnectionEnabled() ? OC_Util::isInternetConnectionWorking() : false); +$tmpl->assign('internetconnectionworking', OC_Util::isInternetConnectionEnabled() ? OC_Util::isInternetConnectionWorking() : 'disabled'); $tmpl->assign('isLocaleWorking', OC_Util::isSetLocaleWorking()); $tmpl->assign('isPhpCharSetUtf8', OC_Util::isPhpCharSetUtf8()); $tmpl->assign('isAnnotationsWorking', OC_Util::isAnnotationsWorking()); diff --git a/settings/ajax/excludegroups.php b/settings/ajax/excludegroups.php index 2934a448a6a..c3488c5bae7 100644 --- a/settings/ajax/excludegroups.php +++ b/settings/ajax/excludegroups.php @@ -1,5 +1,5 @@ <?php -OC_JSON::checkSubAdminUser(); +OC_JSON::checkAdminUser(); OCP\JSON::callCheck(); $selectedGroups = isset($_POST["selectedGroups"]) ? json_decode($_POST["selectedGroups"]) : array(); diff --git a/settings/ajax/geteveryonecount.php b/settings/ajax/geteveryonecount.php new file mode 100644 index 00000000000..54fbd6e2fbd --- /dev/null +++ b/settings/ajax/geteveryonecount.php @@ -0,0 +1,49 @@ +<?php +/** + * ownCloud + * + * @author Clark Tomlinson + * @copyright 2014 Clark Tomlinson <clark@owncloud.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +OC_JSON::callCheck(); +OC_JSON::checkSubAdminUser(); + +$userCount = 0; + +$currentUser = \OC::$server->getUserSession()->getLoginName(); + +if (!OC_User::isAdminUser($currentUser)) { + $groups = OC_SubAdmin::getSubAdminsGroups($currentUser); + + foreach ($groups as $group) { + $userCount += count(OC_Group::usersInGroup($group)); + + } +} else { + + $userCountArray = \OC::$server->getUserManager()->countUsers(); + + if (!empty($userCountArray)) { + foreach ($userCountArray as $classname => $usercount) { + $userCount += $usercount; + } + } +} + + +OC_JSON::success(array('count' => $userCount)); diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index 258b6aa7efd..081842734f0 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -251,12 +251,23 @@ GroupList = { getElementGID: function (element) { return ($(element).closest('li').data('gid') || '').toString(); + }, + getEveryoneCount: function () { + $.ajax({ + type: "GET", + dataType: "json", + url: OC.generateUrl('/settings/ajax/geteveryonecount') + }).success(function (data) { + $('#everyonegroup').data('usercount', data.count); + $('#everyonecount').text(data.count); + }); } }; $(document).ready( function () { $userGroupList = $('#usergrouplist'); GroupList.initDeleteHandling(); + GroupList.getEveryoneCount(); // Display or hide of Create Group List Element $('#newgroup-form').hide(); diff --git a/settings/l10n/ar.php b/settings/l10n/ar.php index f9acc08ce52..6d4880502dc 100644 --- a/settings/l10n/ar.php +++ b/settings/l10n/ar.php @@ -19,6 +19,7 @@ $TRANSLATIONS = array( "Invalid email" => "البريد الإلكتروني غير صالح", "Unable to delete group" => "فشل إزالة المجموعة", "Unable to delete user" => "فشل إزالة المستخدم", +"Backups restored successfully" => "تم إسترجاع النسخة الإحتياطية بنجاح", "Language changed" => "تم تغيير اللغة", "Invalid request" => "طلب غير مفهوم", "Admins can't remove themself from the admin group" => "لا يستطيع المدير إزالة حسابه من مجموعة المديرين", @@ -31,9 +32,11 @@ $TRANSLATIONS = array( "Wrong admin recovery password. Please check the password and try again." => "خطا في كلمة مرور المسؤول المستردة, يرجى التاكد من كلمة المرور والمحاولة مرة اخرى.", "Back-end doesn't support password change, but the users encryption key was successfully updated." => "Back-end لا يدعم تغيير كلمة المرور, لاكن مفتاح تشفير المستخدمين تم تحديثة بنجاح.", "Unable to change password" => "لا يمكن تغيير كلمة المرور", +"Are you really sure you want add \"{domain}\" as trusted domain?" => "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.", "Sending..." => "جاري الارسال ...", "User Documentation" => "كتاب توثيق المستخدم", "Update to {appversion}" => "تم التحديث الى ", +"Uninstall App" => "أزالة تطبيق", "Disable" => "إيقاف", "Enable" => "تفعيل", "Please wait...." => "الرجاء الانتظار ...", @@ -44,6 +47,8 @@ $TRANSLATIONS = array( "Error" => "خطأ", "Update" => "حدث", "Updated" => "تم التحديث بنجاح", +"Uninstalling ...." => "جاري إلغاء التثبيت ...", +"Uninstall" => "ألغاء التثبيت", "Select a profile picture" => "اختر صورة الملف الشخصي ", "Very weak password" => "كلمة السر ضعيفة جدا", "Weak password" => "كلمة السر ضعيفة", @@ -89,9 +94,12 @@ $TRANSLATIONS = array( "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." => "الملف cron.php تم تسجيله فى خدمه webcron لاستدعاء الملف cron.php كل 15 دقيقه", "Sharing" => "مشاركة", "Allow apps to use the Share API" => "السماح للتطبيقات بالمشاركة عن طريق الAPI", +"Allow users to share via link" => "السماح للمستخدم بمشاركة الملف عن طريق رابط", "Allow public uploads" => "السماح بالرفع للعامة ", +"Expire after " => "ينتهي بعد", +"days" => "أيام", "Allow resharing" => "السماح بإعادة المشاركة ", -"Security" => "حماية", +"Security" => "الأمان", "Enforce HTTPS" => "فرض HTTPS", "Forces the clients to connect to %s via an encrypted connection." => "اجبار العميل للاتصال بـ %s عن طريق اتصال مشفر", "Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "يرجى الاتصال بـ %s عن طريق HTTPS لتفعيل او تعطيل SSL enforcement.", @@ -131,13 +139,14 @@ $TRANSLATIONS = array( "Profile picture" => "صورة الملف الشخصي", "Upload new" => "رفع الان", "Select new from Files" => "اختر جديد من الملفات ", -"Remove image" => "احذف الصورة ", +"Remove image" => "إزالة الصورة", "Either png or jpg. Ideally square but you will be able to crop it." => "سواء png او jpg. بامكانك قص الصورة ", "Your avatar is provided by your original account." => "صورتك الرمزية يتم توفيرها عن طريق حسابك الاصلي.", "Cancel" => "الغاء", "Choose as profile image" => "اختر صورة الملف الشخصي", "Language" => "اللغة", "Help translate" => "ساعد في الترجمه", +"Valid until" => "صالح حتى", "The encryption app is no longer enabled, please decrypt all your files" => "البرنامج المشفر لم يعد مفعل, يرجى فك التشفير عن كل ملفاتك", "Log-in password" => "كلمه سر الدخول", "Decrypt all Files" => "فك تشفير جميع الملفات ", @@ -146,12 +155,14 @@ $TRANSLATIONS = array( "Admin Recovery Password" => "استعادة كلمة المرور للمسؤول", "Enter the recovery password in order to recover the users files during password change" => "ادخل كلمة المرور المستعادة من اجل استرداد ملفات المستخدمين اثناء تغيير كلمة المرور", "Group" => "مجموعة", +"Everyone" => "الجميع", "Default Quota" => "الحصة النسبية الإفتراضية", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" => "يرجى ادخال تخزين quota (مثل:\"512 MB\" او \"12 GB\")", "Unlimited" => "غير محدود", "Other" => "شيء آخر", "Username" => "إسم المستخدم", "Quota" => "حصه", +"Last Login" => "آخر تسجيل دخول", "change full name" => "تغيير اسمك الكامل", "set new password" => "اعداد كلمة مرور جديدة", "Default" => "افتراضي" diff --git a/settings/l10n/az.php b/settings/l10n/az.php index 9db69929bab..c0937e271e2 100644 --- a/settings/l10n/az.php +++ b/settings/l10n/az.php @@ -106,6 +106,7 @@ $TRANSLATIONS = array( "More" => "Yenə", "Get the apps to sync your files" => "Fayllarınızın sinxronizasiyası üçün proqramları götürün", "Password" => "Şifrə", +"Change password" => "Şifrəni dəyiş", "Cancel" => "Dayandır", "Username" => "İstifadəçi adı" ); diff --git a/settings/l10n/bn_BD.php b/settings/l10n/bn_BD.php index c84f51a90fe..a1a4c11fce7 100644 --- a/settings/l10n/bn_BD.php +++ b/settings/l10n/bn_BD.php @@ -30,6 +30,7 @@ $TRANSLATIONS = array( "None" => "কোনটিই নয়", "Login" => "প্রবেশ", "Security Warning" => "নিরাপত্তাজনিত সতর্কতা", +"days" => "দিনগুলি", "Server address" => "সার্ভার ঠিকানা", "Port" => "পোর্ট", "More" => "বেশী", diff --git a/settings/l10n/et_EE.php b/settings/l10n/et_EE.php index dc46a70b9e2..55b6586f737 100644 --- a/settings/l10n/et_EE.php +++ b/settings/l10n/et_EE.php @@ -66,6 +66,7 @@ $TRANSLATIONS = array( "So-so password" => "Enam-vähem sobiv parool", "Good password" => "Hea parool", "Strong password" => "Väga hea parool", +"Valid until {date}" => "Kehtib kuni {date}", "Delete" => "Kustuta", "Decrypting files... Please wait, this can take some time." => "Dekrüpteerin faile... Palun oota, see võib võtta veidi aega.", "Delete encryption keys permanently." => "Kustuta krüpteerimisvõtmed lõplikult", @@ -111,6 +112,7 @@ $TRANSLATIONS = array( "Your PHP version is outdated" => "PHP versioon on aegunud", "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." => "Sinu PHP versioon on aegunud. Soovitame tungivalt uuenda versioonile 5.3.8 või uuemale, kuna varasemad versioonid on teadaolevalt vigased. On võimalik, et see käesolev paigaldus ei toimi korrektselt.", "PHP charset is not set to UTF-8" => "PHP märgistik pole UTF-8", +"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." => "PHP märgistikuks pole määratud UTF-8. See võib tekitada failinimedes mitte-ASCII märkidega suuri probleeme. Me soovitame tungivalt panna failis php.ini sätte 'default_charset' väärtuseks 'UTF-8'.", "Locale not working" => "Lokalisatsioon ei toimi", "System locale can not be set to a one which supports UTF-8." => "Süsteemi lokaliseeringuks ei saa panna sellist, mis toetab UTF-8-t.", "This means that there might be problems with certain characters in file names." => "See tähendab, et võib esineda probleeme failide nimedes mõnede sümbolitega.", @@ -118,6 +120,7 @@ $TRANSLATIONS = array( "Internet connection not working" => "Internetiühendus ei toimi", "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." => "Serveril puudub toimiv internetiühendus. See tähendab, et mõned funktsionaalsused, nagu näiteks väliste andmehoidlate ühendamine, teavitused uuendustest või kolmandate osapoolte rakenduste paigaldamine ei tööta. Eemalt failidele ligipääs ning teadete saatmine emailiga ei pruugi samuti toimida. Kui soovid täielikku funktsionaalsust, siis soovitame serverile tagada ligipääs internetti.", "URL generation in notification emails" => "URL-ide loomine teavituskirjades", +"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" => "Kui sinu sait pole paigaldatud domeeni juurkausta ja see kasutab ajastatud tegevusi, siis võib tekkide probleeme URL-ide loomisega. Nende probleemide vältimiseks sisesta palun failis config.php valikusse \"overwritewebroot\" oma veebiserveri juurkaust (Soovituslik: \"%s\")", "Cron" => "Cron", "Last cron was executed at %s." => "Cron käivitati viimati %s.", "Last cron was executed at %s. This is more than an hour ago, something seems wrong." => "Cron käivitati viimati %s. See on rohkem kui tund tagasi, midagi on valesti.", @@ -200,6 +203,10 @@ $TRANSLATIONS = array( "Language" => "Keel", "Help translate" => "Aita tõlkida", "SSL root certificates" => "SSL root sertifikaadid", +"Common Name" => "Üldnimetus", +"Valid until" => "Kehtib kuni", +"Issued By" => "isas", +"Valid until %s" => "Kehtib kuni %s", "Import Root Certificate" => "Impordi root sertifikaadid", "The encryption app is no longer enabled, please decrypt all your files" => "Küpteeringu rakend pole lubatud, dekrüpteeri kõik oma failid", "Log-in password" => "Sisselogimise parool", @@ -207,6 +214,8 @@ $TRANSLATIONS = array( "Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." => "Sinu krüpteerimisvõtmed on tõstetud varukoopiasse. Kui midagi läheb valesti, siis saad võtmed taastada. Kustuta lõplikult ainult juhul kui oled kindel, et failid on dekrüteeritud korrektselt.", "Restore Encryption Keys" => "Taasta krüpteerimisvõtmed", "Delete Encryption Keys" => "Kustuta krüpteerimisvõtmed", +"Show storage location" => "Näita salvestusruumi asukohta", +"Show last log in" => "Viimane sisselogimine", "Login Name" => "Kasutajanimi", "Create" => "Lisa", "Admin Recovery Password" => "Admini parooli taastamine", diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php index 7b48a8a33bd..42cd848597f 100644 --- a/settings/l10n/fr.php +++ b/settings/l10n/fr.php @@ -40,6 +40,8 @@ $TRANSLATIONS = array( "Wrong admin recovery password. Please check the password and try again." => "Mot de passe administrateur de récupération de données invalide. Veuillez vérifier le mot de passe et essayer à nouveau.", "Back-end doesn't support password change, but the users encryption key was successfully updated." => "L'infrastructure d'arrière-plan ne supporte pas la modification de mot de passe, mais la clef de chiffrement des utilisateurs a été mise à jour avec succès.", "Unable to change password" => "Impossible de modifier le mot de passe", +"Are you really sure you want add \"{domain}\" as trusted domain?" => "Êtes-vous vraiment sûr de vouloir ajouter \"{domain}\" comme domaine de confiance ?", +"Add trusted domain" => "Ajouter un domaine de confiance", "Sending..." => "Envoi en cours...", "User Documentation" => "Documentation utilisateur", "Admin Documentation" => "Documentation administrateur", @@ -64,6 +66,7 @@ $TRANSLATIONS = array( "So-so password" => "Mot de passe de sécurité tout juste acceptable", "Good password" => "Mot de passe de sécurité suffisante", "Strong password" => "Mot de passe de forte sécurité", +"Valid until {date}" => "Valide jusqu'au {date}", "Delete" => "Supprimer", "Decrypting files... Please wait, this can take some time." => "Déchiffrement en cours... Cela peut prendre un certain temps.", "Delete encryption keys permanently." => "Supprimer définitivement les clés de chiffrement", @@ -205,6 +208,7 @@ $TRANSLATIONS = array( "Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." => "Vos clés de chiffrement ont été déplacées dans l'emplacement de backup. Si quelque chose devait mal se passer, vous pouvez restaurer les clés. Choisissez la suppression permanente seulement si vous êtes sûr que tous les fichiers ont été déchiffrés correctement.", "Restore Encryption Keys" => "Restaurer les clés de chiffrement", "Delete Encryption Keys" => "Supprimer les clés de chiffrement", +"Show last log in" => "Montrer la dernière identification", "Login Name" => "Nom d'utilisateur", "Create" => "Créer", "Admin Recovery Password" => "Récupération du mot de passe administrateur", diff --git a/settings/routes.php b/settings/routes.php index 191b5febbd7..86d6049551c 100644 --- a/settings/routes.php +++ b/settings/routes.php @@ -27,6 +27,8 @@ $this->create('settings_ajax_userlist', '/settings/ajax/userlist') ->actionInclude('settings/ajax/userlist.php'); $this->create('settings_ajax_grouplist', '/settings/ajax/grouplist') ->actionInclude('settings/ajax/grouplist.php'); +$this->create('settings_ajax_everyonecount', '/settings/ajax/geteveryonecount') + ->actionInclude('settings/ajax/geteveryonecount.php'); $this->create('settings_ajax_createuser', '/settings/ajax/createuser.php') ->actionInclude('settings/ajax/createuser.php'); $this->create('settings_ajax_removeuser', '/settings/ajax/removeuser.php') diff --git a/settings/templates/admin.php b/settings/templates/admin.php index 1f3701778ab..0e6cb14bcef 100644 --- a/settings/templates/admin.php +++ b/settings/templates/admin.php @@ -184,7 +184,7 @@ if (!$_['isLocaleWorking']) { } // is internet connection working ? -if (!$_['internetconnectionworking']) { +if ($_['internetconnectionworking'] === false) { ?> <div class="section"> <h2><?php p($l->t('Internet connection not working'));?></h2> diff --git a/settings/templates/users/part.grouplist.php b/settings/templates/users/part.grouplist.php index 255f2a6cf45..5b516bc0e16 100644 --- a/settings/templates/users/part.grouplist.php +++ b/settings/templates/users/part.grouplist.php @@ -12,15 +12,15 @@ </form> </li> <!-- Everyone --> - <li data-gid="_everyone" data-usercount="<?php p($_["usercount"]); ?>" class="isgroup"> + <li id="everyonegroup" data-gid="_everyone" data-usercount="" class="isgroup"> <a href="#"> <span class="groupname"> <?php p($l->t('Everyone')); ?> </span> </a> <span class="utils"> - <span class="usercount"> - <?php p($_["usercount"]); ?> + <span class="usercount" id="everyonecount"> + </span> </span> </li> diff --git a/settings/users.php b/settings/users.php index bc6c2ea7e7c..94dda43c523 100644 --- a/settings/users.php +++ b/settings/users.php @@ -60,13 +60,13 @@ $defaultQuotaIsUserDefined=array_search($defaultQuota, $quotaPreset)===false // load users and quota foreach($accessibleUsers as $uid => $displayName) { - $quota=OC_Preferences::getValue($uid, 'files', 'quota', 'default'); - $isQuotaUserDefined=array_search($quota, $quotaPreset)===false - && array_search($quota, array('none', 'default'))===false; + $quota = OC_Preferences::getValue($uid, 'files', 'quota', 'default'); + $isQuotaUserDefined = array_search($quota, $quotaPreset) === false + && array_search($quota, array('none', 'default')) === false; $name = $displayName; - if ( $displayName !== $uid ) { - $name = $name . ' ('.$uid.')'; + if ($displayName !== $uid) { + $name = $name . ' (' . $uid . ')'; } $user = $userManager->get($uid); @@ -82,17 +82,16 @@ foreach($accessibleUsers as $uid => $displayName) { ); } -$tmpl = new OC_Template( "settings", "users/main", "user" ); -$tmpl->assign( 'users', $users ); -$tmpl->assign( 'groups', $groups ); -$tmpl->assign( 'adminGroup', $adminGroup ); -$tmpl->assign( 'isAdmin', (int) $isAdmin); -$tmpl->assign( 'subadmins', $subadmins); -$tmpl->assign('usercount', count($users)); -$tmpl->assign( 'numofgroups', count($groups) + count($adminGroup)); -$tmpl->assign( 'quota_preset', $quotaPreset); -$tmpl->assign( 'default_quota', $defaultQuota); -$tmpl->assign( 'defaultQuotaIsUserDefined', $defaultQuotaIsUserDefined); -$tmpl->assign( 'recoveryAdminEnabled', $recoveryAdminEnabled); -$tmpl->assign( 'enableAvatars', \OC_Config::getValue('enable_avatars', true)); +$tmpl = new OC_Template("settings", "users/main", "user"); +$tmpl->assign('users', $users); +$tmpl->assign('groups', $groups); +$tmpl->assign('adminGroup', $adminGroup); +$tmpl->assign('isAdmin', (int)$isAdmin); +$tmpl->assign('subadmins', $subadmins); +$tmpl->assign('numofgroups', count($groups) + count($adminGroup)); +$tmpl->assign('quota_preset', $quotaPreset); +$tmpl->assign('default_quota', $defaultQuota); +$tmpl->assign('defaultQuotaIsUserDefined', $defaultQuotaIsUserDefined); +$tmpl->assign('recoveryAdminEnabled', $recoveryAdminEnabled); +$tmpl->assign('enableAvatars', \OC::$server->getConfig()->getSystemValue('enable_avatars', true)); $tmpl->printPage(); diff --git a/tests/lib/app.php b/tests/lib/app.php index e2b578fe6b9..e538ebec8a0 100644 --- a/tests/lib/app.php +++ b/tests/lib/app.php @@ -9,6 +9,14 @@ class Test_App extends PHPUnit_Framework_TestCase { + private $oldAppConfigService; + + const TEST_USER1 = 'user1'; + const TEST_USER2 = 'user2'; + const TEST_USER3 = 'user3'; + const TEST_GROUP1 = 'group1'; + const TEST_GROUP2 = 'group2'; + function appVersionsProvider() { return array( // exact match @@ -236,4 +244,222 @@ class Test_App extends PHPUnit_Framework_TestCase { array_unshift($sortedApps, 'files'); $this->assertEquals($sortedApps, $apps); } + + /** + * Providers for the app config values + */ + function appConfigValuesProvider() { + return array( + // logged in user1 + array( + self::TEST_USER1, + array( + 'files', + 'app1', + 'app3', + 'appforgroup1', + 'appforgroup12', + ), + false + ), + // logged in user2 + array( + self::TEST_USER2, + array( + 'files', + 'app1', + 'app3', + 'appforgroup12', + 'appforgroup2', + ), + false + ), + // logged in user3 + array( + self::TEST_USER3, + array( + 'files', + 'app1', + 'app3', + 'appforgroup1', + 'appforgroup12', + 'appforgroup2', + ), + false + ), + // no user, returns all apps + array( + null, + array( + 'files', + 'app1', + 'app3', + 'appforgroup1', + 'appforgroup12', + 'appforgroup2', + ), + false, + ), + // user given, but ask for all + array( + self::TEST_USER1, + array( + 'files', + 'app1', + 'app3', + 'appforgroup1', + 'appforgroup12', + 'appforgroup2', + ), + true, + ), + ); + } + + /** + * Test enabled apps + * + * @dataProvider appConfigValuesProvider + */ + public function testEnabledApps($user, $expectedApps, $forceAll) { + $userManager = \OC::$server->getUserManager(); + $groupManager = \OC::$server->getGroupManager(); + $user1 = $userManager->createUser(self::TEST_USER1, self::TEST_USER1); + $user2 = $userManager->createUser(self::TEST_USER2, self::TEST_USER2); + $user3 = $userManager->createUser(self::TEST_USER3, self::TEST_USER3); + + $group1 = $groupManager->createGroup(self::TEST_GROUP1); + $group1->addUser($user1); + $group1->addUser($user3); + $group2 = $groupManager->createGroup(self::TEST_GROUP2); + $group2->addUser($user2); + $group2->addUser($user3); + + \OC_User::setUserId($user); + + $this->setupAppConfigMock()->expects($this->once()) + ->method('getValues') + ->will($this->returnValue( + array( + 'app3' => 'yes', + 'app2' => 'no', + 'app1' => 'yes', + 'appforgroup1' => '["group1"]', + 'appforgroup2' => '["group2"]', + 'appforgroup12' => '["group2","group1"]', + ) + ) + ); + + $apps = \OC_App::getEnabledApps(true, $forceAll); + $this->assertEquals($expectedApps, $apps); + + $this->restoreAppConfig(); + \OC_User::setUserId(null); + + $user1->delete(); + $user2->delete(); + $user3->delete(); + // clear user cache... + $userManager->delete(self::TEST_USER1); + $userManager->delete(self::TEST_USER2); + $userManager->delete(self::TEST_USER3); + $group1->delete(); + $group2->delete(); + } + + /** + * Test isEnabledApps() with cache, not re-reading the list of + * enabled apps more than once when a user is set. + */ + public function testEnabledAppsCache() { + $userManager = \OC::$server->getUserManager(); + $user1 = $userManager->createUser(self::TEST_USER1, self::TEST_USER1); + + \OC_User::setUserId(self::TEST_USER1); + + $this->setupAppConfigMock()->expects($this->once()) + ->method('getValues') + ->will($this->returnValue( + array( + 'app3' => 'yes', + 'app2' => 'no', + ) + ) + ); + + $apps = \OC_App::getEnabledApps(true); + $this->assertEquals(array('files', 'app3'), $apps); + + // mock should not be called again here + $apps = \OC_App::getEnabledApps(false); + $this->assertEquals(array('files', 'app3'), $apps); + + $this->restoreAppConfig(); + \OC_User::setUserId(null); + + $user1->delete(); + // clear user cache... + $userManager->delete(self::TEST_USER1); + } + + /** + * Tests that the apps list is re-requested (not cached) when + * no user is set. + */ + public function testEnabledAppsNoCache() { + $this->setupAppConfigMock()->expects($this->exactly(2)) + ->method('getValues') + ->will($this->returnValue( + array( + 'app3' => 'yes', + 'app2' => 'no', + ) + ) + ); + + $apps = \OC_App::getEnabledApps(true); + $this->assertEquals(array('files', 'app3'), $apps); + + // mock should be called again here + $apps = \OC_App::getEnabledApps(false); + $this->assertEquals(array('files', 'app3'), $apps); + + $this->restoreAppConfig(); + } + + private function setupAppConfigMock() { + $appConfig = $this->getMock( + '\OC\AppConfig', + array('getValues'), + array(\OC_DB::getConnection()), + '', + false + ); + + $this->registerAppConfig($appConfig); + return $appConfig; + } + + /** + * Register an app config mock for testing purposes. + * @param $appConfig app config mock + */ + private function registerAppConfig($appConfig) { + $this->oldAppConfigService = \OC::$server->query('AppConfig'); + \OC::$server->registerService('AppConfig', function ($c) use ($appConfig) { + return $appConfig; + }); + } + + /** + * Restore the original app config service. + */ + private function restoreAppConfig() { + $oldService = $this->oldAppConfigService; + \OC::$server->registerService('AppConfig', function ($c) use ($oldService){ + return $oldService; + }); + } } + diff --git a/tests/lib/connector/sabre/file.php b/tests/lib/connector/sabre/file.php index ba4e775813b..f9f485a5400 100644 --- a/tests/lib/connector/sabre/file.php +++ b/tests/lib/connector/sabre/file.php @@ -13,7 +13,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase { */ public function testSimplePutFails() { // setup - $view = $this->getMock('\OC\Files\View', array('file_put_contents', 'getRelativePath'), array(), '', false); + $view = $this->getMock('\OC\Files\View', array('file_put_contents', 'getRelativePath'), array()); $view->expects($this->any()) ->method('file_put_contents') ->will($this->returnValue(false)); @@ -38,8 +38,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase { public function testSimplePutFailsOnRename() { // setup $view = $this->getMock('\OC\Files\View', - array('file_put_contents', 'rename', 'getRelativePath', 'filesize'), - array(), '', false); + array('file_put_contents', 'rename', 'getRelativePath', 'filesize')); $view->expects($this->any()) ->method('file_put_contents') ->withAnyParameters() @@ -72,7 +71,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase { */ public function testSimplePutInvalidChars() { // setup - $view = $this->getMock('\OC\Files\View', array('file_put_contents', 'getRelativePath'), array(), '', false); + $view = $this->getMock('\OC\Files\View', array('file_put_contents', 'getRelativePath')); $view->expects($this->any()) ->method('file_put_contents') ->will($this->returnValue(false)); @@ -96,7 +95,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase { */ public function testSetNameInvalidChars() { // setup - $view = $this->getMock('\OC\Files\View', array('getRelativePath'), array(), '', false); + $view = $this->getMock('\OC\Files\View', array('getRelativePath')); $view->expects($this->any()) ->method('getRelativePath') @@ -115,8 +114,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase { public function testUploadAbort() { // setup $view = $this->getMock('\OC\Files\View', - array('file_put_contents', 'rename', 'getRelativePath', 'filesize'), - array(), '', false); + array('file_put_contents', 'rename', 'getRelativePath', 'filesize')); $view->expects($this->any()) ->method('file_put_contents') ->withAnyParameters() diff --git a/tests/lib/db.php b/tests/lib/db.php index 4b1a474c4ef..1f62413cbe4 100644 --- a/tests/lib/db.php +++ b/tests/lib/db.php @@ -125,6 +125,28 @@ class Test_DB extends PHPUnit_Framework_TestCase { $this->assertEquals(4, count($result->fetchAll())); } + public function testInsertIfNotExistNull() { + $categoryentries = array( + array('addressbookid' => 123, 'fullname' => null, 'expectedResult' => 1), + array('addressbookid' => 123, 'fullname' => null, 'expectedResult' => 0), + array('addressbookid' => 123, 'fullname' => 'test', 'expectedResult' => 1), + ); + + foreach($categoryentries as $entry) { + $result = OC_DB::insertIfNotExist('*PREFIX*'.$this->table2, + array( + 'addressbookid' => $entry['addressbookid'], + 'fullname' => $entry['fullname'], + )); + $this->assertEquals($entry['expectedResult'], $result); + } + + $query = OC_DB::prepare('SELECT * FROM `*PREFIX*'.$this->table2.'`'); + $result = $query->execute(); + $this->assertTrue((bool)$result); + $this->assertEquals(2, count($result->fetchAll())); + } + public function testinsertIfNotExistDontOverwrite() { $fullname = 'fullname test'; $uri = 'uri_1'; diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php index bf17f7a1620..03fe4b26e7f 100644 --- a/tests/lib/files/cache/cache.php +++ b/tests/lib/files/cache/cache.php @@ -94,20 +94,22 @@ class Cache extends \PHPUnit_Framework_TestCase { $this->assertEquals(array('size' => 12, 'mtime' => 15), $this->cache->get($file1)); } - public function testFolder() { - $file1 = 'folder'; - $file2 = 'folder/bar'; - $file3 = 'folder/foo'; + /** + * @dataProvider folderDataProvider + */ + public function testFolder($folder) { + $file2 = $folder.'/bar'; + $file3 = $folder.'/foo'; $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory'); $fileData = array(); $fileData['bar'] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file'); $fileData['foo'] = array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file'); - $this->cache->put($file1, $data1); + $this->cache->put($folder, $data1); $this->cache->put($file2, $fileData['bar']); $this->cache->put($file3, $fileData['foo']); - $content = $this->cache->getFolderContents($file1); + $content = $this->cache->getFolderContents($folder); $this->assertEquals(count($content), 2); foreach ($content as $cachedData) { $data = $fileData[$cachedData['name']]; @@ -116,25 +118,40 @@ class Cache extends \PHPUnit_Framework_TestCase { } } - $file4 = 'folder/unkownSize'; + $file4 = $folder.'/unkownSize'; $fileData['unkownSize'] = array('size' => -1, 'mtime' => 25, 'mimetype' => 'foo/file'); $this->cache->put($file4, $fileData['unkownSize']); - $this->assertEquals(-1, $this->cache->calculateFolderSize($file1)); + $this->assertEquals(-1, $this->cache->calculateFolderSize($folder)); $fileData['unkownSize'] = array('size' => 5, 'mtime' => 25, 'mimetype' => 'foo/file'); $this->cache->put($file4, $fileData['unkownSize']); - $this->assertEquals(1025, $this->cache->calculateFolderSize($file1)); + $this->assertEquals(1025, $this->cache->calculateFolderSize($folder)); $this->cache->remove($file2); $this->cache->remove($file3); $this->cache->remove($file4); - $this->assertEquals(0, $this->cache->calculateFolderSize($file1)); + $this->assertEquals(0, $this->cache->calculateFolderSize($folder)); - $this->cache->remove('folder'); - $this->assertFalse($this->cache->inCache('folder/foo')); - $this->assertFalse($this->cache->inCache('folder/bar')); + $this->cache->remove($folder); + $this->assertFalse($this->cache->inCache($folder.'/foo')); + $this->assertFalse($this->cache->inCache($folder.'/bar')); + } + + public function folderDataProvider() { + + return array( + array('folder'), + // that was too easy, try something harder + array('☺, WHITE SMILING FACE, UTF-8 hex E298BA'), + // what about 4 byte utf-8 + array('😐, NEUTRAL_FACE, UTF-8 hex F09F9890'), + // now the crazy stuff + array(', UNASSIGNED PRIVATE USE, UTF-8 hex EF9890'), + // and my favorite + array('w͢͢͝h͡o͢͡ ̸͢k̵͟n̴͘ǫw̸̛s͘ ̀́w͘͢ḩ̵a҉̡͢t ̧̕h́o̵r͏̵rors̡ ̶͡͠lį̶e͟͟ ̶͝in͢ ͏t̕h̷̡͟e ͟͟d̛a͜r̕͡k̢̨ ͡h̴e͏a̷̢̡rt́͏ ̴̷͠ò̵̶f̸ u̧͘ní̛͜c͢͏o̷͏d̸͢e̡͝') + ); } public function testEncryptedFolder() { diff --git a/tests/lib/files/cache/updater.php b/tests/lib/files/cache/updater.php index b874e418100..96b4207ad43 100644 --- a/tests/lib/files/cache/updater.php +++ b/tests/lib/files/cache/updater.php @@ -8,324 +8,128 @@ namespace Test\Files\Cache; -use \OC\Files\Filesystem as Filesystem; +use OC\Files\Filesystem; use OC\Files\Storage\Temporary; +use OC\Files\View; class Updater extends \PHPUnit_Framework_TestCase { /** - * @var \OC\Files\Storage\Storage $storage + * @var \OC\Files\Storage\Storage */ - private $storage; + protected $storage; /** - * @var \OC\Files\Cache\Scanner $scanner + * @var \OC\Files\Cache\Cache */ - private $scanner; - - private $stateFilesEncryption; + protected $cache; /** - * @var \OC\Files\Cache\Cache $cache + * @var \OC\Files\View */ - private $cache; + protected $view; - private static $user; + /** + * @var \OC\Files\Cache\Updater + */ + protected $updater; public function setUp() { - - // remember files_encryption state - $this->stateFilesEncryption = \OC_App::isEnabled('files_encryption'); - // we want to tests with the encryption app disabled - \OC_App::disable('files_encryption'); - - $this->storage = new \OC\Files\Storage\Temporary(array()); - $textData = "dummy file data\n"; - $imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png'); - $this->storage->mkdir('folder'); - $this->storage->file_put_contents('foo.txt', $textData); - $this->storage->file_put_contents('foo.png', $imgData); - $this->storage->file_put_contents('folder/bar.txt', $textData); - $this->storage->file_put_contents('folder/bar2.txt', $textData); - - $this->scanner = $this->storage->getScanner(); - $this->scanner->scan(''); + $this->storage = new Temporary(array()); + Filesystem::clearMounts(); + Filesystem::mount($this->storage, array(), '/'); + $this->view = new View(''); + $this->updater = new \OC\Files\Cache\Updater($this->view); $this->cache = $this->storage->getCache(); + } - \OC\Files\Filesystem::tearDown(); - if (!self::$user) { - self::$user = uniqid(); - } + public function testNewFile() { + $this->storage->file_put_contents('foo.txt', 'bar'); + $this->assertFalse($this->cache->inCache('foo.txt')); - \OC_User::createUser(self::$user, 'password'); - \OC_User::setUserId(self::$user); + $this->updater->update('/foo.txt'); - \OC\Files\Filesystem::init(self::$user, '/' . self::$user . '/files'); + $this->assertTrue($this->cache->inCache('foo.txt')); + $cached = $this->cache->get('foo.txt'); + $this->assertEquals(3, $cached['size']); + $this->assertEquals('text/plain', $cached['mimetype']); + } - Filesystem::clearMounts(); - Filesystem::mount($this->storage, array(), '/' . self::$user . '/files'); + public function testUpdatedFile() { + $this->view->file_put_contents('/foo.txt', 'bar'); + $cached = $this->cache->get('foo.txt'); + $this->assertEquals(3, $cached['size']); + $this->assertEquals('text/plain', $cached['mimetype']); - \OC_Hook::clear('OC_Filesystem'); - } + $this->storage->file_put_contents('foo.txt', 'qwerty'); - public function tearDown() { - if ($this->cache) { - $this->cache->clear(); - } - $result = \OC_User::deleteUser(self::$user); - $this->assertTrue($result); - Filesystem::tearDown(); - // reset app files_encryption - if ($this->stateFilesEncryption) { - \OC_App::enable('files_encryption'); - } - } + $cached = $this->cache->get('foo.txt'); + $this->assertEquals(3, $cached['size']); - public function testWrite() { - $textSize = strlen("dummy file data\n"); - $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png'); - $this->cache->put('foo.txt', array('mtime' => 100, 'storage_mtime' => 150)); - $rootCachedData = $this->cache->get(''); - $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']); - - $fooCachedData = $this->cache->get('foo.txt'); - Filesystem::file_put_contents('foo.txt', 'asd'); - $cachedData = $this->cache->get('foo.txt'); - $this->assertEquals(3, $cachedData['size']); - $this->assertInternalType('string', $fooCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($fooCachedData['etag'], $cachedData['etag']); - $cachedData = $this->cache->get(''); - $this->assertEquals(2 * $textSize + $imageSize + 3, $cachedData['size']); - $this->assertInternalType('string', $rootCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); - $rootCachedData = $cachedData; + $this->updater->update('/foo.txt'); - $this->assertFalse($this->cache->inCache('bar.txt')); - Filesystem::file_put_contents('bar.txt', 'asd'); - $this->assertTrue($this->cache->inCache('bar.txt')); - $cachedData = $this->cache->get('bar.txt'); - $this->assertEquals(3, $cachedData['size']); - $mtime = $cachedData['mtime']; - $cachedData = $this->cache->get(''); - $this->assertEquals(2 * $textSize + $imageSize + 2 * 3, $cachedData['size']); - $this->assertInternalType('string', $rootCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); - $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $mtime); + $cached = $this->cache->get('foo.txt'); + $this->assertEquals(6, $cached['size']); } - public function testWriteWithMountPoints() { - $storage2 = new \OC\Files\Storage\Temporary(array()); - $storage2->getScanner()->scan(''); //initialize etags - $cache2 = $storage2->getCache(); - Filesystem::mount($storage2, array(), '/' . self::$user . '/files/folder/substorage'); - $folderCachedData = $this->cache->get('folder'); - $substorageCachedData = $cache2->get(''); - Filesystem::file_put_contents('folder/substorage/foo.txt', 'asd'); - $this->assertTrue($cache2->inCache('foo.txt')); - $cachedData = $cache2->get('foo.txt'); - $this->assertEquals(3, $cachedData['size']); - $mtime = $cachedData['mtime']; - - $cachedData = $cache2->get(''); - $this->assertInternalType('string', $substorageCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($substorageCachedData['etag'], $cachedData['etag']); - $this->assertEquals($mtime, $cachedData['mtime']); - - $cachedData = $this->cache->get('folder'); - $this->assertInternalType('string', $folderCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']); - $this->assertEquals($mtime, $cachedData['mtime']); - } + public function testParentSize() { + $this->storage->getScanner()->scan(''); - public function testDelete() { - $textSize = strlen("dummy file data\n"); - $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png'); - $rootCachedData = $this->cache->get(''); - $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']); + $parentCached = $this->cache->get(''); + $this->assertEquals(0, $parentCached['size']); - $this->assertTrue($this->cache->inCache('foo.txt')); - Filesystem::unlink('foo.txt'); - $this->assertFalse($this->cache->inCache('foo.txt')); - $cachedData = $this->cache->get(''); - $this->assertEquals(2 * $textSize + $imageSize, $cachedData['size']); - $this->assertInternalType('string', $rootCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); - $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']); - $rootCachedData = $cachedData; - - Filesystem::mkdir('bar_folder'); - $this->assertTrue($this->cache->inCache('bar_folder')); - $cachedData = $this->cache->get(''); - $this->assertInternalType('string', $rootCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); - $rootCachedData = $cachedData; - Filesystem::rmdir('bar_folder'); - $this->assertFalse($this->cache->inCache('bar_folder')); - $cachedData = $this->cache->get(''); - $this->assertInternalType('string', $rootCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); - $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']); - } + $this->storage->file_put_contents('foo.txt', 'bar'); + + $parentCached = $this->cache->get(''); + $this->assertEquals(0, $parentCached['size']); + + $this->updater->update('foo.txt'); - public function testDeleteWithMountPoints() { - $storage2 = new \OC\Files\Storage\Temporary(array()); - $cache2 = $storage2->getCache(); - Filesystem::mount($storage2, array(), '/' . self::$user . '/files/folder/substorage'); - Filesystem::file_put_contents('folder/substorage/foo.txt', 'asd'); - $this->assertTrue($cache2->inCache('foo.txt')); - $folderCachedData = $this->cache->get('folder'); - $substorageCachedData = $cache2->get(''); - Filesystem::unlink('folder/substorage/foo.txt'); - $this->assertFalse($cache2->inCache('foo.txt')); - - $cachedData = $cache2->get(''); - $this->assertInternalType('string', $substorageCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($substorageCachedData['etag'], $cachedData['etag']); - $this->assertGreaterThanOrEqual($substorageCachedData['mtime'], $cachedData['mtime']); - - $cachedData = $this->cache->get('folder'); - $this->assertInternalType('string', $folderCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']); - $this->assertGreaterThanOrEqual($folderCachedData['mtime'], $cachedData['mtime']); + $parentCached = $this->cache->get(''); + $this->assertEquals(3, $parentCached['size']); + + $this->storage->file_put_contents('foo.txt', 'qwerty'); + + $parentCached = $this->cache->get(''); + $this->assertEquals(3, $parentCached['size']); + + $this->updater->update('foo.txt'); + + $parentCached = $this->cache->get(''); + $this->assertEquals(6, $parentCached['size']); + + $this->storage->unlink('foo.txt'); + + $parentCached = $this->cache->get(''); + $this->assertEquals(6, $parentCached['size']); + + $this->updater->remove('foo.txt'); + + $parentCached = $this->cache->get(''); + $this->assertEquals(0, $parentCached['size']); } - public function testRename() { - $textSize = strlen("dummy file data\n"); - $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png'); - $rootCachedData = $this->cache->get(''); - $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']); + public function testMove() { + $this->storage->file_put_contents('foo.txt', 'qwerty'); + $this->updater->update('foo.txt'); $this->assertTrue($this->cache->inCache('foo.txt')); - $fooCachedData = $this->cache->get('foo.txt'); $this->assertFalse($this->cache->inCache('bar.txt')); - Filesystem::rename('foo.txt', 'bar.txt'); - $this->assertFalse($this->cache->inCache('foo.txt')); - $this->assertTrue($this->cache->inCache('bar.txt')); - $cachedData = $this->cache->get('bar.txt'); - $this->assertEquals($fooCachedData['fileid'], $cachedData['fileid']); - $mtime = $cachedData['mtime']; - $cachedData = $this->cache->get(''); - $this->assertEquals(3 * $textSize + $imageSize, $cachedData['size']); - $this->assertInternalType('string', $rootCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); - } + $cached = $this->cache->get('foo.txt'); - public function testRenameExtension() { - $fooCachedData = $this->cache->get('foo.txt'); - $this->assertEquals('text/plain', $fooCachedData['mimetype']); - Filesystem::rename('foo.txt', 'foo.abcd'); - $fooCachedData = $this->cache->get('foo.abcd'); - $this->assertEquals('application/octet-stream', $fooCachedData['mimetype']); - } + $this->storage->rename('foo.txt', 'bar.txt'); - public function testRenameWithMountPoints() { - $storage2 = new \OC\Files\Storage\Temporary(array()); - $cache2 = $storage2->getCache(); - Filesystem::mount($storage2, array(), '/' . self::$user . '/files/folder/substorage'); - Filesystem::file_put_contents('folder/substorage/foo.txt', 'asd'); - $this->assertTrue($cache2->inCache('foo.txt')); - $folderCachedData = $this->cache->get('folder'); - $substorageCachedData = $cache2->get(''); - $fooCachedData = $cache2->get('foo.txt'); - Filesystem::rename('folder/substorage/foo.txt', 'folder/substorage/bar.txt'); - $this->assertFalse($cache2->inCache('foo.txt')); - $this->assertTrue($cache2->inCache('bar.txt')); - $cachedData = $cache2->get('bar.txt'); - $this->assertEquals($fooCachedData['fileid'], $cachedData['fileid']); - $mtime = $cachedData['mtime']; - - $cachedData = $cache2->get(''); - $this->assertInternalType('string', $substorageCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($substorageCachedData['etag'], $cachedData['etag']); - // rename can cause mtime change - invalid assert -// $this->assertEquals($mtime, $cachedData['mtime']); - - $cachedData = $this->cache->get('folder'); - $this->assertInternalType('string', $folderCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']); - // rename can cause mtime change - invalid assert -// $this->assertEquals($mtime, $cachedData['mtime']); - } + $this->assertTrue($this->cache->inCache('foo.txt')); + $this->assertFalse($this->cache->inCache('bar.txt')); - public function testTouch() { - $rootCachedData = $this->cache->get(''); - $fooCachedData = $this->cache->get('foo.txt'); - Filesystem::touch('foo.txt'); - $cachedData = $this->cache->get('foo.txt'); - $this->assertInternalType('string', $fooCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($fooCachedData['etag'], $cachedData['etag']); - $this->assertGreaterThanOrEqual($fooCachedData['mtime'], $cachedData['mtime']); - - $cachedData = $this->cache->get(''); - $this->assertInternalType('string', $rootCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); - $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']); - $rootCachedData = $cachedData; - - $time = 1371006070; - $barCachedData = $this->cache->get('folder/bar.txt'); - $folderCachedData = $this->cache->get('folder'); - Filesystem::touch('folder/bar.txt', $time); - $cachedData = $this->cache->get('folder/bar.txt'); - $this->assertInternalType('string', $barCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($barCachedData['etag'], $cachedData['etag']); - $this->assertEquals($time, $cachedData['mtime']); - - $cachedData = $this->cache->get('folder'); - $this->assertInternalType('string', $folderCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']); - - $cachedData = $this->cache->get(''); - $this->assertInternalType('string', $rootCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); - $this->assertEquals($time, $cachedData['mtime']); - } + $this->updater->rename('foo.txt', 'bar.txt'); - public function testTouchWithMountPoints() { - $storage2 = new \OC\Files\Storage\Temporary(array()); - $cache2 = $storage2->getCache(); - Filesystem::mount($storage2, array(), '/' . self::$user . '/files/folder/substorage'); - Filesystem::file_put_contents('folder/substorage/foo.txt', 'asd'); - $this->assertTrue($cache2->inCache('foo.txt')); - $folderCachedData = $this->cache->get('folder'); - $substorageCachedData = $cache2->get(''); - $fooCachedData = $cache2->get('foo.txt'); - $cachedData = $cache2->get('foo.txt'); - $time = 1371006070; - Filesystem::touch('folder/substorage/foo.txt', $time); - $cachedData = $cache2->get('foo.txt'); - $this->assertInternalType('string', $fooCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($fooCachedData['etag'], $cachedData['etag']); - $this->assertEquals($time, $cachedData['mtime']); - - $cachedData = $cache2->get(''); - $this->assertInternalType('string', $substorageCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($substorageCachedData['etag'], $cachedData['etag']); - - $cachedData = $this->cache->get('folder'); - $this->assertInternalType('string', $folderCachedData['etag']); - $this->assertInternalType('string', $cachedData['etag']); - $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']); - $this->assertEquals($time, $cachedData['mtime']); - } + $this->assertFalse($this->cache->inCache('foo.txt')); + $this->assertTrue($this->cache->inCache('bar.txt')); + $cachedTarget = $this->cache->get('bar.txt'); + $this->assertEquals($cached['etag'], $cachedTarget['etag']); + $this->assertEquals($cached['mtime'], $cachedTarget['mtime']); + $this->assertEquals($cached['size'], $cachedTarget['size']); + $this->assertEquals($cached['fileid'], $cachedTarget['fileid']); + } } diff --git a/tests/lib/files/cache/updaterlegacy.php b/tests/lib/files/cache/updaterlegacy.php new file mode 100644 index 00000000000..c80c3168ad6 --- /dev/null +++ b/tests/lib/files/cache/updaterlegacy.php @@ -0,0 +1,328 @@ +<?php +/** + * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\Files\Cache; + +use \OC\Files\Filesystem as Filesystem; +use OC\Files\Storage\Temporary; + +class UpdaterLegacy extends \PHPUnit_Framework_TestCase { + /** + * @var \OC\Files\Storage\Storage $storage + */ + private $storage; + + /** + * @var \OC\Files\Cache\Scanner $scanner + */ + private $scanner; + + private $stateFilesEncryption; + + /** + * @var \OC\Files\Cache\Cache $cache + */ + private $cache; + + private static $user; + + public function setUp() { + + // remember files_encryption state + $this->stateFilesEncryption = \OC_App::isEnabled('files_encryption'); + // we want to tests with the encryption app disabled + \OC_App::disable('files_encryption'); + + $this->storage = new \OC\Files\Storage\Temporary(array()); + $textData = "dummy file data\n"; + $imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png'); + $this->storage->mkdir('folder'); + $this->storage->file_put_contents('foo.txt', $textData); + $this->storage->file_put_contents('foo.png', $imgData); + $this->storage->file_put_contents('folder/bar.txt', $textData); + $this->storage->file_put_contents('folder/bar2.txt', $textData); + + $this->scanner = $this->storage->getScanner(); + $this->scanner->scan(''); + $this->cache = $this->storage->getCache(); + + \OC\Files\Filesystem::tearDown(); + if (!self::$user) { + self::$user = uniqid(); + } + + \OC_User::createUser(self::$user, 'password'); + \OC_User::setUserId(self::$user); + + \OC\Files\Filesystem::init(self::$user, '/' . self::$user . '/files'); + + Filesystem::clearMounts(); + Filesystem::mount($this->storage, array(), '/' . self::$user . '/files'); + + \OC_Hook::clear('OC_Filesystem'); + } + + public function tearDown() { + if ($this->cache) { + $this->cache->clear(); + } + $result = \OC_User::deleteUser(self::$user); + $this->assertTrue($result); + Filesystem::tearDown(); + // reset app files_encryption + if ($this->stateFilesEncryption) { + \OC_App::enable('files_encryption'); + } + } + + public function testWrite() { + $textSize = strlen("dummy file data\n"); + $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png'); + $this->cache->put('foo.txt', array('mtime' => 100, 'storage_mtime' => 150)); + $rootCachedData = $this->cache->get(''); + $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']); + + $fooCachedData = $this->cache->get('foo.txt'); + Filesystem::file_put_contents('foo.txt', 'asd'); + $cachedData = $this->cache->get('foo.txt'); + $this->assertEquals(3, $cachedData['size']); + $this->assertInternalType('string', $fooCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($fooCachedData['etag'], $cachedData['etag']); + $cachedData = $this->cache->get(''); + $this->assertEquals(2 * $textSize + $imageSize + 3, $cachedData['size']); + $this->assertInternalType('string', $rootCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); + $rootCachedData = $cachedData; + + $this->assertFalse($this->cache->inCache('bar.txt')); + Filesystem::file_put_contents('bar.txt', 'asd'); + $this->assertTrue($this->cache->inCache('bar.txt')); + $cachedData = $this->cache->get('bar.txt'); + $this->assertEquals(3, $cachedData['size']); + $mtime = $cachedData['mtime']; + $cachedData = $this->cache->get(''); + $this->assertEquals(2 * $textSize + $imageSize + 2 * 3, $cachedData['size']); + $this->assertInternalType('string', $rootCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); + $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $mtime); + } + + public function testWriteWithMountPoints() { + $storage2 = new \OC\Files\Storage\Temporary(array()); + $storage2->getScanner()->scan(''); //initialize etags + $cache2 = $storage2->getCache(); + Filesystem::mount($storage2, array(), '/' . self::$user . '/files/folder/substorage'); + $folderCachedData = $this->cache->get('folder'); + $substorageCachedData = $cache2->get(''); + Filesystem::file_put_contents('folder/substorage/foo.txt', 'asd'); + $this->assertTrue($cache2->inCache('foo.txt')); + $cachedData = $cache2->get('foo.txt'); + $this->assertEquals(3, $cachedData['size']); + $mtime = $cachedData['mtime']; + + $cachedData = $cache2->get(''); + $this->assertInternalType('string', $substorageCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($substorageCachedData['etag'], $cachedData['etag']); + + $cachedData = $this->cache->get('folder'); + $this->assertInternalType('string', $folderCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']); + } + + public function testDelete() { + $textSize = strlen("dummy file data\n"); + $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png'); + $rootCachedData = $this->cache->get(''); + $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']); + + $this->assertTrue($this->cache->inCache('foo.txt')); + Filesystem::unlink('foo.txt'); + $this->assertFalse($this->cache->inCache('foo.txt')); + $cachedData = $this->cache->get(''); + $this->assertEquals(2 * $textSize + $imageSize, $cachedData['size']); + $this->assertInternalType('string', $rootCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); + $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']); + $rootCachedData = $cachedData; + + Filesystem::mkdir('bar_folder'); + $this->assertTrue($this->cache->inCache('bar_folder')); + $cachedData = $this->cache->get(''); + $this->assertInternalType('string', $rootCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); + $rootCachedData = $cachedData; + Filesystem::rmdir('bar_folder'); + $this->assertFalse($this->cache->inCache('bar_folder')); + $cachedData = $this->cache->get(''); + $this->assertInternalType('string', $rootCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); + $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']); + } + + public function testDeleteWithMountPoints() { + $storage2 = new \OC\Files\Storage\Temporary(array()); + $cache2 = $storage2->getCache(); + Filesystem::mount($storage2, array(), '/' . self::$user . '/files/folder/substorage'); + Filesystem::file_put_contents('folder/substorage/foo.txt', 'asd'); + $this->assertTrue($cache2->inCache('foo.txt')); + $folderCachedData = $this->cache->get('folder'); + $substorageCachedData = $cache2->get(''); + Filesystem::unlink('folder/substorage/foo.txt'); + $this->assertFalse($cache2->inCache('foo.txt')); + + $cachedData = $cache2->get(''); + $this->assertInternalType('string', $substorageCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($substorageCachedData['etag'], $cachedData['etag']); + $this->assertGreaterThanOrEqual($substorageCachedData['mtime'], $cachedData['mtime']); + + $cachedData = $this->cache->get('folder'); + $this->assertInternalType('string', $folderCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']); + $this->assertGreaterThanOrEqual($folderCachedData['mtime'], $cachedData['mtime']); + } + + public function testRename() { + $textSize = strlen("dummy file data\n"); + $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png'); + $rootCachedData = $this->cache->get(''); + $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']); + + $this->assertTrue($this->cache->inCache('foo.txt')); + $fooCachedData = $this->cache->get('foo.txt'); + $this->assertFalse($this->cache->inCache('bar.txt')); + Filesystem::rename('foo.txt', 'bar.txt'); + $this->assertFalse($this->cache->inCache('foo.txt')); + $this->assertTrue($this->cache->inCache('bar.txt')); + $cachedData = $this->cache->get('bar.txt'); + $this->assertEquals($fooCachedData['fileid'], $cachedData['fileid']); + $mtime = $cachedData['mtime']; + $cachedData = $this->cache->get(''); + $this->assertEquals(3 * $textSize + $imageSize, $cachedData['size']); + $this->assertInternalType('string', $rootCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); + } + + public function testRenameExtension() { + $fooCachedData = $this->cache->get('foo.txt'); + $this->assertEquals('text/plain', $fooCachedData['mimetype']); + Filesystem::rename('foo.txt', 'foo.abcd'); + $fooCachedData = $this->cache->get('foo.abcd'); + $this->assertEquals('application/octet-stream', $fooCachedData['mimetype']); + } + + public function testRenameWithMountPoints() { + $storage2 = new \OC\Files\Storage\Temporary(array()); + $cache2 = $storage2->getCache(); + Filesystem::mount($storage2, array(), '/' . self::$user . '/files/folder/substorage'); + Filesystem::file_put_contents('folder/substorage/foo.txt', 'asd'); + $this->assertTrue($cache2->inCache('foo.txt')); + $folderCachedData = $this->cache->get('folder'); + $substorageCachedData = $cache2->get(''); + $fooCachedData = $cache2->get('foo.txt'); + Filesystem::rename('folder/substorage/foo.txt', 'folder/substorage/bar.txt'); + $this->assertFalse($cache2->inCache('foo.txt')); + $this->assertTrue($cache2->inCache('bar.txt')); + $cachedData = $cache2->get('bar.txt'); + $this->assertEquals($fooCachedData['fileid'], $cachedData['fileid']); + $mtime = $cachedData['mtime']; + + $cachedData = $cache2->get(''); + $this->assertInternalType('string', $substorageCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($substorageCachedData['etag'], $cachedData['etag']); + // rename can cause mtime change - invalid assert +// $this->assertEquals($mtime, $cachedData['mtime']); + + $cachedData = $this->cache->get('folder'); + $this->assertInternalType('string', $folderCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']); + // rename can cause mtime change - invalid assert +// $this->assertEquals($mtime, $cachedData['mtime']); + } + + public function testTouch() { + $rootCachedData = $this->cache->get(''); + $fooCachedData = $this->cache->get('foo.txt'); + Filesystem::touch('foo.txt'); + $cachedData = $this->cache->get('foo.txt'); + $this->assertInternalType('string', $fooCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertGreaterThanOrEqual($fooCachedData['mtime'], $cachedData['mtime']); + + $cachedData = $this->cache->get(''); + $this->assertInternalType('string', $rootCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); + $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']); + $rootCachedData = $cachedData; + + $time = 1371006070; + $barCachedData = $this->cache->get('folder/bar.txt'); + $folderCachedData = $this->cache->get('folder'); + Filesystem::touch('folder/bar.txt', $time); + $cachedData = $this->cache->get('folder/bar.txt'); + $this->assertInternalType('string', $barCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($barCachedData['etag'], $cachedData['etag']); + $this->assertEquals($time, $cachedData['mtime']); + + $cachedData = $this->cache->get('folder'); + $this->assertInternalType('string', $folderCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']); + + $cachedData = $this->cache->get(''); + $this->assertInternalType('string', $rootCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']); + $this->assertEquals($time, $cachedData['mtime']); + } + + public function testTouchWithMountPoints() { + $storage2 = new \OC\Files\Storage\Temporary(array()); + $cache2 = $storage2->getCache(); + Filesystem::mount($storage2, array(), '/' . self::$user . '/files/folder/substorage'); + Filesystem::file_put_contents('folder/substorage/foo.txt', 'asd'); + $this->assertTrue($cache2->inCache('foo.txt')); + $folderCachedData = $this->cache->get('folder'); + $substorageCachedData = $cache2->get(''); + $fooCachedData = $cache2->get('foo.txt'); + $cachedData = $cache2->get('foo.txt'); + $time = 1371006070; + Filesystem::touch('folder/substorage/foo.txt', $time); + $cachedData = $cache2->get('foo.txt'); + $this->assertInternalType('string', $fooCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($fooCachedData['etag'], $cachedData['etag']); + $this->assertEquals($time, $cachedData['mtime']); + + $cachedData = $cache2->get(''); + $this->assertInternalType('string', $substorageCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($substorageCachedData['etag'], $cachedData['etag']); + + $cachedData = $this->cache->get('folder'); + $this->assertInternalType('string', $folderCachedData['etag']); + $this->assertInternalType('string', $cachedData['etag']); + $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']); + $this->assertEquals($time, $cachedData['mtime']); + } + +} diff --git a/tests/lib/files/objectstore/swift.php b/tests/lib/files/objectstore/swift.php index 900367553d7..37d6cc74de6 100644 --- a/tests/lib/files/objectstore/swift.php +++ b/tests/lib/files/objectstore/swift.php @@ -111,4 +111,87 @@ class Swift extends \Test\Files\Storage\Storage { } } + /** + * @dataProvider copyAndMoveProvider + */ + public function testMove($source, $target) { + $this->initSourceAndTarget($source); + $sourceId = $this->instance->getCache()->getId(ltrim('/',$source)); + $this->assertNotEquals(-1, $sourceId); + + $this->instance->rename($source, $target); + + $this->assertTrue($this->instance->file_exists($target), $target.' was not created'); + $this->assertFalse($this->instance->file_exists($source), $source.' still exists'); + $this->assertSameAsLorem($target); + + $targetId = $this->instance->getCache()->getId(ltrim('/',$target)); + $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break'); + } + + public function testRenameDirectory() { + $this->instance->mkdir('source'); + $this->instance->file_put_contents('source/test1.txt', 'foo'); + $this->instance->file_put_contents('source/test2.txt', 'qwerty'); + $this->instance->mkdir('source/subfolder'); + $this->instance->file_put_contents('source/subfolder/test.txt', 'bar'); + $sourceId = $this->instance->getCache()->getId('source'); + $this->assertNotEquals(-1, $sourceId); + $this->instance->rename('source', 'target'); + + $this->assertFalse($this->instance->file_exists('source')); + $this->assertFalse($this->instance->file_exists('source/test1.txt')); + $this->assertFalse($this->instance->file_exists('source/test2.txt')); + $this->assertFalse($this->instance->file_exists('source/subfolder')); + $this->assertFalse($this->instance->file_exists('source/subfolder/test.txt')); + + $this->assertTrue($this->instance->file_exists('target')); + $this->assertTrue($this->instance->file_exists('target/test1.txt')); + $this->assertTrue($this->instance->file_exists('target/test2.txt')); + $this->assertTrue($this->instance->file_exists('target/subfolder')); + $this->assertTrue($this->instance->file_exists('target/subfolder/test.txt')); + + $this->assertEquals('foo', $this->instance->file_get_contents('target/test1.txt')); + $this->assertEquals('qwerty', $this->instance->file_get_contents('target/test2.txt')); + $this->assertEquals('bar', $this->instance->file_get_contents('target/subfolder/test.txt')); + $targetId = $this->instance->getCache()->getId('target'); + $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break'); + } + + public function testRenameOverWriteDirectory() { + $this->instance->mkdir('source'); + $this->instance->file_put_contents('source/test1.txt', 'foo'); + $sourceId = $this->instance->getCache()->getId('source'); + $this->assertNotEquals(-1, $sourceId); + + $this->instance->mkdir('target'); + $this->instance->file_put_contents('target/test1.txt', 'bar'); + $this->instance->file_put_contents('target/test2.txt', 'bar'); + + $this->instance->rename('source', 'target'); + + $this->assertFalse($this->instance->file_exists('source')); + $this->assertFalse($this->instance->file_exists('source/test1.txt')); + $this->assertFalse($this->instance->file_exists('target/test2.txt')); + $this->assertEquals('foo', $this->instance->file_get_contents('target/test1.txt')); + $targetId = $this->instance->getCache()->getId('target'); + $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break'); + } + + public function testRenameOverWriteDirectoryOverFile() { + $this->instance->mkdir('source'); + $this->instance->file_put_contents('source/test1.txt', 'foo'); + $sourceId = $this->instance->getCache()->getId('source'); + $this->assertNotEquals(-1, $sourceId); + + $this->instance->file_put_contents('target', 'bar'); + + $this->instance->rename('source', 'target'); + + $this->assertFalse($this->instance->file_exists('source')); + $this->assertFalse($this->instance->file_exists('source/test1.txt')); + $this->assertEquals('foo', $this->instance->file_get_contents('target/test1.txt')); + $targetId = $this->instance->getCache()->getId('target'); + $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break'); + } } diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index a0f4d97d5b4..522535946a5 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -382,7 +382,7 @@ class View extends \PHPUnit_Framework_TestCase { $rootView->putFileInfo('foo.txt', array('storage_mtime' => 1000)); //make sure the watcher detects the change $rootView->file_put_contents('foo.txt', 'asd'); $cachedData = $rootView->getFileInfo('foo.txt'); - $this->assertGreaterThanOrEqual($cachedData['mtime'], $oldCachedData['mtime']); + $this->assertGreaterThanOrEqual($oldCachedData['mtime'], $cachedData['mtime']); $this->assertEquals($cachedData['storage_mtime'], $cachedData['mtime']); } diff --git a/tests/lib/helper.php b/tests/lib/helper.php index 20b8571b91d..cb342e295ba 100644 --- a/tests/lib/helper.php +++ b/tests/lib/helper.php @@ -443,15 +443,33 @@ class Test_Helper extends PHPUnit_Framework_TestCase { public function testLinkToPublic() { \OC::$WEBROOT = ''; $result = \OC_Helper::linkToPublic('files'); - $this->assertEquals('http://localhost/public.php?service=files', $result); + $this->assertEquals('http://localhost/s', $result); $result = \OC_Helper::linkToPublic('files', false); - $this->assertEquals('http://localhost/public.php?service=files', $result); + $this->assertEquals('http://localhost/s', $result); + $result = \OC_Helper::linkToPublic('files', true); + $this->assertEquals('http://localhost/s/', $result); + + $result = \OC_Helper::linkToPublic('other'); + $this->assertEquals('http://localhost/public.php?service=other', $result); + $result = \OC_Helper::linkToPublic('other', false); + $this->assertEquals('http://localhost/public.php?service=other', $result); + $result = \OC_Helper::linkToPublic('other', true); + $this->assertEquals('http://localhost/public.php?service=other/', $result); \OC::$WEBROOT = '/owncloud'; $result = \OC_Helper::linkToPublic('files'); - $this->assertEquals('http://localhost/owncloud/public.php?service=files', $result); + $this->assertEquals('http://localhost/owncloud/s', $result); $result = \OC_Helper::linkToPublic('files', false); - $this->assertEquals('http://localhost/owncloud/public.php?service=files', $result); + $this->assertEquals('http://localhost/owncloud/s', $result); + $result = \OC_Helper::linkToPublic('files', true); + $this->assertEquals('http://localhost/owncloud/s/', $result); + + $result = \OC_Helper::linkToPublic('other'); + $this->assertEquals('http://localhost/owncloud/public.php?service=other', $result); + $result = \OC_Helper::linkToPublic('other', false); + $this->assertEquals('http://localhost/owncloud/public.php?service=other', $result); + $result = \OC_Helper::linkToPublic('other', true); + $this->assertEquals('http://localhost/owncloud/public.php?service=other/', $result); } /** diff --git a/tests/lib/security/crypto.php b/tests/lib/security/crypto.php new file mode 100644 index 00000000000..0f89253839e --- /dev/null +++ b/tests/lib/security/crypto.php @@ -0,0 +1,70 @@ +<?php +/** + * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +use \OC\Security\Crypto; + +class CryptoTest extends \PHPUnit_Framework_TestCase { + + public function defaultEncryptionProvider() + { + return array( + array('Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.'), + array(''), + array('我看这本书。 我看這本書') + ); + } + + /** @var Crypto */ + protected $crypto; + + protected function setUp() { + $this->crypto = new Crypto(\OC::$server->getConfig(), \OC::$server->getSecureRandom()); + } + + /** + * @dataProvider defaultEncryptionProvider + */ + function testDefaultEncrypt($stringToEncrypt) { + $ciphertext = $this->crypto->encrypt($stringToEncrypt); + $this->assertEquals($stringToEncrypt, $this->crypto->decrypt($ciphertext)); + } + + /** + * @expectedException \Exception + * @expectedExceptionMessage HMAC does not match. + */ + function testWrongPassword() { + $stringToEncrypt = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.'; + $ciphertext = $this->crypto->encrypt($stringToEncrypt); + $this->crypto->decrypt($ciphertext, 'A wrong password!'); + } + + function testLaterDecryption() { + $stringToEncrypt = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.'; + $encryptedString = '44a35023cca2e7a6125e06c29fc4b2ad9d8a33d0873a8b45b0de4ef9284f260c6c46bf25dc62120644c59b8bafe4281ddc47a70c35ae6c29ef7a63d79eefacc297e60b13042ac582733598d0a6b4de37311556bb5c480fd2633de4e6ebafa868c2d1e2d80a5d24f9660360dba4d6e0c8|lhrFgK0zd9U160Wo|a75e57ab701f9124e1113543fd1dc596f21e20d456a0d1e813d5a8aaec9adcb11213788e96598b67fe9486a9f0b99642c18296d0175db44b1ae426e4e91080ee'; + $this->assertEquals($stringToEncrypt, $this->crypto->decrypt($encryptedString, 'ThisIsAVeryS3cur3P4ssw0rd')); + } + + /** + * @expectedException \Exception + * @expectedExceptionMessage HMAC does not match. + */ + function testWrongIV() { + $encryptedString = '560f5436ba864b9f12f7f7ca6d41c327554a6f2c0a160a03316b202af07c65163274993f3a46e7547c07ba89304f00594a2f3bd99f83859097c58049c39d0d4ade10e0de914ff0604961e7c849d0271ed6c0b23f984ba16e7d033e3305fb0910e7b6a2a65c988d17dbee71d8f953684d|d2kdFUspVjC0o0sr|1a5feacf87eaa6869a6abdfba9a296e7bbad45b6ad89f7dce67cdc98e2da5dc4379cc672cc655e52bbf19599bf59482fbea13a73937697fa656bf10f3fc4f1aa'; + $this->crypto->decrypt($encryptedString, 'ThisIsAVeryS3cur3P4ssw0rd'); + } + + /** + * @expectedException \Exception + * @expectedExceptionMessage Authenticated ciphertext could not be decoded. + */ + function testWrongParameters() { + $encryptedString = '1|2'; + $this->crypto->decrypt($encryptedString, 'ThisIsAVeryS3cur3P4ssw0rd'); + } +} diff --git a/tests/lib/security/securerandom.php b/tests/lib/security/securerandom.php new file mode 100644 index 00000000000..2920077fa1d --- /dev/null +++ b/tests/lib/security/securerandom.php @@ -0,0 +1,76 @@ +<?php +/** + * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +use \OC\Security\SecureRandom; + +class SecureRandomTest extends \PHPUnit_Framework_TestCase { + + public function stringGenerationProvider() { + return array( + array(0, 0), + array(1, 1), + array(128, 128), + array(256, 256), + array(1024, 1024), + array(2048, 2048), + array(64000, 64000), + ); + } + + public static function charCombinations() { + return array( + array('CHAR_LOWER', '[a-z]'), + array('CHAR_UPPER', '[A-Z]'), + array('CHAR_DIGITS', '[0-9]'), + ); + } + + /** @var SecureRandom */ + protected $rng; + + protected function setUp() { + $this->rng = new \OC\Security\SecureRandom(); + } + + /** + * @dataProvider stringGenerationProvider + */ + function testGetLowStrengthGeneratorLength($length, $expectedLength) { + $generator = $this->rng->getLowStrengthGenerator(); + + $this->assertEquals($expectedLength, strlen($generator->generate($length))); + } + + /** + * @dataProvider stringGenerationProvider + */ + function testMediumLowStrengthGeneratorLength($length, $expectedLength) { + $generator = $this->rng->getMediumStrengthGenerator(); + + $this->assertEquals($expectedLength, strlen($generator->generate($length))); + } + + /** + * @expectedException \Exception + * @expectedExceptionMessage Generator is not initialized + */ + function testUninitializedGenerate() { + $this->rng->generate(30); + } + + /** + * @dataProvider charCombinations + */ + public function testScheme($charName, $chars) { + $generator = $this->rng->getMediumStrengthGenerator(); + $scheme = constant('OCP\Security\ISecureRandom::' . $charName); + $randomString = $generator->generate(100, $scheme); + $matchesRegex = preg_match('/^'.$chars.'+$/', $randomString); + $this->assertSame(1, $matchesRegex); + } +} diff --git a/tests/lib/security/stringutils.php b/tests/lib/security/stringutils.php new file mode 100644 index 00000000000..039f3d3756a --- /dev/null +++ b/tests/lib/security/stringutils.php @@ -0,0 +1,38 @@ +<?php +/** + * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +use \OC\Security\StringUtils; + +class StringUtilsTest extends \PHPUnit_Framework_TestCase { + + public function dataProvider() + { + return array( + array('Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.', 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.'), + array('', ''), + array('我看这本书。 我看這本書', '我看这本书。 我看這本書'), + array('GpKY9fSnWNJbES99zVGvA', 'GpKY9fSnWNJbES99zVGvA') + ); + } + + /** + * @dataProvider dataProvider + */ + function testWrongEquals($string) { + $this->assertFalse(StringUtils::equals($string, 'A Completely Wrong String')); + $this->assertFalse(StringUtils::equals($string, null)); + } + + /** + * @dataProvider dataProvider + */ + function testTrueEquals($string, $expected) { + $this->assertTrue(StringUtils::equals($string, $expected)); + } + +} diff --git a/tests/lib/util.php b/tests/lib/util.php index c2bb99c3b2e..a2efcca2603 100644 --- a/tests/lib/util.php +++ b/tests/lib/util.php @@ -303,6 +303,8 @@ class Test_Util extends PHPUnit_Framework_TestCase { \OC::$WEBROOT = ''; Dummy_OC_App::setEnabledApps($enabledApps); + // need to set a user id to make sure enabled apps are read from cache + \OC_User::setUserId(uniqid()); \OCP\Config::setSystemValue('defaultapp', $defaultAppConfig); $this->assertEquals('http://localhost/' . $expectedPath, \OC_Util::getDefaultPageUrl()); @@ -310,6 +312,7 @@ class Test_Util extends PHPUnit_Framework_TestCase { \OC::$WEBROOT = $oldWebRoot; Dummy_OC_App::restore(); \OCP\Config::setSystemValue('defaultapp', $oldDefaultApps); + \OC_User::setUserId(null); } function defaultAppsProvider() { @@ -341,6 +344,25 @@ class Test_Util extends PHPUnit_Framework_TestCase { ); } + /** + * Test needUpgrade() when the core version is increased + */ + public function testNeedUpgradeCore() { + $oldConfigVersion = OC_Config::getValue('version', '0.0.0'); + $oldSessionVersion = \OC::$server->getSession()->get('OC_Version'); + + $this->assertFalse(\OCP\Util::needUpgrade()); + + OC_Config::setValue('version', '7.0.0.0'); + \OC::$server->getSession()->set('OC_Version', array(7, 0, 0, 1)); + + $this->assertTrue(\OCP\Util::needUpgrade()); + + OC_Config::setValue('version', $oldConfigVersion); + $oldSessionVersion = \OC::$server->getSession()->set('OC_Version', $oldSessionVersion); + + $this->assertFalse(\OCP\Util::needUpgrade()); + } } /** diff --git a/version.php b/version.php index 24429434116..4421a06bea0 100644 --- a/version.php +++ b/version.php @@ -3,7 +3,7 @@ // We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel // when updating major/minor version number. -$OC_Version=array(7, 8, 0, 0); +$OC_Version=array(7, 8, 1, 0); // The human readable string $OC_VersionString='8.0 pre alpha'; |