aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2014-01-09 13:54:58 +0100
committerRobin Appelman <icewind@owncloud.com>2014-01-09 13:54:58 +0100
commit5d456c7cc21f7640435c4638932984a52b4cdbac (patch)
tree0227a865782fab4895f602a7c118d92e21998cbb
parentd50c7391d8e78c9555b073fb9ccc6a91d5da34bc (diff)
parentd8b8abb429d3d66598a16d25cf55f7dc19e3f996 (diff)
downloadnextcloud-server-5d456c7cc21f7640435c4638932984a52b4cdbac.tar.gz
nextcloud-server-5d456c7cc21f7640435c4638932984a52b4cdbac.zip
Merge branch 'master' into memcache-public
-rwxr-xr-x.htaccess3
m---------3rdparty0
-rw-r--r--apps/files/download.php7
-rw-r--r--apps/files/l10n/et_EE.php2
-rw-r--r--apps/files/l10n/ur.php7
-rw-r--r--apps/files_encryption/l10n/id.php37
-rw-r--r--apps/files_external/appinfo/app.php1
-rwxr-xr-xapps/files_external/lib/config.php26
-rw-r--r--apps/files_external/lib/owncloud.php51
-rw-r--r--apps/files_external/lib/webdav.php2
-rw-r--r--apps/files_external/tests/config.php7
-rw-r--r--apps/files_external/tests/owncloud.php31
-rw-r--r--apps/files_sharing/l10n/el.php10
-rw-r--r--apps/files_sharing/l10n/id.php15
-rw-r--r--apps/files_trashbin/download.php51
-rw-r--r--apps/files_trashbin/l10n/el.php4
-rw-r--r--apps/files_versions/download.php7
-rw-r--r--apps/files_versions/l10n/el.php2
-rw-r--r--apps/user_ldap/l10n/ur.php6
-rw-r--r--apps/user_ldap/lib/access.php145
-rw-r--r--apps/user_ldap/tests/user_ldap.php54
-rw-r--r--apps/user_ldap/user_ldap.php15
-rw-r--r--apps/user_ldap/user_proxy.php15
-rwxr-xr-xautotest.sh19
-rw-r--r--core/command/user/report.php61
-rw-r--r--core/l10n/da.php2
-rw-r--r--core/l10n/ur.php9
-rw-r--r--core/register_command.php1
-rw-r--r--core/routes.php3
-rw-r--r--l10n/da/core.po31
-rw-r--r--l10n/el/core.po26
-rw-r--r--l10n/el/files.po4
-rw-r--r--l10n/el/files_sharing.po16
-rw-r--r--l10n/el/files_trashbin.po31
-rw-r--r--l10n/el/files_versions.po21
-rw-r--r--l10n/el/settings.po4
-rw-r--r--l10n/el/user_ldap.po4
-rw-r--r--l10n/et_EE/files.po12
-rw-r--r--l10n/fr/files.po4
-rw-r--r--l10n/fr/files_sharing.po4
-rw-r--r--l10n/id/core.po26
-rw-r--r--l10n/id/files.po6
-rw-r--r--l10n/id/files_encryption.po83
-rw-r--r--l10n/id/files_sharing.po31
-rw-r--r--l10n/id/files_trashbin.po26
-rw-r--r--l10n/id/settings.po4
-rw-r--r--l10n/id/user_ldap.po6
-rw-r--r--l10n/templates/core.pot2
-rw-r--r--l10n/templates/files.pot2
-rw-r--r--l10n/templates/files_encryption.pot2
-rw-r--r--l10n/templates/files_external.pot2
-rw-r--r--l10n/templates/files_sharing.pot2
-rw-r--r--l10n/templates/files_trashbin.pot2
-rw-r--r--l10n/templates/files_versions.pot2
-rw-r--r--l10n/templates/lib.pot12
-rw-r--r--l10n/templates/private.pot12
-rw-r--r--l10n/templates/settings.pot2
-rw-r--r--l10n/templates/user_ldap.pot2
-rw-r--r--l10n/templates/user_webdavauth.pot2
-rw-r--r--l10n/ur/core.po775
-rw-r--r--l10n/ur/files.po413
-rw-r--r--l10n/ur/files_encryption.po201
-rw-r--r--l10n/ur/files_external.po123
-rw-r--r--l10n/ur/files_sharing.po84
-rw-r--r--l10n/ur/files_trashbin.po60
-rw-r--r--l10n/ur/files_versions.po43
-rw-r--r--l10n/ur/lib.po333
-rw-r--r--l10n/ur/settings.po668
-rw-r--r--l10n/ur/user_ldap.po513
-rw-r--r--l10n/ur/user_webdavauth.po33
-rw-r--r--lib/base.php8
-rw-r--r--lib/l10n/ur.php8
-rw-r--r--lib/private/connector/sabre/file.php2
-rw-r--r--lib/private/files.php7
-rw-r--r--lib/private/files/cache/homecache.php2
-rw-r--r--lib/private/files/view.php13
-rw-r--r--lib/private/helper.php6
-rw-r--r--lib/private/mimetypes.list.php3
-rw-r--r--lib/private/preview/movies.php2
-rw-r--r--lib/private/preview/office.php2
-rwxr-xr-xlib/private/request.php23
-rw-r--r--lib/private/response.php14
-rw-r--r--lib/private/server.php6
-rw-r--r--lib/private/setup.php3
-rw-r--r--lib/private/template/cssresourcelocator.php2
-rw-r--r--lib/private/urlgenerator.php25
-rw-r--r--lib/private/user/backend.php17
-rw-r--r--lib/private/user/database.php15
-rw-r--r--lib/private/user/dummy.php9
-rw-r--r--lib/private/user/manager.php22
-rw-r--r--lib/public/response.php9
-rw-r--r--tests/enable_all.php1
-rw-r--r--tests/lib/files/cache/homecache.php18
-rw-r--r--tests/lib/files/view.php42
-rw-r--r--tests/lib/request.php50
-rw-r--r--tests/lib/user/manager.php72
96 files changed, 4265 insertions, 338 deletions
diff --git a/.htaccess b/.htaccess
index 08e2a82facb..fa6263c7ffe 100755
--- a/.htaccess
+++ b/.htaccess
@@ -38,3 +38,6 @@ DirectoryIndex index.php index.html
</IfModule>
AddDefaultCharset utf-8
Options -Indexes
+<IfModule pagespeed_module>
+ ModPagespeed Off
+</IfModule>
diff --git a/3rdparty b/3rdparty
-Subproject 42efd966284debadf83b761367e529bc45f806d
+Subproject 95ab25149c4903650a1113c01ccb1732fb089f1
diff --git a/apps/files/download.php b/apps/files/download.php
index e3fe24e45d7..6b055e99a53 100644
--- a/apps/files/download.php
+++ b/apps/files/download.php
@@ -37,12 +37,7 @@ if(!\OC\Files\Filesystem::file_exists($filename)) {
$ftype=\OC\Files\Filesystem::getMimeType( $filename );
header('Content-Type:'.$ftype);
-if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
- header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' );
-} else {
- header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) )
- . '; filename="' . rawurlencode( basename($filename) ) . '"' );
-}
+OCP\Response::setContentDispositionHeader(basename($filename), 'attachment');
OCP\Response::disableCaching();
header('Content-Length: '.\OC\Files\Filesystem::filesize($filename));
diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php
index 98f74e1f001..fd031527738 100644
--- a/apps/files/l10n/et_EE.php
+++ b/apps/files/l10n/et_EE.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Faili nimi ei tohi sisaldada \"/\". Palun vali mõni teine nimi.",
"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",
"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.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} on juba olemas",
"Could not create file" => "Ei suuda luua faili",
"Could not create folder" => "Ei suuda luua kataloogi",
+"Error fetching URL" => "Viga URL-i haaramisel",
"Share" => "Jaga",
"Delete permanently" => "Kustuta jäädavalt",
"Rename" => "Nimeta ümber",
diff --git a/apps/files/l10n/ur.php b/apps/files/l10n/ur.php
new file mode 100644
index 00000000000..0157af093e9
--- /dev/null
+++ b/apps/files/l10n/ur.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/id.php b/apps/files_encryption/l10n/id.php
index 32c348bd8ba..a719d445820 100644
--- a/apps/files_encryption/l10n/id.php
+++ b/apps/files_encryption/l10n/id.php
@@ -1,6 +1,41 @@
<?php
$TRANSLATIONS = array(
+"Recovery key successfully enabled" => "Kunci pemulihan berhasil diaktifkan",
+"Could not enable recovery key. Please check your recovery key password!" => "Tidak dapat mengaktifkan kunci pemulihan. Silakan periksa sandi kunci pemulihan Anda!",
+"Recovery key successfully disabled" => "Kunci pemulihan berhasil dinonaktifkan",
+"Could not disable recovery key. Please check your recovery key password!" => "Tidak dapat menonaktifkan kunci pemulihan. Silakan periksa sandi kunci pemulihan Anda!",
+"Password successfully changed." => "Sandi berhasil diubah",
+"Could not change the password. Maybe the old password was not correct." => "Tidak dapat mengubah sandi. Kemungkinan sandi lama yang dimasukkan salah.",
+"Private key password successfully updated." => "Sandi kunci privat berhasil diperbarui.",
+"Could not update the private key password. Maybe the old password was not correct." => "Tidak dapat memperbarui sandi kunci privat. Kemungkinan sandi lama yang Anda masukkan salah.",
+"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.",
+"Unknown error please check your system settings or contact your administrator" => "Kesalahan tak dikenal, silakan periksa pengaturan sistem Anda atau hubungi admin.",
+"Missing requirements." => "Persyaratan yang hilang.",
+"Following users are not set up for encryption:" => "Pengguna berikut belum diatur untuk enkripsi:",
+"Initial encryption started... This can take some time. Please wait." => "Inisial enskripsi dijalankan... Ini dapat memakan waktu. Silakan tunggu.",
"Saving..." => "Menyimpan...",
-"Encryption" => "Enkripsi"
+"Go directly to your " => "Langsung ke anda",
+"personal settings" => "pengaturan pribadi",
+"Encryption" => "Enkripsi",
+"Enable recovery key (allow to recover users files in case of password loss):" => "Aktifkan kunci pemulihan (memungkinkan pengguna untuk memulihkan berkas dalam kasus kehilangan sandi):",
+"Recovery key password" => "Sandi kunci pemulihan",
+"Repeat Recovery key password" => "Ulangi sandi kunci Pemulihan",
+"Enabled" => "Diaktifkan",
+"Disabled" => "Dinonaktifkan",
+"Change recovery key password:" => "Ubah sandi kunci pemulihan:",
+"Old Recovery key password" => "Sandi kunci Pemulihan Lama",
+"New Recovery key password" => "Sandi kunci Pemulihan Baru",
+"Repeat New Recovery key password" => "Ulangi sandi kunci Pemulihan baru",
+"Change Password" => "Ubah sandi",
+"Your private key password no longer match your log-in password:" => "Sandi kunci privat Anda tidak lagi cocok dengan sandi masuk:",
+"Set your old private key password to your current log-in password." => "Atur sandi kunci privat lama Anda sebagai sandi masuk Anda saat ini.",
+" If you don't remember your old password you can ask your administrator to recover your files." => "Jika Anda tidak ingat sandi lama, Anda dapat meminta administrator Anda untuk memulihkan berkas.",
+"Old log-in password" => "Sandi masuk yang lama",
+"Current log-in password" => "Sandi masuk saat ini",
+"Update Private Key Password" => "Perbarui Sandi Kunci Privat",
+"Enable password recovery:" => "Aktifkan sandi pemulihan:",
+"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Mengaktifkan opsi ini memungkinkan Anda untuk mendapatkan kembali akses ke berkas terenkripsi Anda dalam kasus kehilangan sandi",
+"File recovery settings updated" => "Pengaturan pemulihan berkas diperbarui",
+"Could not update file recovery" => "Tidak dapat memperbarui pemulihan berkas"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index f78f3abf0fa..5b1cd86a170 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -9,6 +9,7 @@
OC::$CLASSPATH['OC\Files\Storage\StreamWrapper'] = 'files_external/lib/streamwrapper.php';
OC::$CLASSPATH['OC\Files\Storage\FTP'] = 'files_external/lib/ftp.php';
OC::$CLASSPATH['OC\Files\Storage\DAV'] = 'files_external/lib/webdav.php';
+OC::$CLASSPATH['OC\Files\Storage\OwnCloud'] = 'files_external/lib/owncloud.php';
OC::$CLASSPATH['OC\Files\Storage\Google'] = 'files_external/lib/google.php';
OC::$CLASSPATH['OC\Files\Storage\Swift'] = 'files_external/lib/swift.php';
OC::$CLASSPATH['OC\Files\Storage\SMB'] = 'files_external/lib/smb.php';
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index 122cc57debc..2abf7acb91e 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -114,14 +114,24 @@ class OC_Mount_Config {
}
}
- if(OC_Mount_Config::checkcurl()) $backends['\OC\Files\Storage\DAV']=array(
- 'backend' => 'ownCloud / WebDAV',
- 'configuration' => array(
- 'host' => 'URL',
- 'user' => 'Username',
- 'password' => '*Password',
- 'root' => '&Root',
- 'secure' => '!Secure https://'));
+ if(OC_Mount_Config::checkcurl()){
+ $backends['\OC\Files\Storage\DAV']=array(
+ 'backend' => 'WebDAV',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'root' => '&Root',
+ 'secure' => '!Secure https://'));
+ $backends['\OC\Files\Storage\OwnCloud']=array(
+ 'backend' => 'ownCloud',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'root' => '&Remote subfolder',
+ 'secure' => '!Secure https://'));
+ }
$backends['\OC\Files\Storage\SFTP']=array(
'backend' => 'SFTP',
diff --git a/apps/files_external/lib/owncloud.php b/apps/files_external/lib/owncloud.php
new file mode 100644
index 00000000000..98314102a64
--- /dev/null
+++ b/apps/files_external/lib/owncloud.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright (c) 2013 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Storage;
+
+/**
+ * ownCloud backend for external storage based on DAV backend.
+ *
+ * The ownCloud URL consists of three parts:
+ * http://%host/%context/remote.php/webdav/%root
+ *
+ */
+class OwnCloud extends \OC\Files\Storage\DAV{
+ const OC_URL_SUFFIX = 'remote.php/webdav';
+
+ public function __construct($params) {
+ // extract context path from host if specified
+ // (owncloud install path on host)
+ $host = $params['host'];
+ $contextPath = '';
+ $hostSlashPos = strpos($host, '/');
+ if ($hostSlashPos !== false){
+ $contextPath = substr($host, $hostSlashPos);
+ $host = substr($host, 0, $hostSlashPos);
+ }
+
+ if (substr($contextPath , 1) !== '/'){
+ $contextPath .= '/';
+ }
+
+ if (isset($params['root'])){
+ $root = $params['root'];
+ if (substr($root, 1) !== '/'){
+ $root = '/' . $root;
+ }
+ }
+ else{
+ $root = '/';
+ }
+
+ $params['host'] = $host;
+ $params['root'] = $contextPath . self::OC_URL_SUFFIX . $root;
+
+ parent::__construct($params);
+ }
+}
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index 02f6cb5fc4f..cc7f3a5c9e2 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -79,7 +79,7 @@ class DAV extends \OC\Files\Storage\Common{
return 'webdav::' . $this->user . '@' . $this->host . '/' . $this->root;
}
- private function createBaseUri() {
+ protected function createBaseUri() {
$baseUri='http';
if ($this->secure) {
$baseUri.='s';
diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php
index a523809e2f9..e296bfcb5b2 100644
--- a/apps/files_external/tests/config.php
+++ b/apps/files_external/tests/config.php
@@ -23,6 +23,13 @@ return array(
'password'=>'test',
'root'=>'/owncloud/files/webdav.php',
),
+ 'owncloud'=>array(
+ 'run'=>true,
+ 'host'=>'localhost/owncloud',
+ 'user'=>'test',
+ 'password'=>'test',
+ 'root'=>'',
+ ),
'google'=>array(
'run'=> false,
'configured' => 'true',
diff --git a/apps/files_external/tests/owncloud.php b/apps/files_external/tests/owncloud.php
new file mode 100644
index 00000000000..408a55864f2
--- /dev/null
+++ b/apps/files_external/tests/owncloud.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Copyright (c) 2013 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Storage;
+
+class OwnCloud extends Storage {
+
+ private $config;
+
+ public function setUp() {
+ $id = uniqid();
+ $this->config = include('files_external/tests/config.php');
+ if ( ! is_array($this->config) or ! isset($this->config['owncloud']) or ! $this->config['owncloud']['run']) {
+ $this->markTestSkipped('ownCloud backend not configured');
+ }
+ $this->config['owncloud']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+ $this->instance = new \OC\Files\Storage\OwnCloud($this->config['owncloud']);
+ $this->instance->mkdir('/');
+ }
+
+ public function tearDown() {
+ if ($this->instance) {
+ $this->instance->rmdir('/');
+ }
+ }
+}
diff --git a/apps/files_sharing/l10n/el.php b/apps/files_sharing/l10n/el.php
index 79387a91472..3ea666504b1 100644
--- a/apps/files_sharing/l10n/el.php
+++ b/apps/files_sharing/l10n/el.php
@@ -1,19 +1,19 @@
<?php
$TRANSLATIONS = array(
"This share is password-protected" => "Αυτός ο κοινόχρηστος φάκελος προστατεύεται με κωδικό",
-"The password is wrong. Try again." => "Εσφαλμένο συνθηματικό. Προσπαθήστε ξανά.",
-"Password" => "Συνθηματικό",
+"The password is wrong. Try again." => "Εσφαλμένος κωδικός πρόσβασης. Προσπαθήστε ξανά.",
+"Password" => "Κωδικός πρόσβασης",
"Sorry, this link doesn’t seem to work anymore." => "Συγγνώμη, αυτός ο σύνδεσμος μοιάζει να μην ισχύει πια.",
"Reasons might be:" => "Οι λόγοι μπορεί να είναι:",
"the item was removed" => "το αντικείμενο απομακρύνθηκε",
"the link expired" => "ο σύνδεσμος έληξε",
"sharing is disabled" => "ο διαμοιρασμός απενεργοποιήθηκε",
"For more info, please ask the person who sent this link." => "Για περισσότερες πληροφορίες, παρακαλώ ρωτήστε το άτομο που σας έστειλε αυτόν τον σύνδεσμο.",
-"%s shared the folder %s with you" => "%s μοιράστηκε τον φάκελο %s μαζί σας",
-"%s shared the file %s with you" => "%s μοιράστηκε το αρχείο %s μαζί σας",
+"%s shared the folder %s with you" => "Ο %s μοιράστηκε τον φάκελο %s μαζί σας",
+"%s shared the file %s with you" => "Ο %s μοιράστηκε το αρχείο %s μαζί σας",
"Download" => "Λήψη",
"Upload" => "Μεταφόρτωση",
-"Cancel upload" => "Ακύρωση αποστολής",
+"Cancel upload" => "Ακύρωση μεταφόρτωσης",
"No preview available for" => "Δεν υπάρχει διαθέσιμη προεπισκόπηση για",
"Direct link" => "Άμεσος σύνδεσμος"
);
diff --git a/apps/files_sharing/l10n/id.php b/apps/files_sharing/l10n/id.php
index e91ef94bf38..865a951c2d2 100644
--- a/apps/files_sharing/l10n/id.php
+++ b/apps/files_sharing/l10n/id.php
@@ -1,11 +1,20 @@
<?php
$TRANSLATIONS = array(
+"This share is password-protected" => "Berbagi ini dilindungi sandi",
+"The password is wrong. Try again." => "Sandi salah. Coba lagi",
"Password" => "Sandi",
+"Sorry, this link doesn’t seem to work anymore." => "Maaf, tautan ini tampaknya tidak berfungsi lagi.",
+"Reasons might be:" => "Alasan mungkin:",
+"the item was removed" => "item telah dihapus",
+"the link expired" => "tautan telah kadaluarsa",
+"sharing is disabled" => "berbagi dinonaktifkan",
+"For more info, please ask the person who sent this link." => "Untuk info lebih lanjut, silakan tanyakan orang yang mengirim tautan ini.",
"%s shared the folder %s with you" => "%s membagikan folder %s dengan Anda",
-"%s shared the file %s with you" => "%s membagikan file %s dengan Anda",
+"%s shared the file %s with you" => "%s membagikan berkas %s dengan Anda",
"Download" => "Unduh",
"Upload" => "Unggah",
-"Cancel upload" => "Batal pengunggahan",
-"No preview available for" => "Tidak ada pratinjau tersedia untuk"
+"Cancel upload" => "Batal unggah",
+"No preview available for" => "Tidak ada pratinjau yang tersedia untuk",
+"Direct link" => "Tautan langsung"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_trashbin/download.php b/apps/files_trashbin/download.php
deleted file mode 100644
index 60328e1dddb..00000000000
--- a/apps/files_trashbin/download.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-/**
-* ownCloud - trash bin
-*
-* @author Bjoern Schiessle
-* @copyright 2013 Bjoern Schiessle schiessle@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/>.
-*
-*/
-
-// Check if we are a user
-OCP\User::checkLoggedIn();
-
-$filename = $_GET["file"];
-
-$view = new OC_FilesystemView('/'.\OCP\User::getUser().'/files_trashbin/files');
-
-if(!$view->file_exists($filename)) {
- header("HTTP/1.0 404 Not Found");
- $tmpl = new OCP\Template( '', '404', 'guest' );
- $tmpl->assign('file', $filename);
- $tmpl->printPage();
- exit;
-}
-
-$ftype=$view->getMimeType( $filename );
-
-header('Content-Type:'.$ftype);if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
- header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' );
-} else {
- header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) )
- . '; filename="' . rawurlencode( basename($filename) ) . '"' );
-}
-OCP\Response::disableCaching();
-header('Content-Length: '. $view->filesize($filename));
-
-OC_Util::obEnd();
-$view->readfile( $filename );
diff --git a/apps/files_trashbin/l10n/el.php b/apps/files_trashbin/l10n/el.php
index ffeafb7e9d5..b4ee30c578d 100644
--- a/apps/files_trashbin/l10n/el.php
+++ b/apps/files_trashbin/l10n/el.php
@@ -3,11 +3,11 @@ $TRANSLATIONS = array(
"Couldn't delete %s permanently" => "Αδύνατη η μόνιμη διαγραφή του %s",
"Couldn't restore %s" => "Αδυναμία επαναφοράς %s",
"Error" => "Σφάλμα",
-"restored" => "έγινε επαναφορά",
+"restored" => "επαναφέρθηκαν",
"Nothing in here. Your trash bin is empty!" => "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είναι άδειος!",
"Name" => "Όνομα",
"Restore" => "Επαναφορά",
-"Deleted" => "Διαγράφηκε",
+"Deleted" => "Διαγραμμένα",
"Delete" => "Διαγραφή",
"Deleted Files" => "Διαγραμμένα Αρχεία"
);
diff --git a/apps/files_versions/download.php b/apps/files_versions/download.php
index 040a662e61b..2fe56d2e638 100644
--- a/apps/files_versions/download.php
+++ b/apps/files_versions/download.php
@@ -36,12 +36,7 @@ $view = new OC\Files\View('/');
$ftype = $view->getMimeType('/'.$uid.'/files/'.$filename);
header('Content-Type:'.$ftype);
-if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
- header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' );
-} else {
- header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) )
- . '; filename="' . rawurlencode( basename($filename) ) . '"' );
-}
+OCP\Response::setContentDispositionHeader(basename($filename), 'attachment');
OCP\Response::disableCaching();
header('Content-Length: '.$view->filesize($versionName));
diff --git a/apps/files_versions/l10n/el.php b/apps/files_versions/l10n/el.php
index af608e7c042..5337f3b5a48 100644
--- a/apps/files_versions/l10n/el.php
+++ b/apps/files_versions/l10n/el.php
@@ -1,6 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Could not revert: %s" => "Αδυναμία επαναφοράς του: %s",
+"Could not revert: %s" => "Αδυναμία επαναφοράς: %s",
"Versions" => "Εκδόσεις",
"Failed to revert {file} to revision {timestamp}." => "Αποτυχία επαναφοράς του {file} στην αναθεώρηση {timestamp}.",
"More versions..." => "Περισσότερες εκδόσεις...",
diff --git a/apps/user_ldap/l10n/ur.php b/apps/user_ldap/l10n/ur.php
new file mode 100644
index 00000000000..3a1e002311c
--- /dev/null
+++ b/apps/user_ldap/l10n/ur.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%s group found_::_%s groups found_" => array("",""),
+"_%s user found_::_%s users found_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index ecc74b6cf54..72f9c740921 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -634,6 +634,10 @@ class Access extends LDAPUtility {
return $this->search($filter, $this->connection->ldapBaseUsers, $attr, $limit, $offset);
}
+ public function countUsers($filter, $attr = array('dn'), $limit = null, $offset = null) {
+ return $this->count($filter, $this->connection->ldapBaseGroups, $attr, $limit, $offset);
+ }
+
/**
* @brief executes an LDAP search, optimized for Groups
* @param $filter the LDAP filter for the search
@@ -647,61 +651,68 @@ class Access extends LDAPUtility {
}
/**
- * @brief executes an LDAP search
+ * @brief prepares and executes an LDAP search operation
* @param $filter the LDAP filter for the search
* @param $base an array containing the LDAP subtree(s) that shall be searched
* @param $attr optional, array, one or more attributes that shall be
* retrieved. Results will according to the order in the array.
- * @returns array with the search result
- *
- * Executes an LDAP search
+ * @param $limit optional, maximum results to be counted
+ * @param $offset optional, a starting point
+ * @returns array with the search result as first value and pagedSearchOK as
+ * second | false if not successful
*/
- private function search($filter, $base, $attr = null, $limit = null, $offset = null, $skipHandling = false) {
+ private function executeSearch($filter, $base, &$attr = null, $limit = null, $offset = null) {
if(!is_null($attr) && !is_array($attr)) {
$attr = array(mb_strtolower($attr, 'UTF-8'));
}
// See if we have a resource, in case not cancel with message
- $link_resource = $this->connection->getConnectionResource();
- if(!$this->ldap->isResource($link_resource)) {
+ $cr = $this->connection->getConnectionResource();
+ if(!$this->ldap->isResource($cr)) {
// Seems like we didn't find any resource.
// Return an empty array just like before.
\OCP\Util::writeLog('user_ldap', 'Could not search, because resource is missing.', \OCP\Util::DEBUG);
- return array();
+ return false;
}
//check wether paged search should be attempted
$pagedSearchOK = $this->initPagedSearch($filter, $base, $attr, $limit, $offset);
- $linkResources = array_pad(array(), count($base), $link_resource);
+ $linkResources = array_pad(array(), count($base), $cr);
$sr = $this->ldap->search($linkResources, $base, $filter, $attr);
- $error = $this->ldap->errno($link_resource);
+ $error = $this->ldap->errno($cr);
if(!is_array($sr) || $error !== 0) {
\OCP\Util::writeLog('user_ldap',
- 'Error when searching: '.$this->ldap->error($link_resource).
- ' code '.$this->ldap->errno($link_resource),
+ 'Error when searching: '.$this->ldap->error($cr).
+ ' code '.$this->ldap->errno($cr),
\OCP\Util::ERROR);
\OCP\Util::writeLog('user_ldap', 'Attempt for Paging? '.print_r($pagedSearchOK, true), \OCP\Util::ERROR);
- return array();
+ return false;
}
- // Do the server-side sorting
- foreach(array_reverse($attr) as $sortAttr){
- foreach($sr as $searchResource) {
- $this->ldap->sort($link_resource, $searchResource, $sortAttr);
- }
- }
+ return array($sr, $pagedSearchOK);
+ }
- $findings = array();
- foreach($sr as $key => $res) {
- $findings = array_merge($findings, $this->ldap->getEntries($link_resource, $res ));
- }
+ /**
+ * @brief processes an LDAP paged search operation
+ * @param $sr the array containing the LDAP search resources
+ * @param $filter the LDAP filter for the search
+ * @param $base an array containing the LDAP subtree(s) that shall be searched
+ * @param $iFoundItems number of results in the search operation
+ * @param $limit maximum results to be counted
+ * @param $offset a starting point
+ * @param $pagedSearchOK whether a paged search has been executed
+ * @param $skipHandling required for paged search when cookies to
+ * prior results need to be gained
+ * @returns array with the search result as first value and pagedSearchOK as
+ * second | false if not successful
+ */
+ private function processPagedSearchStatus($sr, $filter, $base, $iFoundItems, $limit, $offset, $pagedSearchOK, $skipHandling) {
if($pagedSearchOK) {
- \OCP\Util::writeLog('user_ldap', 'Paged search successful', \OCP\Util::INFO);
+ $cr = $this->connection->getConnectionResource();
foreach($sr as $key => $res) {
$cookie = null;
- if($this->ldap->controlPagedResultResponse($link_resource, $res, $cookie)) {
- \OCP\Util::writeLog('user_ldap', 'Set paged search cookie', \OCP\Util::INFO);
+ if($this->ldap->controlPagedResultResponse($cr, $res, $cookie)) {
$this->setPagedResultCookie($base[$key], $filter, $limit, $offset, $cookie);
}
}
@@ -713,7 +724,7 @@ class Access extends LDAPUtility {
// if count is bigger, then the server does not support
// paged search. Instead, he did a normal search. We set a
// flag here, so the callee knows how to deal with it.
- if($findings['count'] <= $limit) {
+ if($iFoundItems <= $limit) {
$this->pagedSearchedSuccessful = true;
}
} else {
@@ -721,6 +732,86 @@ class Access extends LDAPUtility {
\OCP\Util::writeLog('user_ldap', 'Paged search failed :(', \OCP\Util::INFO);
}
}
+ }
+
+ /**
+ * @brief executes an LDAP search, but counts the results only
+ * @param $filter the LDAP filter for the search
+ * @param $base an array containing the LDAP subtree(s) that shall be searched
+ * @param $attr optional, array, one or more attributes that shall be
+ * retrieved. Results will according to the order in the array.
+ * @param $limit optional, maximum results to be counted
+ * @param $offset optional, a starting point
+ * @param $skipHandling indicates whether the pages search operation is
+ * completed
+ * @returns int | false if the search could not be initialized
+ *
+ */
+ private function count($filter, $base, $attr = null, $limit = null, $offset = null, $skipHandling = false) {
+ \OCP\Util::writeLog('user_ldap', 'Count filter: '.print_r($filter, true), \OCP\Util::DEBUG);
+ $search = $this->executeSearch($filter, $base, $attr, $limit, $offset);
+ if($search === false) {
+ return false;
+ }
+ list($sr, $pagedSearchOK) = $search;
+ $cr = $this->connection->getConnectionResource();
+ $counter = 0;
+ foreach($sr as $key => $res) {
+ $count = $this->ldap->countEntries($cr, $res);
+ if($count !== false) {
+ $counter += $count;
+ }
+ }
+
+ $this->processPagedSearchStatus($sr, $filter, $base, $counter, $limit,
+ $offset, $pagedSearchOK, $skipHandling);
+
+ return $counter;
+ }
+
+ /**
+ * @brief executes an LDAP search
+ * @param $filter the LDAP filter for the search
+ * @param $base an array containing the LDAP subtree(s) that shall be searched
+ * @param $attr optional, array, one or more attributes that shall be
+ * retrieved. Results will according to the order in the array.
+ * @returns array with the search result
+ *
+ * Executes an LDAP search
+ */
+ private function search($filter, $base, $attr = null, $limit = null, $offset = null, $skipHandling = false) {
+ $search = $this->executeSearch($filter, $base, $attr, $limit, $offset);
+ if($search === false) {
+ return array();
+ }
+ list($sr, $pagedSearchOK) = $search;
+ $cr = $this->connection->getConnectionResource();
+
+ if($skipHandling) {
+ //i.e. result do not need to be fetched, we just need the cookie
+ //thus pass 1 or any other value as $iFoundItems because it is not
+ //used
+ $this->processPagedSearchStatus($sr, $filter, $base, 1, $limit,
+ $offset, $pagedSearchOK,
+ $skipHandling);
+ return;
+ }
+
+ // Do the server-side sorting
+ foreach(array_reverse($attr) as $sortAttr){
+ foreach($sr as $searchResource) {
+ $this->ldap->sort($cr, $searchResource, $sortAttr);
+ }
+ }
+
+ $findings = array();
+ foreach($sr as $key => $res) {
+ $findings = array_merge($findings, $this->ldap->getEntries($cr , $res ));
+ }
+
+ $this->processPagedSearchStatus($sr, $filter, $base, $findings['count'],
+ $limit, $offset, $pagedSearchOK,
+ $skipHandling);
// if we're here, probably no connection resource is returned.
// to make ownCloud behave nicely, we simply give back an empty array.
diff --git a/apps/user_ldap/tests/user_ldap.php b/apps/user_ldap/tests/user_ldap.php
index 6b9b8b3e185..9193a005ae5 100644
--- a/apps/user_ldap/tests/user_ldap.php
+++ b/apps/user_ldap/tests/user_ldap.php
@@ -408,4 +408,58 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
//no test for getDisplayNames, because it just invokes getUsers and
//getDisplayName
+
+ public function testCountUsers() {
+ $access = $this->getAccessMock();
+
+ $access->connection->expects($this->once())
+ ->method('__get')
+ ->will($this->returnCallback(function($name) {
+ if($name === 'ldapLoginFilter') {
+ return 'uid=%uid';
+ }
+ return null;
+ }));
+
+ $access->expects($this->once())
+ ->method('countUsers')
+ ->will($this->returnCallback(function($filter, $a, $b, $c) {
+ if($filter !== 'uid=*') {
+ return false;
+ }
+ return 5;
+ }));
+
+ $backend = new UserLDAP($access);
+
+ $result = $backend->countUsers();
+ $this->assertEquals(5, $result);
+ }
+
+ public function testCountUsersFailing() {
+ $access = $this->getAccessMock();
+
+ $access->connection->expects($this->once())
+ ->method('__get')
+ ->will($this->returnCallback(function($name) {
+ if($name === 'ldapLoginFilter') {
+ return 'invalidFilter';
+ }
+ return null;
+ }));
+
+ $access->expects($this->once())
+ ->method('countUsers')
+ ->will($this->returnCallback(function($filter, $a, $b, $c) {
+ if($filter !== 'uid=*') {
+ return false;
+ }
+ return 5;
+ }));
+
+ $backend = new UserLDAP($access);
+
+ $result = $backend->countUsers();
+ $this->assertFalse($result);
+ }
} \ No newline at end of file
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index 527a5c10b85..a19af86086c 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -363,7 +363,8 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
return (bool)((OC_USER_BACKEND_CHECK_PASSWORD
| OC_USER_BACKEND_GET_HOME
| OC_USER_BACKEND_GET_DISPLAYNAME
- | OC_USER_BACKEND_PROVIDE_AVATAR)
+ | OC_USER_BACKEND_PROVIDE_AVATAR
+ | OC_USER_BACKEND_COUNT_USERS)
& $actions);
}
@@ -373,4 +374,16 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
public function hasUserListings() {
return true;
}
+
+ /**
+ * counts the users in LDAP
+ *
+ * @return int | bool
+ */
+ public function countUsers() {
+ $filter = \OCP\Util::mb_str_replace(
+ '%uid', '*', $this->access->connection->ldapLoginFilter, 'UTF-8');
+ $entries = $this->access->countUsers($filter);
+ return $entries;
+ }
}
diff --git a/apps/user_ldap/user_proxy.php b/apps/user_ldap/user_proxy.php
index b073b143e74..5ad127197f3 100644
--- a/apps/user_ldap/user_proxy.php
+++ b/apps/user_ldap/user_proxy.php
@@ -210,4 +210,19 @@ class User_Proxy extends lib\Proxy implements \OCP\UserInterface {
return $this->refBackend->hasUserListings();
}
+ /**
+ * @brief Count the number of users
+ * @returns int | bool
+ */
+ public function countUsers() {
+ $users = false;
+ foreach($this->backends as $backend) {
+ $backendUsers = $backend->countUsers();
+ if ($backendUsers !== false) {
+ $users += $backendUsers;
+ }
+ }
+ return $users;
+ }
+
}
diff --git a/autotest.sh b/autotest.sh
index 3562b0feb04..94fc692a94d 100755
--- a/autotest.sh
+++ b/autotest.sh
@@ -13,6 +13,7 @@ ADMINLOGIN=admin$EXECUTOR_NUMBER
BASEDIR=$PWD
DBCONFIGS="sqlite mysql pgsql oci"
+PHPUNIT=$(which phpunit)
function print_syntax {
echo -e "Syntax: ./autotest.sh [dbconfigname] [testfile]\n" >&2
@@ -23,6 +24,20 @@ function print_syntax {
echo -e "\nIf no arguments are specified, all tests will be run with all database configs" >&2
}
+if ! [ -x $PHPUNIT ]; then
+ echo "phpunit executable not found, please install phpunit version >= 3.7" >&2
+ exit 3
+fi
+
+PHPUNIT_VERSION=$($PHPUNIT --version | cut -d" " -f2)
+PHPUNIT_MAJOR_VERSION=$(echo $PHPUNIT_VERSION | cut -d"." -f1)
+PHPUNIT_MINOR_VERSION=$(echo $PHPUNIT_VERSION | cut -d"." -f2)
+
+if ! [ $PHPUNIT_MAJOR_VERSION -gt 3 -o \( $PHPUNIT_MAJOR_VERSION -eq 3 -a $PHPUNIT_MINOR_VERSION -ge 7 \) ]; then
+ echo "phpunit version >= 3.7 required. Version found: $PHPUNIT_VERSION" >&2
+ exit 4
+fi
+
if ! [ -w config -a -w config/config.php ]; then
echo "Please enable write permissions on config and config/config.php" >&2
exit 1
@@ -179,10 +194,10 @@ EOF
mkdir coverage-html-$1
php -f enable_all.php
if [ -z "$NOCOVERAGE" ]; then
- phpunit --configuration phpunit-autotest.xml --log-junit autotest-results-$1.xml --coverage-clover autotest-clover-$1.xml --coverage-html coverage-html-$1 $2 $3
+ $PHPUNIT --configuration phpunit-autotest.xml --log-junit autotest-results-$1.xml --coverage-clover autotest-clover-$1.xml --coverage-html coverage-html-$1 $2 $3
else
echo "No coverage"
- phpunit --configuration phpunit-autotest.xml --log-junit autotest-results-$1.xml $2 $3
+ $PHPUNIT --configuration phpunit-autotest.xml --log-junit autotest-results-$1.xml $2 $3
fi
}
diff --git a/core/command/user/report.php b/core/command/user/report.php
new file mode 100644
index 00000000000..f95ba251bcc
--- /dev/null
+++ b/core/command/user/report.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Core\Command\User;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Helper\TableHelper;
+
+class Report extends Command {
+ protected function configure() {
+ $this
+ ->setName('user:report')
+ ->setDescription('shows how many users have access');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output) {
+ $table = $this->getHelperSet()->get('table');
+ $table->setHeaders(array('User Report', ''));
+ $userCountArray = $this->countUsers();
+ if(!empty($userCountArray)) {
+ $total = 0;
+ $rows = array();
+ foreach($userCountArray as $classname => $users) {
+ $total += $users;
+ $rows[] = array($classname, $users);
+ }
+
+ $rows[] = array(' ');
+ $rows[] = array('total users', $total);
+ } else {
+ $rows[] = array('No backend enabled that supports user counting', '');
+ }
+
+ $userDirectoryCount = $this->countUserDirectories();
+ $rows[] = array(' ');
+ $rows[] = array('user directories', $userDirectoryCount);
+
+ $table->setRows($rows);
+ $table->render($output);
+ }
+
+ private function countUsers() {
+ \OC_App::loadApps(array('authentication'));
+ $userManager = \OC::$server->getUserManager();
+ return $userManager->countUsers();
+ }
+
+ private function countUserDirectories() {
+ $dataview = new \OC\Files\View('/');
+ $userDirectories = $dataview->getDirectoryContent('/', 'httpd/unix-directory');
+ return count($userDirectories);
+ }
+} \ No newline at end of file
diff --git a/core/l10n/da.php b/core/l10n/da.php
index 8aa68335458..9c7fdc889f8 100644
--- a/core/l10n/da.php
+++ b/core/l10n/da.php
@@ -153,7 +153,7 @@ $TRANSLATIONS = array(
"Database tablespace" => "Database tabelplads",
"Database host" => "Databasehost",
"Finish setup" => "Afslut opsætning",
-"Finishing …" => "Færdigbehandling ...",
+"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",
diff --git a/core/l10n/ur.php b/core/l10n/ur.php
new file mode 100644
index 00000000000..ffcdde48d47
--- /dev/null
+++ b/core/l10n/ur.php
@@ -0,0 +1,9 @@
+<?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("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/register_command.php b/core/register_command.php
index e4f3b124365..2efa838e9ee 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -15,3 +15,4 @@ $application->add(new OC\Core\Command\App\Disable());
$application->add(new OC\Core\Command\App\Enable());
$application->add(new OC\Core\Command\App\ListApps());
$application->add(new OC\Core\Command\Maintenance\Repair(new \OC\Repair()));
+$application->add(new OC\Core\Command\User\Report());
diff --git a/core/routes.php b/core/routes.php
index 5009243d59f..f8454877e03 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -7,6 +7,7 @@
*/
// Post installation check
+/** @var $this OC_Router */
$this->create('post_setup_check', '/post-setup-check')
->action('OC_Setup', 'postSetupCheck');
@@ -61,7 +62,7 @@ $this->create('core_tags_delete', '/tags/{type}/delete')
->action('OC\Core\Tags\Controller', 'deleteTags')
->requirements(array('type'));
// oC JS config
-$this->create('js_config', '/core/js/config.js')
+$this->create('js_config', '/core/js/oc.js')
->actionInclude('core/js/config.php');
// Routing
$this->create('core_ajax_routes', '/core/routes.json')
diff --git a/l10n/da/core.po b/l10n/da/core.po
index 95c55f74fe2..8ef32c0b7b6 100644
--- a/l10n/da/core.po
+++ b/l10n/da/core.po
@@ -7,15 +7,16 @@
# claus_chr <claus_chr@webspeed.dk>, 2013
# kaffeldt <kasper.affeldt@gmail.com>, 2013
# lodahl <leiflodahl@gmail.com>, 2013
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2014
# Ole Holm Frandsen <froksen@gmail.com>, 2013
# Peter Jespersen <flywheeldk@gmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-12-21 01:55-0500\n"
-"PO-Revision-Date: 2013-12-20 21:40+0000\n"
-"Last-Translator: lodahl <leiflodahl@gmail.com>\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\n"
+"PO-Revision-Date: 2014-01-07 08:50+0000\n"
+"Last-Translator: Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -158,55 +159,55 @@ msgstr "December"
msgid "Settings"
msgstr "Indstillinger"
-#: js/js.js:869
+#: js/js.js:872
msgid "seconds ago"
msgstr "sekunder siden"
-#: js/js.js:870
+#: js/js.js:873
msgid "%n minute ago"
msgid_plural "%n minutes ago"
msgstr[0] "%n minut siden"
msgstr[1] "%n minutter siden"
-#: js/js.js:871
+#: js/js.js:874
msgid "%n hour ago"
msgid_plural "%n hours ago"
msgstr[0] "%n time siden"
msgstr[1] "%n timer siden"
-#: js/js.js:872
+#: js/js.js:875
msgid "today"
msgstr "i dag"
-#: js/js.js:873
+#: js/js.js:876
msgid "yesterday"
msgstr "i går"
-#: js/js.js:874
+#: js/js.js:877
msgid "%n day ago"
msgid_plural "%n days ago"
msgstr[0] "%n dag siden"
msgstr[1] "%n dage siden"
-#: js/js.js:875
+#: js/js.js:878
msgid "last month"
msgstr "sidste måned"
-#: js/js.js:876
+#: js/js.js:879
msgid "%n month ago"
msgid_plural "%n months ago"
msgstr[0] "%n måned siden"
msgstr[1] "%n måneder siden"
-#: js/js.js:877
+#: js/js.js:880
msgid "months ago"
msgstr "måneder siden"
-#: js/js.js:878
+#: js/js.js:881
msgid "last year"
msgstr "sidste år"
-#: js/js.js:879
+#: js/js.js:882
msgid "years ago"
msgstr "år siden"
@@ -685,7 +686,7 @@ msgstr "Afslut opsætning"
#: templates/installation.php:185
msgid "Finishing …"
-msgstr "Færdigbehandling ..."
+msgstr "Færdigbehandler ..."
#: templates/layout.user.php:40
msgid ""
diff --git a/l10n/el/core.po b/l10n/el/core.po
index b0f4b9ecc5c..b453459ddc9 100644
--- a/l10n/el/core.po
+++ b/l10n/el/core.po
@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-01-04 01:55-0500\n"
-"PO-Revision-Date: 2014-01-02 17:40+0000\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 20:50+0000\n"
"Last-Translator: vkehayas <vkehayas@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
@@ -161,55 +161,55 @@ msgstr "Δεκέμβριος"
msgid "Settings"
msgstr "Ρυθμίσεις"
-#: js/js.js:869
+#: js/js.js:872
msgid "seconds ago"
msgstr "δευτερόλεπτα πριν"
-#: js/js.js:870
+#: js/js.js:873
msgid "%n minute ago"
msgid_plural "%n minutes ago"
msgstr[0] "%n λεπτό πριν"
msgstr[1] "%n λεπτά πριν"
-#: js/js.js:871
+#: js/js.js:874
msgid "%n hour ago"
msgid_plural "%n hours ago"
msgstr[0] "%n ώρα πριν"
msgstr[1] "%n ώρες πριν"
-#: js/js.js:872
+#: js/js.js:875
msgid "today"
msgstr "σήμερα"
-#: js/js.js:873
+#: js/js.js:876
msgid "yesterday"
msgstr "χτες"
-#: js/js.js:874
+#: js/js.js:877
msgid "%n day ago"
msgid_plural "%n days ago"
msgstr[0] "%n ημέρα πριν"
msgstr[1] "%n ημέρες πριν"
-#: js/js.js:875
+#: js/js.js:878
msgid "last month"
msgstr "τελευταίο μήνα"
-#: js/js.js:876
+#: js/js.js:879
msgid "%n month ago"
msgid_plural "%n months ago"
msgstr[0] "%n μήνας πριν"
msgstr[1] "%n μήνες πριν"
-#: js/js.js:877
+#: js/js.js:880
msgid "months ago"
msgstr "μήνες πριν"
-#: js/js.js:878
+#: js/js.js:881
msgid "last year"
msgstr "τελευταίο χρόνο"
-#: js/js.js:879
+#: js/js.js:882
msgid "years ago"
msgstr "χρόνια πριν"
diff --git a/l10n/el/files.po b/l10n/el/files.po
index 1171a1f7284..84a38b5c6e9 100644
--- a/l10n/el/files.po
+++ b/l10n/el/files.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-12-31 01:55-0500\n"
-"PO-Revision-Date: 2013-12-30 16:00+0000\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 20:50+0000\n"
"Last-Translator: vkehayas <vkehayas@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/el/files_sharing.po b/l10n/el/files_sharing.po
index 09221d38d5c..1c70dfb1d6d 100644
--- a/l10n/el/files_sharing.po
+++ b/l10n/el/files_sharing.po
@@ -4,13 +4,13 @@
#
# Translators:
# Efstathios Iosifidis <iosifidis@opensuse.org>, 2013
-# vkehayas <vkehayas@gmail.com>, 2013
+# vkehayas <vkehayas@gmail.com>, 2013-2014
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-01-04 01:55-0500\n"
-"PO-Revision-Date: 2014-01-02 17:40+0000\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 21:00+0000\n"
"Last-Translator: vkehayas <vkehayas@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
@@ -25,11 +25,11 @@ msgstr "Αυτός ο κοινόχρηστος φάκελος προστατεύ
#: templates/authenticate.php:7
msgid "The password is wrong. Try again."
-msgstr "Εσφαλμένο συνθηματικό. Προσπαθήστε ξανά."
+msgstr "Εσφαλμένος κωδικός πρόσβασης. Προσπαθήστε ξανά."
#: templates/authenticate.php:10
msgid "Password"
-msgstr "Συνθηματικό"
+msgstr "Κωδικός πρόσβασης"
#: templates/part.404.php:3
msgid "Sorry, this link doesn’t seem to work anymore."
@@ -58,12 +58,12 @@ msgstr "Για περισσότερες πληροφορίες, παρακαλώ
#: templates/public.php:18
#, php-format
msgid "%s shared the folder %s with you"
-msgstr "%s μοιράστηκε τον φάκελο %s μαζί σας"
+msgstr "Ο %s μοιράστηκε τον φάκελο %s μαζί σας"
#: templates/public.php:21
#, php-format
msgid "%s shared the file %s with you"
-msgstr "%s μοιράστηκε το αρχείο %s μαζί σας"
+msgstr "Ο %s μοιράστηκε το αρχείο %s μαζί σας"
#: templates/public.php:29 templates/public.php:95
msgid "Download"
@@ -75,7 +75,7 @@ msgstr "Μεταφόρτωση"
#: templates/public.php:59
msgid "Cancel upload"
-msgstr "Ακύρωση αποστολής"
+msgstr "Ακύρωση μεταφόρτωσης"
#: templates/public.php:92
msgid "No preview available for"
diff --git a/l10n/el/files_trashbin.po b/l10n/el/files_trashbin.po
index 57aa40f1486..0d05dc752d2 100644
--- a/l10n/el/files_trashbin.po
+++ b/l10n/el/files_trashbin.po
@@ -4,13 +4,14 @@
#
# Translators:
# Efstathios Iosifidis <iosifidis@opensuse.org>, 2013
+# vkehayas <vkehayas@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-11-21 10:01-0500\n"
-"PO-Revision-Date: 2013-11-16 07:44+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 21:15+0000\n"
+"Last-Translator: vkehayas <vkehayas@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,44 +19,44 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/delete.php:42
+#: ajax/delete.php:63
#, php-format
msgid "Couldn't delete %s permanently"
msgstr "Αδύνατη η μόνιμη διαγραφή του %s"
-#: ajax/undelete.php:42
+#: ajax/undelete.php:43
#, php-format
msgid "Couldn't restore %s"
msgstr "Αδυναμία επαναφοράς %s"
-#: js/trash.js:18 js/trash.js:44 js/trash.js:121 js/trash.js:149
+#: js/trash.js:18 js/trash.js:45 js/trash.js:88 js/trash.js:142
msgid "Error"
msgstr "Σφάλμα"
-#: lib/trashbin.php:815 lib/trashbin.php:817
+#: lib/trashbin.php:905 lib/trashbin.php:907
msgid "restored"
-msgstr "έγινε επαναφορά"
+msgstr "επαναφέρθηκαν"
-#: templates/index.php:8
+#: templates/index.php:7
msgid "Nothing in here. Your trash bin is empty!"
msgstr "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είναι άδειος!"
-#: templates/index.php:22
+#: templates/index.php:20
msgid "Name"
msgstr "Όνομα"
-#: templates/index.php:25 templates/index.php:27
+#: templates/index.php:23 templates/index.php:25
msgid "Restore"
msgstr "Επαναφορά"
-#: templates/index.php:33
+#: templates/index.php:31
msgid "Deleted"
-msgstr "Διαγράφηκε"
+msgstr "Διαγραμμένα"
-#: templates/index.php:36 templates/index.php:37
+#: templates/index.php:34 templates/index.php:35
msgid "Delete"
msgstr "Διαγραφή"
-#: templates/part.breadcrumb.php:9
+#: templates/part.breadcrumb.php:8
msgid "Deleted Files"
msgstr "Διαγραμμένα Αρχεία"
diff --git a/l10n/el/files_versions.po b/l10n/el/files_versions.po
index 69a93edf4e8..33ed352c925 100644
--- a/l10n/el/files_versions.po
+++ b/l10n/el/files_versions.po
@@ -4,13 +4,14 @@
#
# Translators:
# Efstathios Iosifidis <iosifidis@opensuse.org>, 2013
+# vkehayas <vkehayas@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-07 08:59-0400\n"
-"PO-Revision-Date: 2013-08-06 07:40+0000\n"
-"Last-Translator: Efstathios Iosifidis <iefstathios@gmail.com>\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 21:15+0000\n"
+"Last-Translator: vkehayas <vkehayas@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,24 +22,24 @@ msgstr ""
#: ajax/rollbackVersion.php:13
#, php-format
msgid "Could not revert: %s"
-msgstr "Αδυναμία επαναφοράς του: %s"
+msgstr "Αδυναμία επαναφοράς: %s"
-#: js/versions.js:7
+#: js/versions.js:14
msgid "Versions"
msgstr "Εκδόσεις"
-#: js/versions.js:53
+#: js/versions.js:60
msgid "Failed to revert {file} to revision {timestamp}."
msgstr "Αποτυχία επαναφοράς του {file} στην αναθεώρηση {timestamp}."
-#: js/versions.js:79
+#: js/versions.js:86
msgid "More versions..."
msgstr "Περισσότερες εκδόσεις..."
-#: js/versions.js:116
+#: js/versions.js:123
msgid "No other versions available"
msgstr "Δεν υπάρχουν άλλες εκδόσεις διαθέσιμες"
-#: js/versions.js:149
+#: js/versions.js:154
msgid "Restore"
msgstr "Επαναφορά"
diff --git a/l10n/el/settings.po b/l10n/el/settings.po
index a899dcc3fc6..84b51f57097 100644
--- a/l10n/el/settings.po
+++ b/l10n/el/settings.po
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-01-04 01:55-0500\n"
-"PO-Revision-Date: 2014-01-02 18:11+0000\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 20:50+0000\n"
"Last-Translator: vkehayas <vkehayas@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/el/user_ldap.po b/l10n/el/user_ldap.po
index a7c6ef95f42..636f833c270 100644
--- a/l10n/el/user_ldap.po
+++ b/l10n/el/user_ldap.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-01-04 01:55-0500\n"
-"PO-Revision-Date: 2014-01-02 18:11+0000\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 20:50+0000\n"
"Last-Translator: vkehayas <vkehayas@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/et_EE/files.po b/l10n/et_EE/files.po
index d7c7f5265de..e83960e36b8 100644
--- a/l10n/et_EE/files.po
+++ b/l10n/et_EE/files.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# pisike.sipelgas <pisike.sipelgas@gmail.com>, 2013
+# pisike.sipelgas <pisike.sipelgas@gmail.com>, 2013-2014
# Rivo Zängov <eraser@eraser.ee>, 2013
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-12-20 01:55-0500\n"
-"PO-Revision-Date: 2013-12-20 06:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 07:20+0000\n"
+"Last-Translator: pisike.sipelgas <pisike.sipelgas@gmail.com>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -51,7 +51,7 @@ msgstr "Pole korrektne lähteallikas"
#: ajax/newfile.php:86
msgid ""
"Server is not allowed to open URLs, please check the server configuration"
-msgstr ""
+msgstr "Server ei võimalda URL-ide avamist, palun kontrolli serveri seadistust"
#: ajax/newfile.php:103
#, php-format
@@ -180,7 +180,7 @@ msgstr "Ei suuda luua kataloogi"
#: js/file-upload.js:661
msgid "Error fetching URL"
-msgstr ""
+msgstr "Viga URL-i haaramisel"
#: js/fileactions.js:125
msgid "Share"
diff --git a/l10n/fr/files.po b/l10n/fr/files.po
index 2bd2dbb16d4..c6057d1fd5f 100644
--- a/l10n/fr/files.po
+++ b/l10n/fr/files.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-12-20 01:55-0500\n"
-"PO-Revision-Date: 2013-12-20 06:23+0000\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 14:30+0000\n"
"Last-Translator: Christophe Lherieau <skimpax@gmail.com>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/fr/files_sharing.po b/l10n/fr/files_sharing.po
index c8c10e1bfe5..3dbac303a0a 100644
--- a/l10n/fr/files_sharing.po
+++ b/l10n/fr/files_sharing.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-11-15 22:54-0500\n"
-"PO-Revision-Date: 2013-11-13 16:11+0000\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 14:30+0000\n"
"Last-Translator: etiess <etiess@gmail.com>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/id/core.po b/l10n/id/core.po
index d102e4fe617..b3864906052 100644
--- a/l10n/id/core.po
+++ b/l10n/id/core.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-12-31 01:55-0500\n"
-"PO-Revision-Date: 2013-12-31 03:40+0000\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\n"
+"PO-Revision-Date: 2014-01-07 07:10+0000\n"
"Last-Translator: arifpedia <arifpedia@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -152,51 +152,51 @@ msgstr "Desember"
msgid "Settings"
msgstr "Pengaturan"
-#: js/js.js:869
+#: js/js.js:872
msgid "seconds ago"
msgstr "beberapa detik yang lalu"
-#: js/js.js:870
+#: js/js.js:873
msgid "%n minute ago"
msgid_plural "%n minutes ago"
msgstr[0] "%n menit yang lalu"
-#: js/js.js:871
+#: js/js.js:874
msgid "%n hour ago"
msgid_plural "%n hours ago"
msgstr[0] "%n jam yang lalu"
-#: js/js.js:872
+#: js/js.js:875
msgid "today"
msgstr "hari ini"
-#: js/js.js:873
+#: js/js.js:876
msgid "yesterday"
msgstr "kemarin"
-#: js/js.js:874
+#: js/js.js:877
msgid "%n day ago"
msgid_plural "%n days ago"
msgstr[0] "%n hari yang lalu"
-#: js/js.js:875
+#: js/js.js:878
msgid "last month"
msgstr "bulan kemarin"
-#: js/js.js:876
+#: js/js.js:879
msgid "%n month ago"
msgid_plural "%n months ago"
msgstr[0] "%n bulan yang lalu"
-#: js/js.js:877
+#: js/js.js:880
msgid "months ago"
msgstr "beberapa bulan lalu"
-#: js/js.js:878
+#: js/js.js:881
msgid "last year"
msgstr "tahun kemarin"
-#: js/js.js:879
+#: js/js.js:882
msgid "years ago"
msgstr "beberapa tahun lalu"
diff --git a/l10n/id/files.po b/l10n/id/files.po
index 74a84b5c520..b2151252828 100644
--- a/l10n/id/files.po
+++ b/l10n/id/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-12-20 01:55-0500\n"
-"PO-Revision-Date: 2013-12-20 06:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\n"
+"PO-Revision-Date: 2014-01-07 08:10+0000\n"
+"Last-Translator: I Robot\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
diff --git a/l10n/id/files_encryption.po b/l10n/id/files_encryption.po
index ac25567dccf..7bc9584010d 100644
--- a/l10n/id/files_encryption.po
+++ b/l10n/id/files_encryption.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# arifpedia <arifpedia@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-11-29 14:08-0500\n"
-"PO-Revision-Date: 2013-11-29 19:08+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\n"
+"PO-Revision-Date: 2014-01-07 07:40+0000\n"
+"Last-Translator: arifpedia <arifpedia@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,39 +20,39 @@ msgstr ""
#: ajax/adminrecovery.php:29
msgid "Recovery key successfully enabled"
-msgstr ""
+msgstr "Kunci pemulihan berhasil diaktifkan"
#: ajax/adminrecovery.php:34
msgid ""
"Could not enable recovery key. Please check your recovery key password!"
-msgstr ""
+msgstr "Tidak dapat mengaktifkan kunci pemulihan. Silakan periksa sandi kunci pemulihan Anda!"
#: ajax/adminrecovery.php:48
msgid "Recovery key successfully disabled"
-msgstr ""
+msgstr "Kunci pemulihan berhasil dinonaktifkan"
#: ajax/adminrecovery.php:53
msgid ""
"Could not disable recovery key. Please check your recovery key password!"
-msgstr ""
+msgstr "Tidak dapat menonaktifkan kunci pemulihan. Silakan periksa sandi kunci pemulihan Anda!"
#: ajax/changeRecoveryPassword.php:49
msgid "Password successfully changed."
-msgstr ""
+msgstr "Sandi berhasil diubah"
#: ajax/changeRecoveryPassword.php:51
msgid "Could not change the password. Maybe the old password was not correct."
-msgstr ""
+msgstr "Tidak dapat mengubah sandi. Kemungkinan sandi lama yang dimasukkan salah."
#: ajax/updatePrivateKeyPassword.php:52
msgid "Private key password successfully updated."
-msgstr ""
+msgstr "Sandi kunci privat berhasil diperbarui."
#: ajax/updatePrivateKeyPassword.php:54
msgid ""
"Could not update the private key password. Maybe the old password was not "
"correct."
-msgstr ""
+msgstr "Tidak dapat memperbarui sandi kunci privat. Kemungkinan sandi lama yang Anda masukkan salah."
#: files/error.php:12
msgid ""
@@ -72,32 +73,32 @@ msgstr ""
msgid ""
"Can not decrypt this file, probably this is a shared file. Please ask the "
"file owner to reshare the file with you."
-msgstr ""
+msgstr "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda."
#: files/error.php:22 files/error.php:27
msgid ""
"Unknown error please check your system settings or contact your "
"administrator"
-msgstr ""
+msgstr "Kesalahan tak dikenal, silakan periksa pengaturan sistem Anda atau hubungi admin."
-#: hooks/hooks.php:59
+#: hooks/hooks.php:62
msgid "Missing requirements."
-msgstr ""
+msgstr "Persyaratan yang hilang."
-#: hooks/hooks.php:60
+#: hooks/hooks.php:63
msgid ""
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL "
"together with the PHP extension is enabled and configured properly. For now,"
" the encryption app has been disabled."
msgstr ""
-#: hooks/hooks.php:273
+#: hooks/hooks.php:281
msgid "Following users are not set up for encryption:"
-msgstr ""
+msgstr "Pengguna berikut belum diatur untuk enkripsi:"
#: js/detect-migration.js:21
msgid "Initial encryption started... This can take some time. Please wait."
-msgstr ""
+msgstr "Inisial enskripsi dijalankan... Ini dapat memakan waktu. Silakan tunggu."
#: js/settings-admin.js:13
msgid "Saving..."
@@ -105,11 +106,11 @@ msgstr "Menyimpan..."
#: templates/invalid_private_key.php:8
msgid "Go directly to your "
-msgstr ""
+msgstr "Langsung ke anda"
#: templates/invalid_private_key.php:8
msgid "personal settings"
-msgstr ""
+msgstr "pengaturan pribadi"
#: templates/settings-admin.php:4 templates/settings-personal.php:3
msgid "Encryption"
@@ -118,84 +119,84 @@ msgstr "Enkripsi"
#: templates/settings-admin.php:7
msgid ""
"Enable recovery key (allow to recover users files in case of password loss):"
-msgstr ""
+msgstr "Aktifkan kunci pemulihan (memungkinkan pengguna untuk memulihkan berkas dalam kasus kehilangan sandi):"
#: templates/settings-admin.php:11
msgid "Recovery key password"
-msgstr ""
+msgstr "Sandi kunci pemulihan"
#: templates/settings-admin.php:14
msgid "Repeat Recovery key password"
-msgstr ""
+msgstr "Ulangi sandi kunci Pemulihan"
#: templates/settings-admin.php:21 templates/settings-personal.php:51
msgid "Enabled"
-msgstr ""
+msgstr "Diaktifkan"
#: templates/settings-admin.php:29 templates/settings-personal.php:59
msgid "Disabled"
-msgstr ""
+msgstr "Dinonaktifkan"
#: templates/settings-admin.php:34
msgid "Change recovery key password:"
-msgstr ""
+msgstr "Ubah sandi kunci pemulihan:"
#: templates/settings-admin.php:40
msgid "Old Recovery key password"
-msgstr ""
+msgstr "Sandi kunci Pemulihan Lama"
#: templates/settings-admin.php:47
msgid "New Recovery key password"
-msgstr ""
+msgstr "Sandi kunci Pemulihan Baru"
#: templates/settings-admin.php:53
msgid "Repeat New Recovery key password"
-msgstr ""
+msgstr "Ulangi sandi kunci Pemulihan baru"
#: templates/settings-admin.php:58
msgid "Change Password"
-msgstr ""
+msgstr "Ubah sandi"
#: templates/settings-personal.php:9
msgid "Your private key password no longer match your log-in password:"
-msgstr ""
+msgstr "Sandi kunci privat Anda tidak lagi cocok dengan sandi masuk:"
#: templates/settings-personal.php:12
msgid "Set your old private key password to your current log-in password."
-msgstr ""
+msgstr "Atur sandi kunci privat lama Anda sebagai sandi masuk Anda saat ini."
#: templates/settings-personal.php:14
msgid ""
" If you don't remember your old password you can ask your administrator to "
"recover your files."
-msgstr ""
+msgstr "Jika Anda tidak ingat sandi lama, Anda dapat meminta administrator Anda untuk memulihkan berkas."
#: templates/settings-personal.php:22
msgid "Old log-in password"
-msgstr ""
+msgstr "Sandi masuk yang lama"
#: templates/settings-personal.php:28
msgid "Current log-in password"
-msgstr ""
+msgstr "Sandi masuk saat ini"
#: templates/settings-personal.php:33
msgid "Update Private Key Password"
-msgstr ""
+msgstr "Perbarui Sandi Kunci Privat"
#: templates/settings-personal.php:42
msgid "Enable password recovery:"
-msgstr ""
+msgstr "Aktifkan sandi pemulihan:"
#: templates/settings-personal.php:44
msgid ""
"Enabling this option will allow you to reobtain access to your encrypted "
"files in case of password loss"
-msgstr ""
+msgstr "Mengaktifkan opsi ini memungkinkan Anda untuk mendapatkan kembali akses ke berkas terenkripsi Anda dalam kasus kehilangan sandi"
#: templates/settings-personal.php:60
msgid "File recovery settings updated"
-msgstr ""
+msgstr "Pengaturan pemulihan berkas diperbarui"
#: templates/settings-personal.php:61
msgid "Could not update file recovery"
-msgstr ""
+msgstr "Tidak dapat memperbarui pemulihan berkas"
diff --git a/l10n/id/files_sharing.po b/l10n/id/files_sharing.po
index bdcc98c9d35..c5659df948b 100644
--- a/l10n/id/files_sharing.po
+++ b/l10n/id/files_sharing.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# arifpedia <arifpedia@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-11-15 22:54-0500\n"
-"PO-Revision-Date: 2013-11-13 16:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\n"
+"PO-Revision-Date: 2014-01-07 08:00+0000\n"
+"Last-Translator: arifpedia <arifpedia@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,11 +20,11 @@ msgstr ""
#: templates/authenticate.php:4
msgid "This share is password-protected"
-msgstr ""
+msgstr "Berbagi ini dilindungi sandi"
#: templates/authenticate.php:7
msgid "The password is wrong. Try again."
-msgstr ""
+msgstr "Sandi salah. Coba lagi"
#: templates/authenticate.php:10
msgid "Password"
@@ -31,27 +32,27 @@ msgstr "Sandi"
#: templates/part.404.php:3
msgid "Sorry, this link doesn’t seem to work anymore."
-msgstr ""
+msgstr "Maaf, tautan ini tampaknya tidak berfungsi lagi."
#: templates/part.404.php:4
msgid "Reasons might be:"
-msgstr ""
+msgstr "Alasan mungkin:"
#: templates/part.404.php:6
msgid "the item was removed"
-msgstr ""
+msgstr "item telah dihapus"
#: templates/part.404.php:7
msgid "the link expired"
-msgstr ""
+msgstr "tautan telah kadaluarsa"
#: templates/part.404.php:8
msgid "sharing is disabled"
-msgstr ""
+msgstr "berbagi dinonaktifkan"
#: templates/part.404.php:10
msgid "For more info, please ask the person who sent this link."
-msgstr ""
+msgstr "Untuk info lebih lanjut, silakan tanyakan orang yang mengirim tautan ini."
#: templates/public.php:18
#, php-format
@@ -61,7 +62,7 @@ msgstr "%s membagikan folder %s dengan Anda"
#: templates/public.php:21
#, php-format
msgid "%s shared the file %s with you"
-msgstr "%s membagikan file %s dengan Anda"
+msgstr "%s membagikan berkas %s dengan Anda"
#: templates/public.php:29 templates/public.php:95
msgid "Download"
@@ -73,12 +74,12 @@ msgstr "Unggah"
#: templates/public.php:59
msgid "Cancel upload"
-msgstr "Batal pengunggahan"
+msgstr "Batal unggah"
#: templates/public.php:92
msgid "No preview available for"
-msgstr "Tidak ada pratinjau tersedia untuk"
+msgstr "Tidak ada pratinjau yang tersedia untuk"
#: templates/public.php:99
msgid "Direct link"
-msgstr ""
+msgstr "Tautan langsung"
diff --git a/l10n/id/files_trashbin.po b/l10n/id/files_trashbin.po
index c6a065cb2fb..5f3ad858bd3 100644
--- a/l10n/id/files_trashbin.po
+++ b/l10n/id/files_trashbin.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-11-21 10:01-0500\n"
-"PO-Revision-Date: 2013-11-16 07:44+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\n"
+"PO-Revision-Date: 2014-01-07 07:10+0000\n"
+"Last-Translator: I Robot\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,44 +17,44 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/delete.php:42
+#: ajax/delete.php:63
#, php-format
msgid "Couldn't delete %s permanently"
msgstr "Tidak dapat menghapus permanen %s"
-#: ajax/undelete.php:42
+#: ajax/undelete.php:43
#, php-format
msgid "Couldn't restore %s"
msgstr "Tidak dapat memulihkan %s"
-#: js/trash.js:18 js/trash.js:44 js/trash.js:121 js/trash.js:149
+#: js/trash.js:18 js/trash.js:45 js/trash.js:88 js/trash.js:142
msgid "Error"
msgstr "Galat"
-#: lib/trashbin.php:815 lib/trashbin.php:817
+#: lib/trashbin.php:905 lib/trashbin.php:907
msgid "restored"
msgstr ""
-#: templates/index.php:8
+#: templates/index.php:7
msgid "Nothing in here. Your trash bin is empty!"
msgstr "Tempat sampah anda kosong!"
-#: templates/index.php:22
+#: templates/index.php:20
msgid "Name"
msgstr "Nama"
-#: templates/index.php:25 templates/index.php:27
+#: templates/index.php:23 templates/index.php:25
msgid "Restore"
msgstr "Pulihkan"
-#: templates/index.php:33
+#: templates/index.php:31
msgid "Deleted"
msgstr "Dihapus"
-#: templates/index.php:36 templates/index.php:37
+#: templates/index.php:34 templates/index.php:35
msgid "Delete"
msgstr "Hapus"
-#: templates/part.breadcrumb.php:9
+#: templates/part.breadcrumb.php:8
msgid "Deleted Files"
msgstr "Berkas yang Dihapus"
diff --git a/l10n/id/settings.po b/l10n/id/settings.po
index e3cda0a7e3c..0b8a55abc7f 100644
--- a/l10n/id/settings.po
+++ b/l10n/id/settings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-12-31 01:55-0500\n"
-"PO-Revision-Date: 2013-12-31 03:40+0000\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\n"
+"PO-Revision-Date: 2014-01-07 08:10+0000\n"
"Last-Translator: arifpedia <arifpedia@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/id/user_ldap.po b/l10n/id/user_ldap.po
index 368aef3c674..e90f580e2a0 100644
--- a/l10n/id/user_ldap.po
+++ b/l10n/id/user_ldap.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-12-31 01:55-0500\n"
-"PO-Revision-Date: 2013-12-30 17:20+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\n"
+"PO-Revision-Date: 2014-01-07 07:10+0000\n"
+"Last-Translator: I Robot\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index 1ec73dd2975..3bd1bd90709 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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.pot b/l10n/templates/files.pot
index e5f6887ddda..5396110aede 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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_encryption.pot b/l10n/templates/files_encryption.pot
index ae01087be4f..31232e16fb3 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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 5d95ea33849..b8ac9956fa4 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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 684d5663a9b..d0daf4154b1 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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_trashbin.pot b/l10n/templates/files_trashbin.pot
index 0b7e5f01605..eadcdd9d3e2 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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 e08efdb3921..8ba48805bac 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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 9bcb4ce52ab..29ab50202bf 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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"
@@ -71,23 +71,23 @@ msgstr ""
msgid "cannot open \"%s\""
msgstr ""
-#: private/files.php:231
+#: private/files.php:226
msgid "ZIP download is turned off."
msgstr ""
-#: private/files.php:232
+#: private/files.php:227
msgid "Files need to be downloaded one by one."
msgstr ""
-#: private/files.php:233 private/files.php:261
+#: private/files.php:228 private/files.php:256
msgid "Back to Files"
msgstr ""
-#: private/files.php:258
+#: private/files.php:253
msgid "Selected files too large to generate zip file."
msgstr ""
-#: private/files.php:259
+#: private/files.php:254
msgid ""
"Please download the files separately in smaller chunks or kindly ask your "
"administrator."
diff --git a/l10n/templates/private.pot b/l10n/templates/private.pot
index 250fadf1831..fd5e0fded54 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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"
@@ -71,23 +71,23 @@ msgstr ""
msgid "cannot open \"%s\""
msgstr ""
-#: files.php:231
+#: files.php:226
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:232
+#: files.php:227
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:233 files.php:261
+#: files.php:228 files.php:256
msgid "Back to Files"
msgstr ""
-#: files.php:258
+#: files.php:253
msgid "Selected files too large to generate zip file."
msgstr ""
-#: files.php:259
+#: files.php:254
msgid ""
"Please download the files separately in smaller chunks or kindly ask your "
"administrator."
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index e8fb417a519..a25543919ad 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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 1191a2c59e2..5e79d17a11a 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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 4268d7b5d4b..acf94225f59 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-01-06 01:55-0500\n"
+"POT-Creation-Date: 2014-01-08 01:55-0500\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/ur/core.po b/l10n/ur/core.po
new file mode 100644
index 00000000000..862ab145c30
--- /dev/null
+++ b/l10n/ur/core.po
@@ -0,0 +1,775 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 23:45+0000\n"
+"Last-Translator: I Robot\n"
+"Language-Team: Urdu (http://www.transifex.com/projects/p/owncloud/language/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/share.php:119 ajax/share.php:198
+#, php-format
+msgid "%s shared »%s« with you"
+msgstr ""
+
+#: ajax/share.php:169
+#, php-format
+msgid "Couldn't send mail to following users: %s "
+msgstr ""
+
+#: ajax/update.php:11
+msgid "Turned on maintenance mode"
+msgstr ""
+
+#: ajax/update.php:14
+msgid "Turned off maintenance mode"
+msgstr ""
+
+#: ajax/update.php:17
+msgid "Updated database"
+msgstr ""
+
+#: ajax/update.php:20
+msgid "Updating filecache, this may take really long..."
+msgstr ""
+
+#: ajax/update.php:23
+msgid "Updated filecache"
+msgstr ""
+
+#: ajax/update.php:26
+#, php-format
+msgid "... %d%% done ..."
+msgstr ""
+
+#: avatar/controller.php:62
+msgid "No image or file provided"
+msgstr ""
+
+#: avatar/controller.php:81
+msgid "Unknown filetype"
+msgstr ""
+
+#: avatar/controller.php:85
+msgid "Invalid image"
+msgstr ""
+
+#: avatar/controller.php:115 avatar/controller.php:142
+msgid "No temporary profile picture available, try again"
+msgstr ""
+
+#: avatar/controller.php:135
+msgid "No crop data provided"
+msgstr ""
+
+#: js/config.php:32
+msgid "Sunday"
+msgstr ""
+
+#: js/config.php:33
+msgid "Monday"
+msgstr ""
+
+#: js/config.php:34
+msgid "Tuesday"
+msgstr ""
+
+#: js/config.php:35
+msgid "Wednesday"
+msgstr ""
+
+#: js/config.php:36
+msgid "Thursday"
+msgstr ""
+
+#: js/config.php:37
+msgid "Friday"
+msgstr ""
+
+#: js/config.php:38
+msgid "Saturday"
+msgstr ""
+
+#: js/config.php:43
+msgid "January"
+msgstr ""
+
+#: js/config.php:44
+msgid "February"
+msgstr ""
+
+#: js/config.php:45
+msgid "March"
+msgstr ""
+
+#: js/config.php:46
+msgid "April"
+msgstr ""
+
+#: js/config.php:47
+msgid "May"
+msgstr ""
+
+#: js/config.php:48
+msgid "June"
+msgstr ""
+
+#: js/config.php:49
+msgid "July"
+msgstr ""
+
+#: js/config.php:50
+msgid "August"
+msgstr ""
+
+#: js/config.php:51
+msgid "September"
+msgstr ""
+
+#: js/config.php:52
+msgid "October"
+msgstr ""
+
+#: js/config.php:53
+msgid "November"
+msgstr ""
+
+#: js/config.php:54
+msgid "December"
+msgstr ""
+
+#: js/js.js:398
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:872
+msgid "seconds ago"
+msgstr ""
+
+#: js/js.js:873
+msgid "%n minute ago"
+msgid_plural "%n minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/js.js:874
+msgid "%n hour ago"
+msgid_plural "%n hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/js.js:875
+msgid "today"
+msgstr ""
+
+#: js/js.js:876
+msgid "yesterday"
+msgstr ""
+
+#: js/js.js:877
+msgid "%n day ago"
+msgid_plural "%n days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/js.js:878
+msgid "last month"
+msgstr ""
+
+#: js/js.js:879
+msgid "%n month ago"
+msgid_plural "%n months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/js.js:880
+msgid "months ago"
+msgstr ""
+
+#: js/js.js:881
+msgid "last year"
+msgstr ""
+
+#: js/js.js:882
+msgid "years ago"
+msgstr ""
+
+#: js/oc-dialogs.js:123
+msgid "Choose"
+msgstr ""
+
+#: js/oc-dialogs.js:146
+msgid "Error loading file picker template: {error}"
+msgstr ""
+
+#: js/oc-dialogs.js:172
+msgid "Yes"
+msgstr ""
+
+#: js/oc-dialogs.js:182
+msgid "No"
+msgstr ""
+
+#: js/oc-dialogs.js:199
+msgid "Ok"
+msgstr ""
+
+#: js/oc-dialogs.js:219
+msgid "Error loading message template: {error}"
+msgstr ""
+
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
+#: js/share.js:51 js/share.js:66 js/share.js:106
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:109
+msgid "Share"
+msgstr ""
+
+#: js/share.js:158 js/share.js:171 js/share.js:178 js/share.js:707
+#: js/share.js:719 templates/installation.php:10
+msgid "Error"
+msgstr ""
+
+#: js/share.js:160 js/share.js:747
+msgid "Error while sharing"
+msgstr ""
+
+#: js/share.js:171
+msgid "Error while unsharing"
+msgstr ""
+
+#: js/share.js:178
+msgid "Error while changing permissions"
+msgstr ""
+
+#: js/share.js:187
+msgid "Shared with you and the group {group} by {owner}"
+msgstr ""
+
+#: js/share.js:189
+msgid "Shared with you by {owner}"
+msgstr ""
+
+#: js/share.js:213
+msgid "Share with user or group …"
+msgstr ""
+
+#: js/share.js:219
+msgid "Share link"
+msgstr ""
+
+#: js/share.js:222
+msgid "Password protect"
+msgstr ""
+
+#: js/share.js:224 templates/installation.php:58 templates/login.php:38
+msgid "Password"
+msgstr ""
+
+#: js/share.js:229
+msgid "Allow Public Upload"
+msgstr ""
+
+#: js/share.js:233
+msgid "Email link to person"
+msgstr ""
+
+#: js/share.js:234
+msgid "Send"
+msgstr ""
+
+#: js/share.js:239
+msgid "Set expiration date"
+msgstr ""
+
+#: js/share.js:240
+msgid "Expiration date"
+msgstr ""
+
+#: js/share.js:275
+msgid "Share via email:"
+msgstr ""
+
+#: js/share.js:278
+msgid "No people found"
+msgstr ""
+
+#: js/share.js:322 js/share.js:359
+msgid "group"
+msgstr ""
+
+#: js/share.js:333
+msgid "Resharing is not allowed"
+msgstr ""
+
+#: js/share.js:375
+msgid "Shared in {item} with {user}"
+msgstr ""
+
+#: js/share.js:397
+msgid "Unshare"
+msgstr ""
+
+#: js/share.js:405
+msgid "notify by email"
+msgstr ""
+
+#: js/share.js:408
+msgid "can edit"
+msgstr ""
+
+#: js/share.js:410
+msgid "access control"
+msgstr ""
+
+#: js/share.js:413
+msgid "create"
+msgstr ""
+
+#: js/share.js:416
+msgid "update"
+msgstr ""
+
+#: js/share.js:419
+msgid "delete"
+msgstr ""
+
+#: js/share.js:422
+msgid "share"
+msgstr ""
+
+#: js/share.js:694
+msgid "Password protected"
+msgstr ""
+
+#: js/share.js:707
+msgid "Error unsetting expiration date"
+msgstr ""
+
+#: js/share.js:719
+msgid "Error setting expiration date"
+msgstr ""
+
+#: js/share.js:734
+msgid "Sending ..."
+msgstr ""
+
+#: js/share.js:745
+msgid "Email sent"
+msgstr ""
+
+#: js/share.js:769
+msgid "Warning"
+msgstr ""
+
+#: js/tags.js:4
+msgid "The object type is not specified."
+msgstr ""
+
+#: js/tags.js:13
+msgid "Enter new"
+msgstr ""
+
+#: js/tags.js:27
+msgid "Delete"
+msgstr ""
+
+#: js/tags.js:31
+msgid "Add"
+msgstr ""
+
+#: js/tags.js:39
+msgid "Edit tags"
+msgstr ""
+
+#: js/tags.js:57
+msgid "Error loading dialog template: {error}"
+msgstr ""
+
+#: js/tags.js:261
+msgid "No tags selected for deletion."
+msgstr ""
+
+#: js/update.js:8
+msgid "Please reload the page."
+msgstr ""
+
+#: js/update.js:17
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:21
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
+#: lostpassword/controller.php:62
+#, php-format
+msgid "%s password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:2
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:7
+msgid ""
+"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 ."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:15
+msgid "Request failed!<br>Did you make sure your email/username was right?"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:18
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:21 templates/installation.php:52
+#: templates/login.php:31
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:25
+msgid ""
+"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?"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:27
+msgid "Yes, I really want to reset my password now"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:30
+msgid "Reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr ""
+
+#: strings.php:5
+msgid "Personal"
+msgstr ""
+
+#: strings.php:6
+msgid "Users"
+msgstr ""
+
+#: strings.php:7 templates/layout.user.php:111
+msgid "Apps"
+msgstr ""
+
+#: strings.php:8
+msgid "Admin"
+msgstr ""
+
+#: strings.php:9
+msgid "Help"
+msgstr ""
+
+#: tags/controller.php:22
+msgid "Error loading tags"
+msgstr ""
+
+#: tags/controller.php:48
+msgid "Tag already exists"
+msgstr ""
+
+#: tags/controller.php:64
+msgid "Error deleting tag(s)"
+msgstr ""
+
+#: tags/controller.php:75
+msgid "Error tagging"
+msgstr ""
+
+#: tags/controller.php:86
+msgid "Error untagging"
+msgstr ""
+
+#: tags/controller.php:97
+msgid "Error favoriting"
+msgstr ""
+
+#: tags/controller.php:108
+msgid "Error unfavoriting"
+msgstr ""
+
+#: templates/403.php:12
+msgid "Access forbidden"
+msgstr ""
+
+#: templates/404.php:15
+msgid "Cloud not found"
+msgstr ""
+
+#: templates/altmail.php:2
+#, php-format
+msgid ""
+"Hey there,\n"
+"\n"
+"just letting you know that %s shared %s with you.\n"
+"View it: %s\n"
+"\n"
+msgstr ""
+
+#: templates/altmail.php:4 templates/mail.php:17
+#, php-format
+msgid "The share will expire on %s."
+msgstr ""
+
+#: templates/altmail.php:7 templates/mail.php:20
+msgid "Cheers!"
+msgstr ""
+
+#: templates/installation.php:25 templates/installation.php:32
+#: templates/installation.php:39
+msgid "Security Warning"
+msgstr ""
+
+#: templates/installation.php:26
+msgid "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)"
+msgstr ""
+
+#: templates/installation.php:27
+#, php-format
+msgid "Please update your PHP installation to use %s securely."
+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
+#, 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
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:67
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:74
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:86
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:91 templates/installation.php:103
+#: templates/installation.php:114 templates/installation.php:125
+#: templates/installation.php:137
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:149
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:156
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:161
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:169
+msgid "Database tablespace"
+msgstr ""
+
+#: templates/installation.php:176
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:185
+msgid "Finish setup"
+msgstr ""
+
+#: templates/installation.php:185
+msgid "Finishing …"
+msgstr ""
+
+#: templates/layout.user.php:40
+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."
+msgstr ""
+
+#: templates/layout.user.php:44
+#, php-format
+msgid "%s is available. Get more information on how to update."
+msgstr ""
+
+#: templates/layout.user.php:72 templates/singleuser.user.php:8
+msgid "Log out"
+msgstr ""
+
+#: templates/login.php:9
+msgid "Automatic logon rejected!"
+msgstr ""
+
+#: templates/login.php:10
+msgid ""
+"If you did not change your password recently, your account may be "
+"compromised!"
+msgstr ""
+
+#: templates/login.php:12
+msgid "Please change your password to secure your account again."
+msgstr ""
+
+#: templates/login.php:17
+msgid "Server side authentication failed!"
+msgstr ""
+
+#: templates/login.php:18
+msgid "Please contact your administrator."
+msgstr ""
+
+#: templates/login.php:44
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:49
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:52
+msgid "Log in"
+msgstr ""
+
+#: templates/login.php:58
+msgid "Alternative Logins"
+msgstr ""
+
+#: templates/mail.php:15
+#, php-format
+msgid ""
+"Hey there,<br><br>just letting you know that %s shared »%s« with you.<br><a "
+"href=\"%s\">View it!</a><br><br>"
+msgstr ""
+
+#: templates/singleuser.user.php:3
+msgid "This ownCloud instance is currently in single user mode."
+msgstr ""
+
+#: templates/singleuser.user.php:4
+msgid "This means only administrators can use the instance."
+msgstr ""
+
+#: templates/singleuser.user.php:5 templates/update.user.php:5
+msgid ""
+"Contact your system administrator if this message persists or appeared "
+"unexpectedly."
+msgstr ""
+
+#: templates/singleuser.user.php:7 templates/update.user.php:6
+msgid "Thank you for your patience."
+msgstr ""
+
+#: templates/update.admin.php:3
+#, php-format
+msgid "Updating ownCloud to version %s, this may take a while."
+msgstr ""
+
+#: templates/update.user.php:3
+msgid ""
+"This ownCloud instance is currently being updated, which may take a while."
+msgstr ""
+
+#: templates/update.user.php:4
+msgid "Please reload this page after a short time to continue using ownCloud."
+msgstr ""
diff --git a/l10n/ur/files.po b/l10n/ur/files.po
new file mode 100644
index 00000000000..ecfa8697636
--- /dev/null
+++ b/l10n/ur/files.po
@@ -0,0 +1,413 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 23:45+0000\n"
+"Last-Translator: I Robot\n"
+"Language-Team: Urdu (http://www.transifex.com/projects/p/owncloud/language/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/move.php:17
+#, php-format
+msgid "Could not move %s - File with this name already exists"
+msgstr ""
+
+#: ajax/move.php:27 ajax/move.php:30
+#, php-format
+msgid "Could not move %s"
+msgstr ""
+
+#: ajax/newfile.php:56 js/files.js:74
+msgid "File name cannot be empty."
+msgstr ""
+
+#: ajax/newfile.php:62
+msgid "File name must not contain \"/\". Please choose a different name."
+msgstr ""
+
+#: ajax/newfile.php:72 ajax/newfolder.php:37 lib/app.php:67
+#, php-format
+msgid ""
+"The name %s is already used in the folder %s. Please choose a different "
+"name."
+msgstr ""
+
+#: ajax/newfile.php:81
+msgid "Not a valid source"
+msgstr ""
+
+#: ajax/newfile.php:86
+msgid ""
+"Server is not allowed to open URLs, please check the server configuration"
+msgstr ""
+
+#: ajax/newfile.php:103
+#, php-format
+msgid "Error while downloading %s to %s"
+msgstr ""
+
+#: ajax/newfile.php:140
+msgid "Error when creating the file"
+msgstr ""
+
+#: ajax/newfolder.php:21
+msgid "Folder name cannot be empty."
+msgstr ""
+
+#: ajax/newfolder.php:27
+msgid "Folder name must not contain \"/\". Please choose a different name."
+msgstr ""
+
+#: ajax/newfolder.php:56
+msgid "Error when creating the folder"
+msgstr ""
+
+#: ajax/upload.php:18 ajax/upload.php:50
+msgid "Unable to set upload directory."
+msgstr ""
+
+#: ajax/upload.php:27
+msgid "Invalid Token"
+msgstr ""
+
+#: ajax/upload.php:64
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: ajax/upload.php:71
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:72
+msgid ""
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
+msgstr ""
+
+#: ajax/upload.php:74
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:75
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:76
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:77
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:78
+msgid "Failed to write to disk"
+msgstr ""
+
+#: ajax/upload.php:96
+msgid "Not enough storage available"
+msgstr ""
+
+#: ajax/upload.php:127 ajax/upload.php:154
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:144
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:172
+msgid "Invalid directory."
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Files"
+msgstr ""
+
+#: js/file-upload.js:228
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/file-upload.js:239
+msgid "Not enough space available"
+msgstr ""
+
+#: js/file-upload.js:306
+msgid "Upload cancelled."
+msgstr ""
+
+#: js/file-upload.js:344
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:436
+msgid ""
+"File upload is in progress. Leaving the page now will cancel the upload."
+msgstr ""
+
+#: js/file-upload.js:523
+msgid "URL cannot be empty"
+msgstr ""
+
+#: js/file-upload.js:527 js/filelist.js:377
+msgid "In the home folder 'Shared' is a reserved filename"
+msgstr ""
+
+#: js/file-upload.js:529 js/filelist.js:379
+msgid "{new_name} already exists"
+msgstr ""
+
+#: js/file-upload.js:595
+msgid "Could not create file"
+msgstr ""
+
+#: js/file-upload.js:611
+msgid "Could not create folder"
+msgstr ""
+
+#: js/file-upload.js:661
+msgid "Error fetching URL"
+msgstr ""
+
+#: js/fileactions.js:125
+msgid "Share"
+msgstr ""
+
+#: js/fileactions.js:137
+msgid "Delete permanently"
+msgstr ""
+
+#: js/fileactions.js:194
+msgid "Rename"
+msgstr ""
+
+#: js/filelist.js:69 js/filelist.js:72 js/filelist.js:889
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:405
+msgid "Could not rename file"
+msgstr ""
+
+#: js/filelist.js:539
+msgid "replaced {new_name} with {old_name}"
+msgstr ""
+
+#: js/filelist.js:539
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:591
+msgid "Error deleting file."
+msgstr ""
+
+#: js/filelist.js:609 js/filelist.js:683 js/files.js:631
+msgid "%n folder"
+msgid_plural "%n folders"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/filelist.js:610 js/filelist.js:684 js/files.js:637
+msgid "%n file"
+msgid_plural "%n files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/filelist.js:617
+msgid "{dirs} and {files}"
+msgstr ""
+
+#: js/filelist.js:828 js/filelist.js:866
+msgid "Uploading %n file"
+msgid_plural "Uploading %n files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/files.js:72
+msgid "'.' is an invalid file name."
+msgstr ""
+
+#: js/files.js:81
+msgid ""
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
+"allowed."
+msgstr ""
+
+#: js/files.js:93
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:97
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
+
+#: js/files.js:110
+msgid ""
+"Encryption App is enabled but your keys are not initialized, please log-out "
+"and log-in again"
+msgstr ""
+
+#: js/files.js:114
+msgid ""
+"Invalid private key for Encryption App. Please update your private key "
+"password in your personal settings to recover access to your encrypted "
+"files."
+msgstr ""
+
+#: js/files.js:118
+msgid ""
+"Encryption was disabled but your files are still encrypted. Please go to "
+"your personal settings to decrypt your files."
+msgstr ""
+
+#: js/files.js:349
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:558 js/files.js:596
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 js/files.js:596
+msgid "Error"
+msgstr ""
+
+#: js/files.js:613 templates/index.php:56
+msgid "Name"
+msgstr ""
+
+#: js/files.js:614 templates/index.php:68
+msgid "Size"
+msgstr ""
+
+#: js/files.js:615 templates/index.php:70
+msgid "Modified"
+msgstr ""
+
+#: lib/app.php:60
+msgid "Invalid folder name. Usage of 'Shared' is reserved."
+msgstr ""
+
+#: lib/app.php:101
+#, php-format
+msgid "%s could not be renamed"
+msgstr ""
+
+#: lib/helper.php:11 templates/index.php:16
+msgid "Upload"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/admin.php:10
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:15
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:17
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:20
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:22
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/admin.php:26
+msgid "Save"
+msgstr ""
+
+#: templates/index.php:5
+msgid "New"
+msgstr ""
+
+#: templates/index.php:8
+msgid "New text file"
+msgstr ""
+
+#: templates/index.php:8
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:10
+msgid "New folder"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From link"
+msgstr ""
+
+#: templates/index.php:29
+msgid "Deleted files"
+msgstr ""
+
+#: templates/index.php:34
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/index.php:40
+msgid "You don’t have permission to upload or create files here"
+msgstr ""
+
+#: templates/index.php:45
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:62
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:73 templates/index.php:74
+msgid "Delete"
+msgstr ""
+
+#: templates/index.php:86
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:88
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:93
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:96
+msgid "Current scanning"
+msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ur/files_encryption.po b/l10n/ur/files_encryption.po
new file mode 100644
index 00000000000..3e4b7ec4a7d
--- /dev/null
+++ b/l10n/ur/files_encryption.po
@@ -0,0 +1,201 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 23:45+0000\n"
+"Last-Translator: I Robot\n"
+"Language-Team: Urdu (http://www.transifex.com/projects/p/owncloud/language/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/adminrecovery.php:29
+msgid "Recovery key successfully enabled"
+msgstr ""
+
+#: ajax/adminrecovery.php:34
+msgid ""
+"Could not enable recovery key. Please check your recovery key password!"
+msgstr ""
+
+#: ajax/adminrecovery.php:48
+msgid "Recovery key successfully disabled"
+msgstr ""
+
+#: ajax/adminrecovery.php:53
+msgid ""
+"Could not disable recovery key. Please check your recovery key password!"
+msgstr ""
+
+#: ajax/changeRecoveryPassword.php:49
+msgid "Password successfully changed."
+msgstr ""
+
+#: ajax/changeRecoveryPassword.php:51
+msgid "Could not change the password. Maybe the old password was not correct."
+msgstr ""
+
+#: ajax/updatePrivateKeyPassword.php:52
+msgid "Private key password successfully updated."
+msgstr ""
+
+#: ajax/updatePrivateKeyPassword.php:54
+msgid ""
+"Could not update the private key password. Maybe the old password was not "
+"correct."
+msgstr ""
+
+#: files/error.php:12
+msgid ""
+"Encryption app not initialized! Maybe the encryption app was re-enabled "
+"during your session. Please try to log out and log back in to initialize the"
+" encryption app."
+msgstr ""
+
+#: files/error.php:16
+#, php-format
+msgid ""
+"Your private key is not valid! Likely your password was changed outside of "
+"%s (e.g. your corporate directory). You can update your private key password"
+" in your personal settings to recover access to your encrypted files."
+msgstr ""
+
+#: files/error.php:19
+msgid ""
+"Can not decrypt this file, probably this is a shared file. Please ask the "
+"file owner to reshare the file with you."
+msgstr ""
+
+#: files/error.php:22 files/error.php:27
+msgid ""
+"Unknown error please check your system settings or contact your "
+"administrator"
+msgstr ""
+
+#: hooks/hooks.php:62
+msgid "Missing requirements."
+msgstr ""
+
+#: hooks/hooks.php:63
+msgid ""
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL "
+"together with the PHP extension is enabled and configured properly. For now,"
+" the encryption app has been disabled."
+msgstr ""
+
+#: hooks/hooks.php:281
+msgid "Following users are not set up for encryption:"
+msgstr ""
+
+#: js/detect-migration.js:21
+msgid "Initial encryption started... This can take some time. Please wait."
+msgstr ""
+
+#: js/settings-admin.js:13
+msgid "Saving..."
+msgstr ""
+
+#: templates/invalid_private_key.php:8
+msgid "Go directly to your "
+msgstr ""
+
+#: templates/invalid_private_key.php:8
+msgid "personal settings"
+msgstr ""
+
+#: templates/settings-admin.php:4 templates/settings-personal.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings-admin.php:7
+msgid ""
+"Enable recovery key (allow to recover users files in case of password loss):"
+msgstr ""
+
+#: templates/settings-admin.php:11
+msgid "Recovery key password"
+msgstr ""
+
+#: templates/settings-admin.php:14
+msgid "Repeat Recovery key password"
+msgstr ""
+
+#: templates/settings-admin.php:21 templates/settings-personal.php:51
+msgid "Enabled"
+msgstr ""
+
+#: templates/settings-admin.php:29 templates/settings-personal.php:59
+msgid "Disabled"
+msgstr ""
+
+#: templates/settings-admin.php:34
+msgid "Change recovery key password:"
+msgstr ""
+
+#: templates/settings-admin.php:40
+msgid "Old Recovery key password"
+msgstr ""
+
+#: templates/settings-admin.php:47
+msgid "New Recovery key password"
+msgstr ""
+
+#: templates/settings-admin.php:53
+msgid "Repeat New Recovery key password"
+msgstr ""
+
+#: templates/settings-admin.php:58
+msgid "Change Password"
+msgstr ""
+
+#: templates/settings-personal.php:9
+msgid "Your private key password no longer match your log-in password:"
+msgstr ""
+
+#: templates/settings-personal.php:12
+msgid "Set your old private key password to your current log-in password."
+msgstr ""
+
+#: templates/settings-personal.php:14
+msgid ""
+" If you don't remember your old password you can ask your administrator to "
+"recover your files."
+msgstr ""
+
+#: templates/settings-personal.php:22
+msgid "Old log-in password"
+msgstr ""
+
+#: templates/settings-personal.php:28
+msgid "Current log-in password"
+msgstr ""
+
+#: templates/settings-personal.php:33
+msgid "Update Private Key Password"
+msgstr ""
+
+#: templates/settings-personal.php:42
+msgid "Enable password recovery:"
+msgstr ""
+
+#: templates/settings-personal.php:44
+msgid ""
+"Enabling this option will allow you to reobtain access to your encrypted "
+"files in case of password loss"
+msgstr ""
+
+#: templates/settings-personal.php:60
+msgid "File recovery settings updated"
+msgstr ""
+
+#: templates/settings-personal.php:61
+msgid "Could not update file recovery"
+msgstr ""
diff --git a/l10n/ur/files_external.po b/l10n/ur/files_external.po
new file mode 100644
index 00000000000..480a799b4e4
--- /dev/null
+++ b/l10n/ur/files_external.po
@@ -0,0 +1,123 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 23:45+0000\n"
+"Last-Translator: I Robot\n"
+"Language-Team: Urdu (http://www.transifex.com/projects/p/owncloud/language/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/dropbox.js:7 js/dropbox.js:28 js/google.js:8 js/google.js:39
+msgid "Access granted"
+msgstr ""
+
+#: js/dropbox.js:30 js/dropbox.js:96 js/dropbox.js:102
+msgid "Error configuring Dropbox storage"
+msgstr ""
+
+#: js/dropbox.js:65 js/google.js:86
+msgid "Grant access"
+msgstr ""
+
+#: js/dropbox.js:101
+msgid "Please provide a valid Dropbox app key and secret."
+msgstr ""
+
+#: js/google.js:42 js/google.js:121
+msgid "Error configuring Google Drive storage"
+msgstr ""
+
+#: lib/config.php:467
+msgid ""
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
+"is not possible. Please ask your system administrator to install it."
+msgstr ""
+
+#: lib/config.php:471
+msgid ""
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
+" of FTP shares is not possible. Please ask your system administrator to "
+"install it."
+msgstr ""
+
+#: lib/config.php:474
+msgid ""
+"<b>Warning:</b> The Curl support in PHP is not enabled or installed. "
+"Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask "
+"your system administrator to install it."
+msgstr ""
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:9 templates/settings.php:28
+msgid "Folder name"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "External storage"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Add storage"
+msgstr ""
+
+#: templates/settings.php:90
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:92
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:100
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:113 templates/settings.php:114
+#: templates/settings.php:149 templates/settings.php:150
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:129
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:130
+msgid "Allow users to mount their own external storage"
+msgstr ""
+
+#: templates/settings.php:141
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:159
+msgid "Import Root Certificate"
+msgstr ""
diff --git a/l10n/ur/files_sharing.po b/l10n/ur/files_sharing.po
new file mode 100644
index 00000000000..1dd85cf47f2
--- /dev/null
+++ b/l10n/ur/files_sharing.po
@@ -0,0 +1,84 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 23:45+0000\n"
+"Last-Translator: I Robot\n"
+"Language-Team: Urdu (http://www.transifex.com/projects/p/owncloud/language/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/authenticate.php:4
+msgid "This share is password-protected"
+msgstr ""
+
+#: templates/authenticate.php:7
+msgid "The password is wrong. Try again."
+msgstr ""
+
+#: templates/authenticate.php:10
+msgid "Password"
+msgstr ""
+
+#: templates/part.404.php:3
+msgid "Sorry, this link doesn’t seem to work anymore."
+msgstr ""
+
+#: templates/part.404.php:4
+msgid "Reasons might be:"
+msgstr ""
+
+#: templates/part.404.php:6
+msgid "the item was removed"
+msgstr ""
+
+#: templates/part.404.php:7
+msgid "the link expired"
+msgstr ""
+
+#: templates/part.404.php:8
+msgid "sharing is disabled"
+msgstr ""
+
+#: templates/part.404.php:10
+msgid "For more info, please ask the person who sent this link."
+msgstr ""
+
+#: templates/public.php:18
+#, php-format
+msgid "%s shared the folder %s with you"
+msgstr ""
+
+#: templates/public.php:21
+#, php-format
+msgid "%s shared the file %s with you"
+msgstr ""
+
+#: templates/public.php:29 templates/public.php:95
+msgid "Download"
+msgstr ""
+
+#: templates/public.php:46 templates/public.php:49
+msgid "Upload"
+msgstr ""
+
+#: templates/public.php:59
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/public.php:92
+msgid "No preview available for"
+msgstr ""
+
+#: templates/public.php:99
+msgid "Direct link"
+msgstr ""
diff --git a/l10n/ur/files_trashbin.po b/l10n/ur/files_trashbin.po
new file mode 100644
index 00000000000..d1b08db59f1
--- /dev/null
+++ b/l10n/ur/files_trashbin.po
@@ -0,0 +1,60 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 23:45+0000\n"
+"Last-Translator: I Robot\n"
+"Language-Team: Urdu (http://www.transifex.com/projects/p/owncloud/language/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:63
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:43
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:18 js/trash.js:45 js/trash.js:88 js/trash.js:142
+msgid "Error"
+msgstr ""
+
+#: lib/trashbin.php:905 lib/trashbin.php:907
+msgid "restored"
+msgstr ""
+
+#: templates/index.php:7
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20
+msgid "Name"
+msgstr ""
+
+#: templates/index.php:23 templates/index.php:25
+msgid "Restore"
+msgstr ""
+
+#: templates/index.php:31
+msgid "Deleted"
+msgstr ""
+
+#: templates/index.php:34 templates/index.php:35
+msgid "Delete"
+msgstr ""
+
+#: templates/part.breadcrumb.php:8
+msgid "Deleted Files"
+msgstr ""
diff --git a/l10n/ur/files_versions.po b/l10n/ur/files_versions.po
new file mode 100644
index 00000000000..377d24db42b
--- /dev/null
+++ b/l10n/ur/files_versions.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 23:45+0000\n"
+"Last-Translator: I Robot\n"
+"Language-Team: Urdu (http://www.transifex.com/projects/p/owncloud/language/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/rollbackVersion.php:13
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: js/versions.js:14
+msgid "Versions"
+msgstr ""
+
+#: js/versions.js:60
+msgid "Failed to revert {file} to revision {timestamp}."
+msgstr ""
+
+#: js/versions.js:86
+msgid "More versions..."
+msgstr ""
+
+#: js/versions.js:123
+msgid "No other versions available"
+msgstr ""
+
+#: js/versions.js:154
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ur/lib.po b/l10n/ur/lib.po
new file mode 100644
index 00000000000..ba1af659a1c
--- /dev/null
+++ b/l10n/ur/lib.po
@@ -0,0 +1,333 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 23:45+0000\n"
+"Last-Translator: I Robot\n"
+"Language-Team: Urdu (http://www.transifex.com/projects/p/owncloud/language/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: private/app.php:245
+#, php-format
+msgid ""
+"App \"%s\" can't be installed because it is not compatible with this version"
+" of ownCloud."
+msgstr ""
+
+#: private/app.php:257
+msgid "No app name specified"
+msgstr ""
+
+#: private/app.php:362
+msgid "Help"
+msgstr ""
+
+#: private/app.php:375
+msgid "Personal"
+msgstr ""
+
+#: private/app.php:386
+msgid "Settings"
+msgstr ""
+
+#: private/app.php:398
+msgid "Users"
+msgstr ""
+
+#: private/app.php:411
+msgid "Admin"
+msgstr ""
+
+#: private/app.php:875
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
+#: private/avatar.php:66
+msgid "Unknown filetype"
+msgstr ""
+
+#: private/avatar.php:71
+msgid "Invalid image"
+msgstr ""
+
+#: private/defaults.php:34
+msgid "web services under your control"
+msgstr ""
+
+#: private/files.php:66 private/files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: private/files.php:231
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: private/files.php:232
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: private/files.php:233 private/files.php:261
+msgid "Back to Files"
+msgstr ""
+
+#: private/files.php:258
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: private/files.php:259
+msgid ""
+"Please download the files separately in smaller chunks or kindly ask your "
+"administrator."
+msgstr ""
+
+#: private/installer.php:63
+msgid "No source specified when installing app"
+msgstr ""
+
+#: private/installer.php:70
+msgid "No href specified when installing app from http"
+msgstr ""
+
+#: private/installer.php:75
+msgid "No path specified when installing app from local file"
+msgstr ""
+
+#: private/installer.php:89
+#, php-format
+msgid "Archives of type %s are not supported"
+msgstr ""
+
+#: private/installer.php:103
+msgid "Failed to open archive when installing app"
+msgstr ""
+
+#: private/installer.php:125
+msgid "App does not provide an info.xml file"
+msgstr ""
+
+#: private/installer.php:131
+msgid "App can't be installed because of not allowed code in the App"
+msgstr ""
+
+#: private/installer.php:140
+msgid ""
+"App can't be installed because it is not compatible with this version of "
+"ownCloud"
+msgstr ""
+
+#: private/installer.php:146
+msgid ""
+"App can't be installed because it contains the <shipped>true</shipped> tag "
+"which is not allowed for non shipped apps"
+msgstr ""
+
+#: private/installer.php:159
+msgid ""
+"App can't be installed because the version in info.xml/version is not the "
+"same as the version reported from the app store"
+msgstr ""
+
+#: private/installer.php:169
+msgid "App directory already exists"
+msgstr ""
+
+#: private/installer.php:182
+#, php-format
+msgid "Can't create app folder. Please fix permissions. %s"
+msgstr ""
+
+#: private/json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: private/json.php:39 private/json.php:62 private/json.php:73
+msgid "Authentication error"
+msgstr ""
+
+#: private/json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: private/search/provider/file.php:18 private/search/provider/file.php:36
+msgid "Files"
+msgstr ""
+
+#: private/search/provider/file.php:27 private/search/provider/file.php:34
+msgid "Text"
+msgstr ""
+
+#: private/search/provider/file.php:30
+msgid "Images"
+msgstr ""
+
+#: private/setup/abstractdatabase.php:26
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: private/setup/abstractdatabase.php:29
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: private/setup/abstractdatabase.php:32
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: private/setup/mssql.php:20
+#, php-format
+msgid "MS SQL username and/or password not valid: %s"
+msgstr ""
+
+#: private/setup/mssql.php:21 private/setup/mysql.php:13
+#: private/setup/oci.php:114 private/setup/postgresql.php:24
+#: private/setup/postgresql.php:70
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: private/setup/mysql.php:12
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: private/setup/mysql.php:67 private/setup/oci.php:54
+#: private/setup/oci.php:121 private/setup/oci.php:144
+#: private/setup/oci.php:151 private/setup/oci.php:162
+#: private/setup/oci.php:169 private/setup/oci.php:178
+#: private/setup/oci.php:186 private/setup/oci.php:195
+#: private/setup/oci.php:201 private/setup/postgresql.php:89
+#: private/setup/postgresql.php:98 private/setup/postgresql.php:115
+#: private/setup/postgresql.php:125 private/setup/postgresql.php:134
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: private/setup/mysql.php:68 private/setup/oci.php:55
+#: private/setup/oci.php:122 private/setup/oci.php:145
+#: private/setup/oci.php:152 private/setup/oci.php:163
+#: private/setup/oci.php:179 private/setup/oci.php:187
+#: private/setup/oci.php:196 private/setup/postgresql.php:90
+#: private/setup/postgresql.php:99 private/setup/postgresql.php:116
+#: private/setup/postgresql.php:126 private/setup/postgresql.php:135
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: private/setup/mysql.php:85
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: private/setup/mysql.php:86
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: private/setup/mysql.php:91
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: private/setup/mysql.php:92
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: private/setup/oci.php:34
+msgid "Oracle connection could not be established"
+msgstr ""
+
+#: private/setup/oci.php:41 private/setup/oci.php:113
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: private/setup/oci.php:170 private/setup/oci.php:202
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: private/setup/postgresql.php:23 private/setup/postgresql.php:69
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: private/setup.php:28
+msgid "Set an admin username."
+msgstr ""
+
+#: private/setup.php:31
+msgid "Set an admin password."
+msgstr ""
+
+#: private/setup.php:195
+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:196
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: private/tags.php:194
+#, php-format
+msgid "Could not find category \"%s\""
+msgstr ""
+
+#: private/template/functions.php:130
+msgid "seconds ago"
+msgstr ""
+
+#: private/template/functions.php:131
+msgid "%n minute ago"
+msgid_plural "%n minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: private/template/functions.php:132
+msgid "%n hour ago"
+msgid_plural "%n hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: private/template/functions.php:133
+msgid "today"
+msgstr ""
+
+#: private/template/functions.php:134
+msgid "yesterday"
+msgstr ""
+
+#: private/template/functions.php:136
+msgid "%n day go"
+msgid_plural "%n days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: private/template/functions.php:138
+msgid "last month"
+msgstr ""
+
+#: private/template/functions.php:139
+msgid "%n month ago"
+msgid_plural "%n months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: private/template/functions.php:141
+msgid "last year"
+msgstr ""
+
+#: private/template/functions.php:142
+msgid "years ago"
+msgstr ""
diff --git a/l10n/ur/settings.po b/l10n/ur/settings.po
new file mode 100644
index 00000000000..f068880aa58
--- /dev/null
+++ b/l10n/ur/settings.po
@@ -0,0 +1,668 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 23:45+0000\n"
+"Last-Translator: I Robot\n"
+"Language-Team: Urdu (http://www.transifex.com/projects/p/owncloud/language/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/apps/ocs.php:20
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/changedisplayname.php:31
+msgid "Your full name has been changed."
+msgstr ""
+
+#: ajax/changedisplayname.php:34
+msgid "Unable to change full name"
+msgstr ""
+
+#: ajax/creategroup.php:10
+msgid "Group already exists"
+msgstr ""
+
+#: ajax/creategroup.php:19
+msgid "Unable to add group"
+msgstr ""
+
+#: ajax/lostpassword.php:12
+msgid "Email saved"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Invalid email"
+msgstr ""
+
+#: ajax/removegroup.php:13
+msgid "Unable to delete group"
+msgstr ""
+
+#: ajax/removeuser.php:25
+msgid "Unable to delete user"
+msgstr ""
+
+#: ajax/setlanguage.php:15
+msgid "Language changed"
+msgstr ""
+
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/togglegroups.php:12
+msgid "Admins can't remove themself from the admin group"
+msgstr ""
+
+#: ajax/togglegroups.php:30
+#, php-format
+msgid "Unable to add user to group %s"
+msgstr ""
+
+#: ajax/togglegroups.php:36
+#, php-format
+msgid "Unable to remove user from group %s"
+msgstr ""
+
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92 changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
+#: js/apps.js:43
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
+msgid "Disable"
+msgstr ""
+
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
+msgid "Enable"
+msgstr ""
+
+#: js/apps.js:71
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
+msgid "Error while disabling app"
+msgstr ""
+
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
+msgid "Error while enabling app"
+msgstr ""
+
+#: js/apps.js:125
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:128
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:128
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:129 templates/apps.php:43
+msgid "Update"
+msgstr ""
+
+#: js/apps.js:132
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:220
+msgid "Select a profile picture"
+msgstr ""
+
+#: js/personal.js:266
+msgid "Decrypting files... Please wait, this can take some time."
+msgstr ""
+
+#: js/personal.js:287
+msgid "Saving..."
+msgstr ""
+
+#: js/users.js:47
+msgid "deleted"
+msgstr ""
+
+#: js/users.js:47
+msgid "undo"
+msgstr ""
+
+#: js/users.js:79
+msgid "Unable to remove user"
+msgstr ""
+
+#: js/users.js:95 templates/users.php:26 templates/users.php:90
+#: templates/users.php:118
+msgid "Groups"
+msgstr ""
+
+#: js/users.js:100 templates/users.php:92 templates/users.php:130
+msgid "Group Admin"
+msgstr ""
+
+#: js/users.js:123 templates/users.php:170
+msgid "Delete"
+msgstr ""
+
+#: js/users.js:284
+msgid "add group"
+msgstr ""
+
+#: js/users.js:454
+msgid "A valid username must be provided"
+msgstr ""
+
+#: js/users.js:455 js/users.js:461 js/users.js:476
+msgid "Error creating user"
+msgstr ""
+
+#: js/users.js:460
+msgid "A valid password must be provided"
+msgstr ""
+
+#: js/users.js:484
+msgid "Warning: Home directory for user \"{user}\" already exists"
+msgstr ""
+
+#: personal.php:45 personal.php:46
+msgid "__language_name__"
+msgstr ""
+
+#: templates/admin.php:8
+msgid "Everything (fatal issues, errors, warnings, info, debug)"
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Info, warnings, errors and fatal issues"
+msgstr ""
+
+#: templates/admin.php:10
+msgid "Warnings, errors and fatal issues"
+msgstr ""
+
+#: templates/admin.php:11
+msgid "Errors and fatal issues"
+msgstr ""
+
+#: templates/admin.php:12
+msgid "Fatal issues only"
+msgstr ""
+
+#: templates/admin.php:22 templates/admin.php:36
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:25
+#, php-format
+msgid ""
+"You are accessing %s via HTTP. We strongly suggest you configure your server"
+" to require using HTTPS instead."
+msgstr ""
+
+#: templates/admin.php:39
+msgid ""
+"Your data directory and your files are probably accessible from the "
+"internet. The .htaccess file is not working. We strongly suggest that you "
+"configure your webserver in a way that the data directory is no longer "
+"accessible or you move the data directory outside the webserver document "
+"root."
+msgstr ""
+
+#: templates/admin.php:50
+msgid "Setup Warning"
+msgstr ""
+
+#: templates/admin.php:53
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: templates/admin.php:54
+#, php-format
+msgid "Please double check the <a href=\"%s\">installation guides</a>."
+msgstr ""
+
+#: templates/admin.php:65
+msgid "Module 'fileinfo' missing"
+msgstr ""
+
+#: templates/admin.php:68
+msgid ""
+"The PHP module 'fileinfo' is missing. We strongly recommend to enable this "
+"module to get best results with mime-type detection."
+msgstr ""
+
+#: templates/admin.php:79
+msgid "Your PHP version is outdated"
+msgstr ""
+
+#: templates/admin.php:82
+msgid ""
+"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."
+msgstr ""
+
+#: templates/admin.php:93
+msgid "Locale not working"
+msgstr ""
+
+#: templates/admin.php:98
+msgid "System locale can not be set to a one which supports UTF-8."
+msgstr ""
+
+#: templates/admin.php:102
+msgid ""
+"This means that there might be problems with certain characters in file "
+"names."
+msgstr ""
+
+#: templates/admin.php:106
+#, php-format
+msgid ""
+"We strongly suggest to install the required packages on your system to "
+"support one of the following locales: %s."
+msgstr ""
+
+#: templates/admin.php:118
+msgid "Internet connection not working"
+msgstr ""
+
+#: templates/admin.php:121
+msgid ""
+"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."
+msgstr ""
+
+#: templates/admin.php:135
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:142
+msgid "Execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:150
+msgid ""
+"cron.php is registered at a webcron service to call cron.php every 15 "
+"minutes over http."
+msgstr ""
+
+#: templates/admin.php:158
+msgid "Use systems cron service to call the cron.php file every 15 minutes."
+msgstr ""
+
+#: templates/admin.php:163
+msgid "Sharing"
+msgstr ""
+
+#: templates/admin.php:169
+msgid "Enable Share API"
+msgstr ""
+
+#: templates/admin.php:170
+msgid "Allow apps to use the Share API"
+msgstr ""
+
+#: templates/admin.php:177
+msgid "Allow links"
+msgstr ""
+
+#: templates/admin.php:178
+msgid "Allow users to share items to the public with links"
+msgstr ""
+
+#: templates/admin.php:186
+msgid "Allow public uploads"
+msgstr ""
+
+#: templates/admin.php:187
+msgid ""
+"Allow users to enable others to upload into their publicly shared folders"
+msgstr ""
+
+#: templates/admin.php:195
+msgid "Allow resharing"
+msgstr ""
+
+#: templates/admin.php:196
+msgid "Allow users to share items shared with them again"
+msgstr ""
+
+#: templates/admin.php:203
+msgid "Allow users to share with anyone"
+msgstr ""
+
+#: templates/admin.php:206
+msgid "Allow users to only share with users in their groups"
+msgstr ""
+
+#: templates/admin.php:213
+msgid "Allow mail notification"
+msgstr ""
+
+#: templates/admin.php:214
+msgid "Allow user to send mail notification for shared files"
+msgstr ""
+
+#: templates/admin.php:221
+msgid "Security"
+msgstr ""
+
+#: templates/admin.php:234
+msgid "Enforce HTTPS"
+msgstr ""
+
+#: templates/admin.php:236
+#, php-format
+msgid "Forces the clients to connect to %s via an encrypted connection."
+msgstr ""
+
+#: templates/admin.php:242
+#, php-format
+msgid ""
+"Please connect to your %s via HTTPS to enable or disable the SSL "
+"enforcement."
+msgstr ""
+
+#: templates/admin.php:254
+msgid "Log"
+msgstr ""
+
+#: templates/admin.php:255
+msgid "Log level"
+msgstr ""
+
+#: templates/admin.php:287
+msgid "More"
+msgstr ""
+
+#: templates/admin.php:288
+msgid "Less"
+msgstr ""
+
+#: templates/admin.php:294 templates/personal.php:173
+msgid "Version"
+msgstr ""
+
+#: templates/admin.php:298 templates/personal.php:176
+msgid ""
+"Developed by the <a href=\"http://ownCloud.org/contact\" "
+"target=\"_blank\">ownCloud community</a>, the <a "
+"href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is "
+"licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" "
+"target=\"_blank\"><abbr title=\"Affero General Public "
+"License\">AGPL</abbr></a>."
+msgstr ""
+
+#: templates/apps.php:13
+msgid "Add your App"
+msgstr ""
+
+#: templates/apps.php:28
+msgid "More Apps"
+msgstr ""
+
+#: templates/apps.php:33
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:39
+msgid "See application page at apps.owncloud.com"
+msgstr ""
+
+#: templates/apps.php:41
+msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
+msgstr ""
+
+#: templates/help.php:4
+msgid "User Documentation"
+msgstr ""
+
+#: templates/help.php:6
+msgid "Administrator Documentation"
+msgstr ""
+
+#: templates/help.php:9
+msgid "Online Documentation"
+msgstr ""
+
+#: templates/help.php:11
+msgid "Forum"
+msgstr ""
+
+#: templates/help.php:14
+msgid "Bugtracker"
+msgstr ""
+
+#: templates/help.php:17
+msgid "Commercial Support"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "Get the apps to sync your files"
+msgstr ""
+
+#: templates/personal.php:19
+msgid "Show First Run Wizard again"
+msgstr ""
+
+#: templates/personal.php:27
+#, php-format
+msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
+msgstr ""
+
+#: templates/personal.php:39 templates/users.php:23 templates/users.php:89
+msgid "Password"
+msgstr ""
+
+#: templates/personal.php:40
+msgid "Your password was changed"
+msgstr ""
+
+#: templates/personal.php:41
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:42
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:44
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:46
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:58 templates/users.php:88
+msgid "Full Name"
+msgstr ""
+
+#: templates/personal.php:73
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:75
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:76
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:86
+msgid "Profile picture"
+msgstr ""
+
+#: templates/personal.php:91
+msgid "Upload new"
+msgstr ""
+
+#: templates/personal.php:93
+msgid "Select new from Files"
+msgstr ""
+
+#: templates/personal.php:94
+msgid "Remove image"
+msgstr ""
+
+#: templates/personal.php:95
+msgid "Either png or jpg. Ideally square but you will be able to crop it."
+msgstr ""
+
+#: templates/personal.php:97
+msgid "Your avatar is provided by your original account."
+msgstr ""
+
+#: templates/personal.php:101
+msgid "Abort"
+msgstr ""
+
+#: templates/personal.php:102
+msgid "Choose as profile image"
+msgstr ""
+
+#: templates/personal.php:110 templates/personal.php:111
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:130
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:137
+msgid "WebDAV"
+msgstr ""
+
+#: templates/personal.php:139
+#, php-format
+msgid ""
+"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via "
+"WebDAV</a>"
+msgstr ""
+
+#: templates/personal.php:150
+msgid "Encryption"
+msgstr ""
+
+#: templates/personal.php:152
+msgid "The encryption app is no longer enabled, please decrypt all your files"
+msgstr ""
+
+#: templates/personal.php:158
+msgid "Log-in password"
+msgstr ""
+
+#: templates/personal.php:163
+msgid "Decrypt all Files"
+msgstr ""
+
+#: templates/users.php:21
+msgid "Login Name"
+msgstr ""
+
+#: templates/users.php:30
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:36
+msgid "Admin Recovery Password"
+msgstr ""
+
+#: templates/users.php:37 templates/users.php:38
+msgid ""
+"Enter the recovery password in order to recover the users files during "
+"password change"
+msgstr ""
+
+#: templates/users.php:42
+msgid "Default Storage"
+msgstr ""
+
+#: templates/users.php:44 templates/users.php:139
+msgid "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")"
+msgstr ""
+
+#: templates/users.php:48 templates/users.php:148
+msgid "Unlimited"
+msgstr ""
+
+#: templates/users.php:66 templates/users.php:163
+msgid "Other"
+msgstr ""
+
+#: templates/users.php:87
+msgid "Username"
+msgstr ""
+
+#: templates/users.php:94
+msgid "Storage"
+msgstr ""
+
+#: templates/users.php:108
+msgid "change full name"
+msgstr ""
+
+#: templates/users.php:112
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:143
+msgid "Default"
+msgstr ""
diff --git a/l10n/ur/user_ldap.po b/l10n/ur/user_ldap.po
new file mode 100644
index 00000000000..8d5790eea9f
--- /dev/null
+++ b/l10n/ur/user_ldap.po
@@ -0,0 +1,513 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 23:45+0000\n"
+"Last-Translator: I Robot\n"
+"Language-Team: Urdu (http://www.transifex.com/projects/p/owncloud/language/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/clearMappings.php:34
+msgid "Failed to clear the mappings."
+msgstr ""
+
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:39
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:42
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:46
+msgid ""
+"The configuration is invalid. Please have a look at the logs for further "
+"details."
+msgstr ""
+
+#: ajax/wizard.php:32
+msgid "No action specified"
+msgstr ""
+
+#: ajax/wizard.php:38
+msgid "No configuration specified"
+msgstr ""
+
+#: ajax/wizard.php:81
+msgid "No data specified"
+msgstr ""
+
+#: ajax/wizard.php:89
+#, php-format
+msgid " Could not set configuration %s"
+msgstr ""
+
+#: js/settings.js:67
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:84
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:99
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:127
+msgid "mappings cleared"
+msgstr ""
+
+#: js/settings.js:128
+msgid "Success"
+msgstr ""
+
+#: js/settings.js:133
+msgid "Error"
+msgstr ""
+
+#: js/settings.js:837
+msgid "Configuration OK"
+msgstr ""
+
+#: js/settings.js:846
+msgid "Configuration incorrect"
+msgstr ""
+
+#: js/settings.js:855
+msgid "Configuration incomplete"
+msgstr ""
+
+#: js/settings.js:872 js/settings.js:881
+msgid "Select groups"
+msgstr ""
+
+#: js/settings.js:875 js/settings.js:884
+msgid "Select object classes"
+msgstr ""
+
+#: js/settings.js:878
+msgid "Select attributes"
+msgstr ""
+
+#: js/settings.js:905
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:912
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:921
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:922
+msgid "Confirm Deletion"
+msgstr ""
+
+#: lib/wizard.php:79 lib/wizard.php:93
+#, php-format
+msgid "%s group found"
+msgid_plural "%s groups found"
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/wizard.php:122
+#, php-format
+msgid "%s user found"
+msgid_plural "%s users found"
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/wizard.php:778 lib/wizard.php:790
+msgid "Invalid Host"
+msgstr ""
+
+#: lib/wizard.php:951
+msgid "Could not find the desired feature"
+msgstr ""
+
+#: templates/part.settingcontrols.php:2
+msgid "Save"
+msgstr ""
+
+#: templates/part.settingcontrols.php:4
+msgid "Test Configuration"
+msgstr ""
+
+#: templates/part.settingcontrols.php:10 templates/part.wizardcontrols.php:14
+msgid "Help"
+msgstr ""
+
+#: templates/part.wizard-groupfilter.php:4
+#, php-format
+msgid "Limit the access to %s to groups meeting this criteria:"
+msgstr ""
+
+#: templates/part.wizard-groupfilter.php:8
+#: templates/part.wizard-userfilter.php:8
+msgid "only those object classes:"
+msgstr ""
+
+#: templates/part.wizard-groupfilter.php:17
+#: templates/part.wizard-userfilter.php:17
+msgid "only from those groups:"
+msgstr ""
+
+#: templates/part.wizard-groupfilter.php:25
+#: templates/part.wizard-loginfilter.php:32
+#: templates/part.wizard-userfilter.php:25
+msgid "Edit raw filter instead"
+msgstr ""
+
+#: templates/part.wizard-groupfilter.php:30
+#: templates/part.wizard-loginfilter.php:37
+#: templates/part.wizard-userfilter.php:30
+msgid "Raw LDAP filter"
+msgstr ""
+
+#: templates/part.wizard-groupfilter.php:31
+#, php-format
+msgid ""
+"The filter specifies which LDAP groups shall have access to the %s instance."
+msgstr ""
+
+#: templates/part.wizard-groupfilter.php:38
+msgid "groups found"
+msgstr ""
+
+#: templates/part.wizard-loginfilter.php:4
+msgid "What attribute shall be used as login name:"
+msgstr ""
+
+#: templates/part.wizard-loginfilter.php:8
+msgid "LDAP Username:"
+msgstr ""
+
+#: templates/part.wizard-loginfilter.php:16
+msgid "LDAP Email Address:"
+msgstr ""
+
+#: templates/part.wizard-loginfilter.php:24
+msgid "Other Attributes:"
+msgstr ""
+
+#: templates/part.wizard-loginfilter.php:38
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action. Example: \"uid=%%uid\""
+msgstr ""
+
+#: templates/part.wizard-server.php:18
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/part.wizard-server.php:30
+msgid "Host"
+msgstr ""
+
+#: templates/part.wizard-server.php:31
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/part.wizard-server.php:36
+msgid "Port"
+msgstr ""
+
+#: templates/part.wizard-server.php:44
+msgid "User DN"
+msgstr ""
+
+#: templates/part.wizard-server.php:45
+msgid ""
+"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."
+msgstr ""
+
+#: templates/part.wizard-server.php:52
+msgid "Password"
+msgstr ""
+
+#: templates/part.wizard-server.php:53
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/part.wizard-server.php:60
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/part.wizard-server.php:61
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/part.wizard-userfilter.php:4
+#, php-format
+msgid "Limit the access to %s to users meeting this criteria:"
+msgstr ""
+
+#: templates/part.wizard-userfilter.php:31
+#, php-format
+msgid ""
+"The filter specifies which LDAP users shall have access to the %s instance."
+msgstr ""
+
+#: templates/part.wizard-userfilter.php:38
+msgid "users found"
+msgstr ""
+
+#: templates/part.wizardcontrols.php:5
+msgid "Back"
+msgstr ""
+
+#: templates/part.wizardcontrols.php:8
+msgid "Continue"
+msgstr ""
+
+#: templates/settings.php:11
+msgid ""
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
+" experience unexpected behavior. Please ask your system administrator to "
+"disable one of them."
+msgstr ""
+
+#: templates/settings.php:14
+msgid ""
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:22
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Backup (Replica) Host"
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:27
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:27
+#, php-format
+msgid ""
+"Not recommended, use it for testing only! If connection only works with this"
+" option, import the LDAP server's SSL certificate in your %s server."
+msgstr ""
+
+#: templates/settings.php:28
+msgid "Cache Time-To-Live"
+msgstr ""
+
+#: templates/settings.php:28
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:30
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "The LDAP attribute to use to generate the user's display name."
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:34 templates/settings.php:37
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "The LDAP attribute to use to generate the groups's display name."
+msgstr ""
+
+#: templates/settings.php:36
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:36
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:38
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:40
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:42
+msgid "Quota Field"
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Quota Default"
+msgstr ""
+
+#: templates/settings.php:43
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:44
+msgid "Email Field"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "User Home Folder Naming Rule"
+msgstr ""
+
+#: templates/settings.php:45
+msgid ""
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
+"attribute."
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Internal Username"
+msgstr ""
+
+#: templates/settings.php:52
+msgid ""
+"By default the internal username will be created from the UUID attribute. It"
+" makes sure that the username is unique and characters do not need to be "
+"converted. The internal username has the restriction that only these "
+"characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced "
+"with their ASCII correspondence or simply omitted. On collisions a number "
+"will be added/increased. The internal username is used to identify a user "
+"internally. It is also the default name for the user home folder. It is also"
+" a part of remote URLs, for instance for all *DAV services. With this "
+"setting, the default behavior can be overridden. To achieve a similar "
+"behavior as before ownCloud 5 enter the user display name attribute in the "
+"following field. Leave it empty for default behavior. Changes will have "
+"effect only on newly mapped (added) LDAP users."
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Internal Username Attribute:"
+msgstr ""
+
+#: templates/settings.php:54
+msgid "Override UUID detection"
+msgstr ""
+
+#: templates/settings.php:55
+msgid ""
+"By default, the UUID attribute is automatically detected. The UUID attribute"
+" is used to doubtlessly identify LDAP users and groups. Also, the internal "
+"username will be created based on the UUID, if not specified otherwise "
+"above. You can override the setting and pass an attribute of your choice. "
+"You must make sure that the attribute of your choice can be fetched for both"
+" users and groups and it is unique. Leave it empty for default behavior. "
+"Changes will have effect only on newly mapped (added) LDAP users and groups."
+msgstr ""
+
+#: templates/settings.php:56
+msgid "UUID Attribute for Users:"
+msgstr ""
+
+#: templates/settings.php:57
+msgid "UUID Attribute for Groups:"
+msgstr ""
+
+#: templates/settings.php:58
+msgid "Username-LDAP User Mapping"
+msgstr ""
+
+#: templates/settings.php:59
+msgid ""
+"Usernames are used to store and assign (meta) data. In order to precisely "
+"identify and recognize users, each LDAP user will have a internal username. "
+"This requires a mapping from username to LDAP user. The created username is "
+"mapped to the UUID of the LDAP user. Additionally the DN is cached as well "
+"to reduce LDAP interaction, but it is not used for identification. If the DN"
+" changes, the changes will be found. The internal username is used all over."
+" Clearing the mappings will have leftovers everywhere. Clearing the mappings"
+" is not configuration sensitive, it affects all LDAP configurations! Never "
+"clear the mappings in a production environment, only in a testing or "
+"experimental stage."
+msgstr ""
+
+#: templates/settings.php:60
+msgid "Clear Username-LDAP User Mapping"
+msgstr ""
+
+#: templates/settings.php:60
+msgid "Clear Groupname-LDAP Group Mapping"
+msgstr ""
diff --git a/l10n/ur/user_webdavauth.po b/l10n/ur/user_webdavauth.po
new file mode 100644
index 00000000000..8db54c86db4
--- /dev/null
+++ b/l10n/ur/user_webdavauth.po
@@ -0,0 +1,33 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: translations@owncloud.org\n"
+"POT-Creation-Date: 2014-01-07 01:55-0500\n"
+"PO-Revision-Date: 2014-01-06 23:45+0000\n"
+"Last-Translator: I Robot\n"
+"Language-Team: Urdu (http://www.transifex.com/projects/p/owncloud/language/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Address: "
+msgstr ""
+
+#: templates/settings.php:7
+msgid ""
+"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."
+msgstr ""
diff --git a/lib/base.php b/lib/base.php
index d3e483f4948..a8e9e901847 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -410,8 +410,6 @@ class OC {
self::$loader->registerPrefix('Doctrine\\DBAL', 'doctrine/dbal/lib');
self::$loader->registerPrefix('Symfony\\Component\\Routing', 'symfony/routing');
self::$loader->registerPrefix('Symfony\\Component\\Console', 'symfony/console');
- self::$loader->registerPrefix('Sabre\\VObject', '3rdparty');
- self::$loader->registerPrefix('Sabre_', '3rdparty');
self::$loader->registerPrefix('Patchwork', '3rdparty');
spl_autoload_register(array(self::$loader, 'load'));
@@ -479,6 +477,12 @@ class OC {
}
OC_Util::isSetLocaleWorking();
+ // setup 3rdparty autoloader
+ $vendorAutoLoad = OC::$THIRDPARTYROOT . '/3rdparty/autoload.php';
+ if (file_exists($vendorAutoLoad)) {
+ require_once $vendorAutoLoad;
+ }
+
// set debug mode if an xdebug session is active
if (!defined('DEBUG') || !DEBUG) {
if (isset($_COOKIE['XDEBUG_SESSION'])) {
diff --git a/lib/l10n/ur.php b/lib/l10n/ur.php
new file mode 100644
index 00000000000..15f78e0bce6
--- /dev/null
+++ b/lib/l10n/ur.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php
index 295575f0af6..53524ec9e54 100644
--- a/lib/private/connector/sabre/file.php
+++ b/lib/private/connector/sabre/file.php
@@ -64,7 +64,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
}
// mark file as partial while uploading (ignored by the scanner)
- $partpath = $this->path . '.part';
+ $partpath = $this->path . '.ocTransferId' . rand() . '.part';
// if file is located in /Shared we write the part file to the users
// root folder because we can't create new files in /shared
diff --git a/lib/private/files.php b/lib/private/files.php
index 6ffa14c0d91..e6c81d58bd2 100644
--- a/lib/private/files.php
+++ b/lib/private/files.php
@@ -115,12 +115,7 @@ class OC_Files {
}
OC_Util::obEnd();
if ($zip or \OC\Files\Filesystem::isReadable($filename)) {
- if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
- header( 'Content-Disposition: attachment; filename="' . rawurlencode($name) . '"' );
- } else {
- header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode($name)
- . '; filename="' . rawurlencode($name) . '"' );
- }
+ OC_Response::setContentDispositionHeader($name, 'attachment');
header('Content-Transfer-Encoding: binary');
OC_Response::disableCaching();
if ($zip) {
diff --git a/lib/private/files/cache/homecache.php b/lib/private/files/cache/homecache.php
index 18dfbfe3191..71bb944da71 100644
--- a/lib/private/files/cache/homecache.php
+++ b/lib/private/files/cache/homecache.php
@@ -16,7 +16,7 @@ class HomeCache extends Cache {
* @return int
*/
public function calculateFolderSize($path) {
- if ($path !== '/' and $path !== '') {
+ if ($path !== '/' and $path !== '' and $path !== 'files') {
return parent::calculateFolderSize($path);
}
diff --git a/lib/private/files/view.php b/lib/private/files/view.php
index ac45a881331..8893911ed5d 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -336,6 +336,19 @@ class View {
}
public function unlink($path) {
+ if ($path === '' || $path === '/') {
+ // do not allow deleting the root
+ return false;
+ }
+ $postFix = (substr($path, -1, 1) === '/') ? '/' : '';
+ $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
+ list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix);
+ if (!$internalPath || $internalPath === '' || $internalPath === '/') {
+ // do not allow deleting the storage's root / the mount point
+ // because for some storages it might delete the whole contents
+ // but isn't supposed to work that way
+ return false;
+ }
return $this->basicOperation('unlink', $path, array('delete'));
}
diff --git a/lib/private/helper.php b/lib/private/helper.php
index 4fe3097af26..1c8d01c141f 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -858,11 +858,13 @@ class OC_Helper {
if (!function_exists($function_name)) {
return false;
}
- $disabled = explode(', ', ini_get('disable_functions'));
+ $disabled = explode(',', ini_get('disable_functions'));
+ $disabled = array_map('trim', $disabled);
if (in_array($function_name, $disabled)) {
return false;
}
- $disabled = explode(', ', ini_get('suhosin.executor.func.blacklist'));
+ $disabled = explode(',', ini_get('suhosin.executor.func.blacklist'));
+ $disabled = array_map('trim', $disabled);
if (in_array($function_name, $disabled)) {
return false;
}
diff --git a/lib/private/mimetypes.list.php b/lib/private/mimetypes.list.php
index 740982910e0..08228336966 100644
--- a/lib/private/mimetypes.list.php
+++ b/lib/private/mimetypes.list.php
@@ -66,6 +66,7 @@ return array(
'xlsx'=>'application/msexcel',
'php'=>'application/x-php',
'exe'=>'application/x-ms-dos-executable',
+ 'msi'=>'application/x-msi',
'pl'=>'application/x-pearl',
'py'=>'application/x-python',
'blend'=>'application/x-blender',
@@ -97,8 +98,6 @@ return array(
'ai' => 'application/illustrator',
'epub' => 'application/epub+zip',
'mobi' => 'application/x-mobipocket-ebook',
- 'exe' => 'application',
- 'msi' => 'application',
'md' => 'text/markdown',
'markdown' => 'text/markdown',
'mdown' => 'text/markdown',
diff --git a/lib/private/preview/movies.php b/lib/private/preview/movies.php
index ac771deb413..71cd3bae057 100644
--- a/lib/private/preview/movies.php
+++ b/lib/private/preview/movies.php
@@ -18,7 +18,7 @@ function findBinaryPath($program) {
// movie preview is currently not supported on Windows
if (!\OC_Util::runningOnWindows()) {
- $isExecEnabled = !in_array('exec', explode(', ', ini_get('disable_functions')));
+ $isExecEnabled = \OC_Helper::is_function_enabled('exec');
$ffmpegBinary = null;
$avconvBinary = null;
diff --git a/lib/private/preview/office.php b/lib/private/preview/office.php
index 318ab51f851..7a4826c76ec 100644
--- a/lib/private/preview/office.php
+++ b/lib/private/preview/office.php
@@ -7,7 +7,7 @@
*/
//both, libreoffice backend and php fallback, need imagick
if (extension_loaded('imagick')) {
- $isShellExecEnabled = !in_array('shell_exec', explode(', ', ini_get('disable_functions')));
+ $isShellExecEnabled = \OC_Helper::is_function_enabled('shell_exec');
// LibreOffice preview is currently not supported on Windows
if (!\OC_Util::runningOnWindows()) {
diff --git a/lib/private/request.php b/lib/private/request.php
index b2afda35922..d9d5ae08e28 100755
--- a/lib/private/request.php
+++ b/lib/private/request.php
@@ -7,6 +7,11 @@
*/
class OC_Request {
+
+ const USER_AGENT_IE = '/MSIE/';
+ // Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent
+ const USER_AGENT_ANDROID_MOBILE_CHROME = '#Android.*Chrome/[.0-9]*#';
+
/**
* @brief Check overwrite condition
* @param string $type
@@ -210,4 +215,22 @@ class OC_Request {
return false;
}
}
+
+ /**
+ * Checks whether the user agent matches a given regex
+ * @param string|array $agent agent name or array of agent names
+ * @return boolean true if at least one of the given agent matches,
+ * false otherwise
+ */
+ static public function isUserAgent($agent) {
+ if (!is_array($agent)) {
+ $agent = array($agent);
+ }
+ foreach ($agent as $regex) {
+ if (preg_match($regex, $_SERVER['HTTP_USER_AGENT'])) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/lib/private/response.php b/lib/private/response.php
index 674176d078b..04746437347 100644
--- a/lib/private/response.php
+++ b/lib/private/response.php
@@ -148,6 +148,20 @@ class OC_Response {
}
/**
+ * Sets the content disposition header (with possible workarounds)
+ * @param string $filename file name
+ * @param string $type disposition type, either 'attachment' or 'inline'
+ */
+ static public function setContentDispositionHeader( $filename, $type = 'attachment' ) {
+ if (OC_Request::isUserAgent(array(OC_Request::USER_AGENT_IE, OC_Request::USER_AGENT_ANDROID_MOBILE_CHROME))) {
+ header( 'Content-Disposition: ' . rawurlencode($type) . '; filename="' . rawurlencode( $filename ) . '"' );
+ } else {
+ header( 'Content-Disposition: ' . rawurlencode($type) . '; filename*=UTF-8\'\'' . rawurlencode( $filename )
+ . '; filename="' . rawurlencode( $filename ) . '"' );
+ }
+ }
+
+ /**
* @brief Send file as response, checking and setting caching headers
* @param $filepath of file to send
*/
diff --git a/lib/private/server.php b/lib/private/server.php
index 6b034a5be9f..c9e593ec2ed 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -128,7 +128,9 @@ class Server extends SimpleContainer implements IServerContainer {
return new \OC\L10N\Factory();
});
$this->registerService('URLGenerator', function($c) {
- return new \OC\URLGenerator();
+ /** @var $c SimpleContainer */
+ $config = $c->query('AllConfig');
+ return new \OC\URLGenerator($config);
});
$this->registerService('AppHelper', function($c) {
return new \OC\AppHelper();
@@ -261,7 +263,7 @@ class Server extends SimpleContainer implements IServerContainer {
}
/**
- * @return \OC\Config
+ * @return \OCP\IConfig
*/
function getConfig() {
return $this->query('AllConfig');
diff --git a/lib/private/setup.php b/lib/private/setup.php
index b5c530a091f..5232398d1d7 100644
--- a/lib/private/setup.php
+++ b/lib/private/setup.php
@@ -159,6 +159,9 @@ class OC_Setup {
$content.= "</IfModule>\n";
$content.= "AddDefaultCharset utf-8\n";
$content.= "Options -Indexes\n";
+ $content.= "<IfModule pagespeed_module>\n";
+ $content.= "ModPagespeed Off\n";
+ $content.= "</IfModule>\n";
@file_put_contents(OC::$SERVERROOT.'/.htaccess', $content); //supress errors in case we don't have permissions for it
self::protectDataDirectory();
diff --git a/lib/private/template/cssresourcelocator.php b/lib/private/template/cssresourcelocator.php
index 8e7831ca549..e26daa25827 100644
--- a/lib/private/template/cssresourcelocator.php
+++ b/lib/private/template/cssresourcelocator.php
@@ -22,7 +22,7 @@ class CSSResourceLocator extends ResourceLocator {
$app = substr($style, 0, strpos($style, '/'));
$style = substr($style, strpos($style, '/')+1);
$app_path = \OC_App::getAppPath($app);
- $app_url = $this->webroot . '/index.php/apps/' . $app;
+ $app_url = \OC_App::getAppWebPath($app);
if ($this->appendIfExist($app_path, $style.$this->form_factor.'.css', $app_url)
|| $this->appendIfExist($app_path, $style.'.css', $app_url)
) {
diff --git a/lib/private/urlgenerator.php b/lib/private/urlgenerator.php
index 7795011fd06..4e3c1109000 100644
--- a/lib/private/urlgenerator.php
+++ b/lib/private/urlgenerator.php
@@ -15,6 +15,19 @@ use RuntimeException;
* Class to generate URLs
*/
class URLGenerator implements IURLGenerator {
+
+ /**
+ * @var \OCP\IConfig
+ */
+ private $config;
+
+ /**
+ * @param \OCP\IConfig $config
+ */
+ public function __construct($config) {
+ $this->config = $config;
+ }
+
/**
* @brief Creates an url using a defined route
* @param $route
@@ -41,12 +54,18 @@ class URLGenerator implements IURLGenerator {
* Returns a url to the given app and file.
*/
public function linkTo( $app, $file, $args = array() ) {
+ $frontControllerActive=($this->config->getSystemValue('front_controller_active', 'false') == 'true');
+
if( $app != '' ) {
$app_path = \OC_App::getAppPath($app);
// Check if the app is in the app folder
if ($app_path && file_exists($app_path . '/' . $file)) {
if (substr($file, -3) == 'php' || substr($file, -3) == 'css') {
+
$urlLinkTo = \OC::$WEBROOT . '/index.php/apps/' . $app;
+ if ($frontControllerActive) {
+ $urlLinkTo = \OC::$WEBROOT . '/apps/' . $app;
+ }
$urlLinkTo .= ($file != 'index.php') ? '/' . $file : '';
} else {
$urlLinkTo = \OC_App::getAppWebPath($app) . '/' . $file;
@@ -58,7 +77,11 @@ class URLGenerator implements IURLGenerator {
if (file_exists(\OC::$SERVERROOT . '/core/' . $file)) {
$urlLinkTo = \OC::$WEBROOT . '/core/' . $file;
} else {
- $urlLinkTo = \OC::$WEBROOT . '/' . $file;
+ if ($frontControllerActive && $file === 'index.php') {
+ $urlLinkTo = \OC::$WEBROOT;
+ } else {
+ $urlLinkTo = \OC::$WEBROOT . '/' . $file;
+ }
}
}
diff --git a/lib/private/user/backend.php b/lib/private/user/backend.php
index 02c93d13bdf..f4e5618e04a 100644
--- a/lib/private/user/backend.php
+++ b/lib/private/user/backend.php
@@ -31,13 +31,15 @@ define('OC_USER_BACKEND_NOT_IMPLEMENTED', -501);
/**
* actions that user backends can define
*/
-define('OC_USER_BACKEND_CREATE_USER', 0x0000001);
-define('OC_USER_BACKEND_SET_PASSWORD', 0x0000010);
-define('OC_USER_BACKEND_CHECK_PASSWORD', 0x0000100);
-define('OC_USER_BACKEND_GET_HOME', 0x0001000);
-define('OC_USER_BACKEND_GET_DISPLAYNAME', 0x0010000);
-define('OC_USER_BACKEND_SET_DISPLAYNAME', 0x0100000);
-define('OC_USER_BACKEND_PROVIDE_AVATAR', 0x1000000);
+define('OC_USER_BACKEND_CREATE_USER', 0x00000001);
+define('OC_USER_BACKEND_SET_PASSWORD', 0x00000010);
+define('OC_USER_BACKEND_CHECK_PASSWORD', 0x00000100);
+define('OC_USER_BACKEND_GET_HOME', 0x00001000);
+define('OC_USER_BACKEND_GET_DISPLAYNAME', 0x00010000);
+define('OC_USER_BACKEND_SET_DISPLAYNAME', 0x00100000);
+define('OC_USER_BACKEND_PROVIDE_AVATAR', 0x01000000);
+define('OC_USER_BACKEND_COUNT_USERS', 0x10000000);
+//more actions cannot be defined without breaking 32bit platforms!
/**
* Abstract base class for user management. Provides methods for querying backend
@@ -55,6 +57,7 @@ abstract class OC_User_Backend implements OC_User_Interface {
OC_USER_BACKEND_GET_DISPLAYNAME => 'getDisplayName',
OC_USER_BACKEND_SET_DISPLAYNAME => 'setDisplayName',
OC_USER_BACKEND_PROVIDE_AVATAR => 'canChangeAvatar',
+ OC_USER_BACKEND_COUNT_USERS => 'countUsers',
);
/**
diff --git a/lib/private/user/database.php b/lib/private/user/database.php
index c99db3b27ca..1a63755b980 100644
--- a/lib/private/user/database.php
+++ b/lib/private/user/database.php
@@ -253,4 +253,19 @@ class OC_User_Database extends OC_User_Backend {
return true;
}
+ /**
+ * counts the users in the database
+ *
+ * @return int | bool
+ */
+ public function countUsers() {
+ $query = OC_DB::prepare('SELECT COUNT(*) FROM `*PREFIX*users`');
+ $result = $query->execute();
+ if (OC_DB::isError($result)) {
+ OC_Log::write('core', OC_DB::getErrorMessage($result), OC_Log::ERROR);
+ return false;
+ }
+ return $result->fetchOne();
+ }
+
}
diff --git a/lib/private/user/dummy.php b/lib/private/user/dummy.php
index 52be7edfa75..fc15a630cf3 100644
--- a/lib/private/user/dummy.php
+++ b/lib/private/user/dummy.php
@@ -123,4 +123,13 @@ class OC_User_Dummy extends OC_User_Backend {
public function hasUserListings() {
return true;
}
+
+ /**
+ * counts the users in the database
+ *
+ * @return int | bool
+ */
+ public function countUsers() {
+ return 0;
+ }
}
diff --git a/lib/private/user/manager.php b/lib/private/user/manager.php
index cf83a75ba25..90970ef9963 100644
--- a/lib/private/user/manager.php
+++ b/lib/private/user/manager.php
@@ -270,4 +270,26 @@ class Manager extends PublicEmitter {
}
return false;
}
+
+ /**
+ * returns how many users per backend exist (if supported by backend)
+ *
+ * @return array with backend class as key and count number as value
+ */
+ public function countUsers() {
+ $userCountStatistics = array();
+ foreach ($this->backends as $backend) {
+ if ($backend->implementsActions(\OC_USER_BACKEND_COUNT_USERS)) {
+ $backendusers = $backend->countUsers();
+ if($backendusers !== false) {
+ if(isset($userCountStatistics[get_class($backend)])) {
+ $userCountStatistics[get_class($backend)] += $backendusers;
+ } else {
+ $userCountStatistics[get_class($backend)] = $backendusers;
+ }
+ }
+ }
+ }
+ return $userCountStatistics;
+ }
}
diff --git a/lib/public/response.php b/lib/public/response.php
index 2ca0a0c9fa4..24d3c81d628 100644
--- a/lib/public/response.php
+++ b/lib/public/response.php
@@ -55,6 +55,15 @@ class Response {
}
/**
+ * Sets the content disposition header (with possible workarounds)
+ * @param string $filename file name
+ * @param string $type disposition type, either 'attachment' or 'inline'
+ */
+ static public function setContentDispositionHeader( $filename, $type = 'attachment' ) {
+ \OC_Response::setContentDispositionHeader( $filename, $type );
+ }
+
+ /**
* Disable browser caching
* @see enableCaching with cache_time = 0
*/
diff --git a/tests/enable_all.php b/tests/enable_all.php
index 43ee16a72f8..4f2fe5cdb60 100644
--- a/tests/enable_all.php
+++ b/tests/enable_all.php
@@ -10,6 +10,7 @@ require_once __DIR__.'/../lib/base.php';
OC_App::enable('files_sharing');
OC_App::enable('files_encryption');
+OC_App::enable('user_ldap');
OC_App::enable('calendar');
OC_App::enable('contacts');
OC_App::enable('apptemplateadvanced');
diff --git a/tests/lib/files/cache/homecache.php b/tests/lib/files/cache/homecache.php
index 2fa7f1ba92e..87fd0dba4c6 100644
--- a/tests/lib/files/cache/homecache.php
+++ b/tests/lib/files/cache/homecache.php
@@ -62,33 +62,39 @@ class HomeCache extends \PHPUnit_Framework_TestCase {
}
/**
- * Tests that the root folder size calculation ignores the subdirs that have an unknown
- * size. This makes sure that quota calculation still works as it's based on the root
- * folder size.
+ * Tests that the root and files folder size calculation ignores the subdirs
+ * that have an unknown size. This makes sure that quota calculation still
+ * works as it's based on the "files" folder size.
*/
public function testRootFolderSizeIgnoresUnknownUpdate() {
- $dir1 = 'knownsize';
- $dir2 = 'unknownsize';
+ $dir1 = 'files/knownsize';
+ $dir2 = 'files/unknownsize';
$fileData = array();
$fileData[''] = array('size' => -1, 'mtime' => 20, 'mimetype' => 'httpd/unix-directory');
+ $fileData['files'] = array('size' => -1, 'mtime' => 20, 'mimetype' => 'httpd/unix-directory');
$fileData[$dir1] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'httpd/unix-directory');
$fileData[$dir2] = array('size' => -1, 'mtime' => 25, 'mimetype' => 'httpd/unix-directory');
$this->cache->put('', $fileData['']);
+ $this->cache->put('files', $fileData['files']);
$this->cache->put($dir1, $fileData[$dir1]);
$this->cache->put($dir2, $fileData[$dir2]);
+ $this->assertTrue($this->cache->inCache('files'));
$this->assertTrue($this->cache->inCache($dir1));
$this->assertTrue($this->cache->inCache($dir2));
- // check that root size ignored the unknown sizes
+ // check that files and root size ignored the unknown sizes
+ $this->assertEquals(1000, $this->cache->calculateFolderSize('files'));
$this->assertEquals(1000, $this->cache->calculateFolderSize(''));
// clean up
$this->cache->remove('');
+ $this->cache->remove('files');
$this->cache->remove($dir1);
$this->cache->remove($dir2);
+ $this->assertFalse($this->cache->inCache('files'));
$this->assertFalse($this->cache->inCache($dir1));
$this->assertFalse($this->cache->inCache($dir2));
}
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index b59cef9f0da..76a7fd5f1ca 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -309,6 +309,48 @@ class View extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
+ function testUnlink() {
+ $storage1 = $this->getTestStorage();
+ $storage2 = $this->getTestStorage();
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+
+ $rootView = new \OC\Files\View('');
+ $rootView->file_put_contents('/foo.txt', 'asd');
+ $rootView->file_put_contents('/substorage/bar.txt', 'asd');
+
+ $this->assertTrue($rootView->file_exists('foo.txt'));
+ $this->assertTrue($rootView->file_exists('substorage/bar.txt'));
+
+ $this->assertTrue($rootView->unlink('foo.txt'));
+ $this->assertTrue($rootView->unlink('substorage/bar.txt'));
+
+ $this->assertFalse($rootView->file_exists('foo.txt'));
+ $this->assertFalse($rootView->file_exists('substorage/bar.txt'));
+ }
+
+ /**
+ * @medium
+ */
+ function testUnlinkRootMustFail() {
+ $storage1 = $this->getTestStorage();
+ $storage2 = $this->getTestStorage();
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+
+ $rootView = new \OC\Files\View('');
+ $rootView->file_put_contents('/foo.txt', 'asd');
+ $rootView->file_put_contents('/substorage/bar.txt', 'asd');
+
+ $this->assertFalse($rootView->unlink(''));
+ $this->assertFalse($rootView->unlink('/'));
+ $this->assertFalse($rootView->unlink('substorage'));
+ $this->assertFalse($rootView->unlink('/substorage'));
+ }
+
+ /**
+ * @medium
+ */
function testTouch() {
$storage = $this->getTestStorage(true, '\Test\Files\TemporaryNoTouch');
diff --git a/tests/lib/request.php b/tests/lib/request.php
index 090cebc9231..c6401a57144 100644
--- a/tests/lib/request.php
+++ b/tests/lib/request.php
@@ -70,4 +70,54 @@ class Test_Request extends PHPUnit_Framework_TestCase {
array('/oc/core1', '/oc/core/index.php'),
);
}
+
+ /**
+ * @dataProvider userAgentProvider
+ */
+ public function testUserAgent($testAgent, $userAgent, $matches) {
+ $_SERVER['HTTP_USER_AGENT'] = $testAgent;
+ $this->assertEquals($matches, OC_Request::isUserAgent($userAgent));
+ }
+
+ function userAgentProvider() {
+ return array(
+ array(
+ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
+ OC_Request::USER_AGENT_IE,
+ true
+ ),
+ array(
+ 'Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Firefox/24.0',
+ OC_Request::USER_AGENT_IE,
+ false
+ ),
+ array(
+ 'Mozilla/5.0 (Linux; Android 4.4; Nexus 4 Build/KRT16S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36',
+ OC_Request::USER_AGENT_ANDROID_MOBILE_CHROME,
+ true
+ ),
+ array(
+ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
+ OC_Request::USER_AGENT_ANDROID_MOBILE_CHROME,
+ false
+ ),
+ // test two values
+ array(
+ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
+ array(
+ OC_Request::USER_AGENT_IE,
+ OC_Request::USER_AGENT_ANDROID_MOBILE_CHROME,
+ ),
+ true
+ ),
+ array(
+ 'Mozilla/5.0 (Linux; Android 4.4; Nexus 4 Build/KRT16S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36',
+ array(
+ OC_Request::USER_AGENT_IE,
+ OC_Request::USER_AGENT_ANDROID_MOBILE_CHROME,
+ ),
+ true
+ ),
+ );
+ }
}
diff --git a/tests/lib/user/manager.php b/tests/lib/user/manager.php
index 00901dd4115..ad1ac9e12f2 100644
--- a/tests/lib/user/manager.php
+++ b/tests/lib/user/manager.php
@@ -346,4 +346,76 @@ class Manager extends \PHPUnit_Framework_TestCase {
$manager->createUser('foo', 'bar');
}
+
+ public function testCountUsersNoBackend() {
+ $manager = new \OC\User\Manager();
+
+ $result = $manager->countUsers();
+ $this->assertTrue(is_array($result));
+ $this->assertTrue(empty($result));
+ }
+
+ public function testCountUsersOneBackend() {
+ /**
+ * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
+ */
+ $backend = $this->getMock('\OC_User_Dummy');
+ $backend->expects($this->once())
+ ->method('countUsers')
+ ->will($this->returnValue(7));
+
+ $backend->expects($this->once())
+ ->method('implementsActions')
+ ->with(\OC_USER_BACKEND_COUNT_USERS)
+ ->will($this->returnValue(true));
+
+ $manager = new \OC\User\Manager();
+ $manager->registerBackend($backend);
+
+ $result = $manager->countUsers();
+ $keys = array_keys($result);
+ $this->assertTrue(strpos($keys[0], 'Mock_OC_User_Dummy') !== false);
+
+ $users = array_shift($result);
+ $this->assertEquals(7, $users);
+ }
+
+ public function testCountUsersTwoBackends() {
+ /**
+ * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
+ */
+ $backend1 = $this->getMock('\OC_User_Dummy');
+ $backend1->expects($this->once())
+ ->method('countUsers')
+ ->will($this->returnValue(7));
+
+ $backend1->expects($this->once())
+ ->method('implementsActions')
+ ->with(\OC_USER_BACKEND_COUNT_USERS)
+ ->will($this->returnValue(true));
+
+ $backend2 = $this->getMock('\OC_User_Dummy');
+ $backend2->expects($this->once())
+ ->method('countUsers')
+ ->will($this->returnValue(16));
+
+ $backend2->expects($this->once())
+ ->method('implementsActions')
+ ->with(\OC_USER_BACKEND_COUNT_USERS)
+ ->will($this->returnValue(true));
+
+ $manager = new \OC\User\Manager();
+ $manager->registerBackend($backend1);
+ $manager->registerBackend($backend2);
+
+ $result = $manager->countUsers();
+ //because the backends have the same class name, only one value expected
+ $this->assertEquals(1, count($result));
+ $keys = array_keys($result);
+ $this->assertTrue(strpos($keys[0], 'Mock_OC_User_Dummy') !== false);
+
+ $users = array_shift($result);
+ //users from backends shall be summed up
+ $this->assertEquals(7+16, $users);
+ }
}