summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2013-09-16 10:40:06 +0200
committerBjoern Schiessle <schiessle@owncloud.com>2013-09-16 10:40:06 +0200
commit534d93d2d3d549039db2661cdc4b9e939a0abe0d (patch)
tree7868026ba14b6558c8e50b601a9a5fa85fdc585b /core
parentf8563ec5831713b341db1b2cd480328912818607 (diff)
parent46f59b165e5bd1908509e8a62b67bf983cfd6224 (diff)
downloadnextcloud-server-534d93d2d3d549039db2661cdc4b9e939a0abe0d.tar.gz
nextcloud-server-534d93d2d3d549039db2661cdc4b9e939a0abe0d.zip
Merge branch 'master' into sharing_mail_notification_master
Conflicts: apps/files/index.php
Diffstat (limited to 'core')
-rw-r--r--core/avatar/controller.php158
-rw-r--r--core/css/apps.css4
-rw-r--r--core/css/styles.css20
-rw-r--r--core/js/avatar.js9
-rw-r--r--core/js/jquery.avatar.js83
-rw-r--r--core/js/jquery.ocdialog.js16
-rw-r--r--core/js/js.js32
-rw-r--r--core/js/oc-dialogs.js41
-rw-r--r--core/js/share.js6
-rw-r--r--core/l10n/ach.php8
-rw-r--r--core/l10n/es_AR.php17
-rw-r--r--core/l10n/es_MX.php8
-rw-r--r--core/l10n/km.php8
-rw-r--r--core/l10n/ku_IQ.php1
-rw-r--r--core/l10n/lt_LT.php14
-rw-r--r--core/l10n/nn_NO.php24
-rw-r--r--core/l10n/nqo.php8
-rw-r--r--core/l10n/pt_BR.php14
-rw-r--r--core/l10n/pt_PT.php15
-rw-r--r--core/l10n/sq.php22
-rw-r--r--core/lostpassword/controller.php43
-rw-r--r--core/routes.php26
-rw-r--r--core/templates/layout.user.php3
23 files changed, 507 insertions, 73 deletions
diff --git a/core/avatar/controller.php b/core/avatar/controller.php
new file mode 100644
index 00000000000..9f7c0517c4a
--- /dev/null
+++ b/core/avatar/controller.php
@@ -0,0 +1,158 @@
+<?php
+/**
+ * Copyright (c) 2013 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\Avatar;
+
+class Controller {
+ public static function getAvatar($args) {
+ \OC_JSON::checkLoggedIn();
+ \OC_JSON::callCheck();
+
+ $user = stripslashes($args['user']);
+ $size = (int)$args['size'];
+ if ($size > 2048) {
+ $size = 2048;
+ }
+ // Undefined size
+ elseif ($size === 0) {
+ $size = 64;
+ }
+
+ $avatar = new \OC_Avatar($user);
+ $image = $avatar->get($size);
+
+ \OC_Response::disableCaching();
+ \OC_Response::setLastModifiedHeader(time());
+ if ($image instanceof \OC_Image) {
+ \OC_Response::setETagHeader(crc32($image->data()));
+ $image->show();
+ } else {
+ // Signalizes $.avatar() to display a defaultavatar
+ \OC_JSON::success();
+ }
+ }
+
+ public static function postAvatar($args) {
+ \OC_JSON::checkLoggedIn();
+ \OC_JSON::callCheck();
+
+ $user = \OC_User::getUser();
+
+ if (isset($_POST['path'])) {
+ $path = stripslashes($_POST['path']);
+ $view = new \OC\Files\View('/'.$user.'/files');
+ $newAvatar = $view->file_get_contents($path);
+ } elseif (!empty($_FILES)) {
+ $files = $_FILES['files'];
+ if (
+ $files['error'][0] === 0 &&
+ is_uploaded_file($files['tmp_name'][0]) &&
+ !\OC\Files\Filesystem::isFileBlacklisted($files['tmp_name'][0])
+ ) {
+ $newAvatar = file_get_contents($files['tmp_name'][0]);
+ unlink($files['tmp_name'][0]);
+ }
+ } else {
+ $l = new \OC_L10n('core');
+ \OC_JSON::error(array("data" => array("message" => $l->t("No image or file provided")) ));
+ return;
+ }
+
+ try {
+ $avatar = new \OC_Avatar($user);
+ $avatar->set($newAvatar);
+ \OC_JSON::success();
+ } catch (\OC\NotSquareException $e) {
+ $image = new \OC_Image($newAvatar);
+
+ if ($image->valid()) {
+ \OC_Cache::set('tmpavatar', $image->data(), 7200);
+ \OC_JSON::error(array("data" => "notsquare"));
+ } else {
+ $l = new \OC_L10n('core');
+
+ $mimeType = $image->mimeType();
+ if ($mimeType !== 'image/jpeg' && $mimeType !== 'image/png') {
+ \OC_JSON::error(array("data" => array("message" => $l->t("Unknown filetype")) ));
+ }
+
+ if (!$image->valid()) {
+ \OC_JSON::error(array("data" => array("message" => $l->t("Invalid image")) ));
+ }
+ }
+ } catch (\Exception $e) {
+ \OC_JSON::error(array("data" => array("message" => $e->getMessage()) ));
+ }
+ }
+
+ public static function deleteAvatar($args) {
+ \OC_JSON::checkLoggedIn();
+ \OC_JSON::callCheck();
+
+ $user = \OC_User::getUser();
+
+ try {
+ $avatar = new \OC_Avatar($user);
+ $avatar->remove();
+ \OC_JSON::success();
+ } catch (\Exception $e) {
+ \OC_JSON::error(array("data" => array("message" => $e->getMessage()) ));
+ }
+ }
+
+ public static function getTmpAvatar($args) {
+ \OC_JSON::checkLoggedIn();
+ \OC_JSON::callCheck();
+
+ $tmpavatar = \OC_Cache::get('tmpavatar');
+ if (is_null($tmpavatar)) {
+ $l = new \OC_L10n('core');
+ \OC_JSON::error(array("data" => array("message" => $l->t("No temporary profile picture available, try again")) ));
+ return;
+ }
+
+ $image = new \OC_Image($tmpavatar);
+ \OC_Response::disableCaching();
+ \OC_Response::setLastModifiedHeader(time());
+ \OC_Response::setETagHeader(crc32($image->data()));
+ $image->show();
+ }
+
+ public static function postCroppedAvatar($args) {
+ \OC_JSON::checkLoggedIn();
+ \OC_JSON::callCheck();
+
+ $user = \OC_User::getUser();
+ if (isset($_POST['crop'])) {
+ $crop = $_POST['crop'];
+ } else {
+ $l = new \OC_L10n('core');
+ \OC_JSON::error(array("data" => array("message" => $l->t("No crop data provided")) ));
+ return;
+ }
+
+ $tmpavatar = \OC_Cache::get('tmpavatar');
+ if (is_null($tmpavatar)) {
+ $l = new \OC_L10n('core');
+ \OC_JSON::error(array("data" => array("message" => $l->t("No temporary profile picture available, try again")) ));
+ return;
+ }
+
+ $image = new \OC_Image($tmpavatar);
+ $image->crop($crop['x'], $crop['y'], $crop['w'], $crop['h']);
+ try {
+ $avatar = new \OC_Avatar($user);
+ $avatar->set($image->data());
+ // Clean up
+ \OC_Cache::remove('tmpavatar');
+ \OC_JSON::success();
+ } catch (\Exception $e) {
+ \OC_JSON::error(array("data" => array("message" => $e->getMessage()) ));
+ }
+ }
+}
diff --git a/core/css/apps.css b/core/css/apps.css
index 5de146feb1f..de63495e50e 100644
--- a/core/css/apps.css
+++ b/core/css/apps.css
@@ -50,8 +50,8 @@
#app-navigation li > a {
display: block;
width: 100%;
- height: 44px;
- padding: 12px;
+ line-height: 44px;
+ padding: 0 12px;
overflow: hidden;
-moz-box-sizing: border-box; box-sizing: border-box;
white-space: nowrap;
diff --git a/core/css/styles.css b/core/css/styles.css
index bf78af15af5..dcdeda8a9c9 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -40,6 +40,11 @@ body { background:#fefefe; font:normal .8em/1.6em "Helvetica Neue",Helvetica,Ari
.header-right { float:right; vertical-align:middle; padding:0.5em; }
.header-right > * { vertical-align:middle; }
+#header .avatardiv {
+ text-shadow: none;
+ float: left;
+ display: inline-block;
+}
/* INPUTS */
input[type="text"], input[type="password"], input[type="search"], input[type="number"], input[type="email"], input[type="url"],
@@ -583,8 +588,18 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; }
/* USER MENU */
-#settings { float:right; margin-top:7px; color:#bbb; text-shadow:0 -1px 0 #000; }
-#expand { padding:15px; cursor:pointer; font-weight:bold; }
+#settings {
+ float: right;
+ margin-top: 7px;
+ margin-left: 10px;
+ color: #bbb;
+ text-shadow: 0 -1px 0 #000;
+}
+#expand {
+ padding: 15px 15px 15px 5px;
+ cursor: pointer;
+ font-weight: bold;
+}
#expand:hover, #expand:focus, #expand:active { color:#fff; }
#expand img { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity:.7; margin-bottom:-2px; }
#expand:hover img, #expand:focus img, #expand:active img { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
@@ -624,6 +639,7 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; }
.hidden { display:none; }
.bold { font-weight:bold; }
.center { text-align:center; }
+.inlineblock { display: inline-block; }
#notification-container { position: fixed; top: 0px; width: 100%; text-align: center; z-index: 101; line-height: 1.2;}
#notification, #update-notification { z-index:101; background-color:#fc4; border:0; padding:0 .7em .3em; display:none; position: relative; top:0; -moz-border-radius-bottomleft:1em; -webkit-border-bottom-left-radius:1em; border-bottom-left-radius:1em; -moz-border-radius-bottomright:1em; -webkit-border-bottom-right-radius:1em; border-bottom-right-radius:1em; }
diff --git a/core/js/avatar.js b/core/js/avatar.js
new file mode 100644
index 00000000000..410182f01bf
--- /dev/null
+++ b/core/js/avatar.js
@@ -0,0 +1,9 @@
+$(document).ready(function(){
+ $('#header .avatardiv').avatar(OC.currentUser, 32);
+ // Personal settings
+ $('#avatar .avatardiv').avatar(OC.currentUser, 128);
+ // User settings
+ $.each($('td.avatar .avatardiv'), function(i, element) {
+ $(element).avatar($(element).parent().parent().data('uid'), 32);
+ });
+});
diff --git a/core/js/jquery.avatar.js b/core/js/jquery.avatar.js
new file mode 100644
index 00000000000..f1382fd7d2d
--- /dev/null
+++ b/core/js/jquery.avatar.js
@@ -0,0 +1,83 @@
+/**
+ * Copyright (c) 2013 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.
+ */
+
+/**
+ * This plugin inserts the right avatar for the user, depending on, whether a
+ * custom avatar is uploaded - which it uses then - or not, and display a
+ * placeholder with the first letter of the users name instead.
+ * For this it queries the core_avatar_get route, thus this plugin is fit very
+ * tightly for owncloud, and it may not work anywhere else.
+ *
+ * You may use this on any <div></div>
+ * Here I'm using <div class="avatardiv"></div> as an example.
+ *
+ * There are 4 ways to call this:
+ *
+ * 1. $('.avatardiv').avatar('jdoe', 128);
+ * This will make the div to jdoe's fitting avatar, with a size of 128px.
+ *
+ * 2. $('.avatardiv').avatar('jdoe');
+ * This will make the div to jdoe's fitting avatar. If the div aready has a
+ * height, it will be used for the avatars size. Otherwise this plugin will
+ * search for 'size' DOM data, to use for avatar size. If neither are available
+ * it will default to 64px.
+ *
+ * 3. $('.avatardiv').avatar();
+ * This will search the DOM for 'user' data, to use as the username. If there
+ * is no username available it will default to a placeholder with the value of
+ * "x". The size will be determined the same way, as the second example.
+ *
+ * 4. $('.avatardiv').avatar('jdoe', 128, true);
+ * This will behave like the first example, except it will also append random
+ * hashes to the custom avatar images, to force image reloading in IE8.
+ */
+
+(function ($) {
+ $.fn.avatar = function(user, size, ie8fix) {
+ if (typeof(size) === 'undefined') {
+ if (this.height() > 0) {
+ size = this.height();
+ } else if (this.data('size') > 0) {
+ size = this.data('size');
+ } else {
+ size = 64;
+ }
+ }
+
+ this.height(size);
+ this.width(size);
+
+ if (typeof(user) === 'undefined') {
+ if (typeof(this.data('user')) !== 'undefined') {
+ user = this.data('user');
+ } else {
+ this.placeholder('x');
+ return;
+ }
+ }
+
+ // sanitize
+ user = user.replace(/\//g,'');
+
+ var $div = this;
+
+ OC.Router.registerLoadedCallback(function() {
+ var url = OC.Router.generate('core_avatar_get', {user: user, size: size})+'?requesttoken='+oc_requesttoken;
+ $.get(url, function(result) {
+ if (typeof(result) === 'object') {
+ $div.placeholder(user);
+ } else {
+ if (ie8fix === true) {
+ $div.html('<img src="'+url+'#'+Math.floor(Math.random()*1000)+'">');
+ } else {
+ $div.html('<img src="'+url+'">');
+ }
+ }
+ });
+ });
+ };
+}(jQuery));
diff --git a/core/js/jquery.ocdialog.js b/core/js/jquery.ocdialog.js
index bafbd0e0e9f..f1836fd4727 100644
--- a/core/js/jquery.ocdialog.js
+++ b/core/js/jquery.ocdialog.js
@@ -39,7 +39,8 @@
return;
}
// Escape
- if(event.keyCode === 27 && self.options.closeOnEscape) {
+ if(event.keyCode === 27 && event.type === 'keydown' && self.options.closeOnEscape) {
+ event.stopImmediatePropagation();
self.close();
return false;
}
@@ -83,20 +84,21 @@
var self = this;
switch(key) {
case 'title':
- var $title = $('<h3 class="oc-dialog-title">' + this.options.title
- + '</h3>'); //<hr class="oc-dialog-separator" />');
if(this.$title) {
- this.$title.replaceWith($title);
+ this.$title.text(value);
} else {
+ var $title = $('<h3 class="oc-dialog-title">'
+ + value
+ + '</h3>');
this.$title = $title.prependTo(this.$dialog);
}
this._setSizes();
break;
case 'buttons':
- var $buttonrow = $('<div class="oc-dialog-buttonrow" />');
if(this.$buttonrow) {
- this.$buttonrow.replaceWith($buttonrow);
+ this.$buttonrow.empty();
} else {
+ var $buttonrow = $('<div class="oc-dialog-buttonrow" />');
this.$buttonrow = $buttonrow.appendTo(this.$dialog);
}
$.each(value, function(idx, val) {
@@ -124,6 +126,8 @@
$closeButton.on('click', function() {
self.close();
});
+ } else {
+ this.$dialog.find('.oc-dialog-close').remove();
}
break;
case 'width':
diff --git a/core/js/js.js b/core/js/js.js
index 1999ff73d23..c09f80369f9 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -322,6 +322,38 @@ var OC={
return date.getDate()+'.'+(date.getMonth()+1)+'.'+date.getFullYear()+', '+date.getHours()+':'+date.getMinutes();
},
/**
+ * Parses a URL query string into a JS map
+ * @param queryString query string in the format param1=1234&param2=abcde&param3=xyz
+ * @return map containing key/values matching the URL parameters
+ */
+ parseQueryString:function(queryString){
+ var parts,
+ components,
+ result = {},
+ key,
+ value;
+ if (!queryString){
+ return null;
+ }
+ if (queryString[0] === '?'){
+ queryString = queryString.substr(1);
+ }
+ parts = queryString.split('&');
+ for (var i = 0; i < parts.length; i++){
+ components = parts[i].split('=');
+ if (!components.length){
+ continue;
+ }
+ key = decodeURIComponent(components[0]);
+ if (!key){
+ continue;
+ }
+ value = components[1];
+ result[key] = value && decodeURIComponent(value);
+ }
+ return result;
+ },
+ /**
* Opens a popup with the setting for an app.
* @param appid String. The ID of the app e.g. 'calendar', 'contacts' or 'files'.
* @param loadJS boolean or String. If true 'js/settings.js' is loaded. If it's a string
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index f184a1022bc..8e8a477772b 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -139,8 +139,12 @@ var OCdialogs = {
}
});
})
- .fail(function() {
- alert(t('core', 'Error loading file picker template'));
+ .fail(function(status, error) {
+ // If the method is called while navigating away
+ // from the page, it is probably not needed ;)
+ if(status !== 0) {
+ alert(t('core', 'Error loading file picker template: {error}', {error: error}));
+ }
});
},
/**
@@ -206,8 +210,14 @@ var OCdialogs = {
});
OCdialogs.dialogs_counter++;
})
- .fail(function() {
- alert(t('core', 'Error loading file picker template'));
+ .fail(function(status, error) {
+ // If the method is called while navigating away from
+ // the page, we still want to deliver the message.
+ if(status === 0) {
+ alert(title + ': ' + content);
+ } else {
+ alert(t('core', 'Error loading message template: {error}', {error: error}));
+ }
});
},
_getFilePickerTemplate: function() {
@@ -219,8 +229,8 @@ var OCdialogs = {
self.$listTmpl = self.$filePickerTemplate.find('.filelist li:first-child').detach();
defer.resolve(self.$filePickerTemplate);
})
- .fail(function() {
- defer.reject();
+ .fail(function(jqXHR, textStatus, errorThrown) {
+ defer.reject(jqXHR.status, errorThrown);
});
} else {
defer.resolve(this.$filePickerTemplate);
@@ -235,8 +245,8 @@ var OCdialogs = {
self.$messageTemplate = $(tmpl);
defer.resolve(self.$messageTemplate);
})
- .fail(function() {
- defer.reject();
+ .fail(function(jqXHR, textStatus, errorThrown) {
+ defer.reject(jqXHR.status, errorThrown);
});
} else {
defer.resolve(this.$messageTemplate);
@@ -244,9 +254,16 @@ var OCdialogs = {
return defer.promise();
},
_getFileList: function(dir, mimeType) {
+ if (typeof(mimeType) === "string") {
+ mimeType = [mimeType];
+ }
+
return $.getJSON(
OC.filePath('files', 'ajax', 'rawlist.php'),
- {dir: dir, mimetype: mimeType}
+ {
+ dir: dir,
+ mimetypes: JSON.stringify(mimeType)
+ }
);
},
_determineValue: function(element) {
@@ -285,11 +302,7 @@ var OCdialogs = {
filename: entry.name,
date: OC.mtime2date(entry.mtime)
});
- if (entry.mimetype === "httpd/unix-directory") {
- $li.find('img').attr('src', OC.imagePath('core', 'filetypes/folder.png'));
- } else {
- $li.find('img').attr('src', OC.Router.generate('core_ajax_preview', {x:32, y:32, file:escapeHTML(dir+'/'+entry.name)}) );
- }
+ $li.find('img').attr('src', entry.mimetype_icon);
self.$filelist.append($li);
});
diff --git a/core/js/share.js b/core/js/share.js
index 763713e7cf2..7342747a15a 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -234,6 +234,7 @@ OC.Share={
// } else {
$.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term, itemShares: OC.Share.itemShares }, function(result) {
if (result.status == 'success' && result.data.length > 0) {
+ $( "#shareWith" ).autocomplete( "option", "autoFocus", true );
response(result.data);
} else {
// Suggest sharing via email if valid email address
@@ -241,6 +242,7 @@ OC.Share={
// if (pattern.test(search.term)) {
// response([{label: t('core', 'Share via email:')+' '+search.term, value: {shareType: OC.Share.SHARE_TYPE_EMAIL, shareWith: search.term}}]);
// } else {
+ $( "#shareWith" ).autocomplete( "option", "autoFocus", false );
response([t('core', 'No people found')]);
// }
}
@@ -432,7 +434,7 @@ OC.Share={
dateFormat : 'dd-mm-yy'
});
}
-}
+};
$(document).ready(function() {
@@ -521,7 +523,7 @@ $(document).ready(function() {
$(document).on('change', '#dropdown .permissions', function() {
if ($(this).attr('name') == 'edit') {
- var li = $(this).parent().parent()
+ var li = $(this).parent().parent();
var checkboxes = $('.permissions', li);
var checked = $(this).is(':checked');
// Check/uncheck Create, Update, and Delete checkboxes if Edit is checked/unck
diff --git a/core/l10n/ach.php b/core/l10n/ach.php
new file mode 100644
index 00000000000..25f1137e8cd
--- /dev/null
+++ b/core/l10n/ach.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day ago_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/core/l10n/es_AR.php b/core/l10n/es_AR.php
index 389251de8aa..953a30c01d5 100644
--- a/core/l10n/es_AR.php
+++ b/core/l10n/es_AR.php
@@ -2,6 +2,12 @@
$TRANSLATIONS = array(
"%s shared »%s« with you" => "%s compartió \"%s\" con vos",
"group" => "grupo",
+"Turned on maintenance mode" => "Modo de mantenimiento activado",
+"Turned off maintenance mode" => "Modo de mantenimiento desactivado",
+"Updated database" => "Base de datos actualizada",
+"Updating filecache, this may take really long..." => "Actualizando caché de archivos, esto puede tardar mucho tiempo...",
+"Updated filecache" => "Caché de archivos actualizada",
+"... %d%% done ..." => "... %d%% hecho ...",
"Category type not provided." => "Tipo de categoría no provisto. ",
"No category to add?" => "¿Ninguna categoría para añadir?",
"This category already exists: %s" => "Esta categoría ya existe: %s",
@@ -31,13 +37,13 @@ $TRANSLATIONS = array(
"December" => "diciembre",
"Settings" => "Configuración",
"seconds ago" => "segundos atrás",
-"_%n minute ago_::_%n minutes ago_" => array("",""),
-"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n minute ago_::_%n minutes ago_" => array("Hace %n minuto","Hace %n minutos"),
+"_%n hour ago_::_%n hours ago_" => array("Hace %n hora","Hace %n horas"),
"today" => "hoy",
"yesterday" => "ayer",
-"_%n day ago_::_%n days ago_" => array("",""),
+"_%n day ago_::_%n days ago_" => array("Hace %n día","Hace %n días"),
"last month" => "el mes pasado",
-"_%n month ago_::_%n months ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("Hace %n mes","Hace %n meses"),
"months ago" => "meses atrás",
"last year" => "el año pasado",
"years ago" => "años atrás",
@@ -84,6 +90,7 @@ $TRANSLATIONS = array(
"Email sent" => "e-mail mandado",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "La actualización no pudo ser completada. Por favor, reportá el inconveniente a la comunidad <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud</a>.",
"The update was successful. Redirecting you to ownCloud now." => "La actualización fue exitosa. Estás siendo redirigido a ownCloud.",
+"%s password reset" => "%s restablecer contraseña",
"Use the following link to reset your password: {link}" => "Usá este enlace para restablecer tu contraseña: {link}",
"The link to reset your password has been sent to your email.<br>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 ." => "El enlace para restablecer la contraseña fue enviada a tu e-mail. <br> Si no lo recibís en un plazo de tiempo razonable, revisá tu carpeta de spam / correo no deseado. <br> Si no está ahí, preguntale a tu administrador.",
"Request failed!<br>Did you make sure your email/username was right?" => "¡Error en el pedido! <br> ¿Estás seguro de que tu dirección de correo electrónico o nombre de usuario son correcto?",
@@ -108,9 +115,11 @@ $TRANSLATIONS = array(
"Add" => "Agregar",
"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>",
"Advanced" => "Avanzado",
"Data folder" => "Directorio de almacenamiento",
diff --git a/core/l10n/es_MX.php b/core/l10n/es_MX.php
new file mode 100644
index 00000000000..93c8e33f3e2
--- /dev/null
+++ b/core/l10n/es_MX.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day ago_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/km.php b/core/l10n/km.php
new file mode 100644
index 00000000000..556cca20dac
--- /dev/null
+++ b/core/l10n/km.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
+"_%n day ago_::_%n days ago_" => array(""),
+"_%n month ago_::_%n months ago_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/core/l10n/ku_IQ.php b/core/l10n/ku_IQ.php
index a2a0ff22ef6..5ce6ce9c821 100644
--- a/core/l10n/ku_IQ.php
+++ b/core/l10n/ku_IQ.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"_%n day ago_::_%n days ago_" => array("",""),
"_%n month ago_::_%n months ago_" => array("",""),
"Error" => "هه‌ڵه",
+"Share" => "هاوبەشی کردن",
"Password" => "وشەی تێپەربو",
"Username" => "ناوی به‌کارهێنه‌ر",
"New password" => "وشەی نهێنی نوێ",
diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php
index 7b0c3ed4f80..4c089b3e1b6 100644
--- a/core/l10n/lt_LT.php
+++ b/core/l10n/lt_LT.php
@@ -2,6 +2,12 @@
$TRANSLATIONS = array(
"%s shared »%s« with you" => "%s pasidalino »%s« su tavimi",
"group" => "grupė",
+"Turned on maintenance mode" => "Įjungta priežiūros veiksena",
+"Turned off maintenance mode" => "Išjungta priežiūros veiksena",
+"Updated database" => "Atnaujinta duomenų bazė",
+"Updating filecache, this may take really long..." => "Atnaujinama failų talpykla, tai gali užtrukti labai ilgai...",
+"Updated filecache" => "Atnaujinta failų talpykla",
+"... %d%% done ..." => "... %d%% atlikta ...",
"Category type not provided." => "Kategorija nenurodyta.",
"No category to add?" => "Nepridėsite jokios kategorijos?",
"This category already exists: %s" => "Ši kategorija jau egzistuoja: %s",
@@ -35,7 +41,7 @@ $TRANSLATIONS = array(
"_%n hour ago_::_%n hours ago_" => array("prieš %n valandą","prieš %n valandų","prieš %n valandų"),
"today" => "šiandien",
"yesterday" => "vakar",
-"_%n day ago_::_%n days ago_" => array("","",""),
+"_%n day ago_::_%n days ago_" => array("prieš %n dieną","prieš %n dienas","prieš %n dienų"),
"last month" => "praeitą mėnesį",
"_%n month ago_::_%n months ago_" => array("prieš %n mėnesį","prieš %n mėnesius","prieš %n mėnesių"),
"months ago" => "prieš mėnesį",
@@ -61,6 +67,7 @@ $TRANSLATIONS = array(
"Share with link" => "Dalintis nuoroda",
"Password protect" => "Apsaugotas slaptažodžiu",
"Password" => "Slaptažodis",
+"Allow Public Upload" => "Leisti viešą įkėlimą",
"Email link to person" => "Nusiųsti nuorodą paštu",
"Send" => "Siųsti",
"Set expiration date" => "Nustatykite galiojimo laiką",
@@ -89,6 +96,7 @@ $TRANSLATIONS = array(
"Request failed!<br>Did you make sure your email/username was right?" => "Klaida!<br>Ar tikrai jūsų el paštas/vartotojo vardas buvo teisingi?",
"You will receive a link to reset your password via Email." => "Elektroniniu paštu gausite nuorodą, su kuria galėsite iš naujo nustatyti slaptažodį.",
"Username" => "Prisijungimo vardas",
+"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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" => "Jūsų failai yra užšifruoti. Jei neįjungėte atstatymo rakto, nebus galimybės atstatyti duomenų po slaptažodžio atstatymo. Jei nesate tikri ką daryti, prašome susisiekti su administratoriumi prie tęsiant. Ar tikrai tęsti?",
"Yes, I really want to reset my password now" => "Taip, aš tikrai noriu atnaujinti slaptažodį",
"Request reset" => "Prašyti nustatymo iš najo",
"Your password was reset" => "Jūsų slaptažodis buvo nustatytas iš naujo",
@@ -102,13 +110,16 @@ $TRANSLATIONS = array(
"Help" => "Pagalba",
"Access forbidden" => "Priėjimas draudžiamas",
"Cloud not found" => "Negalima rasti",
+"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\nCheers!" => "Labas,\n\nInformuojame, kad %s pasidalino su Jumis %s.\nPažiūrėkite: %s\n\nLinkėjimai!",
"Edit categories" => "Redaguoti kategorijas",
"Add" => "Pridėti",
"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>",
"Advanced" => "Išplėstiniai",
"Data folder" => "Duomenų katalogas",
@@ -129,6 +140,7 @@ $TRANSLATIONS = array(
"remember" => "prisiminti",
"Log in" => "Prisijungti",
"Alternative Logins" => "Alternatyvūs prisijungimai",
+"Hey there,<br><br>just letting you know that %s shared »%s« with you.<br><a href=\"%s\">View it!</a><br><br>Cheers!" => "Labas,<br><br>tik informuojame, kad %s pasidalino su Jumis »%s«.<br><a href=\"%s\">Peržiūrėk!</a><br><br>Linkėjimai!",
"Updating ownCloud to version %s, this may take a while." => "Atnaujinama ownCloud į %s versiją. tai gali šiek tiek užtrukti."
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/core/l10n/nn_NO.php b/core/l10n/nn_NO.php
index 942824ecb74..6d34d6e23c3 100644
--- a/core/l10n/nn_NO.php
+++ b/core/l10n/nn_NO.php
@@ -1,6 +1,13 @@
<?php
$TRANSLATIONS = array(
+"%s shared »%s« with you" => "%s delte «%s» med deg",
"group" => "gruppe",
+"Turned on maintenance mode" => "Skrudde på vedlikehaldsmodus",
+"Turned off maintenance mode" => "Skrudde av vedlikehaldsmodus",
+"Updated database" => "Database oppdatert",
+"Updating filecache, this may take really long..." => "Oppdaterer mellomlager; dette kan ta ei god stund …",
+"Updated filecache" => "Mellomlager oppdatert",
+"... %d%% done ..." => "… %d %% ferdig …",
"Category type not provided." => "Ingen kategoritype.",
"No category to add?" => "Ingen kategori å leggja til?",
"This category already exists: %s" => "Denne kategorien finst alt: %s",
@@ -30,17 +37,18 @@ $TRANSLATIONS = array(
"December" => "Desember",
"Settings" => "Innstillingar",
"seconds ago" => "sekund sidan",
-"_%n minute ago_::_%n minutes ago_" => array("",""),
-"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n minute ago_::_%n minutes ago_" => array("%n minutt sidan","%n minutt sidan"),
+"_%n hour ago_::_%n hours ago_" => array("%n time sidan","%n timar sidan"),
"today" => "i dag",
"yesterday" => "i går",
-"_%n day ago_::_%n days ago_" => array("",""),
+"_%n day ago_::_%n days ago_" => array("%n dag sidan","%n dagar sidan"),
"last month" => "førre månad",
-"_%n month ago_::_%n months ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("%n månad sidan","%n månadar sidan"),
"months ago" => "månadar sidan",
"last year" => "i fjor",
"years ago" => "år sidan",
"Choose" => "Vel",
+"Error loading file picker template" => "Klarte ikkje å lasta filveljarmalen",
"Yes" => "Ja",
"No" => "Nei",
"Ok" => "Greitt",
@@ -59,6 +67,7 @@ $TRANSLATIONS = array(
"Share with link" => "Del med lenkje",
"Password protect" => "Passordvern",
"Password" => "Passord",
+"Allow Public Upload" => "Tillat offentleg opplasting",
"Email link to person" => "Send lenkja over e-post",
"Send" => "Send",
"Set expiration date" => "Set utløpsdato",
@@ -81,11 +90,14 @@ $TRANSLATIONS = array(
"Email sent" => "E-post sendt",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Oppdateringa feila. Ver venleg og rapporter feilen til <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud-fellesskapet</a>.",
"The update was successful. Redirecting you to ownCloud now." => "Oppdateringa er fullført. Sender deg vidare til ownCloud no.",
+"%s password reset" => "%s passordnullstilling",
"Use the following link to reset your password: {link}" => "Klikk følgjande lenkje til å nullstilla passordet ditt: {link}",
"The link to reset your password has been sent to your email.<br>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 ." => "Lenkja til å nullstilla passordet med er sendt til e-posten din.<br>Sjå i spam-/søppelmappa di viss du ikkje ser e-posten innan rimeleg tid.<br>Spør din lokale administrator viss han ikkje er der heller.",
"Request failed!<br>Did you make sure your email/username was right?" => "Førespurnaden feila!<br>Er du viss på at du skreiv inn rett e-post/brukarnamn?",
"You will receive a link to reset your password via Email." => "Du vil få ein e-post med ei lenkje for å nullstilla passordet.",
"Username" => "Brukarnamn",
+"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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" => "Filene dine er krypterte. Viss du ikkje har skrudd på gjenopprettingsnøkkelen, finst det ingen måte å få tilbake dataa dine når passordet ditt er nullstilt. Viss du ikkje er sikker på kva du skal gjera bør du spørja administratoren din før du går vidare. Vil du verkeleg fortsetja?",
+"Yes, I really want to reset my password now" => "Ja, eg vil nullstilla passordet mitt no",
"Request reset" => "Be om nullstilling",
"Your password was reset" => "Passordet ditt er nullstilt",
"To login page" => "Til innloggingssida",
@@ -98,13 +110,16 @@ $TRANSLATIONS = array(
"Help" => "Hjelp",
"Access forbidden" => "Tilgang forbudt",
"Cloud not found" => "Fann ikkje skyen",
+"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\nCheers!" => "Hei der,\n\nnemner berre at %s delte %s med deg.\nSjå det her: %s\n\nMe talast!",
"Edit categories" => "Endra kategoriar",
"Add" => "Legg til",
"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>",
"Advanced" => "Avansert",
"Data folder" => "Datamappe",
@@ -125,6 +140,7 @@ $TRANSLATIONS = array(
"remember" => "hugs",
"Log in" => "Logg inn",
"Alternative Logins" => "Alternative innloggingar",
+"Hey there,<br><br>just letting you know that %s shared »%s« with you.<br><a href=\"%s\">View it!</a><br><br>Cheers!" => "Hei der,<br><br>nemner berre at %s delte «%s» med deg.<br><a href=\"%s\">Sjå det!</a><br><br>Me talast!<",
"Updating ownCloud to version %s, this may take a while." => "Oppdaterer ownCloud til utgåve %s, dette kan ta ei stund."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/nqo.php b/core/l10n/nqo.php
new file mode 100644
index 00000000000..556cca20dac
--- /dev/null
+++ b/core/l10n/nqo.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
+"_%n day ago_::_%n days ago_" => array(""),
+"_%n month ago_::_%n months ago_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php
index 84762cde5e4..7b1c7b3702c 100644
--- a/core/l10n/pt_BR.php
+++ b/core/l10n/pt_BR.php
@@ -2,6 +2,12 @@
$TRANSLATIONS = array(
"%s shared »%s« with you" => "%s compartilhou »%s« com você",
"group" => "grupo",
+"Turned on maintenance mode" => "Ativar modo de manutenção",
+"Turned off maintenance mode" => "Desligar o modo de manutenção",
+"Updated database" => "Atualizar o banco de dados",
+"Updating filecache, this may take really long..." => "Atualizar cahe de arquivos, isto pode levar algum tempo...",
+"Updated filecache" => "Atualizar cache de arquivo",
+"... %d%% done ..." => "... %d%% concluído ...",
"Category type not provided." => "Tipo de categoria não fornecido.",
"No category to add?" => "Nenhuma categoria a adicionar?",
"This category already exists: %s" => "Esta categoria já existe: %s",
@@ -31,13 +37,13 @@ $TRANSLATIONS = array(
"December" => "dezembro",
"Settings" => "Ajustes",
"seconds ago" => "segundos atrás",
-"_%n minute ago_::_%n minutes ago_" => array("",""),
-"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n minute ago_::_%n minutes ago_" => array(" ha %n minuto","ha %n minutos"),
+"_%n hour ago_::_%n hours ago_" => array("ha %n hora","ha %n horas"),
"today" => "hoje",
"yesterday" => "ontem",
-"_%n day ago_::_%n days ago_" => array("",""),
+"_%n day ago_::_%n days ago_" => array("ha %n dia","ha %n dias"),
"last month" => "último mês",
-"_%n month ago_::_%n months ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("ha %n mês","ha %n meses"),
"months ago" => "meses atrás",
"last year" => "último ano",
"years ago" => "anos atrás",
diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php
index 2afb9ef9b39..4198ec91294 100644
--- a/core/l10n/pt_PT.php
+++ b/core/l10n/pt_PT.php
@@ -2,6 +2,12 @@
$TRANSLATIONS = array(
"%s shared »%s« with you" => "%s partilhado »%s« contigo",
"group" => "grupo",
+"Turned on maintenance mode" => "Activado o modo de manutenção",
+"Turned off maintenance mode" => "Desactivado o modo de manutenção",
+"Updated database" => "Base de dados actualizada",
+"Updating filecache, this may take really long..." => "A actualizar o cache dos ficheiros, poderá demorar algum tempo...",
+"Updated filecache" => "Actualizado o cache dos ficheiros",
+"... %d%% done ..." => "... %d%% feito ...",
"Category type not provided." => "Tipo de categoria não fornecido",
"No category to add?" => "Nenhuma categoria para adicionar?",
"This category already exists: %s" => "A categoria já existe: %s",
@@ -31,13 +37,13 @@ $TRANSLATIONS = array(
"December" => "Dezembro",
"Settings" => "Configurações",
"seconds ago" => "Minutos atrás",
-"_%n minute ago_::_%n minutes ago_" => array("",""),
-"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n minute ago_::_%n minutes ago_" => array("%n minuto atrás","%n minutos atrás"),
+"_%n hour ago_::_%n hours ago_" => array("%n hora atrás","%n horas atrás"),
"today" => "hoje",
"yesterday" => "ontem",
-"_%n day ago_::_%n days ago_" => array("",""),
+"_%n day ago_::_%n days ago_" => array("%n dia atrás","%n dias atrás"),
"last month" => "ultímo mês",
-"_%n month ago_::_%n months ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("%n mês atrás","%n meses atrás"),
"months ago" => "meses atrás",
"last year" => "ano passado",
"years ago" => "anos atrás",
@@ -84,6 +90,7 @@ $TRANSLATIONS = array(
"Email sent" => "E-mail enviado",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "A actualização falhou. Por favor reporte este incidente seguindo este link <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>.",
"The update was successful. Redirecting you to ownCloud now." => "A actualização foi concluída com sucesso. Vai ser redireccionado para o ownCloud agora.",
+"%s password reset" => "%s reposição da password",
"Use the following link to reset your password: {link}" => "Use o seguinte endereço para repor a sua password: {link}",
"The link to reset your password has been sent to your email.<br>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 ." => "O link para fazer reset à sua password foi enviado para o seu e-mail. <br> Se não o recebeu dentro um espaço de tempo aceitável, por favor verifique a sua pasta de SPAM.<br> Se não o encontrar, por favor contacte o seu administrador.",
"Request failed!<br>Did you make sure your email/username was right?" => "O pedido falhou! <br> Tem a certeza que introduziu o seu email/username correcto?",
diff --git a/core/l10n/sq.php b/core/l10n/sq.php
index 3057ac2c689..6eaa909cad1 100644
--- a/core/l10n/sq.php
+++ b/core/l10n/sq.php
@@ -1,5 +1,13 @@
<?php
$TRANSLATIONS = array(
+"%s shared »%s« with you" => "%s ndau »%s« me ju",
+"group" => "grupi",
+"Turned on maintenance mode" => "Mënyra e mirëmbajtjes u aktivizua",
+"Turned off maintenance mode" => "Mënyra e mirëmbajtjes u çaktivizua",
+"Updated database" => "Database-i u azhurnua",
+"Updating filecache, this may take really long..." => "Po azhurnoj memorjen e skedarëve, mund të zgjasi pak...",
+"Updated filecache" => "Memorja e skedarëve u azhornua",
+"... %d%% done ..." => "... %d%% u krye ...",
"Category type not provided." => "Mungon tipi i kategorisë.",
"No category to add?" => "Asnjë kategori për të shtuar?",
"This category already exists: %s" => "Kjo kategori tashmë ekziston: %s",
@@ -29,13 +37,13 @@ $TRANSLATIONS = array(
"December" => "Dhjetor",
"Settings" => "Parametra",
"seconds ago" => "sekonda më parë",
-"_%n minute ago_::_%n minutes ago_" => array("",""),
-"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n minute ago_::_%n minutes ago_" => array("%n minut më parë","%n minuta më parë"),
+"_%n hour ago_::_%n hours ago_" => array("%n orë më parë","%n orë më parë"),
"today" => "sot",
"yesterday" => "dje",
-"_%n day ago_::_%n days ago_" => array("",""),
+"_%n day ago_::_%n days ago_" => array("%n ditë më parë","%n ditë më parë"),
"last month" => "muajin e shkuar",
-"_%n month ago_::_%n months ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("%n muaj më parë","%n muaj më parë"),
"months ago" => "muaj më parë",
"last year" => "vitin e shkuar",
"years ago" => "vite më parë",
@@ -82,11 +90,13 @@ $TRANSLATIONS = array(
"Email sent" => "Email-i u dërgua",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Azhurnimi dështoi. Ju lutemi njoftoni për këtë problem <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">komunitetin ownCloud</a>.",
"The update was successful. Redirecting you to ownCloud now." => "Azhurnimi u krye. Tani do t'ju kaloj tek ownCloud-i.",
+"%s password reset" => "Kodi i %s -it u rivendos",
"Use the following link to reset your password: {link}" => "Përdorni lidhjen në vijim për të rivendosur kodin: {link}",
"The link to reset your password has been sent to your email.<br>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 ." => "Lidhja për rivendosjen e kodit tuaj u dërgua tek email-i juaj.<br>Nëqoftëse nuk e merrni brenda një kohe të arsyeshme, kontrolloni dosjet e postës së padëshirueshme (spam).<br>Nëqoftëse nuk është as aty, pyesni administratorin tuaj lokal.",
"Request failed!<br>Did you make sure your email/username was right?" => "Kërkesa dështoi!<br>A u siguruat që email-i/përdoruesi juaj ishte i saktë?",
"You will receive a link to reset your password via Email." => "Do t'iu vijë një email që përmban një lidhje për ta rivendosur kodin.",
"Username" => "Përdoruesi",
+"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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" => "Skedarët tuaj janë të kodifikuar. Nëqoftëse nuk keni aktivizuar çelësin e restaurimit, të dhënat tuaja nuk do të jenë të arritshme pasi të keni rivendosur kodin. Nëqoftëse nuk jeni i sigurt, ju lutemi kontaktoni administratorin tuaj para se të vazhdoni. Jeni i sigurt që dëshironi të vazhdoni?",
"Yes, I really want to reset my password now" => "Po, dua ta rivendos kodin tani",
"Request reset" => "Bëj kërkesë për rivendosjen",
"Your password was reset" => "Kodi yt u rivendos",
@@ -105,9 +115,11 @@ $TRANSLATIONS = array(
"Add" => "Shto",
"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>",
"Advanced" => "Të përparuara",
"Data folder" => "Emri i dosjes",
@@ -119,6 +131,7 @@ $TRANSLATIONS = array(
"Database tablespace" => "Tablespace-i i database-it",
"Database host" => "Pozicioni (host) i database-it",
"Finish setup" => "Mbaro setup-in",
+"%s is available. Get more information on how to update." => "%s është i disponueshëm. Merrni më shumë informacione mbi azhurnimin.",
"Log out" => "Dalje",
"Automatic logon rejected!" => "Hyrja automatike u refuzua!",
"If you did not change your password recently, your account may be compromised!" => "Nqse nuk keni ndryshuar kodin kohët e fundit, llogaria juaj mund të jetë komprometuar.",
@@ -127,6 +140,7 @@ $TRANSLATIONS = array(
"remember" => "kujto",
"Log in" => "Hyrje",
"Alternative Logins" => "Hyrje alternative",
+"Hey there,<br><br>just letting you know that %s shared »%s« with you.<br><a href=\"%s\">View it!</a><br><br>Cheers!" => "Tungjatjeta,<br><br>duam t'ju njoftojmë që %s ka ndarë »%s« me ju.<br><a href=\"%s\">Shikojeni!</a><br><br>Përshëndetje!",
"Updating ownCloud to version %s, this may take a while." => "Po azhurnoj ownCloud-in me versionin %s. Mund të zgjasi pak."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/lostpassword/controller.php b/core/lostpassword/controller.php
index f761e45d25f..3c8099591a1 100644
--- a/core/lostpassword/controller.php
+++ b/core/lostpassword/controller.php
@@ -5,11 +5,12 @@
* later.
* See the COPYING-README file.
*/
+namespace OC\Core\LostPassword;
-class OC_Core_LostPassword_Controller {
+class Controller {
protected static function displayLostPasswordPage($error, $requested) {
- $isEncrypted = OC_App::isEnabled('files_encryption');
- OC_Template::printGuestPage('core/lostpassword', 'lostpassword',
+ $isEncrypted = \OC_App::isEnabled('files_encryption');
+ \OC_Template::printGuestPage('core/lostpassword', 'lostpassword',
array('error' => $error,
'requested' => $requested,
'isEncrypted' => $isEncrypted));
@@ -19,12 +20,12 @@ class OC_Core_LostPassword_Controller {
$route_args = array();
$route_args['token'] = $args['token'];
$route_args['user'] = $args['user'];
- OC_Template::printGuestPage('core/lostpassword', 'resetpassword',
+ \OC_Template::printGuestPage('core/lostpassword', 'resetpassword',
array('success' => $success, 'args' => $route_args));
}
protected static function checkToken($user, $token) {
- return OC_Preferences::getValue($user, 'owncloud', 'lostpassword') === hash('sha256', $token);
+ return \OC_Preferences::getValue($user, 'owncloud', 'lostpassword') === hash('sha256', $token);
}
public static function index($args) {
@@ -33,7 +34,7 @@ class OC_Core_LostPassword_Controller {
public static function sendEmail($args) {
- $isEncrypted = OC_App::isEnabled('files_encryption');
+ $isEncrypted = \OC_App::isEnabled('files_encryption');
if(!$isEncrypted || isset($_POST['continue'])) {
$continue = true;
@@ -41,26 +42,26 @@ class OC_Core_LostPassword_Controller {
$continue = false;
}
- if (OC_User::userExists($_POST['user']) && $continue) {
- $token = hash('sha256', OC_Util::generateRandomBytes(30).OC_Config::getValue('passwordsalt', ''));
- OC_Preferences::setValue($_POST['user'], 'owncloud', 'lostpassword',
+ if (\OC_User::userExists($_POST['user']) && $continue) {
+ $token = hash('sha256', \OC_Util::generateRandomBytes(30).\OC_Config::getValue('passwordsalt', ''));
+ \OC_Preferences::setValue($_POST['user'], 'owncloud', 'lostpassword',
hash('sha256', $token)); // Hash the token again to prevent timing attacks
- $email = OC_Preferences::getValue($_POST['user'], 'settings', 'email', '');
+ $email = \OC_Preferences::getValue($_POST['user'], 'settings', 'email', '');
if (!empty($email)) {
- $link = OC_Helper::linkToRoute('core_lostpassword_reset',
+ $link = \OC_Helper::linkToRoute('core_lostpassword_reset',
array('user' => $_POST['user'], 'token' => $token));
- $link = OC_Helper::makeURLAbsolute($link);
+ $link = \OC_Helper::makeURLAbsolute($link);
- $tmpl = new OC_Template('core/lostpassword', 'email');
+ $tmpl = new \OC_Template('core/lostpassword', 'email');
$tmpl->assign('link', $link, false);
$msg = $tmpl->fetchPage();
- $l = OC_L10N::get('core');
- $from = OCP\Util::getDefaultEmailAddress('lostpassword-noreply');
+ $l = \OC_L10N::get('core');
+ $from = \OCP\Util::getDefaultEmailAddress('lostpassword-noreply');
try {
- $defaults = new OC_Defaults();
- OC_Mail::send($email, $_POST['user'], $l->t('%s password reset', array($defaults->getName())), $msg, $from, $defaults->getName());
+ $defaults = new \OC_Defaults();
+ \OC_Mail::send($email, $_POST['user'], $l->t('%s password reset', array($defaults->getName())), $msg, $from, $defaults->getName());
} catch (Exception $e) {
- OC_Template::printErrorPage( 'A problem occurs during sending the e-mail please contact your administrator.');
+ \OC_Template::printErrorPage( 'A problem occurs during sending the e-mail please contact your administrator.');
}
self::displayLostPasswordPage(false, true);
} else {
@@ -84,9 +85,9 @@ class OC_Core_LostPassword_Controller {
public static function resetPassword($args) {
if (self::checkToken($args['user'], $args['token'])) {
if (isset($_POST['password'])) {
- if (OC_User::setPassword($args['user'], $_POST['password'])) {
- OC_Preferences::deleteKey($args['user'], 'owncloud', 'lostpassword');
- OC_User::unsetMagicInCookie();
+ if (\OC_User::setPassword($args['user'], $_POST['password'])) {
+ \OC_Preferences::deleteKey($args['user'], 'owncloud', 'lostpassword');
+ \OC_User::unsetMagicInCookie();
self::displayResetPasswordPage(true, $args);
} else {
self::displayResetPasswordPage(false, $args);
diff --git a/core/routes.php b/core/routes.php
index f0f8ce571e2..57e25c0f1f7 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -44,19 +44,35 @@ $this->create('core_ajax_routes', '/core/routes.json')
->action('OC_Router', 'JSRoutes');
$this->create('core_ajax_preview', '/core/preview.png')
->actionInclude('core/ajax/preview.php');
-OC::$CLASSPATH['OC_Core_LostPassword_Controller'] = 'core/lostpassword/controller.php';
$this->create('core_lostpassword_index', '/lostpassword/')
->get()
- ->action('OC_Core_LostPassword_Controller', 'index');
+ ->action('OC\Core\LostPassword\Controller', 'index');
$this->create('core_lostpassword_send_email', '/lostpassword/')
->post()
- ->action('OC_Core_LostPassword_Controller', 'sendEmail');
+ ->action('OC\Core\LostPassword\Controller', 'sendEmail');
$this->create('core_lostpassword_reset', '/lostpassword/reset/{token}/{user}')
->get()
- ->action('OC_Core_LostPassword_Controller', 'reset');
+ ->action('OC\Core\LostPassword\Controller', 'reset');
$this->create('core_lostpassword_reset_password', '/lostpassword/reset/{token}/{user}')
->post()
- ->action('OC_Core_LostPassword_Controller', 'resetPassword');
+ ->action('OC\Core\LostPassword\Controller', 'resetPassword');
+
+// Avatar routes
+$this->create('core_avatar_get_tmp', '/avatar/tmp')
+ ->get()
+ ->action('OC\Core\Avatar\Controller', 'getTmpAvatar');
+$this->create('core_avatar_get', '/avatar/{user}/{size}')
+ ->get()
+ ->action('OC\Core\Avatar\Controller', 'getAvatar');
+$this->create('core_avatar_post', '/avatar/')
+ ->post()
+ ->action('OC\Core\Avatar\Controller', 'postAvatar');
+$this->create('core_avatar_delete', '/avatar/')
+ ->delete()
+ ->action('OC\Core\Avatar\Controller', 'deleteAvatar');
+$this->create('core_avatar_post_cropped', '/avatar/cropped')
+ ->post()
+ ->action('OC\Core\Avatar\Controller', 'postCroppedAvatar');
// Not specifically routed
$this->create('app_css', '/apps/{app}/{file}')
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index 1e0f4a75c3c..71bec11d219 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -49,6 +49,9 @@
<span id="expand" tabindex="0" role="link">
<span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span>
<img class="svg" src="<?php print_unescaped(image_path('', 'actions/caret.svg')); ?>" />
+ <?php if ($_['enableAvatars']): ?>
+ <div class="avatardiv"></div>
+ <?php endif; ?>
</span>
<div id="expanddiv">
<?php foreach($_['settingsnavigation'] as $entry):?>