diff options
Diffstat (limited to 'lib')
82 files changed, 728 insertions, 448 deletions
diff --git a/lib/base.php b/lib/base.php index 1f921b13e67..aceac2e53c3 100644 --- a/lib/base.php +++ b/lib/base.php @@ -452,13 +452,15 @@ class OC { $useCustomSession = false; $session = self::$server->getSession(); OC_Hook::emit('OC', 'initSession', array('session' => &$session, 'sessionName' => &$sessionName, 'useCustomSession' => &$useCustomSession)); - if($useCustomSession) { - // use the session reference as the new Session - self::$server->setSession($session); - } else { + if (!$useCustomSession) { // set the session name to the instance id - which is unique - self::$server->setSession(new \OC\Session\Internal($sessionName)); + $session = new \OC\Session\Internal($sessionName); } + + $cryptoWrapper = \OC::$server->getSessionCryptoWrapper(); + $session = $cryptoWrapper->wrapSession($session); + self::$server->setSession($session); + // if session cant be started break with http 500 error } catch (Exception $e) { \OCP\Util::logException('base', $e); @@ -580,7 +582,7 @@ class OC { if (!defined('PHPUNIT_RUN')) { $logger = \OC::$server->getLogger(); OC\Log\ErrorHandler::setLogger($logger); - if (defined('DEBUG') and DEBUG) { + if (\OC::$server->getConfig()->getSystemValue('debug', false)) { OC\Log\ErrorHandler::register(true); set_exception_handler(array('OC_Template', 'printExceptionErrorPage')); } else { @@ -1038,7 +1040,7 @@ class OC { return false; } - if (defined("DEBUG") && DEBUG) { + if (\OC::$server->getConfig()->getSystemValue('debug', false)) { \OCP\Util::writeLog('core', 'Trying to login from cookie', \OCP\Util::DEBUG); } @@ -1091,11 +1093,12 @@ class OC { self::cleanupLoginTokens($userId); if (!empty($_POST["remember_login"])) { - if (defined("DEBUG") && DEBUG) { + $config = self::$server->getConfig(); + if ($config->getSystemValue('debug', false)) { self::$server->getLogger()->debug('Setting remember login to cookie', array('app' => 'core')); } $token = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(32); - self::$server->getConfig()->setUserValue($userId, 'login_token', $token, time()); + $config->setUserValue($userId, 'login_token', $token, time()); OC_User::setMagicInCookie($userId, $token); } else { OC_User::unsetMagicInCookie(); diff --git a/lib/l10n/ca@valencia.js b/lib/l10n/ca@valencia.js deleted file mode 100644 index a12702211c2..00000000000 --- a/lib/l10n/ca@valencia.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/ca@valencia.json b/lib/l10n/ca@valencia.json deleted file mode 100644 index b994fa289eb..00000000000 --- a/lib/l10n/ca@valencia.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/da.js b/lib/l10n/da.js index 877f97ad8b1..42f367d21c2 100644 --- a/lib/l10n/da.js +++ b/lib/l10n/da.js @@ -49,6 +49,7 @@ OC.L10N.register( "Can't read file" : "Kan ikke læse filen", "App directory already exists" : "App-mappe findes allerede", "Can't create app folder. Please fix permissions. %s" : "Kan ikke oprette app-mappe. Ret tilladelser. %s", + "Archive does not contain a directory named %s" : "Arkivet indeholder ike en mappe kaldet %s", "No source specified when installing app" : "Ingen kilde angivet under installation af app", "No href specified when installing app from http" : "Ingen href angivet under installation af app via http", "No path specified when installing app from local file" : "Ingen sti angivet under installation af app fra lokal fil", diff --git a/lib/l10n/da.json b/lib/l10n/da.json index bf5429d002e..0e20adc31bf 100644 --- a/lib/l10n/da.json +++ b/lib/l10n/da.json @@ -47,6 +47,7 @@ "Can't read file" : "Kan ikke læse filen", "App directory already exists" : "App-mappe findes allerede", "Can't create app folder. Please fix permissions. %s" : "Kan ikke oprette app-mappe. Ret tilladelser. %s", + "Archive does not contain a directory named %s" : "Arkivet indeholder ike en mappe kaldet %s", "No source specified when installing app" : "Ingen kilde angivet under installation af app", "No href specified when installing app from http" : "Ingen href angivet under installation af app via http", "No path specified when installing app from local file" : "Ingen sti angivet under installation af app fra lokal fil", diff --git a/lib/l10n/de_CH.js b/lib/l10n/de_CH.js deleted file mode 100644 index d0d4be0f4e6..00000000000 --- a/lib/l10n/de_CH.js +++ /dev/null @@ -1,40 +0,0 @@ -OC.L10N.register( - "lib", - { - "Help" : "Hilfe", - "Personal" : "Persönlich", - "Settings" : "Einstellungen", - "Users" : "Benutzer", - "Admin" : "Administrator", - "No app name specified" : "Kein App-Name spezifiziert", - "web services under your control" : "Web-Services unter Ihrer Kontrolle", - "App directory already exists" : "Anwendungsverzeichnis existiert bereits", - "App can't be installed because of not allowed code in the App" : "Anwendung kann wegen nicht erlaubten Codes nicht installiert werden", - "Application is not enabled" : "Die Anwendung ist nicht aktiviert", - "Authentication error" : "Authentifizierungs-Fehler", - "Token expired. Please reload page." : "Token abgelaufen. Bitte laden Sie die Seite neu.", - "%s enter the database username." : "%s geben Sie den Datenbank-Benutzernamen an.", - "%s enter the database name." : "%s geben Sie den Datenbank-Namen an.", - "%s you may not use dots in the database name" : "%s Der Datenbank-Name darf keine Punkte enthalten", - "MS SQL username and/or password not valid: %s" : "MS SQL Benutzername und/oder Passwort ungültig: %s", - "You need to enter either an existing account or the administrator." : "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.", - "DB Error: \"%s\"" : "DB Fehler: \"%s\"", - "Offending command was: \"%s\"" : "Fehlerhafter Befehl war: \"%s\"", - "Oracle connection could not be established" : "Die Oracle-Verbindung konnte nicht aufgebaut werden.", - "Oracle username and/or password not valid" : "Oracle Benutzername und/oder Passwort ungültig", - "Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: \"%s\", Name: %s, Passwort: %s", - "PostgreSQL username and/or password not valid" : "PostgreSQL Benutzername und/oder Passwort ungültig", - "Set an admin username." : "Setze Administrator Benutzername.", - "Set an admin password." : "Setze Administrator Passwort", - "%s shared »%s« with you" : "%s teilt »%s« mit Ihnen", - "Could not find category \"%s\"" : "Die Kategorie «%s» konnte nicht gefunden werden.", - "seconds ago" : "Gerade eben", - "today" : "Heute", - "yesterday" : "Gestern", - "last month" : "Letzten Monat", - "last year" : "Letztes Jahr", - "years ago" : "Vor Jahren", - "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", - "A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/de_CH.json b/lib/l10n/de_CH.json deleted file mode 100644 index 26ab7e1b201..00000000000 --- a/lib/l10n/de_CH.json +++ /dev/null @@ -1,38 +0,0 @@ -{ "translations": { - "Help" : "Hilfe", - "Personal" : "Persönlich", - "Settings" : "Einstellungen", - "Users" : "Benutzer", - "Admin" : "Administrator", - "No app name specified" : "Kein App-Name spezifiziert", - "web services under your control" : "Web-Services unter Ihrer Kontrolle", - "App directory already exists" : "Anwendungsverzeichnis existiert bereits", - "App can't be installed because of not allowed code in the App" : "Anwendung kann wegen nicht erlaubten Codes nicht installiert werden", - "Application is not enabled" : "Die Anwendung ist nicht aktiviert", - "Authentication error" : "Authentifizierungs-Fehler", - "Token expired. Please reload page." : "Token abgelaufen. Bitte laden Sie die Seite neu.", - "%s enter the database username." : "%s geben Sie den Datenbank-Benutzernamen an.", - "%s enter the database name." : "%s geben Sie den Datenbank-Namen an.", - "%s you may not use dots in the database name" : "%s Der Datenbank-Name darf keine Punkte enthalten", - "MS SQL username and/or password not valid: %s" : "MS SQL Benutzername und/oder Passwort ungültig: %s", - "You need to enter either an existing account or the administrator." : "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.", - "DB Error: \"%s\"" : "DB Fehler: \"%s\"", - "Offending command was: \"%s\"" : "Fehlerhafter Befehl war: \"%s\"", - "Oracle connection could not be established" : "Die Oracle-Verbindung konnte nicht aufgebaut werden.", - "Oracle username and/or password not valid" : "Oracle Benutzername und/oder Passwort ungültig", - "Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: \"%s\", Name: %s, Passwort: %s", - "PostgreSQL username and/or password not valid" : "PostgreSQL Benutzername und/oder Passwort ungültig", - "Set an admin username." : "Setze Administrator Benutzername.", - "Set an admin password." : "Setze Administrator Passwort", - "%s shared »%s« with you" : "%s teilt »%s« mit Ihnen", - "Could not find category \"%s\"" : "Die Kategorie «%s» konnte nicht gefunden werden.", - "seconds ago" : "Gerade eben", - "today" : "Heute", - "yesterday" : "Gestern", - "last month" : "Letzten Monat", - "last year" : "Letztes Jahr", - "years ago" : "Vor Jahren", - "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", - "A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/el.js b/lib/l10n/el.js index 2e47db30473..b47cc7e36d2 100644 --- a/lib/l10n/el.js +++ b/lib/l10n/el.js @@ -46,6 +46,7 @@ OC.L10N.register( "Can't read file" : "Αδυναμία ανάγνωσης αρχείου", "App directory already exists" : "Ο κατάλογος εφαρμογών υπάρχει ήδη", "Can't create app folder. Please fix permissions. %s" : "Δεν είναι δυνατόν να δημιουργηθεί ο φάκελος εφαρμογής. Παρακαλώ διορθώστε τις άδειες πρόσβασης. %s", + "Archive does not contain a directory named %s" : "Το αρχείο δεν περιέχει κατάλογο με το όνομα %s", "No source specified when installing app" : "Δεν προσδιορίστηκε πηγή κατά την εγκατάσταση της εφαρμογής", "No href specified when installing app from http" : "Δεν προσδιορίστηκε href κατά την εγκατάσταση της εφαρμογής μέσω http ", "No path specified when installing app from local file" : "Δεν προσδιορίστηκε μονοπάτι κατά την εγκατάσταση εφαρμογής από τοπικό αρχείο", diff --git a/lib/l10n/el.json b/lib/l10n/el.json index 7b0b9b149ad..d82aec00129 100644 --- a/lib/l10n/el.json +++ b/lib/l10n/el.json @@ -44,6 +44,7 @@ "Can't read file" : "Αδυναμία ανάγνωσης αρχείου", "App directory already exists" : "Ο κατάλογος εφαρμογών υπάρχει ήδη", "Can't create app folder. Please fix permissions. %s" : "Δεν είναι δυνατόν να δημιουργηθεί ο φάκελος εφαρμογής. Παρακαλώ διορθώστε τις άδειες πρόσβασης. %s", + "Archive does not contain a directory named %s" : "Το αρχείο δεν περιέχει κατάλογο με το όνομα %s", "No source specified when installing app" : "Δεν προσδιορίστηκε πηγή κατά την εγκατάσταση της εφαρμογής", "No href specified when installing app from http" : "Δεν προσδιορίστηκε href κατά την εγκατάσταση της εφαρμογής μέσω http ", "No path specified when installing app from local file" : "Δεν προσδιορίστηκε μονοπάτι κατά την εγκατάσταση εφαρμογής από τοπικό αρχείο", diff --git a/lib/l10n/en_NZ.js b/lib/l10n/en_NZ.js deleted file mode 100644 index a12702211c2..00000000000 --- a/lib/l10n/en_NZ.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/en_NZ.json b/lib/l10n/en_NZ.json deleted file mode 100644 index b994fa289eb..00000000000 --- a/lib/l10n/en_NZ.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/es.js b/lib/l10n/es.js index d071dc624e0..e08ed66f1b5 100644 --- a/lib/l10n/es.js +++ b/lib/l10n/es.js @@ -49,6 +49,7 @@ OC.L10N.register( "Can't read file" : "No se puede leer archivo", "App directory already exists" : "El directorio de la aplicación ya existe", "Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s", + "Archive does not contain a directory named %s" : "El archivo no contiene un directorio llamado %s", "No source specified when installing app" : "No se ha especificado origen cuando se ha instalado la aplicación", "No href specified when installing app from http" : "No href especificado cuando se ha instalado la aplicación", "No path specified when installing app from local file" : "Ninguna ruta especificada al instalar la aplicación desde el fichero local", @@ -115,7 +116,7 @@ OC.L10N.register( "A valid password must be provided" : "Se debe proporcionar una contraseña válida", "The username is already being used" : "El nombre de usuario ya está en uso", "No database drivers (sqlite, mysql, or postgresql) installed." : "No están instalados los drivers de BBDD (sqlite, mysql, o postgresql)", - "Microsoft Windows Platform is not supported" : "Plataforma Microsoft Windows no está soportada", + "Microsoft Windows Platform is not supported" : "La plataforma Microsoft Windows no está soportada", "Running ownCloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Ejecutar el servidor ownCloud en la plataforma Microsoft Windows no está soportada. Sugerimos que utilice un servidor Linux en una máquina virtual si no posee opción de migrar de servidor. Encuentre paquetes de Linux así como implementar máquinas virtuales en <a href=\"%s\">%s</a>. Para migrar instalaciones actuales hacia Linux puede encontrar algunos consejos y un script de migración en <a href=\"%s\">nuestra documentación</a>.", "Cannot write into \"config\" directory" : "No se puede escribir el el directorio de configuración", "Cannot write into \"apps\" directory" : "No se puede escribir en el directorio de \"apps\"", diff --git a/lib/l10n/es.json b/lib/l10n/es.json index 28655f2c92d..f9bca103231 100644 --- a/lib/l10n/es.json +++ b/lib/l10n/es.json @@ -47,6 +47,7 @@ "Can't read file" : "No se puede leer archivo", "App directory already exists" : "El directorio de la aplicación ya existe", "Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s", + "Archive does not contain a directory named %s" : "El archivo no contiene un directorio llamado %s", "No source specified when installing app" : "No se ha especificado origen cuando se ha instalado la aplicación", "No href specified when installing app from http" : "No href especificado cuando se ha instalado la aplicación", "No path specified when installing app from local file" : "Ninguna ruta especificada al instalar la aplicación desde el fichero local", @@ -113,7 +114,7 @@ "A valid password must be provided" : "Se debe proporcionar una contraseña válida", "The username is already being used" : "El nombre de usuario ya está en uso", "No database drivers (sqlite, mysql, or postgresql) installed." : "No están instalados los drivers de BBDD (sqlite, mysql, o postgresql)", - "Microsoft Windows Platform is not supported" : "Plataforma Microsoft Windows no está soportada", + "Microsoft Windows Platform is not supported" : "La plataforma Microsoft Windows no está soportada", "Running ownCloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Ejecutar el servidor ownCloud en la plataforma Microsoft Windows no está soportada. Sugerimos que utilice un servidor Linux en una máquina virtual si no posee opción de migrar de servidor. Encuentre paquetes de Linux así como implementar máquinas virtuales en <a href=\"%s\">%s</a>. Para migrar instalaciones actuales hacia Linux puede encontrar algunos consejos y un script de migración en <a href=\"%s\">nuestra documentación</a>.", "Cannot write into \"config\" directory" : "No se puede escribir el el directorio de configuración", "Cannot write into \"apps\" directory" : "No se puede escribir en el directorio de \"apps\"", diff --git a/lib/l10n/es_BO.js b/lib/l10n/es_BO.js deleted file mode 100644 index a12702211c2..00000000000 --- a/lib/l10n/es_BO.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/es_BO.json b/lib/l10n/es_BO.json deleted file mode 100644 index b994fa289eb..00000000000 --- a/lib/l10n/es_BO.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/es_CO.js b/lib/l10n/es_CO.js deleted file mode 100644 index a12702211c2..00000000000 --- a/lib/l10n/es_CO.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/es_CO.json b/lib/l10n/es_CO.json deleted file mode 100644 index b994fa289eb..00000000000 --- a/lib/l10n/es_CO.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/es_CR.js b/lib/l10n/es_CR.js deleted file mode 100644 index a12702211c2..00000000000 --- a/lib/l10n/es_CR.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/es_CR.json b/lib/l10n/es_CR.json deleted file mode 100644 index b994fa289eb..00000000000 --- a/lib/l10n/es_CR.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/es_EC.js b/lib/l10n/es_EC.js deleted file mode 100644 index a12702211c2..00000000000 --- a/lib/l10n/es_EC.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/es_EC.json b/lib/l10n/es_EC.json deleted file mode 100644 index b994fa289eb..00000000000 --- a/lib/l10n/es_EC.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/es_PE.js b/lib/l10n/es_PE.js deleted file mode 100644 index a12702211c2..00000000000 --- a/lib/l10n/es_PE.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/es_PE.json b/lib/l10n/es_PE.json deleted file mode 100644 index b994fa289eb..00000000000 --- a/lib/l10n/es_PE.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/es_PY.js b/lib/l10n/es_PY.js deleted file mode 100644 index a12702211c2..00000000000 --- a/lib/l10n/es_PY.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/es_PY.json b/lib/l10n/es_PY.json deleted file mode 100644 index b994fa289eb..00000000000 --- a/lib/l10n/es_PY.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/es_US.js b/lib/l10n/es_US.js deleted file mode 100644 index a12702211c2..00000000000 --- a/lib/l10n/es_US.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/es_US.json b/lib/l10n/es_US.json deleted file mode 100644 index b994fa289eb..00000000000 --- a/lib/l10n/es_US.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/es_UY.js b/lib/l10n/es_UY.js deleted file mode 100644 index a12702211c2..00000000000 --- a/lib/l10n/es_UY.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/es_UY.json b/lib/l10n/es_UY.json deleted file mode 100644 index b994fa289eb..00000000000 --- a/lib/l10n/es_UY.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/eu_ES.js b/lib/l10n/eu_ES.js deleted file mode 100644 index f547910d4aa..00000000000 --- a/lib/l10n/eu_ES.js +++ /dev/null @@ -1,6 +0,0 @@ -OC.L10N.register( - "lib", - { - "Personal" : "Pertsonala" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/eu_ES.json b/lib/l10n/eu_ES.json deleted file mode 100644 index 711c235ddc2..00000000000 --- a/lib/l10n/eu_ES.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "translations": { - "Personal" : "Pertsonala" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/fi.js b/lib/l10n/fi.js deleted file mode 100644 index f1346425331..00000000000 --- a/lib/l10n/fi.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "lib", - { - "Help" : "Apua", - "Settings" : "Asetukset" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/fi.json b/lib/l10n/fi.json deleted file mode 100644 index b556f7f1816..00000000000 --- a/lib/l10n/fi.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "Help" : "Apua", - "Settings" : "Asetukset" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/fi_FI.js b/lib/l10n/fi_FI.js index 3a06e5e4f6e..d82d26645db 100644 --- a/lib/l10n/fi_FI.js +++ b/lib/l10n/fi_FI.js @@ -47,6 +47,7 @@ OC.L10N.register( "Can't read file" : "Tiedostoa ei voi lukea", "App directory already exists" : "Sovelluskansio on jo olemassa", "Can't create app folder. Please fix permissions. %s" : "Sovelluskansion luominen ei onnistu. Korjaa käyttöoikeudet. %s", + "Archive does not contain a directory named %s" : "Arkisto ei sisällä kansiota nimeltä %s", "No source specified when installing app" : "Lähdettä ei määritelty sovellusta asennettaessa", "No href specified when installing app from http" : "Href-määritettä ei asetettu asennettaessa sovellusta http:n yli", "No path specified when installing app from local file" : "Polkua ei määritelty sovellusta asennettaessa paikallisesta tiedostosta", diff --git a/lib/l10n/fi_FI.json b/lib/l10n/fi_FI.json index 27fe7745881..de6d474e467 100644 --- a/lib/l10n/fi_FI.json +++ b/lib/l10n/fi_FI.json @@ -45,6 +45,7 @@ "Can't read file" : "Tiedostoa ei voi lukea", "App directory already exists" : "Sovelluskansio on jo olemassa", "Can't create app folder. Please fix permissions. %s" : "Sovelluskansion luominen ei onnistu. Korjaa käyttöoikeudet. %s", + "Archive does not contain a directory named %s" : "Arkisto ei sisällä kansiota nimeltä %s", "No source specified when installing app" : "Lähdettä ei määritelty sovellusta asennettaessa", "No href specified when installing app from http" : "Href-määritettä ei asetettu asennettaessa sovellusta http:n yli", "No path specified when installing app from local file" : "Polkua ei määritelty sovellusta asennettaessa paikallisesta tiedostosta", diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js index 8e7de3462a3..873abd44ad0 100644 --- a/lib/l10n/fr.js +++ b/lib/l10n/fr.js @@ -48,6 +48,7 @@ OC.L10N.register( "Can't read file" : "Impossible de lire le fichier", "App directory already exists" : "Le dossier de l'application existe déjà", "Can't create app folder. Please fix permissions. %s" : "Impossible de créer le dossier de l'application. Corrigez les droits d'accès. %s", + "Archive does not contain a directory named %s" : "Le fichier archive ne contient pas de répertoire %s", "No source specified when installing app" : "Aucune source spécifiée pour installer l'application", "No href specified when installing app from http" : "Aucun href spécifié pour installer l'application par http", "No path specified when installing app from local file" : "Aucun chemin spécifié pour installer l'application depuis un fichier local", diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json index 25bcf5b17ee..440f2ddd84d 100644 --- a/lib/l10n/fr.json +++ b/lib/l10n/fr.json @@ -46,6 +46,7 @@ "Can't read file" : "Impossible de lire le fichier", "App directory already exists" : "Le dossier de l'application existe déjà", "Can't create app folder. Please fix permissions. %s" : "Impossible de créer le dossier de l'application. Corrigez les droits d'accès. %s", + "Archive does not contain a directory named %s" : "Le fichier archive ne contient pas de répertoire %s", "No source specified when installing app" : "Aucune source spécifiée pour installer l'application", "No href specified when installing app from http" : "Aucun href spécifié pour installer l'application par http", "No path specified when installing app from local file" : "Aucun chemin spécifié pour installer l'application depuis un fichier local", diff --git a/lib/l10n/fr_CA.js b/lib/l10n/fr_CA.js deleted file mode 100644 index 9408adc0dc3..00000000000 --- a/lib/l10n/fr_CA.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -}, -"nplurals=2; plural=(n > 1);"); diff --git a/lib/l10n/fr_CA.json b/lib/l10n/fr_CA.json deleted file mode 100644 index 2a227e468c7..00000000000 --- a/lib/l10n/fr_CA.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "_%n day ago_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""], - "_%n year ago_::_%n years ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n minute ago_::_%n minutes ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n > 1);" -}
\ No newline at end of file diff --git a/lib/l10n/hi_IN.js b/lib/l10n/hi_IN.js deleted file mode 100644 index da0dcc6bdde..00000000000 --- a/lib/l10n/hi_IN.js +++ /dev/null @@ -1,9 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n minute ago_::_%n minutes ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n day go_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/hi_IN.json b/lib/l10n/hi_IN.json deleted file mode 100644 index 4286553dd0c..00000000000 --- a/lib/l10n/hi_IN.json +++ /dev/null @@ -1,7 +0,0 @@ -{ "translations": { - "_%n minute ago_::_%n minutes ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n day go_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/hu_HU.js b/lib/l10n/hu_HU.js index 6c0d797441e..e7287ccd5a1 100644 --- a/lib/l10n/hu_HU.js +++ b/lib/l10n/hu_HU.js @@ -8,6 +8,11 @@ OC.L10N.register( "Sample configuration detected" : "A példabeállítások vannak beállítva", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Úgy tűnik a példakonfigurációt próbálja ténylegesen használni. Ez nem támogatott, és működésképtelenné teheti a telepítést. Kérjük olvassa el a dokumentációt és azt követően változtasson a config.php-n!", "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.", + "PHP with a version lower than %s is required." : "Ennél régebbi PHP szükséges: %s.", + "Following databases are supported: %s" : "A következő adatbázis nem támogatott: %s", + "The library %s is not available." : "A könyvtár %s nem áll rendelkezésre.", + "ownCloud %s or higher is required." : "ownCoud %s vagy ennél újabb szükséges.", + "ownCloud %s or lower is required." : "ownCoud %s vagy ennél régebbi szükséges.", "Help" : "Súgó", "Personal" : "Személyes", "Users" : "Felhasználók", @@ -18,12 +23,20 @@ OC.L10N.register( "Invalid image" : "Hibás kép", "today" : "ma", "yesterday" : "tegnap", + "_%n day ago_::_%n days ago_" : ["%n napja","%n napja"], "last month" : "múlt hónapban", "_%n month ago_::_%n months ago_" : ["%n hónappal ezelőtt","%n hónappal ezelőtt"], "last year" : "tavaly", + "_%n year ago_::_%n years ago_" : ["%n éve","%n éve"], "_%n hour ago_::_%n hours ago_" : ["%n órával ezelőtt","%n órával ezelőtt"], "seconds ago" : "pár másodperce", "web services under your control" : "webszolgáltatások saját kézben", + "Empty filename is not allowed" : "Üres fájlnév nem engedétlyezett", + "Dot files are not allowed" : "Pontozott fájlok nem engedétlyezettek", + "4-byte characters are not supported in file names" : "4-byte karakterek nem támogatottak a fájl nevekben.", + "File name is a reserved word" : "A fajl neve egy rezervált szó", + "File name is too long" : "A fájlnév túl hosszú!", + "Can't read file" : "Nem olvasható a fájl", "App directory already exists" : "Az alkalmazás mappája már létezik", "Can't create app folder. Please fix permissions. %s" : "Nem lehetett létrehozni az alkalmazás mappáját. Kérem ellenőrizze a jogosultságokat. %s", "No source specified when installing app" : "Az alkalmazás telepítéséhez nincs forrás megadva", @@ -57,6 +70,7 @@ OC.L10N.register( "Set an admin password." : "Állítson be egy jelszót az adminisztrációhoz.", "Can't create or write into the data directory %s" : "Nem sikerült létrehozni vagy irni a \"data\" könyvtárba %s", "%s shared »%s« with you" : "%s megosztotta Önnel ezt: »%s«", + "%s via %s" : "%s über %s", "Sharing %s failed, because the file does not exist" : "%s megosztása sikertelen, mert a fájl nem létezik", "You are not allowed to share %s" : "Önnek nincs jogosultsága %s megosztására", "Sharing %s failed, because the user %s is the item owner" : "%s megosztása nem sikerült, mert %s felhasználó az állomány tulajdonosa", @@ -86,6 +100,7 @@ OC.L10N.register( "A valid password must be provided" : "Érvényes jelszót kell megadnia", "The username is already being used" : "Ez a bejelentkezési név már foglalt", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nincs telepítve adatbázis-meghajtóprogram (sqlite, mysql vagy postgresql).", + "Microsoft Windows Platform is not supported" : "Microsoft Windows platform nem támogatott", "Cannot write into \"config\" directory" : "Nem írható a \"config\" könyvtár", "Cannot write into \"apps\" directory" : "Nem írható az \"apps\" könyvtár", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek az app könyvtárra%s, vagy letiltjuk a config fájlban az appstore használatát.", diff --git a/lib/l10n/hu_HU.json b/lib/l10n/hu_HU.json index 1c717e6a4cf..8620c13e2ac 100644 --- a/lib/l10n/hu_HU.json +++ b/lib/l10n/hu_HU.json @@ -6,6 +6,11 @@ "Sample configuration detected" : "A példabeállítások vannak beállítva", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Úgy tűnik a példakonfigurációt próbálja ténylegesen használni. Ez nem támogatott, és működésképtelenné teheti a telepítést. Kérjük olvassa el a dokumentációt és azt követően változtasson a config.php-n!", "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.", + "PHP with a version lower than %s is required." : "Ennél régebbi PHP szükséges: %s.", + "Following databases are supported: %s" : "A következő adatbázis nem támogatott: %s", + "The library %s is not available." : "A könyvtár %s nem áll rendelkezésre.", + "ownCloud %s or higher is required." : "ownCoud %s vagy ennél újabb szükséges.", + "ownCloud %s or lower is required." : "ownCoud %s vagy ennél régebbi szükséges.", "Help" : "Súgó", "Personal" : "Személyes", "Users" : "Felhasználók", @@ -16,12 +21,20 @@ "Invalid image" : "Hibás kép", "today" : "ma", "yesterday" : "tegnap", + "_%n day ago_::_%n days ago_" : ["%n napja","%n napja"], "last month" : "múlt hónapban", "_%n month ago_::_%n months ago_" : ["%n hónappal ezelőtt","%n hónappal ezelőtt"], "last year" : "tavaly", + "_%n year ago_::_%n years ago_" : ["%n éve","%n éve"], "_%n hour ago_::_%n hours ago_" : ["%n órával ezelőtt","%n órával ezelőtt"], "seconds ago" : "pár másodperce", "web services under your control" : "webszolgáltatások saját kézben", + "Empty filename is not allowed" : "Üres fájlnév nem engedétlyezett", + "Dot files are not allowed" : "Pontozott fájlok nem engedétlyezettek", + "4-byte characters are not supported in file names" : "4-byte karakterek nem támogatottak a fájl nevekben.", + "File name is a reserved word" : "A fajl neve egy rezervált szó", + "File name is too long" : "A fájlnév túl hosszú!", + "Can't read file" : "Nem olvasható a fájl", "App directory already exists" : "Az alkalmazás mappája már létezik", "Can't create app folder. Please fix permissions. %s" : "Nem lehetett létrehozni az alkalmazás mappáját. Kérem ellenőrizze a jogosultságokat. %s", "No source specified when installing app" : "Az alkalmazás telepítéséhez nincs forrás megadva", @@ -55,6 +68,7 @@ "Set an admin password." : "Állítson be egy jelszót az adminisztrációhoz.", "Can't create or write into the data directory %s" : "Nem sikerült létrehozni vagy irni a \"data\" könyvtárba %s", "%s shared »%s« with you" : "%s megosztotta Önnel ezt: »%s«", + "%s via %s" : "%s über %s", "Sharing %s failed, because the file does not exist" : "%s megosztása sikertelen, mert a fájl nem létezik", "You are not allowed to share %s" : "Önnek nincs jogosultsága %s megosztására", "Sharing %s failed, because the user %s is the item owner" : "%s megosztása nem sikerült, mert %s felhasználó az állomány tulajdonosa", @@ -84,6 +98,7 @@ "A valid password must be provided" : "Érvényes jelszót kell megadnia", "The username is already being used" : "Ez a bejelentkezési név már foglalt", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nincs telepítve adatbázis-meghajtóprogram (sqlite, mysql vagy postgresql).", + "Microsoft Windows Platform is not supported" : "Microsoft Windows platform nem támogatott", "Cannot write into \"config\" directory" : "Nem írható a \"config\" könyvtár", "Cannot write into \"apps\" directory" : "Nem írható az \"apps\" könyvtár", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek az app könyvtárra%s, vagy letiltjuk a config fájlban az appstore használatát.", diff --git a/lib/l10n/is.js b/lib/l10n/is.js index c55116fde0d..7661ee829fb 100644 --- a/lib/l10n/is.js +++ b/lib/l10n/is.js @@ -5,6 +5,8 @@ OC.L10N.register( "Personal" : "Um mig", "Users" : "Notendur", "Admin" : "Stjórnun", + "Unknown filetype" : "Óþekkt skráartegund", + "Invalid image" : "Ógild mynd", "today" : "í dag", "yesterday" : "í gær", "last month" : "síðasta mánuði", @@ -16,4 +18,4 @@ OC.L10N.register( "Token expired. Please reload page." : "Auðkenning útrunnin. Vinsamlegast skráðu þig aftur inn.", "Could not find category \"%s\"" : "Fann ekki flokkinn \"%s\"" }, -"nplurals=2; plural=(n % 10 == 1 || n % 100 != 11);"); +"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/lib/l10n/is.json b/lib/l10n/is.json index a7ed67ae979..81fec382eb3 100644 --- a/lib/l10n/is.json +++ b/lib/l10n/is.json @@ -3,6 +3,8 @@ "Personal" : "Um mig", "Users" : "Notendur", "Admin" : "Stjórnun", + "Unknown filetype" : "Óþekkt skráartegund", + "Invalid image" : "Ógild mynd", "today" : "í dag", "yesterday" : "í gær", "last month" : "síðasta mánuði", @@ -13,5 +15,5 @@ "Authentication error" : "Villa við auðkenningu", "Token expired. Please reload page." : "Auðkenning útrunnin. Vinsamlegast skráðu þig aftur inn.", "Could not find category \"%s\"" : "Fann ekki flokkinn \"%s\"" -},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 || n % 100 != 11);" +},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/lib/l10n/it.js b/lib/l10n/it.js index df79ffed2ed..d0c0022fd06 100644 --- a/lib/l10n/it.js +++ b/lib/l10n/it.js @@ -49,6 +49,7 @@ OC.L10N.register( "Can't read file" : "Impossibile leggere il file", "App directory already exists" : "La cartella dell'applicazione esiste già", "Can't create app folder. Please fix permissions. %s" : "Impossibile creare la cartella dell'applicazione. Correggi i permessi. %s", + "Archive does not contain a directory named %s" : "L'archivio non contiene una cartella con nome %s", "No source specified when installing app" : "Nessuna fonte specificata durante l'installazione dell'applicazione", "No href specified when installing app from http" : "Nessun href specificato durante l'installazione dell'applicazione da http", "No path specified when installing app from local file" : "Nessun percorso specificato durante l'installazione dell'applicazione da file locale", diff --git a/lib/l10n/it.json b/lib/l10n/it.json index 8f5681d5964..1183b588eb2 100644 --- a/lib/l10n/it.json +++ b/lib/l10n/it.json @@ -47,6 +47,7 @@ "Can't read file" : "Impossibile leggere il file", "App directory already exists" : "La cartella dell'applicazione esiste già", "Can't create app folder. Please fix permissions. %s" : "Impossibile creare la cartella dell'applicazione. Correggi i permessi. %s", + "Archive does not contain a directory named %s" : "L'archivio non contiene una cartella con nome %s", "No source specified when installing app" : "Nessuna fonte specificata durante l'installazione dell'applicazione", "No href specified when installing app from http" : "Nessun href specificato durante l'installazione dell'applicazione da http", "No path specified when installing app from local file" : "Nessun percorso specificato durante l'installazione dell'applicazione da file locale", diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js index c7a68c9000f..d08e8294dfb 100644 --- a/lib/l10n/nl.js +++ b/lib/l10n/nl.js @@ -49,6 +49,7 @@ OC.L10N.register( "Can't read file" : "Kan bestand niet lezen", "App directory already exists" : "App directory bestaat al", "Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s", + "Archive does not contain a directory named %s" : "Archief bevat geen directory genaamd %s", "No source specified when installing app" : "Geen bron opgegeven bij installatie van de app", "No href specified when installing app from http" : "Geen href opgegeven bij installeren van de app vanaf http", "No path specified when installing app from local file" : "Geen pad opgegeven bij installeren van de app vanaf een lokaal bestand", diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json index 560e20fbd4f..8d0b5dc7169 100644 --- a/lib/l10n/nl.json +++ b/lib/l10n/nl.json @@ -47,6 +47,7 @@ "Can't read file" : "Kan bestand niet lezen", "App directory already exists" : "App directory bestaat al", "Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s", + "Archive does not contain a directory named %s" : "Archief bevat geen directory genaamd %s", "No source specified when installing app" : "Geen bron opgegeven bij installatie van de app", "No href specified when installing app from http" : "Geen href opgegeven bij installeren van de app vanaf http", "No path specified when installing app from local file" : "Geen pad opgegeven bij installeren van de app vanaf een lokaal bestand", diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js index d348ac705f3..a53e5f01a16 100644 --- a/lib/l10n/pt_BR.js +++ b/lib/l10n/pt_BR.js @@ -49,6 +49,7 @@ OC.L10N.register( "Can't read file" : "Não é possível ler arquivo", "App directory already exists" : "Diretório App já existe", "Can't create app folder. Please fix permissions. %s" : "Não é possível criar pasta app. Corrija as permissões. %s", + "Archive does not contain a directory named %s" : "O arquivo não contém um diretório chamado %s", "No source specified when installing app" : "Nenhuma fonte foi especificada enquanto instalava o aplicativo", "No href specified when installing app from http" : "Nenhuma href foi especificada enquanto instalava o aplicativo de http", "No path specified when installing app from local file" : "Nenhum caminho foi especificado enquanto instalava o aplicativo do arquivo local", diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json index 63192f8a5bd..cef167c2098 100644 --- a/lib/l10n/pt_BR.json +++ b/lib/l10n/pt_BR.json @@ -47,6 +47,7 @@ "Can't read file" : "Não é possível ler arquivo", "App directory already exists" : "Diretório App já existe", "Can't create app folder. Please fix permissions. %s" : "Não é possível criar pasta app. Corrija as permissões. %s", + "Archive does not contain a directory named %s" : "O arquivo não contém um diretório chamado %s", "No source specified when installing app" : "Nenhuma fonte foi especificada enquanto instalava o aplicativo", "No href specified when installing app from http" : "Nenhuma href foi especificada enquanto instalava o aplicativo de http", "No path specified when installing app from local file" : "Nenhum caminho foi especificado enquanto instalava o aplicativo do arquivo local", diff --git a/lib/l10n/pt_PT.js b/lib/l10n/pt_PT.js index 75149346f0b..0f0e116128c 100644 --- a/lib/l10n/pt_PT.js +++ b/lib/l10n/pt_PT.js @@ -16,6 +16,7 @@ OC.L10N.register( "Library %s with a version lower than %s is required - available version %s." : "É necessário que a biblioteca %s tenha uma versão inferior a %s - versão disponível: %s.", "Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s", "ownCloud %s or higher is required." : "É necessário ownCloud %s ou superior.", + "ownCloud %s or lower is required." : "É necessário ownCloud %s ou inferior.", "Help" : "Ajuda", "Personal" : "Pessoal", "Users" : "Utilizadores", @@ -34,12 +35,15 @@ OC.L10N.register( "_%n year ago_::_%n years ago_" : ["%n ano atrás","%n anos atrás"], "seconds ago" : "Minutos atrás", "web services under your control" : "serviços web sob o seu controlo", + "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "O módulo com a id: %s não existe. Por favor, ative-o nas definições da sua app ou contacte o seu administrador.", "Empty filename is not allowed" : "Não é permitido um ficheiro sem nome", "Dot files are not allowed" : "Ficheiros dot não são permitidos", "4-byte characters are not supported in file names" : "Carateres 4-byte não são suportados como nome de ficheiros", "File name is a reserved word" : "Nome de ficheiro é uma palavra reservada", "File name contains at least one invalid character" : "Nome de ficheiro contém pelo menos um caráter inválido", "File name is too long" : "Nome do ficheiro demasiado longo", + "File is currently busy, please try again later" : "O ficheiro está ocupado, por favor, tente mais tarde", + "Can't read file" : "Não é possível ler o ficheiro", "App directory already exists" : "A directoria da aplicação já existe", "Can't create app folder. Please fix permissions. %s" : "Não foi possível criar a pasta da aplicação. Por favor verifique as permissões. %s", "No source specified when installing app" : "Não foi especificada uma fonte de instalação desta aplicação", @@ -73,6 +77,7 @@ OC.L10N.register( "Set an admin username." : "Definir um nome de utilizador de administrador", "Set an admin password." : "Definiar uma password de administrador", "Can't create or write into the data directory %s" : "Não é possível criar ou escrever a directoria data %s", + "Invalid Federated Cloud ID" : "Id. de Nuvem Federada Inválida", "%s shared »%s« with you" : "%s partilhado »%s« consigo", "%s via %s" : "%s via %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "A partilha de %s falhou porque a interface não permite as partilhas do tipo %i", diff --git a/lib/l10n/pt_PT.json b/lib/l10n/pt_PT.json index 21a3b857230..9c00021b599 100644 --- a/lib/l10n/pt_PT.json +++ b/lib/l10n/pt_PT.json @@ -14,6 +14,7 @@ "Library %s with a version lower than %s is required - available version %s." : "É necessário que a biblioteca %s tenha uma versão inferior a %s - versão disponível: %s.", "Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s", "ownCloud %s or higher is required." : "É necessário ownCloud %s ou superior.", + "ownCloud %s or lower is required." : "É necessário ownCloud %s ou inferior.", "Help" : "Ajuda", "Personal" : "Pessoal", "Users" : "Utilizadores", @@ -32,12 +33,15 @@ "_%n year ago_::_%n years ago_" : ["%n ano atrás","%n anos atrás"], "seconds ago" : "Minutos atrás", "web services under your control" : "serviços web sob o seu controlo", + "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "O módulo com a id: %s não existe. Por favor, ative-o nas definições da sua app ou contacte o seu administrador.", "Empty filename is not allowed" : "Não é permitido um ficheiro sem nome", "Dot files are not allowed" : "Ficheiros dot não são permitidos", "4-byte characters are not supported in file names" : "Carateres 4-byte não são suportados como nome de ficheiros", "File name is a reserved word" : "Nome de ficheiro é uma palavra reservada", "File name contains at least one invalid character" : "Nome de ficheiro contém pelo menos um caráter inválido", "File name is too long" : "Nome do ficheiro demasiado longo", + "File is currently busy, please try again later" : "O ficheiro está ocupado, por favor, tente mais tarde", + "Can't read file" : "Não é possível ler o ficheiro", "App directory already exists" : "A directoria da aplicação já existe", "Can't create app folder. Please fix permissions. %s" : "Não foi possível criar a pasta da aplicação. Por favor verifique as permissões. %s", "No source specified when installing app" : "Não foi especificada uma fonte de instalação desta aplicação", @@ -71,6 +75,7 @@ "Set an admin username." : "Definir um nome de utilizador de administrador", "Set an admin password." : "Definiar uma password de administrador", "Can't create or write into the data directory %s" : "Não é possível criar ou escrever a directoria data %s", + "Invalid Federated Cloud ID" : "Id. de Nuvem Federada Inválida", "%s shared »%s« with you" : "%s partilhado »%s« consigo", "%s via %s" : "%s via %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "A partilha de %s falhou porque a interface não permite as partilhas do tipo %i", diff --git a/lib/l10n/sk.js b/lib/l10n/sk.js deleted file mode 100644 index 1eed1a5720c..00000000000 --- a/lib/l10n/sk.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "lib", - { - "Personal" : "Osobné", - "Settings" : "Nastavenia" -}, -"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/lib/l10n/sk.json b/lib/l10n/sk.json deleted file mode 100644 index bd84c129e92..00000000000 --- a/lib/l10n/sk.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "Personal" : "Osobné", - "Settings" : "Nastavenia" -},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" -}
\ No newline at end of file diff --git a/lib/l10n/th_TH.js b/lib/l10n/th_TH.js index c2d327e22d5..2ff86f599e9 100644 --- a/lib/l10n/th_TH.js +++ b/lib/l10n/th_TH.js @@ -49,6 +49,7 @@ OC.L10N.register( "Can't read file" : "ไม่สามารถอ่านไฟล์", "App directory already exists" : "มีไดเรกทอรีแอพฯอยู่แล้ว", "Can't create app folder. Please fix permissions. %s" : "ไม่สามารถสร้างโฟลเดอร์แอพพลิเคชัน โปรดแก้ไขการอนุญาต: %s", + "Archive does not contain a directory named %s" : "เอกสารไม่สามารถประกอบด้วยไดเรกทอรีชื่อ %s", "No source specified when installing app" : "ไม่ได้ระบุแหล่งที่มาเมื่อติดตั้งแอพพลิเคชัน", "No href specified when installing app from http" : "ไม่ได้ระบุ href เมื่อกำลังติดตั้งแอพพลิเคชันจาก http", "No path specified when installing app from local file" : "ไม่ได้ระบุเส้นทางไว้เมื่อกำลังติดตั้งแอพฯจากไฟล์ต้นทาง", diff --git a/lib/l10n/th_TH.json b/lib/l10n/th_TH.json index d6ffcb5f73d..a215b67a180 100644 --- a/lib/l10n/th_TH.json +++ b/lib/l10n/th_TH.json @@ -47,6 +47,7 @@ "Can't read file" : "ไม่สามารถอ่านไฟล์", "App directory already exists" : "มีไดเรกทอรีแอพฯอยู่แล้ว", "Can't create app folder. Please fix permissions. %s" : "ไม่สามารถสร้างโฟลเดอร์แอพพลิเคชัน โปรดแก้ไขการอนุญาต: %s", + "Archive does not contain a directory named %s" : "เอกสารไม่สามารถประกอบด้วยไดเรกทอรีชื่อ %s", "No source specified when installing app" : "ไม่ได้ระบุแหล่งที่มาเมื่อติดตั้งแอพพลิเคชัน", "No href specified when installing app from http" : "ไม่ได้ระบุ href เมื่อกำลังติดตั้งแอพพลิเคชันจาก http", "No path specified when installing app from local file" : "ไม่ได้ระบุเส้นทางไว้เมื่อกำลังติดตั้งแอพฯจากไฟล์ต้นทาง", diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js index d26505b4a1e..828b5a85569 100644 --- a/lib/l10n/tr.js +++ b/lib/l10n/tr.js @@ -49,6 +49,7 @@ OC.L10N.register( "Can't read file" : "Dosya okunamıyor", "App directory already exists" : "Uygulama dizini zaten mevcut", "Can't create app folder. Please fix permissions. %s" : "Uygulama dizini oluşturulamıyor. Lütfen izinleri düzeltin. %s", + "Archive does not contain a directory named %s" : "Arşivde %s adında bir dizin bulunmuyor", "No source specified when installing app" : "Uygulama kurulurken bir kaynak belirtilmedi", "No href specified when installing app from http" : "Uygulama http'den kurulurken href belirtilmedi", "No path specified when installing app from local file" : "Uygulama yerel dosyadan kurulurken dosya yolu belirtilmedi", diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json index 4170115682d..13b63ee6f7d 100644 --- a/lib/l10n/tr.json +++ b/lib/l10n/tr.json @@ -47,6 +47,7 @@ "Can't read file" : "Dosya okunamıyor", "App directory already exists" : "Uygulama dizini zaten mevcut", "Can't create app folder. Please fix permissions. %s" : "Uygulama dizini oluşturulamıyor. Lütfen izinleri düzeltin. %s", + "Archive does not contain a directory named %s" : "Arşivde %s adında bir dizin bulunmuyor", "No source specified when installing app" : "Uygulama kurulurken bir kaynak belirtilmedi", "No href specified when installing app from http" : "Uygulama http'den kurulurken href belirtilmedi", "No path specified when installing app from local file" : "Uygulama yerel dosyadan kurulurken dosya yolu belirtilmedi", diff --git a/lib/l10n/ur.js b/lib/l10n/ur.js deleted file mode 100644 index da0dcc6bdde..00000000000 --- a/lib/l10n/ur.js +++ /dev/null @@ -1,9 +0,0 @@ -OC.L10N.register( - "lib", - { - "_%n minute ago_::_%n minutes ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n day go_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/ur.json b/lib/l10n/ur.json deleted file mode 100644 index 4286553dd0c..00000000000 --- a/lib/l10n/ur.json +++ /dev/null @@ -1,7 +0,0 @@ -{ "translations": { - "_%n minute ago_::_%n minutes ago_" : ["",""], - "_%n hour ago_::_%n hours ago_" : ["",""], - "_%n day go_::_%n days ago_" : ["",""], - "_%n month ago_::_%n months ago_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js index 9ec40a93aab..4e4ad0478c1 100644 --- a/lib/l10n/zh_CN.js +++ b/lib/l10n/zh_CN.js @@ -20,6 +20,7 @@ OC.L10N.register( "_%n minute ago_::_%n minutes ago_" : ["%n 分钟前"], "seconds ago" : "秒前", "web services under your control" : "您控制的网络服务", + "File name contains at least one invalid character" : "文件名中存在至少一个非法字符", "App directory already exists" : "应用程序目录已存在", "Can't create app folder. Please fix permissions. %s" : "无法创建应用程序文件夹。请修正权限。%s", "No source specified when installing app" : "安装 App 时未指定来源", diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json index 1d9fbf2ae3c..097f7d4d54a 100644 --- a/lib/l10n/zh_CN.json +++ b/lib/l10n/zh_CN.json @@ -18,6 +18,7 @@ "_%n minute ago_::_%n minutes ago_" : ["%n 分钟前"], "seconds ago" : "秒前", "web services under your control" : "您控制的网络服务", + "File name contains at least one invalid character" : "文件名中存在至少一个非法字符", "App directory already exists" : "应用程序目录已存在", "Can't create app folder. Please fix permissions. %s" : "无法创建应用程序文件夹。请修正权限。%s", "No source specified when installing app" : "安装 App 时未指定来源", diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js index d9a7dd965d6..3e761604d77 100644 --- a/lib/l10n/zh_TW.js +++ b/lib/l10n/zh_TW.js @@ -25,6 +25,7 @@ OC.L10N.register( "_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"], "seconds ago" : "幾秒前", "web services under your control" : "由您控制的網路服務", + "File name contains at least one invalid character" : "檔案名稱含有不合法的字元", "App directory already exists" : "應用程式目錄已經存在", "Can't create app folder. Please fix permissions. %s" : "無法建立應用程式目錄,請檢查權限:%s", "No source specified when installing app" : "沒有指定應用程式安裝來源", diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json index 3544bde0b1e..2e0de903735 100644 --- a/lib/l10n/zh_TW.json +++ b/lib/l10n/zh_TW.json @@ -23,6 +23,7 @@ "_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"], "seconds ago" : "幾秒前", "web services under your control" : "由您控制的網路服務", + "File name contains at least one invalid character" : "檔案名稱含有不合法的字元", "App directory already exists" : "應用程式目錄已經存在", "Can't create app folder. Please fix permissions. %s" : "無法建立應用程式目錄,請檢查權限:%s", "No source specified when installing app" : "沒有指定應用程式安裝來源", diff --git a/lib/private/appframework/db/db.php b/lib/private/appframework/db/db.php index cde85831687..8e3fa6e4197 100644 --- a/lib/private/appframework/db/db.php +++ b/lib/private/appframework/db/db.php @@ -154,6 +154,15 @@ class Db implements IDb { } /** + * Check if a transaction is active + * + * @return bool + */ + public function inTransaction() { + return $this->connection->inTransaction(); + } + + /** * Commit the database changes done during a transaction that is in progress */ public function commit() { diff --git a/lib/private/config.php b/lib/private/config.php index 20ff02c1abf..3ad800a00be 100644 --- a/lib/private/config.php +++ b/lib/private/config.php @@ -47,8 +47,6 @@ class Config { protected $configFilePath; /** @var string */ protected $configFileName; - /** @var bool */ - protected $debugMode; /** * @param string $configDir Path to the config dir, needs to end with '/' @@ -59,7 +57,6 @@ class Config { $this->configFilePath = $this->configDir.$fileName; $this->configFileName = $fileName; $this->readData(); - $this->debugMode = (defined('DEBUG') && DEBUG); } /** @@ -225,9 +222,6 @@ class Config { private function writeData() { // Create a php file ... $content = "<?php\n"; - if ($this->debugMode) { - $content .= "define('DEBUG',true);\n"; - } $content .= '$CONFIG = '; $content .= var_export($this->cache, true); $content .= ";\n"; diff --git a/lib/private/connector/sabre/dummygetresponseplugin.php b/lib/private/connector/sabre/dummygetresponseplugin.php index 6057236b635..6f5a009d084 100644 --- a/lib/private/connector/sabre/dummygetresponseplugin.php +++ b/lib/private/connector/sabre/dummygetresponseplugin.php @@ -61,6 +61,7 @@ class DummyGetResponsePlugin extends \Sabre\DAV\ServerPlugin { fwrite($stream, $string); rewind($stream); + $response->setStatus(200); $response->setBody($stream); return false; diff --git a/lib/private/db/connection.php b/lib/private/db/connection.php index def3f2fd120..4d33cd968af 100644 --- a/lib/private/db/connection.php +++ b/lib/private/db/connection.php @@ -291,4 +291,14 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection { protected function replaceTablePrefix($statement) { return str_replace( '*PREFIX*', $this->tablePrefix, $statement ); } + + /** + * Check if a transaction is active + * + * @return bool + * @since 8.2.0 + */ + public function inTransaction() { + return $this->getTransactionNestingLevel() > 0; + } } diff --git a/lib/private/files/cache/scanner.php b/lib/private/files/cache/scanner.php index 7c65c721352..f76ef5ba0dd 100644 --- a/lib/private/files/cache/scanner.php +++ b/lib/private/files/cache/scanner.php @@ -416,11 +416,21 @@ class Scanner extends BasicEmitter { public function backgroundScan() { $lastPath = null; while (($path = $this->cache->getIncomplete()) !== false && $path !== $lastPath) { - $this->scan($path, self::SCAN_RECURSIVE, self::REUSE_ETAG); - \OC_Hook::emit('Scanner', 'correctFolderSize', array('path' => $path)); - if ($this->cacheActive) { - $this->cache->correctFolderSize($path); + try { + $this->scan($path, self::SCAN_RECURSIVE, self::REUSE_ETAG); + \OC_Hook::emit('Scanner', 'correctFolderSize', array('path' => $path)); + if ($this->cacheActive) { + $this->cache->correctFolderSize($path); + } + } catch (\OCP\Files\StorageInvalidException $e) { + // skip unavailable storages + } catch (\OCP\Files\StorageNotAvailableException $e) { + // skip unavailable storages + } catch (\OCP\Lock\LockedException $e) { + // skip unavailable storages } + // FIXME: this won't proceed with the next item, needs revamping of getIncomplete() + // to make this possible $lastPath = $path; } } diff --git a/lib/private/files/storage/wrapper/encryption.php b/lib/private/files/storage/wrapper/encryption.php index 4ba9b21ddb4..805a2bc1ad0 100644 --- a/lib/private/files/storage/wrapper/encryption.php +++ b/lib/private/files/storage/wrapper/encryption.php @@ -67,7 +67,6 @@ class Encryption extends Wrapper { /** @var IMountPoint */ private $mount; - /** @var IStorage */ private $keyStorage; @@ -300,33 +299,15 @@ class Encryption extends Wrapper { public function copy($path1, $path2) { $source = $this->getFullPath($path1); - $target = $this->getFullPath($path2); if ($this->util->isExcluded($source)) { return $this->storage->copy($path1, $path2); } - $result = $this->storage->copy($path1, $path2); - - if ($result && $this->encryptionManager->isEnabled()) { - $keysCopied = $this->copyKeys($source, $target); - - if ($keysCopied && - dirname($source) !== dirname($target) && - $this->util->isFile($target) - ) { - $this->update->update($target); - } - - $data = $this->getMetaData($path1); - - if (isset($data['encrypted'])) { - $this->getCache()->put($path2, ['encrypted' => $data['encrypted']]); - } - if (isset($data['size'])) { - $this->updateUnencryptedSize($target, $data['size']); - } - } + // need to stream copy file by file in case we copy between a encrypted + // and a unencrypted storage + $this->unlink($path2); + $result = $this->copyFromStorage($this, $path1, $path2); return $result; } @@ -511,12 +492,17 @@ class Encryption extends Wrapper { } } } else { - $source = $sourceStorage->fopen($sourceInternalPath, 'r'); - $target = $this->fopen($targetInternalPath, 'w'); - list(, $result) = \OC_Helper::streamCopy($source, $target); - fclose($source); - fclose($target); - + try { + $source = $sourceStorage->fopen($sourceInternalPath, 'r'); + $target = $this->fopen($targetInternalPath, 'w'); + list(, $result) = \OC_Helper::streamCopy($source, $target); + fclose($source); + fclose($target); + } catch (\Exception $e) { + fclose($source); + fclose($target); + throw $e; + } if($result) { if ($preserveMtime) { $this->touch($targetInternalPath, $sourceStorage->filemtime($sourceInternalPath)); diff --git a/lib/private/l10n.php b/lib/private/l10n.php index d367dbae690..17acaac1692 100644 --- a/lib/private/l10n.php +++ b/lib/private/l10n.php @@ -449,8 +449,11 @@ class OC_L10N implements \OCP\IL10N { return self::$language; } - if(OC_User::getUser() && \OC::$server->getConfig()->getUserValue(OC_User::getUser(), 'core', 'lang')) { - $lang = \OC::$server->getConfig()->getUserValue(OC_User::getUser(), 'core', 'lang'); + $config = \OC::$server->getConfig(); + $userId = \OC_User::getUser(); + + if($userId && $config->getUserValue($userId, 'core', 'lang')) { + $lang = $config->getUserValue($userId, 'core', 'lang'); self::$language = $lang; if(is_array($app)) { $available = $app; @@ -463,13 +466,18 @@ class OC_L10N implements \OCP\IL10N { } } - $default_language = \OC::$server->getConfig()->getSystemValue('default_language', false); + $default_language = $config->getSystemValue('default_language', false); if($default_language !== false) { return $default_language; } - return self::setLanguageFromRequest($app); + $lang = self::setLanguageFromRequest($app); + if($userId && !$config->getUserValue($userId, 'core', 'lang')) { + $config->setUserValue($userId, 'core', 'lang', $lang); + } + + return $lang; } /** diff --git a/lib/private/lock/abstractlockingprovider.php b/lib/private/lock/abstractlockingprovider.php new file mode 100644 index 00000000000..eb86be68500 --- /dev/null +++ b/lib/private/lock/abstractlockingprovider.php @@ -0,0 +1,102 @@ +<?php +/** + * @author Robin Appelman <icewind@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Lock; + +use OCP\Lock\ILockingProvider; + +/** + * Base locking provider that keeps track of locks acquired during the current request + * to release any left over locks at the end of the request + */ +abstract class AbstractLockingProvider implements ILockingProvider { + protected $acquiredLocks = [ + 'shared' => [], + 'exclusive' => [] + ]; + + /** + * Mark a locally acquired lock + * + * @param string $path + * @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE + */ + protected function markAcquire($path, $type) { + if ($type === self::LOCK_SHARED) { + if (!isset($this->acquiredLocks['shared'][$path])) { + $this->acquiredLocks['shared'][$path] = 0; + } + $this->acquiredLocks['shared'][$path]++; + } else { + $this->acquiredLocks['exclusive'][$path] = true; + } + } + + /** + * Mark a release of a locally acquired lock + * + * @param string $path + * @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE + */ + protected function markRelease($path, $type) { + if ($type === self::LOCK_SHARED) { + if (isset($this->acquiredLocks['shared'][$path]) and $this->acquiredLocks['shared'][$path] > 0) { + $this->acquiredLocks['shared'][$path]--; + } + } else if ($type === self::LOCK_EXCLUSIVE) { + unset($this->acquiredLocks['exclusive'][$path]); + } + } + + /** + * Change the type of an existing tracked lock + * + * @param string $path + * @param int $targetType self::LOCK_SHARED or self::LOCK_EXCLUSIVE + */ + protected function markChange($path, $targetType) { + if ($targetType === self::LOCK_SHARED) { + unset($this->acquiredLocks['exclusive'][$path]); + if (!isset($this->acquiredLocks['shared'][$path])) { + $this->acquiredLocks['shared'][$path] = 0; + } + $this->acquiredLocks['shared'][$path]++; + } else if ($targetType === self::LOCK_EXCLUSIVE) { + $this->acquiredLocks['exclusive'][$path] = true; + $this->acquiredLocks['shared'][$path]--; + } + } + + /** + * release all lock acquired by this instance which were marked using the mark* methods + */ + public function releaseAll() { + foreach ($this->acquiredLocks['shared'] as $path => $count) { + for ($i = 0; $i < $count; $i++) { + $this->releaseLock($path, self::LOCK_SHARED); + } + } + + foreach ($this->acquiredLocks['exclusive'] as $path => $hasLock) { + $this->releaseLock($path, self::LOCK_EXCLUSIVE); + } + } +} diff --git a/lib/private/lock/dblockingprovider.php b/lib/private/lock/dblockingprovider.php new file mode 100644 index 00000000000..f3e684d0b4d --- /dev/null +++ b/lib/private/lock/dblockingprovider.php @@ -0,0 +1,162 @@ +<?php +/** + * @author Robin Appelman <icewind@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Lock; + +use OCP\IDBConnection; +use OCP\ILogger; +use OCP\Lock\LockedException; + +/** + * Locking provider that stores the locks in the database + */ +class DBLockingProvider extends AbstractLockingProvider { + /** + * @var \OCP\IDBConnection + */ + private $connection; + + /** + * @var \OCP\ILogger + */ + private $logger; + + /** + * @param \OCP\IDBConnection $connection + * @param \OCP\ILogger $logger + */ + public function __construct(IDBConnection $connection, ILogger $logger) { + $this->connection = $connection; + $this->logger = $logger; + } + + protected function initLockField($path) { + $this->connection->insertIfNotExist('*PREFIX*file_locks', ['key' => $path, 'lock' => 0, 'ttl' => 0], ['key']); + } + + /** + * @param string $path + * @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE + * @return bool + */ + public function isLocked($path, $type) { + $query = $this->connection->prepare('SELECT `lock` from `*PREFIX*file_locks` WHERE `key` = ?'); + $query->execute([$path]); + $lockValue = (int)$query->fetchColumn(); + if ($type === self::LOCK_SHARED) { + return $lockValue > 0; + } else if ($type === self::LOCK_EXCLUSIVE) { + return $lockValue === -1; + } else { + return false; + } + } + + /** + * @param string $path + * @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE + * @throws \OCP\Lock\LockedException + */ + public function acquireLock($path, $type) { + if ($this->connection->inTransaction()){ + $this->logger->warning("Trying to acquire a lock for '$path' while inside a transition"); + } + + $this->connection->beginTransaction(); + $this->initLockField($path); + if ($type === self::LOCK_SHARED) { + $result = $this->connection->executeUpdate( + 'UPDATE `*PREFIX*file_locks` SET `lock` = `lock` + 1 WHERE `key` = ? AND `lock` >= 0', + [$path] + ); + } else { + $result = $this->connection->executeUpdate( + 'UPDATE `*PREFIX*file_locks` SET `lock` = -1 WHERE `key` = ? AND `lock` = 0', + [$path] + ); + } + $this->connection->commit(); + if ($result !== 1) { + throw new LockedException($path); + } + $this->markAcquire($path, $type); + } + + /** + * @param string $path + * @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE + */ + public function releaseLock($path, $type) { + $this->initLockField($path); + if ($type === self::LOCK_SHARED) { + $this->connection->executeUpdate( + 'UPDATE `*PREFIX*file_locks` SET `lock` = `lock` - 1 WHERE `key` = ? AND `lock` > 0', + [$path] + ); + } else { + $this->connection->executeUpdate( + 'UPDATE `*PREFIX*file_locks` SET `lock` = 0 WHERE `key` = ? AND `lock` = -1', + [$path] + ); + } + + $this->markRelease($path, $type); + } + + /** + * Change the type of an existing lock + * + * @param string $path + * @param int $targetType self::LOCK_SHARED or self::LOCK_EXCLUSIVE + * @throws \OCP\Lock\LockedException + */ + public function changeLock($path, $targetType) { + $this->initLockField($path); + if ($targetType === self::LOCK_SHARED) { + $result = $this->connection->executeUpdate( + 'UPDATE `*PREFIX*file_locks` SET `lock` = 1 WHERE `key` = ? AND `lock` = -1', + [$path] + ); + } else { + $result = $this->connection->executeUpdate( + 'UPDATE `*PREFIX*file_locks` SET `lock` = -1 WHERE `key` = ? AND `lock` = 1', + [$path] + ); + } + if ($result !== 1) { + throw new LockedException($path); + } + $this->markChange($path, $targetType); + } + + /** + * cleanup empty locks + */ + public function cleanEmptyLocks() { + $this->connection->executeUpdate( + 'DELETE FROM `*PREFIX*file_locks` WHERE `lock` = 0' + ); + } + + public function __destruct() { + $this->cleanEmptyLocks(); + } +} diff --git a/lib/private/lock/memcachelockingprovider.php b/lib/private/lock/memcachelockingprovider.php index 5f2b5e5a4b8..871572f7e3e 100644 --- a/lib/private/lock/memcachelockingprovider.php +++ b/lib/private/lock/memcachelockingprovider.php @@ -23,21 +23,15 @@ namespace OC\Lock; -use OCP\Lock\ILockingProvider; use OCP\Lock\LockedException; use OCP\IMemcache; -class MemcacheLockingProvider implements ILockingProvider { +class MemcacheLockingProvider extends AbstractLockingProvider { /** * @var \OCP\IMemcache */ private $memcache; - private $acquiredLocks = [ - 'shared' => [], - 'exclusive' => [] - ]; - /** * @param \OCP\IMemcache $memcache */ @@ -71,17 +65,13 @@ class MemcacheLockingProvider implements ILockingProvider { if (!$this->memcache->inc($path)) { throw new LockedException($path); } - if (!isset($this->acquiredLocks['shared'][$path])) { - $this->acquiredLocks['shared'][$path] = 0; - } - $this->acquiredLocks['shared'][$path]++; } else { $this->memcache->add($path, 0); if (!$this->memcache->cas($path, 0, 'exclusive')) { throw new LockedException($path); } - $this->acquiredLocks['exclusive'][$path] = true; } + $this->markAcquire($path, $type); } /** @@ -92,13 +82,12 @@ class MemcacheLockingProvider implements ILockingProvider { if ($type === self::LOCK_SHARED) { if (isset($this->acquiredLocks['shared'][$path]) and $this->acquiredLocks['shared'][$path] > 0) { $this->memcache->dec($path); - $this->acquiredLocks['shared'][$path]--; $this->memcache->cad($path, 0); } } else if ($type === self::LOCK_EXCLUSIVE) { $this->memcache->cad($path, 'exclusive'); - unset($this->acquiredLocks['exclusive'][$path]); } + $this->markRelease($path, $type); } /** @@ -113,33 +102,12 @@ class MemcacheLockingProvider implements ILockingProvider { if (!$this->memcache->cas($path, 'exclusive', 1)) { throw new LockedException($path); } - unset($this->acquiredLocks['exclusive'][$path]); - if (!isset($this->acquiredLocks['shared'][$path])) { - $this->acquiredLocks['shared'][$path] = 0; - } - $this->acquiredLocks['shared'][$path]++; } else if ($targetType === self::LOCK_EXCLUSIVE) { // we can only change a shared lock to an exclusive if there's only a single owner of the shared lock if (!$this->memcache->cas($path, 1, 'exclusive')) { throw new LockedException($path); } - $this->acquiredLocks['exclusive'][$path] = true; - $this->acquiredLocks['shared'][$path]--; - } - } - - /** - * release all lock acquired by this instance - */ - public function releaseAll() { - foreach ($this->acquiredLocks['shared'] as $path => $count) { - for ($i = 0; $i < $count; $i++) { - $this->releaseLock($path, self::LOCK_SHARED); - } - } - - foreach ($this->acquiredLocks['exclusive'] as $path => $hasLock) { - $this->releaseLock($path, self::LOCK_EXCLUSIVE); } + $this->markChange($path, $targetType); } } diff --git a/lib/private/server.php b/lib/private/server.php index ff78536cec0..287b70eb806 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -40,6 +40,7 @@ use bantu\IniGetWrapper\IniGetWrapper; use OC\AppFramework\Http\Request; use OC\AppFramework\Db\Db; use OC\AppFramework\Utility\SimpleContainer; +use OC\AppFramework\Utility\TimeFactory; use OC\Command\AsyncBus; use OC\Diagnostics\EventLogger; use OC\Diagnostics\NullEventLogger; @@ -48,6 +49,7 @@ use OC\Diagnostics\QueryLogger; use OC\Files\Node\Root; use OC\Files\View; use OC\Http\Client\ClientService; +use OC\Lock\DBLockingProvider; use OC\Lock\MemcacheLockingProvider; use OC\Lock\NoopLockingProvider; use OC\Mail\Mailer; @@ -56,6 +58,7 @@ use OC\Security\Crypto; use OC\Security\Hasher; use OC\Security\SecureRandom; use OC\Security\TrustedDomainHelper; +use OC\Session\CryptoWrapper; use OC\Tagging\TagMapper; use OCP\IServerContainer; use Symfony\Component\EventDispatcher\EventDispatcher; @@ -159,7 +162,12 @@ class Server extends SimpleContainer implements IServerContainer { }); $this->registerService('UserSession', function (Server $c) { $manager = $c->getUserManager(); - $userSession = new \OC\User\Session($manager, new \OC\Session\Memory('')); + + $session = new \OC\Session\Memory(''); + $cryptoWrapper = $c->getSessionCryptoWrapper(); + $session = $cryptoWrapper->wrapSession($session); + + $userSession = new \OC\User\Session($manager, $session); $userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) { \OC_Hook::emit('OC_User', 'pre_createUser', array('run' => true, 'uid' => $uid, 'password' => $password)); }); @@ -322,14 +330,14 @@ class Server extends SimpleContainer implements IServerContainer { ); }); $this->registerService('EventLogger', function (Server $c) { - if (defined('DEBUG') and DEBUG) { + if ($c->getSystemConfig()->getValue('debug', false)) { return new EventLogger(); } else { return new NullEventLogger(); } }); - $this->registerService('QueryLogger', function ($c) { - if (defined('DEBUG') and DEBUG) { + $this->registerService('QueryLogger', function (Server $c) { + if ($c->getSystemConfig()->getValue('debug', false)) { return new QueryLogger(); } else { return new NullQueryLogger(); @@ -434,13 +442,10 @@ class Server extends SimpleContainer implements IServerContainer { /** @var \OC\Memcache\Factory $memcacheFactory */ $memcacheFactory = $c->getMemCacheFactory(); $memcache = $memcacheFactory->createLocking('lock'); - if (!($memcache instanceof \OC\Memcache\NullCache)) { - return new MemcacheLockingProvider($memcache); - } - throw new HintException( - 'File locking is enabled but the locking cache class was not found', - 'Please check the "memcache.locking" setting and make sure the matching PHP module is installed and enabled' - ); +// if (!($memcache instanceof \OC\Memcache\NullCache)) { +// return new MemcacheLockingProvider($memcache); +// } + return new DBLockingProvider($c->getDatabaseConnection(), $c->getLogger()); } return new NoopLockingProvider(); }); @@ -462,6 +467,32 @@ class Server extends SimpleContainer implements IServerContainer { $this->registerService('EventDispatcher', function() { return new EventDispatcher(); }); + $this->registerService('CryptoWrapper', function (Server $c) { + // FIXME: Instantiiated here due to cyclic dependency + $request = new Request( + [ + 'get' => $_GET, + 'post' => $_POST, + 'files' => $_FILES, + 'server' => $_SERVER, + 'env' => $_ENV, + 'cookies' => $_COOKIE, + 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD'])) + ? $_SERVER['REQUEST_METHOD'] + : null, + ], + new SecureRandom(), + $c->getCrypto(), + $c->getConfig() + ); + + return new CryptoWrapper( + $c->getConfig(), + $c->getCrypto(), + $c->getSecureRandom(), + $request + ); + }); } /** @@ -977,4 +1008,11 @@ class Server extends SimpleContainer implements IServerContainer { public function getEventDispatcher() { return $this->query('EventDispatcher'); } + + /** + * @return \OC\Session\CryptoWrapper + */ + public function getSessionCryptoWrapper() { + return $this->query('CryptoWrapper'); + } } diff --git a/lib/private/session/cryptosessiondata.php b/lib/private/session/cryptosessiondata.php new file mode 100644 index 00000000000..60d22b25e97 --- /dev/null +++ b/lib/private/session/cryptosessiondata.php @@ -0,0 +1,147 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Session; + +use OCP\ISession; +use OCP\Security\ICrypto; + +/** + * Class CryptoSessionData + * + * @package OC\Session + */ +class CryptoSessionData implements \ArrayAccess, ISession { + /** @var ISession */ + protected $session; + + /** @var \OCP\Security\ICrypto */ + protected $crypto; + + /** @var string */ + protected $passphrase; + + /** + * @param ISession $session + * @param ICrypto $crypto + * @param string $passphrase + */ + public function __construct(ISession $session, ICrypto $crypto, $passphrase) { + $this->crypto = $crypto; + $this->session = $session; + $this->passphrase = $passphrase; + } + + /** + * Set a value in the session + * + * @param string $key + * @param mixed $value + */ + public function set($key, $value) { + $encryptedValue = $this->crypto->encrypt(json_encode($value), $this->passphrase); + $this->session->set($key, $encryptedValue); + } + + /** + * Get a value from the session + * + * @param string $key + * @return string|null Either the value or null + */ + public function get($key) { + $encryptedValue = $this->session->get($key); + if ($encryptedValue === null) { + return null; + } + + try { + $value = $this->crypto->decrypt($encryptedValue, $this->passphrase); + return json_decode($value); + } catch (\Exception $e) { + return null; + } + } + + /** + * Check if a named key exists in the session + * + * @param string $key + * @return bool + */ + public function exists($key) { + return $this->session->exists($key); + } + + /** + * Remove a $key/$value pair from the session + * + * @param string $key + */ + public function remove($key) { + $this->session->remove($key); + } + + /** + * Reset and recreate the session + */ + public function clear() { + $this->session->clear(); + } + + /** + * Close the session and release the lock + */ + public function close() { + $this->session->close(); + } + + /** + * @param mixed $offset + * @return bool + */ + public function offsetExists($offset) { + return $this->exists($offset); + } + + /** + * @param mixed $offset + * @return mixed + */ + public function offsetGet($offset) { + return $this->get($offset); + } + + /** + * @param mixed $offset + * @param mixed $value + */ + public function offsetSet($offset, $value) { + $this->set($offset, $value); + } + + /** + * @param mixed $offset + */ + public function offsetUnset($offset) { + $this->remove($offset); + } +} diff --git a/lib/private/session/cryptowrapper.php b/lib/private/session/cryptowrapper.php new file mode 100644 index 00000000000..62bdcbfb719 --- /dev/null +++ b/lib/private/session/cryptowrapper.php @@ -0,0 +1,96 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Session; + +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\IConfig; +use OCP\IRequest; +use OCP\ISession; +use OCP\Security\ICrypto; +use OCP\Security\ISecureRandom; + +/** + * Class CryptoWrapper provides some rough basic level of additional security by + * storing the session data in an encrypted form. + * + * The content of the session is encrypted using another cookie sent by the browser. + * One should note that an adversary with access to the source code or the system + * memory is still able to read the original session ID from the users' request. + * This thus can not be considered a strong security measure one should consider + * it as an additional small security obfuscation layer to comply with compliance + * guidelines. + * + * TODO: Remove this in a future relase with an approach such as + * https://github.com/owncloud/core/pull/17866 + * + * @package OC\Session + */ +class CryptoWrapper { + const COOKIE_NAME = 'oc_sessionPassphrase'; + + /** @var ISession */ + protected $session; + + /** @var \OCP\Security\ICrypto */ + protected $crypto; + + /** @var ISecureRandom */ + protected $random; + + /** + * @param IConfig $config + * @param ICrypto $crypto + * @param ISecureRandom $random + * @param IRequest $request + */ + public function __construct(IConfig $config, + ICrypto $crypto, + ISecureRandom $random, + IRequest $request) { + $this->crypto = $crypto; + $this->config = $config; + $this->random = $random; + + if (!is_null($request->getCookie(self::COOKIE_NAME))) { + $this->passphrase = $request->getCookie(self::COOKIE_NAME); + } else { + $this->passphrase = $this->random->getMediumStrengthGenerator()->generate(128); + $secureCookie = $request->getServerProtocol() === 'https'; + // FIXME: Required for CI + if (!defined('PHPUNIT_RUN')) { + setcookie(self::COOKIE_NAME, $this->passphrase, 0, \OC::$WEBROOT, '', $secureCookie, true); + } + } + } + + /** + * @param ISession $session + * @return ISession + */ + public function wrapSession(ISession $session) { + if (!($session instanceof CryptoSessionData)) { + return new CryptoSessionData($session, $this->crypto, $this->passphrase); + } + + return $session; + } +} diff --git a/lib/private/template.php b/lib/private/template.php index e7acc778de3..920be71abbf 100644 --- a/lib/private/template.php +++ b/lib/private/template.php @@ -233,7 +233,7 @@ class OC_Template extends \OC\Template\Base { $content->assign('file', $exception->getFile()); $content->assign('line', $exception->getLine()); $content->assign('trace', $exception->getTraceAsString()); - $content->assign('debugMode', defined('DEBUG') && DEBUG === true); + $content->assign('debugMode', \OC::$server->getSystemConfig()->getValue('debug', false)); $content->assign('remoteAddr', $request->getRemoteAddress()); $content->assign('requestID', $request->getId()); $content->printPage(); diff --git a/lib/private/user/session.php b/lib/private/user/session.php index 75a884fb452..baceeb43956 100644 --- a/lib/private/user/session.php +++ b/lib/private/user/session.php @@ -297,8 +297,8 @@ class Session implements IUserSession, Emitter { * Remove cookie for "remember username" */ public function unsetMagicInCookie() { - //TODO: DI for cookies and OC_Config - $secureCookie = \OC_Config::getValue('forcessl', false); + //TODO: DI for cookies and IRequest + $secureCookie = \OC::$server->getRequest()->getServerProtocol() === 'https'; unset($_COOKIE["oc_username"]); //TODO: DI unset($_COOKIE["oc_token"]); diff --git a/lib/public/encryption/iencryptionmodule.php b/lib/public/encryption/iencryptionmodule.php index 183b322e714..a5cd7075691 100644 --- a/lib/public/encryption/iencryptionmodule.php +++ b/lib/public/encryption/iencryptionmodule.php @@ -23,6 +23,8 @@ */ namespace OCP\Encryption; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; /** * Interface IEncryptionModule @@ -134,4 +136,14 @@ interface IEncryptionModule { */ public function isReadable($path, $uid); + /** + * Initial encryption of all files + * + * @param InputInterface $input + * @param OutputInterface $output write some status information to the terminal during encryption + * @return bool + * @since 8.2.0 + */ + public function encryptAll(InputInterface $input, OutputInterface $output); + } diff --git a/lib/public/idbconnection.php b/lib/public/idbconnection.php index 0d04c43d73e..6a4373583fa 100644 --- a/lib/public/idbconnection.php +++ b/lib/public/idbconnection.php @@ -115,6 +115,14 @@ interface IDBConnection { public function beginTransaction(); /** + * Check if a transaction is active + * + * @return bool + * @since 8.2.0 + */ + public function inTransaction(); + + /** * Commit the database changes done during a transaction that is in progress * @since 6.0.0 */ |