From d0cae6a99a332af79b2506205aa25aad4313d912 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sat, 21 Jul 2012 19:43:50 +0200 Subject: [PATCH 001/576] Very basic conversion of ocs to Symfony Routing Component --- .gitmodules | 3 + 3rdparty/Symfony/Component/Routing | 1 + lib/base.php | 3 + lib/ocs.php | 148 ++++++++++++++++++----------- 4 files changed, 98 insertions(+), 57 deletions(-) create mode 100644 .gitmodules create mode 160000 3rdparty/Symfony/Component/Routing diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000000..0f4ad588071 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "3rdparty/Symfony/Component/Routing"] + path = 3rdparty/Symfony/Component/Routing + url = git://github.com/symfony/Routing.git diff --git a/3rdparty/Symfony/Component/Routing b/3rdparty/Symfony/Component/Routing new file mode 160000 index 00000000000..d7248389088 --- /dev/null +++ b/3rdparty/Symfony/Component/Routing @@ -0,0 +1 @@ +Subproject commit d72483890880a987afa679503af096d2aaf7d2ee diff --git a/lib/base.php b/lib/base.php index 631ed4fcce6..fcca1e77d26 100644 --- a/lib/base.php +++ b/lib/base.php @@ -86,6 +86,9 @@ class OC{ elseif(strpos($className,'Sabre_')===0) { require_once str_replace('_','/',$className) . '.php'; } + elseif(strpos($className,'Symfony\\')===0){ + require_once str_replace('\\','/',$className) . '.php'; + } elseif(strpos($className,'Test_')===0){ require_once 'tests/lib/'.strtolower(str_replace('_','/',substr($className,5)) . '.php'); } diff --git a/lib/ocs.php b/lib/ocs.php index 77dd437d6c6..7e84d0e5441 100644 --- a/lib/ocs.php +++ b/lib/ocs.php @@ -21,7 +21,11 @@ * */ - +use Symfony\Component\Routing\Matcher\UrlMatcher; +use Symfony\Component\Routing\RequestContext; +use Symfony\Component\Routing\RouteCollection; +use Symfony\Component\Routing\Route; +use Symfony\Component\Routing\Exception\ResourceNotFoundException; /** * Class to handle open collaboration services API requests @@ -95,73 +99,103 @@ class OC_OCS { exit(); } - // preprocess url - $url=$_SERVER['REQUEST_URI']; - if(substr($url,(strlen($url)-1))<>'/') $url.='/'; - $ex=explode('/',$url); - $paracount=count($ex); - - // eventhandler + $routes = new RouteCollection(); // CONFIG - // apiconfig - GET - CONFIG - if(($method=='get') and (strtolower($ex[$paracount-3])=='v1.php') and (strtolower($ex[$paracount-2])=='config')){ - $format=OC_OCS::readdata('format','text'); - OC_OCS::apiconfig($format); + $routes->add('config', + new Route('/config.{format}', + array('format'=>'', + 'action' => function ($parameters) { + OC_OCS::apiconfig($parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text')); + }), + array('format'=>'xml|json'))); // PERSON - // personcheck - POST - PERSON/CHECK - }elseif(($method=='post') and (strtolower($ex[$paracount-4])=='v1.php') and (strtolower($ex[$paracount-3])=='person') and (strtolower($ex[$paracount-2])=='check')){ - $format=OC_OCS::readdata('format','text'); - $login=OC_OCS::readdata('login','text'); - $passwd=OC_OCS::readdata('password','text'); - OC_OCS::personcheck($format,$login,$passwd); + $routes->add('person_check', + new Route('/person/check.{format}', + array('format'=>'', + 'action' => function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $login=OC_OCS::readdata('login','text'); + $passwd=OC_OCS::readdata('password','text'); + OC_OCS::personcheck($format,$login,$passwd); + }), + array('_method'=>'post', + 'format'=>'xml|json'))); // ACTIVITY // activityget - GET ACTIVITY page,pagesize als urlparameter - }elseif(($method=='get') and (strtolower($ex[$paracount-3])=='v1.php')and (strtolower($ex[$paracount-2])=='activity')){ - $format=OC_OCS::readdata('format','text'); - $page=OC_OCS::readdata('page','int'); - $pagesize=OC_OCS::readdata('pagesize','int'); - if($pagesize<1 or $pagesize>100) $pagesize=10; - OC_OCS::activityget($format,$page,$pagesize); - + $routes->add('activity_get', + new Route('/activity.{format}', + array('format'=>'', + 'action' => function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $page=OC_OCS::readdata('page','int'); + $pagesize=OC_OCS::readdata('pagesize','int'); + if($pagesize<1 or $pagesize>100) $pagesize=10; + OC_OCS::activityget($format,$page,$pagesize); + }), + array('format'=>'xml|json'))); // activityput - POST ACTIVITY - }elseif(($method=='post') and (strtolower($ex[$paracount-3])=='v1.php')and (strtolower($ex[$paracount-2])=='activity')){ - $format=OC_OCS::readdata('format','text'); - $message=OC_OCS::readdata('message','text'); - OC_OCS::activityput($format,$message); - + $routes->add('activity_put', + new Route('/activity.{format}', + array('format'=>'', + 'action' => function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $message=OC_OCS::readdata('message','text'); + OC_OCS::activityput($format,$message); + }), + array('_method'=>'post', + 'format'=>'xml|json'))); // PRIVATEDATA // get - GET DATA - }elseif(($method=='get') and (strtolower($ex[$paracount-4])=='v1.php')and (strtolower($ex[$paracount-2])=='getattribute')){ - $format=OC_OCS::readdata('format','text'); - OC_OCS::privateDataGet($format); - - }elseif(($method=='get') and (strtolower($ex[$paracount-5])=='v1.php')and (strtolower($ex[$paracount-3])=='getattribute')){ - $format=OC_OCS::readdata('format','text'); - $app=$ex[$paracount-2]; - OC_OCS::privateDataGet($format, $app); - }elseif(($method=='get') and (strtolower($ex[$paracount-6])=='v1.php')and (strtolower($ex[$paracount-4])=='getattribute')){ - $format=OC_OCS::readdata('format','text'); - $key=$ex[$paracount-2]; - $app=$ex[$paracount-3]; - OC_OCS::privateDataGet($format, $app,$key); - + $routes->add('privatedata_get', + new Route('/privatedata/getattribute/{app}/{key}.{format}', + array('app' => '', + 'key' => '', + 'format' => '', + 'action' => function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $app = addslashes(strip_tags($parameters['app'])); + $key = addslashes(strip_tags($parameters['key'])); + OC_OCS::privateDataGet($format, $app, $key); + }), + array('format'=>'xml|json'))); // set - POST DATA - }elseif(($method=='post') and (strtolower($ex[$paracount-6])=='v1.php')and (strtolower($ex[$paracount-4])=='setattribute')){ - $format=OC_OCS::readdata('format','text'); - $key=$ex[$paracount-2]; - $app=$ex[$paracount-3]; - $value=OC_OCS::readdata('value','text'); - OC_OCS::privatedataset($format, $app, $key, $value); + $routes->add('privatedata_set', + new Route('/privatedata/setattribute/{app}/{key}.{format}', + array('format'=>'', + 'action' => function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $app = addslashes(strip_tags($parameters['app'])); + $key = addslashes(strip_tags($parameters['key'])); + $value=OC_OCS::readdata('value','text'); + OC_OCS::privateDataSet($format, $app, $key, $value); + }), + array('_method'=>'post', + 'format'=>'xml|json'))); // delete - POST DATA - }elseif(($method=='post') and (strtolower($ex[$paracount-6])=='v1.php')and (strtolower($ex[$paracount-4])=='deleteattribute')){ - $format=OC_OCS::readdata('format','text'); - $key=$ex[$paracount-2]; - $app=$ex[$paracount-3]; - OC_OCS::privatedatadelete($format, $app, $key); - - }else{ + $routes->add('privatedata_delete', + new Route('/privatedata/deleteattribute/{app}/{key}.{format}', + array('format'=>'', + 'action' => function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $app = addslashes(strip_tags($parameters['app'])); + $key = addslashes(strip_tags($parameters['key'])); + OC_OCS::privateDataDelete($format, $app, $key); + }), + array('_method'=>'post', + 'format'=>'xml|json'))); + + $context = new RequestContext($_SERVER['REQUEST_URI'], $method); + + $matcher = new UrlMatcher($routes, $context); + + try { + $parameters = $matcher->match($_SERVER['PATH_INFO']); + $action = $parameters['action']; + unset($parameters['action']); + call_user_func($action, $parameters); + } catch (ResourceNotFoundException $e) { $format=OC_OCS::readdata('format','text'); $txt='Invalid query, please check the syntax. API specifications are here: http://www.freedesktop.org/wiki/Specifications/open-collaboration-services. DEBUG OUTPUT:'."\n"; $txt.=OC_OCS::getdebugoutput(); -- GitLab From 768b44b9b685a07af6030e484ab6322ba44b5b7e Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Mon, 23 Jul 2012 18:58:52 +0200 Subject: [PATCH 002/576] Convert routing to ownCloud fluid interface --- lib/ocs.php | 192 +++++++++++++++++++++---------------------------- lib/route.php | 50 +++++++++++++ lib/router.php | 50 +++++++++++++ 3 files changed, 181 insertions(+), 111 deletions(-) create mode 100644 lib/route.php create mode 100644 lib/router.php diff --git a/lib/ocs.php b/lib/ocs.php index 7e84d0e5441..27007076661 100644 --- a/lib/ocs.php +++ b/lib/ocs.php @@ -21,12 +21,6 @@ * */ -use Symfony\Component\Routing\Matcher\UrlMatcher; -use Symfony\Component\Routing\RequestContext; -use Symfony\Component\Routing\RouteCollection; -use Symfony\Component\Routing\Route; -use Symfony\Component\Routing\Exception\ResourceNotFoundException; - /** * Class to handle open collaboration services API requests * @@ -87,114 +81,89 @@ class OC_OCS { // overwrite the 404 error page returncode header("HTTP/1.0 200 OK"); - - if($_SERVER['REQUEST_METHOD'] == 'GET') { - $method='get'; - }elseif($_SERVER['REQUEST_METHOD'] == 'PUT') { - $method='put'; - }elseif($_SERVER['REQUEST_METHOD'] == 'POST') { - $method='post'; - }else{ - echo('internal server error: method not supported'); - exit(); - } - - $routes = new RouteCollection(); - // CONFIG - $routes->add('config', - new Route('/config.{format}', - array('format'=>'', - 'action' => function ($parameters) { - OC_OCS::apiconfig($parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text')); - }), - array('format'=>'xml|json'))); - - // PERSON - $routes->add('person_check', - new Route('/person/check.{format}', - array('format'=>'', - 'action' => function ($parameters) { - $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); - $login=OC_OCS::readdata('login','text'); - $passwd=OC_OCS::readdata('password','text'); - OC_OCS::personcheck($format,$login,$passwd); - }), - array('_method'=>'post', - 'format'=>'xml|json'))); - - // ACTIVITY - // activityget - GET ACTIVITY page,pagesize als urlparameter - $routes->add('activity_get', - new Route('/activity.{format}', - array('format'=>'', - 'action' => function ($parameters) { - $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); - $page=OC_OCS::readdata('page','int'); - $pagesize=OC_OCS::readdata('pagesize','int'); - if($pagesize<1 or $pagesize>100) $pagesize=10; - OC_OCS::activityget($format,$page,$pagesize); - }), - array('format'=>'xml|json'))); - // activityput - POST ACTIVITY - $routes->add('activity_put', - new Route('/activity.{format}', - array('format'=>'', - 'action' => function ($parameters) { - $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $router = new OC_Router(); + $router->useCollection('ocs'); + // CONFIG + $router->create('config', '/config.{format}') + ->defaults(array('format'=>'')) + ->action('OC_OCS', 'apiConfig') + ->requirements(array('format'=>'xml|json')); + + // PERSON + $router->create('person_check', '/person/check.{format}') + ->post() + ->defaults(array('format'=>'')) + ->action(function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $login=OC_OCS::readdata('login','text'); + $passwd=OC_OCS::readdata('password','text'); + OC_OCS::personcheck($format,$login,$passwd); + }) + ->requirements(array('format'=>'xml|json')); + + // ACTIVITY + // activityget - GET ACTIVITY page,pagesize als urlparameter + $router->create('activity_get', '/activity.{format}') + ->defaults(array('format'=>'')) + ->action(function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $page=OC_OCS::readdata('page','int'); + $pagesize=OC_OCS::readdata('pagesize','int'); + if($pagesize<1 or $pagesize>100) $pagesize=10; + OC_OCS::activityget($format,$page,$pagesize); + }) + ->requirements(array('format'=>'xml|json')); + // activityput - POST ACTIVITY + $router->create('activity_put', '/activity.{format}') + ->post() + ->defaults(array('format'=>'')) + ->action(function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); $message=OC_OCS::readdata('message','text'); OC_OCS::activityput($format,$message); - }), - array('_method'=>'post', - 'format'=>'xml|json'))); - // PRIVATEDATA - // get - GET DATA - $routes->add('privatedata_get', - new Route('/privatedata/getattribute/{app}/{key}.{format}', - array('app' => '', - 'key' => '', - 'format' => '', - 'action' => function ($parameters) { - $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); - $app = addslashes(strip_tags($parameters['app'])); - $key = addslashes(strip_tags($parameters['key'])); - OC_OCS::privateDataGet($format, $app, $key); - }), - array('format'=>'xml|json'))); - // set - POST DATA - $routes->add('privatedata_set', - new Route('/privatedata/setattribute/{app}/{key}.{format}', - array('format'=>'', - 'action' => function ($parameters) { - $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); - $app = addslashes(strip_tags($parameters['app'])); - $key = addslashes(strip_tags($parameters['key'])); - $value=OC_OCS::readdata('value','text'); - OC_OCS::privateDataSet($format, $app, $key, $value); - }), - array('_method'=>'post', - 'format'=>'xml|json'))); - // delete - POST DATA - $routes->add('privatedata_delete', - new Route('/privatedata/deleteattribute/{app}/{key}.{format}', - array('format'=>'', - 'action' => function ($parameters) { - $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); - $app = addslashes(strip_tags($parameters['app'])); - $key = addslashes(strip_tags($parameters['key'])); - OC_OCS::privateDataDelete($format, $app, $key); - }), - array('_method'=>'post', - 'format'=>'xml|json'))); - - $context = new RequestContext($_SERVER['REQUEST_URI'], $method); - - $matcher = new UrlMatcher($routes, $context); + }) + ->requirements(array('format'=>'xml|json')); + + // PRIVATEDATA + // get - GET DATA + $router->create('privatedata_get', + '/privatedata/getattribute/{app}/{key}.{format}') + ->defaults(array('app' => '', 'key' => '', 'format' => '')) + ->action(function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $app = addslashes(strip_tags($parameters['app'])); + $key = addslashes(strip_tags($parameters['key'])); + OC_OCS::privateDataGet($format, $app, $key); + }) + ->requirements(array('format'=>'xml|json')); + // set - POST DATA + $router->create('privatedata_set', + '/privatedata/setattribute/{app}/{key}.{format}') + ->post() + ->defaults(array('format'=>'')) + ->action(function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $app = addslashes(strip_tags($parameters['app'])); + $key = addslashes(strip_tags($parameters['key'])); + $value=OC_OCS::readdata('value','text'); + OC_OCS::privateDataSet($format, $app, $key, $value); + }) + ->requirements(array('format'=>'xml|json')); + // delete - POST DATA + $router->create('privatedata_delete', + '/privatedata/deleteattribute/{app}/{key}.{format}') + ->post() + ->defaults(array('format'=>'')) + ->action(function ($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); + $app = addslashes(strip_tags($parameters['app'])); + $key = addslashes(strip_tags($parameters['key'])); + OC_OCS::privateDataDelete($format, $app, $key); + }) + ->requirements(array('format'=>'xml|json')); try { - $parameters = $matcher->match($_SERVER['PATH_INFO']); - $action = $parameters['action']; - unset($parameters['action']); - call_user_func($action, $parameters); + $router->match($_SERVER['PATH_INFO']); } catch (ResourceNotFoundException $e) { $format=OC_OCS::readdata('format','text'); $txt='Invalid query, please check the syntax. API specifications are here: http://www.freedesktop.org/wiki/Specifications/open-collaboration-services. DEBUG OUTPUT:'."\n"; @@ -388,7 +357,8 @@ class OC_OCS { * @param string $format * @return string xml/json */ - private static function apiConfig($format) { + public static function apiConfig($parameters) { + $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'); $xml['version']='1.5'; $xml['website']='ownCloud'; $xml['host']=OCP\Util::getServerHost(); diff --git a/lib/route.php b/lib/route.php new file mode 100644 index 00000000000..4344c977113 --- /dev/null +++ b/lib/route.php @@ -0,0 +1,50 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +use Symfony\Component\Routing\Route; + +class OC_Route extends Route { + public function method($method) { + $this->setRequirement('_method', $method); + return $this; + } + + public function post() { + $this->method('post'); + return $this; + } + + public function defaults($defaults) { + $action = $this->getDefault('action'); + $this->setDefaults($defaults); + if (isset($defaults['action'])) { + $action = $defaults['action']; + } + $this->action($action); + return $this; + } + + public function requirements($requirements) { + $method = $this->getRequirement('_method'); + $this->setRequirements($requirements); + if (isset($requirements['_method'])) { + $method = $requirements['_method']; + } + $this->method($method); + return $this; + } + + public function action($class, $function = null) { + $action = array($class, $function); + if (is_null($function)) { + $action = $class; + } + $this->setDefault('action', $action); + return $this; + } +} diff --git a/lib/router.php b/lib/router.php new file mode 100644 index 00000000000..f037ecdfef4 --- /dev/null +++ b/lib/router.php @@ -0,0 +1,50 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +use Symfony\Component\Routing\Matcher\UrlMatcher; +use Symfony\Component\Routing\RequestContext; +use Symfony\Component\Routing\RouteCollection; +//use Symfony\Component\Routing\Route; +use Symfony\Component\Routing\Exception\ResourceNotFoundException; + +class OC_Router { + protected $collections = array(); + protected $collection = null; + + public function useCollection($name) { + if (!isset($this->collections[$name])) { + $this->collections[$name] = new RouteCollection(); + } + $this->collection = $this->collections[$name]; + } + + public function create($name, $pattern, array $defaults = array(), array $requirements = array()) { + $route = new OC_Route($pattern, $defaults, $requirements); + $this->collection->add($name, $route); + return $route; + } + + public function match($url) { + $context = new RequestContext($_SERVER['REQUEST_URI'], $_SERVER['REQUEST_METHOD']); + $matcher = new UrlMatcher($this->collection, $context); + $parameters = $matcher->match($url); + if (isset($parameters['action'])) { + $action = $parameters['action']; + if (!is_callable($action)) { + var_dump($action); + throw new Exception('not a callable action'); + } + unset($parameters['action']); + call_user_func($action, $parameters); + } elseif (isset($parameters['file'])) { + include ($parameters['file']); + } else { + throw new Exception('no action available'); + } + } +} -- GitLab From ac9dbd4b83852d137d35cb87911ebd6b21c494db Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 25 Jul 2012 17:45:29 +0200 Subject: [PATCH 003/576] Add functions for the common HTTP methods --- lib/route.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/route.php b/lib/route.php index 4344c977113..0d3339add6c 100644 --- a/lib/route.php +++ b/lib/route.php @@ -19,6 +19,21 @@ class OC_Route extends Route { return $this; } + public function get() { + $this->method('get'); + return $this; + } + + public function put() { + $this->method('put'); + return $this; + } + + public function delete() { + $this->method('delete'); + return $this; + } + public function defaults($defaults) { $action = $this->getDefault('action'); $this->setDefaults($defaults); -- GitLab From 5a0d476ab15f4b6a42c713aa503c18a6148bb24b Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 25 Jul 2012 17:59:50 +0200 Subject: [PATCH 004/576] Convert new actions --- lib/ocs.php | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/lib/ocs.php b/lib/ocs.php index 570f5ac3e59..61df38d2dbb 100644 --- a/lib/ocs.php +++ b/lib/ocs.php @@ -177,8 +177,14 @@ class OC_OCS { // CLOUD // systemWebApps - }elseif(($method=='get') and ($ex[$paracount-5] == 'v1.php') and ($ex[$paracount-4]=='cloud') and ($ex[$paracount-3] == 'system') and ($ex[$paracount-2] == 'webapps')){ - OC_OCS::systemwebapps($format); + $router->create('system_webapps', + '/cloud/system/webapps.{format}') + ->defaults(array('format' => $format)) + ->action(function ($parameters) { + $format = $parameters['format']; + OC_OCS::systemwebapps($format); + }) + ->requirements(array('format'=>'xml|json')); // quotaget $router->create('quota_get', @@ -204,14 +210,26 @@ class OC_OCS { ->requirements(array('format'=>'xml|json')); // keygetpublic - }elseif(($method=='get') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-5]=='cloud') and ($ex[$paracount-4] == 'user') and ($ex[$paracount-2] == 'publickey')){ - $user=$ex[$paracount-3]; - OC_OCS::publicKeyGet($format,$user); + $router->create('keygetpublic', + '/cloud/user/{user}/publickey.{format}') + ->defaults(array('format' => $format)) + ->action(function ($parameters) { + $format = $parameters['format']; + $user = $parameters['user']; + OC_OCS::publicKeyGet($format,$user); + }) + ->requirements(array('format'=>'xml|json')); // keygetprivate - }elseif(($method=='get') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-5]=='cloud') and ($ex[$paracount-4] == 'user') and ($ex[$paracount-2] == 'privatekey')){ - $user=$ex[$paracount-3]; - OC_OCS::privateKeyGet($format,$user); + $router->create('keygetpublic', + '/cloud/user/{user}/privatekey.{format}') + ->defaults(array('format' => $format)) + ->action(function ($parameters) { + $format = $parameters['format']; + $user = $parameters['user']; + OC_OCS::privateKeyGet($format,$user); + }) + ->requirements(array('format'=>'xml|json')); // add more calls here -- GitLab From b3848581bf5f77008a71cf79ba6e3d61b33baed6 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 25 Jul 2012 18:00:03 +0200 Subject: [PATCH 005/576] Small cleanup --- lib/ocs.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/ocs.php b/lib/ocs.php index 61df38d2dbb..d7a7951fab5 100644 --- a/lib/ocs.php +++ b/lib/ocs.php @@ -90,8 +90,6 @@ class OC_OCS { exit(); } - // preprocess url - $url = strtolower($_SERVER['REQUEST_URI']); $format = self::readData($method, 'format', 'text', ''); $router = new OC_Router(); -- GitLab From 9e80f0954d45465dfba261c5b5a501e77eb595c9 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Mon, 30 Jul 2012 20:48:03 +0200 Subject: [PATCH 006/576] Add loading of routes in OC_Router --- lib/router.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/router.php b/lib/router.php index f037ecdfef4..4b6b076e21b 100644 --- a/lib/router.php +++ b/lib/router.php @@ -16,6 +16,19 @@ class OC_Router { protected $collections = array(); protected $collection = null; + /** + * loads the api routes + */ + public function loadRoutes(){ + // TODO cache + foreach(OC_APP::getEnabledApps() as $app){ + $file = OC_App::getAppPath($app).'/appinfo/routes.php'; + if(file_exists($file)){ + require_once($file); + } + } + } + public function useCollection($name) { if (!isset($this->collections[$name])) { $this->collections[$name] = new RouteCollection(); -- GitLab From 3e8b6e816a3f89ac20f22fdde630946058e5d184 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Mon, 30 Jul 2012 20:50:32 +0200 Subject: [PATCH 007/576] Create OC_Router in OC::init --- lib/base.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/base.php b/lib/base.php index 5041f43648e..29a3502e352 100644 --- a/lib/base.php +++ b/lib/base.php @@ -62,6 +62,10 @@ class OC{ * requested file of app */ public static $REQUESTEDFILE = ''; + /* + * OC router + */ + public static $router = null; /** * check if owncloud runs in cli mode */ @@ -354,6 +358,8 @@ class OC{ OC_User::useBackend(new OC_User_Database()); OC_Group::useBackend(new OC_Group_Database()); + OC::$router = new OC_Router(); + // Load Apps // This includes plugins for users and filesystems as well global $RUNTIME_NOAPPS; -- GitLab From ca1454ab1a9a20f51544d8822b4c16ef00c35264 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Tue, 31 Jul 2012 22:33:11 +0200 Subject: [PATCH 008/576] Routing: Method needs to be uppercase --- lib/route.php | 10 +++++----- lib/router.php | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/route.php b/lib/route.php index 0d3339add6c..df3a18e844f 100644 --- a/lib/route.php +++ b/lib/route.php @@ -10,27 +10,27 @@ use Symfony\Component\Routing\Route; class OC_Route extends Route { public function method($method) { - $this->setRequirement('_method', $method); + $this->setRequirement('_method', strtoupper($method)); return $this; } public function post() { - $this->method('post'); + $this->method('POST'); return $this; } public function get() { - $this->method('get'); + $this->method('GET'); return $this; } public function put() { - $this->method('put'); + $this->method('PUT'); return $this; } public function delete() { - $this->method('delete'); + $this->method('DELETE'); return $this; } diff --git a/lib/router.php b/lib/router.php index 4b6b076e21b..5dd51e79156 100644 --- a/lib/router.php +++ b/lib/router.php @@ -49,7 +49,7 @@ class OC_Router { if (isset($parameters['action'])) { $action = $parameters['action']; if (!is_callable($action)) { - var_dump($action); + var_dump($action); throw new Exception('not a callable action'); } unset($parameters['action']); -- GitLab From 3722928c46d0e4ec1935e4da4087b76aee24dd5d Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Thu, 2 Aug 2012 17:47:38 +0200 Subject: [PATCH 009/576] Change access to router object to getter function --- lib/base.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/base.php b/lib/base.php index 29a3502e352..43588944d04 100644 --- a/lib/base.php +++ b/lib/base.php @@ -62,14 +62,14 @@ class OC{ * requested file of app */ public static $REQUESTEDFILE = ''; - /* - * OC router - */ - public static $router = null; /** * check if owncloud runs in cli mode */ public static $CLI = false; + /* + * OC router + */ + protected static $router = null; /** * SPL autoload */ @@ -275,6 +275,14 @@ class OC{ } } + public static function getRouter() { + if (!isset(OC::$router)) { + OC::$router = new OC_Router(); + } + + return OC::$router; + } + public static function init(){ // register autoloader spl_autoload_register(array('OC','autoload')); @@ -358,8 +366,6 @@ class OC{ OC_User::useBackend(new OC_User_Database()); OC_Group::useBackend(new OC_Group_Database()); - OC::$router = new OC_Router(); - // Load Apps // This includes plugins for users and filesystems as well global $RUNTIME_NOAPPS; -- GitLab From 72b2324b68c51baf140c6fab7957b59c31de4832 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Thu, 2 Aug 2012 17:59:18 +0200 Subject: [PATCH 010/576] Move loading of routes to OC::getRouter function --- lib/base.php | 1 + lib/router.php | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/base.php b/lib/base.php index 43588944d04..0d9ececc0c9 100644 --- a/lib/base.php +++ b/lib/base.php @@ -278,6 +278,7 @@ class OC{ public static function getRouter() { if (!isset(OC::$router)) { OC::$router = new OC_Router(); + OC::$router->loadRoutes(); } return OC::$router; diff --git a/lib/router.php b/lib/router.php index 5dd51e79156..a721255f297 100644 --- a/lib/router.php +++ b/lib/router.php @@ -16,10 +16,15 @@ class OC_Router { protected $collections = array(); protected $collection = null; + public function __construct() { + // TODO cache + $this->loadRoutes(); + } + /** * loads the api routes */ - public function loadRoutes(){ + public function loadRoutes() { // TODO cache foreach(OC_APP::getEnabledApps() as $app){ $file = OC_App::getAppPath($app).'/appinfo/routes.php'; -- GitLab From f63b9b44d8ac62a136d4cd6844e72af7a8044703 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Thu, 2 Aug 2012 21:51:31 +0200 Subject: [PATCH 011/576] Routing: combine all routes into one set --- lib/router.php | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/router.php b/lib/router.php index a721255f297..3ba2125465a 100644 --- a/lib/router.php +++ b/lib/router.php @@ -15,30 +15,34 @@ use Symfony\Component\Routing\Exception\ResourceNotFoundException; class OC_Router { protected $collections = array(); protected $collection = null; - - public function __construct() { - // TODO cache - $this->loadRoutes(); - } + protected $root = null; /** * loads the api routes */ public function loadRoutes() { // TODO cache + $this->root = $this->getCollection('root'); foreach(OC_APP::getEnabledApps() as $app){ $file = OC_App::getAppPath($app).'/appinfo/routes.php'; if(file_exists($file)){ + $this->useCollection($app); require_once($file); + $collection = $this->getCollection($app); + $this->root->addCollection($collection, '/apps/'.$app); } } } - public function useCollection($name) { + protected function getCollection($name) { if (!isset($this->collections[$name])) { $this->collections[$name] = new RouteCollection(); } - $this->collection = $this->collections[$name]; + return $this->collections[$name]; + } + + public function useCollection($name) { + $this->collection = $this->getCollection($name); } public function create($name, $pattern, array $defaults = array(), array $requirements = array()) { @@ -49,7 +53,7 @@ class OC_Router { public function match($url) { $context = new RequestContext($_SERVER['REQUEST_URI'], $_SERVER['REQUEST_METHOD']); - $matcher = new UrlMatcher($this->collection, $context); + $matcher = new UrlMatcher($this->root, $context); $parameters = $matcher->match($url); if (isset($parameters['action'])) { $action = $parameters['action']; -- GitLab From 87d1cdb94567d5514e0a2988f69935d932b58ff6 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sat, 11 Aug 2012 00:04:43 +0200 Subject: [PATCH 012/576] Fix for running doing routing in lib/ocs.php --- lib/ocs.php | 7 ++++++- lib/route.php | 4 +++- lib/router.php | 8 +++++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/ocs.php b/lib/ocs.php index d7a7951fab5..1df08df9fa1 100644 --- a/lib/ocs.php +++ b/lib/ocs.php @@ -23,6 +23,9 @@ * */ +use Symfony\Component\Routing\Exception\ResourceNotFoundException; +use Symfony\Component\Routing\Exception\MethodNotAllowedException; + /** * Class to handle open collaboration services API requests * @@ -93,7 +96,7 @@ class OC_OCS { $format = self::readData($method, 'format', 'text', ''); $router = new OC_Router(); - $router->useCollection('ocs'); + $router->useCollection('root'); // CONFIG $router->create('config', '/config.{format}') ->defaults(array('format' => $format)) @@ -247,6 +250,8 @@ class OC_OCS { $txt='Invalid query, please check the syntax. API specifications are here: http://www.freedesktop.org/wiki/Specifications/open-collaboration-services. DEBUG OUTPUT:'."\n"; $txt.=OC_OCS::getdebugoutput(); echo(OC_OCS::generatexml($format,'failed',999,$txt)); + } catch (MethodNotAllowedException $e) { + OC_Response::setStatus(405); } exit(); } diff --git a/lib/route.php b/lib/route.php index df3a18e844f..772446e5615 100644 --- a/lib/route.php +++ b/lib/route.php @@ -50,7 +50,9 @@ class OC_Route extends Route { if (isset($requirements['_method'])) { $method = $requirements['_method']; } - $this->method($method); + if ($method) { + $this->method($method); + } return $this; } diff --git a/lib/router.php b/lib/router.php index 3ba2125465a..dbcaff4026e 100644 --- a/lib/router.php +++ b/lib/router.php @@ -10,19 +10,21 @@ use Symfony\Component\Routing\Matcher\UrlMatcher; use Symfony\Component\Routing\RequestContext; use Symfony\Component\Routing\RouteCollection; //use Symfony\Component\Routing\Route; -use Symfony\Component\Routing\Exception\ResourceNotFoundException; class OC_Router { protected $collections = array(); protected $collection = null; protected $root = null; + public function __construct() { + // TODO cache + $this->root = $this->getCollection('root'); + } + /** * loads the api routes */ public function loadRoutes() { - // TODO cache - $this->root = $this->getCollection('root'); foreach(OC_APP::getEnabledApps() as $app){ $file = OC_App::getAppPath($app).'/appinfo/routes.php'; if(file_exists($file)){ -- GitLab From 1763de08d0a4e8374cd21bf71d825b92426509f1 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sat, 11 Aug 2012 00:57:46 +0200 Subject: [PATCH 013/576] Routing: Fix construction of RequestContext --- lib/router.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/router.php b/lib/router.php index dbcaff4026e..eca59d6dc3b 100644 --- a/lib/router.php +++ b/lib/router.php @@ -54,7 +54,11 @@ class OC_Router { } public function match($url) { - $context = new RequestContext($_SERVER['REQUEST_URI'], $_SERVER['REQUEST_METHOD']); + $baseUrl = OC_Helper::linkTo('', 'index.php'); + $method = $_SERVER['REQUEST_METHOD']; + $host = OC_Request::serverHost(); + $schema = OC_Request::serverProtocol(); + $context = new RequestContext($baseUrl, $method, $host, $schema); $matcher = new UrlMatcher($this->root, $context); $parameters = $matcher->match($url); if (isset($parameters['action'])) { -- GitLab From 1025e451a7610a9e5b50e7e99e808cb2d1915236 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sat, 11 Aug 2012 01:00:26 +0200 Subject: [PATCH 014/576] Add router match to OC::handleRequest --- lib/base.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/base.php b/lib/base.php index b276cf5924d..a05d84fbae4 100644 --- a/lib/base.php +++ b/lib/base.php @@ -421,6 +421,15 @@ class OC{ header('location: '.OC_Helper::linkToRemote('webdav')); return; } + try { + OC::getRouter()->match(OC_Request::getPathInfo()); + return; + } catch (Symfony\Component\Routing\Exception\ResourceNotFoundException $e) { + //header('HTTP/1.0 404 Not Found'); + } catch (Symfony\Component\Routing\Exception\MethodNotAllowedException $e) { + OC_Response::setStatus(405); + return; + } // Handle app css files if(substr(OC::$REQUESTEDFILE,-3) == 'css') { self::loadCSSFile(); -- GitLab From 8c024947440e2f15a9effe5fe6d91e60e8571a07 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sun, 12 Aug 2012 16:16:22 +0200 Subject: [PATCH 015/576] Routing: Prepare load funtions to be called from OC_Router --- lib/base.php | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/lib/base.php b/lib/base.php index a05d84fbae4..0d7e224d354 100644 --- a/lib/base.php +++ b/lib/base.php @@ -430,9 +430,12 @@ class OC{ OC_Response::setStatus(405); return; } + $app = OC::$REQUESTEDAPP; + $file = OC::$REQUESTEDFILE; + $param = array('app' => $app, 'file' => $file); // Handle app css files - if(substr(OC::$REQUESTEDFILE,-3) == 'css') { - self::loadCSSFile(); + if(substr($file,-3) == 'css') { + self::loadCSSFile($param); return; } // Someone is logged in : @@ -442,14 +445,12 @@ class OC{ OC_User::logout(); header("Location: ".OC::$WEBROOT.'/'); }else{ - $app = OC::$REQUESTEDAPP; - $file = OC::$REQUESTEDFILE; if(is_null($file)) { - $file = 'index.php'; + $param['file'] = 'index.php'; } - $file_ext = substr($file, -3); + $file_ext = substr($param['file'], -3); if ($file_ext != 'php' - || !self::loadAppScriptFile($app, $file)) { + || !self::loadAppScriptFile($param)) { header('HTTP/1.0 404 Not Found'); } } @@ -459,7 +460,9 @@ class OC{ self::handleLogin(); } - protected static function loadAppScriptFile($app, $file) { + public static function loadAppScriptFile($param) { + $app = $param['app']; + $file = $param['file']; $app_path = OC_App::getAppPath($app); $file = $app_path . '/' . $file; unset($app, $app_path); @@ -470,9 +473,9 @@ class OC{ return false; } - protected static function loadCSSFile() { - $app = OC::$REQUESTEDAPP; - $file = OC::$REQUESTEDFILE; + public static function loadCSSFile($param) { + $app = $param['app']; + $file = $param['file']; $app_path = OC_App::getAppPath($app); if (file_exists($app_path . '/' . $file)) { $app_web_path = OC_App::getAppWebPath($app); -- GitLab From db4111f6d50d5bf2195d4a082ffc9dcea1d911ce Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sun, 12 Aug 2012 16:52:36 +0200 Subject: [PATCH 016/576] Routing: Add some core routes --- core/routes.php | 19 +++++++++++++++++++ lib/base.php | 3 ++- lib/router.php | 2 ++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 core/routes.php diff --git a/core/routes.php b/core/routes.php new file mode 100644 index 00000000000..04b42d20598 --- /dev/null +++ b/core/routes.php @@ -0,0 +1,19 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +$this->create('app_css', '/apps/{app}/{file}') + ->requirements(array('file' => '.*.css')) + ->action('OC', 'loadCSSFile'); +$this->create('app_index_script', '/apps/{app}/') + ->defaults(array('file' => 'index.php')) + //->requirements(array('file' => '.*.php')) + ->action('OC', 'loadAppScriptFile'); +$this->create('app_script', '/apps/{app}/{file}') + ->defaults(array('file' => 'index.php')) + ->requirements(array('file' => '.*.php')) + ->action('OC', 'loadAppScriptFile'); diff --git a/lib/base.php b/lib/base.php index 0d7e224d354..3abfdb35668 100644 --- a/lib/base.php +++ b/lib/base.php @@ -440,8 +440,8 @@ class OC{ } // Someone is logged in : if(OC_User::isLoggedIn()) { - OC_App::loadApps(); if(isset($_GET["logout"]) and ($_GET["logout"])) { + OC_App::loadApps(); OC_User::logout(); header("Location: ".OC::$WEBROOT.'/'); }else{ @@ -461,6 +461,7 @@ class OC{ } public static function loadAppScriptFile($param) { + OC_App::loadApps(); $app = $param['app']; $file = $param['file']; $app_path = OC_App::getAppPath($app); diff --git a/lib/router.php b/lib/router.php index eca59d6dc3b..65fc51aff2c 100644 --- a/lib/router.php +++ b/lib/router.php @@ -34,6 +34,8 @@ class OC_Router { $this->root->addCollection($collection, '/apps/'.$app); } } + $this->useCollection('root'); + require_once('core/routes.php'); } protected function getCollection($name) { -- GitLab From 16dacba4900ce2bbb4f26040f6f5c2b698eae5da Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sun, 12 Aug 2012 16:53:00 +0200 Subject: [PATCH 017/576] Routing: And start using them from php --- lib/helper.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/helper.php b/lib/helper.php index 8c362747a27..3cdb3e53c22 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -42,8 +42,8 @@ class OC_Helper { // 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 . '/?app=' . $app; - $urlLinkTo .= ($file!='index.php')?'&getfile=' . urlencode($file):''; + $urlLinkTo = OC::$WEBROOT . '/index.php/apps/' . $app; + $urlLinkTo .= ($file!='index.php') ? '/' . $file : ''; }else{ $urlLinkTo = OC_App::getAppWebPath($app) . '/' . $file; } -- GitLab From 4954e46bb2ba36c749b638111dc90500e12cedf7 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 15 Aug 2012 17:38:55 +0200 Subject: [PATCH 018/576] Use core routes in js too --- core/js/js.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/js/js.js b/core/js/js.js index 7bded8e1414..6881090f62e 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -54,9 +54,9 @@ OC={ var isCore=OC.coreApps.indexOf(app)!=-1; var link=OC.webroot; if((file.substring(file.length-3) == 'php' || file.substring(file.length-3) == 'css') && !isCore){ - link+='/?app=' + app; + link+='/index.php/apps/' + app; if (file != 'index.php') { - link+='&getfile='; + link+='/'; if(type){ link+=encodeURI(type + '/'); } -- GitLab From ddfb9de14747b363bfcb70df00cea34b47abc0a3 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 15 Aug 2012 18:13:08 +0200 Subject: [PATCH 019/576] Fix linkTo calls for new routing --- apps/contacts/js/contacts.js | 2 +- apps/contacts/lib/search.php | 2 +- apps/files/index.php | 4 ++-- apps/files/js/fileactions.js | 2 +- apps/files/js/filelist.js | 2 +- apps/files_archive/js/archive.js | 4 ++-- apps/gallery/lib/tiles.php | 4 ++-- apps/gallery/templates/index.php | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/contacts/js/contacts.js b/apps/contacts/js/contacts.js index 35637de050d..2e62b5cf135 100644 --- a/apps/contacts/js/contacts.js +++ b/apps/contacts/js/contacts.js @@ -1477,7 +1477,7 @@ OC.Contacts={ } var contact = params.data ? $('
  • ' + params.data.displayname+'
  • ') diff --git a/apps/contacts/lib/search.php b/apps/contacts/lib/search.php index 53aa2b48496..c86bc12c5b6 100644 --- a/apps/contacts/lib/search.php +++ b/apps/contacts/lib/search.php @@ -11,7 +11,7 @@ class OC_Search_Provider_Contacts extends OC_Search_Provider{ $vcards = OC_Contacts_VCard::all($addressbook['id']); foreach($vcards as $vcard){ if(substr_count(strtolower($vcard['fullname']), strtolower($query)) > 0) { - $link = OCP\Util::linkTo('contacts', 'index.php').'&id='.urlencode($vcard['id']); + $link = OCP\Util::linkTo('contacts', 'index.php').'?id='.urlencode($vcard['id']); $results[]=new OC_Search_Result($vcard['fullname'], '', $link, (string)$l->t('Contact'));//$name,$text,$link,$type } } diff --git a/apps/files/index.php b/apps/files/index.php index 79bed8e357e..ffe9493272b 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -75,11 +75,11 @@ foreach( explode( '/', $dir ) as $i ){ // make breadcrumb und filelist markup $list = new OCP\Template( 'files', 'part.list', '' ); $list->assign( 'files', $files, false ); -$list->assign( 'baseURL', OCP\Util::linkTo('files', 'index.php').'&dir=', false); +$list->assign( 'baseURL', OCP\Util::linkTo('files', 'index.php').'?dir=', false); $list->assign( 'downloadURL', OCP\Util::linkTo('files', 'download.php').'?file=', false); $breadcrumbNav = new OCP\Template( 'files', 'part.breadcrumb', '' ); $breadcrumbNav->assign( 'breadcrumb', $breadcrumb, false ); -$breadcrumbNav->assign( 'baseURL', OCP\Util::linkTo('files', 'index.php').'&dir=', false); +$breadcrumbNav->assign( 'baseURL', OCP\Util::linkTo('files', 'index.php').'?dir=', false); $upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize')); $post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size')); diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index b6f4d0b0896..cecfddbf1cf 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -168,7 +168,7 @@ FileActions.register('all','Rename',function(){return OC.imagePath('core','actio }); FileActions.register('dir','Open','',function(filename){ - window.location=OC.linkTo('files', 'index.php') + '&dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename); + window.location=OC.linkTo('files', 'index.php') + '?dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename); }); FileActions.setDefault('dir','Open'); diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index a414c5f8303..0bfc810baf2 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -41,7 +41,7 @@ FileList={ html = $('').attr({ "data-type": "dir", "data-size": size, "data-file": name}); td = $('').attr({"class": "filename", "style": 'background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')' }); td.append(''); - var link_elem = $('').attr({ "class": "name", "href": OC.linkTo('files', 'index.php')+"&dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/') }); + var link_elem = $('').attr({ "class": "name", "href": OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/') }); link_elem.append($('').addClass('nametext').text(name)); link_elem.append($('').attr({'class': 'uploadtext', 'currentUploads': 0})); td.append(link_elem); diff --git a/apps/files_archive/js/archive.js b/apps/files_archive/js/archive.js index 9fb9853e299..48ec031be62 100644 --- a/apps/files_archive/js/archive.js +++ b/apps/files_archive/js/archive.js @@ -8,11 +8,11 @@ $(document).ready(function() { if(typeof FileActions!=='undefined'){ FileActions.register('application/zip','Open','',function(filename){ - window.location=OC.linkTo('files', 'index.php')+'&dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename); + window.location=OC.linkTo('files', 'index.php')+'?dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename); }); FileActions.setDefault('application/zip','Open'); FileActions.register('application/x-gzip','Open','',function(filename){ - window.location=OC.linkTo('files', 'index.php')+'&dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename); + window.location=OC.linkTo('files', 'index.php')+'?dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename); }); FileActions.setDefault('application/x-gzip','Open'); } diff --git a/apps/gallery/lib/tiles.php b/apps/gallery/lib/tiles.php index e36d26d3191..3903d2dde73 100644 --- a/apps/gallery/lib/tiles.php +++ b/apps/gallery/lib/tiles.php @@ -95,11 +95,11 @@ class TileSingle extends TileBase { public function get($extra = '') { // !HACK! file path needs to be encoded twice because files app decode twice url, so any special chars like + or & in filename // !HACK! will result in failing of opening them - return ''; + return ''; } public function getMiniatureSrc() { - return \OCP\Util::linkTo('gallery', 'ajax/thumbnail.php').'&filepath='.urlencode($this->getPath()); + return \OCP\Util::linkTo('gallery', 'ajax/thumbnail.php').'?filepath='.urlencode($this->getPath()); } public function getPath() { diff --git a/apps/gallery/templates/index.php b/apps/gallery/templates/index.php index b2efd5342ff..b0f22036032 100644 --- a/apps/gallery/templates/index.php +++ b/apps/gallery/templates/index.php @@ -18,7 +18,7 @@ $(document).ready(function() { for ($i = 0; $i < count($paths); $i++) { $path .= urlencode($paths[$i]).'/'; $classess = 'crumb'.($i == count($paths)-1?' last':''); - echo ''; + echo ''; } } -- GitLab From 3b9fac8f81b76af988ea620a207e6c65fa665589 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 15 Aug 2012 19:55:26 +0200 Subject: [PATCH 020/576] Fix gallery image view --- apps/gallery/lib/tiles.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/gallery/lib/tiles.php b/apps/gallery/lib/tiles.php index 3903d2dde73..54fb613a8b4 100644 --- a/apps/gallery/lib/tiles.php +++ b/apps/gallery/lib/tiles.php @@ -93,9 +93,7 @@ class TileSingle extends TileBase { } public function get($extra = '') { - // !HACK! file path needs to be encoded twice because files app decode twice url, so any special chars like + or & in filename - // !HACK! will result in failing of opening them - return ''; + return ''; } public function getMiniatureSrc() { -- GitLab From ceec5e593c677ed9e9339739d0a66a28e4f25d12 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 7 Sep 2012 16:19:08 +0200 Subject: [PATCH 021/576] Remove redundant loadApps --- lib/base.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/base.php b/lib/base.php index fc682fecfca..6af558ae9da 100644 --- a/lib/base.php +++ b/lib/base.php @@ -465,7 +465,6 @@ class OC{ OC_App::loadApps(); OC_User::setupBackends(); if(isset($_GET["logout"]) and ($_GET["logout"])) { - OC_App::loadApps(); OC_User::logout(); header("Location: ".OC::$WEBROOT.'/'); }else{ -- GitLab From 3efe1d3b24e65ed76d521c24b0cfe4e0ff2e7af5 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 12 Sep 2012 18:00:33 +0200 Subject: [PATCH 022/576] Add linkToRoute functionality --- lib/helper.php | 14 ++++++++++++++ lib/router.php | 29 +++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/lib/helper.php b/lib/helper.php index ed4bf53250a..269327b531d 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -28,6 +28,20 @@ class OC_Helper { private static $mimetypes=array(); private static $tmpFiles=array(); + /** + * @brief Creates an url using a defined route + * @param $route + * @param $parameters + * @param $args array with param=>value, will be appended to the returned url + * @returns the url + * + * Returns a url to the given app and file. + */ + public static function linkToRoute( $route, $parameters = array() ) { + $urlLinkTo = OC::getRouter()->generate($route, $parameters); + return $urlLinkTo; + } + /** * @brief Creates an url * @param $app app diff --git a/lib/router.php b/lib/router.php index 65fc51aff2c..da491e217fc 100644 --- a/lib/router.php +++ b/lib/router.php @@ -7,6 +7,7 @@ */ use Symfony\Component\Routing\Matcher\UrlMatcher; +use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Routing\RequestContext; use Symfony\Component\Routing\RouteCollection; //use Symfony\Component\Routing\Route; @@ -16,7 +17,14 @@ class OC_Router { protected $collection = null; protected $root = null; + protected $generator= null; + public function __construct() { + $baseUrl = OC_Helper::linkTo('', 'index.php'); + $method = $_SERVER['REQUEST_METHOD']; + $host = OC_Request::serverHost(); + $schema = OC_Request::serverProtocol(); + $this->context = new RequestContext($baseUrl, $method, $host, $schema); // TODO cache $this->root = $this->getCollection('root'); } @@ -56,12 +64,7 @@ class OC_Router { } public function match($url) { - $baseUrl = OC_Helper::linkTo('', 'index.php'); - $method = $_SERVER['REQUEST_METHOD']; - $host = OC_Request::serverHost(); - $schema = OC_Request::serverProtocol(); - $context = new RequestContext($baseUrl, $method, $host, $schema); - $matcher = new UrlMatcher($this->root, $context); + $matcher = new UrlMatcher($this->root, $this->context); $parameters = $matcher->match($url); if (isset($parameters['action'])) { $action = $parameters['action']; @@ -77,4 +80,18 @@ class OC_Router { throw new Exception('no action available'); } } + + public function getGenerator() + { + if (null !== $this->generator) { + return $this->generator; + } + + return $this->generator = new UrlGenerator($this->root, $this->context); + } + + public function generate($name, $parameters = array(), $absolute = false) + { + return $this->getGenerator()->generate($name, $parameters, $absolute); + } } -- GitLab From bbf8bb0bb3f33c92933dfd499b571f56edda4a59 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Wed, 12 Sep 2012 22:30:04 +0300 Subject: [PATCH 023/576] Log PHP errors to the OC log --- lib/base.php | 3 +++ lib/log.php | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/lib/base.php b/lib/base.php index 6b4dd789b2f..4ff5a43bd24 100644 --- a/lib/base.php +++ b/lib/base.php @@ -317,6 +317,9 @@ class OC{ self::initPaths(); + register_shutdown_function(array('OC_Log', 'onShutdown')); + set_error_handler(array('OC_Log', 'onError' )); + // set debug mode if an xdebug session is active if (!defined('DEBUG') || !DEBUG) { if(isset($_COOKIE['XDEBUG_SESSION'])) { diff --git a/lib/log.php b/lib/log.php index 8bb2839be66..9c754cf60ce 100644 --- a/lib/log.php +++ b/lib/log.php @@ -36,4 +36,21 @@ class OC_Log { $log_class=self::$class; $log_class::write($app, $message, $level); } + + //Fatal errors handler + public static function onShutdown(){ + $error = error_get_last(); + if($error) { + //ob_end_clean(); + self::write('PHP', $error['message'] . ' at ' . $error['file'] . '#' . $error['line'], self::FATAL); + } else { + return true; + } + } + + //Recoverable errors handler + public static function onError($number, $message, $file, $line){ + self::write('PHP', $message . ' at ' . $file . '#' . $line, self::WARN); + + } } -- GitLab From ffe04182a86a326861763a5e6afa3577c52e07a5 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Mon, 17 Sep 2012 16:01:25 +0200 Subject: [PATCH 024/576] Added methods OC_DB::insertIfNotExist() and OCP\DB::insertIfNotExist(). --- lib/db.php | 49 +++++++++++++++++++++++++++++++++++++++++++++++ lib/public/db.php | 21 ++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/lib/db.php b/lib/db.php index 4d8e5a1a868..8598f659cad 100644 --- a/lib/db.php +++ b/lib/db.php @@ -512,6 +512,55 @@ class OC_DB { return true; } + /** + * @brief Insert a row if a matching row doesn't exists. + * @returns true/false + * + */ + public static function insertIfNotExist($table, $input) { + self::connect(); + $prefix = OC_Config::getValue( "dbtableprefix", "oc_" ); + $table = str_replace( '*PREFIX*', $prefix, $table ); + + if(is_null(self::$type)) { + self::$type=OC_Config::getValue( "dbtype", "sqlite" ); + } + $type = self::$type; + + $query = ''; + // differences in escaping of table names ('`' for mysql) and getting the current timestamp + if( $type == 'sqlite' || $type == 'sqlite3' ) { + $query = 'REPLACE OR INSERT INTO "' . $table . '" ("' + . implode('","', array_keys($input)) . '") VALUES("' + . implode('","', array_values($input)) . '")'; + } elseif( $type == 'pgsql' || $type == 'oci' || $type == 'mysql') { + $query = 'INSERT INTO `' .$table . '` (' + . implode(',', array_keys($input)) . ') SELECT \'' + . implode('\',\'', array_values($input)) . '\' FROM ' . $table . ' WHERE '; + + foreach($input as $key => $value) { + $query .= $key . " = '" . $value . '\' AND '; + } + $query = substr($query, 0, strlen($query) - 5); + $query .= ' HAVING COUNT(*) = 0'; + } + // TODO: oci should be use " (quote) instead of ` (backtick). + //OC_Log::write('core', __METHOD__ . ', type: ' . $type . ', query: ' . $query, OC_Log::DEBUG); + + try { + $result=self::$connection->prepare($query); + } catch(PDOException $e) { + $entry = 'DB Error: "'.$e->getMessage().'"
    '; + $entry .= 'Offending command was: '.$query.'
    '; + OC_Log::write('core', $entry,OC_Log::FATAL); + error_log('DB error: '.$entry); + die( $entry ); + } + + $result = new PDOStatementWrapper($result); + $result->execute(); + } + /** * @brief does minor chages to query * @param $query Query string diff --git a/lib/public/db.php b/lib/public/db.php index 6ce62b27ca2..b9e56985e9d 100644 --- a/lib/public/db.php +++ b/lib/public/db.php @@ -45,6 +45,27 @@ class DB { return(\OC_DB::prepare($query,$limit,$offset)); } + /** + * @brief Insert a row if a matching row doesn't exists. + * @param $table string The table name (will replace *PREFIX*) to perform the replace on. + * @param $input array + * + * The input array if in the form: + * + * array ( 'id' => array ( 'value' => 6, + * 'key' => true + * ), + * 'name' => array ('value' => 'Stoyan'), + * 'family' => array ('value' => 'Stefanov'), + * 'birth_date' => array ('value' => '1975-06-20') + * ); + * @returns true/false + * + */ + public static function insertIfNotExist($table, $input) { + return(\OC_DB::insertIfNotExist($table, $input)); + } + /** * @brief gets last value of autoincrement * @param $table string The optional table name (will replace *PREFIX*) and add sequence suffix -- GitLab From b1a6acde30232367f4e8d66372fedfd1065c5d5a Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Mon, 17 Sep 2012 16:03:15 +0200 Subject: [PATCH 025/576] Added separate table for OC_VCategories and category/object (event/contact etc.) relations. --- db_structure.xml | 138 ++++++++++++++++++ lib/vcategories.php | 339 ++++++++++++++++++++++++++++++++++++++------ 2 files changed, 430 insertions(+), 47 deletions(-) diff --git a/db_structure.xml b/db_structure.xml index 2256dff943c..5576db1ab85 100644 --- a/db_structure.xml +++ b/db_structure.xml @@ -661,4 +661,142 @@ + + + *dbprefix*vcategory + + + + + id + integer + 0 + true + 1 + true + 4 + + + + uid + text + + true + 64 + + + + type + text + + true + 64 + + + + category + text + + true + 255 + + + + uid_index + + uid + ascending + + + + + type_index + + type + ascending + + + + + category_index + + category + ascending + + + + + uid_type_category_index + true + + uid + ascending + + + type + ascending + + + category + ascending + + + + +
    + + + + *dbprefix*vcategory_to_object + + + + + objid + integer + 0 + true + true + 4 + + + + categoryid + integer + 0 + true + true + 4 + + + + type + text + + true + 64 + + + + true + true + category_object_index + + categoryid + ascending + + + objid + ascending + + + type + ascending + + + + + +
    + diff --git a/lib/vcategories.php b/lib/vcategories.php index 6b1d6a316f1..08faa0d9035 100644 --- a/lib/vcategories.php +++ b/lib/vcategories.php @@ -28,52 +28,187 @@ * anything else that is either parsed from a vobject or that the user chooses * to add. * Category names are not case-sensitive, but will be saved with the case they - * are entered in. If a user already has a category 'family' for an app, and + * are entered in. If a user already has a category 'family' for a type, and * tries to add a category named 'Family' it will be silently ignored. - * NOTE: There is a limitation in that the the configvalue field in the - * preferences table is a varchar(255). */ class OC_VCategories { - const PREF_CATEGORIES_LABEL = 'extra_categories'; + /** * Categories */ private $categories = array(); + + /** + * Used for storing objectid/categoryname pairs while rescanning. + */ + private static $relations = array(); - private $app = null; + private $type = null; private $user = null; + private static $category_table = '*PREFIX*vcategory'; + private static $relation_table = '*PREFIX*vcategory_to_object'; + + const FORMAT_LIST = 0; + const FORMAT_MAP = 1; /** * @brief Constructor. - * @param $app The application identifier e.g. 'contacts' or 'calendar'. + * @param $type The type identifier e.g. 'contact' or 'event'. * @param $user The user whos data the object will operate on. This * parameter should normally be omitted but to make an app able to * update categories for all users it is made possible to provide it. * @param $defcategories An array of default categories to be used if none is stored. */ - public function __construct($app, $user=null, $defcategories=array()) { - $this->app = $app; + public function __construct($type, $user=null, $defcategories=array()) { + $this->type = $type; $this->user = is_null($user) ? OC_User::getUser() : $user; - $categories = trim(OC_Preferences::getValue($this->user, $app, self::PREF_CATEGORIES_LABEL, '')); - if ($categories) { - $categories = @unserialize($categories); + + $this->loadCategories(); + OCP\Util::writeLog('core', __METHOD__ . ', categories: ' + . print_r($this->categories, true), + OCP\Util::DEBUG + ); + + if($defcategories && count($this->categories) === 0) { + $this->add($defcategories, true); } - $this->categories = is_array($categories) ? $categories : $defcategories; } + /** + * @brief Load categories from db. + */ + private function loadCategories() { + $this->categories = array(); + $result = null; + $sql = 'SELECT `id`, `category` FROM `*PREFIX*vcategory` ' + . 'WHERE `uid` = ? AND `type` = ? ORDER BY `category`'; + try { + $stmt = OCP\DB::prepare($sql); + $result = $stmt->execute(array($this->user, $this->type)); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), + OCP\Util::ERROR); + } + + if(!is_null($result)) { + while( $row = $result->fetchRow()) { + // The keys are prefixed because array_search wouldn't work otherwise :-/ + $this->categories[$row['id']] = $row['category']; + } + } + } + + + /** + * @brief Check if any categories are saved for this type and user. + * @returns boolean. + * @param $type The type identifier e.g. 'contact' or 'event'. + * @param $user The user whos categories will be checked. If not set current user will be used. + */ + public static function isEmpty($type, $user = null) { + $user = is_null($user) ? OC_User::getUser() : $user; + $sql = 'SELECT COUNT(*) FROM `*PREFIX*vcategory` ' + . 'WHERE `uid` = ? AND `type` = ? ORDER BY `category`'; + try { + $stmt = OCP\DB::prepare($sql); + $result = $stmt->execute(array($user, $type)); + return ($result->numRows() == 0); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), + OCP\Util::ERROR); + return false; + } + } + /** * @brief Get the categories for a specific user. + * @param * @returns array containing the categories as strings. */ - public function categories() { - //OC_Log::write('core','OC_VCategories::categories: '.print_r($this->categories, true), OC_Log::DEBUG); + public function categories($format = null) { if(!$this->categories) { return array(); } - usort($this->categories, 'strnatcasecmp'); // usort to also renumber the keys - return $this->categories; + $categories = array_values($this->categories); + uasort($categories, 'strnatcasecmp'); + if($format == self::FORMAT_MAP) { + $catmap = array(); + foreach($categories as $category) { + $catmap[] = array( + 'id' => $this->array_searchi($category, $this->categories), + 'name' => $category + ); + } + return $catmap; + } + return $categories; } + /** + * @brief Get the a list if items belonging to $category. + * @param string|integer $category Category id or name. + * @param string $table The name of table to query. + * @param int $limit + * @param int $offset + * + * This generic method queries a table assuming that the id + * field is called 'id' and the table name provided is in + * the form '*PREFIX*table_name'. + * + * If the category name cannot be resolved an exception is thrown. + * + * TODO: Maybe add the getting permissions for objects? + * + * @returns array containing the resulting items. + */ + public function itemsForCategory($category, $tableinfo, $limit = null, $offset = null) { + $result = null; + if(is_numeric($category)) { + $catid = $category; + } elseif(is_string($category)) { + $catid = $this->array_searchi($category, $this->categories); + } + OCP\Util::writeLog('core', __METHOD__.', category: '.$catid.' '.$category, OCP\Util::DEBUG); + if($catid === false) { + $l10n = OC_L10N::get('core'); + throw new Exception( + $l10n->t( + 'Could not find category "%s"', $category + ) + ); + } + $fields = ''; + foreach($tableinfo['fields'] as $field) { + $fields .= '`' . $tableinfo['tablename'] . '`.`' . $field . '`,'; + } + $fields = substr($fields, 0, -1); + + $items = array(); + $sql = 'SELECT `' . self::$relation_table . '`.`categoryid`, ' . $fields + . ' FROM `' . $tableinfo['tablename'] . '` JOIN `' + . self::$relation_table . '` ON `' . $tableinfo['tablename'] + . '`.`id` = `' . self::$relation_table . '`.`objid` WHERE `' + . self::$relation_table . '`.`categoryid` = ?'; + + try { + $stmt = OCP\DB::prepare($sql, $limit, $offset); + $result = $stmt->execute(array($catid)); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), + OCP\Util::ERROR); + } + + if(!is_null($result)) { + while( $row = $result->fetchRow()) { + $items[] = $row; + } + } + //OCP\Util::writeLog('core', __METHOD__.', count: ' . count($items), OCP\Util::DEBUG); + //OCP\Util::writeLog('core', __METHOD__.', sql: ' . $sql, OCP\Util::DEBUG); + + return $items; + } + /** * @brief Checks whether a category is already saved. * @param $name The name to check for. @@ -90,16 +225,21 @@ class OC_VCategories { * @param $sync bool When true, save the categories * @returns bool Returns false on error. */ - public function add($names, $sync=false) { + public function add($names, $sync=false, $id = null) { if(!is_array($names)) { $names = array($names); } $names = array_map('trim', $names); $newones = array(); foreach($names as $name) { - if(($this->in_arrayi($name, $this->categories) == false) && $name != '') { + if(($this->in_arrayi( + $name, $this->categories) == false) && $name != '') { $newones[] = $name; } + if(!is_null($id) ) { + // Insert $objectid, $categoryid pairs if not exist. + self::$relations[] = array('objid' => $id, 'category' => $name); + } } if(count($newones) > 0) { $this->categories = array_merge($this->categories, $newones); @@ -114,8 +254,8 @@ class OC_VCategories { * @brief Extracts categories from a vobject and add the ones not already present. * @param $vobject The instance of OC_VObject to load the categories from. */ - public function loadFromVObject($vobject, $sync=false) { - $this->add($vobject->getAsArray('CATEGORIES'), $sync); + public function loadFromVObject($id, $vobject, $sync=false) { + $this->add($vobject->getAsArray('CATEGORIES'), $sync, $id); } /** @@ -128,23 +268,54 @@ class OC_VCategories { * $result = $stmt->execute(); * $objects = array(); * if(!is_null($result)) { - * while( $row = $result->fetchRow()) { - * $objects[] = $row['carddata']; + * while( $row = $result->fetchRow()){ + * $objects[] = array($row['id'], $row['carddata']); * } * } * $categories->rescan($objects); */ public function rescan($objects, $sync=true, $reset=true) { - if($reset === true) { + + if($reset === true) { + $result = null; + // Find all objectid/categoryid pairs. + try { + $stmt = OCP\DB::prepare('SELECT `id` FROM `*PREFIX*vcategory` ' + . 'WHERE `uid` = ? AND `type` = ?'); + $result = $stmt->execute(array($this->user, $this->type)); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), + OCP\Util::ERROR); + } + + // And delete them. + if(!is_null($result)) { + $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*vcategory_to_object` ' + . 'WHERE `categoryid` = ? AND `type`= ?'); + while( $row = $result->fetchRow()) { + $stmt->execute(array($row['id'], $this->type)); + } + } + try { + $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*vcategory` ' + . 'WHERE `uid` = ? AND `type` = ?'); + $result = $stmt->execute(array($this->user, $this->type)); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__ . ', exception: ' + . $e->getMessage(), OCP\Util::ERROR); + return; + } $this->categories = array(); } + // Parse all the VObjects foreach($objects as $object) { - //OC_Log::write('core','OC_VCategories::rescan: '.substr($object, 0, 100).'(...)', OC_Log::DEBUG); - $vobject = OC_VObject::parse($object); + $vobject = OC_VObject::parse($object[1]); if(!is_null($vobject)) { - $this->loadFromVObject($vobject, $sync); + // Load the categories + $this->loadFromVObject($object[0], $vobject, $sync); } else { - OC_Log::write('core','OC_VCategories::rescan, unable to parse. ID: '.', '.substr($object, 0, 100).'(...)', OC_Log::DEBUG); + OC_Log::write('core', __METHOD__ . ', unable to parse. ID: ' . ', ' + . substr($object, 0, 100) . '(...)', OC_Log::DEBUG); } } $this->save(); @@ -155,15 +326,58 @@ class OC_VCategories { */ private function save() { if(is_array($this->categories)) { - usort($this->categories, 'strnatcasecmp'); // usort to also renumber the keys - $escaped_categories = serialize($this->categories); - OC_Preferences::setValue($this->user, $this->app, self::PREF_CATEGORIES_LABEL, $escaped_categories); - OC_Log::write('core','OC_VCategories::save: '.print_r($this->categories, true), OC_Log::DEBUG); + foreach($this->categories as $category) { + OCP\DB::insertIfNotExist('*PREFIX*vcategory', + array( + 'uid' => $this->user, + 'type' => $this->type, + 'category' => $category, + )); + } + // reload categories to get the proper ids. + $this->loadCategories(); + // Loop through temporarily cached objectid/categoryname pairs + // and save relations. + $categories = $this->categories; + // For some reason this is needed or array_search(i) will return 0..? + ksort($categories); + foreach(self::$relations as $relation) { + $catid = $this->array_searchi($relation['category'], $categories); + OC_Log::write('core', __METHOD__ . 'catid, ' . $relation['category'] . ' ' . $catid, OC_Log::DEBUG); + if($catid) { + OCP\DB::insertIfNotExist('*PREFIX*vcategory_to_object', + array( + 'objid' => $relation['objid'], + 'categoryid' => $catid, + 'type' => $this->type, + )); + } + } + self::$relations = array(); // reset } else { - OC_Log::write('core','OC_VCategories::save: $this->categories is not an array! '.print_r($this->categories, true), OC_Log::ERROR); + OC_Log::write('core', __METHOD__.', $this->categories is not an array! ' + . print_r($this->categories, true), OC_Log::ERROR); } } - + + /** + * @brief Delete category/object relations from the db + * @param $id The id of the object + * @param $type The type of object (event/contact/task/journal). + * Defaults to the type set in the instance + */ + public function purgeObject($id, $type = null) { + $type = is_null($type) ? $this->type : $type; + try { + $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*vcategory_to_object` ' + . 'WHERE `objid` = ? AND `type`= ?'); + $stmt->execute(array($id, $type)); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), + OCP\Util::ERROR); + } + } + /** * @brief Delete categories from the db and from all the vobject supplied * @param $names An array of categories to delete @@ -173,37 +387,65 @@ class OC_VCategories { if(!is_array($names)) { $names = array($names); } - OC_Log::write('core','OC_VCategories::delete, before: '.print_r($this->categories, true), OC_Log::DEBUG); + //OC_Log::write('core', __METHOD__ . ', before: ' + // . print_r($this->categories, true), OC_Log::DEBUG); foreach($names as $name) { - OC_Log::write('core','OC_VCategories::delete: '.$name, OC_Log::DEBUG); + //OC_Log::write('core', __METHOD__.', '.$name, OC_Log::DEBUG); if($this->hasCategory($name)) { - //OC_Log::write('core','OC_VCategories::delete: '.$name.' got it', OC_Log::DEBUG); unset($this->categories[$this->array_searchi($name, $this->categories)]); } + try { + $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*vcategory` WHERE ' + . '`uid` = ? AND `type` = ? AND `category` = ?'); + $result = $stmt->execute(array($this->user, $this->type, $name)); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__ . ', exception: ' + . $e->getMessage(), OCP\Util::ERROR); + } } - $this->save(); - OC_Log::write('core','OC_VCategories::delete, after: '.print_r($this->categories, true), OC_Log::DEBUG); + //OC_Log::write('core', __METHOD__.', after: ' + // . print_r($this->categories, true), OC_Log::DEBUG); if(!is_null($objects)) { foreach($objects as $key=>&$value) { $vobject = OC_VObject::parse($value[1]); if(!is_null($vobject)) { - $categories = $vobject->getAsArray('CATEGORIES'); - //OC_Log::write('core','OC_VCategories::delete, before: '.$key.': '.print_r($categories, true), OC_Log::DEBUG); + $object = null; + $componentname = ''; + if (isset($vobject->VEVENT)) { + $object = $vobject->VEVENT; + $componentname = 'VEVENT'; + } else + if (isset($vobject->VTODO)) { + $object = $vobject->VTODO; + $componentname = 'VTODO'; + } else + if (isset($vobject->VJOURNAL)) { + $object = $vobject->VJOURNAL; + $componentname = 'VJOURNAL'; + } else { + $object = $vobject; + } + $categories = $object->getAsArray('CATEGORIES'); foreach($names as $name) { $idx = $this->array_searchi($name, $categories); - //OC_Log::write('core','OC_VCategories::delete, loop: '.$name.', '.print_r($idx, true), OC_Log::DEBUG); if($idx !== false) { - OC_Log::write('core','OC_VCategories::delete, unsetting: '.$categories[$this->array_searchi($name, $categories)], OC_Log::DEBUG); + OC_Log::write('core', __METHOD__ + .', unsetting: ' + . $categories[$this->array_searchi($name, $categories)], + OC_Log::DEBUG); unset($categories[$this->array_searchi($name, $categories)]); - //unset($categories[$idx]); } } - //OC_Log::write('core','OC_VCategories::delete, after: '.$key.': '.print_r($categories, true), OC_Log::DEBUG); - $vobject->setString('CATEGORIES', implode(',', $categories)); + $object->setString('CATEGORIES', implode(',', $categories)); + if($vobject !== $object) { + $vobject[$componentname] = $object; + } $value[1] = $vobject->serialize(); $objects[$key] = $value; } else { - OC_Log::write('core','OC_VCategories::delete, unable to parse. ID: '.$value[0].', '.substr($value[1], 0, 50).'(...)', OC_Log::DEBUG); + OC_Log::write('core', __METHOD__ + .', unable to parse. ID: ' . $value[0] . ', ' + . substr($value[1], 0, 50) . '(...)', OC_Log::DEBUG); } } } @@ -222,7 +464,10 @@ class OC_VCategories { if(!is_array($haystack)) { return false; } - return array_search(strtolower($needle),array_map('strtolower',$haystack)); + return array_search( + strtolower($needle), + array_map('strtolower', $haystack) + ); } } -- GitLab From 2b5133a1c443512dcf87d59cc84425bc8400df84 Mon Sep 17 00:00:00 2001 From: scambra Date: Fri, 6 Jul 2012 12:22:21 +0200 Subject: [PATCH 026/576] check free space using folder's owner --- apps/files/ajax/upload.php | 2 +- apps/files/index.php | 2 +- apps/files_sharing/lib/sharedstorage.php | 8 ++++ lib/fileproxy/quota.php | 54 +++++++++++++----------- lib/filestorage.php | 1 + lib/filestorage/common.php | 9 ++++ 6 files changed, 50 insertions(+), 26 deletions(-) diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php index fb3e277a215..f9c4f4c870c 100644 --- a/apps/files/ajax/upload.php +++ b/apps/files/ajax/upload.php @@ -38,7 +38,7 @@ $totalSize=0; foreach($files['size'] as $size) { $totalSize+=$size; } -if($totalSize>OC_Filesystem::free_space('/')) { +if($totalSize>OC_Filesystem::free_space($dir)){ OCP\JSON::error(array("data" => array( "message" => "Not enough space available" ))); exit(); } diff --git a/apps/files/index.php b/apps/files/index.php index 493087d26f1..d85740d4095 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -85,7 +85,7 @@ $upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize') $post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size')); $maxUploadFilesize = min($upload_max_filesize, $post_max_size); -$freeSpace=OC_Filesystem::free_space('/'); +$freeSpace=OC_Filesystem::free_space($dir); $freeSpace=max($freeSpace,0); $maxUploadFilesize = min($maxUploadFilesize ,$freeSpace); diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index 6dba76955a0..7271dcc930b 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -108,6 +108,14 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { return $internalPath; } + public function getOwner($target) { + $shared_item = OCP\Share::getItemSharedWith('folder', $target, OC_Share_Backend_File::FORMAT_SHARED_STORAGE); + if ($shared_item) { + return $shared_item[0]["uid_owner"]; + } + return null; + } + public function mkdir($path) { if ($path == '' || $path == '/' || !$this->isCreatable(dirname($path))) { return false; diff --git a/lib/fileproxy/quota.php b/lib/fileproxy/quota.php index 5a0dbdb6fe2..012be582a51 100644 --- a/lib/fileproxy/quota.php +++ b/lib/fileproxy/quota.php @@ -27,52 +27,58 @@ class OC_FileProxy_Quota extends OC_FileProxy{ static $rootView; - private $userQuota=-1; + private $userQuota=array(); /** - * get the quota for the current user + * get the quota for the user + * @param user * @return int */ - private function getQuota() { - if($this->userQuota!=-1) { - return $this->userQuota; + private function getQuota($user) { + if(in_array($user, $this->userQuota)) { + return $this->userQuota[$user]; } - $userQuota=OC_Preferences::getValue(OC_User::getUser(),'files','quota','default'); + $userQuota=OC_Preferences::getValue($user,'files','quota','default'); if($userQuota=='default') { $userQuota=OC_AppConfig::getValue('files','default_quota','none'); } if($userQuota=='none') { - $this->userQuota=0; + $this->userQuota[$user]=0; }else{ - $this->userQuota=OC_Helper::computerFileSize($userQuota); + $this->userQuota[$user]=OC_Helper::computerFileSize($userQuota); } - return $this->userQuota; + return $this->userQuota[$user]; } /** - * get the free space in the users home folder + * get the free space in the path's owner home folder + * @param path * @return int */ - private function getFreeSpace() { - $rootInfo=OC_FileCache_Cached::get(''); + private function getFreeSpace($path) { + $storage=OC_Filesystem::getStorage($path); + $owner=$storage->getOwner($path); + + $totalSpace=$this->getQuota($owner); + if($totalSpace==0) { + return 0; + } + + $rootInfo=OC_FileCache::get('', "/".$owner."/files"); // TODO Remove after merge of share_api - if (OC_FileCache::inCache('/Shared')) { - $sharedInfo=OC_FileCache_Cached::get('/Shared'); + if (OC_FileCache::inCache('/Shared', "/".$owner."/files")) { + $sharedInfo=OC_FileCache::get('/Shared', "/".$owner."/files"); } else { $sharedInfo = null; } $usedSpace=isset($rootInfo['size'])?$rootInfo['size']:0; $usedSpace=isset($sharedInfo['size'])?$usedSpace-$sharedInfo['size']:$usedSpace; - $totalSpace=$this->getQuota(); - if($totalSpace==0) { - return 0; - } return $totalSpace-$usedSpace; } - + public function postFree_space($path,$space) { - $free=$this->getFreeSpace(); + $free=$this->getFreeSpace($path); if($free==0) { return $space; } @@ -83,21 +89,21 @@ class OC_FileProxy_Quota extends OC_FileProxy{ if (is_resource($data)) { $data = '';//TODO: find a way to get the length of the stream without emptying it } - return (strlen($data)<$this->getFreeSpace() or $this->getFreeSpace()==0); + return (strlen($data)<$this->getFreeSpace($path) or $this->getFreeSpace($path)==0); } public function preCopy($path1,$path2) { if(!self::$rootView){ self::$rootView = new OC_FilesystemView(''); } - return (self::$rootView->filesize($path1)<$this->getFreeSpace() or $this->getFreeSpace()==0); + return (self::$rootView->filesize($path1)<$this->getFreeSpace($path2) or $this->getFreeSpace($path2)==0); } public function preFromTmpFile($tmpfile,$path) { - return (filesize($tmpfile)<$this->getFreeSpace() or $this->getFreeSpace()==0); + return (filesize($tmpfile)<$this->getFreeSpace($path) or $this->getFreeSpace($path)==0); } public function preFromUploadedFile($tmpfile,$path) { - return (filesize($tmpfile)<$this->getFreeSpace() or $this->getFreeSpace()==0); + return (filesize($tmpfile)<$this->getFreeSpace($path) or $this->getFreeSpace($path)==0); } } diff --git a/lib/filestorage.php b/lib/filestorage.php index 5bfd09253d5..146cecf4efa 100644 --- a/lib/filestorage.php +++ b/lib/filestorage.php @@ -63,4 +63,5 @@ abstract class OC_Filestorage{ * returning true for other changes in the folder is optional */ abstract public function hasUpdated($path,$time); + abstract public function getOwner($path); } diff --git a/lib/filestorage/common.php b/lib/filestorage/common.php index 351714437c5..7028df1eb02 100644 --- a/lib/filestorage/common.php +++ b/lib/filestorage/common.php @@ -279,4 +279,13 @@ abstract class OC_Filestorage_Common extends OC_Filestorage { public function hasUpdated($path,$time) { return $this->filemtime($path)>$time; } + + /** + * get the owner of a path + * @param $path The path to get the owner + * @return string uid or false + */ + public function getOwner($path) { + return OC_User::getUser(); + } } -- GitLab From 2b6869bcea2b09357a81ddd299969c47e2b79ada Mon Sep 17 00:00:00 2001 From: VicDeo Date: Wed, 26 Sep 2012 14:38:06 +0300 Subject: [PATCH 027/576] Uncaught exception logging --- lib/base.php | 5 +++-- lib/log.php | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/base.php b/lib/base.php index 4ff5a43bd24..b4b56267c56 100644 --- a/lib/base.php +++ b/lib/base.php @@ -317,8 +317,9 @@ class OC{ self::initPaths(); - register_shutdown_function(array('OC_Log', 'onShutdown')); - set_error_handler(array('OC_Log', 'onError' )); + register_shutdown_function(array('OC_Log', 'onShutdown')); + set_error_handler(array('OC_Log', 'onError')); + set_exception_handler(array('OC_Log', 'onException')); // set debug mode if an xdebug session is active if (!defined('DEBUG') || !DEBUG) { diff --git a/lib/log.php b/lib/log.php index 9c754cf60ce..17f781fa91c 100644 --- a/lib/log.php +++ b/lib/log.php @@ -47,6 +47,11 @@ class OC_Log { return true; } } + + // Uncaught exception handler + public static function onException($exception){ + self::write('PHP', $exception->getMessage() . ' at ' . $exception->getFile() . '#' . $exception->getLine(), self::FATAL); + } //Recoverable errors handler public static function onError($number, $message, $file, $line){ -- GitLab From dbdf3bde7ccf721cfc1efa4d13262bd6f444de73 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 28 Sep 2012 22:19:37 +0200 Subject: [PATCH 028/576] Implement route for download in OC_Search_Provider_File --- apps/files/appinfo/routes.php | 12 ++++++++++++ lib/route.php | 5 +++++ lib/search/provider/file.php | 3 +-- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 apps/files/appinfo/routes.php diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php new file mode 100644 index 00000000000..e1ab560803d --- /dev/null +++ b/apps/files/appinfo/routes.php @@ -0,0 +1,12 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +$this->create('download', 'download{file}') + ->requirements(array('file' => '.*')) + ->actionInclude('files/download.php'); + diff --git a/lib/route.php b/lib/route.php index 772446e5615..ba9d1724d12 100644 --- a/lib/route.php +++ b/lib/route.php @@ -64,4 +64,9 @@ class OC_Route extends Route { $this->setDefault('action', $action); return $this; } + + public function actionInclude($file) { + $function = create_function('$param', 'unset($param["_route"]);$_GET=$param;unset($param);require_once "'.$file.'";'); + $this->action($function); + } } diff --git a/lib/search/provider/file.php b/lib/search/provider/file.php index 21fae0c1ce5..e4e976ed7fd 100644 --- a/lib/search/provider/file.php +++ b/lib/search/provider/file.php @@ -10,12 +10,11 @@ class OC_Search_Provider_File extends OC_Search_Provider{ $name = basename($path); $text = ''; - $path = urlencode($path); if($mime=='httpd/unix-directory') { $link = OC_Helper::linkTo( 'files', 'index.php', array('dir' => $path)); $type = 'Files'; }else{ - $link = OC_Helper::linkTo( 'files', 'download.php', array('file' => $path)); + $link = OC_Helper::linkToRoute( 'download', array('file' => $path)); $mimeBase = $fileData['mimepart']; switch($mimeBase) { case 'audio': -- GitLab From d0bd2bbf2728cdf472044d76aea97f0d4809774a Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 28 Sep 2012 23:15:19 +0200 Subject: [PATCH 029/576] Convert menu entries of settings pages to use router --- core/routes.php | 15 +++++++++++++++ lib/app.php | 18 ++++++++++++------ settings/admin.php | 2 +- settings/apps.php | 2 +- settings/help.php | 3 +-- settings/personal.php | 2 +- settings/settings.php | 2 +- settings/users.php | 4 ++-- 8 files changed, 34 insertions(+), 14 deletions(-) diff --git a/core/routes.php b/core/routes.php index 04b42d20598..9a84eb64a3b 100644 --- a/core/routes.php +++ b/core/routes.php @@ -6,6 +6,21 @@ * See the COPYING-README file. */ +// Core settings pages +$this->create('settings_help', '/settings/help') + ->actionInclude('settings/help.php'); +$this->create('settings_personal', '/settings/personal') + ->actionInclude('settings/personal.php'); +$this->create('settings_settings', '/settings') + ->actionInclude('settings/settings.php'); +$this->create('settings_users', '/settings/users') + ->actionInclude('settings/users.php'); +$this->create('settings_apps', '/settings/apps') + ->actionInclude('settings/apps.php'); +$this->create('settings_admin', '/settings/admin') + ->actionInclude('settings/admin.php'); + +// Not specifically routed $this->create('app_css', '/apps/{app}/{file}') ->requirements(array('file' => '.*.css')) ->action('OC', 'loadCSSFile'); diff --git a/lib/app.php b/lib/app.php index 7889339e420..71add883802 100755 --- a/lib/app.php +++ b/lib/app.php @@ -282,33 +282,33 @@ class OC_App{ // by default, settings only contain the help menu if(OC_Config::getValue('knowledgebaseenabled', true)==true) { $settings = array( - array( "id" => "help", "order" => 1000, "href" => OC_Helper::linkTo( "settings", "help.php" ), "name" => $l->t("Help"), "icon" => OC_Helper::imagePath( "settings", "help.svg" )) + array( "id" => "help", "order" => 1000, "href" => OC_Helper::linkToRoute( "settings_help" ), "name" => $l->t("Help"), "icon" => OC_Helper::imagePath( "settings", "help.svg" )) ); } // if the user is logged-in if (OC_User::isLoggedIn()) { // personal menu - $settings[] = array( "id" => "personal", "order" => 1, "href" => OC_Helper::linkTo( "settings", "personal.php" ), "name" => $l->t("Personal"), "icon" => OC_Helper::imagePath( "settings", "personal.svg" )); + $settings[] = array( "id" => "personal", "order" => 1, "href" => OC_Helper::linkToRoute( "settings_personal" ), "name" => $l->t("Personal"), "icon" => OC_Helper::imagePath( "settings", "personal.svg" )); // if there are some settings forms if(!empty(self::$settingsForms)) // settings menu - $settings[]=array( "id" => "settings", "order" => 1000, "href" => OC_Helper::linkTo( "settings", "settings.php" ), "name" => $l->t("Settings"), "icon" => OC_Helper::imagePath( "settings", "settings.svg" )); + $settings[]=array( "id" => "settings", "order" => 1000, "href" => OC_Helper::linkToRoute( "settings_settings" ), "name" => $l->t("Settings"), "icon" => OC_Helper::imagePath( "settings", "settings.svg" )); //SubAdmins are also allowed to access user management if(OC_SubAdmin::isSubAdmin($_SESSION["user_id"]) || OC_Group::inGroup( $_SESSION["user_id"], "admin" )) { // admin users menu - $settings[] = array( "id" => "core_users", "order" => 2, "href" => OC_Helper::linkTo( "settings", "users.php" ), "name" => $l->t("Users"), "icon" => OC_Helper::imagePath( "settings", "users.svg" )); + $settings[] = array( "id" => "core_users", "order" => 2, "href" => OC_Helper::linkToRoute( "settings_users" ), "name" => $l->t("Users"), "icon" => OC_Helper::imagePath( "settings", "users.svg" )); } // if the user is an admin if(OC_Group::inGroup( $_SESSION["user_id"], "admin" )) { // admin apps menu - $settings[] = array( "id" => "core_apps", "order" => 3, "href" => OC_Helper::linkTo( "settings", "apps.php" ).'?installed', "name" => $l->t("Apps"), "icon" => OC_Helper::imagePath( "settings", "apps.svg" )); + $settings[] = array( "id" => "core_apps", "order" => 3, "href" => OC_Helper::linkToRoute( "settings_apps" ).'?installed', "name" => $l->t("Apps"), "icon" => OC_Helper::imagePath( "settings", "apps.svg" )); - $settings[]=array( "id" => "admin", "order" => 1000, "href" => OC_Helper::linkTo( "settings", "admin.php" ), "name" => $l->t("Admin"), "icon" => OC_Helper::imagePath( "settings", "admin.svg" )); + $settings[]=array( "id" => "admin", "order" => 1000, "href" => OC_Helper::linkToRoute( "settings_admin" ), "name" => $l->t("Admin"), "icon" => OC_Helper::imagePath( "settings", "admin.svg" )); } } @@ -485,6 +485,12 @@ class OC_App{ public static function getCurrentApp() { $script=substr($_SERVER["SCRIPT_NAME"], strlen(OC::$WEBROOT)+1); $topFolder=substr($script, 0, strpos($script, '/')); + if (empty($topFolder)) { + $path_info = OC_Request::getPathInfo(); + if ($path_info) { + $topFolder=substr($path_info, 1, strpos($path_info, '/', 1)-1); + } + } if($topFolder=='apps') { $length=strlen($topFolder); return substr($script, $length+1, strpos($script, '/', $length+1)-$length-1); diff --git a/settings/admin.php b/settings/admin.php index a36f2190386..9cb70353f9c 100755 --- a/settings/admin.php +++ b/settings/admin.php @@ -5,8 +5,8 @@ * See the COPYING-README file. */ -require_once '../lib/base.php'; OC_Util::checkAdminUser(); +OC_App::loadApps(); OC_Util::addStyle( "settings", "settings" ); OC_Util::addScript( "settings", "admin" ); diff --git a/settings/apps.php b/settings/apps.php index a1c1bf6aa53..8134b44143a 100644 --- a/settings/apps.php +++ b/settings/apps.php @@ -21,8 +21,8 @@ * */ -require_once '../lib/base.php'; OC_Util::checkAdminUser(); +OC_App::loadApps(); // Load the files we need OC_Util::addStyle( "settings", "settings" ); diff --git a/settings/help.php b/settings/help.php index 9157308dd57..69a5ec9c146 100644 --- a/settings/help.php +++ b/settings/help.php @@ -5,9 +5,8 @@ * See the COPYING-README file. */ -require_once '../lib/base.php'; OC_Util::checkLoggedIn(); - +OC_App::loadApps(); // Load the files we need OC_Util::addStyle( "settings", "settings" ); diff --git a/settings/personal.php b/settings/personal.php index 4f92985c797..ce9065247df 100644 --- a/settings/personal.php +++ b/settings/personal.php @@ -5,8 +5,8 @@ * See the COPYING-README file. */ -require_once '../lib/base.php'; OC_Util::checkLoggedIn(); +OC_App::loadApps(); // Highlight navigation entry OC_Util::addScript( 'settings', 'personal' ); diff --git a/settings/settings.php b/settings/settings.php index 24099ef5742..1e05452ec4d 100644 --- a/settings/settings.php +++ b/settings/settings.php @@ -5,8 +5,8 @@ * See the COPYING-README file. */ -require_once '../lib/base.php'; OC_Util::checkLoggedIn(); +OC_App::loadApps(); OC_Util::addStyle( 'settings', 'settings' ); OC_App::setActiveNavigationEntry( 'settings' ); diff --git a/settings/users.php b/settings/users.php index e76505cc78d..6eaae474538 100644 --- a/settings/users.php +++ b/settings/users.php @@ -5,8 +5,8 @@ * See the COPYING-README file. */ -require_once '../lib/base.php'; OC_Util::checkSubAdminUser(); +OC_App::loadApps(); // We have some javascript foo! OC_Util::addScript( 'settings', 'users' ); @@ -57,4 +57,4 @@ $tmpl->assign( 'subadmins', $subadmins); $tmpl->assign( 'numofgroups', count($accessiblegroups)); $tmpl->assign( 'quota_preset', $quotaPreset); $tmpl->assign( 'default_quota', $defaultQuota); -$tmpl->printPage(); \ No newline at end of file +$tmpl->printPage(); -- GitLab From 210ea4d9d9a3488918c898beb6d6508c60686ad1 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sat, 29 Sep 2012 18:03:34 +0200 Subject: [PATCH 030/576] fix actioninclude --- lib/route.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/route.php b/lib/route.php index ba9d1724d12..c5a8bd2aa36 100644 --- a/lib/route.php +++ b/lib/route.php @@ -66,7 +66,7 @@ class OC_Route extends Route { } public function actionInclude($file) { - $function = create_function('$param', 'unset($param["_route"]);$_GET=$param;unset($param);require_once "'.$file.'";'); + $function = create_function('$param', 'unset($param["_route"]);$_GET=array_merge($_GET,$param);unset($param);require_once "'.$file.'";'); $this->action($function); } } -- GitLab From bb136b9adf021cb154ff05222d3439373312bbc5 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sat, 29 Sep 2012 18:08:54 +0200 Subject: [PATCH 031/576] Make the settings ajax calls use the router --- core/js/js.js | 7 +++- core/routes.php | 14 +------ settings/ajax/apps/ocs.php | 3 -- settings/ajax/changepassword.php | 2 - settings/ajax/creategroup.php | 2 - settings/ajax/createuser.php | 2 - settings/ajax/disableapp.php | 2 - settings/ajax/enableapp.php | 2 - settings/ajax/getlog.php | 3 -- settings/ajax/lostpassword.php | 2 - settings/ajax/openid.php | 3 -- settings/ajax/removegroup.php | 3 -- settings/ajax/removeuser.php | 3 -- settings/ajax/setlanguage.php | 3 -- settings/ajax/setloglevel.php | 1 - settings/ajax/setquota.php | 3 -- settings/ajax/togglegroups.php | 3 -- settings/ajax/togglesubadmins.php | 5 +-- settings/ajax/userlist.php | 4 +- settings/js/users.js | 2 +- settings/routes.php | 62 +++++++++++++++++++++++++++++++ 21 files changed, 72 insertions(+), 59 deletions(-) create mode 100644 settings/routes.php diff --git a/core/js/js.js b/core/js/js.js index 39a58a24599..ffe3507a4eb 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -88,7 +88,12 @@ var OC={ } link+=file; }else{ - link+='/'; + if (app == 'settings' && type == 'ajax') { + link+='/index.php/'; + } + else { + link+='/'; + } if(!isCore){ link+='apps/'; } diff --git a/core/routes.php b/core/routes.php index 9a84eb64a3b..b0f41dd2861 100644 --- a/core/routes.php +++ b/core/routes.php @@ -6,19 +6,7 @@ * See the COPYING-README file. */ -// Core settings pages -$this->create('settings_help', '/settings/help') - ->actionInclude('settings/help.php'); -$this->create('settings_personal', '/settings/personal') - ->actionInclude('settings/personal.php'); -$this->create('settings_settings', '/settings') - ->actionInclude('settings/settings.php'); -$this->create('settings_users', '/settings/users') - ->actionInclude('settings/users.php'); -$this->create('settings_apps', '/settings/apps') - ->actionInclude('settings/apps.php'); -$this->create('settings_admin', '/settings/admin') - ->actionInclude('settings/admin.php'); +require_once('settings/routes.php'); // Not specifically routed $this->create('app_css', '/apps/{app}/{file}') diff --git a/settings/ajax/apps/ocs.php b/settings/ajax/apps/ocs.php index fb78cc89248..4d6f1116e7d 100644 --- a/settings/ajax/apps/ocs.php +++ b/settings/ajax/apps/ocs.php @@ -6,9 +6,6 @@ * See the COPYING-README file. */ -// Init owncloud -require_once '../../../lib/base.php'; - OC_JSON::checkAdminUser(); $l = OC_L10N::get('settings'); diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php index b251fea504b..200fdec26de 100644 --- a/settings/ajax/changepassword.php +++ b/settings/ajax/changepassword.php @@ -1,7 +1,5 @@ OC_Preferences::getValue($user, 'files', 'quota', 'default')); } } -OC_JSON::success(array('data' => $users)); \ No newline at end of file +OC_JSON::success(array('data' => $users)); diff --git a/settings/js/users.js b/settings/js/users.js index 20bd94993bc..81a3181ba59 100644 --- a/settings/js/users.js +++ b/settings/js/users.js @@ -130,7 +130,7 @@ var UserList={ if (typeof UserList.offset === 'undefined') { UserList.offset = $('tbody tr').length; } - $.get(OC.filePath('settings', 'ajax', 'userlist.php'), { offset: UserList.offset }, function(result) { + $.get(OC.filePath('settings', 'ajax', 'userlist'), { offset: UserList.offset }, function(result) { if (result.status === 'success') { $.each(result.data, function(index, user) { var tr = UserList.add(user.name, user.groups, user.subadmin, user.quota, false); diff --git a/settings/routes.php b/settings/routes.php new file mode 100644 index 00000000000..b64a357be0e --- /dev/null +++ b/settings/routes.php @@ -0,0 +1,62 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +// Settings pages +$this->create('settings_help', '/settings/help') + ->actionInclude('settings/help.php'); +$this->create('settings_personal', '/settings/personal') + ->actionInclude('settings/personal.php'); +$this->create('settings_settings', '/settings') + ->actionInclude('settings/settings.php'); +$this->create('settings_users', '/settings/users') + ->actionInclude('settings/users.php'); +$this->create('settings_apps', '/settings/apps') + ->actionInclude('settings/apps.php'); +$this->create('settings_admin', '/settings/admin') + ->actionInclude('settings/admin.php'); +// Settings ajax actions +// users +$this->create('settings_admin', '/settings/ajax/userlist') + ->actionInclude('settings/ajax/userlist.php'); +$this->create('settings_ajax_createuser', '/settings/ajax/createuser.php') + ->actionInclude('settings_ajax_createuser'); +$this->create('settings_ajax_removeuser', '/settings/ajax/removeuser.php') + ->actionInclude('settings/ajax/removeuser.php'); +$this->create('settings_ajax_setquota', '/settings/ajax/setquota.php') + ->actionInclude('settings/ajax/setquota.php'); +$this->create('settings_ajax_creategroup', '/settings/ajax/creategroup.php') + ->actionInclude('settings_ajax_creategroup'); +$this->create('settings_ajax_togglegroups', '/settings/ajax/togglegroups.php') + ->actionInclude('settings/ajax/togglegroups.php'); +$this->create('settings_ajax_togglesubadmins', '/settings/ajax/togglesubadmins.php') + ->actionInclude('settings/ajax/togglesubadmins.php'); +$this->create('settings_ajax_removegroup', '/settings/ajax/removegroup.php') + ->actionInclude('settings/ajax/removegroup.php'); +$this->create('settings_ajax_changepassword', '/settings/ajax/changepassword.php') + ->actionInclude('settings/ajax/changepassword.php'); +// personel +$this->create('settings_ajax_lostpassword', '/settings/ajax/lostpassword.php') + ->actionInclude('settings/ajax/lostpassword.php'); +$this->create('settings_ajax_setlanguage', '/settings/ajax/setlanguage.php') + ->actionInclude('settings/ajax/setlanguage.php'); +// apps +$this->create('settings_ajax_apps_ocs', '/settings/ajax/apps/ocs.php') + ->actionInclude('settings/ajax/apps/ocs.php'); +$this->create('settings_ajax_enableapp', '/settings/ajax/enableapp.php') + ->actionInclude('settings/ajax/enableapp.php'); +$this->create('settings_ajax_disableapp', '/settings/ajax/disableapp.php') + ->actionInclude('settings/ajax/disableapp.php'); +// admin +$this->create('settings_ajax_getlog', '/settings/ajax/getlog.php') + ->actionInclude('settings/ajax/getlog.php'); +$this->create('settings_ajax_setloglevel', '/settings/ajax/setloglevel.php') + ->actionInclude('settings/ajax/setloglevel.php'); + +// apps/user_openid +$this->create('settings_ajax_openid', '/settings/ajax/openid.php') + ->actionInclude('settings/ajax/openid.php'); -- GitLab From de1bfe9d6b50c37c6999ff652a31535b0a2faf41 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Tue, 2 Oct 2012 21:57:51 +0200 Subject: [PATCH 032/576] Make the core ajax calls use the router --- core/ajax/appconfig.php | 1 - core/ajax/requesttoken.php | 1 - core/ajax/share.php | 1 - core/ajax/translations.php | 3 --- core/ajax/vcategories/add.php | 1 - core/ajax/vcategories/delete.php | 1 - core/ajax/vcategories/edit.php | 1 - core/js/js.js | 2 +- core/routes.php | 21 +++++++++++++++++++++ 9 files changed, 22 insertions(+), 10 deletions(-) diff --git a/core/ajax/appconfig.php b/core/ajax/appconfig.php index 1b43afa74fb..4f26dedc797 100644 --- a/core/ajax/appconfig.php +++ b/core/ajax/appconfig.php @@ -5,7 +5,6 @@ * See the COPYING-README file. */ -require_once "../../lib/base.php"; OC_Util::checkAdminUser(); OCP\JSON::callCheck(); diff --git a/core/ajax/requesttoken.php b/core/ajax/requesttoken.php index 96d5402e621..84089de8b9d 100644 --- a/core/ajax/requesttoken.php +++ b/core/ajax/requesttoken.php @@ -26,7 +26,6 @@ * @return json: success/error state indicator including a fresh request token * @author Christian Reiner */ -require_once '../../lib/base.php'; // don't load apps or filesystem for this task $RUNTIME_NOAPPS = TRUE; diff --git a/core/ajax/share.php b/core/ajax/share.php index 446d4cc32ec..b6f96bfd340 100644 --- a/core/ajax/share.php +++ b/core/ajax/share.php @@ -18,7 +18,6 @@ * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . */ -require_once '../../lib/base.php'; OC_JSON::checkLoggedIn(); OCP\JSON::callCheck(); diff --git a/core/ajax/translations.php b/core/ajax/translations.php index 75679da2c04..e22cbad4708 100644 --- a/core/ajax/translations.php +++ b/core/ajax/translations.php @@ -21,9 +21,6 @@ * */ -// Init owncloud -require_once '../../lib/base.php'; - $app = $_POST["app"]; $l = OC_L10N::get( $app ); diff --git a/core/ajax/vcategories/add.php b/core/ajax/vcategories/add.php index 81fa06dbf19..8d31275dbfb 100644 --- a/core/ajax/vcategories/add.php +++ b/core/ajax/vcategories/add.php @@ -14,7 +14,6 @@ function debug($msg) { OC_Log::write('core', 'ajax/vcategories/add.php: '.$msg, OC_Log::DEBUG); } -require_once '../../../lib/base.php'; OC_JSON::checkLoggedIn(); $category = isset($_GET['category'])?strip_tags($_GET['category']):null; $app = isset($_GET['app'])?$_GET['app']:null; diff --git a/core/ajax/vcategories/delete.php b/core/ajax/vcategories/delete.php index cd46a25b79d..74b0220870c 100644 --- a/core/ajax/vcategories/delete.php +++ b/core/ajax/vcategories/delete.php @@ -15,7 +15,6 @@ function debug($msg) { OC_Log::write('core', 'ajax/vcategories/delete.php: '.$msg, OC_Log::DEBUG); } -require_once '../../../lib/base.php'; OC_JSON::checkLoggedIn(); $app = isset($_POST['app'])?$_POST['app']:null; $categories = isset($_POST['categories'])?$_POST['categories']:null; diff --git a/core/ajax/vcategories/edit.php b/core/ajax/vcategories/edit.php index a0e67841c55..caeebcaa940 100644 --- a/core/ajax/vcategories/edit.php +++ b/core/ajax/vcategories/edit.php @@ -15,7 +15,6 @@ function debug($msg) { OC_Log::write('core', 'ajax/vcategories/edit.php: '.$msg, OC_Log::DEBUG); } -require_once '../../../lib/base.php'; OC_JSON::checkLoggedIn(); $app = isset($_GET['app'])?$_GET['app']:null; diff --git a/core/js/js.js b/core/js/js.js index ffe3507a4eb..8f3b5a6af1e 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -88,7 +88,7 @@ var OC={ } link+=file; }else{ - if (app == 'settings' && type == 'ajax') { + if ((app == 'settings' || app == 'core') && type == 'ajax') { link+='/index.php/'; } else { diff --git a/core/routes.php b/core/routes.php index b0f41dd2861..d396ddd6473 100644 --- a/core/routes.php +++ b/core/routes.php @@ -8,6 +8,27 @@ require_once('settings/routes.php'); +// Core ajax actions +// AppConfig +$this->create('core_ajax_appconfig', '/core/ajax/appconfig.php') + ->actionInclude('core/ajax/appconfig.php'); +// RequestToken +$this->create('core_ajax_requesttoken', '/core/ajax/requesttoken.php') + ->actionInclude('core/ajax/requesttoken.php'); +// Share +$this->create('core_ajax_share', '/core/ajax/share.php') + ->actionInclude('core/ajax/share.php'); +// Translations +$this->create('core_ajax_translations', '/core/ajax/translations.php') + ->actionInclude('core/ajax/translations.php'); +// VCategories +$this->create('core_ajax_vcategories_add', '/core/ajax/vcategories/add.php') + ->actionInclude('core/ajax/vcategories/add.php'); +$this->create('core_ajax_vcategories_delete', '/core/ajax/vcategories/delete.php') + ->actionInclude('core/ajax/vcategories/delete.php'); +$this->create('core_ajax_vcategories_edit', '/core/ajax/vcategories/edit.php') + ->actionInclude('core/ajax/vcategories/edit.php'); + // Not specifically routed $this->create('app_css', '/apps/{app}/{file}') ->requirements(array('file' => '.*.css')) -- GitLab From 6bfb2ca2a8ca18fe45997d720b1adc7781d51d2a Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Tue, 2 Oct 2012 22:46:37 +0200 Subject: [PATCH 033/576] Added post_deleteUser hook to VCategories. Added methods for adding/removing object/category relations. --- lib/vcategories.php | 116 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 110 insertions(+), 6 deletions(-) diff --git a/lib/vcategories.php b/lib/vcategories.php index 08faa0d9035..499fffad3ff 100644 --- a/lib/vcategories.php +++ b/lib/vcategories.php @@ -21,6 +21,7 @@ * */ +OC_Hook::connect('OC_User', 'post_deleteUser', 'OC_VCategories', 'post_deleteUser'); /** * Class for easy access to categories in VCARD, VEVENT, VTODO and VJOURNAL. @@ -147,7 +148,7 @@ class OC_VCategories { /** * @brief Get the a list if items belonging to $category. * @param string|integer $category Category id or name. - * @param string $table The name of table to query. + * @param array $tableinfo Array in the form {'tablename' => table, 'fields' => ['field1', 'field2']} * @param int $limit * @param int $offset * @@ -327,7 +328,7 @@ class OC_VCategories { private function save() { if(is_array($this->categories)) { foreach($this->categories as $category) { - OCP\DB::insertIfNotExist('*PREFIX*vcategory', + OCP\DB::insertIfNotExist(self::$category_table, array( 'uid' => $this->user, 'type' => $this->type, @@ -345,7 +346,7 @@ class OC_VCategories { $catid = $this->array_searchi($relation['category'], $categories); OC_Log::write('core', __METHOD__ . 'catid, ' . $relation['category'] . ' ' . $catid, OC_Log::DEBUG); if($catid) { - OCP\DB::insertIfNotExist('*PREFIX*vcategory_to_object', + OCP\DB::insertIfNotExist(self::$relation_table, array( 'objid' => $relation['objid'], 'categoryid' => $catid, @@ -360,22 +361,125 @@ class OC_VCategories { } } + /** + * @brief Delete categories and category/object relations for a user. + * For hooking up on post_deleteUser + * @param string $uid The user id for which entries should be purged. + */ + public static function post_deleteUser($arguments) { + // Find all objectid/categoryid pairs. + $result = null; + try { + $stmt = OCP\DB::prepare('SELECT `id` FROM `*PREFIX*vcategory` ' + . 'WHERE `uid` = ?'); + $result = $stmt->execute(array($arguments['uid'])); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), + OCP\Util::ERROR); + } + + if(!is_null($result)) { + try { + $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*vcategory_to_object` ' + . 'WHERE `categoryid` = ?'); + while( $row = $result->fetchRow()) { + try { + $stmt->execute(array($row['id'])); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), + OCP\Util::ERROR); + } + } + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), + OCP\Util::ERROR); + } + } + try { + $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*vcategory` ' + . 'WHERE `uid` = ? AND'); + $result = $stmt->execute(array($arguments['uid'])); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__ . ', exception: ' + . $e->getMessage(), OCP\Util::ERROR); + } + } + /** * @brief Delete category/object relations from the db - * @param $id The id of the object - * @param $type The type of object (event/contact/task/journal). + * @param int $id The id of the object + * @param string $type The type of object (event/contact/task/journal). * Defaults to the type set in the instance + * @returns boolean */ public function purgeObject($id, $type = null) { $type = is_null($type) ? $this->type : $type; try { - $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*vcategory_to_object` ' + $stmt = OCP\DB::prepare('DELETE FROM `' . self::$relation_table . '` ' . 'WHERE `objid` = ? AND `type`= ?'); $stmt->execute(array($id, $type)); } catch(Exception $e) { OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR); + return false; + } + return true; + } + + /** + * @brief Creates a category/object relation. + * @param int $objid The id of the object + * @param int|string $category The id or name of the category + * @param string $type The type of object (event/contact/task/journal). + * Defaults to the type set in the instance + * @returns boolean + */ + public function createRelation($objid, $category, $type = null) { + $type = is_null($type) ? $this->type : $type; + $categoryid = (is_string($category) && !is_numeric($category)) + ? $this->array_searchi($category, $this->categories) + : $category; + try { + OCP\DB::insertIfNotExist(self::$relation_table, + array( + 'objid' => $objid, + 'categoryid' => $categoryid, + 'type' => $type, + )); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), + OCP\Util::ERROR); + return false; } + return true; + } + + /** + * @brief Delete single category/object relation from the db + * @param int $objid The id of the object + * @param int|string $category The id or name of the category + * @param string $type The type of object (event/contact/task/journal). + * Defaults to the type set in the instance + * @returns boolean + */ + public function removeRelation($objid, $category, $type = null) { + $type = is_null($type) ? $this->type : $type; + $categoryid = (is_string($category) && !is_numeric($category)) + ? $this->array_searchi($category, $this->categories) + : $category; + try { + $sql = 'DELETE FROM `' . self::$relation_table . '` ' + . 'WHERE `objid` = ? AND `categoryid` = ? AND `type` = ?'; + OCP\Util::writeLog('core', __METHOD__.', sql: ' . $objid . ' ' . $categoryid . ' ' . $type, + OCP\Util::DEBUG); + $stmt = OCP\DB::prepare($sql); + $stmt->execute(array($objid, $categoryid, $type)); + } catch(Exception $e) { + OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), + OCP\Util::ERROR); + return false; + } + return true; } /** -- GitLab From 167e9c1cc025ce920e48032ff5331fcb4f84de3d Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 5 Oct 2012 09:41:27 +0200 Subject: [PATCH 034/576] Fix route name --- settings/routes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/routes.php b/settings/routes.php index b64a357be0e..4f4f83e4542 100644 --- a/settings/routes.php +++ b/settings/routes.php @@ -21,7 +21,7 @@ $this->create('settings_admin', '/settings/admin') ->actionInclude('settings/admin.php'); // Settings ajax actions // users -$this->create('settings_admin', '/settings/ajax/userlist') +$this->create('settings_ajax_userlist', '/settings/ajax/userlist') ->actionInclude('settings/ajax/userlist.php'); $this->create('settings_ajax_createuser', '/settings/ajax/createuser.php') ->actionInclude('settings_ajax_createuser'); -- GitLab From f3a211c03c3dd017e263ac5226a52eb62562d198 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 5 Oct 2012 09:42:36 +0200 Subject: [PATCH 035/576] Implement routing on javascript side --- core/js/router.js | 73 ++++++++++++++++++++++++++++++++++++++++++++ core/routes.php | 3 ++ lib/base.php | 1 + lib/router.php | 18 +++++++++++ settings/js/users.js | 2 +- 5 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 core/js/router.js diff --git a/core/js/router.js b/core/js/router.js new file mode 100644 index 00000000000..8b66f5a05c5 --- /dev/null +++ b/core/js/router.js @@ -0,0 +1,73 @@ +OC.router_base_url = OC.webroot + '/index.php/', +OC.Router = { + routes_request: $.ajax(OC.router_base_url + 'core/routes.json', { + dataType: 'json', + success: function(jsondata) { + if (jsondata.status == 'success') { + OC.Router.routes = jsondata.data; + } + } + }), + generate:function(name, opt_params) { + if (!('routes' in this)) { + if(this.routes_request.state() != 'resolved') { + alert('wait');// wait + } + } + if (!(name in this.routes)) { + throw new Error('The route "' + name + '" does not exist.'); + } + var route = this.routes[name]; + var params = opt_params || {}; + var unusedParams = $.extend(true, {}, params); + var url = ''; + var optional = true; + $(route.tokens).each(function(i, token) { + if ('text' === token[0]) { + url = token[1] + url; + optional = false; + + return; + } + + if ('variable' === token[0]) { + if (false === optional || !(token[3] in route.defaults) + || ((token[3] in params) && params[token[3]] != route.defaults[token[3]])) { + var value; + if (token[3] in params) { + value = params[token[3]]; + delete unusedParams[token[3]]; + } else if (token[3] in route.defaults) { + value = route.defaults[token[3]]; + } else if (optional) { + return; + } else { + throw new Error('The route "' + name + '" requires the parameter "' + token[3] + '".'); + } + + var empty = true === value || false === value || '' === value; + + if (!empty || !optional) { + url = token[1] + encodeURIComponent(value).replace(/%2F/g, '/') + url; + } + + optional = false; + } + + return; + } + + throw new Error('The token type "' + token[0] + '" is not supported.'); + }); + if (url === '') { + url = '/'; + } + + unusedParams = $.param(unusedParams); + if (unusedParams.length > 0) { + url += '?'+unusedParams; + } + + return OC.router_base_url + url; + } +}; diff --git a/core/routes.php b/core/routes.php index d396ddd6473..8d836816265 100644 --- a/core/routes.php +++ b/core/routes.php @@ -28,6 +28,9 @@ $this->create('core_ajax_vcategories_delete', '/core/ajax/vcategories/delete.php ->actionInclude('core/ajax/vcategories/delete.php'); $this->create('core_ajax_vcategories_edit', '/core/ajax/vcategories/edit.php') ->actionInclude('core/ajax/vcategories/edit.php'); +// Routing +$this->create('core_ajax_routes', '/core/routes.json') + ->action('OC_Router', 'JSRoutes'); // Not specifically routed $this->create('app_css', '/apps/{app}/{file}') diff --git a/lib/base.php b/lib/base.php index 2d82d5a40fc..f7967329c29 100644 --- a/lib/base.php +++ b/lib/base.php @@ -253,6 +253,7 @@ class OC{ OC_Util::addScript( "config" ); //OC_Util::addScript( "multiselect" ); OC_Util::addScript('search', 'result'); + OC_Util::addScript('router'); if( OC_Config::getValue( 'installed', false )) { if( OC_Appconfig::getValue( 'core', 'backgroundjobs_mode', 'ajax' ) == 'ajax' ) { diff --git a/lib/router.php b/lib/router.php index da491e217fc..04a3d410060 100644 --- a/lib/router.php +++ b/lib/router.php @@ -94,4 +94,22 @@ class OC_Router { { return $this->getGenerator()->generate($name, $parameters, $absolute); } + + public static function JSRoutes() + { + // TODO: http caching + $routes = array(); + $router = OC::getRouter(); + $root = $router->getCollection('root'); + foreach($root->all() as $name => $route) { + $compiled_route = $route->compile(); + $defaults = $route->getDefaults(); + unset($defaults['action']); + $routes[$name] = array( + 'tokens' => $compiled_route->getTokens(), + 'defaults' => $defaults, + ); + } + OCP\JSON::success ( array( 'data' => $routes ) ); + } } diff --git a/settings/js/users.js b/settings/js/users.js index 81a3181ba59..1474ebcdd81 100644 --- a/settings/js/users.js +++ b/settings/js/users.js @@ -130,7 +130,7 @@ var UserList={ if (typeof UserList.offset === 'undefined') { UserList.offset = $('tbody tr').length; } - $.get(OC.filePath('settings', 'ajax', 'userlist'), { offset: UserList.offset }, function(result) { + $.get(OC.Router.generate('settings_ajax_userlist', { offset: UserList.offset }), function(result) { if (result.status === 'success') { $.each(result.data, function(index, user) { var tr = UserList.add(user.name, user.groups, user.subadmin, user.quota, false); -- GitLab From c2b4e534534e083147bbad9b564179832cfa2912 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 5 Oct 2012 17:42:42 +0200 Subject: [PATCH 036/576] Add API description to OC_Route and OC_Router --- lib/route.php | 40 ++++++++++++++++++++++++++++++++++++++++ lib/router.php | 31 +++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/lib/route.php b/lib/route.php index c5a8bd2aa36..89af829d3d3 100644 --- a/lib/route.php +++ b/lib/route.php @@ -9,31 +9,53 @@ use Symfony\Component\Routing\Route; class OC_Route extends Route { + /** + * Specify the method when this route is to be used + * + * @param string $method HTTP method (uppercase) + */ public function method($method) { $this->setRequirement('_method', strtoupper($method)); return $this; } + /** + * Specify POST as the method to use with this route + */ public function post() { $this->method('POST'); return $this; } + /** + * Specify GET as the method to use with this route + */ public function get() { $this->method('GET'); return $this; } + /** + * Specify PUT as the method to use with this route + */ public function put() { $this->method('PUT'); return $this; } + /** + * Specify DELETE as the method to use with this route + */ public function delete() { $this->method('DELETE'); return $this; } + /** + * Defaults to use for this route + * + * @param array $defaults The defaults + */ public function defaults($defaults) { $action = $this->getDefault('action'); $this->setDefaults($defaults); @@ -44,6 +66,11 @@ class OC_Route extends Route { return $this; } + /** + * Requirements for this route + * + * @param array $requirements The requirements + */ public function requirements($requirements) { $method = $this->getRequirement('_method'); $this->setRequirements($requirements); @@ -56,6 +83,14 @@ class OC_Route extends Route { return $this; } + /** + * The action to execute when this route matches + * @param string|callable $class the class or a callable + * @param string $function the function to use with the class + * + * This function is called with $class set to a callable or + * to the class with $function + */ public function action($class, $function = null) { $action = array($class, $function); if (is_null($function)) { @@ -65,6 +100,11 @@ class OC_Route extends Route { return $this; } + /** + * The action to execute when this route matches, includes a file like + * it is called directly + * @param $file + */ public function actionInclude($file) { $function = create_function('$param', 'unset($param["_route"]);$_GET=array_merge($_GET,$param);unset($param);require_once "'.$file.'";'); $this->action($function); diff --git a/lib/router.php b/lib/router.php index 04a3d410060..a471a06802c 100644 --- a/lib/router.php +++ b/lib/router.php @@ -53,16 +53,34 @@ class OC_Router { return $this->collections[$name]; } + /** + * Sets the collection to use for adding routes + * + * @param string $name Name of the colletion to use. + */ public function useCollection($name) { $this->collection = $this->getCollection($name); } + /** + * Create a OC_Route. + * + * @param string $name Name of the route to create. + * @param string $pattern The pattern to match + * @param array $defaults An array of default parameter values + * @param array $requirements An array of requirements for parameters (regexes) + */ public function create($name, $pattern, array $defaults = array(), array $requirements = array()) { $route = new OC_Route($pattern, $defaults, $requirements); $this->collection->add($name, $route); return $route; } + /** + * Find the route matching $url. + * + * @param string $url The url to find + */ public function match($url) { $matcher = new UrlMatcher($this->root, $this->context); $parameters = $matcher->match($url); @@ -81,6 +99,10 @@ class OC_Router { } } + /** + * Get the url generator + * + */ public function getGenerator() { if (null !== $this->generator) { @@ -90,11 +112,20 @@ class OC_Router { return $this->generator = new UrlGenerator($this->root, $this->context); } + /** + * Generate url based on $name and $parameters + * + * @param string $name Name of the route to use. + * @param array $parameters Parameters for the route + */ public function generate($name, $parameters = array(), $absolute = false) { return $this->getGenerator()->generate($name, $parameters, $absolute); } + /** + * Generate JSON response for routing in javascript + */ public static function JSRoutes() { // TODO: http caching -- GitLab From 0f26228d992e70d9c1f7acfe6e18bce1d02d4d4b Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sat, 13 Oct 2012 15:51:37 +0200 Subject: [PATCH 037/576] Some tests --- tests/lib/helper.php | 144 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 tests/lib/helper.php diff --git a/tests/lib/helper.php b/tests/lib/helper.php new file mode 100644 index 00000000000..b12f8d929b7 --- /dev/null +++ b/tests/lib/helper.php @@ -0,0 +1,144 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class Test_Helper extends UnitTestCase { + function testMakeURLAbsolute() { + $result = OC_Helper::makeURLAbsolute("/index.php?someParameter=value"); + $expected = 'http://localhost/index.php?someParameter=value'; + $this->assertEquals($result, $expected); + } + + function testHumanFileSize() { + $result = OC_Helper::humanFileSize(0); + $expected = '0 B'; + $this->assertEquals($result, $expected); + + $result = OC_Helper::humanFileSize(1024); + $expected = '1 kB'; + $this->assertEquals($result, $expected); + + $result = OC_Helper::humanFileSize(10000000); + $expected = '9.5 MB'; + $this->assertEquals($result, $expected); + + $result = OC_Helper::humanFileSize(500000000000); + $expected = '465.7 GB'; + $this->assertEquals($result, $expected); + } + + function testComputerFileSize() { + $result = OC_Helper::computerFileSize("0 B"); + $expected = '0.0'; + $this->assertEquals($result, $expected); + + $result = OC_Helper::computerFileSize("1 kB"); + $expected = '1024.0'; + $this->assertEquals($result, $expected); + + $result = OC_Helper::computerFileSize("9.5 MB"); + $expected = '9961472.0'; + $this->assertEquals($result, $expected); + + $result = OC_Helper::computerFileSize("465.7 GB"); + $expected = '500041567436.8'; + $this->assertEquals($result, $expected); + } + + function testGetMimeType() { + $result = OC_Helper::getMimeType("./data/"); + $expected = 'httpd/unix-directory'; + $this->assertEquals($result, $expected); + + $result = OC_Helper::getMimeType("./data/data.tar.gz"); + $expected = 'application/x-gzip'; + $this->assertEquals($result, $expected); + + $result = OC_Helper::getMimeType("./data/data.zip"); + $expected = 'application/zip'; + $this->assertEquals($result, $expected); + + $result = OC_Helper::getMimeType("./data/logo-wide.svg"); + $expected = 'image/svg+xml'; + $this->assertEquals($result, $expected); + + $result = OC_Helper::getMimeType("./data/logo-wide.png"); + $expected = 'image/png'; + $this->assertEquals($result, $expected); + } + + function testGetStringMimeType() { + $result = OC_Helper::getStringMimeType("/data/data.tar.gz"); + $expected = 'text/plain; charset=us-ascii'; + $this->assertEquals($result, $expected); + } + + function testIssubdirectory() { + $result = OC_Helper::issubdirectory("./data/", "/anotherDirectory/"); + $this->assertFalse($result); + + $result = OC_Helper::issubdirectory("./data/", "./data/"); + $this->assertTrue($result); + + mkdir("data/TestSubdirectory", 0777); + $result = OC_Helper::issubdirectory("data/TestSubdirectory/", "data"); + rmdir("data/TestSubdirectory"); + $this->assertTrue($result); + } + + function testMb_array_change_key_case() { + $arrayStart = array( + "Foo" => "bar", + "Bar" => "foo", + ); + $arrayResult = array( + "foo" => "bar", + "bar" => "foo", + ); + $result = OC_Helper::mb_array_change_key_case($arrayStart); + $expected = $arrayResult; + $this->assertEquals($result, $expected); + + $arrayStart = array( + "foo" => "bar", + "bar" => "foo", + ); + $arrayResult = array( + "FOO" => "bar", + "BAR" => "foo", + ); + $result = OC_Helper::mb_array_change_key_case($arrayStart, MB_CASE_UPPER); + $expected = $arrayResult; + $this->assertEquals($result, $expected); + } + + function testMb_substr_replace() { + $result = OC_Helper::mb_substr_replace("This is a teststring", "string", 5); + $expected = "This string is a teststring"; + $this->assertEquals($result, $expected); + } + + function testMb_str_replace() { + $result = OC_Helper::mb_str_replace("teststring", "string", "This is a teststring"); + $expected = "This is a string"; + $this->assertEquals($result, $expected); + } + + function testRecursiveArraySearch() { + $haystack = array( + "Foo" => "own", + "Bar" => "Cloud", + ); + + $result = OC_Helper::recursiveArraySearch($haystack, "own"); + $expected = "Foo"; + $this->assertEquals($result, $expected); + + $result = OC_Helper::recursiveArraySearch($haystack, "NotFound"); + $this->assertFalse($result); + } +} \ No newline at end of file -- GitLab From 41d14948983a42b942b1a0d260c3af803e6cc098 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sat, 13 Oct 2012 16:53:36 +0300 Subject: [PATCH 038/576] Remove not reliable test --- tests/lib/helper.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/lib/helper.php b/tests/lib/helper.php index b12f8d929b7..62b974b9191 100644 --- a/tests/lib/helper.php +++ b/tests/lib/helper.php @@ -7,11 +7,6 @@ */ class Test_Helper extends UnitTestCase { - function testMakeURLAbsolute() { - $result = OC_Helper::makeURLAbsolute("/index.php?someParameter=value"); - $expected = 'http://localhost/index.php?someParameter=value'; - $this->assertEquals($result, $expected); - } function testHumanFileSize() { $result = OC_Helper::humanFileSize(0); -- GitLab From 730d7c4e7de3a07c95f38763b9cff842653fa69a Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sat, 13 Oct 2012 20:19:35 +0200 Subject: [PATCH 039/576] Disable loading apps before starting tests --- tests/bootstrap.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/bootstrap.php b/tests/bootstrap.php index f8364b71ef7..16ed6cdb3c7 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -1,5 +1,7 @@ Date: Sat, 13 Oct 2012 20:20:10 +0200 Subject: [PATCH 040/576] Give share test users a unique prefix --- tests/lib/share/share.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php index dc9a518d9db..3cad3a28680 100644 --- a/tests/lib/share/share.php +++ b/tests/lib/share/share.php @@ -33,10 +33,10 @@ class Test_Share extends UnitTestCase { public function setUp() { OC_User::clearBackends(); OC_User::useBackend('dummy'); - $this->user1 = uniqid('user_'); - $this->user2 = uniqid('user_'); - $this->user3 = uniqid('user_'); - $this->user4 = uniqid('user_'); + $this->user1 = uniqid('user1_'); + $this->user2 = uniqid('user2_'); + $this->user3 = uniqid('user3_'); + $this->user4 = uniqid('user4_'); OC_User::createUser($this->user1, 'pass'); OC_User::createUser($this->user2, 'pass'); OC_User::createUser($this->user3, 'pass'); -- GitLab From fea6ac46ef8d49ce5860979b02faeb60be845865 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sat, 13 Oct 2012 21:01:00 +0200 Subject: [PATCH 041/576] Change the Archive_Tar _addFile function to make it possible to use a different filename --- 3rdparty/Archive/Tar.php | 45 +++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/3rdparty/Archive/Tar.php b/3rdparty/Archive/Tar.php index 33c7d395d09..fd2d5d7d9b8 100644 --- a/3rdparty/Archive/Tar.php +++ b/3rdparty/Archive/Tar.php @@ -981,7 +981,7 @@ class Archive_Tar extends PEAR // }}} // {{{ _addFile() - function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir) + function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir, $v_stored_filename=null) { if (!$this->_file) { $this->_error('Invalid file descriptor'); @@ -993,28 +993,31 @@ class Archive_Tar extends PEAR return false; } - // ----- Calculate the stored filename - $p_filename = $this->_translateWinPath($p_filename, false);; - $v_stored_filename = $p_filename; - if (strcmp($p_filename, $p_remove_dir) == 0) { - return true; - } - if ($p_remove_dir != '') { - if (substr($p_remove_dir, -1) != '/') - $p_remove_dir .= '/'; + // ownCloud change to make it possible to specify the filename to use + if(is_null($v_stored_filename)) { + // ----- Calculate the stored filename + $p_filename = $this->_translateWinPath($p_filename, false); + $v_stored_filename = $p_filename; + if (strcmp($p_filename, $p_remove_dir) == 0) { + return true; + } + if ($p_remove_dir != '') { + if (substr($p_remove_dir, -1) != '/') + $p_remove_dir .= '/'; - if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir) - $v_stored_filename = substr($p_filename, strlen($p_remove_dir)); - } - $v_stored_filename = $this->_translateWinPath($v_stored_filename); - if ($p_add_dir != '') { - if (substr($p_add_dir, -1) == '/') - $v_stored_filename = $p_add_dir.$v_stored_filename; - else - $v_stored_filename = $p_add_dir.'/'.$v_stored_filename; - } + if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir) + $v_stored_filename = substr($p_filename, strlen($p_remove_dir)); + } + $v_stored_filename = $this->_translateWinPath($v_stored_filename); + if ($p_add_dir != '') { + if (substr($p_add_dir, -1) == '/') + $v_stored_filename = $p_add_dir.$v_stored_filename; + else + $v_stored_filename = $p_add_dir.'/'.$v_stored_filename; + } - $v_stored_filename = $this->_pathReduction($v_stored_filename); + $v_stored_filename = $this->_pathReduction($v_stored_filename); + } if ($this->_isArchive($p_filename)) { if (($v_file = @fopen($p_filename, "rb")) == 0) { -- GitLab From 5713dcfd11f6d0f57b6302bedeb22c18df5d73bb Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sat, 13 Oct 2012 21:02:12 +0200 Subject: [PATCH 042/576] Use $SERVERROOT/tests/data for testGetMimeType --- tests/lib/helper.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/lib/helper.php b/tests/lib/helper.php index 62b974b9191..cfb9a799579 100644 --- a/tests/lib/helper.php +++ b/tests/lib/helper.php @@ -45,23 +45,24 @@ class Test_Helper extends UnitTestCase { } function testGetMimeType() { - $result = OC_Helper::getMimeType("./data/"); + $dir=OC::$SERVERROOT.'/tests/data'; + $result = OC_Helper::getMimeType($dir."/"); $expected = 'httpd/unix-directory'; $this->assertEquals($result, $expected); - $result = OC_Helper::getMimeType("./data/data.tar.gz"); + $result = OC_Helper::getMimeType($dir."/data.tar.gz"); $expected = 'application/x-gzip'; $this->assertEquals($result, $expected); - $result = OC_Helper::getMimeType("./data/data.zip"); + $result = OC_Helper::getMimeType($dir."/data.zip"); $expected = 'application/zip'; $this->assertEquals($result, $expected); - $result = OC_Helper::getMimeType("./data/logo-wide.svg"); + $result = OC_Helper::getMimeType($dir."/logo-wide.svg"); $expected = 'image/svg+xml'; $this->assertEquals($result, $expected); - $result = OC_Helper::getMimeType("./data/logo-wide.png"); + $result = OC_Helper::getMimeType($dir."/logo-wide.png"); $expected = 'image/png'; $this->assertEquals($result, $expected); } @@ -136,4 +137,4 @@ class Test_Helper extends UnitTestCase { $result = OC_Helper::recursiveArraySearch($haystack, "NotFound"); $this->assertFalse($result); } -} \ No newline at end of file +} -- GitLab From 183cc22501b75ab8819971f70b88dbc010026ac1 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sat, 13 Oct 2012 22:03:44 +0200 Subject: [PATCH 043/576] Update SabreDAV to 1.7.1 --- 3rdparty/Sabre/CalDAV/Backend/Abstract.php | 190 ++- .../Sabre/CalDAV/Backend/BackendInterface.php | 231 ++++ .../CalDAV/Backend/NotificationSupport.php | 47 + 3rdparty/Sabre/CalDAV/Backend/PDO.php | 337 +++++- .../Sabre/CalDAV/Backend/SharingSupport.php | 238 ++++ 3rdparty/Sabre/CalDAV/Calendar.php | 63 +- 3rdparty/Sabre/CalDAV/CalendarObject.php | 22 +- 3rdparty/Sabre/CalDAV/CalendarQueryParser.php | 12 +- .../Sabre/CalDAV/CalendarQueryValidator.php | 28 +- 3rdparty/Sabre/CalDAV/CalendarRootNode.php | 13 +- .../CalDAV/Exception/InvalidComponentType.php | 32 + 3rdparty/Sabre/CalDAV/ICSExportPlugin.php | 6 +- 3rdparty/Sabre/CalDAV/ICalendar.php | 21 +- 3rdparty/Sabre/CalDAV/IShareableCalendar.php | 48 + 3rdparty/Sabre/CalDAV/ISharedCalendar.php | 22 + .../Sabre/CalDAV/Notifications/Collection.php | 169 +++ .../CalDAV/Notifications/ICollection.php | 22 + 3rdparty/Sabre/CalDAV/Notifications/INode.php | 38 + .../Notifications/INotificationType.php | 43 + 3rdparty/Sabre/CalDAV/Notifications/Node.php | 188 +++ .../Notifications/Notification/Invite.php | 276 +++++ .../Notification/InviteReply.php | 216 ++++ .../Notification/SystemStatus.php | 179 +++ 3rdparty/Sabre/CalDAV/Plugin.php | 579 +++++++-- .../CalDAV/Property/AllowedSharingModes.php | 72 ++ 3rdparty/Sabre/CalDAV/Property/Invite.php | 173 +++ .../Property/ScheduleCalendarTransp.php | 99 ++ 3rdparty/Sabre/CalDAV/Schedule/IMip.php | 18 +- 3rdparty/Sabre/CalDAV/Schedule/Outbox.php | 10 +- 3rdparty/Sabre/CalDAV/Server.php | 68 -- 3rdparty/Sabre/CalDAV/ShareableCalendar.php | 72 ++ 3rdparty/Sabre/CalDAV/SharedCalendar.php | 98 ++ 3rdparty/Sabre/CalDAV/SharingPlugin.php | 475 ++++++++ 3rdparty/Sabre/CalDAV/UserCalendars.php | 64 +- 3rdparty/Sabre/CalDAV/Version.php | 2 +- 3rdparty/Sabre/CalDAV/includes.php | 25 +- 3rdparty/Sabre/CardDAV/AddressBook.php | 4 +- 3rdparty/Sabre/CardDAV/Card.php | 16 +- 3rdparty/Sabre/CardDAV/Plugin.php | 55 +- 3rdparty/Sabre/CardDAV/VCFExportPlugin.php | 107 ++ 3rdparty/Sabre/CardDAV/Version.php | 2 +- 3rdparty/Sabre/CardDAV/includes.php | 1 + 3rdparty/Sabre/DAV/Browser/Plugin.php | 2 +- 3rdparty/Sabre/DAV/Client.php | 69 +- 3rdparty/Sabre/DAV/Collection.php | 6 +- 3rdparty/Sabre/DAV/Directory.php | 17 - ...Implemented.php => ReportNotSupported.php} | 4 +- 3rdparty/Sabre/DAV/FS/Directory.php | 5 +- 3rdparty/Sabre/DAV/FSExt/Directory.php | 5 +- 3rdparty/Sabre/DAV/FSExt/File.php | 32 +- 3rdparty/Sabre/DAV/ICollection.php | 5 +- 3rdparty/Sabre/DAV/IFile.php | 2 +- 3rdparty/Sabre/DAV/Locks/Plugin.php | 1 + 3rdparty/Sabre/DAV/Node.php | 2 +- 3rdparty/Sabre/DAV/ObjectTree.php | 26 +- 3rdparty/Sabre/DAV/PartialUpdate/IFile.php | 38 + 3rdparty/Sabre/DAV/PartialUpdate/Plugin.php | 209 ++++ 3rdparty/Sabre/DAV/Property.php | 12 +- 3rdparty/Sabre/DAV/Property/Href.php | 2 +- 3rdparty/Sabre/DAV/Property/HrefList.php | 2 +- 3rdparty/Sabre/DAV/Property/Response.php | 2 +- 3rdparty/Sabre/DAV/PropertyInterface.php | 21 + 3rdparty/Sabre/DAV/Server.php | 175 ++- 3rdparty/Sabre/DAV/ServerPlugin.php | 2 +- 3rdparty/Sabre/DAV/SimpleCollection.php | 5 +- 3rdparty/Sabre/DAV/SimpleDirectory.php | 21 - 3rdparty/Sabre/DAV/Version.php | 2 +- 3rdparty/Sabre/DAV/XMLUtil.php | 29 +- 3rdparty/Sabre/DAV/includes.php | 27 +- .../DAVACL/AbstractPrincipalCollection.php | 2 +- 3rdparty/Sabre/DAVACL/IACL.php | 2 +- 3rdparty/Sabre/DAVACL/Plugin.php | 54 +- 3rdparty/Sabre/DAVACL/Property/Acl.php | 10 +- 3rdparty/Sabre/DAVACL/Property/Principal.php | 4 +- 3rdparty/Sabre/DAVACL/Version.php | 2 +- 3rdparty/Sabre/HTTP/Request.php | 2 +- 3rdparty/Sabre/HTTP/Response.php | 7 +- 3rdparty/Sabre/HTTP/Version.php | 2 +- 3rdparty/Sabre/VObject/Component.php | 365 ------ 3rdparty/Sabre/VObject/Component/VAlarm.php | 102 -- .../Sabre/VObject/Component/VCalendar.php | 133 --- 3rdparty/Sabre/VObject/Component/VEvent.php | 71 -- 3rdparty/Sabre/VObject/Component/VJournal.php | 46 - 3rdparty/Sabre/VObject/Component/VTodo.php | 68 -- 3rdparty/Sabre/VObject/DateTimeParser.php | 181 --- 3rdparty/Sabre/VObject/Element.php | 16 - 3rdparty/Sabre/VObject/Element/DateTime.php | 37 - .../Sabre/VObject/Element/MultiDateTime.php | 17 - 3rdparty/Sabre/VObject/ElementList.php | 172 --- 3rdparty/Sabre/VObject/FreeBusyGenerator.php | 297 ----- 3rdparty/Sabre/VObject/Node.php | 149 --- 3rdparty/Sabre/VObject/Parameter.php | 84 -- 3rdparty/Sabre/VObject/ParseException.php | 12 - 3rdparty/Sabre/VObject/Property.php | 348 ------ 3rdparty/Sabre/VObject/Property/DateTime.php | 260 ---- .../Sabre/VObject/Property/MultiDateTime.php | 166 --- 3rdparty/Sabre/VObject/Reader.php | 183 --- 3rdparty/Sabre/VObject/RecurrenceIterator.php | 1043 ----------------- 3rdparty/Sabre/VObject/Version.php | 24 - 3rdparty/Sabre/VObject/WindowsTimezoneMap.php | 128 -- 3rdparty/Sabre/VObject/includes.php | 41 - 3rdparty/Sabre/autoload.php | 28 +- 102 files changed, 4658 insertions(+), 4502 deletions(-) create mode 100755 3rdparty/Sabre/CalDAV/Backend/BackendInterface.php create mode 100755 3rdparty/Sabre/CalDAV/Backend/NotificationSupport.php create mode 100755 3rdparty/Sabre/CalDAV/Backend/SharingSupport.php create mode 100755 3rdparty/Sabre/CalDAV/Exception/InvalidComponentType.php create mode 100755 3rdparty/Sabre/CalDAV/IShareableCalendar.php create mode 100755 3rdparty/Sabre/CalDAV/ISharedCalendar.php create mode 100755 3rdparty/Sabre/CalDAV/Notifications/Collection.php create mode 100755 3rdparty/Sabre/CalDAV/Notifications/ICollection.php create mode 100755 3rdparty/Sabre/CalDAV/Notifications/INode.php create mode 100755 3rdparty/Sabre/CalDAV/Notifications/INotificationType.php create mode 100755 3rdparty/Sabre/CalDAV/Notifications/Node.php create mode 100755 3rdparty/Sabre/CalDAV/Notifications/Notification/Invite.php create mode 100755 3rdparty/Sabre/CalDAV/Notifications/Notification/InviteReply.php create mode 100755 3rdparty/Sabre/CalDAV/Notifications/Notification/SystemStatus.php create mode 100755 3rdparty/Sabre/CalDAV/Property/AllowedSharingModes.php create mode 100755 3rdparty/Sabre/CalDAV/Property/Invite.php create mode 100755 3rdparty/Sabre/CalDAV/Property/ScheduleCalendarTransp.php delete mode 100755 3rdparty/Sabre/CalDAV/Server.php create mode 100755 3rdparty/Sabre/CalDAV/ShareableCalendar.php create mode 100755 3rdparty/Sabre/CalDAV/SharedCalendar.php create mode 100755 3rdparty/Sabre/CalDAV/SharingPlugin.php create mode 100755 3rdparty/Sabre/CardDAV/VCFExportPlugin.php delete mode 100755 3rdparty/Sabre/DAV/Directory.php rename 3rdparty/Sabre/DAV/Exception/{ReportNotImplemented.php => ReportNotSupported.php} (87%) create mode 100755 3rdparty/Sabre/DAV/PartialUpdate/IFile.php create mode 100755 3rdparty/Sabre/DAV/PartialUpdate/Plugin.php create mode 100755 3rdparty/Sabre/DAV/PropertyInterface.php delete mode 100755 3rdparty/Sabre/DAV/SimpleDirectory.php delete mode 100755 3rdparty/Sabre/VObject/Component.php delete mode 100755 3rdparty/Sabre/VObject/Component/VAlarm.php delete mode 100755 3rdparty/Sabre/VObject/Component/VCalendar.php delete mode 100755 3rdparty/Sabre/VObject/Component/VEvent.php delete mode 100755 3rdparty/Sabre/VObject/Component/VJournal.php delete mode 100755 3rdparty/Sabre/VObject/Component/VTodo.php delete mode 100755 3rdparty/Sabre/VObject/DateTimeParser.php delete mode 100755 3rdparty/Sabre/VObject/Element.php delete mode 100755 3rdparty/Sabre/VObject/Element/DateTime.php delete mode 100755 3rdparty/Sabre/VObject/Element/MultiDateTime.php delete mode 100755 3rdparty/Sabre/VObject/ElementList.php delete mode 100755 3rdparty/Sabre/VObject/FreeBusyGenerator.php delete mode 100755 3rdparty/Sabre/VObject/Node.php delete mode 100755 3rdparty/Sabre/VObject/Parameter.php delete mode 100755 3rdparty/Sabre/VObject/ParseException.php delete mode 100755 3rdparty/Sabre/VObject/Property.php delete mode 100755 3rdparty/Sabre/VObject/Property/DateTime.php delete mode 100755 3rdparty/Sabre/VObject/Property/MultiDateTime.php delete mode 100755 3rdparty/Sabre/VObject/Reader.php delete mode 100755 3rdparty/Sabre/VObject/RecurrenceIterator.php delete mode 100755 3rdparty/Sabre/VObject/Version.php delete mode 100755 3rdparty/Sabre/VObject/WindowsTimezoneMap.php delete mode 100755 3rdparty/Sabre/VObject/includes.php diff --git a/3rdparty/Sabre/CalDAV/Backend/Abstract.php b/3rdparty/Sabre/CalDAV/Backend/Abstract.php index 7aba1d69ffe..88e5b4a1a07 100755 --- a/3rdparty/Sabre/CalDAV/Backend/Abstract.php +++ b/3rdparty/Sabre/CalDAV/Backend/Abstract.php @@ -1,47 +1,19 @@ getCalendarObjects($calendarId); - /** - * Updates an existing calendarobject, based on it's uri. - * - * @param string $calendarId - * @param string $objectUri - * @param string $calendarData - * @return void - */ - abstract function updateCalendarObject($calendarId,$objectUri,$calendarData); + $validator = new Sabre_CalDAV_CalendarQueryValidator(); + + foreach($objects as $object) { + + if ($this->validateFilterForObject($object, $filters)) { + $result[] = $object['uri']; + } + + } + + return $result; + + } /** - * Deletes an existing calendar object. + * This method validates if a filters (as passed to calendarQuery) matches + * the given object. * - * @param string $calendarId - * @param string $objectUri - * @return void + * @param array $object + * @param array $filter + * @return bool */ - abstract function deleteCalendarObject($calendarId,$objectUri); + protected function validateFilterForObject(array $object, array $filters) { + + // Unfortunately, setting the 'calendardata' here is optional. If + // it was excluded, we actually need another call to get this as + // well. + if (!isset($object['calendardata'])) { + $object = $this->getCalendarObject($object['calendarid'], $object['uri']); + } + + $data = is_resource($object['calendardata'])?stream_get_contents($object['calendardata']):$object['calendardata']; + $vObject = VObject\Reader::read($data); + + $validator = new Sabre_CalDAV_CalendarQueryValidator(); + return $validator->validate($vObject, $filters); + + } + } diff --git a/3rdparty/Sabre/CalDAV/Backend/BackendInterface.php b/3rdparty/Sabre/CalDAV/Backend/BackendInterface.php new file mode 100755 index 00000000000..881538ab60e --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Backend/BackendInterface.php @@ -0,0 +1,231 @@ + array( + * '{DAV:}displayname' => null, + * ), + * 424 => array( + * '{DAV:}owner' => null, + * ) + * ) + * + * In this example it was forbidden to update {DAV:}displayname. + * (403 Forbidden), which in turn also caused {DAV:}owner to fail + * (424 Failed Dependency) because the request needs to be atomic. + * + * @param mixed $calendarId + * @param array $mutations + * @return bool|array + */ + public function updateCalendar($calendarId, array $mutations); + + /** + * Delete a calendar and all it's objects + * + * @param mixed $calendarId + * @return void + */ + public function deleteCalendar($calendarId); + + /** + * Returns all calendar objects within a calendar. + * + * Every item contains an array with the following keys: + * * id - unique identifier which will be used for subsequent updates + * * calendardata - The iCalendar-compatible calendar data + * * uri - a unique key which will be used to construct the uri. This can be any arbitrary string. + * * lastmodified - a timestamp of the last modification time + * * etag - An arbitrary string, surrounded by double-quotes. (e.g.: + * ' "abcdef"') + * * calendarid - The calendarid as it was passed to this function. + * * size - The size of the calendar objects, in bytes. + * + * Note that the etag is optional, but it's highly encouraged to return for + * speed reasons. + * + * The calendardata is also optional. If it's not returned + * 'getCalendarObject' will be called later, which *is* expected to return + * calendardata. + * + * If neither etag or size are specified, the calendardata will be + * used/fetched to determine these numbers. If both are specified the + * amount of times this is needed is reduced by a great degree. + * + * @param mixed $calendarId + * @return array + */ + public function getCalendarObjects($calendarId); + + /** + * Returns information from a single calendar object, based on it's object + * uri. + * + * The returned array must have the same keys as getCalendarObjects. The + * 'calendardata' object is required here though, while it's not required + * for getCalendarObjects. + * + * @param mixed $calendarId + * @param string $objectUri + * @return array + */ + public function getCalendarObject($calendarId,$objectUri); + + /** + * Creates a new calendar object. + * + * It is possible return an etag from this function, which will be used in + * the response to this PUT request. Note that the ETag must be surrounded + * by double-quotes. + * + * However, you should only really return this ETag if you don't mangle the + * calendar-data. If the result of a subsequent GET to this object is not + * the exact same as this request body, you should omit the ETag. + * + * @param mixed $calendarId + * @param string $objectUri + * @param string $calendarData + * @return string|null + */ + public function createCalendarObject($calendarId,$objectUri,$calendarData); + + /** + * Updates an existing calendarobject, based on it's uri. + * + * It is possible return an etag from this function, which will be used in + * the response to this PUT request. Note that the ETag must be surrounded + * by double-quotes. + * + * However, you should only really return this ETag if you don't mangle the + * calendar-data. If the result of a subsequent GET to this object is not + * the exact same as this request body, you should omit the ETag. + * + * @param mixed $calendarId + * @param string $objectUri + * @param string $calendarData + * @return string|null + */ + public function updateCalendarObject($calendarId,$objectUri,$calendarData); + + /** + * Deletes an existing calendar object. + * + * @param mixed $calendarId + * @param string $objectUri + * @return void + */ + public function deleteCalendarObject($calendarId,$objectUri); + + /** + * Performs a calendar-query on the contents of this calendar. + * + * The calendar-query is defined in RFC4791 : CalDAV. Using the + * calendar-query it is possible for a client to request a specific set of + * object, based on contents of iCalendar properties, date-ranges and + * iCalendar component types (VTODO, VEVENT). + * + * This method should just return a list of (relative) urls that match this + * query. + * + * The list of filters are specified as an array. The exact array is + * documented by Sabre_CalDAV_CalendarQueryParser. + * + * Note that it is extremely likely that getCalendarObject for every path + * returned from this method will be called almost immediately after. You + * may want to anticipate this to speed up these requests. + * + * This method provides a default implementation, which parses *all* the + * iCalendar objects in the specified calendar. + * + * This default may well be good enough for personal use, and calendars + * that aren't very large. But if you anticipate high usage, big calendars + * or high loads, you are strongly adviced to optimize certain paths. + * + * The best way to do so is override this method and to optimize + * specifically for 'common filters'. + * + * Requests that are extremely common are: + * * requests for just VEVENTS + * * requests for just VTODO + * * requests with a time-range-filter on either VEVENT or VTODO. + * + * ..and combinations of these requests. It may not be worth it to try to + * handle every possible situation and just rely on the (relatively + * easy to use) CalendarQueryValidator to handle the rest. + * + * Note that especially time-range-filters may be difficult to parse. A + * time-range filter specified on a VEVENT must for instance also handle + * recurrence rules correctly. + * A good example of how to interprete all these filters can also simply + * be found in Sabre_CalDAV_CalendarQueryFilter. This class is as correct + * as possible, so it gives you a good idea on what type of stuff you need + * to think of. + * + * @param mixed $calendarId + * @param array $filters + * @return array + */ + public function calendarQuery($calendarId, array $filters); + +} diff --git a/3rdparty/Sabre/CalDAV/Backend/NotificationSupport.php b/3rdparty/Sabre/CalDAV/Backend/NotificationSupport.php new file mode 100755 index 00000000000..d5a1409d9b9 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Backend/NotificationSupport.php @@ -0,0 +1,47 @@ + $row['principaluri'], '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}getctag' => $row['ctag']?$row['ctag']:'0', '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet($components), + '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-calendar-transp' => new Sabre_CalDAV_Property_ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'), ); @@ -142,11 +157,13 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { 'principaluri', 'uri', 'ctag', + 'transparent', ); $values = array( ':principaluri' => $principalUri, ':uri' => $calendarUri, ':ctag' => 1, + ':transparent' => 0, ); // Default value @@ -160,6 +177,10 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { } $values[':components'] = implode(',',$properties[$sccs]->getValue()); } + $transp = '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-calendar-transp'; + if (isset($properties[$transp])) { + $values[':transparent'] = $properties[$transp]->getValue()==='transparent'; + } foreach($this->propertyMap as $xmlName=>$dbName) { if (isset($properties[$xmlName])) { @@ -225,17 +246,25 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { foreach($mutations as $propertyName=>$propertyValue) { - // We don't know about this property. - if (!isset($this->propertyMap[$propertyName])) { - $hasError = true; - $result[403][$propertyName] = null; - unset($mutations[$propertyName]); - continue; + switch($propertyName) { + case '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-calendar-transp' : + $fieldName = 'transparent'; + $newValues[$fieldName] = $propertyValue->getValue()==='transparent'; + break; + default : + // Checking the property map + if (!isset($this->propertyMap[$propertyName])) { + // We don't know about this property. + $hasError = true; + $result[403][$propertyName] = null; + unset($mutations[$propertyName]); + continue; + } + + $fieldName = $this->propertyMap[$propertyName]; + $newValues[$fieldName] = $propertyValue; } - $fieldName = $this->propertyMap[$propertyName]; - $newValues[$fieldName] = $propertyValue; - } // If there were any errors we need to fail the request @@ -316,9 +345,22 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { */ public function getCalendarObjects($calendarId) { - $stmt = $this->pdo->prepare('SELECT * FROM '.$this->calendarObjectTableName.' WHERE calendarid = ?'); + $stmt = $this->pdo->prepare('SELECT id, uri, lastmodified, etag, calendarid, size FROM '.$this->calendarObjectTableName.' WHERE calendarid = ?'); $stmt->execute(array($calendarId)); - return $stmt->fetchAll(); + + $result = array(); + foreach($stmt->fetchAll(\PDO::FETCH_ASSOC) as $row) { + $result[] = array( + 'id' => $row['id'], + 'uri' => $row['uri'], + 'lastmodified' => $row['lastmodified'], + 'etag' => '"' . $row['etag'] . '"', + 'calendarid' => $row['calendarid'], + 'size' => (int)$row['size'], + ); + } + + return $result; } @@ -336,44 +378,166 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { */ public function getCalendarObject($calendarId,$objectUri) { - $stmt = $this->pdo->prepare('SELECT * FROM '.$this->calendarObjectTableName.' WHERE calendarid = ? AND uri = ?'); + $stmt = $this->pdo->prepare('SELECT id, uri, lastmodified, etag, calendarid, size, calendardata FROM '.$this->calendarObjectTableName.' WHERE calendarid = ? AND uri = ?'); $stmt->execute(array($calendarId, $objectUri)); - return $stmt->fetch(); + $row = $stmt->fetch(\PDO::FETCH_ASSOC); + + if(!$row) return null; + + return array( + 'id' => $row['id'], + 'uri' => $row['uri'], + 'lastmodified' => $row['lastmodified'], + 'etag' => '"' . $row['etag'] . '"', + 'calendarid' => $row['calendarid'], + 'size' => (int)$row['size'], + 'calendardata' => $row['calendardata'], + ); } + /** * Creates a new calendar object. * - * @param string $calendarId + * It is possible return an etag from this function, which will be used in + * the response to this PUT request. Note that the ETag must be surrounded + * by double-quotes. + * + * However, you should only really return this ETag if you don't mangle the + * calendar-data. If the result of a subsequent GET to this object is not + * the exact same as this request body, you should omit the ETag. + * + * @param mixed $calendarId * @param string $objectUri * @param string $calendarData - * @return void + * @return string|null */ public function createCalendarObject($calendarId,$objectUri,$calendarData) { - $stmt = $this->pdo->prepare('INSERT INTO '.$this->calendarObjectTableName.' (calendarid, uri, calendardata, lastmodified) VALUES (?,?,?,?)'); - $stmt->execute(array($calendarId,$objectUri,$calendarData,time())); + $extraData = $this->getDenormalizedData($calendarData); + + $stmt = $this->pdo->prepare('INSERT INTO '.$this->calendarObjectTableName.' (calendarid, uri, calendardata, lastmodified, etag, size, componenttype, firstoccurence, lastoccurence) VALUES (?,?,?,?,?,?,?,?,?)'); + $stmt->execute(array( + $calendarId, + $objectUri, + $calendarData, + time(), + $extraData['etag'], + $extraData['size'], + $extraData['componentType'], + $extraData['firstOccurence'], + $extraData['lastOccurence'], + )); $stmt = $this->pdo->prepare('UPDATE '.$this->calendarTableName.' SET ctag = ctag + 1 WHERE id = ?'); $stmt->execute(array($calendarId)); + return '"' . $extraData['etag'] . '"'; + } /** * Updates an existing calendarobject, based on it's uri. * - * @param string $calendarId + * It is possible return an etag from this function, which will be used in + * the response to this PUT request. Note that the ETag must be surrounded + * by double-quotes. + * + * However, you should only really return this ETag if you don't mangle the + * calendar-data. If the result of a subsequent GET to this object is not + * the exact same as this request body, you should omit the ETag. + * + * @param mixed $calendarId * @param string $objectUri * @param string $calendarData - * @return void + * @return string|null */ public function updateCalendarObject($calendarId,$objectUri,$calendarData) { - $stmt = $this->pdo->prepare('UPDATE '.$this->calendarObjectTableName.' SET calendardata = ?, lastmodified = ? WHERE calendarid = ? AND uri = ?'); - $stmt->execute(array($calendarData,time(),$calendarId,$objectUri)); + $extraData = $this->getDenormalizedData($calendarData); + + $stmt = $this->pdo->prepare('UPDATE '.$this->calendarObjectTableName.' SET calendardata = ?, lastmodified = ?, etag = ?, size = ?, componenttype = ?, firstoccurence = ?, lastoccurence = ? WHERE calendarid = ? AND uri = ?'); + $stmt->execute(array($calendarData,time(), $extraData['etag'], $extraData['size'], $extraData['componentType'], $extraData['firstOccurence'], $extraData['lastOccurence'] ,$calendarId,$objectUri)); $stmt = $this->pdo->prepare('UPDATE '.$this->calendarTableName.' SET ctag = ctag + 1 WHERE id = ?'); $stmt->execute(array($calendarId)); + return '"' . $extraData['etag'] . '"'; + + } + + /** + * Parses some information from calendar objects, used for optimized + * calendar-queries. + * + * Returns an array with the following keys: + * * etag + * * size + * * componentType + * * firstOccurence + * * lastOccurence + * + * @param string $calendarData + * @return array + */ + protected function getDenormalizedData($calendarData) { + + $vObject = VObject\Reader::read($calendarData); + $componentType = null; + $component = null; + $firstOccurence = null; + $lastOccurence = null; + foreach($vObject->getComponents() as $component) { + if ($component->name!=='VTIMEZONE') { + $componentType = $component->name; + break; + } + } + if (!$componentType) { + throw new Sabre_DAV_Exception_BadRequest('Calendar objects must have a VJOURNAL, VEVENT or VTODO component'); + } + if ($componentType === 'VEVENT') { + $firstOccurence = $component->DTSTART->getDateTime()->getTimeStamp(); + // Finding the last occurence is a bit harder + if (!isset($component->RRULE)) { + if (isset($component->DTEND)) { + $lastOccurence = $component->DTEND->getDateTime()->getTimeStamp(); + } elseif (isset($component->DURATION)) { + $endDate = clone $component->DTSTART->getDateTime(); + $endDate->add(VObject\DateTimeParser::parse($component->DURATION->value)); + $lastOccurence = $endDate->getTimeStamp(); + } elseif ($component->DTSTART->getDateType()===VObject\Property\DateTime::DATE) { + $endDate = clone $component->DTSTART->getDateTime(); + $endDate->modify('+1 day'); + $lastOccurence = $endDate->getTimeStamp(); + } else { + $lastOccurence = $firstOccurence; + } + } else { + $it = new VObject\RecurrenceIterator($vObject, (string)$component->UID); + $maxDate = new DateTime(self::MAX_DATE); + if ($it->isInfinite()) { + $lastOccurence = $maxDate->getTimeStamp(); + } else { + $end = $it->getDtEnd(); + while($it->valid() && $end < $maxDate) { + $end = $it->getDtEnd(); + $it->next(); + + } + $lastOccurence = $end->getTimeStamp(); + } + + } + } + + return array( + 'etag' => md5($calendarData), + 'size' => strlen($calendarData), + 'componentType' => $componentType, + 'firstOccurence' => $firstOccurence, + 'lastOccurence' => $lastOccurence, + ); + } /** @@ -392,5 +556,132 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { } + /** + * Performs a calendar-query on the contents of this calendar. + * + * The calendar-query is defined in RFC4791 : CalDAV. Using the + * calendar-query it is possible for a client to request a specific set of + * object, based on contents of iCalendar properties, date-ranges and + * iCalendar component types (VTODO, VEVENT). + * + * This method should just return a list of (relative) urls that match this + * query. + * + * The list of filters are specified as an array. The exact array is + * documented by Sabre_CalDAV_CalendarQueryParser. + * + * Note that it is extremely likely that getCalendarObject for every path + * returned from this method will be called almost immediately after. You + * may want to anticipate this to speed up these requests. + * + * This method provides a default implementation, which parses *all* the + * iCalendar objects in the specified calendar. + * + * This default may well be good enough for personal use, and calendars + * that aren't very large. But if you anticipate high usage, big calendars + * or high loads, you are strongly adviced to optimize certain paths. + * + * The best way to do so is override this method and to optimize + * specifically for 'common filters'. + * + * Requests that are extremely common are: + * * requests for just VEVENTS + * * requests for just VTODO + * * requests with a time-range-filter on a VEVENT. + * + * ..and combinations of these requests. It may not be worth it to try to + * handle every possible situation and just rely on the (relatively + * easy to use) CalendarQueryValidator to handle the rest. + * + * Note that especially time-range-filters may be difficult to parse. A + * time-range filter specified on a VEVENT must for instance also handle + * recurrence rules correctly. + * A good example of how to interprete all these filters can also simply + * be found in Sabre_CalDAV_CalendarQueryFilter. This class is as correct + * as possible, so it gives you a good idea on what type of stuff you need + * to think of. + * + * This specific implementation (for the PDO) backend optimizes filters on + * specific components, and VEVENT time-ranges. + * + * @param string $calendarId + * @param array $filters + * @return array + */ + public function calendarQuery($calendarId, array $filters) { + + $result = array(); + $validator = new Sabre_CalDAV_CalendarQueryValidator(); + + $componentType = null; + $requirePostFilter = true; + $timeRange = null; + + // if no filters were specified, we don't need to filter after a query + if (!$filters['prop-filters'] && !$filters['comp-filters']) { + $requirePostFilter = false; + } + + // Figuring out if there's a component filter + if (count($filters['comp-filters']) > 0 && !$filters['comp-filters'][0]['is-not-defined']) { + $componentType = $filters['comp-filters'][0]['name']; + + // Checking if we need post-filters + if (!$filters['prop-filters'] && !$filters['comp-filters'][0]['comp-filters'] && !$filters['comp-filters'][0]['time-range'] && !$filters['comp-filters'][0]['prop-filters']) { + $requirePostFilter = false; + } + // There was a time-range filter + if ($componentType == 'VEVENT' && isset($filters['comp-filters'][0]['time-range'])) { + $timeRange = $filters['comp-filters'][0]['time-range']; + + // If start time OR the end time is not specified, we can do a + // 100% accurate mysql query. + if (!$filters['prop-filters'] && !$filters['comp-filters'][0]['comp-filters'] && !$filters['comp-filters'][0]['prop-filters'] && (!$timeRange['start'] || !$timeRange['end'])) { + $requirePostFilter = false; + } + } + } + + if ($requirePostFilter) { + $query = "SELECT uri, calendardata FROM ".$this->calendarObjectTableName." WHERE calendarid = :calendarid"; + } else { + $query = "SELECT uri FROM ".$this->calendarObjectTableName." WHERE calendarid = :calendarid"; + } + + $values = array( + 'calendarid' => $calendarId, + ); + + if ($componentType) { + $query.=" AND componenttype = :componenttype"; + $values['componenttype'] = $componentType; + } + + if ($timeRange && $timeRange['start']) { + $query.=" AND lastoccurence > :startdate"; + $values['startdate'] = $timeRange['start']->getTimeStamp(); + } + if ($timeRange && $timeRange['end']) { + $query.=" AND firstoccurence < :enddate"; + $values['enddate'] = $timeRange['end']->getTimeStamp(); + } + + $stmt = $this->pdo->prepare($query); + $stmt->execute($values); + + $result = array(); + while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + if ($requirePostFilter) { + if (!$this->validateFilterForObject($row, $filters)) { + continue; + } + } + $result[] = $row['uri']; + + } + + return $result; + + } } diff --git a/3rdparty/Sabre/CalDAV/Backend/SharingSupport.php b/3rdparty/Sabre/CalDAV/Backend/SharingSupport.php new file mode 100755 index 00000000000..f73f0ff3d8a --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Backend/SharingSupport.php @@ -0,0 +1,238 @@ +caldavBackend = $caldavBackend; $this->principalBackend = $principalBackend; $this->calendarInfo = $calendarInfo; - } /** @@ -92,9 +91,6 @@ class Sabre_CalDAV_Calendar implements Sabre_CalDAV_ICalendar, Sabre_DAV_IProper case '{urn:ietf:params:xml:ns:caldav}supported-collation-set' : $response[$prop] = new Sabre_CalDAV_Property_SupportedCollationSet(); break; - case '{DAV:}owner' : - $response[$prop] = new Sabre_DAVACL_Property_Principal(Sabre_DAVACL_Property_Principal::HREF,$this->calendarInfo['principaluri']); - break; default : if (isset($this->calendarInfo[$prop])) $response[$prop] = $this->calendarInfo[$prop]; break; @@ -110,12 +106,21 @@ class Sabre_CalDAV_Calendar implements Sabre_CalDAV_ICalendar, Sabre_DAV_IProper * The contained calendar objects are for example Events or Todo's. * * @param string $name - * @return Sabre_DAV_ICalendarObject + * @return Sabre_CalDAV_ICalendarObject */ public function getChild($name) { $obj = $this->caldavBackend->getCalendarObject($this->calendarInfo['id'],$name); if (!$obj) throw new Sabre_DAV_Exception_NotFound('Calendar object not found'); + + $obj['acl'] = $this->getACL(); + // Removing the irrelivant + foreach($obj['acl'] as $key=>$acl) { + if ($acl['privilege'] === '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}read-free-busy') { + unset($obj['acl'][$key]); + } + } + return new Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj); } @@ -130,6 +135,13 @@ class Sabre_CalDAV_Calendar implements Sabre_CalDAV_ICalendar, Sabre_DAV_IProper $objs = $this->caldavBackend->getCalendarObjects($this->calendarInfo['id']); $children = array(); foreach($objs as $obj) { + $obj['acl'] = $this->getACL(); + // Removing the irrelivant + foreach($obj['acl'] as $key=>$acl) { + if ($acl['privilege'] === '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}read-free-busy') { + unset($obj['acl'][$key]); + } + } $children[] = new Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj); } return $children; @@ -262,27 +274,27 @@ class Sabre_CalDAV_Calendar implements Sabre_CalDAV_ICalendar, Sabre_DAV_IProper return array( array( 'privilege' => '{DAV:}read', - 'principal' => $this->calendarInfo['principaluri'], + 'principal' => $this->getOwner(), 'protected' => true, ), array( 'privilege' => '{DAV:}write', - 'principal' => $this->calendarInfo['principaluri'], + 'principal' => $this->getOwner(), 'protected' => true, ), array( 'privilege' => '{DAV:}read', - 'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write', + 'principal' => $this->getOwner() . '/calendar-proxy-write', 'protected' => true, ), array( 'privilege' => '{DAV:}write', - 'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write', + 'principal' => $this->getOwner() . '/calendar-proxy-write', 'protected' => true, ), array( 'privilege' => '{DAV:}read', - 'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-read', + 'principal' => $this->getOwner() . '/calendar-proxy-read', 'protected' => true, ), array( @@ -340,4 +352,27 @@ class Sabre_CalDAV_Calendar implements Sabre_CalDAV_ICalendar, Sabre_DAV_IProper } + /** + * Performs a calendar-query on the contents of this calendar. + * + * The calendar-query is defined in RFC4791 : CalDAV. Using the + * calendar-query it is possible for a client to request a specific set of + * object, based on contents of iCalendar properties, date-ranges and + * iCalendar component types (VTODO, VEVENT). + * + * This method should just return a list of (relative) urls that match this + * query. + * + * The list of filters are specified as an array. The exact array is + * documented by Sabre_CalDAV_CalendarQueryParser. + * + * @param array $filters + * @return array + */ + public function calendarQuery(array $filters) { + + return $this->caldavBackend->calendarQuery($this->calendarInfo['id'], $filters); + + } + } diff --git a/3rdparty/Sabre/CalDAV/CalendarObject.php b/3rdparty/Sabre/CalDAV/CalendarObject.php index 72f0a578d16..40bd8588c70 100755 --- a/3rdparty/Sabre/CalDAV/CalendarObject.php +++ b/3rdparty/Sabre/CalDAV/CalendarObject.php @@ -6,13 +6,13 @@ * @package Sabre * @subpackage CalDAV * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. - * @author Evert Pot (http://www.rooftopsolutions.nl/) + * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV_ICalendarObject, Sabre_DAVACL_IACL { /** - * Sabre_CalDAV_Backend_Abstract + * Sabre_CalDAV_Backend_BackendInterface * * @var array */ @@ -35,11 +35,11 @@ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV /** * Constructor * - * @param Sabre_CalDAV_Backend_Abstract $caldavBackend + * @param Sabre_CalDAV_Backend_BackendInterface $caldavBackend * @param array $calendarInfo * @param array $objectData */ - public function __construct(Sabre_CalDAV_Backend_Abstract $caldavBackend,array $calendarInfo,array $objectData) { + public function __construct(Sabre_CalDAV_Backend_BackendInterface $caldavBackend,array $calendarInfo,array $objectData) { $this->caldavBackend = $caldavBackend; @@ -85,8 +85,8 @@ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV /** * Updates the ICalendar-formatted object * - * @param string $calendarData - * @return void + * @param string|resource $calendarData + * @return string */ public function put($calendarData) { @@ -119,7 +119,7 @@ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV */ public function getContentType() { - return 'text/calendar'; + return 'text/calendar; charset=utf-8'; } @@ -143,7 +143,7 @@ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV /** * Returns the last modification date as a unix timestamp * - * @return time + * @return int */ public function getLastModified() { @@ -206,6 +206,12 @@ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV */ public function getACL() { + // An alternative acl may be specified in the object data. + if (isset($this->objectData['acl'])) { + return $this->objectData['acl']; + } + + // The default ACL return array( array( 'privilege' => '{DAV:}read', diff --git a/3rdparty/Sabre/CalDAV/CalendarQueryParser.php b/3rdparty/Sabre/CalDAV/CalendarQueryParser.php index bd0d343382f..b95095f96fc 100755 --- a/3rdparty/Sabre/CalDAV/CalendarQueryParser.php +++ b/3rdparty/Sabre/CalDAV/CalendarQueryParser.php @@ -1,5 +1,7 @@ xpath = new DOMXPath($dom); $this->xpath->registerNameSpace('cal',Sabre_CalDAV_Plugin::NS_CALDAV); - $this->xpath->registerNameSpace('dav','urn:DAV'); + $this->xpath->registerNameSpace('dav','DAV:'); } @@ -241,12 +243,12 @@ class Sabre_CalDAV_CalendarQueryParser { $timeRangeNode = $timeRangeNodes->item(0); if ($start = $timeRangeNode->getAttribute('start')) { - $start = Sabre_VObject_DateTimeParser::parseDateTime($start); + $start = VObject\DateTimeParser::parseDateTime($start); } else { $start = null; } if ($end = $timeRangeNode->getAttribute('end')) { - $end = Sabre_VObject_DateTimeParser::parseDateTime($end); + $end = VObject\DateTimeParser::parseDateTime($end); } else { $end = null; } @@ -274,13 +276,13 @@ class Sabre_CalDAV_CalendarQueryParser { if(!$start) { throw new Sabre_DAV_Exception_BadRequest('The "start" attribute is required for the CALDAV:expand element'); } - $start = Sabre_VObject_DateTimeParser::parseDateTime($start); + $start = VObject\DateTimeParser::parseDateTime($start); $end = $parentNode->getAttribute('end'); if(!$end) { throw new Sabre_DAV_Exception_BadRequest('The "end" attribute is required for the CALDAV:expand element'); } - $end = Sabre_VObject_DateTimeParser::parseDateTime($end); + $end = VObject\DateTimeParser::parseDateTime($end); if ($end <= $start) { throw new Sabre_DAV_Exception_BadRequest('The end-date must be larger than the start-date in the expand element.'); diff --git a/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php b/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php index 8f674840e87..53e86fc509f 100755 --- a/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php +++ b/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php @@ -1,5 +1,7 @@ parent->name === 'VEVENT' && $component->parent->RRULE) { // Fire up the iterator! - $it = new Sabre_VObject_RecurrenceIterator($component->parent->parent, (string)$component->parent->UID); + $it = new VObject\RecurrenceIterator($component->parent->parent, (string)$component->parent->UID); while($it->valid()) { $expandedEvent = $it->getEventObject(); diff --git a/3rdparty/Sabre/CalDAV/CalendarRootNode.php b/3rdparty/Sabre/CalDAV/CalendarRootNode.php index 3907913cc78..eb62eea75a6 100755 --- a/3rdparty/Sabre/CalDAV/CalendarRootNode.php +++ b/3rdparty/Sabre/CalDAV/CalendarRootNode.php @@ -1,14 +1,15 @@ caldavBackend = $caldavBackend; diff --git a/3rdparty/Sabre/CalDAV/Exception/InvalidComponentType.php b/3rdparty/Sabre/CalDAV/Exception/InvalidComponentType.php new file mode 100755 index 00000000000..4ac617d22f0 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Exception/InvalidComponentType.php @@ -0,0 +1,32 @@ +ownerDocument; + + $np = $doc->createElementNS(Sabre_CalDAV_Plugin::NS_CALDAV,'cal:supported-calendar-component'); + $errorNode->appendChild($np); + + } + +} \ No newline at end of file diff --git a/3rdparty/Sabre/CalDAV/ICSExportPlugin.php b/3rdparty/Sabre/CalDAV/ICSExportPlugin.php index ec42b406b2f..d3e4e7b7201 100755 --- a/3rdparty/Sabre/CalDAV/ICSExportPlugin.php +++ b/3rdparty/Sabre/CalDAV/ICSExportPlugin.php @@ -1,5 +1,7 @@ version = '2.0'; if (Sabre_DAV_Server::$exposeVersion) { $calendar->prodid = '-//SabreDAV//SabreDAV ' . Sabre_DAV_Version::VERSION . '//EN'; @@ -103,7 +105,7 @@ class Sabre_CalDAV_ICSExportPlugin extends Sabre_DAV_ServerPlugin { } $nodeData = $node[200]['{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}calendar-data']; - $nodeComp = Sabre_VObject_Reader::read($nodeData); + $nodeComp = VObject\Reader::read($nodeData); foreach($nodeComp->children() as $child) { diff --git a/3rdparty/Sabre/CalDAV/ICalendar.php b/3rdparty/Sabre/CalDAV/ICalendar.php index 15d51ebcf79..40aa9f9579c 100755 --- a/3rdparty/Sabre/CalDAV/ICalendar.php +++ b/3rdparty/Sabre/CalDAV/ICalendar.php @@ -8,11 +8,28 @@ * @package Sabre * @subpackage CalDAV * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. - * @author Evert Pot (http://www.rooftopsolutions.nl/) + * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ interface Sabre_CalDAV_ICalendar extends Sabre_DAV_ICollection { - + /** + * Performs a calendar-query on the contents of this calendar. + * + * The calendar-query is defined in RFC4791 : CalDAV. Using the + * calendar-query it is possible for a client to request a specific set of + * object, based on contents of iCalendar properties, date-ranges and + * iCalendar component types (VTODO, VEVENT). + * + * This method should just return a list of (relative) urls that match this + * query. + * + * The list of filters are specified as an array. The exact array is + * documented by Sabre_CalDAV_CalendarQueryParser. + * + * @param array $filters + * @return array + */ + public function calendarQuery(array $filters); } diff --git a/3rdparty/Sabre/CalDAV/IShareableCalendar.php b/3rdparty/Sabre/CalDAV/IShareableCalendar.php new file mode 100755 index 00000000000..5b55788c014 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/IShareableCalendar.php @@ -0,0 +1,48 @@ +caldavBackend = $caldavBackend; + $this->principalUri = $principalUri; + + } + + /** + * Returns all notifications for a principal + * + * @return array + */ + public function getChildren() { + + $children = array(); + $notifications = $this->caldavBackend->getNotificationsForPrincipal($this->principalUri); + + foreach($notifications as $notification) { + + $children[] = new Sabre_CalDAV_Notifications_Node( + $this->caldavBackend, + $this->principalUri, + $notification + ); + } + + return $children; + + } + + /** + * Returns the name of this object + * + * @return string + */ + public function getName() { + + return 'notifications'; + + } + + /** + * Returns the owner principal + * + * This must be a url to a principal, or null if there's no owner + * + * @return string|null + */ + public function getOwner() { + + return $this->principalUri; + + } + + /** + * Returns a group principal + * + * This must be a url to a principal, or null if there's no owner + * + * @return string|null + */ + public function getGroup() { + + return null; + + } + + /** + * Returns a list of ACE's for this node. + * + * Each ACE has the following properties: + * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are + * currently the only supported privileges + * * 'principal', a url to the principal who owns the node + * * 'protected' (optional), indicating that this ACE is not allowed to + * be updated. + * + * @return array + */ + public function getACL() { + + return array( + array( + 'principal' => $this->getOwner(), + 'privilege' => '{DAV:}read', + 'protected' => true, + ), + array( + 'principal' => $this->getOwner(), + 'privilege' => '{DAV:}write', + 'protected' => true, + ) + ); + + } + + /** + * Updates the ACL + * + * This method will receive a list of new ACE's as an array argument. + * + * @param array $acl + * @return void + */ + public function setACL(array $acl) { + + throw new Sabre_DAV_Exception_NotImplemented('Updating ACLs is not implemented here'); + + } + + /** + * Returns the list of supported privileges for this node. + * + * The returned data structure is a list of nested privileges. + * See Sabre_DAVACL_Plugin::getDefaultSupportedPrivilegeSet for a simple + * standard structure. + * + * If null is returned from this method, the default privilege set is used, + * which is fine for most common usecases. + * + * @return array|null + */ + public function getSupportedPrivilegeSet() { + + return null; + + } + +} diff --git a/3rdparty/Sabre/CalDAV/Notifications/ICollection.php b/3rdparty/Sabre/CalDAV/Notifications/ICollection.php new file mode 100755 index 00000000000..eb873af3f92 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Notifications/ICollection.php @@ -0,0 +1,22 @@ +caldavBackend = $caldavBackend; + $this->principalUri = $principalUri; + $this->notification = $notification; + + } + + /** + * Returns the path name for this notification + * + * @return id + */ + public function getName() { + + return $this->notification->getId() . '.xml'; + + } + + /** + * Returns the etag for the notification. + * + * The etag must be surrounded by litteral double-quotes. + * + * @return string + */ + public function getETag() { + + return $this->notification->getETag(); + + } + + /** + * This method must return an xml element, using the + * Sabre_CalDAV_Notifications_INotificationType classes. + * + * @return Sabre_DAVNotification_INotificationType + */ + public function getNotificationType() { + + return $this->notification; + + } + + /** + * Deletes this notification + * + * @return void + */ + public function delete() { + + $this->caldavBackend->deleteNotification($this->getOwner(), $this->notification); + + } + + /** + * Returns the owner principal + * + * This must be a url to a principal, or null if there's no owner + * + * @return string|null + */ + public function getOwner() { + + return $this->principalUri; + + } + + /** + * Returns a group principal + * + * This must be a url to a principal, or null if there's no owner + * + * @return string|null + */ + public function getGroup() { + + return null; + + } + + /** + * Returns a list of ACE's for this node. + * + * Each ACE has the following properties: + * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are + * currently the only supported privileges + * * 'principal', a url to the principal who owns the node + * * 'protected' (optional), indicating that this ACE is not allowed to + * be updated. + * + * @return array + */ + public function getACL() { + + return array( + array( + 'principal' => $this->getOwner(), + 'privilege' => '{DAV:}read', + 'protected' => true, + ), + array( + 'principal' => $this->getOwner(), + 'privilege' => '{DAV:}write', + 'protected' => true, + ) + ); + + } + + /** + * Updates the ACL + * + * This method will receive a list of new ACE's as an array argument. + * + * @param array $acl + * @return void + */ + public function setACL(array $acl) { + + throw new Sabre_DAV_Exception_NotImplemented('Updating ACLs is not implemented here'); + + } + + /** + * Returns the list of supported privileges for this node. + * + * The returned data structure is a list of nested privileges. + * See Sabre_DAVACL_Plugin::getDefaultSupportedPrivilegeSet for a simple + * standard structure. + * + * If null is returned from this method, the default privilege set is used, + * which is fine for most common usecases. + * + * @return array|null + */ + public function getSupportedPrivilegeSet() { + + return null; + + } + +} diff --git a/3rdparty/Sabre/CalDAV/Notifications/Notification/Invite.php b/3rdparty/Sabre/CalDAV/Notifications/Notification/Invite.php new file mode 100755 index 00000000000..a6b36203f34 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Notifications/Notification/Invite.php @@ -0,0 +1,276 @@ +$value) { + if (!property_exists($this, $key)) { + throw new InvalidArgumentException('Unknown option: ' . $key); + } + $this->$key = $value; + } + + } + + /** + * Serializes the notification as a single property. + * + * You should usually just encode the single top-level element of the + * notification. + * + * @param Sabre_DAV_Server $server + * @param DOMElement $node + * @return void + */ + public function serialize(Sabre_DAV_Server $server, \DOMElement $node) { + + $prop = $node->ownerDocument->createElement('cs:invite-notification'); + $node->appendChild($prop); + + } + + /** + * This method serializes the entire notification, as it is used in the + * response body. + * + * @param Sabre_DAV_Server $server + * @param DOMElement $node + * @return void + */ + public function serializeBody(Sabre_DAV_Server $server, \DOMElement $node) { + + $doc = $node->ownerDocument; + + $dt = $doc->createElement('cs:dtstamp'); + $this->dtStamp->setTimezone(new \DateTimezone('GMT')); + $dt->appendChild($doc->createTextNode($this->dtStamp->format('Ymd\\THis\\Z'))); + $node->appendChild($dt); + + $prop = $doc->createElement('cs:invite-notification'); + $node->appendChild($prop); + + $uid = $doc->createElement('cs:uid'); + $uid->appendChild( $doc->createTextNode($this->id) ); + $prop->appendChild($uid); + + $href = $doc->createElement('d:href'); + $href->appendChild( $doc->createTextNode( $this->href ) ); + $prop->appendChild($href); + + $nodeName = null; + switch($this->type) { + + case SharingPlugin::STATUS_ACCEPTED : + $nodeName = 'cs:invite-accepted'; + break; + case SharingPlugin::STATUS_DECLINED : + $nodeName = 'cs:invite-declined'; + break; + case SharingPlugin::STATUS_DELETED : + $nodeName = 'cs:invite-deleted'; + break; + case SharingPlugin::STATUS_NORESPONSE : + $nodeName = 'cs:invite-noresponse'; + break; + + } + $prop->appendChild( + $doc->createElement($nodeName) + ); + $hostHref = $doc->createElement('d:href', $server->getBaseUri() . $this->hostUrl); + $hostUrl = $doc->createElement('cs:hosturl'); + $hostUrl->appendChild($hostHref); + $prop->appendChild($hostUrl); + + $access = $doc->createElement('cs:access'); + if ($this->readOnly) { + $access->appendChild($doc->createElement('cs:read')); + } else { + $access->appendChild($doc->createElement('cs:read-write')); + } + $prop->appendChild($access); + + $organizerHref = $doc->createElement('d:href', $server->getBaseUri() . $this->organizer); + $organizerUrl = $doc->createElement('cs:organizer'); + if ($this->commonName) { + $commonName = $doc->createElement('cs:common-name'); + $commonName->appendChild($doc->createTextNode($this->commonName)); + $organizerUrl->appendChild($commonName); + } + $organizerUrl->appendChild($organizerHref); + $prop->appendChild($organizerUrl); + + if ($this->summary) { + $summary = $doc->createElement('cs:summary'); + $summary->appendChild($doc->createTextNode($this->summary)); + $prop->appendChild($summary); + } + if ($this->supportedComponents) { + + $xcomp = $doc->createElement('cal:supported-calendar-component-set'); + $this->supportedComponents->serialize($server, $xcomp); + $prop->appendChild($xcomp); + + } + + } + + /** + * Returns a unique id for this notification + * + * This is just the base url. This should generally be some kind of unique + * id. + * + * @return string + */ + public function getId() { + + return $this->id; + + } + + /** + * Returns the ETag for this notification. + * + * The ETag must be surrounded by literal double-quotes. + * + * @return string + */ + public function getETag() { + + return $this->etag; + + } + +} diff --git a/3rdparty/Sabre/CalDAV/Notifications/Notification/InviteReply.php b/3rdparty/Sabre/CalDAV/Notifications/Notification/InviteReply.php new file mode 100755 index 00000000000..e935aa5aa11 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Notifications/Notification/InviteReply.php @@ -0,0 +1,216 @@ +$value) { + if (!property_exists($this, $key)) { + throw new InvalidArgumentException('Unknown option: ' . $key); + } + $this->$key = $value; + } + + } + + /** + * Serializes the notification as a single property. + * + * You should usually just encode the single top-level element of the + * notification. + * + * @param Sabre_DAV_Server $server + * @param DOMElement $node + * @return void + */ + public function serialize(Sabre_DAV_Server $server, \DOMElement $node) { + + $prop = $node->ownerDocument->createElement('cs:invite-reply'); + $node->appendChild($prop); + + } + + /** + * This method serializes the entire notification, as it is used in the + * response body. + * + * @param Sabre_DAV_Server $server + * @param DOMElement $node + * @return void + */ + public function serializeBody(Sabre_DAV_Server $server, \DOMElement $node) { + + $doc = $node->ownerDocument; + + $dt = $doc->createElement('cs:dtstamp'); + $this->dtStamp->setTimezone(new \DateTimezone('GMT')); + $dt->appendChild($doc->createTextNode($this->dtStamp->format('Ymd\\THis\\Z'))); + $node->appendChild($dt); + + $prop = $doc->createElement('cs:invite-reply'); + $node->appendChild($prop); + + $uid = $doc->createElement('cs:uid'); + $uid->appendChild($doc->createTextNode($this->id)); + $prop->appendChild($uid); + + $inReplyTo = $doc->createElement('cs:in-reply-to'); + $inReplyTo->appendChild( $doc->createTextNode($this->inReplyTo) ); + $prop->appendChild($inReplyTo); + + $href = $doc->createElement('d:href'); + $href->appendChild( $doc->createTextNode($this->href) ); + $prop->appendChild($href); + + $nodeName = null; + switch($this->type) { + + case SharingPlugin::STATUS_ACCEPTED : + $nodeName = 'cs:invite-accepted'; + break; + case SharingPlugin::STATUS_DECLINED : + $nodeName = 'cs:invite-declined'; + break; + + } + $prop->appendChild( + $doc->createElement($nodeName) + ); + $hostHref = $doc->createElement('d:href', $server->getBaseUri() . $this->hostUrl); + $hostUrl = $doc->createElement('cs:hosturl'); + $hostUrl->appendChild($hostHref); + $prop->appendChild($hostUrl); + + if ($this->summary) { + $summary = $doc->createElement('cs:summary'); + $summary->appendChild($doc->createTextNode($this->summary)); + $prop->appendChild($summary); + } + + } + + /** + * Returns a unique id for this notification + * + * This is just the base url. This should generally be some kind of unique + * id. + * + * @return string + */ + public function getId() { + + return $this->id; + + } + + /** + * Returns the ETag for this notification. + * + * The ETag must be surrounded by literal double-quotes. + * + * @return string + */ + public function getETag() { + + return $this->etag; + + } +} diff --git a/3rdparty/Sabre/CalDAV/Notifications/Notification/SystemStatus.php b/3rdparty/Sabre/CalDAV/Notifications/Notification/SystemStatus.php new file mode 100755 index 00000000000..f09ed3525f5 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Notifications/Notification/SystemStatus.php @@ -0,0 +1,179 @@ +id = $id; + $this->type = $type; + $this->description = $description; + $this->href = $href; + $this->etag = $etag; + + } + + /** + * Serializes the notification as a single property. + * + * You should usually just encode the single top-level element of the + * notification. + * + * @param Sabre_DAV_Server $server + * @param DOMElement $node + * @return void + */ + public function serialize(Sabre_DAV_Server $server, \DOMElement $node) { + + switch($this->type) { + case self::TYPE_LOW : + $type = 'low'; + break; + case self::TYPE_MEDIUM : + $type = 'medium'; + break; + default : + case self::TYPE_HIGH : + $type = 'high'; + break; + } + + $prop = $node->ownerDocument->createElement('cs:systemstatus'); + $prop->setAttribute('type', $type); + + $node->appendChild($prop); + + } + + /** + * This method serializes the entire notification, as it is used in the + * response body. + * + * @param Sabre_DAV_Server $server + * @param DOMElement $node + * @return void + */ + public function serializeBody(Sabre_DAV_Server $server, \DOMElement $node) { + + switch($this->type) { + case self::TYPE_LOW : + $type = 'low'; + break; + case self::TYPE_MEDIUM : + $type = 'medium'; + break; + default : + case self::TYPE_HIGH : + $type = 'high'; + break; + } + + $prop = $node->ownerDocument->createElement('cs:systemstatus'); + $prop->setAttribute('type', $type); + + if ($this->description) { + $text = $node->ownerDocument->createTextNode($this->description); + $desc = $node->ownerDocument->createElement('cs:description'); + $desc->appendChild($text); + $prop->appendChild($desc); + } + if ($this->href) { + $text = $node->ownerDocument->createTextNode($this->href); + $href = $node->ownerDocument->createElement('d:href'); + $href->appendChild($text); + $prop->appendChild($href); + } + + $node->appendChild($prop); + + } + + /** + * Returns a unique id for this notification + * + * This is just the base url. This should generally be some kind of unique + * id. + * + * @return string + */ + public function getId() { + + return $this->id; + + } + + /* + * Returns the ETag for this notification. + * + * The ETag must be surrounded by literal double-quotes. + * + * @return string + */ + public function getETag() { + + return $this->etag; + + } +} diff --git a/3rdparty/Sabre/CalDAV/Plugin.php b/3rdparty/Sabre/CalDAV/Plugin.php index c56ab384844..f3d11969c8b 100755 --- a/3rdparty/Sabre/CalDAV/Plugin.php +++ b/3rdparty/Sabre/CalDAV/Plugin.php @@ -1,5 +1,7 @@ subscribeEvent('onBrowserPostAction', array($this,'browserPostAction')); $server->subscribeEvent('beforeWriteContent', array($this, 'beforeWriteContent')); $server->subscribeEvent('beforeCreateFile', array($this, 'beforeCreateFile')); + $server->subscribeEvent('beforeMethod', array($this,'beforeMethod')); $server->xmlNamespaces[self::NS_CALDAV] = 'cal'; $server->xmlNamespaces[self::NS_CALENDARSERVER] = 'cs'; $server->propertyMap['{' . self::NS_CALDAV . '}supported-calendar-component-set'] = 'Sabre_CalDAV_Property_SupportedCalendarComponentSet'; + $server->propertyMap['{' . self::NS_CALDAV . '}schedule-calendar-transp'] = 'Sabre_CalDAV_Property_ScheduleCalendarTransp'; $server->resourceTypeMapping['Sabre_CalDAV_ICalendar'] = '{urn:ietf:params:xml:ns:caldav}calendar'; $server->resourceTypeMapping['Sabre_CalDAV_Schedule_IOutbox'] = '{urn:ietf:params:xml:ns:caldav}schedule-outbox'; $server->resourceTypeMapping['Sabre_CalDAV_Principal_ProxyRead'] = '{http://calendarserver.org/ns/}calendar-proxy-read'; $server->resourceTypeMapping['Sabre_CalDAV_Principal_ProxyWrite'] = '{http://calendarserver.org/ns/}calendar-proxy-write'; + $server->resourceTypeMapping['Sabre_CalDAV_Notifications_ICollection'] = '{' . self::NS_CALENDARSERVER . '}notification'; array_push($server->protectedProperties, @@ -205,7 +200,9 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { // CalendarServer extensions '{' . self::NS_CALENDARSERVER . '}getctag', '{' . self::NS_CALENDARSERVER . '}calendar-proxy-read-for', - '{' . self::NS_CALENDARSERVER . '}calendar-proxy-write-for' + '{' . self::NS_CALENDARSERVER . '}calendar-proxy-write-for', + '{' . self::NS_CALENDARSERVER . '}notification-URL', + '{' . self::NS_CALENDARSERVER . '}notificationtype' ); } @@ -226,6 +223,13 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { // unknownMethod event. return false; case 'POST' : + + // Checking if this is a text/calendar content type + $contentType = $this->server->httpRequest->getHeader('Content-Type'); + if (strpos($contentType, 'text/calendar')!==0) { + return; + } + // Checking if we're talking to an outbox try { $node = $this->server->tree->getNodeForPath($uri); @@ -235,7 +239,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { if (!$node instanceof Sabre_CalDAV_Schedule_IOutbox) return; - $this->outboxRequest($node); + $this->outboxRequest($node, $uri); return false; } @@ -348,7 +352,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { if (in_array($calProp,$requestedProperties)) { $addresses = $node->getAlternateUriSet(); - $addresses[] = $this->server->getBaseUri() . $node->getPrincipalUrl(); + $addresses[] = $this->server->getBaseUri() . $node->getPrincipalUrl() . '/'; unset($requestedProperties[$calProp]); $returnedProperties[200][$calProp] = new Sabre_DAV_Property_HrefList($addresses, false); @@ -390,8 +394,31 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } + // notification-URL property + $notificationUrl = '{' . self::NS_CALENDARSERVER . '}notification-URL'; + if (($index = array_search($notificationUrl, $requestedProperties)) !== false) { + $principalId = $node->getName(); + $calendarHomePath = 'calendars/' . $principalId . '/notifications/'; + unset($requestedProperties[$index]); + $returnedProperties[200][$notificationUrl] = new Sabre_DAV_Property_Href($calendarHomePath); + } + } // instanceof IPrincipal + if ($node instanceof Sabre_CalDAV_Notifications_INode) { + + $propertyName = '{' . self::NS_CALENDARSERVER . '}notificationtype'; + if (($index = array_search($propertyName, $requestedProperties)) !== false) { + + $returnedProperties[200][$propertyName] = + $node->getNotificationType(); + + unset($requestedProperties[$index]); + + } + + } // instanceof Notifications_INode + if ($node instanceof Sabre_CalDAV_ICalendarObject) { // The calendar-data property is not supposed to be a 'real' @@ -424,11 +451,11 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { public function calendarMultiGetReport($dom) { $properties = array_keys(Sabre_DAV_XMLUtil::parseProperties($dom->firstChild)); - $hrefElems = $dom->getElementsByTagNameNS('urn:DAV','href'); + $hrefElems = $dom->getElementsByTagNameNS('DAV:','href'); $xpath = new DOMXPath($dom); $xpath->registerNameSpace('cal',Sabre_CalDAV_Plugin::NS_CALDAV); - $xpath->registerNameSpace('dav','urn:DAV'); + $xpath->registerNameSpace('dav','DAV:'); $expand = $xpath->query('/cal:calendar-multiget/dav:prop/cal:calendar-data/cal:expand'); if ($expand->length>0) { @@ -438,8 +465,8 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { if(!$start || !$end) { throw new Sabre_DAV_Exception_BadRequest('The "start" and "end" attributes are required for the CALDAV:expand element'); } - $start = Sabre_VObject_DateTimeParser::parseDateTime($start); - $end = Sabre_VObject_DateTimeParser::parseDateTime($end); + $start = VObject\DateTimeParser::parseDateTime($start); + $end = VObject\DateTimeParser::parseDateTime($end); if ($end <= $start) { throw new Sabre_DAV_Exception_BadRequest('The end-date must be larger than the start-date in the expand element.'); @@ -458,7 +485,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { list($objProps) = $this->server->getPropertiesForPath($uri,$properties); if ($expand && isset($objProps[200]['{' . self::NS_CALDAV . '}calendar-data'])) { - $vObject = Sabre_VObject_Reader::read($objProps[200]['{' . self::NS_CALDAV . '}calendar-data']); + $vObject = VObject\Reader::read($objProps[200]['{' . self::NS_CALDAV . '}calendar-data']); $vObject->expand($start, $end); $objProps[200]['{' . self::NS_CALDAV . '}calendar-data'] = $vObject->serialize(); } @@ -467,9 +494,12 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } + $prefer = $this->server->getHTTPPRefer(); + $this->server->httpResponse->sendStatus(207); $this->server->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); - $this->server->httpResponse->sendBody($this->server->generateMultiStatus($propertyList)); + $this->server->httpResponse->setHeader('Vary','Brief,Prefer'); + $this->server->httpResponse->sendBody($this->server->generateMultiStatus($propertyList, $prefer['return-minimal'])); } @@ -487,54 +517,95 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { $parser = new Sabre_CalDAV_CalendarQueryParser($dom); $parser->parse(); - $requestedCalendarData = true; - $requestedProperties = $parser->requestedProperties; + $node = $this->server->tree->getNodeForPath($this->server->getRequestUri()); + $depth = $this->server->getHTTPDepth(0); - if (!in_array('{urn:ietf:params:xml:ns:caldav}calendar-data', $requestedProperties)) { + // The default result is an empty array + $result = array(); - // We always retrieve calendar-data, as we need it for filtering. - $requestedProperties[] = '{urn:ietf:params:xml:ns:caldav}calendar-data'; + // The calendarobject was requested directly. In this case we handle + // this locally. + if ($depth == 0 && $node instanceof Sabre_CalDAV_ICalendarObject) { - // If calendar-data wasn't explicitly requested, we need to remove - // it after processing. - $requestedCalendarData = false; - } + $requestedCalendarData = true; + $requestedProperties = $parser->requestedProperties; - // These are the list of nodes that potentially match the requirement - $candidateNodes = $this->server->getPropertiesForPath( - $this->server->getRequestUri(), - $requestedProperties, - $this->server->getHTTPDepth(0) - ); + if (!in_array('{urn:ietf:params:xml:ns:caldav}calendar-data', $requestedProperties)) { - $verifiedNodes = array(); + // We always retrieve calendar-data, as we need it for filtering. + $requestedProperties[] = '{urn:ietf:params:xml:ns:caldav}calendar-data'; - $validator = new Sabre_CalDAV_CalendarQueryValidator(); + // If calendar-data wasn't explicitly requested, we need to remove + // it after processing. + $requestedCalendarData = false; + } - foreach($candidateNodes as $node) { + $properties = $this->server->getPropertiesForPath( + $this->server->getRequestUri(), + $requestedProperties, + 0 + ); - // If the node didn't have a calendar-data property, it must not be a calendar object - if (!isset($node[200]['{urn:ietf:params:xml:ns:caldav}calendar-data'])) - continue; + // This array should have only 1 element, the first calendar + // object. + $properties = current($properties); - $vObject = Sabre_VObject_Reader::read($node[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']); - if ($validator->validate($vObject,$parser->filters)) { + // If there wasn't any calendar-data returned somehow, we ignore + // this. + if (isset($properties[200]['{urn:ietf:params:xml:ns:caldav}calendar-data'])) { + + $validator = new Sabre_CalDAV_CalendarQueryValidator(); + $vObject = VObject\Reader::read($properties[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']); + if ($validator->validate($vObject,$parser->filters)) { + + // If the client didn't require the calendar-data property, + // we won't give it back. + if (!$requestedCalendarData) { + unset($properties[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']); + } else { + if ($parser->expand) { + $vObject->expand($parser->expand['start'], $parser->expand['end']); + $properties[200]['{' . self::NS_CALDAV . '}calendar-data'] = $vObject->serialize(); + } + } + + $result = array($properties); - if (!$requestedCalendarData) { - unset($node[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']); } + + } + + } + // If we're dealing with a calendar, the calendar itself is responsible + // for the calendar-query. + if ($node instanceof Sabre_CalDAV_ICalendar && $depth = 1) { + + $nodePaths = $node->calendarQuery($parser->filters); + + foreach($nodePaths as $path) { + + list($properties) = + $this->server->getPropertiesForPath($this->server->getRequestUri() . '/' . $path, $parser->requestedProperties); + if ($parser->expand) { + // We need to do some post-processing + $vObject = VObject\Reader::read($properties[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']); $vObject->expand($parser->expand['start'], $parser->expand['end']); - $node[200]['{' . self::NS_CALDAV . '}calendar-data'] = $vObject->serialize(); + $properties[200]['{' . self::NS_CALDAV . '}calendar-data'] = $vObject->serialize(); } - $verifiedNodes[] = $node; + + $result[] = $properties; + } } + $prefer = $this->server->getHTTPPRefer(); + $this->server->httpResponse->sendStatus(207); $this->server->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); - $this->server->httpResponse->sendBody($this->server->generateMultiStatus($verifiedNodes)); + $this->server->httpResponse->setHeader('Vary','Brief,Prefer'); + $this->server->httpResponse->sendBody($this->server->generateMultiStatus($result, $prefer['return-minimal'])); } @@ -561,10 +632,10 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } if ($start) { - $start = Sabre_VObject_DateTimeParser::parseDateTime($start); + $start = VObject\DateTimeParser::parseDateTime($start); } if ($end) { - $end = Sabre_VObject_DateTimeParser::parseDateTime($end); + $end = VObject\DateTimeParser::parseDateTime($end); } if (!$start && !$end) { @@ -583,15 +654,33 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { throw new Sabre_DAV_Exception_NotImplemented('The free-busy-query REPORT is only implemented on calendars'); } - $objects = array_map(function($child) { - $obj = $child->get(); - if (is_resource($obj)) { - $obj = stream_get_contents($obj); - } + // Doing a calendar-query first, to make sure we get the most + // performance. + $urls = $calendar->calendarQuery(array( + 'name' => 'VCALENDAR', + 'comp-filters' => array( + array( + 'name' => 'VEVENT', + 'comp-filters' => array(), + 'prop-filters' => array(), + 'is-not-defined' => false, + 'time-range' => array( + 'start' => $start, + 'end' => $end, + ), + ), + ), + 'prop-filters' => array(), + 'is-not-defined' => false, + 'time-range' => null, + )); + + $objects = array_map(function($url) use ($calendar) { + $obj = $calendar->getChild($url)->get(); return $obj; - }, $calendar->getChildren()); + }, $urls); - $generator = new Sabre_VObject_FreeBusyGenerator(); + $generator = new VObject\FreeBusyGenerator(); $generator->setObjects($objects); $generator->setTimeRange($start, $end); $result = $generator->getResult(); @@ -620,7 +709,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { if (!$node instanceof Sabre_CalDAV_ICalendarObject) return; - $this->validateICalendar($data); + $this->validateICalendar($data, $path); } @@ -640,7 +729,52 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { if (!$parentNode instanceof Sabre_CalDAV_Calendar) return; - $this->validateICalendar($data); + $this->validateICalendar($data, $path); + + } + + /** + * This event is triggered before any HTTP request is handled. + * + * We use this to intercept GET calls to notification nodes, and return the + * proper response. + * + * @param string $method + * @param string $path + * @return void + */ + public function beforeMethod($method, $path) { + + if ($method!=='GET') return; + + try { + $node = $this->server->tree->getNodeForPath($path); + } catch (Sabre_DAV_Exception_NotFound $e) { + return; + } + + if (!$node instanceof Sabre_CalDAV_Notifications_INode) + return; + + if (!$this->server->checkPreconditions(true)) return false; + + $dom = new DOMDocument('1.0', 'UTF-8'); + $dom->formatOutput = true; + + $root = $dom->createElement('cs:notification'); + foreach($this->server->xmlNamespaces as $namespace => $prefix) { + $root->setAttribute('xmlns:' . $prefix, $namespace); + } + + $dom->appendChild($root); + $node->getNotificationType()->serializeBody($this->server, $root); + + $this->server->httpResponse->setHeader('Content-Type','application/xml'); + $this->server->httpResponse->setHeader('ETag',$node->getETag()); + $this->server->httpResponse->sendStatus(200); + $this->server->httpResponse->sendBody($dom->saveXML()); + + return false; } @@ -650,9 +784,10 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { * An exception is thrown if it's not. * * @param resource|string $data + * @param string $path * @return void */ - protected function validateICalendar(&$data) { + protected function validateICalendar(&$data, $path) { // If it's a stream, we convert it to a string first. if (is_resource($data)) { @@ -664,9 +799,9 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { try { - $vobj = Sabre_VObject_Reader::read($data); + $vobj = VObject\Reader::read($data); - } catch (Sabre_VObject_ParseException $e) { + } catch (VObject\ParseException $e) { throw new Sabre_DAV_Exception_UnsupportedMediaType('This resource only supports valid iCalendar 2.0 data. Parse error: ' . $e->getMessage()); @@ -676,6 +811,11 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { throw new Sabre_DAV_Exception_UnsupportedMediaType('This collection can only support iCalendar objects.'); } + // Get the Supported Components for the target calendar + list($parentPath,$object) = Sabre_Dav_URLUtil::splitPath($path); + $calendarProperties = $this->server->getProperties($parentPath,array('{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set')); + $supportedComponents = $calendarProperties['{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set']->getValue(); + $foundType = null; $foundUID = null; foreach($vobj->getComponents() as $component) { @@ -687,6 +827,9 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { case 'VJOURNAL' : if (is_null($foundType)) { $foundType = $component->name; + if (!in_array($foundType, $supportedComponents)) { + throw new Sabre_CalDAV_Exception_InvalidComponentType('This calendar only supports ' . implode(', ', $supportedComponents) . '. We found a ' . $foundType); + } if (!isset($component->UID)) { throw new Sabre_DAV_Exception_BadRequest('Every ' . $component->name . ' component must have an UID'); } @@ -711,12 +854,81 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } /** - * This method handles POST requests to the schedule-outbox + * This method handles POST requests to the schedule-outbox. + * + * Currently, two types of requests are support: + * * FREEBUSY requests from RFC 6638 + * * Simple iTIP messages from draft-desruisseaux-caldav-sched-04 + * + * The latter is from an expired early draft of the CalDAV scheduling + * extensions, but iCal depends on a feature from that spec, so we + * implement it. * * @param Sabre_CalDAV_Schedule_IOutbox $outboxNode + * @param string $outboxUri + * @return void + */ + public function outboxRequest(Sabre_CalDAV_Schedule_IOutbox $outboxNode, $outboxUri) { + + // Parsing the request body + try { + $vObject = VObject\Reader::read($this->server->httpRequest->getBody(true)); + } catch (VObject\ParseException $e) { + throw new Sabre_DAV_Exception_BadRequest('The request body must be a valid iCalendar object. Parse error: ' . $e->getMessage()); + } + + // The incoming iCalendar object must have a METHOD property, and a + // component. The combination of both determines what type of request + // this is. + $componentType = null; + foreach($vObject->getComponents() as $component) { + if ($component->name !== 'VTIMEZONE') { + $componentType = $component->name; + break; + } + } + if (is_null($componentType)) { + throw new Sabre_DAV_Exception_BadRequest('We expected at least one VTODO, VJOURNAL, VFREEBUSY or VEVENT component'); + } + + // Validating the METHOD + $method = strtoupper((string)$vObject->METHOD); + if (!$method) { + throw new Sabre_DAV_Exception_BadRequest('A METHOD property must be specified in iTIP messages'); + } + + // So we support two types of requests: + // + // REQUEST with a VFREEBUSY component + // REQUEST, REPLY, ADD, CANCEL on VEVENT components + + $acl = $this->server->getPlugin('acl'); + + if ($componentType === 'VFREEBUSY' && $method === 'REQUEST') { + + $acl && $acl->checkPrivileges($outboxUri,'{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-query-freebusy'); + $this->handleFreeBusyRequest($outboxNode, $vObject); + + } elseif ($componentType === 'VEVENT' && in_array($method, array('REQUEST','REPLY','ADD','CANCEL'))) { + + $acl && $acl->checkPrivileges($outboxUri,'{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-post-vevent'); + $this->handleEventNotification($outboxNode, $vObject); + + } else { + + throw new Sabre_DAV_Exception_NotImplemented('SabreDAV supports only VFREEBUSY (REQUEST) and VEVENT (REQUEST, REPLY, ADD, CANCEL)'); + + } + + } + + /** + * This method handles the REQUEST, REPLY, ADD and CANCEL methods for + * VEVENT iTip messages. + * * @return void */ - public function outboxRequest(Sabre_CalDAV_Schedule_IOutbox $outboxNode) { + protected function handleEventNotification(Sabre_CalDAV_Schedule_IOutbox $outboxNode, VObject\Component $vObject) { $originator = $this->server->httpRequest->getHeader('Originator'); $recipients = $this->server->httpRequest->getHeader('Recipient'); @@ -760,38 +972,10 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { throw new Sabre_DAV_Exception_Forbidden('The addresses specified in the Originator header did not match any addresses in the owners calendar-user-address-set header'); } - try { - $vObject = Sabre_VObject_Reader::read($this->server->httpRequest->getBody(true)); - } catch (Sabre_VObject_ParseException $e) { - throw new Sabre_DAV_Exception_BadRequest('The request body must be a valid iCalendar object. Parse error: ' . $e->getMessage()); - } - - // Checking for the object type - $componentType = null; - foreach($vObject->getComponents() as $component) { - if ($component->name !== 'VTIMEZONE') { - $componentType = $component->name; - break; - } - } - if (is_null($componentType)) { - throw new Sabre_DAV_Exception_BadRequest('We expected at least one VTODO, VJOURNAL, VFREEBUSY or VEVENT component'); - } - - // Validating the METHOD - $method = strtoupper((string)$vObject->METHOD); - if (!$method) { - throw new Sabre_DAV_Exception_BadRequest('A METHOD property must be specified in iTIP messages'); - } - - if (in_array($method, array('REQUEST','REPLY','ADD','CANCEL')) && $componentType==='VEVENT') { - $result = $this->iMIPMessage($originator, $recipients, $vObject); - $this->server->httpResponse->sendStatus(200); - $this->server->httpResponse->setHeader('Content-Type','application/xml'); - $this->server->httpResponse->sendBody($this->generateScheduleResponse($result)); - } else { - throw new Sabre_DAV_Exception_NotImplemented('This iTIP method is currently not implemented'); - } + $result = $this->iMIPMessage($originator, $recipients, $vObject, $principal); + $this->server->httpResponse->sendStatus(200); + $this->server->httpResponse->setHeader('Content-Type','application/xml'); + $this->server->httpResponse->sendBody($this->generateScheduleResponse($result)); } @@ -813,15 +997,15 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { * * @param string $originator * @param array $recipients - * @param Sabre_VObject_Component $vObject + * @param Sabre\VObject\Component $vObject * @return array */ - protected function iMIPMessage($originator, array $recipients, Sabre_VObject_Component $vObject) { + protected function iMIPMessage($originator, array $recipients, VObject\Component $vObject, $principal) { if (!$this->imipHandler) { $resultStatus = '5.2;This server does not support this operation'; } else { - $this->imipHandler->sendMessage($originator, $recipients, $vObject); + $this->imipHandler->sendMessage($originator, $recipients, $vObject, $principal); $resultStatus = '2.0;Success'; } @@ -832,7 +1016,6 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { return $result; - } /** @@ -877,6 +1060,204 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } + /** + * This method is responsible for parsing a free-busy query request and + * returning it's result. + * + * @param Sabre_CalDAV_Schedule_IOutbox $outbox + * @param string $request + * @return string + */ + protected function handleFreeBusyRequest(Sabre_CalDAV_Schedule_IOutbox $outbox, VObject\Component $vObject) { + + $vFreeBusy = $vObject->VFREEBUSY; + $organizer = $vFreeBusy->organizer; + + $organizer = (string)$organizer; + + // Validating if the organizer matches the owner of the inbox. + $owner = $outbox->getOwner(); + + $caldavNS = '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}'; + + $uas = $caldavNS . 'calendar-user-address-set'; + $props = $this->server->getProperties($owner,array($uas)); + + if (empty($props[$uas]) || !in_array($organizer, $props[$uas]->getHrefs())) { + throw new Sabre_DAV_Exception_Forbidden('The organizer in the request did not match any of the addresses for the owner of this inbox'); + } + + if (!isset($vFreeBusy->ATTENDEE)) { + throw new Sabre_DAV_Exception_BadRequest('You must at least specify 1 attendee'); + } + + $attendees = array(); + foreach($vFreeBusy->ATTENDEE as $attendee) { + $attendees[]= (string)$attendee; + } + + + if (!isset($vFreeBusy->DTSTART) || !isset($vFreeBusy->DTEND)) { + throw new Sabre_DAV_Exception_BadRequest('DTSTART and DTEND must both be specified'); + } + + $startRange = $vFreeBusy->DTSTART->getDateTime(); + $endRange = $vFreeBusy->DTEND->getDateTime(); + + $results = array(); + foreach($attendees as $attendee) { + $results[] = $this->getFreeBusyForEmail($attendee, $startRange, $endRange, $vObject); + } + + $dom = new DOMDocument('1.0','utf-8'); + $dom->formatOutput = true; + $scheduleResponse = $dom->createElement('cal:schedule-response'); + foreach($this->server->xmlNamespaces as $namespace=>$prefix) { + + $scheduleResponse->setAttribute('xmlns:' . $prefix,$namespace); + + } + $dom->appendChild($scheduleResponse); + + foreach($results as $result) { + $response = $dom->createElement('cal:response'); + + $recipient = $dom->createElement('cal:recipient'); + $recipientHref = $dom->createElement('d:href'); + + $recipientHref->appendChild($dom->createTextNode($result['href'])); + $recipient->appendChild($recipientHref); + $response->appendChild($recipient); + + $reqStatus = $dom->createElement('cal:request-status'); + $reqStatus->appendChild($dom->createTextNode($result['request-status'])); + $response->appendChild($reqStatus); + + if (isset($result['calendar-data'])) { + + $calendardata = $dom->createElement('cal:calendar-data'); + $calendardata->appendChild($dom->createTextNode(str_replace("\r\n","\n",$result['calendar-data']->serialize()))); + $response->appendChild($calendardata); + + } + $scheduleResponse->appendChild($response); + } + + $this->server->httpResponse->sendStatus(200); + $this->server->httpResponse->setHeader('Content-Type','application/xml'); + $this->server->httpResponse->sendBody($dom->saveXML()); + + } + + /** + * Returns free-busy information for a specific address. The returned + * data is an array containing the following properties: + * + * calendar-data : A VFREEBUSY VObject + * request-status : an iTip status code. + * href: The principal's email address, as requested + * + * The following request status codes may be returned: + * * 2.0;description + * * 3.7;description + * + * @param string $email address + * @param DateTime $start + * @param DateTime $end + * @param Sabre_VObject_Component $request + * @return Sabre_VObject_Component + */ + protected function getFreeBusyForEmail($email, DateTime $start, DateTime $end, VObject\Component $request) { + + $caldavNS = '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}'; + + $aclPlugin = $this->server->getPlugin('acl'); + if (substr($email,0,7)==='mailto:') $email = substr($email,7); + + $result = $aclPlugin->principalSearch( + array('{http://sabredav.org/ns}email-address' => $email), + array( + '{DAV:}principal-URL', $caldavNS . 'calendar-home-set', + '{http://sabredav.org/ns}email-address', + ) + ); + + if (!count($result)) { + return array( + 'request-status' => '3.7;Could not find principal', + 'href' => 'mailto:' . $email, + ); + } + + if (!isset($result[0][200][$caldavNS . 'calendar-home-set'])) { + return array( + 'request-status' => '3.7;No calendar-home-set property found', + 'href' => 'mailto:' . $email, + ); + } + $homeSet = $result[0][200][$caldavNS . 'calendar-home-set']->getHref(); + + // Grabbing the calendar list + $objects = array(); + foreach($this->server->tree->getNodeForPath($homeSet)->getChildren() as $node) { + if (!$node instanceof Sabre_CalDAV_ICalendar) { + continue; + } + $aclPlugin->checkPrivileges($homeSet . $node->getName() ,$caldavNS . 'read-free-busy'); + + // Getting the list of object uris within the time-range + $urls = $node->calendarQuery(array( + 'name' => 'VCALENDAR', + 'comp-filters' => array( + array( + 'name' => 'VEVENT', + 'comp-filters' => array(), + 'prop-filters' => array(), + 'is-not-defined' => false, + 'time-range' => array( + 'start' => $start, + 'end' => $end, + ), + ), + ), + 'prop-filters' => array(), + 'is-not-defined' => false, + 'time-range' => null, + )); + + $calObjects = array_map(function($url) use ($node) { + $obj = $node->getChild($url)->get(); + return $obj; + }, $urls); + + $objects = array_merge($objects,$calObjects); + + } + + $vcalendar = VObject\Component::create('VCALENDAR'); + $vcalendar->VERSION = '2.0'; + $vcalendar->METHOD = 'REPLY'; + $vcalendar->CALSCALE = 'GREGORIAN'; + $vcalendar->PRODID = '-//SabreDAV//SabreDAV ' . Sabre_DAV_Version::VERSION . '//EN'; + + $generator = new VObject\FreeBusyGenerator(); + $generator->setObjects($objects); + $generator->setTimeRange($start, $end); + $generator->setBaseObject($vcalendar); + + $result = $generator->getResult(); + + $vcalendar->VFREEBUSY->ATTENDEE = 'mailto:' . $email; + $vcalendar->VFREEBUSY->UID = (string)$request->VFREEBUSY->UID; + $vcalendar->VFREEBUSY->ORGANIZER = clone $request->VFREEBUSY->ORGANIZER; + + return array( + 'calendar-data' => $result, + 'request-status' => '2.0;Success', + 'href' => 'mailto:' . $email, + ); + } + /** * This method is used to generate HTML output for the * Sabre_DAV_Browser_Plugin. This allows us to generate an interface users diff --git a/3rdparty/Sabre/CalDAV/Property/AllowedSharingModes.php b/3rdparty/Sabre/CalDAV/Property/AllowedSharingModes.php new file mode 100755 index 00000000000..efe751732c5 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Property/AllowedSharingModes.php @@ -0,0 +1,72 @@ +canBeShared = $canBeShared; + $this->canBePublished = $canBePublished; + + } + + /** + * Serializes the property in a DOMDocument + * + * @param Sabre_DAV_Server $server + * @param DOMElement $node + * @return void + */ + public function serialize(Sabre_DAV_Server $server,DOMElement $node) { + + $doc = $node->ownerDocument; + if ($this->canBeShared) { + $xcomp = $doc->createElement('cs:can-be-shared'); + $node->appendChild($xcomp); + } + if ($this->canBePublished) { + $xcomp = $doc->createElement('cs:can-be-published'); + $node->appendChild($xcomp); + } + + } + +} diff --git a/3rdparty/Sabre/CalDAV/Property/Invite.php b/3rdparty/Sabre/CalDAV/Property/Invite.php new file mode 100755 index 00000000000..4ed94877df2 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Property/Invite.php @@ -0,0 +1,173 @@ +users = $users; + + } + + /** + * Returns the list of users, as it was passed to the constructor. + * + * @return array + */ + public function getValue() { + + return $this->users; + + } + + /** + * Serializes the property in a DOMDocument + * + * @param Sabre_DAV_Server $server + * @param DOMElement $node + * @return void + */ + public function serialize(Sabre_DAV_Server $server,DOMElement $node) { + + $doc = $node->ownerDocument; + foreach($this->users as $user) { + + $xuser = $doc->createElement('cs:user'); + + $href = $doc->createElement('d:href'); + $href->appendChild($doc->createTextNode($user['href'])); + $xuser->appendChild($href); + + if (isset($user['commonName']) && $user['commonName']) { + $commonName = $doc->createElement('cs:common-name'); + $commonName->appendChild($doc->createTextNode($user['commonName'])); + $xuser->appendChild($commonName); + } + + switch($user['status']) { + + case SharingPlugin::STATUS_ACCEPTED : + $status = $doc->createElement('cs:invite-accepted'); + $xuser->appendChild($status); + break; + case SharingPlugin::STATUS_DECLINED : + $status = $doc->createElement('cs:invite-declined'); + $xuser->appendChild($status); + break; + case SharingPlugin::STATUS_NORESPONSE : + $status = $doc->createElement('cs:invite-noresponse'); + $xuser->appendChild($status); + break; + case SharingPlugin::STATUS_INVALID : + $status = $doc->createElement('cs:invite-invalid'); + $xuser->appendChild($status); + break; + + } + + $xaccess = $doc->createElement('cs:access'); + + if ($user['readOnly']) { + $xaccess->appendChild( + $doc->createElement('cs:read') + ); + } else { + $xaccess->appendChild( + $doc->createElement('cs:read-write') + ); + } + $xuser->appendChild($xaccess); + + if (isset($user['summary']) && $user['summary']) { + $summary = $doc->createElement('cs:summary'); + $summary->appendChild($doc->createTextNode($user['summary'])); + $xuser->appendChild($summary); + } + + $node->appendChild($xuser); + + } + + } + + /** + * Unserializes the property. + * + * This static method should return a an instance of this object. + * + * @param DOMElement $prop + * @return Sabre_DAV_IProperty + */ + static function unserialize(DOMElement $prop) { + + $xpath = new \DOMXPath($prop->ownerDocument); + $xpath->registerNamespace('cs', Sabre_CalDAV_Plugin::NS_CALENDARSERVER); + $xpath->registerNamespace('d', 'DAV:'); + + $users = array(); + + foreach($xpath->query('cs:user', $prop) as $user) { + + $status = null; + if ($xpath->evaluate('boolean(cs:invite-accepted)', $user)) { + $status = SharingPlugin::STATUS_ACCEPTED; + } elseif ($xpath->evaluate('boolean(cs:invite-declined)', $user)) { + $status = SharingPlugin::STATUS_DECLINED; + } elseif ($xpath->evaluate('boolean(cs:invite-noresponse)', $user)) { + $status = SharingPlugin::STATUS_NORESPONSE; + } elseif ($xpath->evaluate('boolean(cs:invite-invalid)', $user)) { + $status = SharingPlugin::STATUS_INVALID; + } else { + throw new Sabre_DAV_Exception('Every cs:user property must have one of cs:invite-accepted, cs:invite-declined, cs:invite-noresponse or cs:invite-invalid'); + } + $users[] = array( + 'href' => $xpath->evaluate('string(d:href)', $user), + 'commonName' => $xpath->evaluate('string(cs:common-name)', $user), + 'readOnly' => $xpath->evaluate('boolean(cs:access/cs:read)', $user), + 'summary' => $xpath->evaluate('string(cs:summary)', $user), + 'status' => $status, + ); + + } + + return new self($users); + + } + +} diff --git a/3rdparty/Sabre/CalDAV/Property/ScheduleCalendarTransp.php b/3rdparty/Sabre/CalDAV/Property/ScheduleCalendarTransp.php new file mode 100755 index 00000000000..76c1dbaec21 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Property/ScheduleCalendarTransp.php @@ -0,0 +1,99 @@ +value = $value; + + } + + /** + * Returns the current value + * + * @return string + */ + public function getValue() { + + return $this->value; + + } + + /** + * Serializes the property in a DOMDocument + * + * @param Sabre_DAV_Server $server + * @param DOMElement $node + * @return void + */ + public function serialize(Sabre_DAV_Server $server,DOMElement $node) { + + $doc = $node->ownerDocument; + switch($this->value) { + case self::TRANSPARENT : + $xval = $doc->createElement('cal:transparent'); + break; + case self::OPAQUE : + $xval = $doc->createElement('cal:opaque'); + break; + } + + $node->appendChild($xval); + + } + + /** + * Unserializes the DOMElement back into a Property class. + * + * @param DOMElement $node + * @return Sabre_CalDAV_Property_ScheduleCalendarTransp + */ + static function unserialize(DOMElement $node) { + + $value = null; + foreach($node->childNodes as $childNode) { + switch(Sabre_DAV_XMLUtil::toClarkNotation($childNode)) { + case '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}opaque' : + $value = self::OPAQUE; + break; + case '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}transparent' : + $value = self::TRANSPARENT; + break; + } + } + if (is_null($value)) + return null; + + return new self($value); + + } +} diff --git a/3rdparty/Sabre/CalDAV/Schedule/IMip.php b/3rdparty/Sabre/CalDAV/Schedule/IMip.php index 37e75fcc4a7..92c3c097c15 100755 --- a/3rdparty/Sabre/CalDAV/Schedule/IMip.php +++ b/3rdparty/Sabre/CalDAV/Schedule/IMip.php @@ -1,5 +1,7 @@ diff --git a/3rdparty/Sabre/CalDAV/Schedule/Outbox.php b/3rdparty/Sabre/CalDAV/Schedule/Outbox.php index 014c37230d1..462aa527e23 100755 --- a/3rdparty/Sabre/CalDAV/Schedule/Outbox.php +++ b/3rdparty/Sabre/CalDAV/Schedule/Outbox.php @@ -13,7 +13,7 @@ * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ -class Sabre_CalDAV_Schedule_Outbox extends Sabre_DAV_Directory implements Sabre_CalDAV_Schedule_IOutbox { +class Sabre_CalDAV_Schedule_Outbox extends Sabre_DAV_Collection implements Sabre_CalDAV_Schedule_IOutbox { /** * The principal Uri @@ -103,6 +103,11 @@ class Sabre_CalDAV_Schedule_Outbox extends Sabre_DAV_Directory implements Sabre_ 'principal' => $this->getOwner(), 'protected' => true, ), + array( + 'privilege' => '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-post-vevent', + 'principal' => $this->getOwner(), + 'protected' => true, + ), array( 'privilege' => '{DAV:}read', 'principal' => $this->getOwner(), @@ -144,6 +149,9 @@ class Sabre_CalDAV_Schedule_Outbox extends Sabre_DAV_Directory implements Sabre_ $default['aggregates'][] = array( 'privilege' => '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-query-freebusy', ); + $default['aggregates'][] = array( + 'privilege' => '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-post-vevent', + ); return $default; diff --git a/3rdparty/Sabre/CalDAV/Server.php b/3rdparty/Sabre/CalDAV/Server.php deleted file mode 100755 index 325e3d80a7f..00000000000 --- a/3rdparty/Sabre/CalDAV/Server.php +++ /dev/null @@ -1,68 +0,0 @@ -authRealm); - $this->addPlugin($authPlugin); - - $aclPlugin = new Sabre_DAVACL_Plugin(); - $this->addPlugin($aclPlugin); - - $caldavPlugin = new Sabre_CalDAV_Plugin(); - $this->addPlugin($caldavPlugin); - - } - -} diff --git a/3rdparty/Sabre/CalDAV/ShareableCalendar.php b/3rdparty/Sabre/CalDAV/ShareableCalendar.php new file mode 100755 index 00000000000..0e44885c621 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/ShareableCalendar.php @@ -0,0 +1,72 @@ +caldavBackend->updateShares($this->calendarInfo['id'], $add, $remove); + + } + + /** + * Returns the list of people whom this calendar is shared with. + * + * Every element in this array should have the following properties: + * * href - Often a mailto: address + * * commonName - Optional, for example a first + last name + * * status - See the Sabre_CalDAV_SharingPlugin::STATUS_ constants. + * * readOnly - boolean + * * summary - Optional, a description for the share + * + * @return array + */ + public function getShares() { + + return $this->caldavBackend->getShares($this->calendarInfo['id']); + + } + + /** + * Marks this calendar as published. + * + * Publishing a calendar should automatically create a read-only, public, + * subscribable calendar. + * + * @param bool $value + * @return void + */ + public function setPublishStatus($value) { + + $this->caldavBackend->setPublishStatus($this->calendarInfo['id'], $value); + + } + +} diff --git a/3rdparty/Sabre/CalDAV/SharedCalendar.php b/3rdparty/Sabre/CalDAV/SharedCalendar.php new file mode 100755 index 00000000000..9000697d3ec --- /dev/null +++ b/3rdparty/Sabre/CalDAV/SharedCalendar.php @@ -0,0 +1,98 @@ +calendarInfo['{http://calendarserver.org/ns/}shared-url']; + + } + + /** + * Returns the owner principal + * + * This must be a url to a principal, or null if there's no owner + * + * @return string|null + */ + public function getOwner() { + + return $this->calendarInfo['{http://sabredav.org/ns}owner-principal']; + + } + + /** + * Returns a list of ACE's for this node. + * + * Each ACE has the following properties: + * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are + * currently the only supported privileges + * * 'principal', a url to the principal who owns the node + * * 'protected' (optional), indicating that this ACE is not allowed to + * be updated. + * + * @return array + */ + public function getACL() { + + // The top-level ACL only contains access information for the true + // owner of the calendar, so we need to add the information for the + // sharee. + $acl = parent::getACL(); + $acl[] = array( + 'privilege' => '{DAV:}read', + 'principal' => $this->calendarInfo['principaluri'], + 'protected' => true, + ); + if (!$this->calendarInfo['{http://sabredav.org/ns}read-only']) { + $acl[] = array( + 'privilege' => '{DAV:}write', + 'principal' => $this->calendarInfo['principaluri'], + 'protected' => true, + ); + } + return $acl; + + } + + +} diff --git a/3rdparty/Sabre/CalDAV/SharingPlugin.php b/3rdparty/Sabre/CalDAV/SharingPlugin.php new file mode 100755 index 00000000000..31df8057b24 --- /dev/null +++ b/3rdparty/Sabre/CalDAV/SharingPlugin.php @@ -0,0 +1,475 @@ +server = $server; + //$server->resourceTypeMapping['Sabre_CalDAV_IShareableCalendar'] = '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-owner'; + $server->resourceTypeMapping['Sabre_CalDAV_ISharedCalendar'] = '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared'; + + array_push( + $this->server->protectedProperties, + '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}invite', + '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}allowed-sharing-modes', + '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-url' + ); + + $this->server->subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties')); + $this->server->subscribeEvent('afterGetProperties', array($this, 'afterGetProperties')); + $this->server->subscribeEvent('updateProperties', array($this, 'updateProperties')); + $this->server->subscribeEvent('unknownMethod', array($this,'unknownMethod')); + + } + + /** + * This event is triggered when properties are requested for a certain + * node. + * + * This allows us to inject any properties early. + * + * @param string $path + * @param Sabre_DAV_INode $node + * @param array $requestedProperties + * @param array $returnedProperties + * @return void + */ + public function beforeGetProperties($path, Sabre_DAV_INode $node, &$requestedProperties, &$returnedProperties) { + + if ($node instanceof Sabre_CalDAV_IShareableCalendar) { + if (($index = array_search('{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}invite', $requestedProperties))!==false) { + + unset($requestedProperties[$index]); + $returnedProperties[200]['{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}invite'] = + new Sabre_CalDAV_Property_Invite( + $node->getShares() + ); + + } + + } + if ($node instanceof Sabre_CalDAV_ISharedCalendar) { + if (($index = array_search('{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-url', $requestedProperties))!==false) { + + unset($requestedProperties[$index]); + $returnedProperties[200]['{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-url'] = + new Sabre_DAV_Property_Href( + $node->getSharedUrl() + ); + + } + + } + + } + + /** + * This method is triggered *after* all properties have been retrieved. + * This allows us to inject the correct resourcetype for calendars that + * have been shared. + * + * @param string $path + * @param array $properties + * @param Sabre_DAV_INode $node + * @return void + */ + public function afterGetProperties($path, &$properties, Sabre_DAV_INode $node) { + + if ($node instanceof Sabre_CalDAV_IShareableCalendar) { + if (isset($properties[200]['{DAV:}resourcetype'])) { + if (count($node->getShares())>0) { + $properties[200]['{DAV:}resourcetype']->add( + '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-owner' + ); + } + } + $propName = '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}allowed-sharing-modes'; + if (array_key_exists($propName, $properties[404])) { + unset($properties[404][$propName]); + $properties[200][$propName] = new Sabre_CalDAV_Property_AllowedSharingModes(true,false); + } + + } + + } + + /** + * This method is trigged when a user attempts to update a node's + * properties. + * + * A previous draft of the sharing spec stated that it was possible to use + * PROPPATCH to remove 'shared-owner' from the resourcetype, thus unsharing + * the calendar. + * + * Even though this is no longer in the current spec, we keep this around + * because OS X 10.7 may still make use of this feature. + * + * @param array $mutations + * @param array $result + * @param Sabre_DAV_INode $node + * @return void + */ + public function updateProperties(array &$mutations, array &$result, Sabre_DAV_INode $node) { + + if (!$node instanceof Sabre_CalDAV_IShareableCalendar) + return; + + if (!isset($mutations['{DAV:}resourcetype'])) { + return; + } + + // Only doing something if shared-owner is indeed not in the list. + if($mutations['{DAV:}resourcetype']->is('{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-owner')) return; + + $shares = $node->getShares(); + $remove = array(); + foreach($shares as $share) { + $remove[] = $share['href']; + } + $node->updateShares(array(), $remove); + + // We're marking this update as 200 OK + $result[200]['{DAV:}resourcetype'] = null; + + // Removing it from the mutations list + unset($mutations['{DAV:}resourcetype']); + + } + + /** + * This event is triggered when the server didn't know how to handle a + * certain request. + * + * We intercept this to handle POST requests on calendars. + * + * @param string $method + * @param string $uri + * @return null|bool + */ + public function unknownMethod($method, $uri) { + + if ($method!=='POST') { + return; + } + + // Only handling xml + $contentType = $this->server->httpRequest->getHeader('Content-Type'); + if (strpos($contentType,'application/xml')===false && strpos($contentType,'text/xml')===false) + return; + + // Making sure the node exists + try { + $node = $this->server->tree->getNodeForPath($uri); + } catch (Sabre_DAV_Exception_NotFound $e) { + return; + } + + + $dom = Sabre_DAV_XMLUtil::loadDOMDocument($this->server->httpRequest->getBody(true)); + + $documentType = Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild); + + switch($documentType) { + + // Dealing with the 'share' document, which modified invitees on a + // calendar. + case '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}share' : + + // We can only deal with IShareableCalendar objects + if (!$node instanceof Sabre_CalDAV_IShareableCalendar) { + return; + } + + // Getting ACL info + $acl = $this->server->getPlugin('acl'); + + // If there's no ACL support, we allow everything + if ($acl) { + $acl->checkPrivileges($uri, '{DAV:}write'); + } + + $mutations = $this->parseShareRequest($dom); + + $node->updateShares($mutations[0], $mutations[1]); + + $this->server->httpResponse->sendStatus(200); + // Adding this because sending a response body may cause issues, + // and I wanted some type of indicator the response was handled. + $this->server->httpResponse->setHeader('X-Sabre-Status', 'everything-went-well'); + + // Breaking the event chain + return false; + + // The invite-reply document is sent when the user replies to an + // invitation of a calendar share. + case '{'. Sabre_CalDAV_Plugin::NS_CALENDARSERVER.'}invite-reply' : + + // This only works on the calendar-home-root node. + if (!$node instanceof Sabre_CalDAV_UserCalendars) { + return; + } + + // Getting ACL info + $acl = $this->server->getPlugin('acl'); + + // If there's no ACL support, we allow everything + if ($acl) { + $acl->checkPrivileges($uri, '{DAV:}write'); + } + + $message = $this->parseInviteReplyRequest($dom); + + $url = $node->shareReply( + $message['href'], + $message['status'], + $message['calendarUri'], + $message['inReplyTo'], + $message['summary'] + ); + + $this->server->httpResponse->sendStatus(200); + // Adding this because sending a response body may cause issues, + // and I wanted some type of indicator the response was handled. + $this->server->httpResponse->setHeader('X-Sabre-Status', 'everything-went-well'); + + if ($url) { + $dom = new DOMDocument('1.0', 'UTF-8'); + $dom->formatOutput = true; + + $root = $dom->createElement('cs:shared-as'); + foreach($this->server->xmlNamespaces as $namespace => $prefix) { + $root->setAttribute('xmlns:' . $prefix, $namespace); + } + + $dom->appendChild($root); + $href = new Sabre_DAV_Property_Href($url); + + $href->serialize($this->server, $root); + $this->server->httpResponse->setHeader('Content-Type','application/xml'); + $this->server->httpResponse->sendBody($dom->saveXML()); + + } + + // Breaking the event chain + return false; + + case '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}publish-calendar' : + + // We can only deal with IShareableCalendar objects + if (!$node instanceof Sabre_CalDAV_IShareableCalendar) { + return; + } + + // Getting ACL info + $acl = $this->server->getPlugin('acl'); + + // If there's no ACL support, we allow everything + if ($acl) { + $acl->checkPrivileges($uri, '{DAV:}write'); + } + + $node->setPublishStatus(true); + + // iCloud sends back the 202, so we will too. + $this->server->httpResponse->sendStatus(202); + + // Adding this because sending a response body may cause issues, + // and I wanted some type of indicator the response was handled. + $this->server->httpResponse->setHeader('X-Sabre-Status', 'everything-went-well'); + + // Breaking the event chain + return false; + + case '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}unpublish-calendar' : + + // We can only deal with IShareableCalendar objects + if (!$node instanceof Sabre_CalDAV_IShareableCalendar) { + return; + } + + // Getting ACL info + $acl = $this->server->getPlugin('acl'); + + // If there's no ACL support, we allow everything + if ($acl) { + $acl->checkPrivileges($uri, '{DAV:}write'); + } + + $node->setPublishStatus(false); + + $this->server->httpResponse->sendStatus(200); + + // Adding this because sending a response body may cause issues, + // and I wanted some type of indicator the response was handled. + $this->server->httpResponse->setHeader('X-Sabre-Status', 'everything-went-well'); + + // Breaking the event chain + return false; + + } + + + } + + /** + * Parses the 'share' POST request. + * + * This method returns an array, containing two arrays. + * The first array is a list of new sharees. Every element is a struct + * containing a: + * * href element. (usually a mailto: address) + * * commonName element (often a first and lastname, but can also be + * false) + * * readOnly (true or false) + * * summary (A description of the share, can also be false) + * + * The second array is a list of sharees that are to be removed. This is + * just a simple array with 'hrefs'. + * + * @param DOMDocument $dom + * @return array + */ + protected function parseShareRequest(DOMDocument $dom) { + + $xpath = new \DOMXPath($dom); + $xpath->registerNamespace('cs', Sabre_CalDAV_Plugin::NS_CALENDARSERVER); + $xpath->registerNamespace('d', 'DAV:'); + + + $set = array(); + $elems = $xpath->query('cs:set'); + + for($i=0; $i < $elems->length; $i++) { + + $xset = $elems->item($i); + $set[] = array( + 'href' => $xpath->evaluate('string(d:href)', $xset), + 'commonName' => $xpath->evaluate('string(cs:common-name)', $xset), + 'summary' => $xpath->evaluate('string(cs:summary)', $xset), + 'readOnly' => $xpath->evaluate('boolean(cs:read)', $xset)!==false + ); + + } + + $remove = array(); + $elems = $xpath->query('cs:remove'); + + for($i=0; $i < $elems->length; $i++) { + + $xremove = $elems->item($i); + $remove[] = $xpath->evaluate('string(d:href)', $xremove); + + } + + return array($set, $remove); + + } + + /** + * Parses the 'invite-reply' POST request. + * + * This method returns an array, containing the following properties: + * * href - The sharee who is replying + * * status - One of the self::STATUS_* constants + * * calendarUri - The url of the shared calendar + * * inReplyTo - The unique id of the share invitation. + * * summary - Optional description of the reply. + * + * @param DOMDocument $dom + * @return array + */ + protected function parseInviteReplyRequest(DOMDocument $dom) { + + $xpath = new \DOMXPath($dom); + $xpath->registerNamespace('cs', Sabre_CalDAV_Plugin::NS_CALENDARSERVER); + $xpath->registerNamespace('d', 'DAV:'); + + $hostHref = $xpath->evaluate('string(cs:hosturl/d:href)'); + if (!$hostHref) { + throw new Sabre_DAV_Exception_BadRequest('The {' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}hosturl/{DAV:}href element is required'); + } + + return array( + 'href' => $xpath->evaluate('string(d:href)'), + 'calendarUri' => $this->server->calculateUri($hostHref), + 'inReplyTo' => $xpath->evaluate('string(cs:in-reply-to)'), + 'summary' => $xpath->evaluate('string(cs:summary)'), + 'status' => $xpath->evaluate('boolean(cs:invite-accepted)')?self::STATUS_ACCEPTED:self::STATUS_DECLINED + ); + + } + +} diff --git a/3rdparty/Sabre/CalDAV/UserCalendars.php b/3rdparty/Sabre/CalDAV/UserCalendars.php index b8d3f0573fa..3194e6677ab 100755 --- a/3rdparty/Sabre/CalDAV/UserCalendars.php +++ b/3rdparty/Sabre/CalDAV/UserCalendars.php @@ -6,7 +6,7 @@ * @package Sabre * @subpackage CalDAV * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. - * @author Evert Pot (http://www.rooftopsolutions.nl/) + * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre_DAVACL_IACL { @@ -21,7 +21,7 @@ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre /** * CalDAV backend * - * @var Sabre_CalDAV_Backend_Abstract + * @var Sabre_CalDAV_Backend_BackendInterface */ protected $caldavBackend; @@ -36,10 +36,10 @@ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre * Constructor * * @param Sabre_DAVACL_IPrincipalBackend $principalBackend - * @param Sabre_CalDAV_Backend_Abstract $caldavBackend + * @param Sabre_CalDAV_Backend_BackendInterface $caldavBackend * @param mixed $userUri */ - public function __construct(Sabre_DAVACL_IPrincipalBackend $principalBackend, Sabre_CalDAV_Backend_Abstract $caldavBackend, $userUri) { + public function __construct(Sabre_DAVACL_IPrincipalBackend $principalBackend, Sabre_CalDAV_Backend_BackendInterface $caldavBackend, $userUri) { $this->principalBackend = $principalBackend; $this->caldavBackend = $caldavBackend; @@ -168,9 +168,22 @@ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre $calendars = $this->caldavBackend->getCalendarsForUser($this->principalInfo['uri']); $objs = array(); foreach($calendars as $calendar) { - $objs[] = new Sabre_CalDAV_Calendar($this->principalBackend, $this->caldavBackend, $calendar); + if ($this->caldavBackend instanceof Sabre_CalDAV_Backend_SharingSupport) { + if (isset($calendar['{http://calendarserver.org/ns/}shared-url'])) { + $objs[] = new Sabre_CalDAV_SharedCalendar($this->principalBackend, $this->caldavBackend, $calendar); + } else { + $objs[] = new Sabre_CalDAV_ShareableCalendar($this->principalBackend, $this->caldavBackend, $calendar); + } + } else { + $objs[] = new Sabre_CalDAV_Calendar($this->principalBackend, $this->caldavBackend, $calendar); + } } $objs[] = new Sabre_CalDAV_Schedule_Outbox($this->principalInfo['uri']); + + // We're adding a notifications node, if it's supported by the backend. + if ($this->caldavBackend instanceof Sabre_CalDAV_Backend_NotificationSupport) { + $objs[] = new Sabre_CalDAV_Notifications_Collection($this->caldavBackend, $this->principalInfo['uri']); + } return $objs; } @@ -185,8 +198,22 @@ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre */ public function createExtendedCollection($name, array $resourceType, array $properties) { - if (!in_array('{urn:ietf:params:xml:ns:caldav}calendar',$resourceType) || count($resourceType)!==2) { - throw new Sabre_DAV_Exception_InvalidResourceType('Unknown resourceType for this collection'); + $isCalendar = false; + foreach($resourceType as $rt) { + switch ($rt) { + case '{DAV:}collection' : + case '{http://calendarserver.org/ns/}shared-owner' : + // ignore + break; + case '{urn:ietf:params:xml:ns:caldav}calendar' : + $isCalendar = true; + break; + default : + throw new Sabre_DAV_Exception_InvalidResourceType('Unknown resourceType: ' . $rt); + } + } + if (!$isCalendar) { + throw new Sabre_DAV_Exception_InvalidResourceType('You can only create calendars in this collection'); } $this->caldavBackend->createCalendar($this->principalInfo['uri'], $name, $properties); @@ -295,4 +322,27 @@ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre } + /** + * This method is called when a user replied to a request to share. + * + * This method should return the url of the newly created calendar if the + * share was accepted. + * + * @param string href The sharee who is replying (often a mailto: address) + * @param int status One of the SharingPlugin::STATUS_* constants + * @param string $calendarUri The url to the calendar thats being shared + * @param string $inReplyTo The unique id this message is a response to + * @param string $summary A description of the reply + * @return null|string + */ + public function shareReply($href, $status, $calendarUri, $inReplyTo, $summary = null) { + + if (!$this->caldavBackend instanceof Sabre_CalDAV_Backend_SharingSupport) { + throw new Sabre_DAV_Exception_NotImplemented('Sharing support is not implemented by this backend.'); + } + + return $this->caldavBackend->shareReply($href, $status, $calendarUri, $inReplyTo, $summary); + + } + } diff --git a/3rdparty/Sabre/CalDAV/Version.php b/3rdparty/Sabre/CalDAV/Version.php index ace9901c089..0ad14fa0869 100755 --- a/3rdparty/Sabre/CalDAV/Version.php +++ b/3rdparty/Sabre/CalDAV/Version.php @@ -14,7 +14,7 @@ class Sabre_CalDAV_Version { /** * Full version number */ - const VERSION = '1.6.4'; + const VERSION = '1.7.0'; /** * Stability : alpha, beta, stable diff --git a/3rdparty/Sabre/CalDAV/includes.php b/3rdparty/Sabre/CalDAV/includes.php index 1ecb870a0e1..8b38e398f65 100755 --- a/3rdparty/Sabre/CalDAV/includes.php +++ b/3rdparty/Sabre/CalDAV/includes.php @@ -16,28 +16,47 @@ */ // Begin includes -include __DIR__ . '/Backend/Abstract.php'; -include __DIR__ . '/Backend/PDO.php'; +include __DIR__ . '/Backend/BackendInterface.php'; +include __DIR__ . '/Backend/NotificationSupport.php'; +include __DIR__ . '/Backend/SharingSupport.php'; include __DIR__ . '/CalendarQueryParser.php'; include __DIR__ . '/CalendarQueryValidator.php'; include __DIR__ . '/CalendarRootNode.php'; +include __DIR__ . '/Exception/InvalidComponentType.php'; include __DIR__ . '/ICalendar.php'; include __DIR__ . '/ICalendarObject.php'; include __DIR__ . '/ICSExportPlugin.php'; +include __DIR__ . '/IShareableCalendar.php'; +include __DIR__ . '/ISharedCalendar.php'; +include __DIR__ . '/Notifications/ICollection.php'; +include __DIR__ . '/Notifications/INode.php'; +include __DIR__ . '/Notifications/INotificationType.php'; +include __DIR__ . '/Notifications/Node.php'; +include __DIR__ . '/Notifications/Notification/Invite.php'; +include __DIR__ . '/Notifications/Notification/InviteReply.php'; +include __DIR__ . '/Notifications/Notification/SystemStatus.php'; include __DIR__ . '/Plugin.php'; include __DIR__ . '/Principal/Collection.php'; include __DIR__ . '/Principal/ProxyRead.php'; include __DIR__ . '/Principal/ProxyWrite.php'; include __DIR__ . '/Principal/User.php'; +include __DIR__ . '/Property/AllowedSharingModes.php'; +include __DIR__ . '/Property/Invite.php'; +include __DIR__ . '/Property/ScheduleCalendarTransp.php'; include __DIR__ . '/Property/SupportedCalendarComponentSet.php'; include __DIR__ . '/Property/SupportedCalendarData.php'; include __DIR__ . '/Property/SupportedCollationSet.php'; include __DIR__ . '/Schedule/IMip.php'; include __DIR__ . '/Schedule/IOutbox.php'; include __DIR__ . '/Schedule/Outbox.php'; -include __DIR__ . '/Server.php'; +include __DIR__ . '/SharingPlugin.php'; include __DIR__ . '/UserCalendars.php'; include __DIR__ . '/Version.php'; +include __DIR__ . '/Backend/Abstract.php'; +include __DIR__ . '/Backend/PDO.php'; include __DIR__ . '/Calendar.php'; include __DIR__ . '/CalendarObject.php'; +include __DIR__ . '/Notifications/Collection.php'; +include __DIR__ . '/ShareableCalendar.php'; +include __DIR__ . '/SharedCalendar.php'; // End includes diff --git a/3rdparty/Sabre/CardDAV/AddressBook.php b/3rdparty/Sabre/CardDAV/AddressBook.php index 12297175a85..8d545114d97 100755 --- a/3rdparty/Sabre/CardDAV/AddressBook.php +++ b/3rdparty/Sabre/CardDAV/AddressBook.php @@ -55,7 +55,7 @@ class Sabre_CardDAV_AddressBook extends Sabre_DAV_Collection implements Sabre_Ca * Returns a card * * @param string $name - * @return Sabre_DAV_Card + * @return Sabre_CardDAV_ICard */ public function getChild($name) { @@ -104,7 +104,7 @@ class Sabre_CardDAV_AddressBook extends Sabre_DAV_Collection implements Sabre_Ca * * @param string $name * @param resource $vcardData - * @return void|null + * @return string|null */ public function createFile($name,$vcardData = null) { diff --git a/3rdparty/Sabre/CardDAV/Card.php b/3rdparty/Sabre/CardDAV/Card.php index d7c66333837..0e35d321eb8 100755 --- a/3rdparty/Sabre/CardDAV/Card.php +++ b/3rdparty/Sabre/CardDAV/Card.php @@ -6,7 +6,7 @@ * @package Sabre * @subpackage CardDAV * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. - * @author Evert Pot (http://www.rooftopsolutions.nl/) + * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ class Sabre_CardDAV_Card extends Sabre_DAV_File implements Sabre_CardDAV_ICard, Sabre_DAVACL_IACL { @@ -78,7 +78,7 @@ class Sabre_CardDAV_Card extends Sabre_DAV_File implements Sabre_CardDAV_ICard, * Updates the VCard-formatted object * * @param string $cardData - * @return void + * @return string|null */ public function put($cardData) { @@ -114,7 +114,7 @@ class Sabre_CardDAV_Card extends Sabre_DAV_File implements Sabre_CardDAV_ICard, */ public function getContentType() { - return 'text/x-vcard'; + return 'text/x-vcard; charset=utf-8'; } @@ -128,7 +128,13 @@ class Sabre_CardDAV_Card extends Sabre_DAV_File implements Sabre_CardDAV_ICard, if (isset($this->cardData['etag'])) { return $this->cardData['etag']; } else { - return '"' . md5($this->get()) . '"'; + $data = $this->get(); + if (is_string($data)) { + return '"' . md5($data) . '"'; + } else { + // We refuse to calculate the md5 if it's a stream. + return null; + } } } @@ -136,7 +142,7 @@ class Sabre_CardDAV_Card extends Sabre_DAV_File implements Sabre_CardDAV_ICard, /** * Returns the last modification date as a unix timestamp * - * @return time + * @return int */ public function getLastModified() { diff --git a/3rdparty/Sabre/CardDAV/Plugin.php b/3rdparty/Sabre/CardDAV/Plugin.php index 96def6dd96b..12bccaec4fb 100755 --- a/3rdparty/Sabre/CardDAV/Plugin.php +++ b/3rdparty/Sabre/CardDAV/Plugin.php @@ -1,5 +1,7 @@ subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties')); + $server->subscribeEvent('afterGetProperties', array($this, 'afterGetProperties')); $server->subscribeEvent('updateProperties', array($this, 'updateProperties')); $server->subscribeEvent('report', array($this,'report')); $server->subscribeEvent('onHTMLActionsPanel', array($this,'htmlActionsPanel')); @@ -153,10 +156,6 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { if (is_resource($val)) $val = stream_get_contents($val); - // Taking out \r to not screw up the xml output - //$returnedProperties[200][$addressDataProp] = str_replace("\r","", $val); - // The stripping of \r breaks the Mail App in OSX Mountain Lion - // this is fixed in master, but not backported. /Tanghus $returnedProperties[200][$addressDataProp] = $val; } @@ -190,7 +189,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { * @param array $mutations * @param array $result * @param Sabre_DAV_INode $node - * @return void + * @return bool */ public function updateProperties(&$mutations, &$result, $node) { @@ -272,7 +271,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { $properties = array_keys(Sabre_DAV_XMLUtil::parseProperties($dom->firstChild)); - $hrefElems = $dom->getElementsByTagNameNS('urn:DAV','href'); + $hrefElems = $dom->getElementsByTagNameNS('DAV:','href'); $propertyList = array(); foreach($hrefElems as $elem) { @@ -282,9 +281,12 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { } + $prefer = $this->server->getHTTPPRefer(); + $this->server->httpResponse->sendStatus(207); $this->server->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); - $this->server->httpResponse->sendBody($this->server->generateMultiStatus($propertyList)); + $this->server->httpResponse->setHeader('Vary','Brief,Prefer'); + $this->server->httpResponse->sendBody($this->server->generateMultiStatus($propertyList, $prefer['return-minimal'])); } @@ -348,9 +350,9 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { try { - $vobj = Sabre_VObject_Reader::read($data); + $vobj = VObject\Reader::read($data); - } catch (Sabre_VObject_ParseException $e) { + } catch (VObject\ParseException $e) { throw new Sabre_DAV_Exception_UnsupportedMediaType('This resource only supports valid vcard data. Parse error: ' . $e->getMessage()); @@ -360,6 +362,10 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { throw new Sabre_DAV_Exception_UnsupportedMediaType('This collection can only support vcard objects.'); } + if (!isset($vobj->UID)) { + throw new Sabre_DAV_Exception_BadRequest('Every vcard must have an UID.'); + } + } @@ -424,9 +430,12 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { } + $prefer = $this->server->getHTTPPRefer(); + $this->server->httpResponse->sendStatus(207); $this->server->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); - $this->server->httpResponse->sendBody($this->server->generateMultiStatus($result)); + $this->server->httpResponse->setHeader('Vary','Brief,Prefer'); + $this->server->httpResponse->sendBody($this->server->generateMultiStatus($result, $prefer['return-minimal'])); } @@ -440,7 +449,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { */ public function validateFilters($vcardData, array $filters, $test) { - $vcard = Sabre_VObject_Reader::read($vcardData); + $vcard = VObject\Reader::read($vcardData); if (!$filters) return true; @@ -615,6 +624,30 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { } + /** + * This event is triggered after webdav-properties have been retrieved. + * + * @return bool + */ + public function afterGetProperties($uri, &$properties) { + + // If the request was made using the SOGO connector, we must rewrite + // the content-type property. By default SabreDAV will send back + // text/x-vcard; charset=utf-8, but for SOGO we must strip that last + // part. + if (!isset($properties[200]['{DAV:}getcontenttype'])) + return; + + if (strpos($this->server->httpRequest->getHeader('User-Agent'),'Thunderbird')===false) { + return; + } + + if (strpos($properties[200]['{DAV:}getcontenttype'],'text/x-vcard')===0) { + $properties[200]['{DAV:}getcontenttype'] = 'text/x-vcard'; + } + + } + /** * This method is used to generate HTML output for the * Sabre_DAV_Browser_Plugin. This allows us to generate an interface users diff --git a/3rdparty/Sabre/CardDAV/VCFExportPlugin.php b/3rdparty/Sabre/CardDAV/VCFExportPlugin.php new file mode 100755 index 00000000000..8850fef8afb --- /dev/null +++ b/3rdparty/Sabre/CardDAV/VCFExportPlugin.php @@ -0,0 +1,107 @@ +server = $server; + $this->server->subscribeEvent('beforeMethod',array($this,'beforeMethod'), 90); + + } + + /** + * 'beforeMethod' event handles. This event handles intercepts GET requests ending + * with ?export + * + * @param string $method + * @param string $uri + * @return bool + */ + public function beforeMethod($method, $uri) { + + if ($method!='GET') return; + if ($this->server->httpRequest->getQueryString()!='export') return; + + // splitting uri + list($uri) = explode('?',$uri,2); + + $node = $this->server->tree->getNodeForPath($uri); + + if (!($node instanceof Sabre_CardDAV_IAddressBook)) return; + + // Checking ACL, if available. + if ($aclPlugin = $this->server->getPlugin('acl')) { + $aclPlugin->checkPrivileges($uri, '{DAV:}read'); + } + + $this->server->httpResponse->setHeader('Content-Type','text/directory'); + $this->server->httpResponse->sendStatus(200); + + $nodes = $this->server->getPropertiesForPath($uri, array( + '{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}address-data', + ),1); + + $this->server->httpResponse->sendBody($this->generateVCF($nodes)); + + // Returning false to break the event chain + return false; + + } + + /** + * Merges all vcard objects, and builds one big vcf export + * + * @param array $nodes + * @return string + */ + public function generateVCF(array $nodes) { + + $output = ""; + + foreach($nodes as $node) { + + if (!isset($node[200]['{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}address-data'])) { + continue; + } + $nodeData = $node[200]['{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}address-data']; + + // Parsing this node so VObject can clean up the output. + $output .= + VObject\Reader::read($nodeData)->serialize(); + + } + + return $output; + + } + +} diff --git a/3rdparty/Sabre/CardDAV/Version.php b/3rdparty/Sabre/CardDAV/Version.php index d0623f0d3e8..6b70a2df9b5 100755 --- a/3rdparty/Sabre/CardDAV/Version.php +++ b/3rdparty/Sabre/CardDAV/Version.php @@ -16,7 +16,7 @@ class Sabre_CardDAV_Version { /** * Full version number */ - const VERSION = '1.6.3'; + const VERSION = '1.7.0'; /** * Stability : alpha, beta, stable diff --git a/3rdparty/Sabre/CardDAV/includes.php b/3rdparty/Sabre/CardDAV/includes.php index c3b8c04b077..08b4f76bd01 100755 --- a/3rdparty/Sabre/CardDAV/includes.php +++ b/3rdparty/Sabre/CardDAV/includes.php @@ -26,6 +26,7 @@ include __DIR__ . '/IDirectory.php'; include __DIR__ . '/Plugin.php'; include __DIR__ . '/Property/SupportedAddressData.php'; include __DIR__ . '/UserAddressBooks.php'; +include __DIR__ . '/VCFExportPlugin.php'; include __DIR__ . '/Version.php'; include __DIR__ . '/AddressBook.php'; include __DIR__ . '/Card.php'; diff --git a/3rdparty/Sabre/DAV/Browser/Plugin.php b/3rdparty/Sabre/DAV/Browser/Plugin.php index 09bbdd2ae02..b6440ab6340 100755 --- a/3rdparty/Sabre/DAV/Browser/Plugin.php +++ b/3rdparty/Sabre/DAV/Browser/Plugin.php @@ -338,7 +338,7 @@ class Sabre_DAV_Browser_Plugin extends Sabre_DAV_ServerPlugin { $icon = ''; if ($this->enableAssets) { - $node = $parent->getChild($name); + $node = $this->server->tree->getNodeForPath(($path?$path.'/':'') . $name); foreach(array_reverse($this->iconMap) as $class=>$iconName) { if ($node instanceof $class) { diff --git a/3rdparty/Sabre/DAV/Client.php b/3rdparty/Sabre/DAV/Client.php index 9a428765e90..9d9f4c96b02 100755 --- a/3rdparty/Sabre/DAV/Client.php +++ b/3rdparty/Sabre/DAV/Client.php @@ -16,12 +16,25 @@ */ class Sabre_DAV_Client { + /** + * The propertyMap is a key-value array. + * + * If you use the propertyMap, any {DAV:}multistatus responses with the + * proeprties listed in this array, will automatically be mapped to a + * respective class. + * + * The {DAV:}resourcetype property is automatically added. This maps to + * Sabre_DAV_Property_ResourceType + * + * @var array + */ public $propertyMap = array(); protected $baseUri; protected $userName; protected $password; protected $proxy; + protected $trustedCertificates; /** * Basic authentication @@ -87,6 +100,18 @@ class Sabre_DAV_Client { } + /** + * Add trusted root certificates to the webdav client. + * + * The parameter certificates should be a absulute path to a file + * which contains all trusted certificates + * + * @param string $certificates + */ + public function addTrustedCertificates($certificates) { + $this->trustedCertificates = $certificates; + } + /** * Does a PROPFIND request * @@ -143,13 +168,13 @@ class Sabre_DAV_Client { if ($depth===0) { reset($result); $result = current($result); - return $result[200]; + return isset($result[200])?$result[200]:array(); } $newResult = array(); foreach($result as $href => $statusList) { - $newResult[$href] = $statusList[200]; + $newResult[$href] = isset($statusList[200])?$statusList[200]:array(); } @@ -279,6 +304,10 @@ class Sabre_DAV_Client { CURLOPT_MAXREDIRS => 5, ); + if($this->trustedCertificates) { + $curlSettings[CURLOPT_CAINFO] = $this->trustedCertificates; + } + switch ($method) { case 'HEAD' : @@ -363,10 +392,30 @@ class Sabre_DAV_Client { if ($response['statusCode']>=400) { switch ($response['statusCode']) { + case 400 : + throw new Sabre_DAV_Exception_BadRequest('Bad request'); + case 401 : + throw new Sabre_DAV_Exception_NotAuthenticated('Not authenticated'); + case 402 : + throw new Sabre_DAV_Exception_PaymentRequired('Payment required'); + case 403 : + throw new Sabre_DAV_Exception_Forbidden('Forbidden'); case 404: - throw new Sabre_DAV_Exception_NotFound('Resource ' . $url . ' not found.'); - break; - + throw new Sabre_DAV_Exception_NotFound('Resource not found.'); + case 405 : + throw new Sabre_DAV_Exception_MethodNotAllowed('Method not allowed'); + case 409 : + throw new Sabre_DAV_Exception_Conflict('Conflict'); + case 412 : + throw new Sabre_DAV_Exception_PreconditionFailed('Precondition failed'); + case 416 : + throw new Sabre_DAV_Exception_RequestedRangeNotSatisfiable('Requested Range Not Satisfiable'); + case 500 : + throw new Sabre_DAV_Exception('Internal server error'); + case 501 : + throw new Sabre_DAV_Exception_NotImplemented('Not Implemented'); + case 507 : + throw new Sabre_DAV_Exception_InsufficientStorage('Insufficient storage'); default: throw new Sabre_DAV_Exception('HTTP error response. (errorcode ' . $response['statusCode'] . ')'); } @@ -386,6 +435,7 @@ class Sabre_DAV_Client { * @param array $settings * @return array */ + // @codeCoverageIgnoreStart protected function curlRequest($url, $settings) { $curl = curl_init($url); @@ -399,6 +449,7 @@ class Sabre_DAV_Client { ); } + // @codeCoverageIgnoreEnd /** * Returns the full url based on the given url (which may be relative). All @@ -453,19 +504,17 @@ class Sabre_DAV_Client { */ public function parseMultiStatus($body) { - $body = Sabre_DAV_XMLUtil::convertDAVNamespace($body); - $responseXML = simplexml_load_string($body, null, LIBXML_NOBLANKS | LIBXML_NOCDATA); if ($responseXML===false) { throw new InvalidArgumentException('The passed data is not valid XML'); } - $responseXML->registerXPathNamespace('d', 'urn:DAV'); + $responseXML->registerXPathNamespace('d', 'DAV:'); $propResult = array(); foreach($responseXML->xpath('d:response') as $response) { - $response->registerXPathNamespace('d', 'urn:DAV'); + $response->registerXPathNamespace('d', 'DAV:'); $href = $response->xpath('d:href'); $href = (string)$href[0]; @@ -473,7 +522,7 @@ class Sabre_DAV_Client { foreach($response->xpath('d:propstat') as $propStat) { - $propStat->registerXPathNamespace('d', 'urn:DAV'); + $propStat->registerXPathNamespace('d', 'DAV:'); $status = $propStat->xpath('d:status'); list($httpVersion, $statusCode, $message) = explode(' ', (string)$status[0],3); diff --git a/3rdparty/Sabre/DAV/Collection.php b/3rdparty/Sabre/DAV/Collection.php index 776c22531b2..c7648a8a52d 100755 --- a/3rdparty/Sabre/DAV/Collection.php +++ b/3rdparty/Sabre/DAV/Collection.php @@ -17,9 +17,13 @@ abstract class Sabre_DAV_Collection extends Sabre_DAV_Node implements Sabre_DAV_ /** * Returns a child object, by its name. * - * This method makes use of the getChildren method to grab all the child nodes, and compares the name. + * This method makes use of the getChildren method to grab all the child + * nodes, and compares the name. * Generally its wise to override this, as this can usually be optimized * + * This method must throw Sabre_DAV_Exception_NotFound if the node does not + * exist. + * * @param string $name * @throws Sabre_DAV_Exception_NotFound * @return Sabre_DAV_INode diff --git a/3rdparty/Sabre/DAV/Directory.php b/3rdparty/Sabre/DAV/Directory.php deleted file mode 100755 index 6db8febc02e..00000000000 --- a/3rdparty/Sabre/DAV/Directory.php +++ /dev/null @@ -1,17 +0,0 @@ -path, 'c'); + fseek($f,$offset-1); + if (is_string($data)) { + fwrite($f, $data); + } else { + stream_copy_to_stream($data,$f); + } + fclose($f); + return '"' . md5_file($this->path) . '"'; + + } + /** * Returns the data * - * @return string + * @return resource */ public function get() { diff --git a/3rdparty/Sabre/DAV/ICollection.php b/3rdparty/Sabre/DAV/ICollection.php index 4626038a66e..94431a0c496 100755 --- a/3rdparty/Sabre/DAV/ICollection.php +++ b/3rdparty/Sabre/DAV/ICollection.php @@ -19,7 +19,7 @@ interface Sabre_DAV_ICollection extends Sabre_DAV_INode { * Data will either be supplied as a stream resource, or in certain cases * as a string. Keep in mind that you may have to support either. * - * After succesful creation of the file, you may choose to return the ETag + * After successful creation of the file, you may choose to return the ETag * of the new file here. * * The returned ETag must be surrounded by double-quotes (The quotes should @@ -50,6 +50,9 @@ interface Sabre_DAV_ICollection extends Sabre_DAV_INode { /** * Returns a specific child node, referenced by its name * + * This method must throw Sabre_DAV_Exception_NotFound if the node does not + * exist. + * * @param string $name * @return Sabre_DAV_INode */ diff --git a/3rdparty/Sabre/DAV/IFile.php b/3rdparty/Sabre/DAV/IFile.php index 478f822ae71..1eca8986a5c 100755 --- a/3rdparty/Sabre/DAV/IFile.php +++ b/3rdparty/Sabre/DAV/IFile.php @@ -51,7 +51,7 @@ interface Sabre_DAV_IFile extends Sabre_DAV_INode { * * If null is returned, we'll assume application/octet-stream * - * @return void + * @return string|null */ function getContentType(); diff --git a/3rdparty/Sabre/DAV/Locks/Plugin.php b/3rdparty/Sabre/DAV/Locks/Plugin.php index 035b3a63863..957ac506a9c 100755 --- a/3rdparty/Sabre/DAV/Locks/Plugin.php +++ b/3rdparty/Sabre/DAV/Locks/Plugin.php @@ -152,6 +152,7 @@ class Sabre_DAV_Locks_Plugin extends Sabre_DAV_ServerPlugin { case 'MKCOL' : case 'PROPPATCH' : case 'PUT' : + case 'PATCH' : $lastLock = null; if (!$this->validateLock($uri,$lastLock)) throw new Sabre_DAV_Exception_Locked($lastLock); diff --git a/3rdparty/Sabre/DAV/Node.php b/3rdparty/Sabre/DAV/Node.php index 070b7176afd..3b95dfec2fa 100755 --- a/3rdparty/Sabre/DAV/Node.php +++ b/3rdparty/Sabre/DAV/Node.php @@ -27,7 +27,7 @@ abstract class Sabre_DAV_Node implements Sabre_DAV_INode { } /** - * Deleted the current node + * Deletes the current node * * @throws Sabre_DAV_Exception_Forbidden * @return void diff --git a/3rdparty/Sabre/DAV/ObjectTree.php b/3rdparty/Sabre/DAV/ObjectTree.php index bce51463900..3b7f222d64b 100755 --- a/3rdparty/Sabre/DAV/ObjectTree.php +++ b/3rdparty/Sabre/DAV/ObjectTree.php @@ -51,24 +51,30 @@ class Sabre_DAV_ObjectTree extends Sabre_DAV_Tree { $path = trim($path,'/'); if (isset($this->cache[$path])) return $this->cache[$path]; - //if (!$path || $path=='.') return $this->rootNode; - $currentNode = $this->rootNode; + // Is it the root node? + if (!strlen($path)) { + return $this->rootNode; + } - // We're splitting up the path variable into folder/subfolder components and traverse to the correct node.. - foreach(explode('/',$path) as $pathPart) { + // Attempting to fetch its parent + list($parentName, $baseName) = Sabre_DAV_URLUtil::splitPath($path); - // If this part of the path is just a dot, it actually means we can skip it - if ($pathPart=='.' || $pathPart=='') continue; + // If there was no parent, we must simply ask it from the root node. + if ($parentName==="") { + $node = $this->rootNode->getChild($baseName); + } else { + // Otherwise, we recursively grab the parent and ask him/her. + $parent = $this->getNodeForPath($parentName); - if (!($currentNode instanceof Sabre_DAV_ICollection)) + if (!($parent instanceof Sabre_DAV_ICollection)) throw new Sabre_DAV_Exception_NotFound('Could not find node at path: ' . $path); - $currentNode = $currentNode->getChild($pathPart); + $node = $parent->getChild($baseName); } - $this->cache[$path] = $currentNode; - return $currentNode; + $this->cache[$path] = $node; + return $node; } diff --git a/3rdparty/Sabre/DAV/PartialUpdate/IFile.php b/3rdparty/Sabre/DAV/PartialUpdate/IFile.php new file mode 100755 index 00000000000..cf5ad55c6de --- /dev/null +++ b/3rdparty/Sabre/DAV/PartialUpdate/IFile.php @@ -0,0 +1,38 @@ +addPlugin($patchPlugin); + * + * @package Sabre + * @subpackage DAV + * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. + * @author Jean-Tiare LE BIGOT (http://www.jtlebi.fr/) + * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License + */ +class Sabre_DAV_PartialUpdate_Plugin extends Sabre_DAV_ServerPlugin { + + /** + * Reference to server + * + * @var Sabre_DAV_Server + */ + protected $server; + + /** + * Initializes the plugin + * + * This method is automatically called by the Server class after addPlugin. + * + * @param Sabre_DAV_Server $server + * @return void + */ + public function initialize(Sabre_DAV_Server $server) { + + $this->server = $server; + $server->subscribeEvent('unknownMethod',array($this,'unknownMethod')); + + } + + /** + * Returns a plugin name. + * + * Using this name other plugins will be able to access other plugins + * using Sabre_DAV_Server::getPlugin + * + * @return string + */ + public function getPluginName() { + + return 'partialupdate'; + + } + + /** + * This method is called by the Server if the user used an HTTP method + * the server didn't recognize. + * + * This plugin intercepts the PATCH methods. + * + * @param string $method + * @param string $uri + * @return bool|null + */ + public function unknownMethod($method, $uri) { + + switch($method) { + + case 'PATCH': + return $this->httpPatch($uri); + + } + + } + + /** + * Use this method to tell the server this plugin defines additional + * HTTP methods. + * + * This method is passed a uri. It should only return HTTP methods that are + * available for the specified uri. + * + * We claim to support PATCH method (partial update) if and only if + * - the node exist + * - the node implements our partial update interface + * + * @param string $uri + * @return array + */ + public function getHTTPMethods($uri) { + + $tree = $this->server->tree; + + if ($tree->nodeExists($uri) && + $tree->getNodeForPath($uri) instanceof Sabre_DAV_PartialUpdate_IFile) { + return array('PATCH'); + } + + return array(); + + } + + /** + * Returns a list of features for the HTTP OPTIONS Dav: header. + * + * @return array + */ + public function getFeatures() { + + return array('sabredav-partialupdate'); + + } + + /** + * Patch an uri + * + * The WebDAV patch request can be used to modify only a part of an + * existing resource. If the resource does not exist yet and the first + * offset is not 0, the request fails + * + * @param string $uri + * @return void + */ + protected function httpPatch($uri) { + + // Get the node. Will throw a 404 if not found + $node = $this->server->tree->getNodeForPath($uri); + if (!($node instanceof Sabre_DAV_PartialUpdate_IFile)) { + throw new Sabre_DAV_Exception_MethodNotAllowed('The target resource does not support the PATCH method.'); + } + + $range = $this->getHTTPUpdateRange(); + + if (!$range) { + throw new Sabre_DAV_Exception_BadRequest('No valid "X-Update-Range" found in the headers'); + } + + $contentType = strtolower( + $this->server->httpRequest->getHeader('Content-Type') + ); + + if ($contentType != 'application/x-sabredav-partialupdate') { + throw new Sabre_DAV_Exception_UnsupportedMediaType('Unknown Content-Type header "' . $contentType . '"'); + } + + $len = $this->server->httpRequest->getHeader('Content-Length'); + + // Load the begin and end data + $start = ($range[0])?$range[0]:0; + $end = ($range[1])?$range[1]:$len-1; + + // Check consistency + if($end < $start) + throw new Sabre_DAV_Exception_RequestedRangeNotSatisfiable('The end offset (' . $range[1] . ') is lower than the start offset (' . $range[0] . ')'); + if($end - $start + 1 != $len) + throw new Sabre_DAV_Exception_RequestedRangeNotSatisfiable('Actual data length (' . $len . ') is not consistent with begin (' . $range[0] . ') and end (' . $range[1] . ') offsets'); + + // Checking If-None-Match and related headers. + if (!$this->server->checkPreconditions()) return; + + if (!$this->server->broadcastEvent('beforeWriteContent',array($uri, $node, null))) + return; + + $body = $this->server->httpRequest->getBody(); + $etag = $node->putRange($body, $start-1); + + $this->server->broadcastEvent('afterWriteContent',array($uri, $node)); + + $this->server->httpResponse->setHeader('Content-Length','0'); + if ($etag) $this->server->httpResponse->setHeader('ETag',$etag); + $this->server->httpResponse->sendStatus(204); + + return false; + + } + + /** + * Returns the HTTP custom range update header + * + * This method returns null if there is no well-formed HTTP range request + * header or array($start, $end). + * + * The first number is the offset of the first byte in the range. + * The second number is the offset of the last byte in the range. + * + * If the second offset is null, it should be treated as the offset of the last byte of the entity + * If the first offset is null, the second offset should be used to retrieve the last x bytes of the entity + * + * @return array|null + */ + public function getHTTPUpdateRange() { + + $range = $this->server->httpRequest->getHeader('X-Update-Range'); + if (is_null($range)) return null; + + // Matching "Range: bytes=1234-5678: both numbers are optional + + if (!preg_match('/^bytes=([0-9]*)-([0-9]*)$/i',$range,$matches)) return null; + + if ($matches[1]==='' && $matches[2]==='') return null; + + return array( + $matches[1]!==''?$matches[1]:null, + $matches[2]!==''?$matches[2]:null, + ); + + } +} diff --git a/3rdparty/Sabre/DAV/Property.php b/3rdparty/Sabre/DAV/Property.php index 1cfada3236c..6487bf44bc4 100755 --- a/3rdparty/Sabre/DAV/Property.php +++ b/3rdparty/Sabre/DAV/Property.php @@ -11,10 +11,16 @@ * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ -abstract class Sabre_DAV_Property { - - abstract function serialize(Sabre_DAV_Server $server, DOMElement $prop); +abstract class Sabre_DAV_Property implements Sabre_DAV_PropertyInterface { + /** + * Unserializes the property. + * + * This static method should return a an instance of this object. + * + * @param DOMElement $prop + * @return Sabre_DAV_IProperty + */ static function unserialize(DOMElement $prop) { throw new Sabre_DAV_Exception('Unserialize has not been implemented for this class'); diff --git a/3rdparty/Sabre/DAV/Property/Href.php b/3rdparty/Sabre/DAV/Property/Href.php index dac564f24d7..cd1d867f71b 100755 --- a/3rdparty/Sabre/DAV/Property/Href.php +++ b/3rdparty/Sabre/DAV/Property/Href.php @@ -82,7 +82,7 @@ class Sabre_DAV_Property_Href extends Sabre_DAV_Property implements Sabre_DAV_Pr */ static function unserialize(DOMElement $dom) { - if (Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild)==='{DAV:}href') { + if ($dom->firstChild && Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild)==='{DAV:}href') { return new self($dom->firstChild->textContent,false); } diff --git a/3rdparty/Sabre/DAV/Property/HrefList.php b/3rdparty/Sabre/DAV/Property/HrefList.php index 7a52272e885..282c452ca0b 100755 --- a/3rdparty/Sabre/DAV/Property/HrefList.php +++ b/3rdparty/Sabre/DAV/Property/HrefList.php @@ -79,7 +79,7 @@ class Sabre_DAV_Property_HrefList extends Sabre_DAV_Property { * It will only decode {DAV:}href values. * * @param DOMElement $dom - * @return Sabre_DAV_Property_Href + * @return Sabre_DAV_Property_HrefList */ static function unserialize(DOMElement $dom) { diff --git a/3rdparty/Sabre/DAV/Property/Response.php b/3rdparty/Sabre/DAV/Property/Response.php index 88afbcfb26d..9f21163d12e 100755 --- a/3rdparty/Sabre/DAV/Property/Response.php +++ b/3rdparty/Sabre/DAV/Property/Response.php @@ -138,7 +138,7 @@ class Sabre_DAV_Property_Response extends Sabre_DAV_Property implements Sabre_DA if (is_scalar($propertyValue)) { $text = $document->createTextNode($propertyValue); $currentProperty->appendChild($text); - } elseif ($propertyValue instanceof Sabre_DAV_Property) { + } elseif ($propertyValue instanceof Sabre_DAV_PropertyInterface) { $propertyValue->serialize($server,$currentProperty); } elseif (!is_null($propertyValue)) { throw new Sabre_DAV_Exception('Unknown property value type: ' . gettype($propertyValue) . ' for property: ' . $propertyName); diff --git a/3rdparty/Sabre/DAV/PropertyInterface.php b/3rdparty/Sabre/DAV/PropertyInterface.php new file mode 100755 index 00000000000..515072cbd35 --- /dev/null +++ b/3rdparty/Sabre/DAV/PropertyInterface.php @@ -0,0 +1,21 @@ +broadcastEvent('exception', array($e)); + } catch (Exception $ignore) { + } $DOM = new DOMDocument('1.0','utf-8'); $DOM->formatOutput = true; @@ -214,17 +217,23 @@ class Sabre_DAV_Server { $error->setAttribute('xmlns:s',self::NS_SABREDAV); $DOM->appendChild($error); - $error->appendChild($DOM->createElement('s:exception',get_class($e))); - $error->appendChild($DOM->createElement('s:message',$e->getMessage())); + $h = function($v) { + + return htmlspecialchars($v, ENT_NOQUOTES, 'UTF-8'); + + }; + + $error->appendChild($DOM->createElement('s:exception',$h(get_class($e)))); + $error->appendChild($DOM->createElement('s:message',$h($e->getMessage()))); if ($this->debugExceptions) { - $error->appendChild($DOM->createElement('s:file',$e->getFile())); - $error->appendChild($DOM->createElement('s:line',$e->getLine())); - $error->appendChild($DOM->createElement('s:code',$e->getCode())); - $error->appendChild($DOM->createElement('s:stacktrace',$e->getTraceAsString())); + $error->appendChild($DOM->createElement('s:file',$h($e->getFile()))); + $error->appendChild($DOM->createElement('s:line',$h($e->getLine()))); + $error->appendChild($DOM->createElement('s:code',$h($e->getCode()))); + $error->appendChild($DOM->createElement('s:stacktrace',$h($e->getTraceAsString()))); } if (self::$exposeVersion) { - $error->appendChild($DOM->createElement('s:sabredav-version',Sabre_DAV_Version::VERSION)); + $error->appendChild($DOM->createElement('s:sabredav-version',$h(Sabre_DAV_Version::VERSION))); } if($e instanceof Sabre_DAV_Exception) { @@ -508,7 +517,7 @@ class Sabre_DAV_Server { if (!$this->checkPreconditions(true)) return false; - if (!($node instanceof Sabre_DAV_IFile)) throw new Sabre_DAV_Exception_NotImplemented('GET is only implemented on File objects'); + if (!$node instanceof Sabre_DAV_IFile) throw new Sabre_DAV_Exception_NotImplemented('GET is only implemented on File objects'); $body = $node->get(); // Converting string into stream, if needed. @@ -696,6 +705,7 @@ class Sabre_DAV_Server { // This is a multi-status response $this->httpResponse->sendStatus(207); $this->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); + $this->httpResponse->setHeader('Vary','Brief,Prefer'); // Normally this header is only needed for OPTIONS responses, however.. // iCal seems to also depend on these being set for PROPFIND. Since @@ -704,7 +714,10 @@ class Sabre_DAV_Server { foreach($this->plugins as $plugin) $features = array_merge($features,$plugin->getFeatures()); $this->httpResponse->setHeader('DAV',implode(', ',$features)); - $data = $this->generateMultiStatus($newProperties); + $prefer = $this->getHTTPPrefer(); + $minimal = $prefer['return-minimal']; + + $data = $this->generateMultiStatus($newProperties, $minimal); $this->httpResponse->sendBody($data); } @@ -724,6 +737,30 @@ class Sabre_DAV_Server { $result = $this->updateProperties($uri, $newProperties); + $prefer = $this->getHTTPPrefer(); + $this->httpResponse->setHeader('Vary','Brief,Prefer'); + + if ($prefer['return-minimal']) { + + // If return-minimal is specified, we only have to check if the + // request was succesful, and don't need to return the + // multi-status. + $ok = true; + foreach($result as $code=>$prop) { + if ((int)$code > 299) { + $ok = false; + } + } + + if ($ok) { + + $this->httpResponse->sendStatus(204); + return; + + } + + } + $this->httpResponse->sendStatus(207); $this->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); @@ -927,7 +964,7 @@ class Sabre_DAV_Server { * This method moves one uri to a different uri. A lot of the actual request processing is done in getCopyMoveInfo * * @param string $uri - * @return void + * @return bool */ protected function httpMove($uri) { @@ -1009,7 +1046,7 @@ class Sabre_DAV_Server { if ($this->broadcastEvent('report',array($reportName,$dom, $uri))) { // If broadcastEvent returned true, it means the report was not supported - throw new Sabre_DAV_Exception_ReportNotImplemented(); + throw new Sabre_DAV_Exception_ReportNotSupported(); } @@ -1158,6 +1195,85 @@ class Sabre_DAV_Server { } + /** + * Returns the HTTP Prefer header information. + * + * The prefer header is defined in: + * http://tools.ietf.org/html/draft-snell-http-prefer-14 + * + * This method will return an array with options. + * + * Currently, the following options may be returned: + * array( + * 'return-asynch' => true, + * 'return-minimal' => true, + * 'return-representation' => true, + * 'wait' => 30, + * 'strict' => true, + * 'lenient' => true, + * ) + * + * This method also supports the Brief header, and will also return + * 'return-minimal' if the brief header was set to 't'. + * + * For the boolean options, false will be returned if the headers are not + * specified. For the integer options it will be 'null'. + * + * @return array + */ + public function getHTTPPrefer() { + + $result = array( + 'return-asynch' => false, + 'return-minimal' => false, + 'return-representation' => false, + 'wait' => null, + 'strict' => false, + 'lenient' => false, + ); + + if ($prefer = $this->httpRequest->getHeader('Prefer')) { + + $parameters = array_map('trim', + explode(',', $prefer) + ); + + foreach($parameters as $parameter) { + + // Right now our regex only supports the tokens actually + // specified in the draft. We may need to expand this if new + // tokens get registered. + if(!preg_match('/^(?P[a-z0-9-]+)(?:=(?P[0-9]+))?$/', $parameter, $matches)) { + continue; + } + + switch($matches['token']) { + + case 'return-asynch' : + case 'return-minimal' : + case 'return-representation' : + case 'strict' : + case 'lenient' : + $result[$matches['token']] = true; + break; + case 'wait' : + $result[$matches['token']] = $matches['value']; + break; + + } + + } + + } + + if ($this->httpRequest->getHeader('Brief')=='t') { + $result['return-minimal'] = true; + } + + return $result; + + } + /** * Returns information about Copy and Move requests @@ -1433,15 +1549,18 @@ class Sabre_DAV_Server { } - $this->broadcastEvent('afterGetProperties',array(trim($myPath,'/'),&$newProperties)); + $this->broadcastEvent('afterGetProperties',array(trim($myPath,'/'),&$newProperties, $node)); $newProperties['href'] = trim($myPath,'/'); // Its is a WebDAV recommendation to add a trailing slash to collectionnames. - // Apple's iCal also requires a trailing slash for principals (rfc 3744). - // Therefore we add a trailing / for any non-file. This might need adjustments - // if we find there are other edge cases. - if ($myPath!='' && isset($newProperties[200]['{DAV:}resourcetype']) && count($newProperties[200]['{DAV:}resourcetype']->getValue())>0) $newProperties['href'] .='/'; + // Apple's iCal also requires a trailing slash for principals (rfc 3744), though this is non-standard. + if ($myPath!='' && isset($newProperties[200]['{DAV:}resourcetype'])) { + $rt = $newProperties[200]['{DAV:}resourcetype']; + if ($rt->is('{DAV:}collection') || $rt->is('{DAV:}principal')) { + $newProperties['href'] .='/'; + } + } // If the resourcetype property was manually added to the requested property list, // we will remove it again. @@ -1476,11 +1595,14 @@ class Sabre_DAV_Server { if (!$this->broadcastEvent('beforeBind',array($uri))) return false; $parent = $this->tree->getNodeForPath($dir); + if (!$parent instanceof Sabre_DAV_ICollection) { + throw new Sabre_DAV_Exception_Conflict('Files can only be created as children of collections'); + } if (!$this->broadcastEvent('beforeCreateFile',array($uri, &$data, $parent))) return false; $etag = $parent->createFile($name,$data); - $this->tree->markDirty($dir); + $this->tree->markDirty($dir . '/' . $name); $this->broadcastEvent('afterBind',array($uri)); $this->broadcastEvent('afterCreateFile',array($uri, $parent)); @@ -1901,12 +2023,15 @@ class Sabre_DAV_Server { /** - * Generates a WebDAV propfind response body based on a list of nodes + * Generates a WebDAV propfind response body based on a list of nodes. + * + * If 'strip404s' is set to true, all 404 responses will be removed. * * @param array $fileProperties The list with nodes + * @param bool strip404s * @return string */ - public function generateMultiStatus(array $fileProperties) { + public function generateMultiStatus(array $fileProperties, $strip404s = false) { $dom = new DOMDocument('1.0','utf-8'); //$dom->formatOutput = true; @@ -1925,6 +2050,10 @@ class Sabre_DAV_Server { $href = $entry['href']; unset($entry['href']); + if ($strip404s && isset($entry[404])) { + unset($entry[404]); + } + $response = new Sabre_DAV_Property_Response($href,$entry); $response->serialize($this,$multiStatus); @@ -1995,7 +2124,7 @@ class Sabre_DAV_Server { if (!$body) return array(); $dom = Sabre_DAV_XMLUtil::loadDOMDocument($body); - $elem = $dom->getElementsByTagNameNS('urn:DAV','propfind')->item(0); + $elem = $dom->getElementsByTagNameNS('DAV:','propfind')->item(0); return array_keys(Sabre_DAV_XMLUtil::parseProperties($elem)); } diff --git a/3rdparty/Sabre/DAV/ServerPlugin.php b/3rdparty/Sabre/DAV/ServerPlugin.php index 131863d13fb..120569ffccd 100755 --- a/3rdparty/Sabre/DAV/ServerPlugin.php +++ b/3rdparty/Sabre/DAV/ServerPlugin.php @@ -19,7 +19,7 @@ abstract class Sabre_DAV_ServerPlugin { * This function is called by Sabre_DAV_Server, after * addPlugin is called. * - * This method should set up the requires event subscriptions. + * This method should set up the required event subscriptions. * * @param Sabre_DAV_Server $server * @return void diff --git a/3rdparty/Sabre/DAV/SimpleCollection.php b/3rdparty/Sabre/DAV/SimpleCollection.php index 4acf971caa5..79e2eaaacd4 100755 --- a/3rdparty/Sabre/DAV/SimpleCollection.php +++ b/3rdparty/Sabre/DAV/SimpleCollection.php @@ -31,7 +31,7 @@ class Sabre_DAV_SimpleCollection extends Sabre_DAV_Collection { /** * Creates this node * - * The name of the node must be passed, child nodes can also be bassed. + * The name of the node must be passed, child nodes can also be passed. * This nodes must be instances of Sabre_DAV_INode * * @param string $name @@ -78,6 +78,9 @@ class Sabre_DAV_SimpleCollection extends Sabre_DAV_Collection { * This method makes use of the getChildren method to grab all the child nodes, and compares the name. * Generally its wise to override this, as this can usually be optimized * + * This method must throw Sabre_DAV_Exception_NotFound if the node does not + * exist. + * * @param string $name * @throws Sabre_DAV_Exception_NotFound * @return Sabre_DAV_INode diff --git a/3rdparty/Sabre/DAV/SimpleDirectory.php b/3rdparty/Sabre/DAV/SimpleDirectory.php deleted file mode 100755 index 621222ebc53..00000000000 --- a/3rdparty/Sabre/DAV/SimpleDirectory.php +++ /dev/null @@ -1,21 +0,0 @@ -nodeType !== XML_ELEMENT_NODE) return null; - // Mapping back to the real namespace, in case it was dav - if ($dom->namespaceURI=='urn:DAV') $ns = 'DAV:'; else $ns = $dom->namespaceURI; + $ns = $dom->namespaceURI; // Mapping to clark notation return '{' . $ns . '}' . $dom->localName; @@ -64,29 +60,11 @@ class Sabre_DAV_XMLUtil { } - /** - * This method takes an XML document (as string) and converts all instances of the - * DAV: namespace to urn:DAV - * - * This is unfortunately needed, because the DAV: namespace violates the xml namespaces - * spec, and causes the DOM to throw errors - * - * @param string $xmlDocument - * @return array|string|null - */ - static function convertDAVNamespace($xmlDocument) { - - // This is used to map the DAV: namespace to urn:DAV. This is needed, because the DAV: - // namespace is actually a violation of the XML namespaces specification, and will cause errors - return preg_replace("/xmlns(:[A-Za-z0-9_]*)?=(\"|\')DAV:(\\2)/","xmlns\\1=\\2urn:DAV\\2",$xmlDocument); - - } - /** * This method provides a generic way to load a DOMDocument for WebDAV use. * * This method throws a Sabre_DAV_Exception_BadRequest exception for any xml errors. - * It does not preserve whitespace, and it converts the DAV: namespace to urn:DAV. + * It does not preserve whitespace. * * @param string $xml * @throws Sabre_DAV_Exception_BadRequest @@ -118,10 +96,11 @@ class Sabre_DAV_XMLUtil { libxml_clear_errors(); $dom = new DOMDocument(); - $dom->loadXML(self::convertDAVNamespace($xml),LIBXML_NOWARNING | LIBXML_NOERROR); // We don't generally care about any whitespace $dom->preserveWhiteSpace = false; + + $dom->loadXML($xml,LIBXML_NOWARNING | LIBXML_NOERROR); if ($error = libxml_get_last_error()) { libxml_clear_errors(); diff --git a/3rdparty/Sabre/DAV/includes.php b/3rdparty/Sabre/DAV/includes.php index 6a4890677ea..6728f88ce76 100755 --- a/3rdparty/Sabre/DAV/includes.php +++ b/3rdparty/Sabre/DAV/includes.php @@ -28,7 +28,7 @@ include __DIR__ . '/Locks/Backend/PDO.php'; include __DIR__ . '/Locks/LockInfo.php'; include __DIR__ . '/Node.php'; include __DIR__ . '/Property/IHref.php'; -include __DIR__ . '/Property.php'; +include __DIR__ . '/PropertyInterface.php'; include __DIR__ . '/Server.php'; include __DIR__ . '/ServerPlugin.php'; include __DIR__ . '/StringUtil.php'; @@ -60,7 +60,7 @@ include __DIR__ . '/Exception/NotFound.php'; include __DIR__ . '/Exception/NotImplemented.php'; include __DIR__ . '/Exception/PaymentRequired.php'; include __DIR__ . '/Exception/PreconditionFailed.php'; -include __DIR__ . '/Exception/ReportNotImplemented.php'; +include __DIR__ . '/Exception/ReportNotSupported.php'; include __DIR__ . '/Exception/RequestedRangeNotSatisfiable.php'; include __DIR__ . '/Exception/UnsupportedMediaType.php'; include __DIR__ . '/FS/Node.php'; @@ -72,18 +72,11 @@ include __DIR__ . '/IQuota.php'; include __DIR__ . '/Locks/Plugin.php'; include __DIR__ . '/Mount/Plugin.php'; include __DIR__ . '/ObjectTree.php'; -include __DIR__ . '/Property/GetLastModified.php'; -include __DIR__ . '/Property/Href.php'; -include __DIR__ . '/Property/HrefList.php'; -include __DIR__ . '/Property/LockDiscovery.php'; -include __DIR__ . '/Property/ResourceType.php'; -include __DIR__ . '/Property/Response.php'; -include __DIR__ . '/Property/ResponseList.php'; -include __DIR__ . '/Property/SupportedLock.php'; -include __DIR__ . '/Property/SupportedReportSet.php'; +include __DIR__ . '/PartialUpdate/IFile.php'; +include __DIR__ . '/PartialUpdate/Plugin.php'; +include __DIR__ . '/Property.php'; include __DIR__ . '/Tree/Filesystem.php'; include __DIR__ . '/Collection.php'; -include __DIR__ . '/Directory.php'; include __DIR__ . '/Exception/ConflictingLock.php'; include __DIR__ . '/Exception/FileNotFound.php'; include __DIR__ . '/File.php'; @@ -91,7 +84,15 @@ include __DIR__ . '/FS/Directory.php'; include __DIR__ . '/FS/File.php'; include __DIR__ . '/FSExt/Directory.php'; include __DIR__ . '/FSExt/File.php'; +include __DIR__ . '/Property/GetLastModified.php'; +include __DIR__ . '/Property/Href.php'; +include __DIR__ . '/Property/HrefList.php'; +include __DIR__ . '/Property/LockDiscovery.php'; +include __DIR__ . '/Property/ResourceType.php'; +include __DIR__ . '/Property/Response.php'; +include __DIR__ . '/Property/ResponseList.php'; +include __DIR__ . '/Property/SupportedLock.php'; +include __DIR__ . '/Property/SupportedReportSet.php'; include __DIR__ . '/SimpleCollection.php'; -include __DIR__ . '/SimpleDirectory.php'; include __DIR__ . '/SimpleFile.php'; // End includes diff --git a/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php b/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php index e05b7749805..f67eadad6e9 100755 --- a/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php +++ b/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php @@ -107,7 +107,7 @@ abstract class Sabre_DAVACL_AbstractPrincipalCollection extends Sabre_DAV_Collec * * @param string $name * @throws Sabre_DAV_Exception_NotFound - * @return Sabre_DAV_IPrincipal + * @return Sabre_DAVACL_IPrincipal */ public function getChild($name) { diff --git a/3rdparty/Sabre/DAVACL/IACL.php b/3rdparty/Sabre/DAVACL/IACL.php index 003e6993483..356bb481d55 100755 --- a/3rdparty/Sabre/DAVACL/IACL.php +++ b/3rdparty/Sabre/DAVACL/IACL.php @@ -48,7 +48,7 @@ interface Sabre_DAVACL_IACL extends Sabre_DAV_INode { /** * Updates the ACL * - * This method will receive a list of new ACE's. + * This method will receive a list of new ACE's as an array argument. * * @param array $acl * @return void diff --git a/3rdparty/Sabre/DAVACL/Plugin.php b/3rdparty/Sabre/DAVACL/Plugin.php index 5c828c6d97b..5b17c838475 100755 --- a/3rdparty/Sabre/DAVACL/Plugin.php +++ b/3rdparty/Sabre/DAVACL/Plugin.php @@ -3,7 +3,7 @@ /** * SabreDAV ACL Plugin * - * This plugin provides funcitonality to enforce ACL permissions. + * This plugin provides functionality to enforce ACL permissions. * ACL is defined in RFC3744. * * In addition it also provides support for the {DAV:}current-user-principal @@ -102,11 +102,11 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { ); /** - * Any principal uri's added here, will automatically be added to the list - * of ACL's. They will effectively receive {DAV:}all privileges, as a + * Any principal uri's added here, will automatically be added to the list + * of ACL's. They will effectively receive {DAV:}all privileges, as a * protected privilege. - * - * @var array + * + * @var array */ public $adminPrincipals = array(); @@ -233,6 +233,7 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { $authPlugin = $this->server->getPlugin('auth'); if (is_null($authPlugin)) return null; + /** @var $authPlugin Sabre_DAV_Auth_Plugin */ $userName = $authPlugin->getCurrentUser(); if (!$userName) return null; @@ -241,6 +242,14 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { } + /** + * This array holds a cache for all the principals that are associated with + * a single principal. + * + * @var array + */ + protected $currentUserPrincipalsCache = array(); + /** * Returns a list of principals that's associated to the current * user, either directly or through group membership. @@ -253,6 +262,11 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { if (is_null($currentUser)) return array(); + // First check our cache + if (isset($this->currentUserPrincipalsCache[$currentUser])) { + return $this->currentUserPrincipalsCache[$currentUser]; + } + $check = array($currentUser); $principals = array($currentUser); @@ -277,6 +291,9 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { } + // Store the result in the cache + $this->currentUserPrincipalsCache[$currentUser] = $principals; + return $principals; } @@ -771,7 +788,7 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { * @param array $requestedProperties * @param array $returnedProperties * @TODO really should be broken into multiple methods, or even a class. - * @return void + * @return bool */ public function beforeGetProperties($uri, Sabre_DAV_INode $node, &$requestedProperties, &$returnedProperties) { @@ -895,6 +912,18 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { $returnedProperties[200]['{DAV:}acl-restrictions'] = new Sabre_DAVACL_Property_AclRestrictions(); } + /* Adding ACL properties */ + if ($node instanceof Sabre_DAVACL_IACL) { + + if (false !== ($index = array_search('{DAV:}owner', $requestedProperties))) { + + unset($requestedProperties[$index]); + $returnedProperties[200]['{DAV:}owner'] = new Sabre_DAV_Property_Href($node->getOwner() . '/'); + + } + + } + } /** @@ -928,6 +957,9 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { } $node->setGroupMemberSet($memberSet); + // We must also clear our cache, just in case + + $this->currentUserPrincipalsCache = array(); $result[200]['{DAV:}group-member-set'] = null; unset($propertyDelta['{DAV:}group-member-set']); @@ -935,7 +967,7 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { } /** - * This method handels HTTP REPORT requests + * This method handles HTTP REPORT requests * * @param string $reportName * @param DOMNode $dom @@ -1268,10 +1300,12 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { } $result = $this->principalSearch($searchProperties, $requestedProperties, $uri); - $xml = $this->server->generateMultiStatus($result); - $this->server->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); + $prefer = $this->server->getHTTPPRefer(); + $this->server->httpResponse->sendStatus(207); - $this->server->httpResponse->sendBody($xml); + $this->server->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); + $this->server->httpResponse->setHeader('Vary','Brief,Prefer'); + $this->server->httpResponse->sendBody($this->server->generateMultiStatus($result, $prefer['return-minimal'])); } diff --git a/3rdparty/Sabre/DAVACL/Property/Acl.php b/3rdparty/Sabre/DAVACL/Property/Acl.php index 05e1a690b3c..3f79a8d532e 100755 --- a/3rdparty/Sabre/DAVACL/Property/Acl.php +++ b/3rdparty/Sabre/DAVACL/Property/Acl.php @@ -88,11 +88,11 @@ class Sabre_DAVACL_Property_Acl extends Sabre_DAV_Property { static public function unserialize(DOMElement $dom) { $privileges = array(); - $xaces = $dom->getElementsByTagNameNS('urn:DAV','ace'); + $xaces = $dom->getElementsByTagNameNS('DAV:','ace'); for($ii=0; $ii < $xaces->length; $ii++) { $xace = $xaces->item($ii); - $principal = $xace->getElementsByTagNameNS('urn:DAV','principal'); + $principal = $xace->getElementsByTagNameNS('DAV:','principal'); if ($principal->length !== 1) { throw new Sabre_DAV_Exception_BadRequest('Each {DAV:}ace element must have one {DAV:}principal element'); } @@ -116,17 +116,17 @@ class Sabre_DAVACL_Property_Acl extends Sabre_DAV_Property { $protected = false; - if ($xace->getElementsByTagNameNS('urn:DAV','protected')->length > 0) { + if ($xace->getElementsByTagNameNS('DAV:','protected')->length > 0) { $protected = true; } - $grants = $xace->getElementsByTagNameNS('urn:DAV','grant'); + $grants = $xace->getElementsByTagNameNS('DAV:','grant'); if ($grants->length < 1) { throw new Sabre_DAV_Exception_NotImplemented('Every {DAV:}ace element must have a {DAV:}grant element. {DAV:}deny is not yet supported'); } $grant = $grants->item(0); - $xprivs = $grant->getElementsByTagNameNS('urn:DAV','privilege'); + $xprivs = $grant->getElementsByTagNameNS('DAV:','privilege'); for($jj=0; $jj<$xprivs->length; $jj++) { $xpriv = $xprivs->item($jj); diff --git a/3rdparty/Sabre/DAVACL/Property/Principal.php b/3rdparty/Sabre/DAVACL/Property/Principal.php index c36328a58e0..3f681742276 100755 --- a/3rdparty/Sabre/DAVACL/Property/Principal.php +++ b/3rdparty/Sabre/DAVACL/Property/Principal.php @@ -15,7 +15,7 @@ class Sabre_DAVACL_Property_Principal extends Sabre_DAV_Property implements Sabre_DAV_Property_IHref { /** - * To specify a not-logged-in user, use the UNAUTHENTICTED principal + * To specify a not-logged-in user, use the UNAUTHENTICATED principal */ const UNAUTHENTICATED = 1; @@ -131,7 +131,7 @@ class Sabre_DAVACL_Property_Principal extends Sabre_DAV_Property implements Sabr * Deserializes a DOM element into a property object. * * @param DOMElement $dom - * @return Sabre_DAV_Property_Principal + * @return Sabre_DAVACL_Property_Principal */ static public function unserialize(DOMElement $dom) { diff --git a/3rdparty/Sabre/DAVACL/Version.php b/3rdparty/Sabre/DAVACL/Version.php index 9950f748741..084a9c13c89 100755 --- a/3rdparty/Sabre/DAVACL/Version.php +++ b/3rdparty/Sabre/DAVACL/Version.php @@ -14,7 +14,7 @@ class Sabre_DAVACL_Version { /** * Full version number */ - const VERSION = '1.6.0'; + const VERSION = '1.7.0'; /** * Stability : alpha, beta, stable diff --git a/3rdparty/Sabre/HTTP/Request.php b/3rdparty/Sabre/HTTP/Request.php index 4746ef77704..74d5ed3d7ee 100755 --- a/3rdparty/Sabre/HTTP/Request.php +++ b/3rdparty/Sabre/HTTP/Request.php @@ -184,7 +184,7 @@ class Sabre_HTTP_Request { * This method returns a readable stream resource. * If the asString parameter is set to true, a string is sent instead. * - * @param bool asString + * @param bool $asString * @return resource */ public function getBody($asString = false) { diff --git a/3rdparty/Sabre/HTTP/Response.php b/3rdparty/Sabre/HTTP/Response.php index ffe9bda2082..9d436881bdf 100755 --- a/3rdparty/Sabre/HTTP/Response.php +++ b/3rdparty/Sabre/HTTP/Response.php @@ -4,7 +4,7 @@ * Sabre_HTTP_Response * * @package Sabre - * @subpackage HTTP + * @subpackage HTTP * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License @@ -85,6 +85,9 @@ class Sabre_HTTP_Response { } + // @codeCoverageIgnoreStart + // We cannot reasonably test header() related methods. + /** * Sends an HTTP status header to the client * @@ -114,7 +117,9 @@ class Sabre_HTTP_Response { return header($name . ': ' . $value, $replace); else return false; + } + // @codeCoverageIgnoreEnd /** * Sets a bunch of HTTP Headers diff --git a/3rdparty/Sabre/HTTP/Version.php b/3rdparty/Sabre/HTTP/Version.php index e6b4f7e5358..8ccd7c9edf6 100755 --- a/3rdparty/Sabre/HTTP/Version.php +++ b/3rdparty/Sabre/HTTP/Version.php @@ -14,7 +14,7 @@ class Sabre_HTTP_Version { /** * Full version number */ - const VERSION = '1.6.4'; + const VERSION = '1.7.0'; /** * Stability : alpha, beta, stable diff --git a/3rdparty/Sabre/VObject/Component.php b/3rdparty/Sabre/VObject/Component.php deleted file mode 100755 index b78a26133fa..00000000000 --- a/3rdparty/Sabre/VObject/Component.php +++ /dev/null @@ -1,365 +0,0 @@ - 'Sabre_VObject_Component_VCalendar', - 'VEVENT' => 'Sabre_VObject_Component_VEvent', - 'VTODO' => 'Sabre_VObject_Component_VTodo', - 'VJOURNAL' => 'Sabre_VObject_Component_VJournal', - 'VALARM' => 'Sabre_VObject_Component_VAlarm', - ); - - /** - * Creates the new component by name, but in addition will also see if - * there's a class mapped to the property name. - * - * @param string $name - * @param string $value - * @return Sabre_VObject_Component - */ - static public function create($name, $value = null) { - - $name = strtoupper($name); - - if (isset(self::$classMap[$name])) { - return new self::$classMap[$name]($name, $value); - } else { - return new self($name, $value); - } - - } - - /** - * Creates a new component. - * - * By default this object will iterate over its own children, but this can - * be overridden with the iterator argument - * - * @param string $name - * @param Sabre_VObject_ElementList $iterator - */ - public function __construct($name, Sabre_VObject_ElementList $iterator = null) { - - $this->name = strtoupper($name); - if (!is_null($iterator)) $this->iterator = $iterator; - - } - - /** - * Turns the object back into a serialized blob. - * - * @return string - */ - public function serialize() { - - $str = "BEGIN:" . $this->name . "\r\n"; - - /** - * Gives a component a 'score' for sorting purposes. - * - * This is solely used by the childrenSort method. - * - * A higher score means the item will be higher in the list - * - * @param Sabre_VObject_Node $n - * @return int - */ - $sortScore = function($n) { - - if ($n instanceof Sabre_VObject_Component) { - // We want to encode VTIMEZONE first, this is a personal - // preference. - if ($n->name === 'VTIMEZONE') { - return 1; - } else { - return 0; - } - } else { - // VCARD version 4.0 wants the VERSION property to appear first - if ($n->name === 'VERSION') { - return 3; - } else { - return 2; - } - } - - }; - - usort($this->children, function($a, $b) use ($sortScore) { - - $sA = $sortScore($a); - $sB = $sortScore($b); - - if ($sA === $sB) return 0; - - return ($sA > $sB) ? -1 : 1; - - }); - - foreach($this->children as $child) $str.=$child->serialize(); - $str.= "END:" . $this->name . "\r\n"; - - return $str; - - } - - /** - * Adds a new component or element - * - * You can call this method with the following syntaxes: - * - * add(Sabre_VObject_Element $element) - * add(string $name, $value) - * - * The first version adds an Element - * The second adds a property as a string. - * - * @param mixed $item - * @param mixed $itemValue - * @return void - */ - public function add($item, $itemValue = null) { - - if ($item instanceof Sabre_VObject_Element) { - if (!is_null($itemValue)) { - throw new InvalidArgumentException('The second argument must not be specified, when passing a VObject'); - } - $item->parent = $this; - $this->children[] = $item; - } elseif(is_string($item)) { - - if (!is_scalar($itemValue)) { - throw new InvalidArgumentException('The second argument must be scalar'); - } - $item = Sabre_VObject_Property::create($item,$itemValue); - $item->parent = $this; - $this->children[] = $item; - - } else { - - throw new InvalidArgumentException('The first argument must either be a Sabre_VObject_Element or a string'); - - } - - } - - /** - * Returns an iterable list of children - * - * @return Sabre_VObject_ElementList - */ - public function children() { - - return new Sabre_VObject_ElementList($this->children); - - } - - /** - * Returns an array with elements that match the specified name. - * - * This function is also aware of MIME-Directory groups (as they appear in - * vcards). This means that if a property is grouped as "HOME.EMAIL", it - * will also be returned when searching for just "EMAIL". If you want to - * search for a property in a specific group, you can select on the entire - * string ("HOME.EMAIL"). If you want to search on a specific property that - * has not been assigned a group, specify ".EMAIL". - * - * Keys are retained from the 'children' array, which may be confusing in - * certain cases. - * - * @param string $name - * @return array - */ - public function select($name) { - - $group = null; - $name = strtoupper($name); - if (strpos($name,'.')!==false) { - list($group,$name) = explode('.', $name, 2); - } - - $result = array(); - foreach($this->children as $key=>$child) { - - if ( - strtoupper($child->name) === $name && - (is_null($group) || ( $child instanceof Sabre_VObject_Property && strtoupper($child->group) === $group)) - ) { - - $result[$key] = $child; - - } - } - - reset($result); - return $result; - - } - - /** - * This method only returns a list of sub-components. Properties are - * ignored. - * - * @return array - */ - public function getComponents() { - - $result = array(); - foreach($this->children as $child) { - if ($child instanceof Sabre_VObject_Component) { - $result[] = $child; - } - } - - return $result; - - } - - /* Magic property accessors {{{ */ - - /** - * Using 'get' you will either get a property or component, - * - * If there were no child-elements found with the specified name, - * null is returned. - * - * @param string $name - * @return Sabre_VObject_Property - */ - public function __get($name) { - - $matches = $this->select($name); - if (count($matches)===0) { - return null; - } else { - $firstMatch = current($matches); - /** @var $firstMatch Sabre_VObject_Property */ - $firstMatch->setIterator(new Sabre_VObject_ElementList(array_values($matches))); - return $firstMatch; - } - - } - - /** - * This method checks if a sub-element with the specified name exists. - * - * @param string $name - * @return bool - */ - public function __isset($name) { - - $matches = $this->select($name); - return count($matches)>0; - - } - - /** - * Using the setter method you can add properties or subcomponents - * - * You can either pass a Sabre_VObject_Component, Sabre_VObject_Property - * object, or a string to automatically create a Property. - * - * If the item already exists, it will be removed. If you want to add - * a new item with the same name, always use the add() method. - * - * @param string $name - * @param mixed $value - * @return void - */ - public function __set($name, $value) { - - $matches = $this->select($name); - $overWrite = count($matches)?key($matches):null; - - if ($value instanceof Sabre_VObject_Component || $value instanceof Sabre_VObject_Property) { - $value->parent = $this; - if (!is_null($overWrite)) { - $this->children[$overWrite] = $value; - } else { - $this->children[] = $value; - } - } elseif (is_scalar($value)) { - $property = Sabre_VObject_Property::create($name,$value); - $property->parent = $this; - if (!is_null($overWrite)) { - $this->children[$overWrite] = $property; - } else { - $this->children[] = $property; - } - } else { - throw new InvalidArgumentException('You must pass a Sabre_VObject_Component, Sabre_VObject_Property or scalar type'); - } - - } - - /** - * Removes all properties and components within this component. - * - * @param string $name - * @return void - */ - public function __unset($name) { - - $matches = $this->select($name); - foreach($matches as $k=>$child) { - - unset($this->children[$k]); - $child->parent = null; - - } - - } - - /* }}} */ - - /** - * This method is automatically called when the object is cloned. - * Specifically, this will ensure all child elements are also cloned. - * - * @return void - */ - public function __clone() { - - foreach($this->children as $key=>$child) { - $this->children[$key] = clone $child; - $this->children[$key]->parent = $this; - } - - } - -} diff --git a/3rdparty/Sabre/VObject/Component/VAlarm.php b/3rdparty/Sabre/VObject/Component/VAlarm.php deleted file mode 100755 index ebb4a9b18f6..00000000000 --- a/3rdparty/Sabre/VObject/Component/VAlarm.php +++ /dev/null @@ -1,102 +0,0 @@ -TRIGGER; - if(!isset($trigger['VALUE']) || strtoupper($trigger['VALUE']) === 'DURATION') { - $triggerDuration = Sabre_VObject_DateTimeParser::parseDuration($this->TRIGGER); - $related = (isset($trigger['RELATED']) && strtoupper($trigger['RELATED']) == 'END') ? 'END' : 'START'; - - $parentComponent = $this->parent; - if ($related === 'START') { - $effectiveTrigger = clone $parentComponent->DTSTART->getDateTime(); - $effectiveTrigger->add($triggerDuration); - } else { - if ($parentComponent->name === 'VTODO') { - $endProp = 'DUE'; - } elseif ($parentComponent->name === 'VEVENT') { - $endProp = 'DTEND'; - } else { - throw new Sabre_DAV_Exception('time-range filters on VALARM components are only supported when they are a child of VTODO or VEVENT'); - } - - if (isset($parentComponent->$endProp)) { - $effectiveTrigger = clone $parentComponent->$endProp->getDateTime(); - $effectiveTrigger->add($triggerDuration); - } elseif (isset($parentComponent->DURATION)) { - $effectiveTrigger = clone $parentComponent->DTSTART->getDateTime(); - $duration = Sabre_VObject_DateTimeParser::parseDuration($parentComponent->DURATION); - $effectiveTrigger->add($duration); - $effectiveTrigger->add($triggerDuration); - } else { - $effectiveTrigger = clone $parentComponent->DTSTART->getDateTime(); - $effectiveTrigger->add($triggerDuration); - } - } - } else { - $effectiveTrigger = $trigger->getDateTime(); - } - return $effectiveTrigger; - - } - - /** - * Returns true or false depending on if the event falls in the specified - * time-range. This is used for filtering purposes. - * - * The rules used to determine if an event falls within the specified - * time-range is based on the CalDAV specification. - * - * @param DateTime $start - * @param DateTime $end - * @return bool - */ - public function isInTimeRange(DateTime $start, DateTime $end) { - - $effectiveTrigger = $this->getEffectiveTriggerTime(); - - if (isset($this->DURATION)) { - $duration = Sabre_VObject_DateTimeParser::parseDuration($this->DURATION); - $repeat = (string)$this->repeat; - if (!$repeat) { - $repeat = 1; - } - - $period = new DatePeriod($effectiveTrigger, $duration, (int)$repeat); - - foreach($period as $occurrence) { - - if ($start <= $occurrence && $end > $occurrence) { - return true; - } - } - return false; - } else { - return ($start <= $effectiveTrigger && $end > $effectiveTrigger); - } - - } - -} - -?> diff --git a/3rdparty/Sabre/VObject/Component/VCalendar.php b/3rdparty/Sabre/VObject/Component/VCalendar.php deleted file mode 100755 index f3be29afdbb..00000000000 --- a/3rdparty/Sabre/VObject/Component/VCalendar.php +++ /dev/null @@ -1,133 +0,0 @@ -children as $component) { - - if (!$component instanceof Sabre_VObject_Component) - continue; - - if (isset($component->{'RECURRENCE-ID'})) - continue; - - if ($componentName && $component->name !== strtoupper($componentName)) - continue; - - if ($component->name === 'VTIMEZONE') - continue; - - $components[] = $component; - - } - - return $components; - - } - - /** - * If this calendar object, has events with recurrence rules, this method - * can be used to expand the event into multiple sub-events. - * - * Each event will be stripped from it's recurrence information, and only - * the instances of the event in the specified timerange will be left - * alone. - * - * In addition, this method will cause timezone information to be stripped, - * and normalized to UTC. - * - * This method will alter the VCalendar. This cannot be reversed. - * - * This functionality is specifically used by the CalDAV standard. It is - * possible for clients to request expand events, if they are rather simple - * clients and do not have the possibility to calculate recurrences. - * - * @param DateTime $start - * @param DateTime $end - * @return void - */ - public function expand(DateTime $start, DateTime $end) { - - $newEvents = array(); - - foreach($this->select('VEVENT') as $key=>$vevent) { - - if (isset($vevent->{'RECURRENCE-ID'})) { - unset($this->children[$key]); - continue; - } - - - if (!$vevent->rrule) { - unset($this->children[$key]); - if ($vevent->isInTimeRange($start, $end)) { - $newEvents[] = $vevent; - } - continue; - } - - $uid = (string)$vevent->uid; - if (!$uid) { - throw new LogicException('Event did not have a UID!'); - } - - $it = new Sabre_VObject_RecurrenceIterator($this, $vevent->uid); - $it->fastForward($start); - - while($it->valid() && $it->getDTStart() < $end) { - - if ($it->getDTEnd() > $start) { - - $newEvents[] = $it->getEventObject(); - - } - $it->next(); - - } - unset($this->children[$key]); - - } - - foreach($newEvents as $newEvent) { - - foreach($newEvent->children as $child) { - if ($child instanceof Sabre_VObject_Property_DateTime && - $child->getDateType() == Sabre_VObject_Property_DateTime::LOCALTZ) { - $child->setDateTime($child->getDateTime(),Sabre_VObject_Property_DateTime::UTC); - } - } - - $this->add($newEvent); - - } - - // Removing all VTIMEZONE components - unset($this->VTIMEZONE); - - } - -} - diff --git a/3rdparty/Sabre/VObject/Component/VEvent.php b/3rdparty/Sabre/VObject/Component/VEvent.php deleted file mode 100755 index d6b910874d0..00000000000 --- a/3rdparty/Sabre/VObject/Component/VEvent.php +++ /dev/null @@ -1,71 +0,0 @@ -RRULE) { - $it = new Sabre_VObject_RecurrenceIterator($this); - $it->fastForward($start); - - // We fast-forwarded to a spot where the end-time of the - // recurrence instance exceeded the start of the requested - // time-range. - // - // If the starttime of the recurrence did not exceed the - // end of the time range as well, we have a match. - return ($it->getDTStart() < $end && $it->getDTEnd() > $start); - - } - - $effectiveStart = $this->DTSTART->getDateTime(); - if (isset($this->DTEND)) { - - // The DTEND property is considered non inclusive. So for a 3 day - // event in july, dtstart and dtend would have to be July 1st and - // July 4th respectively. - // - // See: - // http://tools.ietf.org/html/rfc5545#page-54 - $effectiveEnd = $this->DTEND->getDateTime(); - - } elseif (isset($this->DURATION)) { - $effectiveEnd = clone $effectiveStart; - $effectiveEnd->add( Sabre_VObject_DateTimeParser::parseDuration($this->DURATION) ); - } elseif ($this->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE) { - $effectiveEnd = clone $effectiveStart; - $effectiveEnd->modify('+1 day'); - } else { - $effectiveEnd = clone $effectiveStart; - } - return ( - ($start <= $effectiveEnd) && ($end > $effectiveStart) - ); - - } - -} - -?> diff --git a/3rdparty/Sabre/VObject/Component/VJournal.php b/3rdparty/Sabre/VObject/Component/VJournal.php deleted file mode 100755 index 22b3ec921e5..00000000000 --- a/3rdparty/Sabre/VObject/Component/VJournal.php +++ /dev/null @@ -1,46 +0,0 @@ -DTSTART)?$this->DTSTART->getDateTime():null; - if ($dtstart) { - $effectiveEnd = clone $dtstart; - if ($this->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE) { - $effectiveEnd->modify('+1 day'); - } - - return ($start <= $effectiveEnd && $end > $dtstart); - - } - return false; - - - } - -} - -?> diff --git a/3rdparty/Sabre/VObject/Component/VTodo.php b/3rdparty/Sabre/VObject/Component/VTodo.php deleted file mode 100755 index 79d06298d7f..00000000000 --- a/3rdparty/Sabre/VObject/Component/VTodo.php +++ /dev/null @@ -1,68 +0,0 @@ -DTSTART)?$this->DTSTART->getDateTime():null; - $duration = isset($this->DURATION)?Sabre_VObject_DateTimeParser::parseDuration($this->DURATION):null; - $due = isset($this->DUE)?$this->DUE->getDateTime():null; - $completed = isset($this->COMPLETED)?$this->COMPLETED->getDateTime():null; - $created = isset($this->CREATED)?$this->CREATED->getDateTime():null; - - if ($dtstart) { - if ($duration) { - $effectiveEnd = clone $dtstart; - $effectiveEnd->add($duration); - return $start <= $effectiveEnd && $end > $dtstart; - } elseif ($due) { - return - ($start < $due || $start <= $dtstart) && - ($end > $dtstart || $end >= $due); - } else { - return $start <= $dtstart && $end > $dtstart; - } - } - if ($due) { - return ($start < $due && $end >= $due); - } - if ($completed && $created) { - return - ($start <= $created || $start <= $completed) && - ($end >= $created || $end >= $completed); - } - if ($completed) { - return ($start <= $completed && $end >= $completed); - } - if ($created) { - return ($end > $created); - } - return true; - - } - -} - -?> diff --git a/3rdparty/Sabre/VObject/DateTimeParser.php b/3rdparty/Sabre/VObject/DateTimeParser.php deleted file mode 100755 index 23a4bb69916..00000000000 --- a/3rdparty/Sabre/VObject/DateTimeParser.php +++ /dev/null @@ -1,181 +0,0 @@ -setTimeZone(new DateTimeZone('UTC')); - return $date; - - } - - /** - * Parses an iCalendar (rfc5545) formatted date and returns a DateTime object - * - * @param string $date - * @return DateTime - */ - static public function parseDate($date) { - - // Format is YYYYMMDD - $result = preg_match('/^([1-3][0-9]{3})([0-1][0-9])([0-3][0-9])$/',$date,$matches); - - if (!$result) { - throw new Sabre_DAV_Exception_BadRequest('The supplied iCalendar date value is incorrect: ' . $date); - } - - $date = new DateTime($matches[1] . '-' . $matches[2] . '-' . $matches[3], new DateTimeZone('UTC')); - return $date; - - } - - /** - * Parses an iCalendar (RFC5545) formatted duration value. - * - * This method will either return a DateTimeInterval object, or a string - * suitable for strtotime or DateTime::modify. - * - * @param string $duration - * @param bool $asString - * @return DateInterval|string - */ - static public function parseDuration($duration, $asString = false) { - - $result = preg_match('/^(?P\+|-)?P((?P\d+)W)?((?P\d+)D)?(T((?P\d+)H)?((?P\d+)M)?((?P\d+)S)?)?$/', $duration, $matches); - if (!$result) { - throw new Sabre_DAV_Exception_BadRequest('The supplied iCalendar duration value is incorrect: ' . $duration); - } - - if (!$asString) { - $invert = false; - if ($matches['plusminus']==='-') { - $invert = true; - } - - - $parts = array( - 'week', - 'day', - 'hour', - 'minute', - 'second', - ); - foreach($parts as $part) { - $matches[$part] = isset($matches[$part])&&$matches[$part]?(int)$matches[$part]:0; - } - - - // We need to re-construct the $duration string, because weeks and - // days are not supported by DateInterval in the same string. - $duration = 'P'; - $days = $matches['day']; - if ($matches['week']) { - $days+=$matches['week']*7; - } - if ($days) - $duration.=$days . 'D'; - - if ($matches['minute'] || $matches['second'] || $matches['hour']) { - $duration.='T'; - - if ($matches['hour']) - $duration.=$matches['hour'].'H'; - - if ($matches['minute']) - $duration.=$matches['minute'].'M'; - - if ($matches['second']) - $duration.=$matches['second'].'S'; - - } - - if ($duration==='P') { - $duration = 'PT0S'; - } - $iv = new DateInterval($duration); - if ($invert) $iv->invert = true; - - return $iv; - - } - - - - $parts = array( - 'week', - 'day', - 'hour', - 'minute', - 'second', - ); - - $newDur = ''; - foreach($parts as $part) { - if (isset($matches[$part]) && $matches[$part]) { - $newDur.=' '.$matches[$part] . ' ' . $part . 's'; - } - } - - $newDur = ($matches['plusminus']==='-'?'-':'+') . trim($newDur); - if ($newDur === '+') { $newDur = '+0 seconds'; }; - return $newDur; - - } - - /** - * Parses either a Date or DateTime, or Duration value. - * - * @param string $date - * @param DateTimeZone|string $referenceTZ - * @return DateTime|DateInterval - */ - static public function parse($date, $referenceTZ = null) { - - if ($date[0]==='P' || ($date[0]==='-' && $date[1]==='P')) { - return self::parseDuration($date); - } elseif (strlen($date)===8) { - return self::parseDate($date); - } else { - return self::parseDateTime($date, $referenceTZ); - } - - } - - -} diff --git a/3rdparty/Sabre/VObject/Element.php b/3rdparty/Sabre/VObject/Element.php deleted file mode 100755 index e20ff0b353c..00000000000 --- a/3rdparty/Sabre/VObject/Element.php +++ /dev/null @@ -1,16 +0,0 @@ -vevent where there's multiple VEVENT objects. - * - * @package Sabre - * @subpackage VObject - * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. - * @author Evert Pot (http://www.rooftopsolutions.nl/) - * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License - */ -class Sabre_VObject_ElementList implements Iterator, Countable, ArrayAccess { - - /** - * Inner elements - * - * @var array - */ - protected $elements = array(); - - /** - * Creates the element list. - * - * @param array $elements - */ - public function __construct(array $elements) { - - $this->elements = $elements; - - } - - /* {{{ Iterator interface */ - - /** - * Current position - * - * @var int - */ - private $key = 0; - - /** - * Returns current item in iteration - * - * @return Sabre_VObject_Element - */ - public function current() { - - return $this->elements[$this->key]; - - } - - /** - * To the next item in the iterator - * - * @return void - */ - public function next() { - - $this->key++; - - } - - /** - * Returns the current iterator key - * - * @return int - */ - public function key() { - - return $this->key; - - } - - /** - * Returns true if the current position in the iterator is a valid one - * - * @return bool - */ - public function valid() { - - return isset($this->elements[$this->key]); - - } - - /** - * Rewinds the iterator - * - * @return void - */ - public function rewind() { - - $this->key = 0; - - } - - /* }}} */ - - /* {{{ Countable interface */ - - /** - * Returns the number of elements - * - * @return int - */ - public function count() { - - return count($this->elements); - - } - - /* }}} */ - - /* {{{ ArrayAccess Interface */ - - - /** - * Checks if an item exists through ArrayAccess. - * - * @param int $offset - * @return bool - */ - public function offsetExists($offset) { - - return isset($this->elements[$offset]); - - } - - /** - * Gets an item through ArrayAccess. - * - * @param int $offset - * @return mixed - */ - public function offsetGet($offset) { - - return $this->elements[$offset]; - - } - - /** - * Sets an item through ArrayAccess. - * - * @param int $offset - * @param mixed $value - * @return void - */ - public function offsetSet($offset,$value) { - - throw new LogicException('You can not add new objects to an ElementList'); - - } - - /** - * Sets an item through ArrayAccess. - * - * This method just forwards the request to the inner iterator - * - * @param int $offset - * @return void - */ - public function offsetUnset($offset) { - - throw new LogicException('You can not remove objects from an ElementList'); - - } - - /* }}} */ - -} diff --git a/3rdparty/Sabre/VObject/FreeBusyGenerator.php b/3rdparty/Sabre/VObject/FreeBusyGenerator.php deleted file mode 100755 index 1c96a64a004..00000000000 --- a/3rdparty/Sabre/VObject/FreeBusyGenerator.php +++ /dev/null @@ -1,297 +0,0 @@ -baseObject = $vcalendar; - - } - - /** - * Sets the input objects - * - * Every object must either be a string or a Sabre_VObject_Component. - * - * @param array $objects - * @return void - */ - public function setObjects(array $objects) { - - $this->objects = array(); - foreach($objects as $object) { - - if (is_string($object)) { - $this->objects[] = Sabre_VObject_Reader::read($object); - } elseif ($object instanceof Sabre_VObject_Component) { - $this->objects[] = $object; - } else { - throw new InvalidArgumentException('You can only pass strings or Sabre_VObject_Component arguments to setObjects'); - } - - } - - } - - /** - * Sets the time range - * - * Any freebusy object falling outside of this time range will be ignored. - * - * @param DateTime $start - * @param DateTime $end - * @return void - */ - public function setTimeRange(DateTime $start = null, DateTime $end = null) { - - $this->start = $start; - $this->end = $end; - - } - - /** - * Parses the input data and returns a correct VFREEBUSY object, wrapped in - * a VCALENDAR. - * - * @return Sabre_VObject_Component - */ - public function getResult() { - - $busyTimes = array(); - - foreach($this->objects as $object) { - - foreach($object->getBaseComponents() as $component) { - - switch($component->name) { - - case 'VEVENT' : - - $FBTYPE = 'BUSY'; - if (isset($component->TRANSP) && (strtoupper($component->TRANSP) === 'TRANSPARENT')) { - break; - } - if (isset($component->STATUS)) { - $status = strtoupper($component->STATUS); - if ($status==='CANCELLED') { - break; - } - if ($status==='TENTATIVE') { - $FBTYPE = 'BUSY-TENTATIVE'; - } - } - - $times = array(); - - if ($component->RRULE) { - - $iterator = new Sabre_VObject_RecurrenceIterator($object, (string)$component->uid); - if ($this->start) { - $iterator->fastForward($this->start); - } - - $maxRecurrences = 200; - - while($iterator->valid() && --$maxRecurrences) { - - $startTime = $iterator->getDTStart(); - if ($this->end && $startTime > $this->end) { - break; - } - $times[] = array( - $iterator->getDTStart(), - $iterator->getDTEnd(), - ); - - $iterator->next(); - - } - - } else { - - $startTime = $component->DTSTART->getDateTime(); - if ($this->end && $startTime > $this->end) { - break; - } - $endTime = null; - if (isset($component->DTEND)) { - $endTime = $component->DTEND->getDateTime(); - } elseif (isset($component->DURATION)) { - $duration = Sabre_VObject_DateTimeParser::parseDuration((string)$component->DURATION); - $endTime = clone $startTime; - $endTime->add($duration); - } elseif ($component->DTSTART->getDateType() === Sabre_VObject_Property_DateTime::DATE) { - $endTime = clone $startTime; - $endTime->modify('+1 day'); - } else { - // The event had no duration (0 seconds) - break; - } - - $times[] = array($startTime, $endTime); - - } - - foreach($times as $time) { - - if ($this->end && $time[0] > $this->end) break; - if ($this->start && $time[1] < $this->start) break; - - $busyTimes[] = array( - $time[0], - $time[1], - $FBTYPE, - ); - } - break; - - case 'VFREEBUSY' : - foreach($component->FREEBUSY as $freebusy) { - - $fbType = isset($freebusy['FBTYPE'])?strtoupper($freebusy['FBTYPE']):'BUSY'; - - // Skipping intervals marked as 'free' - if ($fbType==='FREE') - continue; - - $values = explode(',', $freebusy); - foreach($values as $value) { - list($startTime, $endTime) = explode('/', $value); - $startTime = Sabre_VObject_DateTimeParser::parseDateTime($startTime); - - if (substr($endTime,0,1)==='P' || substr($endTime,0,2)==='-P') { - $duration = Sabre_VObject_DateTimeParser::parseDuration($endTime); - $endTime = clone $startTime; - $endTime->add($duration); - } else { - $endTime = Sabre_VObject_DateTimeParser::parseDateTime($endTime); - } - - if($this->start && $this->start > $endTime) continue; - if($this->end && $this->end < $startTime) continue; - $busyTimes[] = array( - $startTime, - $endTime, - $fbType - ); - - } - - - } - break; - - - - } - - - } - - } - - if ($this->baseObject) { - $calendar = $this->baseObject; - } else { - $calendar = new Sabre_VObject_Component('VCALENDAR'); - $calendar->version = '2.0'; - if (Sabre_DAV_Server::$exposeVersion) { - $calendar->prodid = '-//SabreDAV//Sabre VObject ' . Sabre_VObject_Version::VERSION . '//EN'; - } else { - $calendar->prodid = '-//SabreDAV//Sabre VObject//EN'; - } - $calendar->calscale = 'GREGORIAN'; - } - - $vfreebusy = new Sabre_VObject_Component('VFREEBUSY'); - $calendar->add($vfreebusy); - - if ($this->start) { - $dtstart = new Sabre_VObject_Property_DateTime('DTSTART'); - $dtstart->setDateTime($this->start,Sabre_VObject_Property_DateTime::UTC); - $vfreebusy->add($dtstart); - } - if ($this->end) { - $dtend = new Sabre_VObject_Property_DateTime('DTEND'); - $dtend->setDateTime($this->start,Sabre_VObject_Property_DateTime::UTC); - $vfreebusy->add($dtend); - } - $dtstamp = new Sabre_VObject_Property_DateTime('DTSTAMP'); - $dtstamp->setDateTime(new DateTime('now'), Sabre_VObject_Property_DateTime::UTC); - $vfreebusy->add($dtstamp); - - foreach($busyTimes as $busyTime) { - - $busyTime[0]->setTimeZone(new DateTimeZone('UTC')); - $busyTime[1]->setTimeZone(new DateTimeZone('UTC')); - - $prop = new Sabre_VObject_Property( - 'FREEBUSY', - $busyTime[0]->format('Ymd\\THis\\Z') . '/' . $busyTime[1]->format('Ymd\\THis\\Z') - ); - $prop['FBTYPE'] = $busyTime[2]; - $vfreebusy->add($prop); - - } - - return $calendar; - - } - -} - diff --git a/3rdparty/Sabre/VObject/Node.php b/3rdparty/Sabre/VObject/Node.php deleted file mode 100755 index d89e01b56c6..00000000000 --- a/3rdparty/Sabre/VObject/Node.php +++ /dev/null @@ -1,149 +0,0 @@ -iterator)) - return $this->iterator; - - return new Sabre_VObject_ElementList(array($this)); - - } - - /** - * Sets the overridden iterator - * - * Note that this is not actually part of the iterator interface - * - * @param Sabre_VObject_ElementList $iterator - * @return void - */ - public function setIterator(Sabre_VObject_ElementList $iterator) { - - $this->iterator = $iterator; - - } - - /* }}} */ - - /* {{{ Countable interface */ - - /** - * Returns the number of elements - * - * @return int - */ - public function count() { - - $it = $this->getIterator(); - return $it->count(); - - } - - /* }}} */ - - /* {{{ ArrayAccess Interface */ - - - /** - * Checks if an item exists through ArrayAccess. - * - * This method just forwards the request to the inner iterator - * - * @param int $offset - * @return bool - */ - public function offsetExists($offset) { - - $iterator = $this->getIterator(); - return $iterator->offsetExists($offset); - - } - - /** - * Gets an item through ArrayAccess. - * - * This method just forwards the request to the inner iterator - * - * @param int $offset - * @return mixed - */ - public function offsetGet($offset) { - - $iterator = $this->getIterator(); - return $iterator->offsetGet($offset); - - } - - /** - * Sets an item through ArrayAccess. - * - * This method just forwards the request to the inner iterator - * - * @param int $offset - * @param mixed $value - * @return void - */ - public function offsetSet($offset,$value) { - - $iterator = $this->getIterator(); - return $iterator->offsetSet($offset,$value); - - } - - /** - * Sets an item through ArrayAccess. - * - * This method just forwards the request to the inner iterator - * - * @param int $offset - * @return void - */ - public function offsetUnset($offset) { - - $iterator = $this->getIterator(); - return $iterator->offsetUnset($offset); - - } - - /* }}} */ - -} diff --git a/3rdparty/Sabre/VObject/Parameter.php b/3rdparty/Sabre/VObject/Parameter.php deleted file mode 100755 index 2e39af5f78a..00000000000 --- a/3rdparty/Sabre/VObject/Parameter.php +++ /dev/null @@ -1,84 +0,0 @@ -name = strtoupper($name); - $this->value = $value; - - } - - /** - * Turns the object back into a serialized blob. - * - * @return string - */ - public function serialize() { - - if (is_null($this->value)) { - return $this->name; - } - $src = array( - '\\', - "\n", - ';', - ',', - ); - $out = array( - '\\\\', - '\n', - '\;', - '\,', - ); - - return $this->name . '=' . str_replace($src, $out, $this->value); - - } - - /** - * Called when this object is being cast to a string - * - * @return string - */ - public function __toString() { - - return $this->value; - - } - -} diff --git a/3rdparty/Sabre/VObject/ParseException.php b/3rdparty/Sabre/VObject/ParseException.php deleted file mode 100755 index 1b5e95bf16e..00000000000 --- a/3rdparty/Sabre/VObject/ParseException.php +++ /dev/null @@ -1,12 +0,0 @@ - 'Sabre_VObject_Property_DateTime', - 'CREATED' => 'Sabre_VObject_Property_DateTime', - 'DTEND' => 'Sabre_VObject_Property_DateTime', - 'DTSTAMP' => 'Sabre_VObject_Property_DateTime', - 'DTSTART' => 'Sabre_VObject_Property_DateTime', - 'DUE' => 'Sabre_VObject_Property_DateTime', - 'EXDATE' => 'Sabre_VObject_Property_MultiDateTime', - 'LAST-MODIFIED' => 'Sabre_VObject_Property_DateTime', - 'RECURRENCE-ID' => 'Sabre_VObject_Property_DateTime', - 'TRIGGER' => 'Sabre_VObject_Property_DateTime', - ); - - /** - * Creates the new property by name, but in addition will also see if - * there's a class mapped to the property name. - * - * @param string $name - * @param string $value - * @return void - */ - static public function create($name, $value = null) { - - $name = strtoupper($name); - $shortName = $name; - $group = null; - if (strpos($shortName,'.')!==false) { - list($group, $shortName) = explode('.', $shortName); - } - - if (isset(self::$classMap[$shortName])) { - return new self::$classMap[$shortName]($name, $value); - } else { - return new self($name, $value); - } - - } - - /** - * Creates a new property object - * - * By default this object will iterate over its own children, but this can - * be overridden with the iterator argument - * - * @param string $name - * @param string $value - * @param Sabre_VObject_ElementList $iterator - */ - public function __construct($name, $value = null, $iterator = null) { - - $name = strtoupper($name); - $group = null; - if (strpos($name,'.')!==false) { - list($group, $name) = explode('.', $name); - } - $this->name = $name; - $this->group = $group; - if (!is_null($iterator)) $this->iterator = $iterator; - $this->setValue($value); - - } - - - - /** - * Updates the internal value - * - * @param string $value - * @return void - */ - public function setValue($value) { - - $this->value = $value; - - } - - /** - * Turns the object back into a serialized blob. - * - * @return string - */ - public function serialize() { - - $str = $this->name; - if ($this->group) $str = $this->group . '.' . $this->name; - - if (count($this->parameters)) { - foreach($this->parameters as $param) { - - $str.=';' . $param->serialize(); - - } - } - $src = array( - '\\', - "\n", - ); - $out = array( - '\\\\', - '\n', - ); - $str.=':' . str_replace($src, $out, $this->value); - - $out = ''; - while(strlen($str)>0) { - if (strlen($str)>75) { - $out.= mb_strcut($str,0,75,'utf-8') . "\r\n"; - $str = ' ' . mb_strcut($str,75,strlen($str),'utf-8'); - } else { - $out.=$str . "\r\n"; - $str=''; - break; - } - } - - return $out; - - } - - /** - * Adds a new componenten or element - * - * You can call this method with the following syntaxes: - * - * add(Sabre_VObject_Parameter $element) - * add(string $name, $value) - * - * The first version adds an Parameter - * The second adds a property as a string. - * - * @param mixed $item - * @param mixed $itemValue - * @return void - */ - public function add($item, $itemValue = null) { - - if ($item instanceof Sabre_VObject_Parameter) { - if (!is_null($itemValue)) { - throw new InvalidArgumentException('The second argument must not be specified, when passing a VObject'); - } - $item->parent = $this; - $this->parameters[] = $item; - } elseif(is_string($item)) { - - if (!is_scalar($itemValue) && !is_null($itemValue)) { - throw new InvalidArgumentException('The second argument must be scalar'); - } - $parameter = new Sabre_VObject_Parameter($item,$itemValue); - $parameter->parent = $this; - $this->parameters[] = $parameter; - - } else { - - throw new InvalidArgumentException('The first argument must either be a Sabre_VObject_Element or a string'); - - } - - } - - /* ArrayAccess interface {{{ */ - - /** - * Checks if an array element exists - * - * @param mixed $name - * @return bool - */ - public function offsetExists($name) { - - if (is_int($name)) return parent::offsetExists($name); - - $name = strtoupper($name); - - foreach($this->parameters as $parameter) { - if ($parameter->name == $name) return true; - } - return false; - - } - - /** - * Returns a parameter, or parameter list. - * - * @param string $name - * @return Sabre_VObject_Element - */ - public function offsetGet($name) { - - if (is_int($name)) return parent::offsetGet($name); - $name = strtoupper($name); - - $result = array(); - foreach($this->parameters as $parameter) { - if ($parameter->name == $name) - $result[] = $parameter; - } - - if (count($result)===0) { - return null; - } elseif (count($result)===1) { - return $result[0]; - } else { - $result[0]->setIterator(new Sabre_VObject_ElementList($result)); - return $result[0]; - } - - } - - /** - * Creates a new parameter - * - * @param string $name - * @param mixed $value - * @return void - */ - public function offsetSet($name, $value) { - - if (is_int($name)) return parent::offsetSet($name, $value); - - if (is_scalar($value)) { - if (!is_string($name)) - throw new InvalidArgumentException('A parameter name must be specified. This means you cannot use the $array[]="string" to add parameters.'); - - $this->offsetUnset($name); - $parameter = new Sabre_VObject_Parameter($name, $value); - $parameter->parent = $this; - $this->parameters[] = $parameter; - - } elseif ($value instanceof Sabre_VObject_Parameter) { - if (!is_null($name)) - throw new InvalidArgumentException('Don\'t specify a parameter name if you\'re passing a Sabre_VObject_Parameter. Add using $array[]=$parameterObject.'); - - $value->parent = $this; - $this->parameters[] = $value; - } else { - throw new InvalidArgumentException('You can only add parameters to the property object'); - } - - } - - /** - * Removes one or more parameters with the specified name - * - * @param string $name - * @return void - */ - public function offsetUnset($name) { - - if (is_int($name)) return parent::offsetUnset($name); - $name = strtoupper($name); - - foreach($this->parameters as $key=>$parameter) { - if ($parameter->name == $name) { - $parameter->parent = null; - unset($this->parameters[$key]); - } - - } - - } - - /* }}} */ - - /** - * Called when this object is being cast to a string - * - * @return string - */ - public function __toString() { - - return (string)$this->value; - - } - - /** - * This method is automatically called when the object is cloned. - * Specifically, this will ensure all child elements are also cloned. - * - * @return void - */ - public function __clone() { - - foreach($this->parameters as $key=>$child) { - $this->parameters[$key] = clone $child; - $this->parameters[$key]->parent = $this; - } - - } - -} diff --git a/3rdparty/Sabre/VObject/Property/DateTime.php b/3rdparty/Sabre/VObject/Property/DateTime.php deleted file mode 100755 index fe2372caa81..00000000000 --- a/3rdparty/Sabre/VObject/Property/DateTime.php +++ /dev/null @@ -1,260 +0,0 @@ -setValue($dt->format('Ymd\\THis')); - $this->offsetUnset('VALUE'); - $this->offsetUnset('TZID'); - $this->offsetSet('VALUE','DATE-TIME'); - break; - case self::UTC : - $dt->setTimeZone(new DateTimeZone('UTC')); - $this->setValue($dt->format('Ymd\\THis\\Z')); - $this->offsetUnset('VALUE'); - $this->offsetUnset('TZID'); - $this->offsetSet('VALUE','DATE-TIME'); - break; - case self::LOCALTZ : - $this->setValue($dt->format('Ymd\\THis')); - $this->offsetUnset('VALUE'); - $this->offsetUnset('TZID'); - $this->offsetSet('VALUE','DATE-TIME'); - $this->offsetSet('TZID', $dt->getTimeZone()->getName()); - break; - case self::DATE : - $this->setValue($dt->format('Ymd')); - $this->offsetUnset('VALUE'); - $this->offsetUnset('TZID'); - $this->offsetSet('VALUE','DATE'); - break; - default : - throw new InvalidArgumentException('You must pass a valid dateType constant'); - - } - $this->dateTime = $dt; - $this->dateType = $dateType; - - } - - /** - * Returns the current DateTime value. - * - * If no value was set, this method returns null. - * - * @return DateTime|null - */ - public function getDateTime() { - - if ($this->dateTime) - return $this->dateTime; - - list( - $this->dateType, - $this->dateTime - ) = self::parseData($this->value, $this); - return $this->dateTime; - - } - - /** - * Returns the type of Date format. - * - * This method returns one of the format constants. If no date was set, - * this method will return null. - * - * @return int|null - */ - public function getDateType() { - - if ($this->dateType) - return $this->dateType; - - list( - $this->dateType, - $this->dateTime, - ) = self::parseData($this->value, $this); - return $this->dateType; - - } - - /** - * Parses the internal data structure to figure out what the current date - * and time is. - * - * The returned array contains two elements: - * 1. A 'DateType' constant (as defined on this class), or null. - * 2. A DateTime object (or null) - * - * @param string|null $propertyValue The string to parse (yymmdd or - * ymmddThhmmss, etc..) - * @param Sabre_VObject_Property|null $property The instance of the - * property we're parsing. - * @return array - */ - static public function parseData($propertyValue, Sabre_VObject_Property $property = null) { - - if (is_null($propertyValue)) { - return array(null, null); - } - - $date = '(?P[1-2][0-9]{3})(?P[0-1][0-9])(?P[0-3][0-9])'; - $time = '(?P[0-2][0-9])(?P[0-5][0-9])(?P[0-5][0-9])'; - $regex = "/^$date(T$time(?PZ)?)?$/"; - - if (!preg_match($regex, $propertyValue, $matches)) { - throw new InvalidArgumentException($propertyValue . ' is not a valid DateTime or Date string'); - } - - if (!isset($matches['hour'])) { - // Date-only - return array( - self::DATE, - new DateTime($matches['year'] . '-' . $matches['month'] . '-' . $matches['date'] . ' 00:00:00'), - ); - } - - $dateStr = - $matches['year'] .'-' . - $matches['month'] . '-' . - $matches['date'] . ' ' . - $matches['hour'] . ':' . - $matches['minute'] . ':' . - $matches['second']; - - if (isset($matches['isutc'])) { - $dt = new DateTime($dateStr,new DateTimeZone('UTC')); - $dt->setTimeZone(new DateTimeZone('UTC')); - return array( - self::UTC, - $dt - ); - } - - // Finding the timezone. - $tzid = $property['TZID']; - if (!$tzid) { - return array( - self::LOCAL, - new DateTime($dateStr) - ); - } - - try { - // tzid an Olson identifier? - $tz = new DateTimeZone($tzid->value); - } catch (Exception $e) { - - // Not an Olson id, we're going to try to find the information - // through the time zone name map. - $newtzid = Sabre_VObject_WindowsTimezoneMap::lookup($tzid->value); - if (is_null($newtzid)) { - - // Not a well known time zone name either, we're going to try - // to find the information through the VTIMEZONE object. - - // First we find the root object - $root = $property; - while($root->parent) { - $root = $root->parent; - } - - if (isset($root->VTIMEZONE)) { - foreach($root->VTIMEZONE as $vtimezone) { - if (((string)$vtimezone->TZID) == $tzid) { - if (isset($vtimezone->{'X-LIC-LOCATION'})) { - $newtzid = (string)$vtimezone->{'X-LIC-LOCATION'}; - } else { - // No libical location specified. As a last resort we could - // try matching $vtimezone's DST rules against all known - // time zones returned by DateTimeZone::list* - - // TODO - } - } - } - } - } - - try { - $tz = new DateTimeZone($newtzid); - } catch (Exception $e) { - // If all else fails, we use the default PHP timezone - $tz = new DateTimeZone(date_default_timezone_get()); - } - } - $dt = new DateTime($dateStr, $tz); - $dt->setTimeZone($tz); - - return array( - self::LOCALTZ, - $dt - ); - - } - -} diff --git a/3rdparty/Sabre/VObject/Property/MultiDateTime.php b/3rdparty/Sabre/VObject/Property/MultiDateTime.php deleted file mode 100755 index ae53ab6a617..00000000000 --- a/3rdparty/Sabre/VObject/Property/MultiDateTime.php +++ /dev/null @@ -1,166 +0,0 @@ -offsetUnset('VALUE'); - $this->offsetUnset('TZID'); - switch($dateType) { - - case Sabre_VObject_Property_DateTime::LOCAL : - $val = array(); - foreach($dt as $i) { - $val[] = $i->format('Ymd\\THis'); - } - $this->setValue(implode(',',$val)); - $this->offsetSet('VALUE','DATE-TIME'); - break; - case Sabre_VObject_Property_DateTime::UTC : - $val = array(); - foreach($dt as $i) { - $i->setTimeZone(new DateTimeZone('UTC')); - $val[] = $i->format('Ymd\\THis\\Z'); - } - $this->setValue(implode(',',$val)); - $this->offsetSet('VALUE','DATE-TIME'); - break; - case Sabre_VObject_Property_DateTime::LOCALTZ : - $val = array(); - foreach($dt as $i) { - $val[] = $i->format('Ymd\\THis'); - } - $this->setValue(implode(',',$val)); - $this->offsetSet('VALUE','DATE-TIME'); - $this->offsetSet('TZID', $dt[0]->getTimeZone()->getName()); - break; - case Sabre_VObject_Property_DateTime::DATE : - $val = array(); - foreach($dt as $i) { - $val[] = $i->format('Ymd'); - } - $this->setValue(implode(',',$val)); - $this->offsetSet('VALUE','DATE'); - break; - default : - throw new InvalidArgumentException('You must pass a valid dateType constant'); - - } - $this->dateTimes = $dt; - $this->dateType = $dateType; - - } - - /** - * Returns the current DateTime value. - * - * If no value was set, this method returns null. - * - * @return array|null - */ - public function getDateTimes() { - - if ($this->dateTimes) - return $this->dateTimes; - - $dts = array(); - - if (!$this->value) { - $this->dateTimes = null; - $this->dateType = null; - return null; - } - - foreach(explode(',',$this->value) as $val) { - list( - $type, - $dt - ) = Sabre_VObject_Property_DateTime::parseData($val, $this); - $dts[] = $dt; - $this->dateType = $type; - } - $this->dateTimes = $dts; - return $this->dateTimes; - - } - - /** - * Returns the type of Date format. - * - * This method returns one of the format constants. If no date was set, - * this method will return null. - * - * @return int|null - */ - public function getDateType() { - - if ($this->dateType) - return $this->dateType; - - if (!$this->value) { - $this->dateTimes = null; - $this->dateType = null; - return null; - } - - $dts = array(); - foreach(explode(',',$this->value) as $val) { - list( - $type, - $dt - ) = Sabre_VObject_Property_DateTime::parseData($val, $this); - $dts[] = $dt; - $this->dateType = $type; - } - $this->dateTimes = $dts; - return $this->dateType; - - } - -} diff --git a/3rdparty/Sabre/VObject/Reader.php b/3rdparty/Sabre/VObject/Reader.php deleted file mode 100755 index eea73fa3dce..00000000000 --- a/3rdparty/Sabre/VObject/Reader.php +++ /dev/null @@ -1,183 +0,0 @@ -add(self::readLine($lines)); - - $nextLine = current($lines); - - if ($nextLine===false) - throw new Sabre_VObject_ParseException('Invalid VObject. Document ended prematurely.'); - - } - - // Checking component name of the 'END:' line. - if (substr($nextLine,4)!==$obj->name) { - throw new Sabre_VObject_ParseException('Invalid VObject, expected: "END:' . $obj->name . '" got: "' . $nextLine . '"'); - } - next($lines); - - return $obj; - - } - - // Properties - //$result = preg_match('/(?P[A-Z0-9-]+)(?:;(?P^(?([^:^\"]|\"([^\"]*)\")*))?"; - $regex = "/^(?P$token)$parameters:(?P.*)$/i"; - - $result = preg_match($regex,$line,$matches); - - if (!$result) { - throw new Sabre_VObject_ParseException('Invalid VObject, line ' . ($lineNr+1) . ' did not follow the icalendar/vcard format'); - } - - $propertyName = strtoupper($matches['name']); - $propertyValue = preg_replace_callback('#(\\\\(\\\\|N|n|;|,))#',function($matches) { - if ($matches[2]==='n' || $matches[2]==='N') { - return "\n"; - } else { - return $matches[2]; - } - }, $matches['value']); - - $obj = Sabre_VObject_Property::create($propertyName, $propertyValue); - - if ($matches['parameters']) { - - foreach(self::readParameters($matches['parameters']) as $param) { - $obj->add($param); - } - - } - - return $obj; - - - } - - /** - * Reads a parameter list from a property - * - * This method returns an array of Sabre_VObject_Parameter - * - * @param string $parameters - * @return array - */ - static private function readParameters($parameters) { - - $token = '[A-Z0-9-]+'; - - $paramValue = '(?P[^\"^;]*|"[^"]*")'; - - $regex = "/(?<=^|;)(?P$token)(=$paramValue(?=$|;))?/i"; - preg_match_all($regex, $parameters, $matches, PREG_SET_ORDER); - - $params = array(); - foreach($matches as $match) { - - $value = isset($match['paramValue'])?$match['paramValue']:null; - - if (isset($value[0])) { - // Stripping quotes, if needed - if ($value[0] === '"') $value = substr($value,1,strlen($value)-2); - } else { - $value = ''; - } - - $value = preg_replace_callback('#(\\\\(\\\\|N|n|;|,))#',function($matches) { - if ($matches[2]==='n' || $matches[2]==='N') { - return "\n"; - } else { - return $matches[2]; - } - }, $value); - - $params[] = new Sabre_VObject_Parameter($match['paramName'], $value); - - } - - return $params; - - } - - -} diff --git a/3rdparty/Sabre/VObject/RecurrenceIterator.php b/3rdparty/Sabre/VObject/RecurrenceIterator.php deleted file mode 100755 index 740270dd8f0..00000000000 --- a/3rdparty/Sabre/VObject/RecurrenceIterator.php +++ /dev/null @@ -1,1043 +0,0 @@ - 0, - 'MO' => 1, - 'TU' => 2, - 'WE' => 3, - 'TH' => 4, - 'FR' => 5, - 'SA' => 6, - ); - - /** - * Mappings between the day number and english day name. - * - * @var array - */ - private $dayNames = array( - 0 => 'Sunday', - 1 => 'Monday', - 2 => 'Tuesday', - 3 => 'Wednesday', - 4 => 'Thursday', - 5 => 'Friday', - 6 => 'Saturday', - ); - - /** - * If the current iteration of the event is an overriden event, this - * property will hold the VObject - * - * @var Sabre_Component_VObject - */ - private $currentOverriddenEvent; - - /** - * This property may contain the date of the next not-overridden event. - * This date is calculated sometimes a bit early, before overridden events - * are evaluated. - * - * @var DateTime - */ - private $nextDate; - - /** - * Creates the iterator - * - * You should pass a VCALENDAR component, as well as the UID of the event - * we're going to traverse. - * - * @param Sabre_VObject_Component $vcal - * @param string|null $uid - */ - public function __construct(Sabre_VObject_Component $vcal, $uid=null) { - - if (is_null($uid)) { - if ($vcal->name === 'VCALENDAR') { - throw new InvalidArgumentException('If you pass a VCALENDAR object, you must pass a uid argument as well'); - } - $components = array($vcal); - $uid = (string)$vcal->uid; - } else { - $components = $vcal->select('VEVENT'); - } - foreach($components as $component) { - if ((string)$component->uid == $uid) { - if (isset($component->{'RECURRENCE-ID'})) { - $this->overriddenEvents[$component->DTSTART->getDateTime()->getTimeStamp()] = $component; - $this->overriddenDates[] = $component->{'RECURRENCE-ID'}->getDateTime(); - } else { - $this->baseEvent = $component; - } - } - } - if (!$this->baseEvent) { - throw new InvalidArgumentException('Could not find a base event with uid: ' . $uid); - } - - $this->startDate = clone $this->baseEvent->DTSTART->getDateTime(); - - $this->endDate = null; - if (isset($this->baseEvent->DTEND)) { - $this->endDate = clone $this->baseEvent->DTEND->getDateTime(); - } else { - $this->endDate = clone $this->startDate; - if (isset($this->baseEvent->DURATION)) { - $this->endDate->add(Sabre_VObject_DateTimeParser::parse($this->baseEvent->DURATION->value)); - } elseif ($this->baseEvent->DTSTART->getDateType()===Sabre_VObject_Property_DateTime::DATE) { - $this->endDate->modify('+1 day'); - } - } - $this->currentDate = clone $this->startDate; - - $rrule = (string)$this->baseEvent->RRULE; - - $parts = explode(';', $rrule); - - foreach($parts as $part) { - - list($key, $value) = explode('=', $part, 2); - - switch(strtoupper($key)) { - - case 'FREQ' : - if (!in_array( - strtolower($value), - array('secondly','minutely','hourly','daily','weekly','monthly','yearly') - )) { - throw new InvalidArgumentException('Unknown value for FREQ=' . strtoupper($value)); - - } - $this->frequency = strtolower($value); - break; - - case 'UNTIL' : - $this->until = Sabre_VObject_DateTimeParser::parse($value); - break; - - case 'COUNT' : - $this->count = (int)$value; - break; - - case 'INTERVAL' : - $this->interval = (int)$value; - break; - - case 'BYSECOND' : - $this->bySecond = explode(',', $value); - break; - - case 'BYMINUTE' : - $this->byMinute = explode(',', $value); - break; - - case 'BYHOUR' : - $this->byHour = explode(',', $value); - break; - - case 'BYDAY' : - $this->byDay = explode(',', strtoupper($value)); - break; - - case 'BYMONTHDAY' : - $this->byMonthDay = explode(',', $value); - break; - - case 'BYYEARDAY' : - $this->byYearDay = explode(',', $value); - break; - - case 'BYWEEKNO' : - $this->byWeekNo = explode(',', $value); - break; - - case 'BYMONTH' : - $this->byMonth = explode(',', $value); - break; - - case 'BYSETPOS' : - $this->bySetPos = explode(',', $value); - break; - - case 'WKST' : - $this->weekStart = strtoupper($value); - break; - - } - - } - - // Parsing exception dates - if (isset($this->baseEvent->EXDATE)) { - foreach($this->baseEvent->EXDATE as $exDate) { - - foreach(explode(',', (string)$exDate) as $exceptionDate) { - - $this->exceptionDates[] = - Sabre_VObject_DateTimeParser::parse($exceptionDate, $this->startDate->getTimeZone()); - - } - - } - - } - - } - - /** - * Returns the current item in the list - * - * @return DateTime - */ - public function current() { - - if (!$this->valid()) return null; - return clone $this->currentDate; - - } - - /** - * This method returns the startdate for the current iteration of the - * event. - * - * @return DateTime - */ - public function getDtStart() { - - if (!$this->valid()) return null; - return clone $this->currentDate; - - } - - /** - * This method returns the enddate for the current iteration of the - * event. - * - * @return DateTime - */ - public function getDtEnd() { - - if (!$this->valid()) return null; - $dtEnd = clone $this->currentDate; - $dtEnd->add( $this->startDate->diff( $this->endDate ) ); - return clone $dtEnd; - - } - - /** - * Returns a VEVENT object with the updated start and end date. - * - * Any recurrence information is removed, and this function may return an - * 'overridden' event instead. - * - * This method always returns a cloned instance. - * - * @return void - */ - public function getEventObject() { - - if ($this->currentOverriddenEvent) { - return clone $this->currentOverriddenEvent; - } - $event = clone $this->baseEvent; - unset($event->RRULE); - unset($event->EXDATE); - unset($event->RDATE); - unset($event->EXRULE); - - $event->DTSTART->setDateTime($this->getDTStart(), $event->DTSTART->getDateType()); - if (isset($event->DTEND)) { - $event->DTEND->setDateTime($this->getDtEnd(), $event->DTSTART->getDateType()); - } - if ($this->counter > 0) { - $event->{'RECURRENCE-ID'} = (string)$event->DTSTART; - } - - return $event; - - } - - /** - * Returns the current item number - * - * @return int - */ - public function key() { - - return $this->counter; - - } - - /** - * Whether or not there is a 'next item' - * - * @return bool - */ - public function valid() { - - if (!is_null($this->count)) { - return $this->counter < $this->count; - } - if (!is_null($this->until)) { - return $this->currentDate <= $this->until; - } - return true; - - } - - /** - * Resets the iterator - * - * @return void - */ - public function rewind() { - - $this->currentDate = clone $this->startDate; - $this->counter = 0; - - } - - /** - * This method allows you to quickly go to the next occurrence after the - * specified date. - * - * Note that this checks the current 'endDate', not the 'stardDate'. This - * means that if you forward to January 1st, the iterator will stop at the - * first event that ends *after* January 1st. - * - * @param DateTime $dt - * @return void - */ - public function fastForward(DateTime $dt) { - - while($this->valid() && $this->getDTEnd() <= $dt) { - $this->next(); - } - - } - - /** - * Goes on to the next iteration - * - * @return void - */ - public function next() { - - /* - if (!is_null($this->count) && $this->counter >= $this->count) { - $this->currentDate = null; - }*/ - - - $previousStamp = $this->currentDate->getTimeStamp(); - - while(true) { - - $this->currentOverriddenEvent = null; - - // If we have a next date 'stored', we use that - if ($this->nextDate) { - $this->currentDate = $this->nextDate; - $currentStamp = $this->currentDate->getTimeStamp(); - $this->nextDate = null; - } else { - - // Otherwise, we calculate it - switch($this->frequency) { - - case 'daily' : - $this->nextDaily(); - break; - - case 'weekly' : - $this->nextWeekly(); - break; - - case 'monthly' : - $this->nextMonthly(); - break; - - case 'yearly' : - $this->nextYearly(); - break; - - } - $currentStamp = $this->currentDate->getTimeStamp(); - - // Checking exception dates - foreach($this->exceptionDates as $exceptionDate) { - if ($this->currentDate == $exceptionDate) { - $this->counter++; - continue 2; - } - } - foreach($this->overriddenDates as $overriddenDate) { - if ($this->currentDate == $overriddenDate) { - continue 2; - } - } - - } - - // Checking overriden events - foreach($this->overriddenEvents as $index=>$event) { - if ($index > $previousStamp && $index <= $currentStamp) { - - // We're moving the 'next date' aside, for later use. - $this->nextDate = clone $this->currentDate; - - $this->currentDate = $event->DTSTART->getDateTime(); - $this->currentOverriddenEvent = $event; - - break; - } - } - - break; - - } - - /* - if (!is_null($this->until)) { - if($this->currentDate > $this->until) { - $this->currentDate = null; - } - }*/ - - $this->counter++; - - } - - /** - * Does the processing for advancing the iterator for daily frequency. - * - * @return void - */ - protected function nextDaily() { - - if (!$this->byDay) { - $this->currentDate->modify('+' . $this->interval . ' days'); - return; - } - - $recurrenceDays = array(); - foreach($this->byDay as $byDay) { - - // The day may be preceeded with a positive (+n) or - // negative (-n) integer. However, this does not make - // sense in 'weekly' so we ignore it here. - $recurrenceDays[] = $this->dayMap[substr($byDay,-2)]; - - } - - do { - - $this->currentDate->modify('+' . $this->interval . ' days'); - - // Current day of the week - $currentDay = $this->currentDate->format('w'); - - } while (!in_array($currentDay, $recurrenceDays)); - - } - - /** - * Does the processing for advancing the iterator for weekly frequency. - * - * @return void - */ - protected function nextWeekly() { - - if (!$this->byDay) { - $this->currentDate->modify('+' . $this->interval . ' weeks'); - return; - } - - $recurrenceDays = array(); - foreach($this->byDay as $byDay) { - - // The day may be preceeded with a positive (+n) or - // negative (-n) integer. However, this does not make - // sense in 'weekly' so we ignore it here. - $recurrenceDays[] = $this->dayMap[substr($byDay,-2)]; - - } - - // Current day of the week - $currentDay = $this->currentDate->format('w'); - - // First day of the week: - $firstDay = $this->dayMap[$this->weekStart]; - - $time = array( - $this->currentDate->format('H'), - $this->currentDate->format('i'), - $this->currentDate->format('s') - ); - - // Increasing the 'current day' until we find our next - // occurrence. - while(true) { - - $currentDay++; - - if ($currentDay>6) { - $currentDay = 0; - } - - // We need to roll over to the next week - if ($currentDay === $firstDay) { - $this->currentDate->modify('+' . $this->interval . ' weeks'); - - // We need to go to the first day of this week, but only if we - // are not already on this first day of this week. - if($this->currentDate->format('w') != $firstDay) { - $this->currentDate->modify('last ' . $this->dayNames[$this->dayMap[$this->weekStart]]); - $this->currentDate->setTime($time[0],$time[1],$time[2]); - } - } - - // We have a match - if (in_array($currentDay ,$recurrenceDays)) { - $this->currentDate->modify($this->dayNames[$currentDay]); - $this->currentDate->setTime($time[0],$time[1],$time[2]); - break; - } - - } - - } - - /** - * Does the processing for advancing the iterator for monthly frequency. - * - * @return void - */ - protected function nextMonthly() { - - $currentDayOfMonth = $this->currentDate->format('j'); - if (!$this->byMonthDay && !$this->byDay) { - - // If the current day is higher than the 28th, rollover can - // occur to the next month. We Must skip these invalid - // entries. - if ($currentDayOfMonth < 29) { - $this->currentDate->modify('+' . $this->interval . ' months'); - } else { - $increase = 0; - do { - $increase++; - $tempDate = clone $this->currentDate; - $tempDate->modify('+ ' . ($this->interval*$increase) . ' months'); - } while ($tempDate->format('j') != $currentDayOfMonth); - $this->currentDate = $tempDate; - } - return; - } - - while(true) { - - $occurrences = $this->getMonthlyOccurrences(); - - foreach($occurrences as $occurrence) { - - // The first occurrence thats higher than the current - // day of the month wins. - if ($occurrence > $currentDayOfMonth) { - break 2; - } - - } - - // If we made it all the way here, it means there were no - // valid occurrences, and we need to advance to the next - // month. - $this->currentDate->modify('first day of this month'); - $this->currentDate->modify('+ ' . $this->interval . ' months'); - - // This goes to 0 because we need to start counting at hte - // beginning. - $currentDayOfMonth = 0; - - } - - $this->currentDate->setDate($this->currentDate->format('Y'), $this->currentDate->format('n'), $occurrence); - - } - - /** - * Does the processing for advancing the iterator for yearly frequency. - * - * @return void - */ - protected function nextYearly() { - - $currentMonth = $this->currentDate->format('n'); - $currentYear = $this->currentDate->format('Y'); - $currentDayOfMonth = $this->currentDate->format('j'); - - // No sub-rules, so we just advance by year - if (!$this->byMonth) { - - // Unless it was a leap day! - if ($currentMonth==2 && $currentDayOfMonth==29) { - - $counter = 0; - do { - $counter++; - // Here we increase the year count by the interval, until - // we hit a date that's also in a leap year. - // - // We could just find the next interval that's dividable by - // 4, but that would ignore the rule that there's no leap - // year every year that's dividable by a 100, but not by - // 400. (1800, 1900, 2100). So we just rely on the datetime - // functions instead. - $nextDate = clone $this->currentDate; - $nextDate->modify('+ ' . ($this->interval*$counter) . ' years'); - } while ($nextDate->format('n')!=2); - $this->currentDate = $nextDate; - - return; - - } - - // The easiest form - $this->currentDate->modify('+' . $this->interval . ' years'); - return; - - } - - $currentMonth = $this->currentDate->format('n'); - $currentYear = $this->currentDate->format('Y'); - $currentDayOfMonth = $this->currentDate->format('j'); - - $advancedToNewMonth = false; - - // If we got a byDay or getMonthDay filter, we must first expand - // further. - if ($this->byDay || $this->byMonthDay) { - - while(true) { - - $occurrences = $this->getMonthlyOccurrences(); - - foreach($occurrences as $occurrence) { - - // The first occurrence that's higher than the current - // day of the month wins. - // If we advanced to the next month or year, the first - // occurence is always correct. - if ($occurrence > $currentDayOfMonth || $advancedToNewMonth) { - break 2; - } - - } - - // If we made it here, it means we need to advance to - // the next month or year. - $currentDayOfMonth = 1; - $advancedToNewMonth = true; - do { - - $currentMonth++; - if ($currentMonth>12) { - $currentYear+=$this->interval; - $currentMonth = 1; - } - } while (!in_array($currentMonth, $this->byMonth)); - - $this->currentDate->setDate($currentYear, $currentMonth, $currentDayOfMonth); - - } - - // If we made it here, it means we got a valid occurrence - $this->currentDate->setDate($currentYear, $currentMonth, $occurrence); - return; - - } else { - - // These are the 'byMonth' rules, if there are no byDay or - // byMonthDay sub-rules. - do { - - $currentMonth++; - if ($currentMonth>12) { - $currentYear+=$this->interval; - $currentMonth = 1; - } - } while (!in_array($currentMonth, $this->byMonth)); - $this->currentDate->setDate($currentYear, $currentMonth, $currentDayOfMonth); - - return; - - } - - } - - /** - * Returns all the occurrences for a monthly frequency with a 'byDay' or - * 'byMonthDay' expansion for the current month. - * - * The returned list is an array of integers with the day of month (1-31). - * - * @return array - */ - protected function getMonthlyOccurrences() { - - $startDate = clone $this->currentDate; - - $byDayResults = array(); - - // Our strategy is to simply go through the byDays, advance the date to - // that point and add it to the results. - if ($this->byDay) foreach($this->byDay as $day) { - - $dayName = $this->dayNames[$this->dayMap[substr($day,-2)]]; - - // Dayname will be something like 'wednesday'. Now we need to find - // all wednesdays in this month. - $dayHits = array(); - - $checkDate = clone $startDate; - $checkDate->modify('first day of this month'); - $checkDate->modify($dayName); - - do { - $dayHits[] = $checkDate->format('j'); - $checkDate->modify('next ' . $dayName); - } while ($checkDate->format('n') === $startDate->format('n')); - - // So now we have 'all wednesdays' for month. It is however - // possible that the user only really wanted the 1st, 2nd or last - // wednesday. - if (strlen($day)>2) { - $offset = (int)substr($day,0,-2); - - if ($offset>0) { - // It is possible that the day does not exist, such as a - // 5th or 6th wednesday of the month. - if (isset($dayHits[$offset-1])) { - $byDayResults[] = $dayHits[$offset-1]; - } - } else { - - // if it was negative we count from the end of the array - $byDayResults[] = $dayHits[count($dayHits) + $offset]; - } - } else { - // There was no counter (first, second, last wednesdays), so we - // just need to add the all to the list). - $byDayResults = array_merge($byDayResults, $dayHits); - - } - - } - - $byMonthDayResults = array(); - if ($this->byMonthDay) foreach($this->byMonthDay as $monthDay) { - - // Removing values that are out of range for this month - if ($monthDay > $startDate->format('t') || - $monthDay < 0-$startDate->format('t')) { - continue; - } - if ($monthDay>0) { - $byMonthDayResults[] = $monthDay; - } else { - // Negative values - $byMonthDayResults[] = $startDate->format('t') + 1 + $monthDay; - } - } - - // If there was just byDay or just byMonthDay, they just specify our - // (almost) final list. If both were provided, then byDay limits the - // list. - if ($this->byMonthDay && $this->byDay) { - $result = array_intersect($byMonthDayResults, $byDayResults); - } elseif ($this->byMonthDay) { - $result = $byMonthDayResults; - } else { - $result = $byDayResults; - } - $result = array_unique($result); - sort($result, SORT_NUMERIC); - - // The last thing that needs checking is the BYSETPOS. If it's set, it - // means only certain items in the set survive the filter. - if (!$this->bySetPos) { - return $result; - } - - $filteredResult = array(); - foreach($this->bySetPos as $setPos) { - - if ($setPos<0) { - $setPos = count($result)-($setPos+1); - } - if (isset($result[$setPos-1])) { - $filteredResult[] = $result[$setPos-1]; - } - } - - sort($filteredResult, SORT_NUMERIC); - return $filteredResult; - - } - - -} - diff --git a/3rdparty/Sabre/VObject/Version.php b/3rdparty/Sabre/VObject/Version.php deleted file mode 100755 index 9ee03d87118..00000000000 --- a/3rdparty/Sabre/VObject/Version.php +++ /dev/null @@ -1,24 +0,0 @@ -'Australia/Darwin', - 'AUS Eastern Standard Time'=>'Australia/Sydney', - 'Afghanistan Standard Time'=>'Asia/Kabul', - 'Alaskan Standard Time'=>'America/Anchorage', - 'Arab Standard Time'=>'Asia/Riyadh', - 'Arabian Standard Time'=>'Asia/Dubai', - 'Arabic Standard Time'=>'Asia/Baghdad', - 'Argentina Standard Time'=>'America/Buenos_Aires', - 'Armenian Standard Time'=>'Asia/Yerevan', - 'Atlantic Standard Time'=>'America/Halifax', - 'Azerbaijan Standard Time'=>'Asia/Baku', - 'Azores Standard Time'=>'Atlantic/Azores', - 'Bangladesh Standard Time'=>'Asia/Dhaka', - 'Canada Central Standard Time'=>'America/Regina', - 'Cape Verde Standard Time'=>'Atlantic/Cape_Verde', - 'Caucasus Standard Time'=>'Asia/Yerevan', - 'Cen. Australia Standard Time'=>'Australia/Adelaide', - 'Central America Standard Time'=>'America/Guatemala', - 'Central Asia Standard Time'=>'Asia/Almaty', - 'Central Brazilian Standard Time'=>'America/Cuiaba', - 'Central Europe Standard Time'=>'Europe/Budapest', - 'Central European Standard Time'=>'Europe/Warsaw', - 'Central Pacific Standard Time'=>'Pacific/Guadalcanal', - 'Central Standard Time'=>'America/Chicago', - 'Central Standard Time (Mexico)'=>'America/Mexico_City', - 'China Standard Time'=>'Asia/Shanghai', - 'Dateline Standard Time'=>'Etc/GMT+12', - 'E. Africa Standard Time'=>'Africa/Nairobi', - 'E. Australia Standard Time'=>'Australia/Brisbane', - 'E. Europe Standard Time'=>'Europe/Minsk', - 'E. South America Standard Time'=>'America/Sao_Paulo', - 'Eastern Standard Time'=>'America/New_York', - 'Egypt Standard Time'=>'Africa/Cairo', - 'Ekaterinburg Standard Time'=>'Asia/Yekaterinburg', - 'FLE Standard Time'=>'Europe/Kiev', - 'Fiji Standard Time'=>'Pacific/Fiji', - 'GMT Standard Time'=>'Europe/London', - 'GTB Standard Time'=>'Europe/Istanbul', - 'Georgian Standard Time'=>'Asia/Tbilisi', - 'Greenland Standard Time'=>'America/Godthab', - 'Greenwich Standard Time'=>'Atlantic/Reykjavik', - 'Hawaiian Standard Time'=>'Pacific/Honolulu', - 'India Standard Time'=>'Asia/Calcutta', - 'Iran Standard Time'=>'Asia/Tehran', - 'Israel Standard Time'=>'Asia/Jerusalem', - 'Jordan Standard Time'=>'Asia/Amman', - 'Kamchatka Standard Time'=>'Asia/Kamchatka', - 'Korea Standard Time'=>'Asia/Seoul', - 'Magadan Standard Time'=>'Asia/Magadan', - 'Mauritius Standard Time'=>'Indian/Mauritius', - 'Mexico Standard Time'=>'America/Mexico_City', - 'Mexico Standard Time 2'=>'America/Chihuahua', - 'Mid-Atlantic Standard Time'=>'Etc/GMT+2', - 'Middle East Standard Time'=>'Asia/Beirut', - 'Montevideo Standard Time'=>'America/Montevideo', - 'Morocco Standard Time'=>'Africa/Casablanca', - 'Mountain Standard Time'=>'America/Denver', - 'Mountain Standard Time (Mexico)'=>'America/Chihuahua', - 'Myanmar Standard Time'=>'Asia/Rangoon', - 'N. Central Asia Standard Time'=>'Asia/Novosibirsk', - 'Namibia Standard Time'=>'Africa/Windhoek', - 'Nepal Standard Time'=>'Asia/Katmandu', - 'New Zealand Standard Time'=>'Pacific/Auckland', - 'Newfoundland Standard Time'=>'America/St_Johns', - 'North Asia East Standard Time'=>'Asia/Irkutsk', - 'North Asia Standard Time'=>'Asia/Krasnoyarsk', - 'Pacific SA Standard Time'=>'America/Santiago', - 'Pacific Standard Time'=>'America/Los_Angeles', - 'Pacific Standard Time (Mexico)'=>'America/Santa_Isabel', - 'Pakistan Standard Time'=>'Asia/Karachi', - 'Paraguay Standard Time'=>'America/Asuncion', - 'Romance Standard Time'=>'Europe/Paris', - 'Russian Standard Time'=>'Europe/Moscow', - 'SA Eastern Standard Time'=>'America/Cayenne', - 'SA Pacific Standard Time'=>'America/Bogota', - 'SA Western Standard Time'=>'America/La_Paz', - 'SE Asia Standard Time'=>'Asia/Bangkok', - 'Samoa Standard Time'=>'Pacific/Apia', - 'Singapore Standard Time'=>'Asia/Singapore', - 'South Africa Standard Time'=>'Africa/Johannesburg', - 'Sri Lanka Standard Time'=>'Asia/Colombo', - 'Syria Standard Time'=>'Asia/Damascus', - 'Taipei Standard Time'=>'Asia/Taipei', - 'Tasmania Standard Time'=>'Australia/Hobart', - 'Tokyo Standard Time'=>'Asia/Tokyo', - 'Tonga Standard Time'=>'Pacific/Tongatapu', - 'US Eastern Standard Time'=>'America/Indianapolis', - 'US Mountain Standard Time'=>'America/Phoenix', - 'UTC'=>'Etc/GMT', - 'UTC+12'=>'Etc/GMT-12', - 'UTC-02'=>'Etc/GMT+2', - 'UTC-11'=>'Etc/GMT+11', - 'Ulaanbaatar Standard Time'=>'Asia/Ulaanbaatar', - 'Venezuela Standard Time'=>'America/Caracas', - 'Vladivostok Standard Time'=>'Asia/Vladivostok', - 'W. Australia Standard Time'=>'Australia/Perth', - 'W. Central Africa Standard Time'=>'Africa/Lagos', - 'W. Europe Standard Time'=>'Europe/Berlin', - 'West Asia Standard Time'=>'Asia/Tashkent', - 'West Pacific Standard Time'=>'Pacific/Port_Moresby', - 'Yakutsk Standard Time'=>'Asia/Yakutsk', - ); - - static public function lookup($tzid) { - return isset(self::$map[$tzid]) ? self::$map[$tzid] : null; - } -} diff --git a/3rdparty/Sabre/VObject/includes.php b/3rdparty/Sabre/VObject/includes.php deleted file mode 100755 index 0177a8f1ba6..00000000000 --- a/3rdparty/Sabre/VObject/includes.php +++ /dev/null @@ -1,41 +0,0 @@ - Date: Sat, 13 Oct 2012 22:29:57 +0200 Subject: [PATCH 044/576] Revert "Update SabreDAV to 1.7.1" This reverts commit 183cc22501b75ab8819971f70b88dbc010026ac1. --- 3rdparty/Sabre/CalDAV/Backend/Abstract.php | 190 +-- .../Sabre/CalDAV/Backend/BackendInterface.php | 231 ---- .../CalDAV/Backend/NotificationSupport.php | 47 - 3rdparty/Sabre/CalDAV/Backend/PDO.php | 337 +----- .../Sabre/CalDAV/Backend/SharingSupport.php | 238 ---- 3rdparty/Sabre/CalDAV/Calendar.php | 63 +- 3rdparty/Sabre/CalDAV/CalendarObject.php | 22 +- 3rdparty/Sabre/CalDAV/CalendarQueryParser.php | 12 +- .../Sabre/CalDAV/CalendarQueryValidator.php | 28 +- 3rdparty/Sabre/CalDAV/CalendarRootNode.php | 13 +- .../CalDAV/Exception/InvalidComponentType.php | 32 - 3rdparty/Sabre/CalDAV/ICSExportPlugin.php | 6 +- 3rdparty/Sabre/CalDAV/ICalendar.php | 21 +- 3rdparty/Sabre/CalDAV/IShareableCalendar.php | 48 - 3rdparty/Sabre/CalDAV/ISharedCalendar.php | 22 - .../Sabre/CalDAV/Notifications/Collection.php | 169 --- .../CalDAV/Notifications/ICollection.php | 22 - 3rdparty/Sabre/CalDAV/Notifications/INode.php | 38 - .../Notifications/INotificationType.php | 43 - 3rdparty/Sabre/CalDAV/Notifications/Node.php | 188 --- .../Notifications/Notification/Invite.php | 276 ----- .../Notification/InviteReply.php | 216 ---- .../Notification/SystemStatus.php | 179 --- 3rdparty/Sabre/CalDAV/Plugin.php | 579 ++------- .../CalDAV/Property/AllowedSharingModes.php | 72 -- 3rdparty/Sabre/CalDAV/Property/Invite.php | 173 --- .../Property/ScheduleCalendarTransp.php | 99 -- 3rdparty/Sabre/CalDAV/Schedule/IMip.php | 18 +- 3rdparty/Sabre/CalDAV/Schedule/Outbox.php | 10 +- 3rdparty/Sabre/CalDAV/Server.php | 68 ++ 3rdparty/Sabre/CalDAV/ShareableCalendar.php | 72 -- 3rdparty/Sabre/CalDAV/SharedCalendar.php | 98 -- 3rdparty/Sabre/CalDAV/SharingPlugin.php | 475 -------- 3rdparty/Sabre/CalDAV/UserCalendars.php | 64 +- 3rdparty/Sabre/CalDAV/Version.php | 2 +- 3rdparty/Sabre/CalDAV/includes.php | 25 +- 3rdparty/Sabre/CardDAV/AddressBook.php | 4 +- 3rdparty/Sabre/CardDAV/Card.php | 16 +- 3rdparty/Sabre/CardDAV/Plugin.php | 55 +- 3rdparty/Sabre/CardDAV/VCFExportPlugin.php | 107 -- 3rdparty/Sabre/CardDAV/Version.php | 2 +- 3rdparty/Sabre/CardDAV/includes.php | 1 - 3rdparty/Sabre/DAV/Browser/Plugin.php | 2 +- 3rdparty/Sabre/DAV/Client.php | 69 +- 3rdparty/Sabre/DAV/Collection.php | 6 +- 3rdparty/Sabre/DAV/Directory.php | 17 + ...Supported.php => ReportNotImplemented.php} | 4 +- 3rdparty/Sabre/DAV/FS/Directory.php | 5 +- 3rdparty/Sabre/DAV/FSExt/Directory.php | 5 +- 3rdparty/Sabre/DAV/FSExt/File.php | 32 +- 3rdparty/Sabre/DAV/ICollection.php | 5 +- 3rdparty/Sabre/DAV/IFile.php | 2 +- 3rdparty/Sabre/DAV/Locks/Plugin.php | 1 - 3rdparty/Sabre/DAV/Node.php | 2 +- 3rdparty/Sabre/DAV/ObjectTree.php | 26 +- 3rdparty/Sabre/DAV/PartialUpdate/IFile.php | 38 - 3rdparty/Sabre/DAV/PartialUpdate/Plugin.php | 209 ---- 3rdparty/Sabre/DAV/Property.php | 12 +- 3rdparty/Sabre/DAV/Property/Href.php | 2 +- 3rdparty/Sabre/DAV/Property/HrefList.php | 2 +- 3rdparty/Sabre/DAV/Property/Response.php | 2 +- 3rdparty/Sabre/DAV/PropertyInterface.php | 21 - 3rdparty/Sabre/DAV/Server.php | 175 +-- 3rdparty/Sabre/DAV/ServerPlugin.php | 2 +- 3rdparty/Sabre/DAV/SimpleCollection.php | 5 +- 3rdparty/Sabre/DAV/SimpleDirectory.php | 21 + 3rdparty/Sabre/DAV/Version.php | 2 +- 3rdparty/Sabre/DAV/XMLUtil.php | 29 +- 3rdparty/Sabre/DAV/includes.php | 27 +- .../DAVACL/AbstractPrincipalCollection.php | 2 +- 3rdparty/Sabre/DAVACL/IACL.php | 2 +- 3rdparty/Sabre/DAVACL/Plugin.php | 54 +- 3rdparty/Sabre/DAVACL/Property/Acl.php | 10 +- 3rdparty/Sabre/DAVACL/Property/Principal.php | 4 +- 3rdparty/Sabre/DAVACL/Version.php | 2 +- 3rdparty/Sabre/HTTP/Request.php | 2 +- 3rdparty/Sabre/HTTP/Response.php | 7 +- 3rdparty/Sabre/HTTP/Version.php | 2 +- 3rdparty/Sabre/VObject/Component.php | 365 ++++++ 3rdparty/Sabre/VObject/Component/VAlarm.php | 102 ++ .../Sabre/VObject/Component/VCalendar.php | 133 +++ 3rdparty/Sabre/VObject/Component/VEvent.php | 71 ++ 3rdparty/Sabre/VObject/Component/VJournal.php | 46 + 3rdparty/Sabre/VObject/Component/VTodo.php | 68 ++ 3rdparty/Sabre/VObject/DateTimeParser.php | 181 +++ 3rdparty/Sabre/VObject/Element.php | 16 + 3rdparty/Sabre/VObject/Element/DateTime.php | 37 + .../Sabre/VObject/Element/MultiDateTime.php | 17 + 3rdparty/Sabre/VObject/ElementList.php | 172 +++ 3rdparty/Sabre/VObject/FreeBusyGenerator.php | 297 +++++ 3rdparty/Sabre/VObject/Node.php | 149 +++ 3rdparty/Sabre/VObject/Parameter.php | 84 ++ 3rdparty/Sabre/VObject/ParseException.php | 12 + 3rdparty/Sabre/VObject/Property.php | 348 ++++++ 3rdparty/Sabre/VObject/Property/DateTime.php | 260 ++++ .../Sabre/VObject/Property/MultiDateTime.php | 166 +++ 3rdparty/Sabre/VObject/Reader.php | 183 +++ 3rdparty/Sabre/VObject/RecurrenceIterator.php | 1043 +++++++++++++++++ 3rdparty/Sabre/VObject/Version.php | 24 + 3rdparty/Sabre/VObject/WindowsTimezoneMap.php | 128 ++ 3rdparty/Sabre/VObject/includes.php | 41 + 3rdparty/Sabre/autoload.php | 28 +- 102 files changed, 4502 insertions(+), 4658 deletions(-) delete mode 100755 3rdparty/Sabre/CalDAV/Backend/BackendInterface.php delete mode 100755 3rdparty/Sabre/CalDAV/Backend/NotificationSupport.php delete mode 100755 3rdparty/Sabre/CalDAV/Backend/SharingSupport.php delete mode 100755 3rdparty/Sabre/CalDAV/Exception/InvalidComponentType.php delete mode 100755 3rdparty/Sabre/CalDAV/IShareableCalendar.php delete mode 100755 3rdparty/Sabre/CalDAV/ISharedCalendar.php delete mode 100755 3rdparty/Sabre/CalDAV/Notifications/Collection.php delete mode 100755 3rdparty/Sabre/CalDAV/Notifications/ICollection.php delete mode 100755 3rdparty/Sabre/CalDAV/Notifications/INode.php delete mode 100755 3rdparty/Sabre/CalDAV/Notifications/INotificationType.php delete mode 100755 3rdparty/Sabre/CalDAV/Notifications/Node.php delete mode 100755 3rdparty/Sabre/CalDAV/Notifications/Notification/Invite.php delete mode 100755 3rdparty/Sabre/CalDAV/Notifications/Notification/InviteReply.php delete mode 100755 3rdparty/Sabre/CalDAV/Notifications/Notification/SystemStatus.php delete mode 100755 3rdparty/Sabre/CalDAV/Property/AllowedSharingModes.php delete mode 100755 3rdparty/Sabre/CalDAV/Property/Invite.php delete mode 100755 3rdparty/Sabre/CalDAV/Property/ScheduleCalendarTransp.php create mode 100755 3rdparty/Sabre/CalDAV/Server.php delete mode 100755 3rdparty/Sabre/CalDAV/ShareableCalendar.php delete mode 100755 3rdparty/Sabre/CalDAV/SharedCalendar.php delete mode 100755 3rdparty/Sabre/CalDAV/SharingPlugin.php delete mode 100755 3rdparty/Sabre/CardDAV/VCFExportPlugin.php create mode 100755 3rdparty/Sabre/DAV/Directory.php rename 3rdparty/Sabre/DAV/Exception/{ReportNotSupported.php => ReportNotImplemented.php} (87%) delete mode 100755 3rdparty/Sabre/DAV/PartialUpdate/IFile.php delete mode 100755 3rdparty/Sabre/DAV/PartialUpdate/Plugin.php delete mode 100755 3rdparty/Sabre/DAV/PropertyInterface.php create mode 100755 3rdparty/Sabre/DAV/SimpleDirectory.php create mode 100755 3rdparty/Sabre/VObject/Component.php create mode 100755 3rdparty/Sabre/VObject/Component/VAlarm.php create mode 100755 3rdparty/Sabre/VObject/Component/VCalendar.php create mode 100755 3rdparty/Sabre/VObject/Component/VEvent.php create mode 100755 3rdparty/Sabre/VObject/Component/VJournal.php create mode 100755 3rdparty/Sabre/VObject/Component/VTodo.php create mode 100755 3rdparty/Sabre/VObject/DateTimeParser.php create mode 100755 3rdparty/Sabre/VObject/Element.php create mode 100755 3rdparty/Sabre/VObject/Element/DateTime.php create mode 100755 3rdparty/Sabre/VObject/Element/MultiDateTime.php create mode 100755 3rdparty/Sabre/VObject/ElementList.php create mode 100755 3rdparty/Sabre/VObject/FreeBusyGenerator.php create mode 100755 3rdparty/Sabre/VObject/Node.php create mode 100755 3rdparty/Sabre/VObject/Parameter.php create mode 100755 3rdparty/Sabre/VObject/ParseException.php create mode 100755 3rdparty/Sabre/VObject/Property.php create mode 100755 3rdparty/Sabre/VObject/Property/DateTime.php create mode 100755 3rdparty/Sabre/VObject/Property/MultiDateTime.php create mode 100755 3rdparty/Sabre/VObject/Reader.php create mode 100755 3rdparty/Sabre/VObject/RecurrenceIterator.php create mode 100755 3rdparty/Sabre/VObject/Version.php create mode 100755 3rdparty/Sabre/VObject/WindowsTimezoneMap.php create mode 100755 3rdparty/Sabre/VObject/includes.php diff --git a/3rdparty/Sabre/CalDAV/Backend/Abstract.php b/3rdparty/Sabre/CalDAV/Backend/Abstract.php index 88e5b4a1a07..7aba1d69ffe 100755 --- a/3rdparty/Sabre/CalDAV/Backend/Abstract.php +++ b/3rdparty/Sabre/CalDAV/Backend/Abstract.php @@ -1,19 +1,47 @@ getCalendarObjects($calendarId); - - $validator = new Sabre_CalDAV_CalendarQueryValidator(); - - foreach($objects as $object) { - - if ($this->validateFilterForObject($object, $filters)) { - $result[] = $object['uri']; - } - - } - - return $result; - - } + abstract function getCalendarObject($calendarId,$objectUri); /** - * This method validates if a filters (as passed to calendarQuery) matches - * the given object. + * Creates a new calendar object. * - * @param array $object - * @param array $filter - * @return bool + * @param string $calendarId + * @param string $objectUri + * @param string $calendarData + * @return void */ - protected function validateFilterForObject(array $object, array $filters) { - - // Unfortunately, setting the 'calendardata' here is optional. If - // it was excluded, we actually need another call to get this as - // well. - if (!isset($object['calendardata'])) { - $object = $this->getCalendarObject($object['calendarid'], $object['uri']); - } - - $data = is_resource($object['calendardata'])?stream_get_contents($object['calendardata']):$object['calendardata']; - $vObject = VObject\Reader::read($data); + abstract function createCalendarObject($calendarId,$objectUri,$calendarData); - $validator = new Sabre_CalDAV_CalendarQueryValidator(); - return $validator->validate($vObject, $filters); - - } + /** + * Updates an existing calendarobject, based on it's uri. + * + * @param string $calendarId + * @param string $objectUri + * @param string $calendarData + * @return void + */ + abstract function updateCalendarObject($calendarId,$objectUri,$calendarData); + /** + * Deletes an existing calendar object. + * + * @param string $calendarId + * @param string $objectUri + * @return void + */ + abstract function deleteCalendarObject($calendarId,$objectUri); } diff --git a/3rdparty/Sabre/CalDAV/Backend/BackendInterface.php b/3rdparty/Sabre/CalDAV/Backend/BackendInterface.php deleted file mode 100755 index 881538ab60e..00000000000 --- a/3rdparty/Sabre/CalDAV/Backend/BackendInterface.php +++ /dev/null @@ -1,231 +0,0 @@ - array( - * '{DAV:}displayname' => null, - * ), - * 424 => array( - * '{DAV:}owner' => null, - * ) - * ) - * - * In this example it was forbidden to update {DAV:}displayname. - * (403 Forbidden), which in turn also caused {DAV:}owner to fail - * (424 Failed Dependency) because the request needs to be atomic. - * - * @param mixed $calendarId - * @param array $mutations - * @return bool|array - */ - public function updateCalendar($calendarId, array $mutations); - - /** - * Delete a calendar and all it's objects - * - * @param mixed $calendarId - * @return void - */ - public function deleteCalendar($calendarId); - - /** - * Returns all calendar objects within a calendar. - * - * Every item contains an array with the following keys: - * * id - unique identifier which will be used for subsequent updates - * * calendardata - The iCalendar-compatible calendar data - * * uri - a unique key which will be used to construct the uri. This can be any arbitrary string. - * * lastmodified - a timestamp of the last modification time - * * etag - An arbitrary string, surrounded by double-quotes. (e.g.: - * ' "abcdef"') - * * calendarid - The calendarid as it was passed to this function. - * * size - The size of the calendar objects, in bytes. - * - * Note that the etag is optional, but it's highly encouraged to return for - * speed reasons. - * - * The calendardata is also optional. If it's not returned - * 'getCalendarObject' will be called later, which *is* expected to return - * calendardata. - * - * If neither etag or size are specified, the calendardata will be - * used/fetched to determine these numbers. If both are specified the - * amount of times this is needed is reduced by a great degree. - * - * @param mixed $calendarId - * @return array - */ - public function getCalendarObjects($calendarId); - - /** - * Returns information from a single calendar object, based on it's object - * uri. - * - * The returned array must have the same keys as getCalendarObjects. The - * 'calendardata' object is required here though, while it's not required - * for getCalendarObjects. - * - * @param mixed $calendarId - * @param string $objectUri - * @return array - */ - public function getCalendarObject($calendarId,$objectUri); - - /** - * Creates a new calendar object. - * - * It is possible return an etag from this function, which will be used in - * the response to this PUT request. Note that the ETag must be surrounded - * by double-quotes. - * - * However, you should only really return this ETag if you don't mangle the - * calendar-data. If the result of a subsequent GET to this object is not - * the exact same as this request body, you should omit the ETag. - * - * @param mixed $calendarId - * @param string $objectUri - * @param string $calendarData - * @return string|null - */ - public function createCalendarObject($calendarId,$objectUri,$calendarData); - - /** - * Updates an existing calendarobject, based on it's uri. - * - * It is possible return an etag from this function, which will be used in - * the response to this PUT request. Note that the ETag must be surrounded - * by double-quotes. - * - * However, you should only really return this ETag if you don't mangle the - * calendar-data. If the result of a subsequent GET to this object is not - * the exact same as this request body, you should omit the ETag. - * - * @param mixed $calendarId - * @param string $objectUri - * @param string $calendarData - * @return string|null - */ - public function updateCalendarObject($calendarId,$objectUri,$calendarData); - - /** - * Deletes an existing calendar object. - * - * @param mixed $calendarId - * @param string $objectUri - * @return void - */ - public function deleteCalendarObject($calendarId,$objectUri); - - /** - * Performs a calendar-query on the contents of this calendar. - * - * The calendar-query is defined in RFC4791 : CalDAV. Using the - * calendar-query it is possible for a client to request a specific set of - * object, based on contents of iCalendar properties, date-ranges and - * iCalendar component types (VTODO, VEVENT). - * - * This method should just return a list of (relative) urls that match this - * query. - * - * The list of filters are specified as an array. The exact array is - * documented by Sabre_CalDAV_CalendarQueryParser. - * - * Note that it is extremely likely that getCalendarObject for every path - * returned from this method will be called almost immediately after. You - * may want to anticipate this to speed up these requests. - * - * This method provides a default implementation, which parses *all* the - * iCalendar objects in the specified calendar. - * - * This default may well be good enough for personal use, and calendars - * that aren't very large. But if you anticipate high usage, big calendars - * or high loads, you are strongly adviced to optimize certain paths. - * - * The best way to do so is override this method and to optimize - * specifically for 'common filters'. - * - * Requests that are extremely common are: - * * requests for just VEVENTS - * * requests for just VTODO - * * requests with a time-range-filter on either VEVENT or VTODO. - * - * ..and combinations of these requests. It may not be worth it to try to - * handle every possible situation and just rely on the (relatively - * easy to use) CalendarQueryValidator to handle the rest. - * - * Note that especially time-range-filters may be difficult to parse. A - * time-range filter specified on a VEVENT must for instance also handle - * recurrence rules correctly. - * A good example of how to interprete all these filters can also simply - * be found in Sabre_CalDAV_CalendarQueryFilter. This class is as correct - * as possible, so it gives you a good idea on what type of stuff you need - * to think of. - * - * @param mixed $calendarId - * @param array $filters - * @return array - */ - public function calendarQuery($calendarId, array $filters); - -} diff --git a/3rdparty/Sabre/CalDAV/Backend/NotificationSupport.php b/3rdparty/Sabre/CalDAV/Backend/NotificationSupport.php deleted file mode 100755 index d5a1409d9b9..00000000000 --- a/3rdparty/Sabre/CalDAV/Backend/NotificationSupport.php +++ /dev/null @@ -1,47 +0,0 @@ - $row['principaluri'], '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}getctag' => $row['ctag']?$row['ctag']:'0', '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet($components), - '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-calendar-transp' => new Sabre_CalDAV_Property_ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'), ); @@ -157,13 +142,11 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { 'principaluri', 'uri', 'ctag', - 'transparent', ); $values = array( ':principaluri' => $principalUri, ':uri' => $calendarUri, ':ctag' => 1, - ':transparent' => 0, ); // Default value @@ -177,10 +160,6 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { } $values[':components'] = implode(',',$properties[$sccs]->getValue()); } - $transp = '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-calendar-transp'; - if (isset($properties[$transp])) { - $values[':transparent'] = $properties[$transp]->getValue()==='transparent'; - } foreach($this->propertyMap as $xmlName=>$dbName) { if (isset($properties[$xmlName])) { @@ -246,25 +225,17 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { foreach($mutations as $propertyName=>$propertyValue) { - switch($propertyName) { - case '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-calendar-transp' : - $fieldName = 'transparent'; - $newValues[$fieldName] = $propertyValue->getValue()==='transparent'; - break; - default : - // Checking the property map - if (!isset($this->propertyMap[$propertyName])) { - // We don't know about this property. - $hasError = true; - $result[403][$propertyName] = null; - unset($mutations[$propertyName]); - continue; - } - - $fieldName = $this->propertyMap[$propertyName]; - $newValues[$fieldName] = $propertyValue; + // We don't know about this property. + if (!isset($this->propertyMap[$propertyName])) { + $hasError = true; + $result[403][$propertyName] = null; + unset($mutations[$propertyName]); + continue; } + $fieldName = $this->propertyMap[$propertyName]; + $newValues[$fieldName] = $propertyValue; + } // If there were any errors we need to fail the request @@ -345,22 +316,9 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { */ public function getCalendarObjects($calendarId) { - $stmt = $this->pdo->prepare('SELECT id, uri, lastmodified, etag, calendarid, size FROM '.$this->calendarObjectTableName.' WHERE calendarid = ?'); + $stmt = $this->pdo->prepare('SELECT * FROM '.$this->calendarObjectTableName.' WHERE calendarid = ?'); $stmt->execute(array($calendarId)); - - $result = array(); - foreach($stmt->fetchAll(\PDO::FETCH_ASSOC) as $row) { - $result[] = array( - 'id' => $row['id'], - 'uri' => $row['uri'], - 'lastmodified' => $row['lastmodified'], - 'etag' => '"' . $row['etag'] . '"', - 'calendarid' => $row['calendarid'], - 'size' => (int)$row['size'], - ); - } - - return $result; + return $stmt->fetchAll(); } @@ -378,166 +336,44 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { */ public function getCalendarObject($calendarId,$objectUri) { - $stmt = $this->pdo->prepare('SELECT id, uri, lastmodified, etag, calendarid, size, calendardata FROM '.$this->calendarObjectTableName.' WHERE calendarid = ? AND uri = ?'); + $stmt = $this->pdo->prepare('SELECT * FROM '.$this->calendarObjectTableName.' WHERE calendarid = ? AND uri = ?'); $stmt->execute(array($calendarId, $objectUri)); - $row = $stmt->fetch(\PDO::FETCH_ASSOC); - - if(!$row) return null; - - return array( - 'id' => $row['id'], - 'uri' => $row['uri'], - 'lastmodified' => $row['lastmodified'], - 'etag' => '"' . $row['etag'] . '"', - 'calendarid' => $row['calendarid'], - 'size' => (int)$row['size'], - 'calendardata' => $row['calendardata'], - ); + return $stmt->fetch(); } - /** * Creates a new calendar object. * - * It is possible return an etag from this function, which will be used in - * the response to this PUT request. Note that the ETag must be surrounded - * by double-quotes. - * - * However, you should only really return this ETag if you don't mangle the - * calendar-data. If the result of a subsequent GET to this object is not - * the exact same as this request body, you should omit the ETag. - * - * @param mixed $calendarId + * @param string $calendarId * @param string $objectUri * @param string $calendarData - * @return string|null + * @return void */ public function createCalendarObject($calendarId,$objectUri,$calendarData) { - $extraData = $this->getDenormalizedData($calendarData); - - $stmt = $this->pdo->prepare('INSERT INTO '.$this->calendarObjectTableName.' (calendarid, uri, calendardata, lastmodified, etag, size, componenttype, firstoccurence, lastoccurence) VALUES (?,?,?,?,?,?,?,?,?)'); - $stmt->execute(array( - $calendarId, - $objectUri, - $calendarData, - time(), - $extraData['etag'], - $extraData['size'], - $extraData['componentType'], - $extraData['firstOccurence'], - $extraData['lastOccurence'], - )); + $stmt = $this->pdo->prepare('INSERT INTO '.$this->calendarObjectTableName.' (calendarid, uri, calendardata, lastmodified) VALUES (?,?,?,?)'); + $stmt->execute(array($calendarId,$objectUri,$calendarData,time())); $stmt = $this->pdo->prepare('UPDATE '.$this->calendarTableName.' SET ctag = ctag + 1 WHERE id = ?'); $stmt->execute(array($calendarId)); - return '"' . $extraData['etag'] . '"'; - } /** * Updates an existing calendarobject, based on it's uri. * - * It is possible return an etag from this function, which will be used in - * the response to this PUT request. Note that the ETag must be surrounded - * by double-quotes. - * - * However, you should only really return this ETag if you don't mangle the - * calendar-data. If the result of a subsequent GET to this object is not - * the exact same as this request body, you should omit the ETag. - * - * @param mixed $calendarId + * @param string $calendarId * @param string $objectUri * @param string $calendarData - * @return string|null + * @return void */ public function updateCalendarObject($calendarId,$objectUri,$calendarData) { - $extraData = $this->getDenormalizedData($calendarData); - - $stmt = $this->pdo->prepare('UPDATE '.$this->calendarObjectTableName.' SET calendardata = ?, lastmodified = ?, etag = ?, size = ?, componenttype = ?, firstoccurence = ?, lastoccurence = ? WHERE calendarid = ? AND uri = ?'); - $stmt->execute(array($calendarData,time(), $extraData['etag'], $extraData['size'], $extraData['componentType'], $extraData['firstOccurence'], $extraData['lastOccurence'] ,$calendarId,$objectUri)); + $stmt = $this->pdo->prepare('UPDATE '.$this->calendarObjectTableName.' SET calendardata = ?, lastmodified = ? WHERE calendarid = ? AND uri = ?'); + $stmt->execute(array($calendarData,time(),$calendarId,$objectUri)); $stmt = $this->pdo->prepare('UPDATE '.$this->calendarTableName.' SET ctag = ctag + 1 WHERE id = ?'); $stmt->execute(array($calendarId)); - return '"' . $extraData['etag'] . '"'; - - } - - /** - * Parses some information from calendar objects, used for optimized - * calendar-queries. - * - * Returns an array with the following keys: - * * etag - * * size - * * componentType - * * firstOccurence - * * lastOccurence - * - * @param string $calendarData - * @return array - */ - protected function getDenormalizedData($calendarData) { - - $vObject = VObject\Reader::read($calendarData); - $componentType = null; - $component = null; - $firstOccurence = null; - $lastOccurence = null; - foreach($vObject->getComponents() as $component) { - if ($component->name!=='VTIMEZONE') { - $componentType = $component->name; - break; - } - } - if (!$componentType) { - throw new Sabre_DAV_Exception_BadRequest('Calendar objects must have a VJOURNAL, VEVENT or VTODO component'); - } - if ($componentType === 'VEVENT') { - $firstOccurence = $component->DTSTART->getDateTime()->getTimeStamp(); - // Finding the last occurence is a bit harder - if (!isset($component->RRULE)) { - if (isset($component->DTEND)) { - $lastOccurence = $component->DTEND->getDateTime()->getTimeStamp(); - } elseif (isset($component->DURATION)) { - $endDate = clone $component->DTSTART->getDateTime(); - $endDate->add(VObject\DateTimeParser::parse($component->DURATION->value)); - $lastOccurence = $endDate->getTimeStamp(); - } elseif ($component->DTSTART->getDateType()===VObject\Property\DateTime::DATE) { - $endDate = clone $component->DTSTART->getDateTime(); - $endDate->modify('+1 day'); - $lastOccurence = $endDate->getTimeStamp(); - } else { - $lastOccurence = $firstOccurence; - } - } else { - $it = new VObject\RecurrenceIterator($vObject, (string)$component->UID); - $maxDate = new DateTime(self::MAX_DATE); - if ($it->isInfinite()) { - $lastOccurence = $maxDate->getTimeStamp(); - } else { - $end = $it->getDtEnd(); - while($it->valid() && $end < $maxDate) { - $end = $it->getDtEnd(); - $it->next(); - - } - $lastOccurence = $end->getTimeStamp(); - } - - } - } - - return array( - 'etag' => md5($calendarData), - 'size' => strlen($calendarData), - 'componentType' => $componentType, - 'firstOccurence' => $firstOccurence, - 'lastOccurence' => $lastOccurence, - ); - } /** @@ -556,132 +392,5 @@ class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract { } - /** - * Performs a calendar-query on the contents of this calendar. - * - * The calendar-query is defined in RFC4791 : CalDAV. Using the - * calendar-query it is possible for a client to request a specific set of - * object, based on contents of iCalendar properties, date-ranges and - * iCalendar component types (VTODO, VEVENT). - * - * This method should just return a list of (relative) urls that match this - * query. - * - * The list of filters are specified as an array. The exact array is - * documented by Sabre_CalDAV_CalendarQueryParser. - * - * Note that it is extremely likely that getCalendarObject for every path - * returned from this method will be called almost immediately after. You - * may want to anticipate this to speed up these requests. - * - * This method provides a default implementation, which parses *all* the - * iCalendar objects in the specified calendar. - * - * This default may well be good enough for personal use, and calendars - * that aren't very large. But if you anticipate high usage, big calendars - * or high loads, you are strongly adviced to optimize certain paths. - * - * The best way to do so is override this method and to optimize - * specifically for 'common filters'. - * - * Requests that are extremely common are: - * * requests for just VEVENTS - * * requests for just VTODO - * * requests with a time-range-filter on a VEVENT. - * - * ..and combinations of these requests. It may not be worth it to try to - * handle every possible situation and just rely on the (relatively - * easy to use) CalendarQueryValidator to handle the rest. - * - * Note that especially time-range-filters may be difficult to parse. A - * time-range filter specified on a VEVENT must for instance also handle - * recurrence rules correctly. - * A good example of how to interprete all these filters can also simply - * be found in Sabre_CalDAV_CalendarQueryFilter. This class is as correct - * as possible, so it gives you a good idea on what type of stuff you need - * to think of. - * - * This specific implementation (for the PDO) backend optimizes filters on - * specific components, and VEVENT time-ranges. - * - * @param string $calendarId - * @param array $filters - * @return array - */ - public function calendarQuery($calendarId, array $filters) { - - $result = array(); - $validator = new Sabre_CalDAV_CalendarQueryValidator(); - - $componentType = null; - $requirePostFilter = true; - $timeRange = null; - - // if no filters were specified, we don't need to filter after a query - if (!$filters['prop-filters'] && !$filters['comp-filters']) { - $requirePostFilter = false; - } - - // Figuring out if there's a component filter - if (count($filters['comp-filters']) > 0 && !$filters['comp-filters'][0]['is-not-defined']) { - $componentType = $filters['comp-filters'][0]['name']; - - // Checking if we need post-filters - if (!$filters['prop-filters'] && !$filters['comp-filters'][0]['comp-filters'] && !$filters['comp-filters'][0]['time-range'] && !$filters['comp-filters'][0]['prop-filters']) { - $requirePostFilter = false; - } - // There was a time-range filter - if ($componentType == 'VEVENT' && isset($filters['comp-filters'][0]['time-range'])) { - $timeRange = $filters['comp-filters'][0]['time-range']; - - // If start time OR the end time is not specified, we can do a - // 100% accurate mysql query. - if (!$filters['prop-filters'] && !$filters['comp-filters'][0]['comp-filters'] && !$filters['comp-filters'][0]['prop-filters'] && (!$timeRange['start'] || !$timeRange['end'])) { - $requirePostFilter = false; - } - } - } - - if ($requirePostFilter) { - $query = "SELECT uri, calendardata FROM ".$this->calendarObjectTableName." WHERE calendarid = :calendarid"; - } else { - $query = "SELECT uri FROM ".$this->calendarObjectTableName." WHERE calendarid = :calendarid"; - } - - $values = array( - 'calendarid' => $calendarId, - ); - - if ($componentType) { - $query.=" AND componenttype = :componenttype"; - $values['componenttype'] = $componentType; - } - - if ($timeRange && $timeRange['start']) { - $query.=" AND lastoccurence > :startdate"; - $values['startdate'] = $timeRange['start']->getTimeStamp(); - } - if ($timeRange && $timeRange['end']) { - $query.=" AND firstoccurence < :enddate"; - $values['enddate'] = $timeRange['end']->getTimeStamp(); - } - - $stmt = $this->pdo->prepare($query); - $stmt->execute($values); - - $result = array(); - while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { - if ($requirePostFilter) { - if (!$this->validateFilterForObject($row, $filters)) { - continue; - } - } - $result[] = $row['uri']; - - } - - return $result; - - } } diff --git a/3rdparty/Sabre/CalDAV/Backend/SharingSupport.php b/3rdparty/Sabre/CalDAV/Backend/SharingSupport.php deleted file mode 100755 index f73f0ff3d8a..00000000000 --- a/3rdparty/Sabre/CalDAV/Backend/SharingSupport.php +++ /dev/null @@ -1,238 +0,0 @@ -caldavBackend = $caldavBackend; $this->principalBackend = $principalBackend; $this->calendarInfo = $calendarInfo; + } /** @@ -91,6 +92,9 @@ class Sabre_CalDAV_Calendar implements Sabre_CalDAV_ICalendar, Sabre_DAV_IProper case '{urn:ietf:params:xml:ns:caldav}supported-collation-set' : $response[$prop] = new Sabre_CalDAV_Property_SupportedCollationSet(); break; + case '{DAV:}owner' : + $response[$prop] = new Sabre_DAVACL_Property_Principal(Sabre_DAVACL_Property_Principal::HREF,$this->calendarInfo['principaluri']); + break; default : if (isset($this->calendarInfo[$prop])) $response[$prop] = $this->calendarInfo[$prop]; break; @@ -106,21 +110,12 @@ class Sabre_CalDAV_Calendar implements Sabre_CalDAV_ICalendar, Sabre_DAV_IProper * The contained calendar objects are for example Events or Todo's. * * @param string $name - * @return Sabre_CalDAV_ICalendarObject + * @return Sabre_DAV_ICalendarObject */ public function getChild($name) { $obj = $this->caldavBackend->getCalendarObject($this->calendarInfo['id'],$name); if (!$obj) throw new Sabre_DAV_Exception_NotFound('Calendar object not found'); - - $obj['acl'] = $this->getACL(); - // Removing the irrelivant - foreach($obj['acl'] as $key=>$acl) { - if ($acl['privilege'] === '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}read-free-busy') { - unset($obj['acl'][$key]); - } - } - return new Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj); } @@ -135,13 +130,6 @@ class Sabre_CalDAV_Calendar implements Sabre_CalDAV_ICalendar, Sabre_DAV_IProper $objs = $this->caldavBackend->getCalendarObjects($this->calendarInfo['id']); $children = array(); foreach($objs as $obj) { - $obj['acl'] = $this->getACL(); - // Removing the irrelivant - foreach($obj['acl'] as $key=>$acl) { - if ($acl['privilege'] === '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}read-free-busy') { - unset($obj['acl'][$key]); - } - } $children[] = new Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj); } return $children; @@ -274,27 +262,27 @@ class Sabre_CalDAV_Calendar implements Sabre_CalDAV_ICalendar, Sabre_DAV_IProper return array( array( 'privilege' => '{DAV:}read', - 'principal' => $this->getOwner(), + 'principal' => $this->calendarInfo['principaluri'], 'protected' => true, ), array( 'privilege' => '{DAV:}write', - 'principal' => $this->getOwner(), + 'principal' => $this->calendarInfo['principaluri'], 'protected' => true, ), array( 'privilege' => '{DAV:}read', - 'principal' => $this->getOwner() . '/calendar-proxy-write', + 'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write', 'protected' => true, ), array( 'privilege' => '{DAV:}write', - 'principal' => $this->getOwner() . '/calendar-proxy-write', + 'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write', 'protected' => true, ), array( 'privilege' => '{DAV:}read', - 'principal' => $this->getOwner() . '/calendar-proxy-read', + 'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-read', 'protected' => true, ), array( @@ -352,27 +340,4 @@ class Sabre_CalDAV_Calendar implements Sabre_CalDAV_ICalendar, Sabre_DAV_IProper } - /** - * Performs a calendar-query on the contents of this calendar. - * - * The calendar-query is defined in RFC4791 : CalDAV. Using the - * calendar-query it is possible for a client to request a specific set of - * object, based on contents of iCalendar properties, date-ranges and - * iCalendar component types (VTODO, VEVENT). - * - * This method should just return a list of (relative) urls that match this - * query. - * - * The list of filters are specified as an array. The exact array is - * documented by Sabre_CalDAV_CalendarQueryParser. - * - * @param array $filters - * @return array - */ - public function calendarQuery(array $filters) { - - return $this->caldavBackend->calendarQuery($this->calendarInfo['id'], $filters); - - } - } diff --git a/3rdparty/Sabre/CalDAV/CalendarObject.php b/3rdparty/Sabre/CalDAV/CalendarObject.php index 40bd8588c70..72f0a578d16 100755 --- a/3rdparty/Sabre/CalDAV/CalendarObject.php +++ b/3rdparty/Sabre/CalDAV/CalendarObject.php @@ -6,13 +6,13 @@ * @package Sabre * @subpackage CalDAV * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. - * @author Evert Pot (http://www.rooftopsolutions.nl/) + * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV_ICalendarObject, Sabre_DAVACL_IACL { /** - * Sabre_CalDAV_Backend_BackendInterface + * Sabre_CalDAV_Backend_Abstract * * @var array */ @@ -35,11 +35,11 @@ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV /** * Constructor * - * @param Sabre_CalDAV_Backend_BackendInterface $caldavBackend + * @param Sabre_CalDAV_Backend_Abstract $caldavBackend * @param array $calendarInfo * @param array $objectData */ - public function __construct(Sabre_CalDAV_Backend_BackendInterface $caldavBackend,array $calendarInfo,array $objectData) { + public function __construct(Sabre_CalDAV_Backend_Abstract $caldavBackend,array $calendarInfo,array $objectData) { $this->caldavBackend = $caldavBackend; @@ -85,8 +85,8 @@ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV /** * Updates the ICalendar-formatted object * - * @param string|resource $calendarData - * @return string + * @param string $calendarData + * @return void */ public function put($calendarData) { @@ -119,7 +119,7 @@ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV */ public function getContentType() { - return 'text/calendar; charset=utf-8'; + return 'text/calendar'; } @@ -143,7 +143,7 @@ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV /** * Returns the last modification date as a unix timestamp * - * @return int + * @return time */ public function getLastModified() { @@ -206,12 +206,6 @@ class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV */ public function getACL() { - // An alternative acl may be specified in the object data. - if (isset($this->objectData['acl'])) { - return $this->objectData['acl']; - } - - // The default ACL return array( array( 'privilege' => '{DAV:}read', diff --git a/3rdparty/Sabre/CalDAV/CalendarQueryParser.php b/3rdparty/Sabre/CalDAV/CalendarQueryParser.php index b95095f96fc..bd0d343382f 100755 --- a/3rdparty/Sabre/CalDAV/CalendarQueryParser.php +++ b/3rdparty/Sabre/CalDAV/CalendarQueryParser.php @@ -1,7 +1,5 @@ xpath = new DOMXPath($dom); $this->xpath->registerNameSpace('cal',Sabre_CalDAV_Plugin::NS_CALDAV); - $this->xpath->registerNameSpace('dav','DAV:'); + $this->xpath->registerNameSpace('dav','urn:DAV'); } @@ -243,12 +241,12 @@ class Sabre_CalDAV_CalendarQueryParser { $timeRangeNode = $timeRangeNodes->item(0); if ($start = $timeRangeNode->getAttribute('start')) { - $start = VObject\DateTimeParser::parseDateTime($start); + $start = Sabre_VObject_DateTimeParser::parseDateTime($start); } else { $start = null; } if ($end = $timeRangeNode->getAttribute('end')) { - $end = VObject\DateTimeParser::parseDateTime($end); + $end = Sabre_VObject_DateTimeParser::parseDateTime($end); } else { $end = null; } @@ -276,13 +274,13 @@ class Sabre_CalDAV_CalendarQueryParser { if(!$start) { throw new Sabre_DAV_Exception_BadRequest('The "start" attribute is required for the CALDAV:expand element'); } - $start = VObject\DateTimeParser::parseDateTime($start); + $start = Sabre_VObject_DateTimeParser::parseDateTime($start); $end = $parentNode->getAttribute('end'); if(!$end) { throw new Sabre_DAV_Exception_BadRequest('The "end" attribute is required for the CALDAV:expand element'); } - $end = VObject\DateTimeParser::parseDateTime($end); + $end = Sabre_VObject_DateTimeParser::parseDateTime($end); if ($end <= $start) { throw new Sabre_DAV_Exception_BadRequest('The end-date must be larger than the start-date in the expand element.'); diff --git a/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php b/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php index 53e86fc509f..8f674840e87 100755 --- a/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php +++ b/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php @@ -1,7 +1,5 @@ parent->name === 'VEVENT' && $component->parent->RRULE) { // Fire up the iterator! - $it = new VObject\RecurrenceIterator($component->parent->parent, (string)$component->parent->UID); + $it = new Sabre_VObject_RecurrenceIterator($component->parent->parent, (string)$component->parent->UID); while($it->valid()) { $expandedEvent = $it->getEventObject(); diff --git a/3rdparty/Sabre/CalDAV/CalendarRootNode.php b/3rdparty/Sabre/CalDAV/CalendarRootNode.php index eb62eea75a6..3907913cc78 100755 --- a/3rdparty/Sabre/CalDAV/CalendarRootNode.php +++ b/3rdparty/Sabre/CalDAV/CalendarRootNode.php @@ -1,15 +1,14 @@ caldavBackend = $caldavBackend; diff --git a/3rdparty/Sabre/CalDAV/Exception/InvalidComponentType.php b/3rdparty/Sabre/CalDAV/Exception/InvalidComponentType.php deleted file mode 100755 index 4ac617d22f0..00000000000 --- a/3rdparty/Sabre/CalDAV/Exception/InvalidComponentType.php +++ /dev/null @@ -1,32 +0,0 @@ -ownerDocument; - - $np = $doc->createElementNS(Sabre_CalDAV_Plugin::NS_CALDAV,'cal:supported-calendar-component'); - $errorNode->appendChild($np); - - } - -} \ No newline at end of file diff --git a/3rdparty/Sabre/CalDAV/ICSExportPlugin.php b/3rdparty/Sabre/CalDAV/ICSExportPlugin.php index d3e4e7b7201..ec42b406b2f 100755 --- a/3rdparty/Sabre/CalDAV/ICSExportPlugin.php +++ b/3rdparty/Sabre/CalDAV/ICSExportPlugin.php @@ -1,7 +1,5 @@ version = '2.0'; if (Sabre_DAV_Server::$exposeVersion) { $calendar->prodid = '-//SabreDAV//SabreDAV ' . Sabre_DAV_Version::VERSION . '//EN'; @@ -105,7 +103,7 @@ class Sabre_CalDAV_ICSExportPlugin extends Sabre_DAV_ServerPlugin { } $nodeData = $node[200]['{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}calendar-data']; - $nodeComp = VObject\Reader::read($nodeData); + $nodeComp = Sabre_VObject_Reader::read($nodeData); foreach($nodeComp->children() as $child) { diff --git a/3rdparty/Sabre/CalDAV/ICalendar.php b/3rdparty/Sabre/CalDAV/ICalendar.php index 40aa9f9579c..15d51ebcf79 100755 --- a/3rdparty/Sabre/CalDAV/ICalendar.php +++ b/3rdparty/Sabre/CalDAV/ICalendar.php @@ -8,28 +8,11 @@ * @package Sabre * @subpackage CalDAV * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. - * @author Evert Pot (http://www.rooftopsolutions.nl/) + * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ interface Sabre_CalDAV_ICalendar extends Sabre_DAV_ICollection { - /** - * Performs a calendar-query on the contents of this calendar. - * - * The calendar-query is defined in RFC4791 : CalDAV. Using the - * calendar-query it is possible for a client to request a specific set of - * object, based on contents of iCalendar properties, date-ranges and - * iCalendar component types (VTODO, VEVENT). - * - * This method should just return a list of (relative) urls that match this - * query. - * - * The list of filters are specified as an array. The exact array is - * documented by Sabre_CalDAV_CalendarQueryParser. - * - * @param array $filters - * @return array - */ - public function calendarQuery(array $filters); + } diff --git a/3rdparty/Sabre/CalDAV/IShareableCalendar.php b/3rdparty/Sabre/CalDAV/IShareableCalendar.php deleted file mode 100755 index 5b55788c014..00000000000 --- a/3rdparty/Sabre/CalDAV/IShareableCalendar.php +++ /dev/null @@ -1,48 +0,0 @@ -caldavBackend = $caldavBackend; - $this->principalUri = $principalUri; - - } - - /** - * Returns all notifications for a principal - * - * @return array - */ - public function getChildren() { - - $children = array(); - $notifications = $this->caldavBackend->getNotificationsForPrincipal($this->principalUri); - - foreach($notifications as $notification) { - - $children[] = new Sabre_CalDAV_Notifications_Node( - $this->caldavBackend, - $this->principalUri, - $notification - ); - } - - return $children; - - } - - /** - * Returns the name of this object - * - * @return string - */ - public function getName() { - - return 'notifications'; - - } - - /** - * Returns the owner principal - * - * This must be a url to a principal, or null if there's no owner - * - * @return string|null - */ - public function getOwner() { - - return $this->principalUri; - - } - - /** - * Returns a group principal - * - * This must be a url to a principal, or null if there's no owner - * - * @return string|null - */ - public function getGroup() { - - return null; - - } - - /** - * Returns a list of ACE's for this node. - * - * Each ACE has the following properties: - * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are - * currently the only supported privileges - * * 'principal', a url to the principal who owns the node - * * 'protected' (optional), indicating that this ACE is not allowed to - * be updated. - * - * @return array - */ - public function getACL() { - - return array( - array( - 'principal' => $this->getOwner(), - 'privilege' => '{DAV:}read', - 'protected' => true, - ), - array( - 'principal' => $this->getOwner(), - 'privilege' => '{DAV:}write', - 'protected' => true, - ) - ); - - } - - /** - * Updates the ACL - * - * This method will receive a list of new ACE's as an array argument. - * - * @param array $acl - * @return void - */ - public function setACL(array $acl) { - - throw new Sabre_DAV_Exception_NotImplemented('Updating ACLs is not implemented here'); - - } - - /** - * Returns the list of supported privileges for this node. - * - * The returned data structure is a list of nested privileges. - * See Sabre_DAVACL_Plugin::getDefaultSupportedPrivilegeSet for a simple - * standard structure. - * - * If null is returned from this method, the default privilege set is used, - * which is fine for most common usecases. - * - * @return array|null - */ - public function getSupportedPrivilegeSet() { - - return null; - - } - -} diff --git a/3rdparty/Sabre/CalDAV/Notifications/ICollection.php b/3rdparty/Sabre/CalDAV/Notifications/ICollection.php deleted file mode 100755 index eb873af3f92..00000000000 --- a/3rdparty/Sabre/CalDAV/Notifications/ICollection.php +++ /dev/null @@ -1,22 +0,0 @@ -caldavBackend = $caldavBackend; - $this->principalUri = $principalUri; - $this->notification = $notification; - - } - - /** - * Returns the path name for this notification - * - * @return id - */ - public function getName() { - - return $this->notification->getId() . '.xml'; - - } - - /** - * Returns the etag for the notification. - * - * The etag must be surrounded by litteral double-quotes. - * - * @return string - */ - public function getETag() { - - return $this->notification->getETag(); - - } - - /** - * This method must return an xml element, using the - * Sabre_CalDAV_Notifications_INotificationType classes. - * - * @return Sabre_DAVNotification_INotificationType - */ - public function getNotificationType() { - - return $this->notification; - - } - - /** - * Deletes this notification - * - * @return void - */ - public function delete() { - - $this->caldavBackend->deleteNotification($this->getOwner(), $this->notification); - - } - - /** - * Returns the owner principal - * - * This must be a url to a principal, or null if there's no owner - * - * @return string|null - */ - public function getOwner() { - - return $this->principalUri; - - } - - /** - * Returns a group principal - * - * This must be a url to a principal, or null if there's no owner - * - * @return string|null - */ - public function getGroup() { - - return null; - - } - - /** - * Returns a list of ACE's for this node. - * - * Each ACE has the following properties: - * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are - * currently the only supported privileges - * * 'principal', a url to the principal who owns the node - * * 'protected' (optional), indicating that this ACE is not allowed to - * be updated. - * - * @return array - */ - public function getACL() { - - return array( - array( - 'principal' => $this->getOwner(), - 'privilege' => '{DAV:}read', - 'protected' => true, - ), - array( - 'principal' => $this->getOwner(), - 'privilege' => '{DAV:}write', - 'protected' => true, - ) - ); - - } - - /** - * Updates the ACL - * - * This method will receive a list of new ACE's as an array argument. - * - * @param array $acl - * @return void - */ - public function setACL(array $acl) { - - throw new Sabre_DAV_Exception_NotImplemented('Updating ACLs is not implemented here'); - - } - - /** - * Returns the list of supported privileges for this node. - * - * The returned data structure is a list of nested privileges. - * See Sabre_DAVACL_Plugin::getDefaultSupportedPrivilegeSet for a simple - * standard structure. - * - * If null is returned from this method, the default privilege set is used, - * which is fine for most common usecases. - * - * @return array|null - */ - public function getSupportedPrivilegeSet() { - - return null; - - } - -} diff --git a/3rdparty/Sabre/CalDAV/Notifications/Notification/Invite.php b/3rdparty/Sabre/CalDAV/Notifications/Notification/Invite.php deleted file mode 100755 index a6b36203f34..00000000000 --- a/3rdparty/Sabre/CalDAV/Notifications/Notification/Invite.php +++ /dev/null @@ -1,276 +0,0 @@ -$value) { - if (!property_exists($this, $key)) { - throw new InvalidArgumentException('Unknown option: ' . $key); - } - $this->$key = $value; - } - - } - - /** - * Serializes the notification as a single property. - * - * You should usually just encode the single top-level element of the - * notification. - * - * @param Sabre_DAV_Server $server - * @param DOMElement $node - * @return void - */ - public function serialize(Sabre_DAV_Server $server, \DOMElement $node) { - - $prop = $node->ownerDocument->createElement('cs:invite-notification'); - $node->appendChild($prop); - - } - - /** - * This method serializes the entire notification, as it is used in the - * response body. - * - * @param Sabre_DAV_Server $server - * @param DOMElement $node - * @return void - */ - public function serializeBody(Sabre_DAV_Server $server, \DOMElement $node) { - - $doc = $node->ownerDocument; - - $dt = $doc->createElement('cs:dtstamp'); - $this->dtStamp->setTimezone(new \DateTimezone('GMT')); - $dt->appendChild($doc->createTextNode($this->dtStamp->format('Ymd\\THis\\Z'))); - $node->appendChild($dt); - - $prop = $doc->createElement('cs:invite-notification'); - $node->appendChild($prop); - - $uid = $doc->createElement('cs:uid'); - $uid->appendChild( $doc->createTextNode($this->id) ); - $prop->appendChild($uid); - - $href = $doc->createElement('d:href'); - $href->appendChild( $doc->createTextNode( $this->href ) ); - $prop->appendChild($href); - - $nodeName = null; - switch($this->type) { - - case SharingPlugin::STATUS_ACCEPTED : - $nodeName = 'cs:invite-accepted'; - break; - case SharingPlugin::STATUS_DECLINED : - $nodeName = 'cs:invite-declined'; - break; - case SharingPlugin::STATUS_DELETED : - $nodeName = 'cs:invite-deleted'; - break; - case SharingPlugin::STATUS_NORESPONSE : - $nodeName = 'cs:invite-noresponse'; - break; - - } - $prop->appendChild( - $doc->createElement($nodeName) - ); - $hostHref = $doc->createElement('d:href', $server->getBaseUri() . $this->hostUrl); - $hostUrl = $doc->createElement('cs:hosturl'); - $hostUrl->appendChild($hostHref); - $prop->appendChild($hostUrl); - - $access = $doc->createElement('cs:access'); - if ($this->readOnly) { - $access->appendChild($doc->createElement('cs:read')); - } else { - $access->appendChild($doc->createElement('cs:read-write')); - } - $prop->appendChild($access); - - $organizerHref = $doc->createElement('d:href', $server->getBaseUri() . $this->organizer); - $organizerUrl = $doc->createElement('cs:organizer'); - if ($this->commonName) { - $commonName = $doc->createElement('cs:common-name'); - $commonName->appendChild($doc->createTextNode($this->commonName)); - $organizerUrl->appendChild($commonName); - } - $organizerUrl->appendChild($organizerHref); - $prop->appendChild($organizerUrl); - - if ($this->summary) { - $summary = $doc->createElement('cs:summary'); - $summary->appendChild($doc->createTextNode($this->summary)); - $prop->appendChild($summary); - } - if ($this->supportedComponents) { - - $xcomp = $doc->createElement('cal:supported-calendar-component-set'); - $this->supportedComponents->serialize($server, $xcomp); - $prop->appendChild($xcomp); - - } - - } - - /** - * Returns a unique id for this notification - * - * This is just the base url. This should generally be some kind of unique - * id. - * - * @return string - */ - public function getId() { - - return $this->id; - - } - - /** - * Returns the ETag for this notification. - * - * The ETag must be surrounded by literal double-quotes. - * - * @return string - */ - public function getETag() { - - return $this->etag; - - } - -} diff --git a/3rdparty/Sabre/CalDAV/Notifications/Notification/InviteReply.php b/3rdparty/Sabre/CalDAV/Notifications/Notification/InviteReply.php deleted file mode 100755 index e935aa5aa11..00000000000 --- a/3rdparty/Sabre/CalDAV/Notifications/Notification/InviteReply.php +++ /dev/null @@ -1,216 +0,0 @@ -$value) { - if (!property_exists($this, $key)) { - throw new InvalidArgumentException('Unknown option: ' . $key); - } - $this->$key = $value; - } - - } - - /** - * Serializes the notification as a single property. - * - * You should usually just encode the single top-level element of the - * notification. - * - * @param Sabre_DAV_Server $server - * @param DOMElement $node - * @return void - */ - public function serialize(Sabre_DAV_Server $server, \DOMElement $node) { - - $prop = $node->ownerDocument->createElement('cs:invite-reply'); - $node->appendChild($prop); - - } - - /** - * This method serializes the entire notification, as it is used in the - * response body. - * - * @param Sabre_DAV_Server $server - * @param DOMElement $node - * @return void - */ - public function serializeBody(Sabre_DAV_Server $server, \DOMElement $node) { - - $doc = $node->ownerDocument; - - $dt = $doc->createElement('cs:dtstamp'); - $this->dtStamp->setTimezone(new \DateTimezone('GMT')); - $dt->appendChild($doc->createTextNode($this->dtStamp->format('Ymd\\THis\\Z'))); - $node->appendChild($dt); - - $prop = $doc->createElement('cs:invite-reply'); - $node->appendChild($prop); - - $uid = $doc->createElement('cs:uid'); - $uid->appendChild($doc->createTextNode($this->id)); - $prop->appendChild($uid); - - $inReplyTo = $doc->createElement('cs:in-reply-to'); - $inReplyTo->appendChild( $doc->createTextNode($this->inReplyTo) ); - $prop->appendChild($inReplyTo); - - $href = $doc->createElement('d:href'); - $href->appendChild( $doc->createTextNode($this->href) ); - $prop->appendChild($href); - - $nodeName = null; - switch($this->type) { - - case SharingPlugin::STATUS_ACCEPTED : - $nodeName = 'cs:invite-accepted'; - break; - case SharingPlugin::STATUS_DECLINED : - $nodeName = 'cs:invite-declined'; - break; - - } - $prop->appendChild( - $doc->createElement($nodeName) - ); - $hostHref = $doc->createElement('d:href', $server->getBaseUri() . $this->hostUrl); - $hostUrl = $doc->createElement('cs:hosturl'); - $hostUrl->appendChild($hostHref); - $prop->appendChild($hostUrl); - - if ($this->summary) { - $summary = $doc->createElement('cs:summary'); - $summary->appendChild($doc->createTextNode($this->summary)); - $prop->appendChild($summary); - } - - } - - /** - * Returns a unique id for this notification - * - * This is just the base url. This should generally be some kind of unique - * id. - * - * @return string - */ - public function getId() { - - return $this->id; - - } - - /** - * Returns the ETag for this notification. - * - * The ETag must be surrounded by literal double-quotes. - * - * @return string - */ - public function getETag() { - - return $this->etag; - - } -} diff --git a/3rdparty/Sabre/CalDAV/Notifications/Notification/SystemStatus.php b/3rdparty/Sabre/CalDAV/Notifications/Notification/SystemStatus.php deleted file mode 100755 index f09ed3525f5..00000000000 --- a/3rdparty/Sabre/CalDAV/Notifications/Notification/SystemStatus.php +++ /dev/null @@ -1,179 +0,0 @@ -id = $id; - $this->type = $type; - $this->description = $description; - $this->href = $href; - $this->etag = $etag; - - } - - /** - * Serializes the notification as a single property. - * - * You should usually just encode the single top-level element of the - * notification. - * - * @param Sabre_DAV_Server $server - * @param DOMElement $node - * @return void - */ - public function serialize(Sabre_DAV_Server $server, \DOMElement $node) { - - switch($this->type) { - case self::TYPE_LOW : - $type = 'low'; - break; - case self::TYPE_MEDIUM : - $type = 'medium'; - break; - default : - case self::TYPE_HIGH : - $type = 'high'; - break; - } - - $prop = $node->ownerDocument->createElement('cs:systemstatus'); - $prop->setAttribute('type', $type); - - $node->appendChild($prop); - - } - - /** - * This method serializes the entire notification, as it is used in the - * response body. - * - * @param Sabre_DAV_Server $server - * @param DOMElement $node - * @return void - */ - public function serializeBody(Sabre_DAV_Server $server, \DOMElement $node) { - - switch($this->type) { - case self::TYPE_LOW : - $type = 'low'; - break; - case self::TYPE_MEDIUM : - $type = 'medium'; - break; - default : - case self::TYPE_HIGH : - $type = 'high'; - break; - } - - $prop = $node->ownerDocument->createElement('cs:systemstatus'); - $prop->setAttribute('type', $type); - - if ($this->description) { - $text = $node->ownerDocument->createTextNode($this->description); - $desc = $node->ownerDocument->createElement('cs:description'); - $desc->appendChild($text); - $prop->appendChild($desc); - } - if ($this->href) { - $text = $node->ownerDocument->createTextNode($this->href); - $href = $node->ownerDocument->createElement('d:href'); - $href->appendChild($text); - $prop->appendChild($href); - } - - $node->appendChild($prop); - - } - - /** - * Returns a unique id for this notification - * - * This is just the base url. This should generally be some kind of unique - * id. - * - * @return string - */ - public function getId() { - - return $this->id; - - } - - /* - * Returns the ETag for this notification. - * - * The ETag must be surrounded by literal double-quotes. - * - * @return string - */ - public function getETag() { - - return $this->etag; - - } -} diff --git a/3rdparty/Sabre/CalDAV/Plugin.php b/3rdparty/Sabre/CalDAV/Plugin.php index f3d11969c8b..c56ab384844 100755 --- a/3rdparty/Sabre/CalDAV/Plugin.php +++ b/3rdparty/Sabre/CalDAV/Plugin.php @@ -1,7 +1,5 @@ subscribeEvent('onBrowserPostAction', array($this,'browserPostAction')); $server->subscribeEvent('beforeWriteContent', array($this, 'beforeWriteContent')); $server->subscribeEvent('beforeCreateFile', array($this, 'beforeCreateFile')); - $server->subscribeEvent('beforeMethod', array($this,'beforeMethod')); $server->xmlNamespaces[self::NS_CALDAV] = 'cal'; $server->xmlNamespaces[self::NS_CALENDARSERVER] = 'cs'; $server->propertyMap['{' . self::NS_CALDAV . '}supported-calendar-component-set'] = 'Sabre_CalDAV_Property_SupportedCalendarComponentSet'; - $server->propertyMap['{' . self::NS_CALDAV . '}schedule-calendar-transp'] = 'Sabre_CalDAV_Property_ScheduleCalendarTransp'; $server->resourceTypeMapping['Sabre_CalDAV_ICalendar'] = '{urn:ietf:params:xml:ns:caldav}calendar'; $server->resourceTypeMapping['Sabre_CalDAV_Schedule_IOutbox'] = '{urn:ietf:params:xml:ns:caldav}schedule-outbox'; $server->resourceTypeMapping['Sabre_CalDAV_Principal_ProxyRead'] = '{http://calendarserver.org/ns/}calendar-proxy-read'; $server->resourceTypeMapping['Sabre_CalDAV_Principal_ProxyWrite'] = '{http://calendarserver.org/ns/}calendar-proxy-write'; - $server->resourceTypeMapping['Sabre_CalDAV_Notifications_ICollection'] = '{' . self::NS_CALENDARSERVER . '}notification'; array_push($server->protectedProperties, @@ -200,9 +205,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { // CalendarServer extensions '{' . self::NS_CALENDARSERVER . '}getctag', '{' . self::NS_CALENDARSERVER . '}calendar-proxy-read-for', - '{' . self::NS_CALENDARSERVER . '}calendar-proxy-write-for', - '{' . self::NS_CALENDARSERVER . '}notification-URL', - '{' . self::NS_CALENDARSERVER . '}notificationtype' + '{' . self::NS_CALENDARSERVER . '}calendar-proxy-write-for' ); } @@ -223,13 +226,6 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { // unknownMethod event. return false; case 'POST' : - - // Checking if this is a text/calendar content type - $contentType = $this->server->httpRequest->getHeader('Content-Type'); - if (strpos($contentType, 'text/calendar')!==0) { - return; - } - // Checking if we're talking to an outbox try { $node = $this->server->tree->getNodeForPath($uri); @@ -239,7 +235,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { if (!$node instanceof Sabre_CalDAV_Schedule_IOutbox) return; - $this->outboxRequest($node, $uri); + $this->outboxRequest($node); return false; } @@ -352,7 +348,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { if (in_array($calProp,$requestedProperties)) { $addresses = $node->getAlternateUriSet(); - $addresses[] = $this->server->getBaseUri() . $node->getPrincipalUrl() . '/'; + $addresses[] = $this->server->getBaseUri() . $node->getPrincipalUrl(); unset($requestedProperties[$calProp]); $returnedProperties[200][$calProp] = new Sabre_DAV_Property_HrefList($addresses, false); @@ -394,31 +390,8 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } - // notification-URL property - $notificationUrl = '{' . self::NS_CALENDARSERVER . '}notification-URL'; - if (($index = array_search($notificationUrl, $requestedProperties)) !== false) { - $principalId = $node->getName(); - $calendarHomePath = 'calendars/' . $principalId . '/notifications/'; - unset($requestedProperties[$index]); - $returnedProperties[200][$notificationUrl] = new Sabre_DAV_Property_Href($calendarHomePath); - } - } // instanceof IPrincipal - if ($node instanceof Sabre_CalDAV_Notifications_INode) { - - $propertyName = '{' . self::NS_CALENDARSERVER . '}notificationtype'; - if (($index = array_search($propertyName, $requestedProperties)) !== false) { - - $returnedProperties[200][$propertyName] = - $node->getNotificationType(); - - unset($requestedProperties[$index]); - - } - - } // instanceof Notifications_INode - if ($node instanceof Sabre_CalDAV_ICalendarObject) { // The calendar-data property is not supposed to be a 'real' @@ -451,11 +424,11 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { public function calendarMultiGetReport($dom) { $properties = array_keys(Sabre_DAV_XMLUtil::parseProperties($dom->firstChild)); - $hrefElems = $dom->getElementsByTagNameNS('DAV:','href'); + $hrefElems = $dom->getElementsByTagNameNS('urn:DAV','href'); $xpath = new DOMXPath($dom); $xpath->registerNameSpace('cal',Sabre_CalDAV_Plugin::NS_CALDAV); - $xpath->registerNameSpace('dav','DAV:'); + $xpath->registerNameSpace('dav','urn:DAV'); $expand = $xpath->query('/cal:calendar-multiget/dav:prop/cal:calendar-data/cal:expand'); if ($expand->length>0) { @@ -465,8 +438,8 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { if(!$start || !$end) { throw new Sabre_DAV_Exception_BadRequest('The "start" and "end" attributes are required for the CALDAV:expand element'); } - $start = VObject\DateTimeParser::parseDateTime($start); - $end = VObject\DateTimeParser::parseDateTime($end); + $start = Sabre_VObject_DateTimeParser::parseDateTime($start); + $end = Sabre_VObject_DateTimeParser::parseDateTime($end); if ($end <= $start) { throw new Sabre_DAV_Exception_BadRequest('The end-date must be larger than the start-date in the expand element.'); @@ -485,7 +458,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { list($objProps) = $this->server->getPropertiesForPath($uri,$properties); if ($expand && isset($objProps[200]['{' . self::NS_CALDAV . '}calendar-data'])) { - $vObject = VObject\Reader::read($objProps[200]['{' . self::NS_CALDAV . '}calendar-data']); + $vObject = Sabre_VObject_Reader::read($objProps[200]['{' . self::NS_CALDAV . '}calendar-data']); $vObject->expand($start, $end); $objProps[200]['{' . self::NS_CALDAV . '}calendar-data'] = $vObject->serialize(); } @@ -494,12 +467,9 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } - $prefer = $this->server->getHTTPPRefer(); - $this->server->httpResponse->sendStatus(207); $this->server->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); - $this->server->httpResponse->setHeader('Vary','Brief,Prefer'); - $this->server->httpResponse->sendBody($this->server->generateMultiStatus($propertyList, $prefer['return-minimal'])); + $this->server->httpResponse->sendBody($this->server->generateMultiStatus($propertyList)); } @@ -517,95 +487,54 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { $parser = new Sabre_CalDAV_CalendarQueryParser($dom); $parser->parse(); - $node = $this->server->tree->getNodeForPath($this->server->getRequestUri()); - $depth = $this->server->getHTTPDepth(0); - - // The default result is an empty array - $result = array(); + $requestedCalendarData = true; + $requestedProperties = $parser->requestedProperties; - // The calendarobject was requested directly. In this case we handle - // this locally. - if ($depth == 0 && $node instanceof Sabre_CalDAV_ICalendarObject) { + if (!in_array('{urn:ietf:params:xml:ns:caldav}calendar-data', $requestedProperties)) { - $requestedCalendarData = true; - $requestedProperties = $parser->requestedProperties; + // We always retrieve calendar-data, as we need it for filtering. + $requestedProperties[] = '{urn:ietf:params:xml:ns:caldav}calendar-data'; - if (!in_array('{urn:ietf:params:xml:ns:caldav}calendar-data', $requestedProperties)) { - - // We always retrieve calendar-data, as we need it for filtering. - $requestedProperties[] = '{urn:ietf:params:xml:ns:caldav}calendar-data'; - - // If calendar-data wasn't explicitly requested, we need to remove - // it after processing. - $requestedCalendarData = false; - } + // If calendar-data wasn't explicitly requested, we need to remove + // it after processing. + $requestedCalendarData = false; + } - $properties = $this->server->getPropertiesForPath( - $this->server->getRequestUri(), - $requestedProperties, - 0 - ); + // These are the list of nodes that potentially match the requirement + $candidateNodes = $this->server->getPropertiesForPath( + $this->server->getRequestUri(), + $requestedProperties, + $this->server->getHTTPDepth(0) + ); - // This array should have only 1 element, the first calendar - // object. - $properties = current($properties); + $verifiedNodes = array(); - // If there wasn't any calendar-data returned somehow, we ignore - // this. - if (isset($properties[200]['{urn:ietf:params:xml:ns:caldav}calendar-data'])) { + $validator = new Sabre_CalDAV_CalendarQueryValidator(); - $validator = new Sabre_CalDAV_CalendarQueryValidator(); - $vObject = VObject\Reader::read($properties[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']); - if ($validator->validate($vObject,$parser->filters)) { + foreach($candidateNodes as $node) { - // If the client didn't require the calendar-data property, - // we won't give it back. - if (!$requestedCalendarData) { - unset($properties[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']); - } else { - if ($parser->expand) { - $vObject->expand($parser->expand['start'], $parser->expand['end']); - $properties[200]['{' . self::NS_CALDAV . '}calendar-data'] = $vObject->serialize(); - } - } + // If the node didn't have a calendar-data property, it must not be a calendar object + if (!isset($node[200]['{urn:ietf:params:xml:ns:caldav}calendar-data'])) + continue; - $result = array($properties); + $vObject = Sabre_VObject_Reader::read($node[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']); + if ($validator->validate($vObject,$parser->filters)) { + if (!$requestedCalendarData) { + unset($node[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']); } - - } - - } - // If we're dealing with a calendar, the calendar itself is responsible - // for the calendar-query. - if ($node instanceof Sabre_CalDAV_ICalendar && $depth = 1) { - - $nodePaths = $node->calendarQuery($parser->filters); - - foreach($nodePaths as $path) { - - list($properties) = - $this->server->getPropertiesForPath($this->server->getRequestUri() . '/' . $path, $parser->requestedProperties); - if ($parser->expand) { - // We need to do some post-processing - $vObject = VObject\Reader::read($properties[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']); $vObject->expand($parser->expand['start'], $parser->expand['end']); - $properties[200]['{' . self::NS_CALDAV . '}calendar-data'] = $vObject->serialize(); + $node[200]['{' . self::NS_CALDAV . '}calendar-data'] = $vObject->serialize(); } - - $result[] = $properties; - + $verifiedNodes[] = $node; } } - $prefer = $this->server->getHTTPPRefer(); - $this->server->httpResponse->sendStatus(207); $this->server->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); - $this->server->httpResponse->setHeader('Vary','Brief,Prefer'); - $this->server->httpResponse->sendBody($this->server->generateMultiStatus($result, $prefer['return-minimal'])); + $this->server->httpResponse->sendBody($this->server->generateMultiStatus($verifiedNodes)); } @@ -632,10 +561,10 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } if ($start) { - $start = VObject\DateTimeParser::parseDateTime($start); + $start = Sabre_VObject_DateTimeParser::parseDateTime($start); } if ($end) { - $end = VObject\DateTimeParser::parseDateTime($end); + $end = Sabre_VObject_DateTimeParser::parseDateTime($end); } if (!$start && !$end) { @@ -654,33 +583,15 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { throw new Sabre_DAV_Exception_NotImplemented('The free-busy-query REPORT is only implemented on calendars'); } - // Doing a calendar-query first, to make sure we get the most - // performance. - $urls = $calendar->calendarQuery(array( - 'name' => 'VCALENDAR', - 'comp-filters' => array( - array( - 'name' => 'VEVENT', - 'comp-filters' => array(), - 'prop-filters' => array(), - 'is-not-defined' => false, - 'time-range' => array( - 'start' => $start, - 'end' => $end, - ), - ), - ), - 'prop-filters' => array(), - 'is-not-defined' => false, - 'time-range' => null, - )); - - $objects = array_map(function($url) use ($calendar) { - $obj = $calendar->getChild($url)->get(); + $objects = array_map(function($child) { + $obj = $child->get(); + if (is_resource($obj)) { + $obj = stream_get_contents($obj); + } return $obj; - }, $urls); + }, $calendar->getChildren()); - $generator = new VObject\FreeBusyGenerator(); + $generator = new Sabre_VObject_FreeBusyGenerator(); $generator->setObjects($objects); $generator->setTimeRange($start, $end); $result = $generator->getResult(); @@ -709,7 +620,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { if (!$node instanceof Sabre_CalDAV_ICalendarObject) return; - $this->validateICalendar($data, $path); + $this->validateICalendar($data); } @@ -729,52 +640,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { if (!$parentNode instanceof Sabre_CalDAV_Calendar) return; - $this->validateICalendar($data, $path); - - } - - /** - * This event is triggered before any HTTP request is handled. - * - * We use this to intercept GET calls to notification nodes, and return the - * proper response. - * - * @param string $method - * @param string $path - * @return void - */ - public function beforeMethod($method, $path) { - - if ($method!=='GET') return; - - try { - $node = $this->server->tree->getNodeForPath($path); - } catch (Sabre_DAV_Exception_NotFound $e) { - return; - } - - if (!$node instanceof Sabre_CalDAV_Notifications_INode) - return; - - if (!$this->server->checkPreconditions(true)) return false; - - $dom = new DOMDocument('1.0', 'UTF-8'); - $dom->formatOutput = true; - - $root = $dom->createElement('cs:notification'); - foreach($this->server->xmlNamespaces as $namespace => $prefix) { - $root->setAttribute('xmlns:' . $prefix, $namespace); - } - - $dom->appendChild($root); - $node->getNotificationType()->serializeBody($this->server, $root); - - $this->server->httpResponse->setHeader('Content-Type','application/xml'); - $this->server->httpResponse->setHeader('ETag',$node->getETag()); - $this->server->httpResponse->sendStatus(200); - $this->server->httpResponse->sendBody($dom->saveXML()); - - return false; + $this->validateICalendar($data); } @@ -784,10 +650,9 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { * An exception is thrown if it's not. * * @param resource|string $data - * @param string $path * @return void */ - protected function validateICalendar(&$data, $path) { + protected function validateICalendar(&$data) { // If it's a stream, we convert it to a string first. if (is_resource($data)) { @@ -799,9 +664,9 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { try { - $vobj = VObject\Reader::read($data); + $vobj = Sabre_VObject_Reader::read($data); - } catch (VObject\ParseException $e) { + } catch (Sabre_VObject_ParseException $e) { throw new Sabre_DAV_Exception_UnsupportedMediaType('This resource only supports valid iCalendar 2.0 data. Parse error: ' . $e->getMessage()); @@ -811,11 +676,6 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { throw new Sabre_DAV_Exception_UnsupportedMediaType('This collection can only support iCalendar objects.'); } - // Get the Supported Components for the target calendar - list($parentPath,$object) = Sabre_Dav_URLUtil::splitPath($path); - $calendarProperties = $this->server->getProperties($parentPath,array('{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set')); - $supportedComponents = $calendarProperties['{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set']->getValue(); - $foundType = null; $foundUID = null; foreach($vobj->getComponents() as $component) { @@ -827,9 +687,6 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { case 'VJOURNAL' : if (is_null($foundType)) { $foundType = $component->name; - if (!in_array($foundType, $supportedComponents)) { - throw new Sabre_CalDAV_Exception_InvalidComponentType('This calendar only supports ' . implode(', ', $supportedComponents) . '. We found a ' . $foundType); - } if (!isset($component->UID)) { throw new Sabre_DAV_Exception_BadRequest('Every ' . $component->name . ' component must have an UID'); } @@ -854,81 +711,12 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } /** - * This method handles POST requests to the schedule-outbox. - * - * Currently, two types of requests are support: - * * FREEBUSY requests from RFC 6638 - * * Simple iTIP messages from draft-desruisseaux-caldav-sched-04 - * - * The latter is from an expired early draft of the CalDAV scheduling - * extensions, but iCal depends on a feature from that spec, so we - * implement it. + * This method handles POST requests to the schedule-outbox * * @param Sabre_CalDAV_Schedule_IOutbox $outboxNode - * @param string $outboxUri - * @return void - */ - public function outboxRequest(Sabre_CalDAV_Schedule_IOutbox $outboxNode, $outboxUri) { - - // Parsing the request body - try { - $vObject = VObject\Reader::read($this->server->httpRequest->getBody(true)); - } catch (VObject\ParseException $e) { - throw new Sabre_DAV_Exception_BadRequest('The request body must be a valid iCalendar object. Parse error: ' . $e->getMessage()); - } - - // The incoming iCalendar object must have a METHOD property, and a - // component. The combination of both determines what type of request - // this is. - $componentType = null; - foreach($vObject->getComponents() as $component) { - if ($component->name !== 'VTIMEZONE') { - $componentType = $component->name; - break; - } - } - if (is_null($componentType)) { - throw new Sabre_DAV_Exception_BadRequest('We expected at least one VTODO, VJOURNAL, VFREEBUSY or VEVENT component'); - } - - // Validating the METHOD - $method = strtoupper((string)$vObject->METHOD); - if (!$method) { - throw new Sabre_DAV_Exception_BadRequest('A METHOD property must be specified in iTIP messages'); - } - - // So we support two types of requests: - // - // REQUEST with a VFREEBUSY component - // REQUEST, REPLY, ADD, CANCEL on VEVENT components - - $acl = $this->server->getPlugin('acl'); - - if ($componentType === 'VFREEBUSY' && $method === 'REQUEST') { - - $acl && $acl->checkPrivileges($outboxUri,'{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-query-freebusy'); - $this->handleFreeBusyRequest($outboxNode, $vObject); - - } elseif ($componentType === 'VEVENT' && in_array($method, array('REQUEST','REPLY','ADD','CANCEL'))) { - - $acl && $acl->checkPrivileges($outboxUri,'{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-post-vevent'); - $this->handleEventNotification($outboxNode, $vObject); - - } else { - - throw new Sabre_DAV_Exception_NotImplemented('SabreDAV supports only VFREEBUSY (REQUEST) and VEVENT (REQUEST, REPLY, ADD, CANCEL)'); - - } - - } - - /** - * This method handles the REQUEST, REPLY, ADD and CANCEL methods for - * VEVENT iTip messages. - * * @return void */ - protected function handleEventNotification(Sabre_CalDAV_Schedule_IOutbox $outboxNode, VObject\Component $vObject) { + public function outboxRequest(Sabre_CalDAV_Schedule_IOutbox $outboxNode) { $originator = $this->server->httpRequest->getHeader('Originator'); $recipients = $this->server->httpRequest->getHeader('Recipient'); @@ -972,10 +760,38 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { throw new Sabre_DAV_Exception_Forbidden('The addresses specified in the Originator header did not match any addresses in the owners calendar-user-address-set header'); } - $result = $this->iMIPMessage($originator, $recipients, $vObject, $principal); - $this->server->httpResponse->sendStatus(200); - $this->server->httpResponse->setHeader('Content-Type','application/xml'); - $this->server->httpResponse->sendBody($this->generateScheduleResponse($result)); + try { + $vObject = Sabre_VObject_Reader::read($this->server->httpRequest->getBody(true)); + } catch (Sabre_VObject_ParseException $e) { + throw new Sabre_DAV_Exception_BadRequest('The request body must be a valid iCalendar object. Parse error: ' . $e->getMessage()); + } + + // Checking for the object type + $componentType = null; + foreach($vObject->getComponents() as $component) { + if ($component->name !== 'VTIMEZONE') { + $componentType = $component->name; + break; + } + } + if (is_null($componentType)) { + throw new Sabre_DAV_Exception_BadRequest('We expected at least one VTODO, VJOURNAL, VFREEBUSY or VEVENT component'); + } + + // Validating the METHOD + $method = strtoupper((string)$vObject->METHOD); + if (!$method) { + throw new Sabre_DAV_Exception_BadRequest('A METHOD property must be specified in iTIP messages'); + } + + if (in_array($method, array('REQUEST','REPLY','ADD','CANCEL')) && $componentType==='VEVENT') { + $result = $this->iMIPMessage($originator, $recipients, $vObject); + $this->server->httpResponse->sendStatus(200); + $this->server->httpResponse->setHeader('Content-Type','application/xml'); + $this->server->httpResponse->sendBody($this->generateScheduleResponse($result)); + } else { + throw new Sabre_DAV_Exception_NotImplemented('This iTIP method is currently not implemented'); + } } @@ -997,15 +813,15 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { * * @param string $originator * @param array $recipients - * @param Sabre\VObject\Component $vObject + * @param Sabre_VObject_Component $vObject * @return array */ - protected function iMIPMessage($originator, array $recipients, VObject\Component $vObject, $principal) { + protected function iMIPMessage($originator, array $recipients, Sabre_VObject_Component $vObject) { if (!$this->imipHandler) { $resultStatus = '5.2;This server does not support this operation'; } else { - $this->imipHandler->sendMessage($originator, $recipients, $vObject, $principal); + $this->imipHandler->sendMessage($originator, $recipients, $vObject); $resultStatus = '2.0;Success'; } @@ -1016,6 +832,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { return $result; + } /** @@ -1060,204 +877,6 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } - /** - * This method is responsible for parsing a free-busy query request and - * returning it's result. - * - * @param Sabre_CalDAV_Schedule_IOutbox $outbox - * @param string $request - * @return string - */ - protected function handleFreeBusyRequest(Sabre_CalDAV_Schedule_IOutbox $outbox, VObject\Component $vObject) { - - $vFreeBusy = $vObject->VFREEBUSY; - $organizer = $vFreeBusy->organizer; - - $organizer = (string)$organizer; - - // Validating if the organizer matches the owner of the inbox. - $owner = $outbox->getOwner(); - - $caldavNS = '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}'; - - $uas = $caldavNS . 'calendar-user-address-set'; - $props = $this->server->getProperties($owner,array($uas)); - - if (empty($props[$uas]) || !in_array($organizer, $props[$uas]->getHrefs())) { - throw new Sabre_DAV_Exception_Forbidden('The organizer in the request did not match any of the addresses for the owner of this inbox'); - } - - if (!isset($vFreeBusy->ATTENDEE)) { - throw new Sabre_DAV_Exception_BadRequest('You must at least specify 1 attendee'); - } - - $attendees = array(); - foreach($vFreeBusy->ATTENDEE as $attendee) { - $attendees[]= (string)$attendee; - } - - - if (!isset($vFreeBusy->DTSTART) || !isset($vFreeBusy->DTEND)) { - throw new Sabre_DAV_Exception_BadRequest('DTSTART and DTEND must both be specified'); - } - - $startRange = $vFreeBusy->DTSTART->getDateTime(); - $endRange = $vFreeBusy->DTEND->getDateTime(); - - $results = array(); - foreach($attendees as $attendee) { - $results[] = $this->getFreeBusyForEmail($attendee, $startRange, $endRange, $vObject); - } - - $dom = new DOMDocument('1.0','utf-8'); - $dom->formatOutput = true; - $scheduleResponse = $dom->createElement('cal:schedule-response'); - foreach($this->server->xmlNamespaces as $namespace=>$prefix) { - - $scheduleResponse->setAttribute('xmlns:' . $prefix,$namespace); - - } - $dom->appendChild($scheduleResponse); - - foreach($results as $result) { - $response = $dom->createElement('cal:response'); - - $recipient = $dom->createElement('cal:recipient'); - $recipientHref = $dom->createElement('d:href'); - - $recipientHref->appendChild($dom->createTextNode($result['href'])); - $recipient->appendChild($recipientHref); - $response->appendChild($recipient); - - $reqStatus = $dom->createElement('cal:request-status'); - $reqStatus->appendChild($dom->createTextNode($result['request-status'])); - $response->appendChild($reqStatus); - - if (isset($result['calendar-data'])) { - - $calendardata = $dom->createElement('cal:calendar-data'); - $calendardata->appendChild($dom->createTextNode(str_replace("\r\n","\n",$result['calendar-data']->serialize()))); - $response->appendChild($calendardata); - - } - $scheduleResponse->appendChild($response); - } - - $this->server->httpResponse->sendStatus(200); - $this->server->httpResponse->setHeader('Content-Type','application/xml'); - $this->server->httpResponse->sendBody($dom->saveXML()); - - } - - /** - * Returns free-busy information for a specific address. The returned - * data is an array containing the following properties: - * - * calendar-data : A VFREEBUSY VObject - * request-status : an iTip status code. - * href: The principal's email address, as requested - * - * The following request status codes may be returned: - * * 2.0;description - * * 3.7;description - * - * @param string $email address - * @param DateTime $start - * @param DateTime $end - * @param Sabre_VObject_Component $request - * @return Sabre_VObject_Component - */ - protected function getFreeBusyForEmail($email, DateTime $start, DateTime $end, VObject\Component $request) { - - $caldavNS = '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}'; - - $aclPlugin = $this->server->getPlugin('acl'); - if (substr($email,0,7)==='mailto:') $email = substr($email,7); - - $result = $aclPlugin->principalSearch( - array('{http://sabredav.org/ns}email-address' => $email), - array( - '{DAV:}principal-URL', $caldavNS . 'calendar-home-set', - '{http://sabredav.org/ns}email-address', - ) - ); - - if (!count($result)) { - return array( - 'request-status' => '3.7;Could not find principal', - 'href' => 'mailto:' . $email, - ); - } - - if (!isset($result[0][200][$caldavNS . 'calendar-home-set'])) { - return array( - 'request-status' => '3.7;No calendar-home-set property found', - 'href' => 'mailto:' . $email, - ); - } - $homeSet = $result[0][200][$caldavNS . 'calendar-home-set']->getHref(); - - // Grabbing the calendar list - $objects = array(); - foreach($this->server->tree->getNodeForPath($homeSet)->getChildren() as $node) { - if (!$node instanceof Sabre_CalDAV_ICalendar) { - continue; - } - $aclPlugin->checkPrivileges($homeSet . $node->getName() ,$caldavNS . 'read-free-busy'); - - // Getting the list of object uris within the time-range - $urls = $node->calendarQuery(array( - 'name' => 'VCALENDAR', - 'comp-filters' => array( - array( - 'name' => 'VEVENT', - 'comp-filters' => array(), - 'prop-filters' => array(), - 'is-not-defined' => false, - 'time-range' => array( - 'start' => $start, - 'end' => $end, - ), - ), - ), - 'prop-filters' => array(), - 'is-not-defined' => false, - 'time-range' => null, - )); - - $calObjects = array_map(function($url) use ($node) { - $obj = $node->getChild($url)->get(); - return $obj; - }, $urls); - - $objects = array_merge($objects,$calObjects); - - } - - $vcalendar = VObject\Component::create('VCALENDAR'); - $vcalendar->VERSION = '2.0'; - $vcalendar->METHOD = 'REPLY'; - $vcalendar->CALSCALE = 'GREGORIAN'; - $vcalendar->PRODID = '-//SabreDAV//SabreDAV ' . Sabre_DAV_Version::VERSION . '//EN'; - - $generator = new VObject\FreeBusyGenerator(); - $generator->setObjects($objects); - $generator->setTimeRange($start, $end); - $generator->setBaseObject($vcalendar); - - $result = $generator->getResult(); - - $vcalendar->VFREEBUSY->ATTENDEE = 'mailto:' . $email; - $vcalendar->VFREEBUSY->UID = (string)$request->VFREEBUSY->UID; - $vcalendar->VFREEBUSY->ORGANIZER = clone $request->VFREEBUSY->ORGANIZER; - - return array( - 'calendar-data' => $result, - 'request-status' => '2.0;Success', - 'href' => 'mailto:' . $email, - ); - } - /** * This method is used to generate HTML output for the * Sabre_DAV_Browser_Plugin. This allows us to generate an interface users diff --git a/3rdparty/Sabre/CalDAV/Property/AllowedSharingModes.php b/3rdparty/Sabre/CalDAV/Property/AllowedSharingModes.php deleted file mode 100755 index efe751732c5..00000000000 --- a/3rdparty/Sabre/CalDAV/Property/AllowedSharingModes.php +++ /dev/null @@ -1,72 +0,0 @@ -canBeShared = $canBeShared; - $this->canBePublished = $canBePublished; - - } - - /** - * Serializes the property in a DOMDocument - * - * @param Sabre_DAV_Server $server - * @param DOMElement $node - * @return void - */ - public function serialize(Sabre_DAV_Server $server,DOMElement $node) { - - $doc = $node->ownerDocument; - if ($this->canBeShared) { - $xcomp = $doc->createElement('cs:can-be-shared'); - $node->appendChild($xcomp); - } - if ($this->canBePublished) { - $xcomp = $doc->createElement('cs:can-be-published'); - $node->appendChild($xcomp); - } - - } - -} diff --git a/3rdparty/Sabre/CalDAV/Property/Invite.php b/3rdparty/Sabre/CalDAV/Property/Invite.php deleted file mode 100755 index 4ed94877df2..00000000000 --- a/3rdparty/Sabre/CalDAV/Property/Invite.php +++ /dev/null @@ -1,173 +0,0 @@ -users = $users; - - } - - /** - * Returns the list of users, as it was passed to the constructor. - * - * @return array - */ - public function getValue() { - - return $this->users; - - } - - /** - * Serializes the property in a DOMDocument - * - * @param Sabre_DAV_Server $server - * @param DOMElement $node - * @return void - */ - public function serialize(Sabre_DAV_Server $server,DOMElement $node) { - - $doc = $node->ownerDocument; - foreach($this->users as $user) { - - $xuser = $doc->createElement('cs:user'); - - $href = $doc->createElement('d:href'); - $href->appendChild($doc->createTextNode($user['href'])); - $xuser->appendChild($href); - - if (isset($user['commonName']) && $user['commonName']) { - $commonName = $doc->createElement('cs:common-name'); - $commonName->appendChild($doc->createTextNode($user['commonName'])); - $xuser->appendChild($commonName); - } - - switch($user['status']) { - - case SharingPlugin::STATUS_ACCEPTED : - $status = $doc->createElement('cs:invite-accepted'); - $xuser->appendChild($status); - break; - case SharingPlugin::STATUS_DECLINED : - $status = $doc->createElement('cs:invite-declined'); - $xuser->appendChild($status); - break; - case SharingPlugin::STATUS_NORESPONSE : - $status = $doc->createElement('cs:invite-noresponse'); - $xuser->appendChild($status); - break; - case SharingPlugin::STATUS_INVALID : - $status = $doc->createElement('cs:invite-invalid'); - $xuser->appendChild($status); - break; - - } - - $xaccess = $doc->createElement('cs:access'); - - if ($user['readOnly']) { - $xaccess->appendChild( - $doc->createElement('cs:read') - ); - } else { - $xaccess->appendChild( - $doc->createElement('cs:read-write') - ); - } - $xuser->appendChild($xaccess); - - if (isset($user['summary']) && $user['summary']) { - $summary = $doc->createElement('cs:summary'); - $summary->appendChild($doc->createTextNode($user['summary'])); - $xuser->appendChild($summary); - } - - $node->appendChild($xuser); - - } - - } - - /** - * Unserializes the property. - * - * This static method should return a an instance of this object. - * - * @param DOMElement $prop - * @return Sabre_DAV_IProperty - */ - static function unserialize(DOMElement $prop) { - - $xpath = new \DOMXPath($prop->ownerDocument); - $xpath->registerNamespace('cs', Sabre_CalDAV_Plugin::NS_CALENDARSERVER); - $xpath->registerNamespace('d', 'DAV:'); - - $users = array(); - - foreach($xpath->query('cs:user', $prop) as $user) { - - $status = null; - if ($xpath->evaluate('boolean(cs:invite-accepted)', $user)) { - $status = SharingPlugin::STATUS_ACCEPTED; - } elseif ($xpath->evaluate('boolean(cs:invite-declined)', $user)) { - $status = SharingPlugin::STATUS_DECLINED; - } elseif ($xpath->evaluate('boolean(cs:invite-noresponse)', $user)) { - $status = SharingPlugin::STATUS_NORESPONSE; - } elseif ($xpath->evaluate('boolean(cs:invite-invalid)', $user)) { - $status = SharingPlugin::STATUS_INVALID; - } else { - throw new Sabre_DAV_Exception('Every cs:user property must have one of cs:invite-accepted, cs:invite-declined, cs:invite-noresponse or cs:invite-invalid'); - } - $users[] = array( - 'href' => $xpath->evaluate('string(d:href)', $user), - 'commonName' => $xpath->evaluate('string(cs:common-name)', $user), - 'readOnly' => $xpath->evaluate('boolean(cs:access/cs:read)', $user), - 'summary' => $xpath->evaluate('string(cs:summary)', $user), - 'status' => $status, - ); - - } - - return new self($users); - - } - -} diff --git a/3rdparty/Sabre/CalDAV/Property/ScheduleCalendarTransp.php b/3rdparty/Sabre/CalDAV/Property/ScheduleCalendarTransp.php deleted file mode 100755 index 76c1dbaec21..00000000000 --- a/3rdparty/Sabre/CalDAV/Property/ScheduleCalendarTransp.php +++ /dev/null @@ -1,99 +0,0 @@ -value = $value; - - } - - /** - * Returns the current value - * - * @return string - */ - public function getValue() { - - return $this->value; - - } - - /** - * Serializes the property in a DOMDocument - * - * @param Sabre_DAV_Server $server - * @param DOMElement $node - * @return void - */ - public function serialize(Sabre_DAV_Server $server,DOMElement $node) { - - $doc = $node->ownerDocument; - switch($this->value) { - case self::TRANSPARENT : - $xval = $doc->createElement('cal:transparent'); - break; - case self::OPAQUE : - $xval = $doc->createElement('cal:opaque'); - break; - } - - $node->appendChild($xval); - - } - - /** - * Unserializes the DOMElement back into a Property class. - * - * @param DOMElement $node - * @return Sabre_CalDAV_Property_ScheduleCalendarTransp - */ - static function unserialize(DOMElement $node) { - - $value = null; - foreach($node->childNodes as $childNode) { - switch(Sabre_DAV_XMLUtil::toClarkNotation($childNode)) { - case '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}opaque' : - $value = self::OPAQUE; - break; - case '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}transparent' : - $value = self::TRANSPARENT; - break; - } - } - if (is_null($value)) - return null; - - return new self($value); - - } -} diff --git a/3rdparty/Sabre/CalDAV/Schedule/IMip.php b/3rdparty/Sabre/CalDAV/Schedule/IMip.php index 92c3c097c15..37e75fcc4a7 100755 --- a/3rdparty/Sabre/CalDAV/Schedule/IMip.php +++ b/3rdparty/Sabre/CalDAV/Schedule/IMip.php @@ -1,7 +1,5 @@ diff --git a/3rdparty/Sabre/CalDAV/Schedule/Outbox.php b/3rdparty/Sabre/CalDAV/Schedule/Outbox.php index 462aa527e23..014c37230d1 100755 --- a/3rdparty/Sabre/CalDAV/Schedule/Outbox.php +++ b/3rdparty/Sabre/CalDAV/Schedule/Outbox.php @@ -13,7 +13,7 @@ * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ -class Sabre_CalDAV_Schedule_Outbox extends Sabre_DAV_Collection implements Sabre_CalDAV_Schedule_IOutbox { +class Sabre_CalDAV_Schedule_Outbox extends Sabre_DAV_Directory implements Sabre_CalDAV_Schedule_IOutbox { /** * The principal Uri @@ -103,11 +103,6 @@ class Sabre_CalDAV_Schedule_Outbox extends Sabre_DAV_Collection implements Sabre 'principal' => $this->getOwner(), 'protected' => true, ), - array( - 'privilege' => '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-post-vevent', - 'principal' => $this->getOwner(), - 'protected' => true, - ), array( 'privilege' => '{DAV:}read', 'principal' => $this->getOwner(), @@ -149,9 +144,6 @@ class Sabre_CalDAV_Schedule_Outbox extends Sabre_DAV_Collection implements Sabre $default['aggregates'][] = array( 'privilege' => '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-query-freebusy', ); - $default['aggregates'][] = array( - 'privilege' => '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-post-vevent', - ); return $default; diff --git a/3rdparty/Sabre/CalDAV/Server.php b/3rdparty/Sabre/CalDAV/Server.php new file mode 100755 index 00000000000..325e3d80a7f --- /dev/null +++ b/3rdparty/Sabre/CalDAV/Server.php @@ -0,0 +1,68 @@ +authRealm); + $this->addPlugin($authPlugin); + + $aclPlugin = new Sabre_DAVACL_Plugin(); + $this->addPlugin($aclPlugin); + + $caldavPlugin = new Sabre_CalDAV_Plugin(); + $this->addPlugin($caldavPlugin); + + } + +} diff --git a/3rdparty/Sabre/CalDAV/ShareableCalendar.php b/3rdparty/Sabre/CalDAV/ShareableCalendar.php deleted file mode 100755 index 0e44885c621..00000000000 --- a/3rdparty/Sabre/CalDAV/ShareableCalendar.php +++ /dev/null @@ -1,72 +0,0 @@ -caldavBackend->updateShares($this->calendarInfo['id'], $add, $remove); - - } - - /** - * Returns the list of people whom this calendar is shared with. - * - * Every element in this array should have the following properties: - * * href - Often a mailto: address - * * commonName - Optional, for example a first + last name - * * status - See the Sabre_CalDAV_SharingPlugin::STATUS_ constants. - * * readOnly - boolean - * * summary - Optional, a description for the share - * - * @return array - */ - public function getShares() { - - return $this->caldavBackend->getShares($this->calendarInfo['id']); - - } - - /** - * Marks this calendar as published. - * - * Publishing a calendar should automatically create a read-only, public, - * subscribable calendar. - * - * @param bool $value - * @return void - */ - public function setPublishStatus($value) { - - $this->caldavBackend->setPublishStatus($this->calendarInfo['id'], $value); - - } - -} diff --git a/3rdparty/Sabre/CalDAV/SharedCalendar.php b/3rdparty/Sabre/CalDAV/SharedCalendar.php deleted file mode 100755 index 9000697d3ec..00000000000 --- a/3rdparty/Sabre/CalDAV/SharedCalendar.php +++ /dev/null @@ -1,98 +0,0 @@ -calendarInfo['{http://calendarserver.org/ns/}shared-url']; - - } - - /** - * Returns the owner principal - * - * This must be a url to a principal, or null if there's no owner - * - * @return string|null - */ - public function getOwner() { - - return $this->calendarInfo['{http://sabredav.org/ns}owner-principal']; - - } - - /** - * Returns a list of ACE's for this node. - * - * Each ACE has the following properties: - * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are - * currently the only supported privileges - * * 'principal', a url to the principal who owns the node - * * 'protected' (optional), indicating that this ACE is not allowed to - * be updated. - * - * @return array - */ - public function getACL() { - - // The top-level ACL only contains access information for the true - // owner of the calendar, so we need to add the information for the - // sharee. - $acl = parent::getACL(); - $acl[] = array( - 'privilege' => '{DAV:}read', - 'principal' => $this->calendarInfo['principaluri'], - 'protected' => true, - ); - if (!$this->calendarInfo['{http://sabredav.org/ns}read-only']) { - $acl[] = array( - 'privilege' => '{DAV:}write', - 'principal' => $this->calendarInfo['principaluri'], - 'protected' => true, - ); - } - return $acl; - - } - - -} diff --git a/3rdparty/Sabre/CalDAV/SharingPlugin.php b/3rdparty/Sabre/CalDAV/SharingPlugin.php deleted file mode 100755 index 31df8057b24..00000000000 --- a/3rdparty/Sabre/CalDAV/SharingPlugin.php +++ /dev/null @@ -1,475 +0,0 @@ -server = $server; - //$server->resourceTypeMapping['Sabre_CalDAV_IShareableCalendar'] = '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-owner'; - $server->resourceTypeMapping['Sabre_CalDAV_ISharedCalendar'] = '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared'; - - array_push( - $this->server->protectedProperties, - '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}invite', - '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}allowed-sharing-modes', - '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-url' - ); - - $this->server->subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties')); - $this->server->subscribeEvent('afterGetProperties', array($this, 'afterGetProperties')); - $this->server->subscribeEvent('updateProperties', array($this, 'updateProperties')); - $this->server->subscribeEvent('unknownMethod', array($this,'unknownMethod')); - - } - - /** - * This event is triggered when properties are requested for a certain - * node. - * - * This allows us to inject any properties early. - * - * @param string $path - * @param Sabre_DAV_INode $node - * @param array $requestedProperties - * @param array $returnedProperties - * @return void - */ - public function beforeGetProperties($path, Sabre_DAV_INode $node, &$requestedProperties, &$returnedProperties) { - - if ($node instanceof Sabre_CalDAV_IShareableCalendar) { - if (($index = array_search('{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}invite', $requestedProperties))!==false) { - - unset($requestedProperties[$index]); - $returnedProperties[200]['{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}invite'] = - new Sabre_CalDAV_Property_Invite( - $node->getShares() - ); - - } - - } - if ($node instanceof Sabre_CalDAV_ISharedCalendar) { - if (($index = array_search('{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-url', $requestedProperties))!==false) { - - unset($requestedProperties[$index]); - $returnedProperties[200]['{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-url'] = - new Sabre_DAV_Property_Href( - $node->getSharedUrl() - ); - - } - - } - - } - - /** - * This method is triggered *after* all properties have been retrieved. - * This allows us to inject the correct resourcetype for calendars that - * have been shared. - * - * @param string $path - * @param array $properties - * @param Sabre_DAV_INode $node - * @return void - */ - public function afterGetProperties($path, &$properties, Sabre_DAV_INode $node) { - - if ($node instanceof Sabre_CalDAV_IShareableCalendar) { - if (isset($properties[200]['{DAV:}resourcetype'])) { - if (count($node->getShares())>0) { - $properties[200]['{DAV:}resourcetype']->add( - '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-owner' - ); - } - } - $propName = '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}allowed-sharing-modes'; - if (array_key_exists($propName, $properties[404])) { - unset($properties[404][$propName]); - $properties[200][$propName] = new Sabre_CalDAV_Property_AllowedSharingModes(true,false); - } - - } - - } - - /** - * This method is trigged when a user attempts to update a node's - * properties. - * - * A previous draft of the sharing spec stated that it was possible to use - * PROPPATCH to remove 'shared-owner' from the resourcetype, thus unsharing - * the calendar. - * - * Even though this is no longer in the current spec, we keep this around - * because OS X 10.7 may still make use of this feature. - * - * @param array $mutations - * @param array $result - * @param Sabre_DAV_INode $node - * @return void - */ - public function updateProperties(array &$mutations, array &$result, Sabre_DAV_INode $node) { - - if (!$node instanceof Sabre_CalDAV_IShareableCalendar) - return; - - if (!isset($mutations['{DAV:}resourcetype'])) { - return; - } - - // Only doing something if shared-owner is indeed not in the list. - if($mutations['{DAV:}resourcetype']->is('{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}shared-owner')) return; - - $shares = $node->getShares(); - $remove = array(); - foreach($shares as $share) { - $remove[] = $share['href']; - } - $node->updateShares(array(), $remove); - - // We're marking this update as 200 OK - $result[200]['{DAV:}resourcetype'] = null; - - // Removing it from the mutations list - unset($mutations['{DAV:}resourcetype']); - - } - - /** - * This event is triggered when the server didn't know how to handle a - * certain request. - * - * We intercept this to handle POST requests on calendars. - * - * @param string $method - * @param string $uri - * @return null|bool - */ - public function unknownMethod($method, $uri) { - - if ($method!=='POST') { - return; - } - - // Only handling xml - $contentType = $this->server->httpRequest->getHeader('Content-Type'); - if (strpos($contentType,'application/xml')===false && strpos($contentType,'text/xml')===false) - return; - - // Making sure the node exists - try { - $node = $this->server->tree->getNodeForPath($uri); - } catch (Sabre_DAV_Exception_NotFound $e) { - return; - } - - - $dom = Sabre_DAV_XMLUtil::loadDOMDocument($this->server->httpRequest->getBody(true)); - - $documentType = Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild); - - switch($documentType) { - - // Dealing with the 'share' document, which modified invitees on a - // calendar. - case '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}share' : - - // We can only deal with IShareableCalendar objects - if (!$node instanceof Sabre_CalDAV_IShareableCalendar) { - return; - } - - // Getting ACL info - $acl = $this->server->getPlugin('acl'); - - // If there's no ACL support, we allow everything - if ($acl) { - $acl->checkPrivileges($uri, '{DAV:}write'); - } - - $mutations = $this->parseShareRequest($dom); - - $node->updateShares($mutations[0], $mutations[1]); - - $this->server->httpResponse->sendStatus(200); - // Adding this because sending a response body may cause issues, - // and I wanted some type of indicator the response was handled. - $this->server->httpResponse->setHeader('X-Sabre-Status', 'everything-went-well'); - - // Breaking the event chain - return false; - - // The invite-reply document is sent when the user replies to an - // invitation of a calendar share. - case '{'. Sabre_CalDAV_Plugin::NS_CALENDARSERVER.'}invite-reply' : - - // This only works on the calendar-home-root node. - if (!$node instanceof Sabre_CalDAV_UserCalendars) { - return; - } - - // Getting ACL info - $acl = $this->server->getPlugin('acl'); - - // If there's no ACL support, we allow everything - if ($acl) { - $acl->checkPrivileges($uri, '{DAV:}write'); - } - - $message = $this->parseInviteReplyRequest($dom); - - $url = $node->shareReply( - $message['href'], - $message['status'], - $message['calendarUri'], - $message['inReplyTo'], - $message['summary'] - ); - - $this->server->httpResponse->sendStatus(200); - // Adding this because sending a response body may cause issues, - // and I wanted some type of indicator the response was handled. - $this->server->httpResponse->setHeader('X-Sabre-Status', 'everything-went-well'); - - if ($url) { - $dom = new DOMDocument('1.0', 'UTF-8'); - $dom->formatOutput = true; - - $root = $dom->createElement('cs:shared-as'); - foreach($this->server->xmlNamespaces as $namespace => $prefix) { - $root->setAttribute('xmlns:' . $prefix, $namespace); - } - - $dom->appendChild($root); - $href = new Sabre_DAV_Property_Href($url); - - $href->serialize($this->server, $root); - $this->server->httpResponse->setHeader('Content-Type','application/xml'); - $this->server->httpResponse->sendBody($dom->saveXML()); - - } - - // Breaking the event chain - return false; - - case '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}publish-calendar' : - - // We can only deal with IShareableCalendar objects - if (!$node instanceof Sabre_CalDAV_IShareableCalendar) { - return; - } - - // Getting ACL info - $acl = $this->server->getPlugin('acl'); - - // If there's no ACL support, we allow everything - if ($acl) { - $acl->checkPrivileges($uri, '{DAV:}write'); - } - - $node->setPublishStatus(true); - - // iCloud sends back the 202, so we will too. - $this->server->httpResponse->sendStatus(202); - - // Adding this because sending a response body may cause issues, - // and I wanted some type of indicator the response was handled. - $this->server->httpResponse->setHeader('X-Sabre-Status', 'everything-went-well'); - - // Breaking the event chain - return false; - - case '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}unpublish-calendar' : - - // We can only deal with IShareableCalendar objects - if (!$node instanceof Sabre_CalDAV_IShareableCalendar) { - return; - } - - // Getting ACL info - $acl = $this->server->getPlugin('acl'); - - // If there's no ACL support, we allow everything - if ($acl) { - $acl->checkPrivileges($uri, '{DAV:}write'); - } - - $node->setPublishStatus(false); - - $this->server->httpResponse->sendStatus(200); - - // Adding this because sending a response body may cause issues, - // and I wanted some type of indicator the response was handled. - $this->server->httpResponse->setHeader('X-Sabre-Status', 'everything-went-well'); - - // Breaking the event chain - return false; - - } - - - } - - /** - * Parses the 'share' POST request. - * - * This method returns an array, containing two arrays. - * The first array is a list of new sharees. Every element is a struct - * containing a: - * * href element. (usually a mailto: address) - * * commonName element (often a first and lastname, but can also be - * false) - * * readOnly (true or false) - * * summary (A description of the share, can also be false) - * - * The second array is a list of sharees that are to be removed. This is - * just a simple array with 'hrefs'. - * - * @param DOMDocument $dom - * @return array - */ - protected function parseShareRequest(DOMDocument $dom) { - - $xpath = new \DOMXPath($dom); - $xpath->registerNamespace('cs', Sabre_CalDAV_Plugin::NS_CALENDARSERVER); - $xpath->registerNamespace('d', 'DAV:'); - - - $set = array(); - $elems = $xpath->query('cs:set'); - - for($i=0; $i < $elems->length; $i++) { - - $xset = $elems->item($i); - $set[] = array( - 'href' => $xpath->evaluate('string(d:href)', $xset), - 'commonName' => $xpath->evaluate('string(cs:common-name)', $xset), - 'summary' => $xpath->evaluate('string(cs:summary)', $xset), - 'readOnly' => $xpath->evaluate('boolean(cs:read)', $xset)!==false - ); - - } - - $remove = array(); - $elems = $xpath->query('cs:remove'); - - for($i=0; $i < $elems->length; $i++) { - - $xremove = $elems->item($i); - $remove[] = $xpath->evaluate('string(d:href)', $xremove); - - } - - return array($set, $remove); - - } - - /** - * Parses the 'invite-reply' POST request. - * - * This method returns an array, containing the following properties: - * * href - The sharee who is replying - * * status - One of the self::STATUS_* constants - * * calendarUri - The url of the shared calendar - * * inReplyTo - The unique id of the share invitation. - * * summary - Optional description of the reply. - * - * @param DOMDocument $dom - * @return array - */ - protected function parseInviteReplyRequest(DOMDocument $dom) { - - $xpath = new \DOMXPath($dom); - $xpath->registerNamespace('cs', Sabre_CalDAV_Plugin::NS_CALENDARSERVER); - $xpath->registerNamespace('d', 'DAV:'); - - $hostHref = $xpath->evaluate('string(cs:hosturl/d:href)'); - if (!$hostHref) { - throw new Sabre_DAV_Exception_BadRequest('The {' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}hosturl/{DAV:}href element is required'); - } - - return array( - 'href' => $xpath->evaluate('string(d:href)'), - 'calendarUri' => $this->server->calculateUri($hostHref), - 'inReplyTo' => $xpath->evaluate('string(cs:in-reply-to)'), - 'summary' => $xpath->evaluate('string(cs:summary)'), - 'status' => $xpath->evaluate('boolean(cs:invite-accepted)')?self::STATUS_ACCEPTED:self::STATUS_DECLINED - ); - - } - -} diff --git a/3rdparty/Sabre/CalDAV/UserCalendars.php b/3rdparty/Sabre/CalDAV/UserCalendars.php index 3194e6677ab..b8d3f0573fa 100755 --- a/3rdparty/Sabre/CalDAV/UserCalendars.php +++ b/3rdparty/Sabre/CalDAV/UserCalendars.php @@ -6,7 +6,7 @@ * @package Sabre * @subpackage CalDAV * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. - * @author Evert Pot (http://www.rooftopsolutions.nl/) + * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre_DAVACL_IACL { @@ -21,7 +21,7 @@ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre /** * CalDAV backend * - * @var Sabre_CalDAV_Backend_BackendInterface + * @var Sabre_CalDAV_Backend_Abstract */ protected $caldavBackend; @@ -36,10 +36,10 @@ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre * Constructor * * @param Sabre_DAVACL_IPrincipalBackend $principalBackend - * @param Sabre_CalDAV_Backend_BackendInterface $caldavBackend + * @param Sabre_CalDAV_Backend_Abstract $caldavBackend * @param mixed $userUri */ - public function __construct(Sabre_DAVACL_IPrincipalBackend $principalBackend, Sabre_CalDAV_Backend_BackendInterface $caldavBackend, $userUri) { + public function __construct(Sabre_DAVACL_IPrincipalBackend $principalBackend, Sabre_CalDAV_Backend_Abstract $caldavBackend, $userUri) { $this->principalBackend = $principalBackend; $this->caldavBackend = $caldavBackend; @@ -168,22 +168,9 @@ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre $calendars = $this->caldavBackend->getCalendarsForUser($this->principalInfo['uri']); $objs = array(); foreach($calendars as $calendar) { - if ($this->caldavBackend instanceof Sabre_CalDAV_Backend_SharingSupport) { - if (isset($calendar['{http://calendarserver.org/ns/}shared-url'])) { - $objs[] = new Sabre_CalDAV_SharedCalendar($this->principalBackend, $this->caldavBackend, $calendar); - } else { - $objs[] = new Sabre_CalDAV_ShareableCalendar($this->principalBackend, $this->caldavBackend, $calendar); - } - } else { - $objs[] = new Sabre_CalDAV_Calendar($this->principalBackend, $this->caldavBackend, $calendar); - } + $objs[] = new Sabre_CalDAV_Calendar($this->principalBackend, $this->caldavBackend, $calendar); } $objs[] = new Sabre_CalDAV_Schedule_Outbox($this->principalInfo['uri']); - - // We're adding a notifications node, if it's supported by the backend. - if ($this->caldavBackend instanceof Sabre_CalDAV_Backend_NotificationSupport) { - $objs[] = new Sabre_CalDAV_Notifications_Collection($this->caldavBackend, $this->principalInfo['uri']); - } return $objs; } @@ -198,22 +185,8 @@ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre */ public function createExtendedCollection($name, array $resourceType, array $properties) { - $isCalendar = false; - foreach($resourceType as $rt) { - switch ($rt) { - case '{DAV:}collection' : - case '{http://calendarserver.org/ns/}shared-owner' : - // ignore - break; - case '{urn:ietf:params:xml:ns:caldav}calendar' : - $isCalendar = true; - break; - default : - throw new Sabre_DAV_Exception_InvalidResourceType('Unknown resourceType: ' . $rt); - } - } - if (!$isCalendar) { - throw new Sabre_DAV_Exception_InvalidResourceType('You can only create calendars in this collection'); + if (!in_array('{urn:ietf:params:xml:ns:caldav}calendar',$resourceType) || count($resourceType)!==2) { + throw new Sabre_DAV_Exception_InvalidResourceType('Unknown resourceType for this collection'); } $this->caldavBackend->createCalendar($this->principalInfo['uri'], $name, $properties); @@ -322,27 +295,4 @@ class Sabre_CalDAV_UserCalendars implements Sabre_DAV_IExtendedCollection, Sabre } - /** - * This method is called when a user replied to a request to share. - * - * This method should return the url of the newly created calendar if the - * share was accepted. - * - * @param string href The sharee who is replying (often a mailto: address) - * @param int status One of the SharingPlugin::STATUS_* constants - * @param string $calendarUri The url to the calendar thats being shared - * @param string $inReplyTo The unique id this message is a response to - * @param string $summary A description of the reply - * @return null|string - */ - public function shareReply($href, $status, $calendarUri, $inReplyTo, $summary = null) { - - if (!$this->caldavBackend instanceof Sabre_CalDAV_Backend_SharingSupport) { - throw new Sabre_DAV_Exception_NotImplemented('Sharing support is not implemented by this backend.'); - } - - return $this->caldavBackend->shareReply($href, $status, $calendarUri, $inReplyTo, $summary); - - } - } diff --git a/3rdparty/Sabre/CalDAV/Version.php b/3rdparty/Sabre/CalDAV/Version.php index 0ad14fa0869..ace9901c089 100755 --- a/3rdparty/Sabre/CalDAV/Version.php +++ b/3rdparty/Sabre/CalDAV/Version.php @@ -14,7 +14,7 @@ class Sabre_CalDAV_Version { /** * Full version number */ - const VERSION = '1.7.0'; + const VERSION = '1.6.4'; /** * Stability : alpha, beta, stable diff --git a/3rdparty/Sabre/CalDAV/includes.php b/3rdparty/Sabre/CalDAV/includes.php index 8b38e398f65..1ecb870a0e1 100755 --- a/3rdparty/Sabre/CalDAV/includes.php +++ b/3rdparty/Sabre/CalDAV/includes.php @@ -16,47 +16,28 @@ */ // Begin includes -include __DIR__ . '/Backend/BackendInterface.php'; -include __DIR__ . '/Backend/NotificationSupport.php'; -include __DIR__ . '/Backend/SharingSupport.php'; +include __DIR__ . '/Backend/Abstract.php'; +include __DIR__ . '/Backend/PDO.php'; include __DIR__ . '/CalendarQueryParser.php'; include __DIR__ . '/CalendarQueryValidator.php'; include __DIR__ . '/CalendarRootNode.php'; -include __DIR__ . '/Exception/InvalidComponentType.php'; include __DIR__ . '/ICalendar.php'; include __DIR__ . '/ICalendarObject.php'; include __DIR__ . '/ICSExportPlugin.php'; -include __DIR__ . '/IShareableCalendar.php'; -include __DIR__ . '/ISharedCalendar.php'; -include __DIR__ . '/Notifications/ICollection.php'; -include __DIR__ . '/Notifications/INode.php'; -include __DIR__ . '/Notifications/INotificationType.php'; -include __DIR__ . '/Notifications/Node.php'; -include __DIR__ . '/Notifications/Notification/Invite.php'; -include __DIR__ . '/Notifications/Notification/InviteReply.php'; -include __DIR__ . '/Notifications/Notification/SystemStatus.php'; include __DIR__ . '/Plugin.php'; include __DIR__ . '/Principal/Collection.php'; include __DIR__ . '/Principal/ProxyRead.php'; include __DIR__ . '/Principal/ProxyWrite.php'; include __DIR__ . '/Principal/User.php'; -include __DIR__ . '/Property/AllowedSharingModes.php'; -include __DIR__ . '/Property/Invite.php'; -include __DIR__ . '/Property/ScheduleCalendarTransp.php'; include __DIR__ . '/Property/SupportedCalendarComponentSet.php'; include __DIR__ . '/Property/SupportedCalendarData.php'; include __DIR__ . '/Property/SupportedCollationSet.php'; include __DIR__ . '/Schedule/IMip.php'; include __DIR__ . '/Schedule/IOutbox.php'; include __DIR__ . '/Schedule/Outbox.php'; -include __DIR__ . '/SharingPlugin.php'; +include __DIR__ . '/Server.php'; include __DIR__ . '/UserCalendars.php'; include __DIR__ . '/Version.php'; -include __DIR__ . '/Backend/Abstract.php'; -include __DIR__ . '/Backend/PDO.php'; include __DIR__ . '/Calendar.php'; include __DIR__ . '/CalendarObject.php'; -include __DIR__ . '/Notifications/Collection.php'; -include __DIR__ . '/ShareableCalendar.php'; -include __DIR__ . '/SharedCalendar.php'; // End includes diff --git a/3rdparty/Sabre/CardDAV/AddressBook.php b/3rdparty/Sabre/CardDAV/AddressBook.php index 8d545114d97..12297175a85 100755 --- a/3rdparty/Sabre/CardDAV/AddressBook.php +++ b/3rdparty/Sabre/CardDAV/AddressBook.php @@ -55,7 +55,7 @@ class Sabre_CardDAV_AddressBook extends Sabre_DAV_Collection implements Sabre_Ca * Returns a card * * @param string $name - * @return Sabre_CardDAV_ICard + * @return Sabre_DAV_Card */ public function getChild($name) { @@ -104,7 +104,7 @@ class Sabre_CardDAV_AddressBook extends Sabre_DAV_Collection implements Sabre_Ca * * @param string $name * @param resource $vcardData - * @return string|null + * @return void|null */ public function createFile($name,$vcardData = null) { diff --git a/3rdparty/Sabre/CardDAV/Card.php b/3rdparty/Sabre/CardDAV/Card.php index 0e35d321eb8..d7c66333837 100755 --- a/3rdparty/Sabre/CardDAV/Card.php +++ b/3rdparty/Sabre/CardDAV/Card.php @@ -6,7 +6,7 @@ * @package Sabre * @subpackage CardDAV * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. - * @author Evert Pot (http://www.rooftopsolutions.nl/) + * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ class Sabre_CardDAV_Card extends Sabre_DAV_File implements Sabre_CardDAV_ICard, Sabre_DAVACL_IACL { @@ -78,7 +78,7 @@ class Sabre_CardDAV_Card extends Sabre_DAV_File implements Sabre_CardDAV_ICard, * Updates the VCard-formatted object * * @param string $cardData - * @return string|null + * @return void */ public function put($cardData) { @@ -114,7 +114,7 @@ class Sabre_CardDAV_Card extends Sabre_DAV_File implements Sabre_CardDAV_ICard, */ public function getContentType() { - return 'text/x-vcard; charset=utf-8'; + return 'text/x-vcard'; } @@ -128,13 +128,7 @@ class Sabre_CardDAV_Card extends Sabre_DAV_File implements Sabre_CardDAV_ICard, if (isset($this->cardData['etag'])) { return $this->cardData['etag']; } else { - $data = $this->get(); - if (is_string($data)) { - return '"' . md5($data) . '"'; - } else { - // We refuse to calculate the md5 if it's a stream. - return null; - } + return '"' . md5($this->get()) . '"'; } } @@ -142,7 +136,7 @@ class Sabre_CardDAV_Card extends Sabre_DAV_File implements Sabre_CardDAV_ICard, /** * Returns the last modification date as a unix timestamp * - * @return int + * @return time */ public function getLastModified() { diff --git a/3rdparty/Sabre/CardDAV/Plugin.php b/3rdparty/Sabre/CardDAV/Plugin.php index 12bccaec4fb..96def6dd96b 100755 --- a/3rdparty/Sabre/CardDAV/Plugin.php +++ b/3rdparty/Sabre/CardDAV/Plugin.php @@ -1,7 +1,5 @@ subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties')); - $server->subscribeEvent('afterGetProperties', array($this, 'afterGetProperties')); $server->subscribeEvent('updateProperties', array($this, 'updateProperties')); $server->subscribeEvent('report', array($this,'report')); $server->subscribeEvent('onHTMLActionsPanel', array($this,'htmlActionsPanel')); @@ -156,6 +153,10 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { if (is_resource($val)) $val = stream_get_contents($val); + // Taking out \r to not screw up the xml output + //$returnedProperties[200][$addressDataProp] = str_replace("\r","", $val); + // The stripping of \r breaks the Mail App in OSX Mountain Lion + // this is fixed in master, but not backported. /Tanghus $returnedProperties[200][$addressDataProp] = $val; } @@ -189,7 +190,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { * @param array $mutations * @param array $result * @param Sabre_DAV_INode $node - * @return bool + * @return void */ public function updateProperties(&$mutations, &$result, $node) { @@ -271,7 +272,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { $properties = array_keys(Sabre_DAV_XMLUtil::parseProperties($dom->firstChild)); - $hrefElems = $dom->getElementsByTagNameNS('DAV:','href'); + $hrefElems = $dom->getElementsByTagNameNS('urn:DAV','href'); $propertyList = array(); foreach($hrefElems as $elem) { @@ -281,12 +282,9 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { } - $prefer = $this->server->getHTTPPRefer(); - $this->server->httpResponse->sendStatus(207); $this->server->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); - $this->server->httpResponse->setHeader('Vary','Brief,Prefer'); - $this->server->httpResponse->sendBody($this->server->generateMultiStatus($propertyList, $prefer['return-minimal'])); + $this->server->httpResponse->sendBody($this->server->generateMultiStatus($propertyList)); } @@ -350,9 +348,9 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { try { - $vobj = VObject\Reader::read($data); + $vobj = Sabre_VObject_Reader::read($data); - } catch (VObject\ParseException $e) { + } catch (Sabre_VObject_ParseException $e) { throw new Sabre_DAV_Exception_UnsupportedMediaType('This resource only supports valid vcard data. Parse error: ' . $e->getMessage()); @@ -362,10 +360,6 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { throw new Sabre_DAV_Exception_UnsupportedMediaType('This collection can only support vcard objects.'); } - if (!isset($vobj->UID)) { - throw new Sabre_DAV_Exception_BadRequest('Every vcard must have an UID.'); - } - } @@ -430,12 +424,9 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { } - $prefer = $this->server->getHTTPPRefer(); - $this->server->httpResponse->sendStatus(207); $this->server->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); - $this->server->httpResponse->setHeader('Vary','Brief,Prefer'); - $this->server->httpResponse->sendBody($this->server->generateMultiStatus($result, $prefer['return-minimal'])); + $this->server->httpResponse->sendBody($this->server->generateMultiStatus($result)); } @@ -449,7 +440,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { */ public function validateFilters($vcardData, array $filters, $test) { - $vcard = VObject\Reader::read($vcardData); + $vcard = Sabre_VObject_Reader::read($vcardData); if (!$filters) return true; @@ -624,30 +615,6 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { } - /** - * This event is triggered after webdav-properties have been retrieved. - * - * @return bool - */ - public function afterGetProperties($uri, &$properties) { - - // If the request was made using the SOGO connector, we must rewrite - // the content-type property. By default SabreDAV will send back - // text/x-vcard; charset=utf-8, but for SOGO we must strip that last - // part. - if (!isset($properties[200]['{DAV:}getcontenttype'])) - return; - - if (strpos($this->server->httpRequest->getHeader('User-Agent'),'Thunderbird')===false) { - return; - } - - if (strpos($properties[200]['{DAV:}getcontenttype'],'text/x-vcard')===0) { - $properties[200]['{DAV:}getcontenttype'] = 'text/x-vcard'; - } - - } - /** * This method is used to generate HTML output for the * Sabre_DAV_Browser_Plugin. This allows us to generate an interface users diff --git a/3rdparty/Sabre/CardDAV/VCFExportPlugin.php b/3rdparty/Sabre/CardDAV/VCFExportPlugin.php deleted file mode 100755 index 8850fef8afb..00000000000 --- a/3rdparty/Sabre/CardDAV/VCFExportPlugin.php +++ /dev/null @@ -1,107 +0,0 @@ -server = $server; - $this->server->subscribeEvent('beforeMethod',array($this,'beforeMethod'), 90); - - } - - /** - * 'beforeMethod' event handles. This event handles intercepts GET requests ending - * with ?export - * - * @param string $method - * @param string $uri - * @return bool - */ - public function beforeMethod($method, $uri) { - - if ($method!='GET') return; - if ($this->server->httpRequest->getQueryString()!='export') return; - - // splitting uri - list($uri) = explode('?',$uri,2); - - $node = $this->server->tree->getNodeForPath($uri); - - if (!($node instanceof Sabre_CardDAV_IAddressBook)) return; - - // Checking ACL, if available. - if ($aclPlugin = $this->server->getPlugin('acl')) { - $aclPlugin->checkPrivileges($uri, '{DAV:}read'); - } - - $this->server->httpResponse->setHeader('Content-Type','text/directory'); - $this->server->httpResponse->sendStatus(200); - - $nodes = $this->server->getPropertiesForPath($uri, array( - '{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}address-data', - ),1); - - $this->server->httpResponse->sendBody($this->generateVCF($nodes)); - - // Returning false to break the event chain - return false; - - } - - /** - * Merges all vcard objects, and builds one big vcf export - * - * @param array $nodes - * @return string - */ - public function generateVCF(array $nodes) { - - $output = ""; - - foreach($nodes as $node) { - - if (!isset($node[200]['{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}address-data'])) { - continue; - } - $nodeData = $node[200]['{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}address-data']; - - // Parsing this node so VObject can clean up the output. - $output .= - VObject\Reader::read($nodeData)->serialize(); - - } - - return $output; - - } - -} diff --git a/3rdparty/Sabre/CardDAV/Version.php b/3rdparty/Sabre/CardDAV/Version.php index 6b70a2df9b5..d0623f0d3e8 100755 --- a/3rdparty/Sabre/CardDAV/Version.php +++ b/3rdparty/Sabre/CardDAV/Version.php @@ -16,7 +16,7 @@ class Sabre_CardDAV_Version { /** * Full version number */ - const VERSION = '1.7.0'; + const VERSION = '1.6.3'; /** * Stability : alpha, beta, stable diff --git a/3rdparty/Sabre/CardDAV/includes.php b/3rdparty/Sabre/CardDAV/includes.php index 08b4f76bd01..c3b8c04b077 100755 --- a/3rdparty/Sabre/CardDAV/includes.php +++ b/3rdparty/Sabre/CardDAV/includes.php @@ -26,7 +26,6 @@ include __DIR__ . '/IDirectory.php'; include __DIR__ . '/Plugin.php'; include __DIR__ . '/Property/SupportedAddressData.php'; include __DIR__ . '/UserAddressBooks.php'; -include __DIR__ . '/VCFExportPlugin.php'; include __DIR__ . '/Version.php'; include __DIR__ . '/AddressBook.php'; include __DIR__ . '/Card.php'; diff --git a/3rdparty/Sabre/DAV/Browser/Plugin.php b/3rdparty/Sabre/DAV/Browser/Plugin.php index b6440ab6340..09bbdd2ae02 100755 --- a/3rdparty/Sabre/DAV/Browser/Plugin.php +++ b/3rdparty/Sabre/DAV/Browser/Plugin.php @@ -338,7 +338,7 @@ class Sabre_DAV_Browser_Plugin extends Sabre_DAV_ServerPlugin { $icon = ''; if ($this->enableAssets) { - $node = $this->server->tree->getNodeForPath(($path?$path.'/':'') . $name); + $node = $parent->getChild($name); foreach(array_reverse($this->iconMap) as $class=>$iconName) { if ($node instanceof $class) { diff --git a/3rdparty/Sabre/DAV/Client.php b/3rdparty/Sabre/DAV/Client.php index 9d9f4c96b02..9a428765e90 100755 --- a/3rdparty/Sabre/DAV/Client.php +++ b/3rdparty/Sabre/DAV/Client.php @@ -16,25 +16,12 @@ */ class Sabre_DAV_Client { - /** - * The propertyMap is a key-value array. - * - * If you use the propertyMap, any {DAV:}multistatus responses with the - * proeprties listed in this array, will automatically be mapped to a - * respective class. - * - * The {DAV:}resourcetype property is automatically added. This maps to - * Sabre_DAV_Property_ResourceType - * - * @var array - */ public $propertyMap = array(); protected $baseUri; protected $userName; protected $password; protected $proxy; - protected $trustedCertificates; /** * Basic authentication @@ -100,18 +87,6 @@ class Sabre_DAV_Client { } - /** - * Add trusted root certificates to the webdav client. - * - * The parameter certificates should be a absulute path to a file - * which contains all trusted certificates - * - * @param string $certificates - */ - public function addTrustedCertificates($certificates) { - $this->trustedCertificates = $certificates; - } - /** * Does a PROPFIND request * @@ -168,13 +143,13 @@ class Sabre_DAV_Client { if ($depth===0) { reset($result); $result = current($result); - return isset($result[200])?$result[200]:array(); + return $result[200]; } $newResult = array(); foreach($result as $href => $statusList) { - $newResult[$href] = isset($statusList[200])?$statusList[200]:array(); + $newResult[$href] = $statusList[200]; } @@ -304,10 +279,6 @@ class Sabre_DAV_Client { CURLOPT_MAXREDIRS => 5, ); - if($this->trustedCertificates) { - $curlSettings[CURLOPT_CAINFO] = $this->trustedCertificates; - } - switch ($method) { case 'HEAD' : @@ -392,30 +363,10 @@ class Sabre_DAV_Client { if ($response['statusCode']>=400) { switch ($response['statusCode']) { - case 400 : - throw new Sabre_DAV_Exception_BadRequest('Bad request'); - case 401 : - throw new Sabre_DAV_Exception_NotAuthenticated('Not authenticated'); - case 402 : - throw new Sabre_DAV_Exception_PaymentRequired('Payment required'); - case 403 : - throw new Sabre_DAV_Exception_Forbidden('Forbidden'); case 404: - throw new Sabre_DAV_Exception_NotFound('Resource not found.'); - case 405 : - throw new Sabre_DAV_Exception_MethodNotAllowed('Method not allowed'); - case 409 : - throw new Sabre_DAV_Exception_Conflict('Conflict'); - case 412 : - throw new Sabre_DAV_Exception_PreconditionFailed('Precondition failed'); - case 416 : - throw new Sabre_DAV_Exception_RequestedRangeNotSatisfiable('Requested Range Not Satisfiable'); - case 500 : - throw new Sabre_DAV_Exception('Internal server error'); - case 501 : - throw new Sabre_DAV_Exception_NotImplemented('Not Implemented'); - case 507 : - throw new Sabre_DAV_Exception_InsufficientStorage('Insufficient storage'); + throw new Sabre_DAV_Exception_NotFound('Resource ' . $url . ' not found.'); + break; + default: throw new Sabre_DAV_Exception('HTTP error response. (errorcode ' . $response['statusCode'] . ')'); } @@ -435,7 +386,6 @@ class Sabre_DAV_Client { * @param array $settings * @return array */ - // @codeCoverageIgnoreStart protected function curlRequest($url, $settings) { $curl = curl_init($url); @@ -449,7 +399,6 @@ class Sabre_DAV_Client { ); } - // @codeCoverageIgnoreEnd /** * Returns the full url based on the given url (which may be relative). All @@ -504,17 +453,19 @@ class Sabre_DAV_Client { */ public function parseMultiStatus($body) { + $body = Sabre_DAV_XMLUtil::convertDAVNamespace($body); + $responseXML = simplexml_load_string($body, null, LIBXML_NOBLANKS | LIBXML_NOCDATA); if ($responseXML===false) { throw new InvalidArgumentException('The passed data is not valid XML'); } - $responseXML->registerXPathNamespace('d', 'DAV:'); + $responseXML->registerXPathNamespace('d', 'urn:DAV'); $propResult = array(); foreach($responseXML->xpath('d:response') as $response) { - $response->registerXPathNamespace('d', 'DAV:'); + $response->registerXPathNamespace('d', 'urn:DAV'); $href = $response->xpath('d:href'); $href = (string)$href[0]; @@ -522,7 +473,7 @@ class Sabre_DAV_Client { foreach($response->xpath('d:propstat') as $propStat) { - $propStat->registerXPathNamespace('d', 'DAV:'); + $propStat->registerXPathNamespace('d', 'urn:DAV'); $status = $propStat->xpath('d:status'); list($httpVersion, $statusCode, $message) = explode(' ', (string)$status[0],3); diff --git a/3rdparty/Sabre/DAV/Collection.php b/3rdparty/Sabre/DAV/Collection.php index c7648a8a52d..776c22531b2 100755 --- a/3rdparty/Sabre/DAV/Collection.php +++ b/3rdparty/Sabre/DAV/Collection.php @@ -17,13 +17,9 @@ abstract class Sabre_DAV_Collection extends Sabre_DAV_Node implements Sabre_DAV_ /** * Returns a child object, by its name. * - * This method makes use of the getChildren method to grab all the child - * nodes, and compares the name. + * This method makes use of the getChildren method to grab all the child nodes, and compares the name. * Generally its wise to override this, as this can usually be optimized * - * This method must throw Sabre_DAV_Exception_NotFound if the node does not - * exist. - * * @param string $name * @throws Sabre_DAV_Exception_NotFound * @return Sabre_DAV_INode diff --git a/3rdparty/Sabre/DAV/Directory.php b/3rdparty/Sabre/DAV/Directory.php new file mode 100755 index 00000000000..6db8febc02e --- /dev/null +++ b/3rdparty/Sabre/DAV/Directory.php @@ -0,0 +1,17 @@ +path, 'c'); - fseek($f,$offset-1); - if (is_string($data)) { - fwrite($f, $data); - } else { - stream_copy_to_stream($data,$f); - } - fclose($f); - return '"' . md5_file($this->path) . '"'; - - } - /** * Returns the data * - * @return resource + * @return string */ public function get() { diff --git a/3rdparty/Sabre/DAV/ICollection.php b/3rdparty/Sabre/DAV/ICollection.php index 94431a0c496..4626038a66e 100755 --- a/3rdparty/Sabre/DAV/ICollection.php +++ b/3rdparty/Sabre/DAV/ICollection.php @@ -19,7 +19,7 @@ interface Sabre_DAV_ICollection extends Sabre_DAV_INode { * Data will either be supplied as a stream resource, or in certain cases * as a string. Keep in mind that you may have to support either. * - * After successful creation of the file, you may choose to return the ETag + * After succesful creation of the file, you may choose to return the ETag * of the new file here. * * The returned ETag must be surrounded by double-quotes (The quotes should @@ -50,9 +50,6 @@ interface Sabre_DAV_ICollection extends Sabre_DAV_INode { /** * Returns a specific child node, referenced by its name * - * This method must throw Sabre_DAV_Exception_NotFound if the node does not - * exist. - * * @param string $name * @return Sabre_DAV_INode */ diff --git a/3rdparty/Sabre/DAV/IFile.php b/3rdparty/Sabre/DAV/IFile.php index 1eca8986a5c..478f822ae71 100755 --- a/3rdparty/Sabre/DAV/IFile.php +++ b/3rdparty/Sabre/DAV/IFile.php @@ -51,7 +51,7 @@ interface Sabre_DAV_IFile extends Sabre_DAV_INode { * * If null is returned, we'll assume application/octet-stream * - * @return string|null + * @return void */ function getContentType(); diff --git a/3rdparty/Sabre/DAV/Locks/Plugin.php b/3rdparty/Sabre/DAV/Locks/Plugin.php index 957ac506a9c..035b3a63863 100755 --- a/3rdparty/Sabre/DAV/Locks/Plugin.php +++ b/3rdparty/Sabre/DAV/Locks/Plugin.php @@ -152,7 +152,6 @@ class Sabre_DAV_Locks_Plugin extends Sabre_DAV_ServerPlugin { case 'MKCOL' : case 'PROPPATCH' : case 'PUT' : - case 'PATCH' : $lastLock = null; if (!$this->validateLock($uri,$lastLock)) throw new Sabre_DAV_Exception_Locked($lastLock); diff --git a/3rdparty/Sabre/DAV/Node.php b/3rdparty/Sabre/DAV/Node.php index 3b95dfec2fa..070b7176afd 100755 --- a/3rdparty/Sabre/DAV/Node.php +++ b/3rdparty/Sabre/DAV/Node.php @@ -27,7 +27,7 @@ abstract class Sabre_DAV_Node implements Sabre_DAV_INode { } /** - * Deletes the current node + * Deleted the current node * * @throws Sabre_DAV_Exception_Forbidden * @return void diff --git a/3rdparty/Sabre/DAV/ObjectTree.php b/3rdparty/Sabre/DAV/ObjectTree.php index 3b7f222d64b..bce51463900 100755 --- a/3rdparty/Sabre/DAV/ObjectTree.php +++ b/3rdparty/Sabre/DAV/ObjectTree.php @@ -51,30 +51,24 @@ class Sabre_DAV_ObjectTree extends Sabre_DAV_Tree { $path = trim($path,'/'); if (isset($this->cache[$path])) return $this->cache[$path]; - // Is it the root node? - if (!strlen($path)) { - return $this->rootNode; - } + //if (!$path || $path=='.') return $this->rootNode; + $currentNode = $this->rootNode; - // Attempting to fetch its parent - list($parentName, $baseName) = Sabre_DAV_URLUtil::splitPath($path); + // We're splitting up the path variable into folder/subfolder components and traverse to the correct node.. + foreach(explode('/',$path) as $pathPart) { - // If there was no parent, we must simply ask it from the root node. - if ($parentName==="") { - $node = $this->rootNode->getChild($baseName); - } else { - // Otherwise, we recursively grab the parent and ask him/her. - $parent = $this->getNodeForPath($parentName); + // If this part of the path is just a dot, it actually means we can skip it + if ($pathPart=='.' || $pathPart=='') continue; - if (!($parent instanceof Sabre_DAV_ICollection)) + if (!($currentNode instanceof Sabre_DAV_ICollection)) throw new Sabre_DAV_Exception_NotFound('Could not find node at path: ' . $path); - $node = $parent->getChild($baseName); + $currentNode = $currentNode->getChild($pathPart); } - $this->cache[$path] = $node; - return $node; + $this->cache[$path] = $currentNode; + return $currentNode; } diff --git a/3rdparty/Sabre/DAV/PartialUpdate/IFile.php b/3rdparty/Sabre/DAV/PartialUpdate/IFile.php deleted file mode 100755 index cf5ad55c6de..00000000000 --- a/3rdparty/Sabre/DAV/PartialUpdate/IFile.php +++ /dev/null @@ -1,38 +0,0 @@ -addPlugin($patchPlugin); - * - * @package Sabre - * @subpackage DAV - * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. - * @author Jean-Tiare LE BIGOT (http://www.jtlebi.fr/) - * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License - */ -class Sabre_DAV_PartialUpdate_Plugin extends Sabre_DAV_ServerPlugin { - - /** - * Reference to server - * - * @var Sabre_DAV_Server - */ - protected $server; - - /** - * Initializes the plugin - * - * This method is automatically called by the Server class after addPlugin. - * - * @param Sabre_DAV_Server $server - * @return void - */ - public function initialize(Sabre_DAV_Server $server) { - - $this->server = $server; - $server->subscribeEvent('unknownMethod',array($this,'unknownMethod')); - - } - - /** - * Returns a plugin name. - * - * Using this name other plugins will be able to access other plugins - * using Sabre_DAV_Server::getPlugin - * - * @return string - */ - public function getPluginName() { - - return 'partialupdate'; - - } - - /** - * This method is called by the Server if the user used an HTTP method - * the server didn't recognize. - * - * This plugin intercepts the PATCH methods. - * - * @param string $method - * @param string $uri - * @return bool|null - */ - public function unknownMethod($method, $uri) { - - switch($method) { - - case 'PATCH': - return $this->httpPatch($uri); - - } - - } - - /** - * Use this method to tell the server this plugin defines additional - * HTTP methods. - * - * This method is passed a uri. It should only return HTTP methods that are - * available for the specified uri. - * - * We claim to support PATCH method (partial update) if and only if - * - the node exist - * - the node implements our partial update interface - * - * @param string $uri - * @return array - */ - public function getHTTPMethods($uri) { - - $tree = $this->server->tree; - - if ($tree->nodeExists($uri) && - $tree->getNodeForPath($uri) instanceof Sabre_DAV_PartialUpdate_IFile) { - return array('PATCH'); - } - - return array(); - - } - - /** - * Returns a list of features for the HTTP OPTIONS Dav: header. - * - * @return array - */ - public function getFeatures() { - - return array('sabredav-partialupdate'); - - } - - /** - * Patch an uri - * - * The WebDAV patch request can be used to modify only a part of an - * existing resource. If the resource does not exist yet and the first - * offset is not 0, the request fails - * - * @param string $uri - * @return void - */ - protected function httpPatch($uri) { - - // Get the node. Will throw a 404 if not found - $node = $this->server->tree->getNodeForPath($uri); - if (!($node instanceof Sabre_DAV_PartialUpdate_IFile)) { - throw new Sabre_DAV_Exception_MethodNotAllowed('The target resource does not support the PATCH method.'); - } - - $range = $this->getHTTPUpdateRange(); - - if (!$range) { - throw new Sabre_DAV_Exception_BadRequest('No valid "X-Update-Range" found in the headers'); - } - - $contentType = strtolower( - $this->server->httpRequest->getHeader('Content-Type') - ); - - if ($contentType != 'application/x-sabredav-partialupdate') { - throw new Sabre_DAV_Exception_UnsupportedMediaType('Unknown Content-Type header "' . $contentType . '"'); - } - - $len = $this->server->httpRequest->getHeader('Content-Length'); - - // Load the begin and end data - $start = ($range[0])?$range[0]:0; - $end = ($range[1])?$range[1]:$len-1; - - // Check consistency - if($end < $start) - throw new Sabre_DAV_Exception_RequestedRangeNotSatisfiable('The end offset (' . $range[1] . ') is lower than the start offset (' . $range[0] . ')'); - if($end - $start + 1 != $len) - throw new Sabre_DAV_Exception_RequestedRangeNotSatisfiable('Actual data length (' . $len . ') is not consistent with begin (' . $range[0] . ') and end (' . $range[1] . ') offsets'); - - // Checking If-None-Match and related headers. - if (!$this->server->checkPreconditions()) return; - - if (!$this->server->broadcastEvent('beforeWriteContent',array($uri, $node, null))) - return; - - $body = $this->server->httpRequest->getBody(); - $etag = $node->putRange($body, $start-1); - - $this->server->broadcastEvent('afterWriteContent',array($uri, $node)); - - $this->server->httpResponse->setHeader('Content-Length','0'); - if ($etag) $this->server->httpResponse->setHeader('ETag',$etag); - $this->server->httpResponse->sendStatus(204); - - return false; - - } - - /** - * Returns the HTTP custom range update header - * - * This method returns null if there is no well-formed HTTP range request - * header or array($start, $end). - * - * The first number is the offset of the first byte in the range. - * The second number is the offset of the last byte in the range. - * - * If the second offset is null, it should be treated as the offset of the last byte of the entity - * If the first offset is null, the second offset should be used to retrieve the last x bytes of the entity - * - * @return array|null - */ - public function getHTTPUpdateRange() { - - $range = $this->server->httpRequest->getHeader('X-Update-Range'); - if (is_null($range)) return null; - - // Matching "Range: bytes=1234-5678: both numbers are optional - - if (!preg_match('/^bytes=([0-9]*)-([0-9]*)$/i',$range,$matches)) return null; - - if ($matches[1]==='' && $matches[2]==='') return null; - - return array( - $matches[1]!==''?$matches[1]:null, - $matches[2]!==''?$matches[2]:null, - ); - - } -} diff --git a/3rdparty/Sabre/DAV/Property.php b/3rdparty/Sabre/DAV/Property.php index 6487bf44bc4..1cfada3236c 100755 --- a/3rdparty/Sabre/DAV/Property.php +++ b/3rdparty/Sabre/DAV/Property.php @@ -11,16 +11,10 @@ * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ -abstract class Sabre_DAV_Property implements Sabre_DAV_PropertyInterface { +abstract class Sabre_DAV_Property { + + abstract function serialize(Sabre_DAV_Server $server, DOMElement $prop); - /** - * Unserializes the property. - * - * This static method should return a an instance of this object. - * - * @param DOMElement $prop - * @return Sabre_DAV_IProperty - */ static function unserialize(DOMElement $prop) { throw new Sabre_DAV_Exception('Unserialize has not been implemented for this class'); diff --git a/3rdparty/Sabre/DAV/Property/Href.php b/3rdparty/Sabre/DAV/Property/Href.php index cd1d867f71b..dac564f24d7 100755 --- a/3rdparty/Sabre/DAV/Property/Href.php +++ b/3rdparty/Sabre/DAV/Property/Href.php @@ -82,7 +82,7 @@ class Sabre_DAV_Property_Href extends Sabre_DAV_Property implements Sabre_DAV_Pr */ static function unserialize(DOMElement $dom) { - if ($dom->firstChild && Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild)==='{DAV:}href') { + if (Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild)==='{DAV:}href') { return new self($dom->firstChild->textContent,false); } diff --git a/3rdparty/Sabre/DAV/Property/HrefList.php b/3rdparty/Sabre/DAV/Property/HrefList.php index 282c452ca0b..7a52272e885 100755 --- a/3rdparty/Sabre/DAV/Property/HrefList.php +++ b/3rdparty/Sabre/DAV/Property/HrefList.php @@ -79,7 +79,7 @@ class Sabre_DAV_Property_HrefList extends Sabre_DAV_Property { * It will only decode {DAV:}href values. * * @param DOMElement $dom - * @return Sabre_DAV_Property_HrefList + * @return Sabre_DAV_Property_Href */ static function unserialize(DOMElement $dom) { diff --git a/3rdparty/Sabre/DAV/Property/Response.php b/3rdparty/Sabre/DAV/Property/Response.php index 9f21163d12e..88afbcfb26d 100755 --- a/3rdparty/Sabre/DAV/Property/Response.php +++ b/3rdparty/Sabre/DAV/Property/Response.php @@ -138,7 +138,7 @@ class Sabre_DAV_Property_Response extends Sabre_DAV_Property implements Sabre_DA if (is_scalar($propertyValue)) { $text = $document->createTextNode($propertyValue); $currentProperty->appendChild($text); - } elseif ($propertyValue instanceof Sabre_DAV_PropertyInterface) { + } elseif ($propertyValue instanceof Sabre_DAV_Property) { $propertyValue->serialize($server,$currentProperty); } elseif (!is_null($propertyValue)) { throw new Sabre_DAV_Exception('Unknown property value type: ' . gettype($propertyValue) . ' for property: ' . $propertyName); diff --git a/3rdparty/Sabre/DAV/PropertyInterface.php b/3rdparty/Sabre/DAV/PropertyInterface.php deleted file mode 100755 index 515072cbd35..00000000000 --- a/3rdparty/Sabre/DAV/PropertyInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -broadcastEvent('exception', array($e)); - } catch (Exception $ignore) { - } $DOM = new DOMDocument('1.0','utf-8'); $DOM->formatOutput = true; @@ -217,23 +214,17 @@ class Sabre_DAV_Server { $error->setAttribute('xmlns:s',self::NS_SABREDAV); $DOM->appendChild($error); - $h = function($v) { - - return htmlspecialchars($v, ENT_NOQUOTES, 'UTF-8'); - - }; - - $error->appendChild($DOM->createElement('s:exception',$h(get_class($e)))); - $error->appendChild($DOM->createElement('s:message',$h($e->getMessage()))); + $error->appendChild($DOM->createElement('s:exception',get_class($e))); + $error->appendChild($DOM->createElement('s:message',$e->getMessage())); if ($this->debugExceptions) { - $error->appendChild($DOM->createElement('s:file',$h($e->getFile()))); - $error->appendChild($DOM->createElement('s:line',$h($e->getLine()))); - $error->appendChild($DOM->createElement('s:code',$h($e->getCode()))); - $error->appendChild($DOM->createElement('s:stacktrace',$h($e->getTraceAsString()))); + $error->appendChild($DOM->createElement('s:file',$e->getFile())); + $error->appendChild($DOM->createElement('s:line',$e->getLine())); + $error->appendChild($DOM->createElement('s:code',$e->getCode())); + $error->appendChild($DOM->createElement('s:stacktrace',$e->getTraceAsString())); } if (self::$exposeVersion) { - $error->appendChild($DOM->createElement('s:sabredav-version',$h(Sabre_DAV_Version::VERSION))); + $error->appendChild($DOM->createElement('s:sabredav-version',Sabre_DAV_Version::VERSION)); } if($e instanceof Sabre_DAV_Exception) { @@ -517,7 +508,7 @@ class Sabre_DAV_Server { if (!$this->checkPreconditions(true)) return false; - if (!$node instanceof Sabre_DAV_IFile) throw new Sabre_DAV_Exception_NotImplemented('GET is only implemented on File objects'); + if (!($node instanceof Sabre_DAV_IFile)) throw new Sabre_DAV_Exception_NotImplemented('GET is only implemented on File objects'); $body = $node->get(); // Converting string into stream, if needed. @@ -705,7 +696,6 @@ class Sabre_DAV_Server { // This is a multi-status response $this->httpResponse->sendStatus(207); $this->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); - $this->httpResponse->setHeader('Vary','Brief,Prefer'); // Normally this header is only needed for OPTIONS responses, however.. // iCal seems to also depend on these being set for PROPFIND. Since @@ -714,10 +704,7 @@ class Sabre_DAV_Server { foreach($this->plugins as $plugin) $features = array_merge($features,$plugin->getFeatures()); $this->httpResponse->setHeader('DAV',implode(', ',$features)); - $prefer = $this->getHTTPPrefer(); - $minimal = $prefer['return-minimal']; - - $data = $this->generateMultiStatus($newProperties, $minimal); + $data = $this->generateMultiStatus($newProperties); $this->httpResponse->sendBody($data); } @@ -737,30 +724,6 @@ class Sabre_DAV_Server { $result = $this->updateProperties($uri, $newProperties); - $prefer = $this->getHTTPPrefer(); - $this->httpResponse->setHeader('Vary','Brief,Prefer'); - - if ($prefer['return-minimal']) { - - // If return-minimal is specified, we only have to check if the - // request was succesful, and don't need to return the - // multi-status. - $ok = true; - foreach($result as $code=>$prop) { - if ((int)$code > 299) { - $ok = false; - } - } - - if ($ok) { - - $this->httpResponse->sendStatus(204); - return; - - } - - } - $this->httpResponse->sendStatus(207); $this->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); @@ -964,7 +927,7 @@ class Sabre_DAV_Server { * This method moves one uri to a different uri. A lot of the actual request processing is done in getCopyMoveInfo * * @param string $uri - * @return bool + * @return void */ protected function httpMove($uri) { @@ -1046,7 +1009,7 @@ class Sabre_DAV_Server { if ($this->broadcastEvent('report',array($reportName,$dom, $uri))) { // If broadcastEvent returned true, it means the report was not supported - throw new Sabre_DAV_Exception_ReportNotSupported(); + throw new Sabre_DAV_Exception_ReportNotImplemented(); } @@ -1195,85 +1158,6 @@ class Sabre_DAV_Server { } - /** - * Returns the HTTP Prefer header information. - * - * The prefer header is defined in: - * http://tools.ietf.org/html/draft-snell-http-prefer-14 - * - * This method will return an array with options. - * - * Currently, the following options may be returned: - * array( - * 'return-asynch' => true, - * 'return-minimal' => true, - * 'return-representation' => true, - * 'wait' => 30, - * 'strict' => true, - * 'lenient' => true, - * ) - * - * This method also supports the Brief header, and will also return - * 'return-minimal' if the brief header was set to 't'. - * - * For the boolean options, false will be returned if the headers are not - * specified. For the integer options it will be 'null'. - * - * @return array - */ - public function getHTTPPrefer() { - - $result = array( - 'return-asynch' => false, - 'return-minimal' => false, - 'return-representation' => false, - 'wait' => null, - 'strict' => false, - 'lenient' => false, - ); - - if ($prefer = $this->httpRequest->getHeader('Prefer')) { - - $parameters = array_map('trim', - explode(',', $prefer) - ); - - foreach($parameters as $parameter) { - - // Right now our regex only supports the tokens actually - // specified in the draft. We may need to expand this if new - // tokens get registered. - if(!preg_match('/^(?P[a-z0-9-]+)(?:=(?P[0-9]+))?$/', $parameter, $matches)) { - continue; - } - - switch($matches['token']) { - - case 'return-asynch' : - case 'return-minimal' : - case 'return-representation' : - case 'strict' : - case 'lenient' : - $result[$matches['token']] = true; - break; - case 'wait' : - $result[$matches['token']] = $matches['value']; - break; - - } - - } - - } - - if ($this->httpRequest->getHeader('Brief')=='t') { - $result['return-minimal'] = true; - } - - return $result; - - } - /** * Returns information about Copy and Move requests @@ -1549,18 +1433,15 @@ class Sabre_DAV_Server { } - $this->broadcastEvent('afterGetProperties',array(trim($myPath,'/'),&$newProperties, $node)); + $this->broadcastEvent('afterGetProperties',array(trim($myPath,'/'),&$newProperties)); $newProperties['href'] = trim($myPath,'/'); // Its is a WebDAV recommendation to add a trailing slash to collectionnames. - // Apple's iCal also requires a trailing slash for principals (rfc 3744), though this is non-standard. - if ($myPath!='' && isset($newProperties[200]['{DAV:}resourcetype'])) { - $rt = $newProperties[200]['{DAV:}resourcetype']; - if ($rt->is('{DAV:}collection') || $rt->is('{DAV:}principal')) { - $newProperties['href'] .='/'; - } - } + // Apple's iCal also requires a trailing slash for principals (rfc 3744). + // Therefore we add a trailing / for any non-file. This might need adjustments + // if we find there are other edge cases. + if ($myPath!='' && isset($newProperties[200]['{DAV:}resourcetype']) && count($newProperties[200]['{DAV:}resourcetype']->getValue())>0) $newProperties['href'] .='/'; // If the resourcetype property was manually added to the requested property list, // we will remove it again. @@ -1595,14 +1476,11 @@ class Sabre_DAV_Server { if (!$this->broadcastEvent('beforeBind',array($uri))) return false; $parent = $this->tree->getNodeForPath($dir); - if (!$parent instanceof Sabre_DAV_ICollection) { - throw new Sabre_DAV_Exception_Conflict('Files can only be created as children of collections'); - } if (!$this->broadcastEvent('beforeCreateFile',array($uri, &$data, $parent))) return false; $etag = $parent->createFile($name,$data); - $this->tree->markDirty($dir . '/' . $name); + $this->tree->markDirty($dir); $this->broadcastEvent('afterBind',array($uri)); $this->broadcastEvent('afterCreateFile',array($uri, $parent)); @@ -2023,15 +1901,12 @@ class Sabre_DAV_Server { /** - * Generates a WebDAV propfind response body based on a list of nodes. - * - * If 'strip404s' is set to true, all 404 responses will be removed. + * Generates a WebDAV propfind response body based on a list of nodes * * @param array $fileProperties The list with nodes - * @param bool strip404s * @return string */ - public function generateMultiStatus(array $fileProperties, $strip404s = false) { + public function generateMultiStatus(array $fileProperties) { $dom = new DOMDocument('1.0','utf-8'); //$dom->formatOutput = true; @@ -2050,10 +1925,6 @@ class Sabre_DAV_Server { $href = $entry['href']; unset($entry['href']); - if ($strip404s && isset($entry[404])) { - unset($entry[404]); - } - $response = new Sabre_DAV_Property_Response($href,$entry); $response->serialize($this,$multiStatus); @@ -2124,7 +1995,7 @@ class Sabre_DAV_Server { if (!$body) return array(); $dom = Sabre_DAV_XMLUtil::loadDOMDocument($body); - $elem = $dom->getElementsByTagNameNS('DAV:','propfind')->item(0); + $elem = $dom->getElementsByTagNameNS('urn:DAV','propfind')->item(0); return array_keys(Sabre_DAV_XMLUtil::parseProperties($elem)); } diff --git a/3rdparty/Sabre/DAV/ServerPlugin.php b/3rdparty/Sabre/DAV/ServerPlugin.php index 120569ffccd..131863d13fb 100755 --- a/3rdparty/Sabre/DAV/ServerPlugin.php +++ b/3rdparty/Sabre/DAV/ServerPlugin.php @@ -19,7 +19,7 @@ abstract class Sabre_DAV_ServerPlugin { * This function is called by Sabre_DAV_Server, after * addPlugin is called. * - * This method should set up the required event subscriptions. + * This method should set up the requires event subscriptions. * * @param Sabre_DAV_Server $server * @return void diff --git a/3rdparty/Sabre/DAV/SimpleCollection.php b/3rdparty/Sabre/DAV/SimpleCollection.php index 79e2eaaacd4..4acf971caa5 100755 --- a/3rdparty/Sabre/DAV/SimpleCollection.php +++ b/3rdparty/Sabre/DAV/SimpleCollection.php @@ -31,7 +31,7 @@ class Sabre_DAV_SimpleCollection extends Sabre_DAV_Collection { /** * Creates this node * - * The name of the node must be passed, child nodes can also be passed. + * The name of the node must be passed, child nodes can also be bassed. * This nodes must be instances of Sabre_DAV_INode * * @param string $name @@ -78,9 +78,6 @@ class Sabre_DAV_SimpleCollection extends Sabre_DAV_Collection { * This method makes use of the getChildren method to grab all the child nodes, and compares the name. * Generally its wise to override this, as this can usually be optimized * - * This method must throw Sabre_DAV_Exception_NotFound if the node does not - * exist. - * * @param string $name * @throws Sabre_DAV_Exception_NotFound * @return Sabre_DAV_INode diff --git a/3rdparty/Sabre/DAV/SimpleDirectory.php b/3rdparty/Sabre/DAV/SimpleDirectory.php new file mode 100755 index 00000000000..621222ebc53 --- /dev/null +++ b/3rdparty/Sabre/DAV/SimpleDirectory.php @@ -0,0 +1,21 @@ +nodeType !== XML_ELEMENT_NODE) return null; - $ns = $dom->namespaceURI; + // Mapping back to the real namespace, in case it was dav + if ($dom->namespaceURI=='urn:DAV') $ns = 'DAV:'; else $ns = $dom->namespaceURI; // Mapping to clark notation return '{' . $ns . '}' . $dom->localName; @@ -60,11 +64,29 @@ class Sabre_DAV_XMLUtil { } + /** + * This method takes an XML document (as string) and converts all instances of the + * DAV: namespace to urn:DAV + * + * This is unfortunately needed, because the DAV: namespace violates the xml namespaces + * spec, and causes the DOM to throw errors + * + * @param string $xmlDocument + * @return array|string|null + */ + static function convertDAVNamespace($xmlDocument) { + + // This is used to map the DAV: namespace to urn:DAV. This is needed, because the DAV: + // namespace is actually a violation of the XML namespaces specification, and will cause errors + return preg_replace("/xmlns(:[A-Za-z0-9_]*)?=(\"|\')DAV:(\\2)/","xmlns\\1=\\2urn:DAV\\2",$xmlDocument); + + } + /** * This method provides a generic way to load a DOMDocument for WebDAV use. * * This method throws a Sabre_DAV_Exception_BadRequest exception for any xml errors. - * It does not preserve whitespace. + * It does not preserve whitespace, and it converts the DAV: namespace to urn:DAV. * * @param string $xml * @throws Sabre_DAV_Exception_BadRequest @@ -96,11 +118,10 @@ class Sabre_DAV_XMLUtil { libxml_clear_errors(); $dom = new DOMDocument(); + $dom->loadXML(self::convertDAVNamespace($xml),LIBXML_NOWARNING | LIBXML_NOERROR); // We don't generally care about any whitespace $dom->preserveWhiteSpace = false; - - $dom->loadXML($xml,LIBXML_NOWARNING | LIBXML_NOERROR); if ($error = libxml_get_last_error()) { libxml_clear_errors(); diff --git a/3rdparty/Sabre/DAV/includes.php b/3rdparty/Sabre/DAV/includes.php index 6728f88ce76..6a4890677ea 100755 --- a/3rdparty/Sabre/DAV/includes.php +++ b/3rdparty/Sabre/DAV/includes.php @@ -28,7 +28,7 @@ include __DIR__ . '/Locks/Backend/PDO.php'; include __DIR__ . '/Locks/LockInfo.php'; include __DIR__ . '/Node.php'; include __DIR__ . '/Property/IHref.php'; -include __DIR__ . '/PropertyInterface.php'; +include __DIR__ . '/Property.php'; include __DIR__ . '/Server.php'; include __DIR__ . '/ServerPlugin.php'; include __DIR__ . '/StringUtil.php'; @@ -60,7 +60,7 @@ include __DIR__ . '/Exception/NotFound.php'; include __DIR__ . '/Exception/NotImplemented.php'; include __DIR__ . '/Exception/PaymentRequired.php'; include __DIR__ . '/Exception/PreconditionFailed.php'; -include __DIR__ . '/Exception/ReportNotSupported.php'; +include __DIR__ . '/Exception/ReportNotImplemented.php'; include __DIR__ . '/Exception/RequestedRangeNotSatisfiable.php'; include __DIR__ . '/Exception/UnsupportedMediaType.php'; include __DIR__ . '/FS/Node.php'; @@ -72,18 +72,6 @@ include __DIR__ . '/IQuota.php'; include __DIR__ . '/Locks/Plugin.php'; include __DIR__ . '/Mount/Plugin.php'; include __DIR__ . '/ObjectTree.php'; -include __DIR__ . '/PartialUpdate/IFile.php'; -include __DIR__ . '/PartialUpdate/Plugin.php'; -include __DIR__ . '/Property.php'; -include __DIR__ . '/Tree/Filesystem.php'; -include __DIR__ . '/Collection.php'; -include __DIR__ . '/Exception/ConflictingLock.php'; -include __DIR__ . '/Exception/FileNotFound.php'; -include __DIR__ . '/File.php'; -include __DIR__ . '/FS/Directory.php'; -include __DIR__ . '/FS/File.php'; -include __DIR__ . '/FSExt/Directory.php'; -include __DIR__ . '/FSExt/File.php'; include __DIR__ . '/Property/GetLastModified.php'; include __DIR__ . '/Property/Href.php'; include __DIR__ . '/Property/HrefList.php'; @@ -93,6 +81,17 @@ include __DIR__ . '/Property/Response.php'; include __DIR__ . '/Property/ResponseList.php'; include __DIR__ . '/Property/SupportedLock.php'; include __DIR__ . '/Property/SupportedReportSet.php'; +include __DIR__ . '/Tree/Filesystem.php'; +include __DIR__ . '/Collection.php'; +include __DIR__ . '/Directory.php'; +include __DIR__ . '/Exception/ConflictingLock.php'; +include __DIR__ . '/Exception/FileNotFound.php'; +include __DIR__ . '/File.php'; +include __DIR__ . '/FS/Directory.php'; +include __DIR__ . '/FS/File.php'; +include __DIR__ . '/FSExt/Directory.php'; +include __DIR__ . '/FSExt/File.php'; include __DIR__ . '/SimpleCollection.php'; +include __DIR__ . '/SimpleDirectory.php'; include __DIR__ . '/SimpleFile.php'; // End includes diff --git a/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php b/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php index f67eadad6e9..e05b7749805 100755 --- a/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php +++ b/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php @@ -107,7 +107,7 @@ abstract class Sabre_DAVACL_AbstractPrincipalCollection extends Sabre_DAV_Collec * * @param string $name * @throws Sabre_DAV_Exception_NotFound - * @return Sabre_DAVACL_IPrincipal + * @return Sabre_DAV_IPrincipal */ public function getChild($name) { diff --git a/3rdparty/Sabre/DAVACL/IACL.php b/3rdparty/Sabre/DAVACL/IACL.php index 356bb481d55..003e6993483 100755 --- a/3rdparty/Sabre/DAVACL/IACL.php +++ b/3rdparty/Sabre/DAVACL/IACL.php @@ -48,7 +48,7 @@ interface Sabre_DAVACL_IACL extends Sabre_DAV_INode { /** * Updates the ACL * - * This method will receive a list of new ACE's as an array argument. + * This method will receive a list of new ACE's. * * @param array $acl * @return void diff --git a/3rdparty/Sabre/DAVACL/Plugin.php b/3rdparty/Sabre/DAVACL/Plugin.php index 5b17c838475..5c828c6d97b 100755 --- a/3rdparty/Sabre/DAVACL/Plugin.php +++ b/3rdparty/Sabre/DAVACL/Plugin.php @@ -3,7 +3,7 @@ /** * SabreDAV ACL Plugin * - * This plugin provides functionality to enforce ACL permissions. + * This plugin provides funcitonality to enforce ACL permissions. * ACL is defined in RFC3744. * * In addition it also provides support for the {DAV:}current-user-principal @@ -102,11 +102,11 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { ); /** - * Any principal uri's added here, will automatically be added to the list - * of ACL's. They will effectively receive {DAV:}all privileges, as a + * Any principal uri's added here, will automatically be added to the list + * of ACL's. They will effectively receive {DAV:}all privileges, as a * protected privilege. - * - * @var array + * + * @var array */ public $adminPrincipals = array(); @@ -233,7 +233,6 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { $authPlugin = $this->server->getPlugin('auth'); if (is_null($authPlugin)) return null; - /** @var $authPlugin Sabre_DAV_Auth_Plugin */ $userName = $authPlugin->getCurrentUser(); if (!$userName) return null; @@ -242,14 +241,6 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { } - /** - * This array holds a cache for all the principals that are associated with - * a single principal. - * - * @var array - */ - protected $currentUserPrincipalsCache = array(); - /** * Returns a list of principals that's associated to the current * user, either directly or through group membership. @@ -262,11 +253,6 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { if (is_null($currentUser)) return array(); - // First check our cache - if (isset($this->currentUserPrincipalsCache[$currentUser])) { - return $this->currentUserPrincipalsCache[$currentUser]; - } - $check = array($currentUser); $principals = array($currentUser); @@ -291,9 +277,6 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { } - // Store the result in the cache - $this->currentUserPrincipalsCache[$currentUser] = $principals; - return $principals; } @@ -788,7 +771,7 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { * @param array $requestedProperties * @param array $returnedProperties * @TODO really should be broken into multiple methods, or even a class. - * @return bool + * @return void */ public function beforeGetProperties($uri, Sabre_DAV_INode $node, &$requestedProperties, &$returnedProperties) { @@ -912,18 +895,6 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { $returnedProperties[200]['{DAV:}acl-restrictions'] = new Sabre_DAVACL_Property_AclRestrictions(); } - /* Adding ACL properties */ - if ($node instanceof Sabre_DAVACL_IACL) { - - if (false !== ($index = array_search('{DAV:}owner', $requestedProperties))) { - - unset($requestedProperties[$index]); - $returnedProperties[200]['{DAV:}owner'] = new Sabre_DAV_Property_Href($node->getOwner() . '/'); - - } - - } - } /** @@ -957,9 +928,6 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { } $node->setGroupMemberSet($memberSet); - // We must also clear our cache, just in case - - $this->currentUserPrincipalsCache = array(); $result[200]['{DAV:}group-member-set'] = null; unset($propertyDelta['{DAV:}group-member-set']); @@ -967,7 +935,7 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { } /** - * This method handles HTTP REPORT requests + * This method handels HTTP REPORT requests * * @param string $reportName * @param DOMNode $dom @@ -1300,12 +1268,10 @@ class Sabre_DAVACL_Plugin extends Sabre_DAV_ServerPlugin { } $result = $this->principalSearch($searchProperties, $requestedProperties, $uri); - $prefer = $this->server->getHTTPPRefer(); - - $this->server->httpResponse->sendStatus(207); + $xml = $this->server->generateMultiStatus($result); $this->server->httpResponse->setHeader('Content-Type','application/xml; charset=utf-8'); - $this->server->httpResponse->setHeader('Vary','Brief,Prefer'); - $this->server->httpResponse->sendBody($this->server->generateMultiStatus($result, $prefer['return-minimal'])); + $this->server->httpResponse->sendStatus(207); + $this->server->httpResponse->sendBody($xml); } diff --git a/3rdparty/Sabre/DAVACL/Property/Acl.php b/3rdparty/Sabre/DAVACL/Property/Acl.php index 3f79a8d532e..05e1a690b3c 100755 --- a/3rdparty/Sabre/DAVACL/Property/Acl.php +++ b/3rdparty/Sabre/DAVACL/Property/Acl.php @@ -88,11 +88,11 @@ class Sabre_DAVACL_Property_Acl extends Sabre_DAV_Property { static public function unserialize(DOMElement $dom) { $privileges = array(); - $xaces = $dom->getElementsByTagNameNS('DAV:','ace'); + $xaces = $dom->getElementsByTagNameNS('urn:DAV','ace'); for($ii=0; $ii < $xaces->length; $ii++) { $xace = $xaces->item($ii); - $principal = $xace->getElementsByTagNameNS('DAV:','principal'); + $principal = $xace->getElementsByTagNameNS('urn:DAV','principal'); if ($principal->length !== 1) { throw new Sabre_DAV_Exception_BadRequest('Each {DAV:}ace element must have one {DAV:}principal element'); } @@ -116,17 +116,17 @@ class Sabre_DAVACL_Property_Acl extends Sabre_DAV_Property { $protected = false; - if ($xace->getElementsByTagNameNS('DAV:','protected')->length > 0) { + if ($xace->getElementsByTagNameNS('urn:DAV','protected')->length > 0) { $protected = true; } - $grants = $xace->getElementsByTagNameNS('DAV:','grant'); + $grants = $xace->getElementsByTagNameNS('urn:DAV','grant'); if ($grants->length < 1) { throw new Sabre_DAV_Exception_NotImplemented('Every {DAV:}ace element must have a {DAV:}grant element. {DAV:}deny is not yet supported'); } $grant = $grants->item(0); - $xprivs = $grant->getElementsByTagNameNS('DAV:','privilege'); + $xprivs = $grant->getElementsByTagNameNS('urn:DAV','privilege'); for($jj=0; $jj<$xprivs->length; $jj++) { $xpriv = $xprivs->item($jj); diff --git a/3rdparty/Sabre/DAVACL/Property/Principal.php b/3rdparty/Sabre/DAVACL/Property/Principal.php index 3f681742276..c36328a58e0 100755 --- a/3rdparty/Sabre/DAVACL/Property/Principal.php +++ b/3rdparty/Sabre/DAVACL/Property/Principal.php @@ -15,7 +15,7 @@ class Sabre_DAVACL_Property_Principal extends Sabre_DAV_Property implements Sabre_DAV_Property_IHref { /** - * To specify a not-logged-in user, use the UNAUTHENTICATED principal + * To specify a not-logged-in user, use the UNAUTHENTICTED principal */ const UNAUTHENTICATED = 1; @@ -131,7 +131,7 @@ class Sabre_DAVACL_Property_Principal extends Sabre_DAV_Property implements Sabr * Deserializes a DOM element into a property object. * * @param DOMElement $dom - * @return Sabre_DAVACL_Property_Principal + * @return Sabre_DAV_Property_Principal */ static public function unserialize(DOMElement $dom) { diff --git a/3rdparty/Sabre/DAVACL/Version.php b/3rdparty/Sabre/DAVACL/Version.php index 084a9c13c89..9950f748741 100755 --- a/3rdparty/Sabre/DAVACL/Version.php +++ b/3rdparty/Sabre/DAVACL/Version.php @@ -14,7 +14,7 @@ class Sabre_DAVACL_Version { /** * Full version number */ - const VERSION = '1.7.0'; + const VERSION = '1.6.0'; /** * Stability : alpha, beta, stable diff --git a/3rdparty/Sabre/HTTP/Request.php b/3rdparty/Sabre/HTTP/Request.php index 74d5ed3d7ee..4746ef77704 100755 --- a/3rdparty/Sabre/HTTP/Request.php +++ b/3rdparty/Sabre/HTTP/Request.php @@ -184,7 +184,7 @@ class Sabre_HTTP_Request { * This method returns a readable stream resource. * If the asString parameter is set to true, a string is sent instead. * - * @param bool $asString + * @param bool asString * @return resource */ public function getBody($asString = false) { diff --git a/3rdparty/Sabre/HTTP/Response.php b/3rdparty/Sabre/HTTP/Response.php index 9d436881bdf..ffe9bda2082 100755 --- a/3rdparty/Sabre/HTTP/Response.php +++ b/3rdparty/Sabre/HTTP/Response.php @@ -4,7 +4,7 @@ * Sabre_HTTP_Response * * @package Sabre - * @subpackage HTTP + * @subpackage HTTP * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. * @author Evert Pot (http://www.rooftopsolutions.nl/) * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License @@ -85,9 +85,6 @@ class Sabre_HTTP_Response { } - // @codeCoverageIgnoreStart - // We cannot reasonably test header() related methods. - /** * Sends an HTTP status header to the client * @@ -117,9 +114,7 @@ class Sabre_HTTP_Response { return header($name . ': ' . $value, $replace); else return false; - } - // @codeCoverageIgnoreEnd /** * Sets a bunch of HTTP Headers diff --git a/3rdparty/Sabre/HTTP/Version.php b/3rdparty/Sabre/HTTP/Version.php index 8ccd7c9edf6..e6b4f7e5358 100755 --- a/3rdparty/Sabre/HTTP/Version.php +++ b/3rdparty/Sabre/HTTP/Version.php @@ -14,7 +14,7 @@ class Sabre_HTTP_Version { /** * Full version number */ - const VERSION = '1.7.0'; + const VERSION = '1.6.4'; /** * Stability : alpha, beta, stable diff --git a/3rdparty/Sabre/VObject/Component.php b/3rdparty/Sabre/VObject/Component.php new file mode 100755 index 00000000000..b78a26133fa --- /dev/null +++ b/3rdparty/Sabre/VObject/Component.php @@ -0,0 +1,365 @@ + 'Sabre_VObject_Component_VCalendar', + 'VEVENT' => 'Sabre_VObject_Component_VEvent', + 'VTODO' => 'Sabre_VObject_Component_VTodo', + 'VJOURNAL' => 'Sabre_VObject_Component_VJournal', + 'VALARM' => 'Sabre_VObject_Component_VAlarm', + ); + + /** + * Creates the new component by name, but in addition will also see if + * there's a class mapped to the property name. + * + * @param string $name + * @param string $value + * @return Sabre_VObject_Component + */ + static public function create($name, $value = null) { + + $name = strtoupper($name); + + if (isset(self::$classMap[$name])) { + return new self::$classMap[$name]($name, $value); + } else { + return new self($name, $value); + } + + } + + /** + * Creates a new component. + * + * By default this object will iterate over its own children, but this can + * be overridden with the iterator argument + * + * @param string $name + * @param Sabre_VObject_ElementList $iterator + */ + public function __construct($name, Sabre_VObject_ElementList $iterator = null) { + + $this->name = strtoupper($name); + if (!is_null($iterator)) $this->iterator = $iterator; + + } + + /** + * Turns the object back into a serialized blob. + * + * @return string + */ + public function serialize() { + + $str = "BEGIN:" . $this->name . "\r\n"; + + /** + * Gives a component a 'score' for sorting purposes. + * + * This is solely used by the childrenSort method. + * + * A higher score means the item will be higher in the list + * + * @param Sabre_VObject_Node $n + * @return int + */ + $sortScore = function($n) { + + if ($n instanceof Sabre_VObject_Component) { + // We want to encode VTIMEZONE first, this is a personal + // preference. + if ($n->name === 'VTIMEZONE') { + return 1; + } else { + return 0; + } + } else { + // VCARD version 4.0 wants the VERSION property to appear first + if ($n->name === 'VERSION') { + return 3; + } else { + return 2; + } + } + + }; + + usort($this->children, function($a, $b) use ($sortScore) { + + $sA = $sortScore($a); + $sB = $sortScore($b); + + if ($sA === $sB) return 0; + + return ($sA > $sB) ? -1 : 1; + + }); + + foreach($this->children as $child) $str.=$child->serialize(); + $str.= "END:" . $this->name . "\r\n"; + + return $str; + + } + + /** + * Adds a new component or element + * + * You can call this method with the following syntaxes: + * + * add(Sabre_VObject_Element $element) + * add(string $name, $value) + * + * The first version adds an Element + * The second adds a property as a string. + * + * @param mixed $item + * @param mixed $itemValue + * @return void + */ + public function add($item, $itemValue = null) { + + if ($item instanceof Sabre_VObject_Element) { + if (!is_null($itemValue)) { + throw new InvalidArgumentException('The second argument must not be specified, when passing a VObject'); + } + $item->parent = $this; + $this->children[] = $item; + } elseif(is_string($item)) { + + if (!is_scalar($itemValue)) { + throw new InvalidArgumentException('The second argument must be scalar'); + } + $item = Sabre_VObject_Property::create($item,$itemValue); + $item->parent = $this; + $this->children[] = $item; + + } else { + + throw new InvalidArgumentException('The first argument must either be a Sabre_VObject_Element or a string'); + + } + + } + + /** + * Returns an iterable list of children + * + * @return Sabre_VObject_ElementList + */ + public function children() { + + return new Sabre_VObject_ElementList($this->children); + + } + + /** + * Returns an array with elements that match the specified name. + * + * This function is also aware of MIME-Directory groups (as they appear in + * vcards). This means that if a property is grouped as "HOME.EMAIL", it + * will also be returned when searching for just "EMAIL". If you want to + * search for a property in a specific group, you can select on the entire + * string ("HOME.EMAIL"). If you want to search on a specific property that + * has not been assigned a group, specify ".EMAIL". + * + * Keys are retained from the 'children' array, which may be confusing in + * certain cases. + * + * @param string $name + * @return array + */ + public function select($name) { + + $group = null; + $name = strtoupper($name); + if (strpos($name,'.')!==false) { + list($group,$name) = explode('.', $name, 2); + } + + $result = array(); + foreach($this->children as $key=>$child) { + + if ( + strtoupper($child->name) === $name && + (is_null($group) || ( $child instanceof Sabre_VObject_Property && strtoupper($child->group) === $group)) + ) { + + $result[$key] = $child; + + } + } + + reset($result); + return $result; + + } + + /** + * This method only returns a list of sub-components. Properties are + * ignored. + * + * @return array + */ + public function getComponents() { + + $result = array(); + foreach($this->children as $child) { + if ($child instanceof Sabre_VObject_Component) { + $result[] = $child; + } + } + + return $result; + + } + + /* Magic property accessors {{{ */ + + /** + * Using 'get' you will either get a property or component, + * + * If there were no child-elements found with the specified name, + * null is returned. + * + * @param string $name + * @return Sabre_VObject_Property + */ + public function __get($name) { + + $matches = $this->select($name); + if (count($matches)===0) { + return null; + } else { + $firstMatch = current($matches); + /** @var $firstMatch Sabre_VObject_Property */ + $firstMatch->setIterator(new Sabre_VObject_ElementList(array_values($matches))); + return $firstMatch; + } + + } + + /** + * This method checks if a sub-element with the specified name exists. + * + * @param string $name + * @return bool + */ + public function __isset($name) { + + $matches = $this->select($name); + return count($matches)>0; + + } + + /** + * Using the setter method you can add properties or subcomponents + * + * You can either pass a Sabre_VObject_Component, Sabre_VObject_Property + * object, or a string to automatically create a Property. + * + * If the item already exists, it will be removed. If you want to add + * a new item with the same name, always use the add() method. + * + * @param string $name + * @param mixed $value + * @return void + */ + public function __set($name, $value) { + + $matches = $this->select($name); + $overWrite = count($matches)?key($matches):null; + + if ($value instanceof Sabre_VObject_Component || $value instanceof Sabre_VObject_Property) { + $value->parent = $this; + if (!is_null($overWrite)) { + $this->children[$overWrite] = $value; + } else { + $this->children[] = $value; + } + } elseif (is_scalar($value)) { + $property = Sabre_VObject_Property::create($name,$value); + $property->parent = $this; + if (!is_null($overWrite)) { + $this->children[$overWrite] = $property; + } else { + $this->children[] = $property; + } + } else { + throw new InvalidArgumentException('You must pass a Sabre_VObject_Component, Sabre_VObject_Property or scalar type'); + } + + } + + /** + * Removes all properties and components within this component. + * + * @param string $name + * @return void + */ + public function __unset($name) { + + $matches = $this->select($name); + foreach($matches as $k=>$child) { + + unset($this->children[$k]); + $child->parent = null; + + } + + } + + /* }}} */ + + /** + * This method is automatically called when the object is cloned. + * Specifically, this will ensure all child elements are also cloned. + * + * @return void + */ + public function __clone() { + + foreach($this->children as $key=>$child) { + $this->children[$key] = clone $child; + $this->children[$key]->parent = $this; + } + + } + +} diff --git a/3rdparty/Sabre/VObject/Component/VAlarm.php b/3rdparty/Sabre/VObject/Component/VAlarm.php new file mode 100755 index 00000000000..ebb4a9b18f6 --- /dev/null +++ b/3rdparty/Sabre/VObject/Component/VAlarm.php @@ -0,0 +1,102 @@ +TRIGGER; + if(!isset($trigger['VALUE']) || strtoupper($trigger['VALUE']) === 'DURATION') { + $triggerDuration = Sabre_VObject_DateTimeParser::parseDuration($this->TRIGGER); + $related = (isset($trigger['RELATED']) && strtoupper($trigger['RELATED']) == 'END') ? 'END' : 'START'; + + $parentComponent = $this->parent; + if ($related === 'START') { + $effectiveTrigger = clone $parentComponent->DTSTART->getDateTime(); + $effectiveTrigger->add($triggerDuration); + } else { + if ($parentComponent->name === 'VTODO') { + $endProp = 'DUE'; + } elseif ($parentComponent->name === 'VEVENT') { + $endProp = 'DTEND'; + } else { + throw new Sabre_DAV_Exception('time-range filters on VALARM components are only supported when they are a child of VTODO or VEVENT'); + } + + if (isset($parentComponent->$endProp)) { + $effectiveTrigger = clone $parentComponent->$endProp->getDateTime(); + $effectiveTrigger->add($triggerDuration); + } elseif (isset($parentComponent->DURATION)) { + $effectiveTrigger = clone $parentComponent->DTSTART->getDateTime(); + $duration = Sabre_VObject_DateTimeParser::parseDuration($parentComponent->DURATION); + $effectiveTrigger->add($duration); + $effectiveTrigger->add($triggerDuration); + } else { + $effectiveTrigger = clone $parentComponent->DTSTART->getDateTime(); + $effectiveTrigger->add($triggerDuration); + } + } + } else { + $effectiveTrigger = $trigger->getDateTime(); + } + return $effectiveTrigger; + + } + + /** + * Returns true or false depending on if the event falls in the specified + * time-range. This is used for filtering purposes. + * + * The rules used to determine if an event falls within the specified + * time-range is based on the CalDAV specification. + * + * @param DateTime $start + * @param DateTime $end + * @return bool + */ + public function isInTimeRange(DateTime $start, DateTime $end) { + + $effectiveTrigger = $this->getEffectiveTriggerTime(); + + if (isset($this->DURATION)) { + $duration = Sabre_VObject_DateTimeParser::parseDuration($this->DURATION); + $repeat = (string)$this->repeat; + if (!$repeat) { + $repeat = 1; + } + + $period = new DatePeriod($effectiveTrigger, $duration, (int)$repeat); + + foreach($period as $occurrence) { + + if ($start <= $occurrence && $end > $occurrence) { + return true; + } + } + return false; + } else { + return ($start <= $effectiveTrigger && $end > $effectiveTrigger); + } + + } + +} + +?> diff --git a/3rdparty/Sabre/VObject/Component/VCalendar.php b/3rdparty/Sabre/VObject/Component/VCalendar.php new file mode 100755 index 00000000000..f3be29afdbb --- /dev/null +++ b/3rdparty/Sabre/VObject/Component/VCalendar.php @@ -0,0 +1,133 @@ +children as $component) { + + if (!$component instanceof Sabre_VObject_Component) + continue; + + if (isset($component->{'RECURRENCE-ID'})) + continue; + + if ($componentName && $component->name !== strtoupper($componentName)) + continue; + + if ($component->name === 'VTIMEZONE') + continue; + + $components[] = $component; + + } + + return $components; + + } + + /** + * If this calendar object, has events with recurrence rules, this method + * can be used to expand the event into multiple sub-events. + * + * Each event will be stripped from it's recurrence information, and only + * the instances of the event in the specified timerange will be left + * alone. + * + * In addition, this method will cause timezone information to be stripped, + * and normalized to UTC. + * + * This method will alter the VCalendar. This cannot be reversed. + * + * This functionality is specifically used by the CalDAV standard. It is + * possible for clients to request expand events, if they are rather simple + * clients and do not have the possibility to calculate recurrences. + * + * @param DateTime $start + * @param DateTime $end + * @return void + */ + public function expand(DateTime $start, DateTime $end) { + + $newEvents = array(); + + foreach($this->select('VEVENT') as $key=>$vevent) { + + if (isset($vevent->{'RECURRENCE-ID'})) { + unset($this->children[$key]); + continue; + } + + + if (!$vevent->rrule) { + unset($this->children[$key]); + if ($vevent->isInTimeRange($start, $end)) { + $newEvents[] = $vevent; + } + continue; + } + + $uid = (string)$vevent->uid; + if (!$uid) { + throw new LogicException('Event did not have a UID!'); + } + + $it = new Sabre_VObject_RecurrenceIterator($this, $vevent->uid); + $it->fastForward($start); + + while($it->valid() && $it->getDTStart() < $end) { + + if ($it->getDTEnd() > $start) { + + $newEvents[] = $it->getEventObject(); + + } + $it->next(); + + } + unset($this->children[$key]); + + } + + foreach($newEvents as $newEvent) { + + foreach($newEvent->children as $child) { + if ($child instanceof Sabre_VObject_Property_DateTime && + $child->getDateType() == Sabre_VObject_Property_DateTime::LOCALTZ) { + $child->setDateTime($child->getDateTime(),Sabre_VObject_Property_DateTime::UTC); + } + } + + $this->add($newEvent); + + } + + // Removing all VTIMEZONE components + unset($this->VTIMEZONE); + + } + +} + diff --git a/3rdparty/Sabre/VObject/Component/VEvent.php b/3rdparty/Sabre/VObject/Component/VEvent.php new file mode 100755 index 00000000000..d6b910874d0 --- /dev/null +++ b/3rdparty/Sabre/VObject/Component/VEvent.php @@ -0,0 +1,71 @@ +RRULE) { + $it = new Sabre_VObject_RecurrenceIterator($this); + $it->fastForward($start); + + // We fast-forwarded to a spot where the end-time of the + // recurrence instance exceeded the start of the requested + // time-range. + // + // If the starttime of the recurrence did not exceed the + // end of the time range as well, we have a match. + return ($it->getDTStart() < $end && $it->getDTEnd() > $start); + + } + + $effectiveStart = $this->DTSTART->getDateTime(); + if (isset($this->DTEND)) { + + // The DTEND property is considered non inclusive. So for a 3 day + // event in july, dtstart and dtend would have to be July 1st and + // July 4th respectively. + // + // See: + // http://tools.ietf.org/html/rfc5545#page-54 + $effectiveEnd = $this->DTEND->getDateTime(); + + } elseif (isset($this->DURATION)) { + $effectiveEnd = clone $effectiveStart; + $effectiveEnd->add( Sabre_VObject_DateTimeParser::parseDuration($this->DURATION) ); + } elseif ($this->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE) { + $effectiveEnd = clone $effectiveStart; + $effectiveEnd->modify('+1 day'); + } else { + $effectiveEnd = clone $effectiveStart; + } + return ( + ($start <= $effectiveEnd) && ($end > $effectiveStart) + ); + + } + +} + +?> diff --git a/3rdparty/Sabre/VObject/Component/VJournal.php b/3rdparty/Sabre/VObject/Component/VJournal.php new file mode 100755 index 00000000000..22b3ec921e5 --- /dev/null +++ b/3rdparty/Sabre/VObject/Component/VJournal.php @@ -0,0 +1,46 @@ +DTSTART)?$this->DTSTART->getDateTime():null; + if ($dtstart) { + $effectiveEnd = clone $dtstart; + if ($this->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE) { + $effectiveEnd->modify('+1 day'); + } + + return ($start <= $effectiveEnd && $end > $dtstart); + + } + return false; + + + } + +} + +?> diff --git a/3rdparty/Sabre/VObject/Component/VTodo.php b/3rdparty/Sabre/VObject/Component/VTodo.php new file mode 100755 index 00000000000..79d06298d7f --- /dev/null +++ b/3rdparty/Sabre/VObject/Component/VTodo.php @@ -0,0 +1,68 @@ +DTSTART)?$this->DTSTART->getDateTime():null; + $duration = isset($this->DURATION)?Sabre_VObject_DateTimeParser::parseDuration($this->DURATION):null; + $due = isset($this->DUE)?$this->DUE->getDateTime():null; + $completed = isset($this->COMPLETED)?$this->COMPLETED->getDateTime():null; + $created = isset($this->CREATED)?$this->CREATED->getDateTime():null; + + if ($dtstart) { + if ($duration) { + $effectiveEnd = clone $dtstart; + $effectiveEnd->add($duration); + return $start <= $effectiveEnd && $end > $dtstart; + } elseif ($due) { + return + ($start < $due || $start <= $dtstart) && + ($end > $dtstart || $end >= $due); + } else { + return $start <= $dtstart && $end > $dtstart; + } + } + if ($due) { + return ($start < $due && $end >= $due); + } + if ($completed && $created) { + return + ($start <= $created || $start <= $completed) && + ($end >= $created || $end >= $completed); + } + if ($completed) { + return ($start <= $completed && $end >= $completed); + } + if ($created) { + return ($end > $created); + } + return true; + + } + +} + +?> diff --git a/3rdparty/Sabre/VObject/DateTimeParser.php b/3rdparty/Sabre/VObject/DateTimeParser.php new file mode 100755 index 00000000000..23a4bb69916 --- /dev/null +++ b/3rdparty/Sabre/VObject/DateTimeParser.php @@ -0,0 +1,181 @@ +setTimeZone(new DateTimeZone('UTC')); + return $date; + + } + + /** + * Parses an iCalendar (rfc5545) formatted date and returns a DateTime object + * + * @param string $date + * @return DateTime + */ + static public function parseDate($date) { + + // Format is YYYYMMDD + $result = preg_match('/^([1-3][0-9]{3})([0-1][0-9])([0-3][0-9])$/',$date,$matches); + + if (!$result) { + throw new Sabre_DAV_Exception_BadRequest('The supplied iCalendar date value is incorrect: ' . $date); + } + + $date = new DateTime($matches[1] . '-' . $matches[2] . '-' . $matches[3], new DateTimeZone('UTC')); + return $date; + + } + + /** + * Parses an iCalendar (RFC5545) formatted duration value. + * + * This method will either return a DateTimeInterval object, or a string + * suitable for strtotime or DateTime::modify. + * + * @param string $duration + * @param bool $asString + * @return DateInterval|string + */ + static public function parseDuration($duration, $asString = false) { + + $result = preg_match('/^(?P\+|-)?P((?P\d+)W)?((?P\d+)D)?(T((?P\d+)H)?((?P\d+)M)?((?P\d+)S)?)?$/', $duration, $matches); + if (!$result) { + throw new Sabre_DAV_Exception_BadRequest('The supplied iCalendar duration value is incorrect: ' . $duration); + } + + if (!$asString) { + $invert = false; + if ($matches['plusminus']==='-') { + $invert = true; + } + + + $parts = array( + 'week', + 'day', + 'hour', + 'minute', + 'second', + ); + foreach($parts as $part) { + $matches[$part] = isset($matches[$part])&&$matches[$part]?(int)$matches[$part]:0; + } + + + // We need to re-construct the $duration string, because weeks and + // days are not supported by DateInterval in the same string. + $duration = 'P'; + $days = $matches['day']; + if ($matches['week']) { + $days+=$matches['week']*7; + } + if ($days) + $duration.=$days . 'D'; + + if ($matches['minute'] || $matches['second'] || $matches['hour']) { + $duration.='T'; + + if ($matches['hour']) + $duration.=$matches['hour'].'H'; + + if ($matches['minute']) + $duration.=$matches['minute'].'M'; + + if ($matches['second']) + $duration.=$matches['second'].'S'; + + } + + if ($duration==='P') { + $duration = 'PT0S'; + } + $iv = new DateInterval($duration); + if ($invert) $iv->invert = true; + + return $iv; + + } + + + + $parts = array( + 'week', + 'day', + 'hour', + 'minute', + 'second', + ); + + $newDur = ''; + foreach($parts as $part) { + if (isset($matches[$part]) && $matches[$part]) { + $newDur.=' '.$matches[$part] . ' ' . $part . 's'; + } + } + + $newDur = ($matches['plusminus']==='-'?'-':'+') . trim($newDur); + if ($newDur === '+') { $newDur = '+0 seconds'; }; + return $newDur; + + } + + /** + * Parses either a Date or DateTime, or Duration value. + * + * @param string $date + * @param DateTimeZone|string $referenceTZ + * @return DateTime|DateInterval + */ + static public function parse($date, $referenceTZ = null) { + + if ($date[0]==='P' || ($date[0]==='-' && $date[1]==='P')) { + return self::parseDuration($date); + } elseif (strlen($date)===8) { + return self::parseDate($date); + } else { + return self::parseDateTime($date, $referenceTZ); + } + + } + + +} diff --git a/3rdparty/Sabre/VObject/Element.php b/3rdparty/Sabre/VObject/Element.php new file mode 100755 index 00000000000..e20ff0b353c --- /dev/null +++ b/3rdparty/Sabre/VObject/Element.php @@ -0,0 +1,16 @@ +vevent where there's multiple VEVENT objects. + * + * @package Sabre + * @subpackage VObject + * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved. + * @author Evert Pot (http://www.rooftopsolutions.nl/) + * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License + */ +class Sabre_VObject_ElementList implements Iterator, Countable, ArrayAccess { + + /** + * Inner elements + * + * @var array + */ + protected $elements = array(); + + /** + * Creates the element list. + * + * @param array $elements + */ + public function __construct(array $elements) { + + $this->elements = $elements; + + } + + /* {{{ Iterator interface */ + + /** + * Current position + * + * @var int + */ + private $key = 0; + + /** + * Returns current item in iteration + * + * @return Sabre_VObject_Element + */ + public function current() { + + return $this->elements[$this->key]; + + } + + /** + * To the next item in the iterator + * + * @return void + */ + public function next() { + + $this->key++; + + } + + /** + * Returns the current iterator key + * + * @return int + */ + public function key() { + + return $this->key; + + } + + /** + * Returns true if the current position in the iterator is a valid one + * + * @return bool + */ + public function valid() { + + return isset($this->elements[$this->key]); + + } + + /** + * Rewinds the iterator + * + * @return void + */ + public function rewind() { + + $this->key = 0; + + } + + /* }}} */ + + /* {{{ Countable interface */ + + /** + * Returns the number of elements + * + * @return int + */ + public function count() { + + return count($this->elements); + + } + + /* }}} */ + + /* {{{ ArrayAccess Interface */ + + + /** + * Checks if an item exists through ArrayAccess. + * + * @param int $offset + * @return bool + */ + public function offsetExists($offset) { + + return isset($this->elements[$offset]); + + } + + /** + * Gets an item through ArrayAccess. + * + * @param int $offset + * @return mixed + */ + public function offsetGet($offset) { + + return $this->elements[$offset]; + + } + + /** + * Sets an item through ArrayAccess. + * + * @param int $offset + * @param mixed $value + * @return void + */ + public function offsetSet($offset,$value) { + + throw new LogicException('You can not add new objects to an ElementList'); + + } + + /** + * Sets an item through ArrayAccess. + * + * This method just forwards the request to the inner iterator + * + * @param int $offset + * @return void + */ + public function offsetUnset($offset) { + + throw new LogicException('You can not remove objects from an ElementList'); + + } + + /* }}} */ + +} diff --git a/3rdparty/Sabre/VObject/FreeBusyGenerator.php b/3rdparty/Sabre/VObject/FreeBusyGenerator.php new file mode 100755 index 00000000000..1c96a64a004 --- /dev/null +++ b/3rdparty/Sabre/VObject/FreeBusyGenerator.php @@ -0,0 +1,297 @@ +baseObject = $vcalendar; + + } + + /** + * Sets the input objects + * + * Every object must either be a string or a Sabre_VObject_Component. + * + * @param array $objects + * @return void + */ + public function setObjects(array $objects) { + + $this->objects = array(); + foreach($objects as $object) { + + if (is_string($object)) { + $this->objects[] = Sabre_VObject_Reader::read($object); + } elseif ($object instanceof Sabre_VObject_Component) { + $this->objects[] = $object; + } else { + throw new InvalidArgumentException('You can only pass strings or Sabre_VObject_Component arguments to setObjects'); + } + + } + + } + + /** + * Sets the time range + * + * Any freebusy object falling outside of this time range will be ignored. + * + * @param DateTime $start + * @param DateTime $end + * @return void + */ + public function setTimeRange(DateTime $start = null, DateTime $end = null) { + + $this->start = $start; + $this->end = $end; + + } + + /** + * Parses the input data and returns a correct VFREEBUSY object, wrapped in + * a VCALENDAR. + * + * @return Sabre_VObject_Component + */ + public function getResult() { + + $busyTimes = array(); + + foreach($this->objects as $object) { + + foreach($object->getBaseComponents() as $component) { + + switch($component->name) { + + case 'VEVENT' : + + $FBTYPE = 'BUSY'; + if (isset($component->TRANSP) && (strtoupper($component->TRANSP) === 'TRANSPARENT')) { + break; + } + if (isset($component->STATUS)) { + $status = strtoupper($component->STATUS); + if ($status==='CANCELLED') { + break; + } + if ($status==='TENTATIVE') { + $FBTYPE = 'BUSY-TENTATIVE'; + } + } + + $times = array(); + + if ($component->RRULE) { + + $iterator = new Sabre_VObject_RecurrenceIterator($object, (string)$component->uid); + if ($this->start) { + $iterator->fastForward($this->start); + } + + $maxRecurrences = 200; + + while($iterator->valid() && --$maxRecurrences) { + + $startTime = $iterator->getDTStart(); + if ($this->end && $startTime > $this->end) { + break; + } + $times[] = array( + $iterator->getDTStart(), + $iterator->getDTEnd(), + ); + + $iterator->next(); + + } + + } else { + + $startTime = $component->DTSTART->getDateTime(); + if ($this->end && $startTime > $this->end) { + break; + } + $endTime = null; + if (isset($component->DTEND)) { + $endTime = $component->DTEND->getDateTime(); + } elseif (isset($component->DURATION)) { + $duration = Sabre_VObject_DateTimeParser::parseDuration((string)$component->DURATION); + $endTime = clone $startTime; + $endTime->add($duration); + } elseif ($component->DTSTART->getDateType() === Sabre_VObject_Property_DateTime::DATE) { + $endTime = clone $startTime; + $endTime->modify('+1 day'); + } else { + // The event had no duration (0 seconds) + break; + } + + $times[] = array($startTime, $endTime); + + } + + foreach($times as $time) { + + if ($this->end && $time[0] > $this->end) break; + if ($this->start && $time[1] < $this->start) break; + + $busyTimes[] = array( + $time[0], + $time[1], + $FBTYPE, + ); + } + break; + + case 'VFREEBUSY' : + foreach($component->FREEBUSY as $freebusy) { + + $fbType = isset($freebusy['FBTYPE'])?strtoupper($freebusy['FBTYPE']):'BUSY'; + + // Skipping intervals marked as 'free' + if ($fbType==='FREE') + continue; + + $values = explode(',', $freebusy); + foreach($values as $value) { + list($startTime, $endTime) = explode('/', $value); + $startTime = Sabre_VObject_DateTimeParser::parseDateTime($startTime); + + if (substr($endTime,0,1)==='P' || substr($endTime,0,2)==='-P') { + $duration = Sabre_VObject_DateTimeParser::parseDuration($endTime); + $endTime = clone $startTime; + $endTime->add($duration); + } else { + $endTime = Sabre_VObject_DateTimeParser::parseDateTime($endTime); + } + + if($this->start && $this->start > $endTime) continue; + if($this->end && $this->end < $startTime) continue; + $busyTimes[] = array( + $startTime, + $endTime, + $fbType + ); + + } + + + } + break; + + + + } + + + } + + } + + if ($this->baseObject) { + $calendar = $this->baseObject; + } else { + $calendar = new Sabre_VObject_Component('VCALENDAR'); + $calendar->version = '2.0'; + if (Sabre_DAV_Server::$exposeVersion) { + $calendar->prodid = '-//SabreDAV//Sabre VObject ' . Sabre_VObject_Version::VERSION . '//EN'; + } else { + $calendar->prodid = '-//SabreDAV//Sabre VObject//EN'; + } + $calendar->calscale = 'GREGORIAN'; + } + + $vfreebusy = new Sabre_VObject_Component('VFREEBUSY'); + $calendar->add($vfreebusy); + + if ($this->start) { + $dtstart = new Sabre_VObject_Property_DateTime('DTSTART'); + $dtstart->setDateTime($this->start,Sabre_VObject_Property_DateTime::UTC); + $vfreebusy->add($dtstart); + } + if ($this->end) { + $dtend = new Sabre_VObject_Property_DateTime('DTEND'); + $dtend->setDateTime($this->start,Sabre_VObject_Property_DateTime::UTC); + $vfreebusy->add($dtend); + } + $dtstamp = new Sabre_VObject_Property_DateTime('DTSTAMP'); + $dtstamp->setDateTime(new DateTime('now'), Sabre_VObject_Property_DateTime::UTC); + $vfreebusy->add($dtstamp); + + foreach($busyTimes as $busyTime) { + + $busyTime[0]->setTimeZone(new DateTimeZone('UTC')); + $busyTime[1]->setTimeZone(new DateTimeZone('UTC')); + + $prop = new Sabre_VObject_Property( + 'FREEBUSY', + $busyTime[0]->format('Ymd\\THis\\Z') . '/' . $busyTime[1]->format('Ymd\\THis\\Z') + ); + $prop['FBTYPE'] = $busyTime[2]; + $vfreebusy->add($prop); + + } + + return $calendar; + + } + +} + diff --git a/3rdparty/Sabre/VObject/Node.php b/3rdparty/Sabre/VObject/Node.php new file mode 100755 index 00000000000..d89e01b56c6 --- /dev/null +++ b/3rdparty/Sabre/VObject/Node.php @@ -0,0 +1,149 @@ +iterator)) + return $this->iterator; + + return new Sabre_VObject_ElementList(array($this)); + + } + + /** + * Sets the overridden iterator + * + * Note that this is not actually part of the iterator interface + * + * @param Sabre_VObject_ElementList $iterator + * @return void + */ + public function setIterator(Sabre_VObject_ElementList $iterator) { + + $this->iterator = $iterator; + + } + + /* }}} */ + + /* {{{ Countable interface */ + + /** + * Returns the number of elements + * + * @return int + */ + public function count() { + + $it = $this->getIterator(); + return $it->count(); + + } + + /* }}} */ + + /* {{{ ArrayAccess Interface */ + + + /** + * Checks if an item exists through ArrayAccess. + * + * This method just forwards the request to the inner iterator + * + * @param int $offset + * @return bool + */ + public function offsetExists($offset) { + + $iterator = $this->getIterator(); + return $iterator->offsetExists($offset); + + } + + /** + * Gets an item through ArrayAccess. + * + * This method just forwards the request to the inner iterator + * + * @param int $offset + * @return mixed + */ + public function offsetGet($offset) { + + $iterator = $this->getIterator(); + return $iterator->offsetGet($offset); + + } + + /** + * Sets an item through ArrayAccess. + * + * This method just forwards the request to the inner iterator + * + * @param int $offset + * @param mixed $value + * @return void + */ + public function offsetSet($offset,$value) { + + $iterator = $this->getIterator(); + return $iterator->offsetSet($offset,$value); + + } + + /** + * Sets an item through ArrayAccess. + * + * This method just forwards the request to the inner iterator + * + * @param int $offset + * @return void + */ + public function offsetUnset($offset) { + + $iterator = $this->getIterator(); + return $iterator->offsetUnset($offset); + + } + + /* }}} */ + +} diff --git a/3rdparty/Sabre/VObject/Parameter.php b/3rdparty/Sabre/VObject/Parameter.php new file mode 100755 index 00000000000..2e39af5f78a --- /dev/null +++ b/3rdparty/Sabre/VObject/Parameter.php @@ -0,0 +1,84 @@ +name = strtoupper($name); + $this->value = $value; + + } + + /** + * Turns the object back into a serialized blob. + * + * @return string + */ + public function serialize() { + + if (is_null($this->value)) { + return $this->name; + } + $src = array( + '\\', + "\n", + ';', + ',', + ); + $out = array( + '\\\\', + '\n', + '\;', + '\,', + ); + + return $this->name . '=' . str_replace($src, $out, $this->value); + + } + + /** + * Called when this object is being cast to a string + * + * @return string + */ + public function __toString() { + + return $this->value; + + } + +} diff --git a/3rdparty/Sabre/VObject/ParseException.php b/3rdparty/Sabre/VObject/ParseException.php new file mode 100755 index 00000000000..1b5e95bf16e --- /dev/null +++ b/3rdparty/Sabre/VObject/ParseException.php @@ -0,0 +1,12 @@ + 'Sabre_VObject_Property_DateTime', + 'CREATED' => 'Sabre_VObject_Property_DateTime', + 'DTEND' => 'Sabre_VObject_Property_DateTime', + 'DTSTAMP' => 'Sabre_VObject_Property_DateTime', + 'DTSTART' => 'Sabre_VObject_Property_DateTime', + 'DUE' => 'Sabre_VObject_Property_DateTime', + 'EXDATE' => 'Sabre_VObject_Property_MultiDateTime', + 'LAST-MODIFIED' => 'Sabre_VObject_Property_DateTime', + 'RECURRENCE-ID' => 'Sabre_VObject_Property_DateTime', + 'TRIGGER' => 'Sabre_VObject_Property_DateTime', + ); + + /** + * Creates the new property by name, but in addition will also see if + * there's a class mapped to the property name. + * + * @param string $name + * @param string $value + * @return void + */ + static public function create($name, $value = null) { + + $name = strtoupper($name); + $shortName = $name; + $group = null; + if (strpos($shortName,'.')!==false) { + list($group, $shortName) = explode('.', $shortName); + } + + if (isset(self::$classMap[$shortName])) { + return new self::$classMap[$shortName]($name, $value); + } else { + return new self($name, $value); + } + + } + + /** + * Creates a new property object + * + * By default this object will iterate over its own children, but this can + * be overridden with the iterator argument + * + * @param string $name + * @param string $value + * @param Sabre_VObject_ElementList $iterator + */ + public function __construct($name, $value = null, $iterator = null) { + + $name = strtoupper($name); + $group = null; + if (strpos($name,'.')!==false) { + list($group, $name) = explode('.', $name); + } + $this->name = $name; + $this->group = $group; + if (!is_null($iterator)) $this->iterator = $iterator; + $this->setValue($value); + + } + + + + /** + * Updates the internal value + * + * @param string $value + * @return void + */ + public function setValue($value) { + + $this->value = $value; + + } + + /** + * Turns the object back into a serialized blob. + * + * @return string + */ + public function serialize() { + + $str = $this->name; + if ($this->group) $str = $this->group . '.' . $this->name; + + if (count($this->parameters)) { + foreach($this->parameters as $param) { + + $str.=';' . $param->serialize(); + + } + } + $src = array( + '\\', + "\n", + ); + $out = array( + '\\\\', + '\n', + ); + $str.=':' . str_replace($src, $out, $this->value); + + $out = ''; + while(strlen($str)>0) { + if (strlen($str)>75) { + $out.= mb_strcut($str,0,75,'utf-8') . "\r\n"; + $str = ' ' . mb_strcut($str,75,strlen($str),'utf-8'); + } else { + $out.=$str . "\r\n"; + $str=''; + break; + } + } + + return $out; + + } + + /** + * Adds a new componenten or element + * + * You can call this method with the following syntaxes: + * + * add(Sabre_VObject_Parameter $element) + * add(string $name, $value) + * + * The first version adds an Parameter + * The second adds a property as a string. + * + * @param mixed $item + * @param mixed $itemValue + * @return void + */ + public function add($item, $itemValue = null) { + + if ($item instanceof Sabre_VObject_Parameter) { + if (!is_null($itemValue)) { + throw new InvalidArgumentException('The second argument must not be specified, when passing a VObject'); + } + $item->parent = $this; + $this->parameters[] = $item; + } elseif(is_string($item)) { + + if (!is_scalar($itemValue) && !is_null($itemValue)) { + throw new InvalidArgumentException('The second argument must be scalar'); + } + $parameter = new Sabre_VObject_Parameter($item,$itemValue); + $parameter->parent = $this; + $this->parameters[] = $parameter; + + } else { + + throw new InvalidArgumentException('The first argument must either be a Sabre_VObject_Element or a string'); + + } + + } + + /* ArrayAccess interface {{{ */ + + /** + * Checks if an array element exists + * + * @param mixed $name + * @return bool + */ + public function offsetExists($name) { + + if (is_int($name)) return parent::offsetExists($name); + + $name = strtoupper($name); + + foreach($this->parameters as $parameter) { + if ($parameter->name == $name) return true; + } + return false; + + } + + /** + * Returns a parameter, or parameter list. + * + * @param string $name + * @return Sabre_VObject_Element + */ + public function offsetGet($name) { + + if (is_int($name)) return parent::offsetGet($name); + $name = strtoupper($name); + + $result = array(); + foreach($this->parameters as $parameter) { + if ($parameter->name == $name) + $result[] = $parameter; + } + + if (count($result)===0) { + return null; + } elseif (count($result)===1) { + return $result[0]; + } else { + $result[0]->setIterator(new Sabre_VObject_ElementList($result)); + return $result[0]; + } + + } + + /** + * Creates a new parameter + * + * @param string $name + * @param mixed $value + * @return void + */ + public function offsetSet($name, $value) { + + if (is_int($name)) return parent::offsetSet($name, $value); + + if (is_scalar($value)) { + if (!is_string($name)) + throw new InvalidArgumentException('A parameter name must be specified. This means you cannot use the $array[]="string" to add parameters.'); + + $this->offsetUnset($name); + $parameter = new Sabre_VObject_Parameter($name, $value); + $parameter->parent = $this; + $this->parameters[] = $parameter; + + } elseif ($value instanceof Sabre_VObject_Parameter) { + if (!is_null($name)) + throw new InvalidArgumentException('Don\'t specify a parameter name if you\'re passing a Sabre_VObject_Parameter. Add using $array[]=$parameterObject.'); + + $value->parent = $this; + $this->parameters[] = $value; + } else { + throw new InvalidArgumentException('You can only add parameters to the property object'); + } + + } + + /** + * Removes one or more parameters with the specified name + * + * @param string $name + * @return void + */ + public function offsetUnset($name) { + + if (is_int($name)) return parent::offsetUnset($name); + $name = strtoupper($name); + + foreach($this->parameters as $key=>$parameter) { + if ($parameter->name == $name) { + $parameter->parent = null; + unset($this->parameters[$key]); + } + + } + + } + + /* }}} */ + + /** + * Called when this object is being cast to a string + * + * @return string + */ + public function __toString() { + + return (string)$this->value; + + } + + /** + * This method is automatically called when the object is cloned. + * Specifically, this will ensure all child elements are also cloned. + * + * @return void + */ + public function __clone() { + + foreach($this->parameters as $key=>$child) { + $this->parameters[$key] = clone $child; + $this->parameters[$key]->parent = $this; + } + + } + +} diff --git a/3rdparty/Sabre/VObject/Property/DateTime.php b/3rdparty/Sabre/VObject/Property/DateTime.php new file mode 100755 index 00000000000..fe2372caa81 --- /dev/null +++ b/3rdparty/Sabre/VObject/Property/DateTime.php @@ -0,0 +1,260 @@ +setValue($dt->format('Ymd\\THis')); + $this->offsetUnset('VALUE'); + $this->offsetUnset('TZID'); + $this->offsetSet('VALUE','DATE-TIME'); + break; + case self::UTC : + $dt->setTimeZone(new DateTimeZone('UTC')); + $this->setValue($dt->format('Ymd\\THis\\Z')); + $this->offsetUnset('VALUE'); + $this->offsetUnset('TZID'); + $this->offsetSet('VALUE','DATE-TIME'); + break; + case self::LOCALTZ : + $this->setValue($dt->format('Ymd\\THis')); + $this->offsetUnset('VALUE'); + $this->offsetUnset('TZID'); + $this->offsetSet('VALUE','DATE-TIME'); + $this->offsetSet('TZID', $dt->getTimeZone()->getName()); + break; + case self::DATE : + $this->setValue($dt->format('Ymd')); + $this->offsetUnset('VALUE'); + $this->offsetUnset('TZID'); + $this->offsetSet('VALUE','DATE'); + break; + default : + throw new InvalidArgumentException('You must pass a valid dateType constant'); + + } + $this->dateTime = $dt; + $this->dateType = $dateType; + + } + + /** + * Returns the current DateTime value. + * + * If no value was set, this method returns null. + * + * @return DateTime|null + */ + public function getDateTime() { + + if ($this->dateTime) + return $this->dateTime; + + list( + $this->dateType, + $this->dateTime + ) = self::parseData($this->value, $this); + return $this->dateTime; + + } + + /** + * Returns the type of Date format. + * + * This method returns one of the format constants. If no date was set, + * this method will return null. + * + * @return int|null + */ + public function getDateType() { + + if ($this->dateType) + return $this->dateType; + + list( + $this->dateType, + $this->dateTime, + ) = self::parseData($this->value, $this); + return $this->dateType; + + } + + /** + * Parses the internal data structure to figure out what the current date + * and time is. + * + * The returned array contains two elements: + * 1. A 'DateType' constant (as defined on this class), or null. + * 2. A DateTime object (or null) + * + * @param string|null $propertyValue The string to parse (yymmdd or + * ymmddThhmmss, etc..) + * @param Sabre_VObject_Property|null $property The instance of the + * property we're parsing. + * @return array + */ + static public function parseData($propertyValue, Sabre_VObject_Property $property = null) { + + if (is_null($propertyValue)) { + return array(null, null); + } + + $date = '(?P[1-2][0-9]{3})(?P[0-1][0-9])(?P[0-3][0-9])'; + $time = '(?P[0-2][0-9])(?P[0-5][0-9])(?P[0-5][0-9])'; + $regex = "/^$date(T$time(?PZ)?)?$/"; + + if (!preg_match($regex, $propertyValue, $matches)) { + throw new InvalidArgumentException($propertyValue . ' is not a valid DateTime or Date string'); + } + + if (!isset($matches['hour'])) { + // Date-only + return array( + self::DATE, + new DateTime($matches['year'] . '-' . $matches['month'] . '-' . $matches['date'] . ' 00:00:00'), + ); + } + + $dateStr = + $matches['year'] .'-' . + $matches['month'] . '-' . + $matches['date'] . ' ' . + $matches['hour'] . ':' . + $matches['minute'] . ':' . + $matches['second']; + + if (isset($matches['isutc'])) { + $dt = new DateTime($dateStr,new DateTimeZone('UTC')); + $dt->setTimeZone(new DateTimeZone('UTC')); + return array( + self::UTC, + $dt + ); + } + + // Finding the timezone. + $tzid = $property['TZID']; + if (!$tzid) { + return array( + self::LOCAL, + new DateTime($dateStr) + ); + } + + try { + // tzid an Olson identifier? + $tz = new DateTimeZone($tzid->value); + } catch (Exception $e) { + + // Not an Olson id, we're going to try to find the information + // through the time zone name map. + $newtzid = Sabre_VObject_WindowsTimezoneMap::lookup($tzid->value); + if (is_null($newtzid)) { + + // Not a well known time zone name either, we're going to try + // to find the information through the VTIMEZONE object. + + // First we find the root object + $root = $property; + while($root->parent) { + $root = $root->parent; + } + + if (isset($root->VTIMEZONE)) { + foreach($root->VTIMEZONE as $vtimezone) { + if (((string)$vtimezone->TZID) == $tzid) { + if (isset($vtimezone->{'X-LIC-LOCATION'})) { + $newtzid = (string)$vtimezone->{'X-LIC-LOCATION'}; + } else { + // No libical location specified. As a last resort we could + // try matching $vtimezone's DST rules against all known + // time zones returned by DateTimeZone::list* + + // TODO + } + } + } + } + } + + try { + $tz = new DateTimeZone($newtzid); + } catch (Exception $e) { + // If all else fails, we use the default PHP timezone + $tz = new DateTimeZone(date_default_timezone_get()); + } + } + $dt = new DateTime($dateStr, $tz); + $dt->setTimeZone($tz); + + return array( + self::LOCALTZ, + $dt + ); + + } + +} diff --git a/3rdparty/Sabre/VObject/Property/MultiDateTime.php b/3rdparty/Sabre/VObject/Property/MultiDateTime.php new file mode 100755 index 00000000000..ae53ab6a617 --- /dev/null +++ b/3rdparty/Sabre/VObject/Property/MultiDateTime.php @@ -0,0 +1,166 @@ +offsetUnset('VALUE'); + $this->offsetUnset('TZID'); + switch($dateType) { + + case Sabre_VObject_Property_DateTime::LOCAL : + $val = array(); + foreach($dt as $i) { + $val[] = $i->format('Ymd\\THis'); + } + $this->setValue(implode(',',$val)); + $this->offsetSet('VALUE','DATE-TIME'); + break; + case Sabre_VObject_Property_DateTime::UTC : + $val = array(); + foreach($dt as $i) { + $i->setTimeZone(new DateTimeZone('UTC')); + $val[] = $i->format('Ymd\\THis\\Z'); + } + $this->setValue(implode(',',$val)); + $this->offsetSet('VALUE','DATE-TIME'); + break; + case Sabre_VObject_Property_DateTime::LOCALTZ : + $val = array(); + foreach($dt as $i) { + $val[] = $i->format('Ymd\\THis'); + } + $this->setValue(implode(',',$val)); + $this->offsetSet('VALUE','DATE-TIME'); + $this->offsetSet('TZID', $dt[0]->getTimeZone()->getName()); + break; + case Sabre_VObject_Property_DateTime::DATE : + $val = array(); + foreach($dt as $i) { + $val[] = $i->format('Ymd'); + } + $this->setValue(implode(',',$val)); + $this->offsetSet('VALUE','DATE'); + break; + default : + throw new InvalidArgumentException('You must pass a valid dateType constant'); + + } + $this->dateTimes = $dt; + $this->dateType = $dateType; + + } + + /** + * Returns the current DateTime value. + * + * If no value was set, this method returns null. + * + * @return array|null + */ + public function getDateTimes() { + + if ($this->dateTimes) + return $this->dateTimes; + + $dts = array(); + + if (!$this->value) { + $this->dateTimes = null; + $this->dateType = null; + return null; + } + + foreach(explode(',',$this->value) as $val) { + list( + $type, + $dt + ) = Sabre_VObject_Property_DateTime::parseData($val, $this); + $dts[] = $dt; + $this->dateType = $type; + } + $this->dateTimes = $dts; + return $this->dateTimes; + + } + + /** + * Returns the type of Date format. + * + * This method returns one of the format constants. If no date was set, + * this method will return null. + * + * @return int|null + */ + public function getDateType() { + + if ($this->dateType) + return $this->dateType; + + if (!$this->value) { + $this->dateTimes = null; + $this->dateType = null; + return null; + } + + $dts = array(); + foreach(explode(',',$this->value) as $val) { + list( + $type, + $dt + ) = Sabre_VObject_Property_DateTime::parseData($val, $this); + $dts[] = $dt; + $this->dateType = $type; + } + $this->dateTimes = $dts; + return $this->dateType; + + } + +} diff --git a/3rdparty/Sabre/VObject/Reader.php b/3rdparty/Sabre/VObject/Reader.php new file mode 100755 index 00000000000..eea73fa3dce --- /dev/null +++ b/3rdparty/Sabre/VObject/Reader.php @@ -0,0 +1,183 @@ +add(self::readLine($lines)); + + $nextLine = current($lines); + + if ($nextLine===false) + throw new Sabre_VObject_ParseException('Invalid VObject. Document ended prematurely.'); + + } + + // Checking component name of the 'END:' line. + if (substr($nextLine,4)!==$obj->name) { + throw new Sabre_VObject_ParseException('Invalid VObject, expected: "END:' . $obj->name . '" got: "' . $nextLine . '"'); + } + next($lines); + + return $obj; + + } + + // Properties + //$result = preg_match('/(?P[A-Z0-9-]+)(?:;(?P^(?([^:^\"]|\"([^\"]*)\")*))?"; + $regex = "/^(?P$token)$parameters:(?P.*)$/i"; + + $result = preg_match($regex,$line,$matches); + + if (!$result) { + throw new Sabre_VObject_ParseException('Invalid VObject, line ' . ($lineNr+1) . ' did not follow the icalendar/vcard format'); + } + + $propertyName = strtoupper($matches['name']); + $propertyValue = preg_replace_callback('#(\\\\(\\\\|N|n|;|,))#',function($matches) { + if ($matches[2]==='n' || $matches[2]==='N') { + return "\n"; + } else { + return $matches[2]; + } + }, $matches['value']); + + $obj = Sabre_VObject_Property::create($propertyName, $propertyValue); + + if ($matches['parameters']) { + + foreach(self::readParameters($matches['parameters']) as $param) { + $obj->add($param); + } + + } + + return $obj; + + + } + + /** + * Reads a parameter list from a property + * + * This method returns an array of Sabre_VObject_Parameter + * + * @param string $parameters + * @return array + */ + static private function readParameters($parameters) { + + $token = '[A-Z0-9-]+'; + + $paramValue = '(?P[^\"^;]*|"[^"]*")'; + + $regex = "/(?<=^|;)(?P$token)(=$paramValue(?=$|;))?/i"; + preg_match_all($regex, $parameters, $matches, PREG_SET_ORDER); + + $params = array(); + foreach($matches as $match) { + + $value = isset($match['paramValue'])?$match['paramValue']:null; + + if (isset($value[0])) { + // Stripping quotes, if needed + if ($value[0] === '"') $value = substr($value,1,strlen($value)-2); + } else { + $value = ''; + } + + $value = preg_replace_callback('#(\\\\(\\\\|N|n|;|,))#',function($matches) { + if ($matches[2]==='n' || $matches[2]==='N') { + return "\n"; + } else { + return $matches[2]; + } + }, $value); + + $params[] = new Sabre_VObject_Parameter($match['paramName'], $value); + + } + + return $params; + + } + + +} diff --git a/3rdparty/Sabre/VObject/RecurrenceIterator.php b/3rdparty/Sabre/VObject/RecurrenceIterator.php new file mode 100755 index 00000000000..740270dd8f0 --- /dev/null +++ b/3rdparty/Sabre/VObject/RecurrenceIterator.php @@ -0,0 +1,1043 @@ + 0, + 'MO' => 1, + 'TU' => 2, + 'WE' => 3, + 'TH' => 4, + 'FR' => 5, + 'SA' => 6, + ); + + /** + * Mappings between the day number and english day name. + * + * @var array + */ + private $dayNames = array( + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + ); + + /** + * If the current iteration of the event is an overriden event, this + * property will hold the VObject + * + * @var Sabre_Component_VObject + */ + private $currentOverriddenEvent; + + /** + * This property may contain the date of the next not-overridden event. + * This date is calculated sometimes a bit early, before overridden events + * are evaluated. + * + * @var DateTime + */ + private $nextDate; + + /** + * Creates the iterator + * + * You should pass a VCALENDAR component, as well as the UID of the event + * we're going to traverse. + * + * @param Sabre_VObject_Component $vcal + * @param string|null $uid + */ + public function __construct(Sabre_VObject_Component $vcal, $uid=null) { + + if (is_null($uid)) { + if ($vcal->name === 'VCALENDAR') { + throw new InvalidArgumentException('If you pass a VCALENDAR object, you must pass a uid argument as well'); + } + $components = array($vcal); + $uid = (string)$vcal->uid; + } else { + $components = $vcal->select('VEVENT'); + } + foreach($components as $component) { + if ((string)$component->uid == $uid) { + if (isset($component->{'RECURRENCE-ID'})) { + $this->overriddenEvents[$component->DTSTART->getDateTime()->getTimeStamp()] = $component; + $this->overriddenDates[] = $component->{'RECURRENCE-ID'}->getDateTime(); + } else { + $this->baseEvent = $component; + } + } + } + if (!$this->baseEvent) { + throw new InvalidArgumentException('Could not find a base event with uid: ' . $uid); + } + + $this->startDate = clone $this->baseEvent->DTSTART->getDateTime(); + + $this->endDate = null; + if (isset($this->baseEvent->DTEND)) { + $this->endDate = clone $this->baseEvent->DTEND->getDateTime(); + } else { + $this->endDate = clone $this->startDate; + if (isset($this->baseEvent->DURATION)) { + $this->endDate->add(Sabre_VObject_DateTimeParser::parse($this->baseEvent->DURATION->value)); + } elseif ($this->baseEvent->DTSTART->getDateType()===Sabre_VObject_Property_DateTime::DATE) { + $this->endDate->modify('+1 day'); + } + } + $this->currentDate = clone $this->startDate; + + $rrule = (string)$this->baseEvent->RRULE; + + $parts = explode(';', $rrule); + + foreach($parts as $part) { + + list($key, $value) = explode('=', $part, 2); + + switch(strtoupper($key)) { + + case 'FREQ' : + if (!in_array( + strtolower($value), + array('secondly','minutely','hourly','daily','weekly','monthly','yearly') + )) { + throw new InvalidArgumentException('Unknown value for FREQ=' . strtoupper($value)); + + } + $this->frequency = strtolower($value); + break; + + case 'UNTIL' : + $this->until = Sabre_VObject_DateTimeParser::parse($value); + break; + + case 'COUNT' : + $this->count = (int)$value; + break; + + case 'INTERVAL' : + $this->interval = (int)$value; + break; + + case 'BYSECOND' : + $this->bySecond = explode(',', $value); + break; + + case 'BYMINUTE' : + $this->byMinute = explode(',', $value); + break; + + case 'BYHOUR' : + $this->byHour = explode(',', $value); + break; + + case 'BYDAY' : + $this->byDay = explode(',', strtoupper($value)); + break; + + case 'BYMONTHDAY' : + $this->byMonthDay = explode(',', $value); + break; + + case 'BYYEARDAY' : + $this->byYearDay = explode(',', $value); + break; + + case 'BYWEEKNO' : + $this->byWeekNo = explode(',', $value); + break; + + case 'BYMONTH' : + $this->byMonth = explode(',', $value); + break; + + case 'BYSETPOS' : + $this->bySetPos = explode(',', $value); + break; + + case 'WKST' : + $this->weekStart = strtoupper($value); + break; + + } + + } + + // Parsing exception dates + if (isset($this->baseEvent->EXDATE)) { + foreach($this->baseEvent->EXDATE as $exDate) { + + foreach(explode(',', (string)$exDate) as $exceptionDate) { + + $this->exceptionDates[] = + Sabre_VObject_DateTimeParser::parse($exceptionDate, $this->startDate->getTimeZone()); + + } + + } + + } + + } + + /** + * Returns the current item in the list + * + * @return DateTime + */ + public function current() { + + if (!$this->valid()) return null; + return clone $this->currentDate; + + } + + /** + * This method returns the startdate for the current iteration of the + * event. + * + * @return DateTime + */ + public function getDtStart() { + + if (!$this->valid()) return null; + return clone $this->currentDate; + + } + + /** + * This method returns the enddate for the current iteration of the + * event. + * + * @return DateTime + */ + public function getDtEnd() { + + if (!$this->valid()) return null; + $dtEnd = clone $this->currentDate; + $dtEnd->add( $this->startDate->diff( $this->endDate ) ); + return clone $dtEnd; + + } + + /** + * Returns a VEVENT object with the updated start and end date. + * + * Any recurrence information is removed, and this function may return an + * 'overridden' event instead. + * + * This method always returns a cloned instance. + * + * @return void + */ + public function getEventObject() { + + if ($this->currentOverriddenEvent) { + return clone $this->currentOverriddenEvent; + } + $event = clone $this->baseEvent; + unset($event->RRULE); + unset($event->EXDATE); + unset($event->RDATE); + unset($event->EXRULE); + + $event->DTSTART->setDateTime($this->getDTStart(), $event->DTSTART->getDateType()); + if (isset($event->DTEND)) { + $event->DTEND->setDateTime($this->getDtEnd(), $event->DTSTART->getDateType()); + } + if ($this->counter > 0) { + $event->{'RECURRENCE-ID'} = (string)$event->DTSTART; + } + + return $event; + + } + + /** + * Returns the current item number + * + * @return int + */ + public function key() { + + return $this->counter; + + } + + /** + * Whether or not there is a 'next item' + * + * @return bool + */ + public function valid() { + + if (!is_null($this->count)) { + return $this->counter < $this->count; + } + if (!is_null($this->until)) { + return $this->currentDate <= $this->until; + } + return true; + + } + + /** + * Resets the iterator + * + * @return void + */ + public function rewind() { + + $this->currentDate = clone $this->startDate; + $this->counter = 0; + + } + + /** + * This method allows you to quickly go to the next occurrence after the + * specified date. + * + * Note that this checks the current 'endDate', not the 'stardDate'. This + * means that if you forward to January 1st, the iterator will stop at the + * first event that ends *after* January 1st. + * + * @param DateTime $dt + * @return void + */ + public function fastForward(DateTime $dt) { + + while($this->valid() && $this->getDTEnd() <= $dt) { + $this->next(); + } + + } + + /** + * Goes on to the next iteration + * + * @return void + */ + public function next() { + + /* + if (!is_null($this->count) && $this->counter >= $this->count) { + $this->currentDate = null; + }*/ + + + $previousStamp = $this->currentDate->getTimeStamp(); + + while(true) { + + $this->currentOverriddenEvent = null; + + // If we have a next date 'stored', we use that + if ($this->nextDate) { + $this->currentDate = $this->nextDate; + $currentStamp = $this->currentDate->getTimeStamp(); + $this->nextDate = null; + } else { + + // Otherwise, we calculate it + switch($this->frequency) { + + case 'daily' : + $this->nextDaily(); + break; + + case 'weekly' : + $this->nextWeekly(); + break; + + case 'monthly' : + $this->nextMonthly(); + break; + + case 'yearly' : + $this->nextYearly(); + break; + + } + $currentStamp = $this->currentDate->getTimeStamp(); + + // Checking exception dates + foreach($this->exceptionDates as $exceptionDate) { + if ($this->currentDate == $exceptionDate) { + $this->counter++; + continue 2; + } + } + foreach($this->overriddenDates as $overriddenDate) { + if ($this->currentDate == $overriddenDate) { + continue 2; + } + } + + } + + // Checking overriden events + foreach($this->overriddenEvents as $index=>$event) { + if ($index > $previousStamp && $index <= $currentStamp) { + + // We're moving the 'next date' aside, for later use. + $this->nextDate = clone $this->currentDate; + + $this->currentDate = $event->DTSTART->getDateTime(); + $this->currentOverriddenEvent = $event; + + break; + } + } + + break; + + } + + /* + if (!is_null($this->until)) { + if($this->currentDate > $this->until) { + $this->currentDate = null; + } + }*/ + + $this->counter++; + + } + + /** + * Does the processing for advancing the iterator for daily frequency. + * + * @return void + */ + protected function nextDaily() { + + if (!$this->byDay) { + $this->currentDate->modify('+' . $this->interval . ' days'); + return; + } + + $recurrenceDays = array(); + foreach($this->byDay as $byDay) { + + // The day may be preceeded with a positive (+n) or + // negative (-n) integer. However, this does not make + // sense in 'weekly' so we ignore it here. + $recurrenceDays[] = $this->dayMap[substr($byDay,-2)]; + + } + + do { + + $this->currentDate->modify('+' . $this->interval . ' days'); + + // Current day of the week + $currentDay = $this->currentDate->format('w'); + + } while (!in_array($currentDay, $recurrenceDays)); + + } + + /** + * Does the processing for advancing the iterator for weekly frequency. + * + * @return void + */ + protected function nextWeekly() { + + if (!$this->byDay) { + $this->currentDate->modify('+' . $this->interval . ' weeks'); + return; + } + + $recurrenceDays = array(); + foreach($this->byDay as $byDay) { + + // The day may be preceeded with a positive (+n) or + // negative (-n) integer. However, this does not make + // sense in 'weekly' so we ignore it here. + $recurrenceDays[] = $this->dayMap[substr($byDay,-2)]; + + } + + // Current day of the week + $currentDay = $this->currentDate->format('w'); + + // First day of the week: + $firstDay = $this->dayMap[$this->weekStart]; + + $time = array( + $this->currentDate->format('H'), + $this->currentDate->format('i'), + $this->currentDate->format('s') + ); + + // Increasing the 'current day' until we find our next + // occurrence. + while(true) { + + $currentDay++; + + if ($currentDay>6) { + $currentDay = 0; + } + + // We need to roll over to the next week + if ($currentDay === $firstDay) { + $this->currentDate->modify('+' . $this->interval . ' weeks'); + + // We need to go to the first day of this week, but only if we + // are not already on this first day of this week. + if($this->currentDate->format('w') != $firstDay) { + $this->currentDate->modify('last ' . $this->dayNames[$this->dayMap[$this->weekStart]]); + $this->currentDate->setTime($time[0],$time[1],$time[2]); + } + } + + // We have a match + if (in_array($currentDay ,$recurrenceDays)) { + $this->currentDate->modify($this->dayNames[$currentDay]); + $this->currentDate->setTime($time[0],$time[1],$time[2]); + break; + } + + } + + } + + /** + * Does the processing for advancing the iterator for monthly frequency. + * + * @return void + */ + protected function nextMonthly() { + + $currentDayOfMonth = $this->currentDate->format('j'); + if (!$this->byMonthDay && !$this->byDay) { + + // If the current day is higher than the 28th, rollover can + // occur to the next month. We Must skip these invalid + // entries. + if ($currentDayOfMonth < 29) { + $this->currentDate->modify('+' . $this->interval . ' months'); + } else { + $increase = 0; + do { + $increase++; + $tempDate = clone $this->currentDate; + $tempDate->modify('+ ' . ($this->interval*$increase) . ' months'); + } while ($tempDate->format('j') != $currentDayOfMonth); + $this->currentDate = $tempDate; + } + return; + } + + while(true) { + + $occurrences = $this->getMonthlyOccurrences(); + + foreach($occurrences as $occurrence) { + + // The first occurrence thats higher than the current + // day of the month wins. + if ($occurrence > $currentDayOfMonth) { + break 2; + } + + } + + // If we made it all the way here, it means there were no + // valid occurrences, and we need to advance to the next + // month. + $this->currentDate->modify('first day of this month'); + $this->currentDate->modify('+ ' . $this->interval . ' months'); + + // This goes to 0 because we need to start counting at hte + // beginning. + $currentDayOfMonth = 0; + + } + + $this->currentDate->setDate($this->currentDate->format('Y'), $this->currentDate->format('n'), $occurrence); + + } + + /** + * Does the processing for advancing the iterator for yearly frequency. + * + * @return void + */ + protected function nextYearly() { + + $currentMonth = $this->currentDate->format('n'); + $currentYear = $this->currentDate->format('Y'); + $currentDayOfMonth = $this->currentDate->format('j'); + + // No sub-rules, so we just advance by year + if (!$this->byMonth) { + + // Unless it was a leap day! + if ($currentMonth==2 && $currentDayOfMonth==29) { + + $counter = 0; + do { + $counter++; + // Here we increase the year count by the interval, until + // we hit a date that's also in a leap year. + // + // We could just find the next interval that's dividable by + // 4, but that would ignore the rule that there's no leap + // year every year that's dividable by a 100, but not by + // 400. (1800, 1900, 2100). So we just rely on the datetime + // functions instead. + $nextDate = clone $this->currentDate; + $nextDate->modify('+ ' . ($this->interval*$counter) . ' years'); + } while ($nextDate->format('n')!=2); + $this->currentDate = $nextDate; + + return; + + } + + // The easiest form + $this->currentDate->modify('+' . $this->interval . ' years'); + return; + + } + + $currentMonth = $this->currentDate->format('n'); + $currentYear = $this->currentDate->format('Y'); + $currentDayOfMonth = $this->currentDate->format('j'); + + $advancedToNewMonth = false; + + // If we got a byDay or getMonthDay filter, we must first expand + // further. + if ($this->byDay || $this->byMonthDay) { + + while(true) { + + $occurrences = $this->getMonthlyOccurrences(); + + foreach($occurrences as $occurrence) { + + // The first occurrence that's higher than the current + // day of the month wins. + // If we advanced to the next month or year, the first + // occurence is always correct. + if ($occurrence > $currentDayOfMonth || $advancedToNewMonth) { + break 2; + } + + } + + // If we made it here, it means we need to advance to + // the next month or year. + $currentDayOfMonth = 1; + $advancedToNewMonth = true; + do { + + $currentMonth++; + if ($currentMonth>12) { + $currentYear+=$this->interval; + $currentMonth = 1; + } + } while (!in_array($currentMonth, $this->byMonth)); + + $this->currentDate->setDate($currentYear, $currentMonth, $currentDayOfMonth); + + } + + // If we made it here, it means we got a valid occurrence + $this->currentDate->setDate($currentYear, $currentMonth, $occurrence); + return; + + } else { + + // These are the 'byMonth' rules, if there are no byDay or + // byMonthDay sub-rules. + do { + + $currentMonth++; + if ($currentMonth>12) { + $currentYear+=$this->interval; + $currentMonth = 1; + } + } while (!in_array($currentMonth, $this->byMonth)); + $this->currentDate->setDate($currentYear, $currentMonth, $currentDayOfMonth); + + return; + + } + + } + + /** + * Returns all the occurrences for a monthly frequency with a 'byDay' or + * 'byMonthDay' expansion for the current month. + * + * The returned list is an array of integers with the day of month (1-31). + * + * @return array + */ + protected function getMonthlyOccurrences() { + + $startDate = clone $this->currentDate; + + $byDayResults = array(); + + // Our strategy is to simply go through the byDays, advance the date to + // that point and add it to the results. + if ($this->byDay) foreach($this->byDay as $day) { + + $dayName = $this->dayNames[$this->dayMap[substr($day,-2)]]; + + // Dayname will be something like 'wednesday'. Now we need to find + // all wednesdays in this month. + $dayHits = array(); + + $checkDate = clone $startDate; + $checkDate->modify('first day of this month'); + $checkDate->modify($dayName); + + do { + $dayHits[] = $checkDate->format('j'); + $checkDate->modify('next ' . $dayName); + } while ($checkDate->format('n') === $startDate->format('n')); + + // So now we have 'all wednesdays' for month. It is however + // possible that the user only really wanted the 1st, 2nd or last + // wednesday. + if (strlen($day)>2) { + $offset = (int)substr($day,0,-2); + + if ($offset>0) { + // It is possible that the day does not exist, such as a + // 5th or 6th wednesday of the month. + if (isset($dayHits[$offset-1])) { + $byDayResults[] = $dayHits[$offset-1]; + } + } else { + + // if it was negative we count from the end of the array + $byDayResults[] = $dayHits[count($dayHits) + $offset]; + } + } else { + // There was no counter (first, second, last wednesdays), so we + // just need to add the all to the list). + $byDayResults = array_merge($byDayResults, $dayHits); + + } + + } + + $byMonthDayResults = array(); + if ($this->byMonthDay) foreach($this->byMonthDay as $monthDay) { + + // Removing values that are out of range for this month + if ($monthDay > $startDate->format('t') || + $monthDay < 0-$startDate->format('t')) { + continue; + } + if ($monthDay>0) { + $byMonthDayResults[] = $monthDay; + } else { + // Negative values + $byMonthDayResults[] = $startDate->format('t') + 1 + $monthDay; + } + } + + // If there was just byDay or just byMonthDay, they just specify our + // (almost) final list. If both were provided, then byDay limits the + // list. + if ($this->byMonthDay && $this->byDay) { + $result = array_intersect($byMonthDayResults, $byDayResults); + } elseif ($this->byMonthDay) { + $result = $byMonthDayResults; + } else { + $result = $byDayResults; + } + $result = array_unique($result); + sort($result, SORT_NUMERIC); + + // The last thing that needs checking is the BYSETPOS. If it's set, it + // means only certain items in the set survive the filter. + if (!$this->bySetPos) { + return $result; + } + + $filteredResult = array(); + foreach($this->bySetPos as $setPos) { + + if ($setPos<0) { + $setPos = count($result)-($setPos+1); + } + if (isset($result[$setPos-1])) { + $filteredResult[] = $result[$setPos-1]; + } + } + + sort($filteredResult, SORT_NUMERIC); + return $filteredResult; + + } + + +} + diff --git a/3rdparty/Sabre/VObject/Version.php b/3rdparty/Sabre/VObject/Version.php new file mode 100755 index 00000000000..9ee03d87118 --- /dev/null +++ b/3rdparty/Sabre/VObject/Version.php @@ -0,0 +1,24 @@ +'Australia/Darwin', + 'AUS Eastern Standard Time'=>'Australia/Sydney', + 'Afghanistan Standard Time'=>'Asia/Kabul', + 'Alaskan Standard Time'=>'America/Anchorage', + 'Arab Standard Time'=>'Asia/Riyadh', + 'Arabian Standard Time'=>'Asia/Dubai', + 'Arabic Standard Time'=>'Asia/Baghdad', + 'Argentina Standard Time'=>'America/Buenos_Aires', + 'Armenian Standard Time'=>'Asia/Yerevan', + 'Atlantic Standard Time'=>'America/Halifax', + 'Azerbaijan Standard Time'=>'Asia/Baku', + 'Azores Standard Time'=>'Atlantic/Azores', + 'Bangladesh Standard Time'=>'Asia/Dhaka', + 'Canada Central Standard Time'=>'America/Regina', + 'Cape Verde Standard Time'=>'Atlantic/Cape_Verde', + 'Caucasus Standard Time'=>'Asia/Yerevan', + 'Cen. Australia Standard Time'=>'Australia/Adelaide', + 'Central America Standard Time'=>'America/Guatemala', + 'Central Asia Standard Time'=>'Asia/Almaty', + 'Central Brazilian Standard Time'=>'America/Cuiaba', + 'Central Europe Standard Time'=>'Europe/Budapest', + 'Central European Standard Time'=>'Europe/Warsaw', + 'Central Pacific Standard Time'=>'Pacific/Guadalcanal', + 'Central Standard Time'=>'America/Chicago', + 'Central Standard Time (Mexico)'=>'America/Mexico_City', + 'China Standard Time'=>'Asia/Shanghai', + 'Dateline Standard Time'=>'Etc/GMT+12', + 'E. Africa Standard Time'=>'Africa/Nairobi', + 'E. Australia Standard Time'=>'Australia/Brisbane', + 'E. Europe Standard Time'=>'Europe/Minsk', + 'E. South America Standard Time'=>'America/Sao_Paulo', + 'Eastern Standard Time'=>'America/New_York', + 'Egypt Standard Time'=>'Africa/Cairo', + 'Ekaterinburg Standard Time'=>'Asia/Yekaterinburg', + 'FLE Standard Time'=>'Europe/Kiev', + 'Fiji Standard Time'=>'Pacific/Fiji', + 'GMT Standard Time'=>'Europe/London', + 'GTB Standard Time'=>'Europe/Istanbul', + 'Georgian Standard Time'=>'Asia/Tbilisi', + 'Greenland Standard Time'=>'America/Godthab', + 'Greenwich Standard Time'=>'Atlantic/Reykjavik', + 'Hawaiian Standard Time'=>'Pacific/Honolulu', + 'India Standard Time'=>'Asia/Calcutta', + 'Iran Standard Time'=>'Asia/Tehran', + 'Israel Standard Time'=>'Asia/Jerusalem', + 'Jordan Standard Time'=>'Asia/Amman', + 'Kamchatka Standard Time'=>'Asia/Kamchatka', + 'Korea Standard Time'=>'Asia/Seoul', + 'Magadan Standard Time'=>'Asia/Magadan', + 'Mauritius Standard Time'=>'Indian/Mauritius', + 'Mexico Standard Time'=>'America/Mexico_City', + 'Mexico Standard Time 2'=>'America/Chihuahua', + 'Mid-Atlantic Standard Time'=>'Etc/GMT+2', + 'Middle East Standard Time'=>'Asia/Beirut', + 'Montevideo Standard Time'=>'America/Montevideo', + 'Morocco Standard Time'=>'Africa/Casablanca', + 'Mountain Standard Time'=>'America/Denver', + 'Mountain Standard Time (Mexico)'=>'America/Chihuahua', + 'Myanmar Standard Time'=>'Asia/Rangoon', + 'N. Central Asia Standard Time'=>'Asia/Novosibirsk', + 'Namibia Standard Time'=>'Africa/Windhoek', + 'Nepal Standard Time'=>'Asia/Katmandu', + 'New Zealand Standard Time'=>'Pacific/Auckland', + 'Newfoundland Standard Time'=>'America/St_Johns', + 'North Asia East Standard Time'=>'Asia/Irkutsk', + 'North Asia Standard Time'=>'Asia/Krasnoyarsk', + 'Pacific SA Standard Time'=>'America/Santiago', + 'Pacific Standard Time'=>'America/Los_Angeles', + 'Pacific Standard Time (Mexico)'=>'America/Santa_Isabel', + 'Pakistan Standard Time'=>'Asia/Karachi', + 'Paraguay Standard Time'=>'America/Asuncion', + 'Romance Standard Time'=>'Europe/Paris', + 'Russian Standard Time'=>'Europe/Moscow', + 'SA Eastern Standard Time'=>'America/Cayenne', + 'SA Pacific Standard Time'=>'America/Bogota', + 'SA Western Standard Time'=>'America/La_Paz', + 'SE Asia Standard Time'=>'Asia/Bangkok', + 'Samoa Standard Time'=>'Pacific/Apia', + 'Singapore Standard Time'=>'Asia/Singapore', + 'South Africa Standard Time'=>'Africa/Johannesburg', + 'Sri Lanka Standard Time'=>'Asia/Colombo', + 'Syria Standard Time'=>'Asia/Damascus', + 'Taipei Standard Time'=>'Asia/Taipei', + 'Tasmania Standard Time'=>'Australia/Hobart', + 'Tokyo Standard Time'=>'Asia/Tokyo', + 'Tonga Standard Time'=>'Pacific/Tongatapu', + 'US Eastern Standard Time'=>'America/Indianapolis', + 'US Mountain Standard Time'=>'America/Phoenix', + 'UTC'=>'Etc/GMT', + 'UTC+12'=>'Etc/GMT-12', + 'UTC-02'=>'Etc/GMT+2', + 'UTC-11'=>'Etc/GMT+11', + 'Ulaanbaatar Standard Time'=>'Asia/Ulaanbaatar', + 'Venezuela Standard Time'=>'America/Caracas', + 'Vladivostok Standard Time'=>'Asia/Vladivostok', + 'W. Australia Standard Time'=>'Australia/Perth', + 'W. Central Africa Standard Time'=>'Africa/Lagos', + 'W. Europe Standard Time'=>'Europe/Berlin', + 'West Asia Standard Time'=>'Asia/Tashkent', + 'West Pacific Standard Time'=>'Pacific/Port_Moresby', + 'Yakutsk Standard Time'=>'Asia/Yakutsk', + ); + + static public function lookup($tzid) { + return isset(self::$map[$tzid]) ? self::$map[$tzid] : null; + } +} diff --git a/3rdparty/Sabre/VObject/includes.php b/3rdparty/Sabre/VObject/includes.php new file mode 100755 index 00000000000..0177a8f1ba6 --- /dev/null +++ b/3rdparty/Sabre/VObject/includes.php @@ -0,0 +1,41 @@ + Date: Sun, 14 Oct 2012 02:08:47 +0200 Subject: [PATCH 045/576] [tx-robot] updated from transifex --- apps/files/l10n/eo.php | 15 ++++ apps/files/l10n/nl.php | 12 +++ apps/files_external/l10n/el.php | 8 +- apps/files_external/l10n/eo.php | 6 ++ apps/files_sharing/l10n/eo.php | 2 + apps/files_versions/l10n/eo.php | 5 +- apps/user_ldap/l10n/eo.php | 1 + core/l10n/eo.php | 27 +++++++ l10n/el/files_external.po | 22 +++--- l10n/el/settings.po | 39 +++++----- l10n/eo/core.po | 116 ++++++++++++++-------------- l10n/eo/files.po | 108 +++++++++++++------------- l10n/eo/files_external.po | 18 ++--- l10n/eo/files_sharing.po | 12 +-- l10n/eo/files_versions.po | 12 +-- l10n/eo/settings.po | 52 ++++++------- l10n/eo/user_ldap.po | 8 +- l10n/ja_JP/settings.po | 14 ++-- l10n/nl/files.po | 102 ++++++++++++------------ l10n/nl/lib.po | 6 +- l10n/nl/settings.po | 8 +- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 4 +- l10n/templates/user_ldap.pot | 2 +- lib/l10n/nl.php | 2 +- settings/l10n/el.php | 23 +++--- settings/l10n/eo.php | 20 +++++ settings/l10n/ja_JP.php | 1 + settings/l10n/nl.php | 2 +- 35 files changed, 380 insertions(+), 281 deletions(-) diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php index 03d44587448..e9d8eb9e9af 100644 --- a/apps/files/l10n/eo.php +++ b/apps/files/l10n/eo.php @@ -9,6 +9,7 @@ "Files" => "Dosieroj", "Unshare" => "Malkunhavigi", "Delete" => "Forigi", +"Rename" => "Alinomigi", "already exists" => "jam ekzistas", "replace" => "anstataŭigi", "suggest name" => "sugesti nomon", @@ -22,9 +23,13 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn", "Upload Error" => "Alŝuta eraro", "Pending" => "Traktotaj", +"1 file uploading" => "1 dosiero estas alŝutata", +"files uploading" => "dosieroj estas alŝutataj", "Upload cancelled." => "La alŝuto nuliĝis.", "File upload is in progress. Leaving the page now will cancel the upload." => "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton.", "Invalid name, '/' is not allowed." => "Nevalida nomo, “/” ne estas permesata.", +"files scanned" => "dosieroj skanitaj", +"error while scanning" => "eraro dum skano", "Name" => "Nomo", "Size" => "Grando", "Modified" => "Modifita", @@ -32,6 +37,16 @@ "folders" => "dosierujoj", "file" => "dosiero", "files" => "dosieroj", +"seconds ago" => "sekundoj antaŭe", +"minute ago" => "minuto antaŭe", +"minutes ago" => "minutoj antaŭe", +"today" => "hodiaŭ", +"yesterday" => "hieraŭ", +"days ago" => "tagoj antaŭe", +"last month" => "lastamonate", +"months ago" => "monatoj antaŭe", +"last year" => "lastajare", +"years ago" => "jaroj antaŭe", "File handling" => "Dosieradministro", "Maximum upload size" => "Maksimuma alŝutogrando", "max. possible: " => "maks. ebla: ", diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php index 016f7341ab7..5f7f03a3d81 100644 --- a/apps/files/l10n/nl.php +++ b/apps/files/l10n/nl.php @@ -23,6 +23,8 @@ "Unable to upload your file as it is a directory or has 0 bytes" => "uploaden van de file mislukt, het is of een directory of de bestandsgrootte is 0 bytes", "Upload Error" => "Upload Fout", "Pending" => "Wachten", +"1 file uploading" => "1 bestand wordt ge-upload", +"files uploading" => "Bestanden aan het uploaden", "Upload cancelled." => "Uploaden geannuleerd.", "File upload is in progress. Leaving the page now will cancel the upload." => "Bestands upload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.", "Invalid name, '/' is not allowed." => "Ongeldige naam, '/' is niet toegestaan.", @@ -35,6 +37,16 @@ "folders" => "mappen", "file" => "bestand", "files" => "bestanden", +"seconds ago" => "seconden geleden", +"minute ago" => "minuut geleden", +"minutes ago" => "minuten geleden", +"today" => "vandaag", +"yesterday" => "gisteren", +"days ago" => "dagen geleden", +"last month" => "vorige maand", +"months ago" => "maanden geleden", +"last year" => "vorig jaar", +"years ago" => "jaar geleden", "File handling" => "Bestand", "Maximum upload size" => "Maximale bestandsgrootte voor uploads", "max. possible: " => "max. mogelijk: ", diff --git a/apps/files_external/l10n/el.php b/apps/files_external/l10n/el.php index c518fca149e..a1dae9d4888 100644 --- a/apps/files_external/l10n/el.php +++ b/apps/files_external/l10n/el.php @@ -1,4 +1,10 @@ "Προσβαση παρασχέθηκε", +"Error configuring Dropbox storage" => "Σφάλμα ρυθμίζωντας αποθήκευση Dropbox ", +"Grant access" => "Παροχή πρόσβασης", +"Fill out all required fields" => "Συμπληρώστε όλα τα απαιτούμενα πεδία", +"Please provide a valid Dropbox app key and secret." => "Παρακαλούμε δώστε έγκυρο κλειδί Dropbox και μυστικό.", +"Error configuring Google Drive storage" => "Σφάλμα ρυθμίζωντας αποθήκευση Google Drive ", "External Storage" => "Εξωτερικό Αποθηκευτικό Μέσο", "Mount point" => "Σημείο προσάρτησης", "Backend" => "Σύστημα υποστήριξης", @@ -7,7 +13,7 @@ "Applicable" => "Εφαρμόσιμο", "Add mount point" => "Προσθήκη σημείου προσάρτησης", "None set" => "Κανένα επιλεγμένο", -"All Users" => "Όλοι οι χρήστες", +"All Users" => "Όλοι οι Χρήστες", "Groups" => "Ομάδες", "Users" => "Χρήστες", "Delete" => "Διαγραφή", diff --git a/apps/files_external/l10n/eo.php b/apps/files_external/l10n/eo.php index 90819e3352c..97453aafedb 100644 --- a/apps/files_external/l10n/eo.php +++ b/apps/files_external/l10n/eo.php @@ -1,4 +1,10 @@ "Alirpermeso donita", +"Error configuring Dropbox storage" => "Eraro dum agordado de la memorservo Dropbox", +"Grant access" => "Doni alirpermeson", +"Fill out all required fields" => "Plenigu ĉiujn neprajn kampojn", +"Please provide a valid Dropbox app key and secret." => "Bonvolu provizi ŝlosilon de la aplikaĵo Dropbox validan kaj sekretan.", +"Error configuring Google Drive storage" => "Eraro dum agordado de la memorservo Google Drive", "External Storage" => "Malena memorilo", "Mount point" => "Surmetingo", "Backend" => "Motoro", diff --git a/apps/files_sharing/l10n/eo.php b/apps/files_sharing/l10n/eo.php index e71715f0f1f..c598d3aa2c4 100644 --- a/apps/files_sharing/l10n/eo.php +++ b/apps/files_sharing/l10n/eo.php @@ -1,6 +1,8 @@ "Pasvorto", "Submit" => "Sendi", +"%s shared the folder %s with you" => "%s kunhavigis la dosierujon %s kun vi", +"%s shared the file %s with you" => "%s kunhavigis la dosieron %s kun vi", "Download" => "Elŝuti", "No preview available for" => "Ne haveblas antaŭvido por", "web services under your control" => "TTT-servoj regataj de vi" diff --git a/apps/files_versions/l10n/eo.php b/apps/files_versions/l10n/eo.php index d0f89c576d4..0c3835373ef 100644 --- a/apps/files_versions/l10n/eo.php +++ b/apps/files_versions/l10n/eo.php @@ -1,5 +1,8 @@ "Eksvalidigi ĉiujn eldonojn", +"History" => "Historio", "Versions" => "Eldonoj", -"This will delete all existing backup versions of your files" => "Ĉi tio forigos ĉiujn estantajn sekurkopiajn eldonojn de viaj dosieroj" +"This will delete all existing backup versions of your files" => "Ĉi tio forigos ĉiujn estantajn sekurkopiajn eldonojn de viaj dosieroj", +"Files Versioning" => "Dosiereldonigo", +"Enable" => "Kapabligi" ); diff --git a/apps/user_ldap/l10n/eo.php b/apps/user_ldap/l10n/eo.php index 683c60ef840..ef8aff8a390 100644 --- a/apps/user_ldap/l10n/eo.php +++ b/apps/user_ldap/l10n/eo.php @@ -22,6 +22,7 @@ "Do not use it for SSL connections, it will fail." => "Ne uzu ĝin por SSL-konektoj, ĝi malsukcesos.", "Case insensitve LDAP server (Windows)" => "LDAP-servilo blinda je litergrandeco (Vindozo)", "Turn off SSL certificate validation." => "Malkapabligi validkontrolon de SSL-atestiloj.", +"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se la konekto nur funkcias kun ĉi tiu malnepro, enportu la SSL-atestilo de la LDAP-servilo en via ownCloud-servilo.", "Not recommended, use for testing only." => "Ne rekomendata, uzu ĝin nur por testoj.", "User Display Name Field" => "Kampo de vidignomo de uzanto", "The LDAP attribute to use to generate the user`s ownCloud name." => "La atributo de LDAP uzota por generi la ownCloud-an nomon de la uzanto.", diff --git a/core/l10n/eo.php b/core/l10n/eo.php index 9e03abfdc23..a8f5b38a303 100644 --- a/core/l10n/eo.php +++ b/core/l10n/eo.php @@ -15,13 +15,40 @@ "October" => "Oktobro", "November" => "Novembro", "December" => "Decembro", +"Choose" => "Elekti", "Cancel" => "Nuligi", "No" => "Ne", "Yes" => "Jes", "Ok" => "Akcepti", "No categories selected for deletion." => "Neniu kategorio elektiĝis por forigo.", "Error" => "Eraro", +"Error while sharing" => "Eraro dum kunhavigo", +"Error while unsharing" => "Eraro dum malkunhavigo", +"Error while changing permissions" => "Eraro dum ŝanĝo de permesoj", +"Shared with you and the group" => "Kunhavigita kun vi kaj la grupo", +"by" => "de", +"Shared with you by" => "Kunhavigita kun vi de", +"Share with" => "Kunhavigi kun", +"Share with link" => "Kunhavigi per ligilo", +"Password protect" => "Protekti per pasvorto", "Password" => "Pasvorto", +"Set expiration date" => "Agordi limdaton", +"Expiration date" => "Limdato", +"Share via email:" => "Kunhavigi per retpoŝto:", +"No people found" => "Ne troviĝis gento", +"Resharing is not allowed" => "Rekunhavigo ne permesatas", +"Shared in" => "Kunhavigita en", +"with" => "kun", +"Unshare" => "Malkunhavigi", +"can edit" => "povas redakti", +"access control" => "alirkontrolo", +"create" => "krei", +"update" => "ĝisdatigi", +"delete" => "forigi", +"share" => "kunhavigi", +"Password protected" => "Protektita per pasvorto", +"Error unsetting expiration date" => "Eraro dum malagordado de limdato", +"Error setting expiration date" => "Eraro dum agordado de limdato", "ownCloud password reset" => "La pasvorto de ownCloud restariĝis.", "Use the following link to reset your password: {link}" => "Uzu la jenan ligilon por restarigi vian pasvorton: {link}", "You will receive a link to reset your password via Email." => "Vi ricevos ligilon retpoŝte por rekomencigi vian pasvorton.", diff --git a/l10n/el/files_external.po b/l10n/el/files_external.po index 6bb867891c0..261b71a5b76 100644 --- a/l10n/el/files_external.po +++ b/l10n/el/files_external.po @@ -6,13 +6,15 @@ # Efstathios Iosifidis , 2012. # Nisok Kosin , 2012. # Petros Kyladitis , 2012. +# Γιάννης , 2012. +# Γιάννης Ανθυμίδης , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-02 23:16+0200\n" -"PO-Revision-Date: 2012-10-02 21:17+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 20:42+0000\n" +"Last-Translator: Γιάννης Ανθυμίδης \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" @@ -22,27 +24,27 @@ msgstr "" #: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23 msgid "Access granted" -msgstr "" +msgstr "Προσβαση παρασχέθηκε" #: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86 msgid "Error configuring Dropbox storage" -msgstr "" +msgstr "Σφάλμα ρυθμίζωντας αποθήκευση Dropbox " #: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 msgid "Grant access" -msgstr "" +msgstr "Παροχή πρόσβασης" #: js/dropbox.js:73 js/google.js:72 msgid "Fill out all required fields" -msgstr "" +msgstr "Συμπληρώστε όλα τα απαιτούμενα πεδία" #: js/dropbox.js:85 msgid "Please provide a valid Dropbox app key and secret." -msgstr "" +msgstr "Παρακαλούμε δώστε έγκυρο κλειδί Dropbox και μυστικό." #: js/google.js:26 js/google.js:73 js/google.js:78 msgid "Error configuring Google Drive storage" -msgstr "" +msgstr "Σφάλμα ρυθμίζωντας αποθήκευση Google Drive " #: templates/settings.php:3 msgid "External Storage" @@ -78,7 +80,7 @@ msgstr "Κανένα επιλεγμένο" #: templates/settings.php:63 msgid "All Users" -msgstr "Όλοι οι χρήστες" +msgstr "Όλοι οι Χρήστες" #: templates/settings.php:64 msgid "Groups" diff --git a/l10n/el/settings.po b/l10n/el/settings.po index 89a0c274299..3e0e1b87f3f 100644 --- a/l10n/el/settings.po +++ b/l10n/el/settings.po @@ -6,18 +6,21 @@ # Dimitris M. , 2012. # Efstathios Iosifidis , 2012. # Efstathios Iosifidis , 2012. +# , 2012. # , 2012. # Marios Bekatoros <>, 2012. # Nisok Kosin , 2012. +# , 2011. # , 2011. # Petros Kyladitis , 2011-2012. +# Γιάννης Ανθυμίδης , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-09 02:03+0200\n" -"PO-Revision-Date: 2012-10-09 00:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 21:01+0000\n" +"Last-Translator: Γιάννης Ανθυμίδης \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" @@ -29,7 +32,7 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Σφάλμα στην φόρτωση της λίστας από το App Store" -#: ajax/creategroup.php:9 ajax/removeuser.php:13 ajax/setquota.php:18 +#: ajax/creategroup.php:9 ajax/removeuser.php:18 ajax/setquota.php:18 #: ajax/togglegroups.php:15 msgid "Authentication error" msgstr "Σφάλμα πιστοποίησης" @@ -48,7 +51,7 @@ msgstr "Αδυναμία ενεργοποίησης εφαρμογής " #: ajax/lostpassword.php:14 msgid "Email saved" -msgstr "Το Email αποθηκεύτηκε " +msgstr "Το email αποθηκεύτηκε " #: ajax/lostpassword.php:16 msgid "Invalid email" @@ -66,7 +69,7 @@ msgstr "Μη έγκυρο αίτημα" msgid "Unable to delete group" msgstr "Αδυναμία διαγραφής ομάδας" -#: ajax/removeuser.php:22 +#: ajax/removeuser.php:27 msgid "Unable to delete user" msgstr "Αδυναμία διαγραφής χρήστη" @@ -96,7 +99,7 @@ msgstr "Ενεργοποίηση" msgid "Saving..." msgstr "Αποθήκευση..." -#: personal.php:47 personal.php:48 +#: personal.php:42 personal.php:43 msgid "__language_name__" msgstr "__όνομα_γλώσσας__" @@ -175,7 +178,7 @@ msgstr "Αρχείο καταγραφής" #: templates/admin.php:116 msgid "More" -msgstr "Περισσότερο" +msgstr "Περισσότερα" #: templates/admin.php:124 msgid "" @@ -189,19 +192,19 @@ msgstr "Αναπτύχθηκε από την -licensed by " @@ -213,7 +216,7 @@ msgstr "Τεκμηρίωση" #: templates/help.php:10 msgid "Managing Big Files" -msgstr "Διαχείριση μεγάλων αρχείων" +msgstr "Διαχείριση Μεγάλων Αρχείων" #: templates/help.php:11 msgid "Ask a question" @@ -274,7 +277,7 @@ msgstr "Email" #: templates/personal.php:31 msgid "Your email address" -msgstr "Διεύθυνση ηλεκτρονικού ταχυδρομείου σας" +msgstr "Η διεύθυνση ηλεκτρονικού ταχυδρομείου σας" #: templates/personal.php:32 msgid "Fill in an email address to enable password recovery" @@ -286,11 +289,11 @@ msgstr "Γλώσσα" #: templates/personal.php:44 msgid "Help translate" -msgstr "Βοηθήστε στην μετάφραση" +msgstr "Βοηθήστε στη μετάφραση" #: templates/personal.php:51 msgid "use this address to connect to your ownCloud in your file manager" -msgstr "χρησιμοποιήστε αυτή τη διεύθυνση για να συνδεθείτε στο ownCloud σας από το διαχειριστή αρχείων σας" +msgstr "χρησιμοποιήστε αυτήν τη διεύθυνση για να συνδεθείτε στο ownCloud σας από το διαχειριστή αρχείων σας" #: templates/users.php:21 templates/users.php:76 msgid "Name" @@ -310,7 +313,7 @@ msgstr "Δημιουργία" #: templates/users.php:35 msgid "Default Quota" -msgstr "Προεπιλεγμένο όριο" +msgstr "Προεπιλεγμένο Όριο" #: templates/users.php:55 templates/users.php:138 msgid "Other" @@ -322,7 +325,7 @@ msgstr "Ομάδα Διαχειριστών" #: templates/users.php:82 msgid "Quota" -msgstr "Σύνολο χώρου" +msgstr "Σύνολο Χώρου" #: templates/users.php:146 msgid "Delete" diff --git a/l10n/eo/core.po b/l10n/eo/core.po index 1d81d9fb2a7..cd6dc54094e 100644 --- a/l10n/eo/core.po +++ b/l10n/eo/core.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 05:07+0000\n" +"Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -32,61 +32,61 @@ msgstr "Ĉu neniu kategorio estas aldonota?" msgid "This category already exists: " msgstr "Ĉi tiu kategorio jam ekzistas: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Agordo" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Januaro" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Februaro" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Marto" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Aprilo" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Majo" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Junio" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Julio" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Aŭgusto" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Septembro" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Oktobro" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Novembro" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Decembro" #: js/oc-dialogs.js:123 msgid "Choose" -msgstr "" +msgstr "Elekti" #: js/oc-dialogs.js:143 js/oc-dialogs.js:163 msgid "Cancel" @@ -108,46 +108,46 @@ msgstr "Akcepti" msgid "No categories selected for deletion." msgstr "Neniu kategorio elektiĝis por forigo." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Eraro" #: js/share.js:103 msgid "Error while sharing" -msgstr "" +msgstr "Eraro dum kunhavigo" #: js/share.js:114 msgid "Error while unsharing" -msgstr "" +msgstr "Eraro dum malkunhavigo" #: js/share.js:121 msgid "Error while changing permissions" -msgstr "" +msgstr "Eraro dum ŝanĝo de permesoj" #: js/share.js:130 msgid "Shared with you and the group" -msgstr "" +msgstr "Kunhavigita kun vi kaj la grupo" #: js/share.js:130 msgid "by" -msgstr "" +msgstr "de" #: js/share.js:132 msgid "Shared with you by" -msgstr "" +msgstr "Kunhavigita kun vi de" #: js/share.js:137 msgid "Share with" -msgstr "" +msgstr "Kunhavigi kun" #: js/share.js:142 msgid "Share with link" -msgstr "" +msgstr "Kunhavigi per ligilo" #: js/share.js:143 msgid "Password protect" -msgstr "" +msgstr "Protekti per pasvorto" #: js/share.js:147 templates/installation.php:30 templates/login.php:13 msgid "Password" @@ -155,71 +155,71 @@ msgstr "Pasvorto" #: js/share.js:152 msgid "Set expiration date" -msgstr "" +msgstr "Agordi limdaton" #: js/share.js:153 msgid "Expiration date" -msgstr "" +msgstr "Limdato" #: js/share.js:185 msgid "Share via email:" -msgstr "" +msgstr "Kunhavigi per retpoŝto:" #: js/share.js:187 msgid "No people found" -msgstr "" +msgstr "Ne troviĝis gento" #: js/share.js:214 msgid "Resharing is not allowed" -msgstr "" +msgstr "Rekunhavigo ne permesatas" #: js/share.js:250 msgid "Shared in" -msgstr "" +msgstr "Kunhavigita en" #: js/share.js:250 msgid "with" -msgstr "" +msgstr "kun" #: js/share.js:271 msgid "Unshare" -msgstr "" +msgstr "Malkunhavigi" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" -msgstr "" +msgstr "povas redakti" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" -msgstr "" +msgstr "alirkontrolo" -#: js/share.js:284 +#: js/share.js:288 msgid "create" -msgstr "" +msgstr "krei" -#: js/share.js:287 +#: js/share.js:291 msgid "update" -msgstr "" +msgstr "ĝisdatigi" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" -msgstr "" +msgstr "forigi" -#: js/share.js:293 +#: js/share.js:297 msgid "share" -msgstr "" +msgstr "kunhavigi" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" -msgstr "" +msgstr "Protektita per pasvorto" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" -msgstr "" +msgstr "Eraro dum malagordado de limdato" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" -msgstr "" +msgstr "Eraro dum agordado de limdato" #: lostpassword/index.php:26 msgid "ownCloud password reset" @@ -246,7 +246,7 @@ msgstr "Ensaluto malsukcesis!" msgid "Username" msgstr "Uzantonomo" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Peti rekomencigon" @@ -347,7 +347,7 @@ msgstr "Datumbaza gastigo" msgid "Finish setup" msgstr "Fini la instalon" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "TTT-servoj sub via kontrolo" @@ -359,11 +359,11 @@ msgstr "Elsaluti" msgid "Lost your password?" msgstr "Ĉu vi perdis vian pasvorton?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "memori" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Ensaluti" diff --git a/l10n/eo/files.po b/l10n/eo/files.po index 11d070fa237..5f27b8764f8 100644 --- a/l10n/eo/files.po +++ b/l10n/eo/files.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-26 13:19+0200\n" -"PO-Revision-Date: 2012-09-26 11:20+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 04:22+0000\n" +"Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -63,41 +63,41 @@ msgstr "Forigi" #: js/fileactions.js:182 msgid "Rename" -msgstr "" +msgstr "Alinomigi" -#: js/filelist.js:190 js/filelist.js:192 +#: js/filelist.js:192 js/filelist.js:194 msgid "already exists" msgstr "jam ekzistas" -#: js/filelist.js:190 js/filelist.js:192 +#: js/filelist.js:192 js/filelist.js:194 msgid "replace" msgstr "anstataŭigi" -#: js/filelist.js:190 +#: js/filelist.js:192 msgid "suggest name" msgstr "sugesti nomon" -#: js/filelist.js:190 js/filelist.js:192 +#: js/filelist.js:192 js/filelist.js:194 msgid "cancel" msgstr "nuligi" -#: js/filelist.js:239 js/filelist.js:241 +#: js/filelist.js:241 js/filelist.js:243 msgid "replaced" msgstr "anstataŭigita" -#: js/filelist.js:239 js/filelist.js:241 js/filelist.js:273 js/filelist.js:275 +#: js/filelist.js:241 js/filelist.js:243 js/filelist.js:275 js/filelist.js:277 msgid "undo" msgstr "malfari" -#: js/filelist.js:241 +#: js/filelist.js:243 msgid "with" msgstr "kun" -#: js/filelist.js:273 +#: js/filelist.js:275 msgid "unshared" msgstr "malkunhavigita" -#: js/filelist.js:275 +#: js/filelist.js:277 msgid "deleted" msgstr "forigita" @@ -105,114 +105,114 @@ msgstr "forigita" msgid "generating ZIP-file, it may take some time." msgstr "generanta ZIP-dosiero, ĝi povas daŭri iom da tempo" -#: js/files.js:208 +#: js/files.js:214 msgid "Unable to upload your file as it is a directory or has 0 bytes" msgstr "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn" -#: js/files.js:208 +#: js/files.js:214 msgid "Upload Error" msgstr "Alŝuta eraro" -#: js/files.js:236 js/files.js:341 js/files.js:371 +#: js/files.js:242 js/files.js:347 js/files.js:377 msgid "Pending" msgstr "Traktotaj" -#: js/files.js:256 +#: js/files.js:262 msgid "1 file uploading" -msgstr "" +msgstr "1 dosiero estas alŝutata" -#: js/files.js:259 js/files.js:304 js/files.js:319 +#: js/files.js:265 js/files.js:310 js/files.js:325 msgid "files uploading" -msgstr "" +msgstr "dosieroj estas alŝutataj" -#: js/files.js:322 js/files.js:355 +#: js/files.js:328 js/files.js:361 msgid "Upload cancelled." msgstr "La alŝuto nuliĝis." -#: js/files.js:424 +#: js/files.js:430 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton." -#: js/files.js:494 +#: js/files.js:500 msgid "Invalid name, '/' is not allowed." msgstr "Nevalida nomo, “/” ne estas permesata." -#: js/files.js:667 +#: js/files.js:681 msgid "files scanned" -msgstr "" +msgstr "dosieroj skanitaj" -#: js/files.js:675 +#: js/files.js:689 msgid "error while scanning" -msgstr "" +msgstr "eraro dum skano" -#: js/files.js:748 templates/index.php:48 +#: js/files.js:762 templates/index.php:48 msgid "Name" msgstr "Nomo" -#: js/files.js:749 templates/index.php:56 +#: js/files.js:763 templates/index.php:56 msgid "Size" msgstr "Grando" -#: js/files.js:750 templates/index.php:58 +#: js/files.js:764 templates/index.php:58 msgid "Modified" msgstr "Modifita" -#: js/files.js:777 +#: js/files.js:791 msgid "folder" msgstr "dosierujo" -#: js/files.js:779 +#: js/files.js:793 msgid "folders" msgstr "dosierujoj" -#: js/files.js:787 +#: js/files.js:801 msgid "file" msgstr "dosiero" -#: js/files.js:789 +#: js/files.js:803 msgid "files" msgstr "dosieroj" -#: js/files.js:833 +#: js/files.js:847 msgid "seconds ago" -msgstr "" +msgstr "sekundoj antaŭe" -#: js/files.js:834 +#: js/files.js:848 msgid "minute ago" -msgstr "" +msgstr "minuto antaŭe" -#: js/files.js:835 +#: js/files.js:849 msgid "minutes ago" -msgstr "" +msgstr "minutoj antaŭe" -#: js/files.js:838 +#: js/files.js:852 msgid "today" -msgstr "" +msgstr "hodiaŭ" -#: js/files.js:839 +#: js/files.js:853 msgid "yesterday" -msgstr "" +msgstr "hieraŭ" -#: js/files.js:840 +#: js/files.js:854 msgid "days ago" -msgstr "" +msgstr "tagoj antaŭe" -#: js/files.js:841 +#: js/files.js:855 msgid "last month" -msgstr "" +msgstr "lastamonate" -#: js/files.js:843 +#: js/files.js:857 msgid "months ago" -msgstr "" +msgstr "monatoj antaŭe" -#: js/files.js:844 +#: js/files.js:858 msgid "last year" -msgstr "" +msgstr "lastajare" -#: js/files.js:845 +#: js/files.js:859 msgid "years ago" -msgstr "" +msgstr "jaroj antaŭe" #: templates/admin.php:5 msgid "File handling" diff --git a/l10n/eo/files_external.po b/l10n/eo/files_external.po index 2ef114a330c..ea8451b7f4d 100644 --- a/l10n/eo/files_external.po +++ b/l10n/eo/files_external.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-02 23:16+0200\n" -"PO-Revision-Date: 2012-10-02 21:17+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 05:00+0000\n" +"Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,27 +20,27 @@ msgstr "" #: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23 msgid "Access granted" -msgstr "" +msgstr "Alirpermeso donita" #: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86 msgid "Error configuring Dropbox storage" -msgstr "" +msgstr "Eraro dum agordado de la memorservo Dropbox" #: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 msgid "Grant access" -msgstr "" +msgstr "Doni alirpermeson" #: js/dropbox.js:73 js/google.js:72 msgid "Fill out all required fields" -msgstr "" +msgstr "Plenigu ĉiujn neprajn kampojn" #: js/dropbox.js:85 msgid "Please provide a valid Dropbox app key and secret." -msgstr "" +msgstr "Bonvolu provizi ŝlosilon de la aplikaĵo Dropbox validan kaj sekretan." #: js/google.js:26 js/google.js:73 js/google.js:78 msgid "Error configuring Google Drive storage" -msgstr "" +msgstr "Eraro dum agordado de la memorservo Google Drive" #: templates/settings.php:3 msgid "External Storage" diff --git a/l10n/eo/files_sharing.po b/l10n/eo/files_sharing.po index dc0d47ec89b..e9778f8450c 100644 --- a/l10n/eo/files_sharing.po +++ b/l10n/eo/files_sharing.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-22 01:14+0200\n" -"PO-Revision-Date: 2012-09-21 23:15+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 03:01+0000\n" +"Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -29,12 +29,12 @@ msgstr "Sendi" #: templates/public.php:9 #, php-format msgid "%s shared the folder %s with you" -msgstr "" +msgstr "%s kunhavigis la dosierujon %s kun vi" #: templates/public.php:11 #, php-format msgid "%s shared the file %s with you" -msgstr "" +msgstr "%s kunhavigis la dosieron %s kun vi" #: templates/public.php:14 templates/public.php:30 msgid "Download" @@ -44,6 +44,6 @@ msgstr "Elŝuti" msgid "No preview available for" msgstr "Ne haveblas antaŭvido por" -#: templates/public.php:37 +#: templates/public.php:35 msgid "web services under your control" msgstr "TTT-servoj regataj de vi" diff --git a/l10n/eo/files_versions.po b/l10n/eo/files_versions.po index ef4f6f190dd..64415603319 100644 --- a/l10n/eo/files_versions.po +++ b/l10n/eo/files_versions.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-22 01:14+0200\n" -"PO-Revision-Date: 2012-09-21 23:15+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 02:50+0000\n" +"Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,7 +24,7 @@ msgstr "Eksvalidigi ĉiujn eldonojn" #: js/versions.js:16 msgid "History" -msgstr "" +msgstr "Historio" #: templates/settings-personal.php:4 msgid "Versions" @@ -36,8 +36,8 @@ msgstr "Ĉi tio forigos ĉiujn estantajn sekurkopiajn eldonojn de viaj dosieroj" #: templates/settings.php:3 msgid "Files Versioning" -msgstr "" +msgstr "Dosiereldonigo" #: templates/settings.php:4 msgid "Enable" -msgstr "" +msgstr "Kapabligi" diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po index 88f5e5f3574..2ed4809d86c 100644 --- a/l10n/eo/settings.po +++ b/l10n/eo/settings.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-09 02:03+0200\n" -"PO-Revision-Date: 2012-10-09 00:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 05:05+0000\n" +"Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,22 +23,22 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Ne eblis ŝargi liston el aplikaĵovendejo" -#: ajax/creategroup.php:9 ajax/removeuser.php:13 ajax/setquota.php:18 +#: ajax/creategroup.php:9 ajax/removeuser.php:18 ajax/setquota.php:18 #: ajax/togglegroups.php:15 msgid "Authentication error" msgstr "Aŭtentiga eraro" #: ajax/creategroup.php:19 msgid "Group already exists" -msgstr "" +msgstr "La grupo jam ekzistas" #: ajax/creategroup.php:28 msgid "Unable to add group" -msgstr "" +msgstr "Ne eblis aldoni la grupon" #: ajax/enableapp.php:14 msgid "Could not enable app. " -msgstr "" +msgstr "Ne eblis kapabligi la aplikaĵon." #: ajax/lostpassword.php:14 msgid "Email saved" @@ -58,11 +58,11 @@ msgstr "Nevalida peto" #: ajax/removegroup.php:16 msgid "Unable to delete group" -msgstr "" +msgstr "Ne eblis forigi la grupon" -#: ajax/removeuser.php:22 +#: ajax/removeuser.php:27 msgid "Unable to delete user" -msgstr "" +msgstr "Ne eblis forigi la uzanton" #: ajax/setlanguage.php:18 msgid "Language changed" @@ -71,12 +71,12 @@ msgstr "La lingvo estas ŝanĝita" #: ajax/togglegroups.php:25 #, php-format msgid "Unable to add user to group %s" -msgstr "" +msgstr "Ne eblis aldoni la uzanton al la grupo %s" #: ajax/togglegroups.php:31 #, php-format msgid "Unable to remove user from group %s" -msgstr "" +msgstr "Ne eblis forigi la uzantan el la grupo %s" #: js/apps.js:28 js/apps.js:65 msgid "Disable" @@ -90,7 +90,7 @@ msgstr "Kapabligi" msgid "Saving..." msgstr "Konservante..." -#: personal.php:47 personal.php:48 +#: personal.php:42 personal.php:43 msgid "__language_name__" msgstr "Esperanto" @@ -129,39 +129,39 @@ msgstr "" #: templates/admin.php:56 msgid "Sharing" -msgstr "" +msgstr "Kunhavigo" #: templates/admin.php:61 msgid "Enable Share API" -msgstr "" +msgstr "Kapabligi API-on por Kunhavigo" #: templates/admin.php:62 msgid "Allow apps to use the Share API" -msgstr "" +msgstr "Kapabligi aplikaĵojn uzi la API-on pri Kunhavigo" #: templates/admin.php:67 msgid "Allow links" -msgstr "" +msgstr "Kapabligi ligilojn" #: templates/admin.php:68 msgid "Allow users to share items to the public with links" -msgstr "" +msgstr "Kapabligi uzantojn kunhavigi erojn kun la publiko perligile" #: templates/admin.php:73 msgid "Allow resharing" -msgstr "" +msgstr "Kapabligi rekunhavigon" #: templates/admin.php:74 msgid "Allow users to share items shared with them again" -msgstr "" +msgstr "Kapabligi uzantojn rekunhavigi erojn kunhavigitajn kun ili" #: templates/admin.php:79 msgid "Allow users to share with anyone" -msgstr "" +msgstr "Kapabligi uzantojn kunhavigi kun ĉiu ajn" #: templates/admin.php:81 msgid "Allow users to only share with users in their groups" -msgstr "" +msgstr "Kapabligi uzantojn nur kunhavigi kun uzantoj el siaj grupoj" #: templates/admin.php:88 msgid "Log" @@ -187,7 +187,7 @@ msgstr "Aldonu vian aplikaĵon" #: templates/apps.php:11 msgid "More Apps" -msgstr "" +msgstr "Pli da aplikaĵoj" #: templates/apps.php:27 msgid "Select an App" @@ -199,7 +199,7 @@ msgstr "Vidu la paĝon pri aplikaĵoj ĉe apps.owncloud.com" #: templates/apps.php:32 msgid "-licensed by " -msgstr "" +msgstr "-permesilhavigita de " #: templates/help.php:9 msgid "Documentation" @@ -228,7 +228,7 @@ msgstr "Respondi" #: templates/personal.php:8 #, php-format msgid "You have used %s of the available %s" -msgstr "" +msgstr "Vi uzas %s el la haveblaj %s" #: templates/personal.php:12 msgid "Desktop and Mobile Syncing Clients" @@ -240,7 +240,7 @@ msgstr "Elŝuti" #: templates/personal.php:19 msgid "Your password was changed" -msgstr "" +msgstr "Via pasvorto ŝanĝiĝis" #: templates/personal.php:20 msgid "Unable to change your password" diff --git a/l10n/eo/user_ldap.po b/l10n/eo/user_ldap.po index ff8480473e1..0f048daf6be 100644 --- a/l10n/eo/user_ldap.po +++ b/l10n/eo/user_ldap.po @@ -8,15 +8,15 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-08-30 02:02+0200\n" -"PO-Revision-Date: 2012-08-29 20:31+0000\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 05:41+0000\n" "Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eo\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: templates/settings.php:8 msgid "Host" @@ -130,7 +130,7 @@ msgstr "Malkapabligi validkontrolon de SSL-atestiloj." msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." -msgstr "" +msgstr "Se la konekto nur funkcias kun ĉi tiu malnepro, enportu la SSL-atestilo de la LDAP-servilo en via ownCloud-servilo." #: templates/settings.php:23 msgid "Not recommended, use for testing only." diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po index 8cbf0d22236..17fb4b3c392 100644 --- a/l10n/ja_JP/settings.po +++ b/l10n/ja_JP/settings.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-09 02:03+0200\n" -"PO-Revision-Date: 2012-10-09 00:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 06:57+0000\n" +"Last-Translator: Daisuke Deguchi \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,7 +23,7 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "アプリストアからリストをロードできません" -#: ajax/creategroup.php:9 ajax/removeuser.php:13 ajax/setquota.php:18 +#: ajax/creategroup.php:9 ajax/removeuser.php:18 ajax/setquota.php:18 #: ajax/togglegroups.php:15 msgid "Authentication error" msgstr "認証エラー" @@ -60,7 +60,7 @@ msgstr "無効なリクエストです" msgid "Unable to delete group" msgstr "グループを削除できません" -#: ajax/removeuser.php:22 +#: ajax/removeuser.php:27 msgid "Unable to delete user" msgstr "ユーザを削除できません" @@ -90,7 +90,7 @@ msgstr "有効" msgid "Saving..." msgstr "保存中..." -#: personal.php:47 personal.php:48 +#: personal.php:42 personal.php:43 msgid "__language_name__" msgstr "Japanese (日本語)" @@ -187,7 +187,7 @@ msgstr "アプリを追加" #: templates/apps.php:11 msgid "More Apps" -msgstr "" +msgstr "さらにアプリを表示" #: templates/apps.php:27 msgid "Select an App" diff --git a/l10n/nl/files.po b/l10n/nl/files.po index da97c5575ea..cae768deb5d 100644 --- a/l10n/nl/files.po +++ b/l10n/nl/files.po @@ -16,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-26 13:19+0200\n" -"PO-Revision-Date: 2012-09-26 11:20+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 08:51+0000\n" +"Last-Translator: Richard Bos \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -72,39 +72,39 @@ msgstr "Verwijder" msgid "Rename" msgstr "Hernoem" -#: js/filelist.js:190 js/filelist.js:192 +#: js/filelist.js:192 js/filelist.js:194 msgid "already exists" msgstr "bestaat al" -#: js/filelist.js:190 js/filelist.js:192 +#: js/filelist.js:192 js/filelist.js:194 msgid "replace" msgstr "vervang" -#: js/filelist.js:190 +#: js/filelist.js:192 msgid "suggest name" msgstr "Stel een naam voor" -#: js/filelist.js:190 js/filelist.js:192 +#: js/filelist.js:192 js/filelist.js:194 msgid "cancel" msgstr "annuleren" -#: js/filelist.js:239 js/filelist.js:241 +#: js/filelist.js:241 js/filelist.js:243 msgid "replaced" msgstr "vervangen" -#: js/filelist.js:239 js/filelist.js:241 js/filelist.js:273 js/filelist.js:275 +#: js/filelist.js:241 js/filelist.js:243 js/filelist.js:275 js/filelist.js:277 msgid "undo" msgstr "ongedaan maken" -#: js/filelist.js:241 +#: js/filelist.js:243 msgid "with" msgstr "door" -#: js/filelist.js:273 +#: js/filelist.js:275 msgid "unshared" msgstr "niet gedeeld" -#: js/filelist.js:275 +#: js/filelist.js:277 msgid "deleted" msgstr "verwijderd" @@ -112,114 +112,114 @@ msgstr "verwijderd" msgid "generating ZIP-file, it may take some time." msgstr "aanmaken ZIP-file, dit kan enige tijd duren." -#: js/files.js:208 +#: js/files.js:214 msgid "Unable to upload your file as it is a directory or has 0 bytes" msgstr "uploaden van de file mislukt, het is of een directory of de bestandsgrootte is 0 bytes" -#: js/files.js:208 +#: js/files.js:214 msgid "Upload Error" msgstr "Upload Fout" -#: js/files.js:236 js/files.js:341 js/files.js:371 +#: js/files.js:242 js/files.js:347 js/files.js:377 msgid "Pending" msgstr "Wachten" -#: js/files.js:256 +#: js/files.js:262 msgid "1 file uploading" -msgstr "" +msgstr "1 bestand wordt ge-upload" -#: js/files.js:259 js/files.js:304 js/files.js:319 +#: js/files.js:265 js/files.js:310 js/files.js:325 msgid "files uploading" -msgstr "" +msgstr "Bestanden aan het uploaden" -#: js/files.js:322 js/files.js:355 +#: js/files.js:328 js/files.js:361 msgid "Upload cancelled." msgstr "Uploaden geannuleerd." -#: js/files.js:424 +#: js/files.js:430 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Bestands upload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload." -#: js/files.js:494 +#: js/files.js:500 msgid "Invalid name, '/' is not allowed." msgstr "Ongeldige naam, '/' is niet toegestaan." -#: js/files.js:667 +#: js/files.js:681 msgid "files scanned" msgstr "Gescande bestanden" -#: js/files.js:675 +#: js/files.js:689 msgid "error while scanning" msgstr "Fout tijdens het scannen" -#: js/files.js:748 templates/index.php:48 +#: js/files.js:762 templates/index.php:48 msgid "Name" msgstr "Naam" -#: js/files.js:749 templates/index.php:56 +#: js/files.js:763 templates/index.php:56 msgid "Size" msgstr "Bestandsgrootte" -#: js/files.js:750 templates/index.php:58 +#: js/files.js:764 templates/index.php:58 msgid "Modified" msgstr "Laatst aangepast" -#: js/files.js:777 +#: js/files.js:791 msgid "folder" msgstr "map" -#: js/files.js:779 +#: js/files.js:793 msgid "folders" msgstr "mappen" -#: js/files.js:787 +#: js/files.js:801 msgid "file" msgstr "bestand" -#: js/files.js:789 +#: js/files.js:803 msgid "files" msgstr "bestanden" -#: js/files.js:833 +#: js/files.js:847 msgid "seconds ago" -msgstr "" +msgstr "seconden geleden" -#: js/files.js:834 +#: js/files.js:848 msgid "minute ago" -msgstr "" +msgstr "minuut geleden" -#: js/files.js:835 +#: js/files.js:849 msgid "minutes ago" -msgstr "" +msgstr "minuten geleden" -#: js/files.js:838 +#: js/files.js:852 msgid "today" -msgstr "" +msgstr "vandaag" -#: js/files.js:839 +#: js/files.js:853 msgid "yesterday" -msgstr "" +msgstr "gisteren" -#: js/files.js:840 +#: js/files.js:854 msgid "days ago" -msgstr "" +msgstr "dagen geleden" -#: js/files.js:841 +#: js/files.js:855 msgid "last month" -msgstr "" +msgstr "vorige maand" -#: js/files.js:843 +#: js/files.js:857 msgid "months ago" -msgstr "" +msgstr "maanden geleden" -#: js/files.js:844 +#: js/files.js:858 msgid "last year" -msgstr "" +msgstr "vorig jaar" -#: js/files.js:845 +#: js/files.js:859 msgid "years ago" -msgstr "" +msgstr "jaar geleden" #: templates/admin.php:5 msgid "File handling" diff --git a/l10n/nl/lib.po b/l10n/nl/lib.po index cd2b08ab962..421ed25800f 100644 --- a/l10n/nl/lib.po +++ b/l10n/nl/lib.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-13 02:05+0200\n" -"PO-Revision-Date: 2012-10-12 20:43+0000\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 09:09+0000\n" "Last-Translator: Richard Bos \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" @@ -40,7 +40,7 @@ msgstr "Apps" #: app.php:311 msgid "Admin" -msgstr "Administrator" +msgstr "Beheerder" #: files.php:328 msgid "ZIP download is turned off." diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po index 0090a534ed6..3decc2999c2 100644 --- a/l10n/nl/settings.po +++ b/l10n/nl/settings.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-13 02:05+0200\n" -"PO-Revision-Date: 2012-10-12 19:36+0000\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"PO-Revision-Date: 2012-10-13 09:09+0000\n" "Last-Translator: Richard Bos \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" @@ -97,7 +97,7 @@ msgstr "Inschakelen" msgid "Saving..." msgstr "Aan het bewaren....." -#: personal.php:47 personal.php:48 +#: personal.php:42 personal.php:43 msgid "__language_name__" msgstr "Nederlands" @@ -319,7 +319,7 @@ msgstr "Andere" #: templates/users.php:80 templates/users.php:112 msgid "Group Admin" -msgstr "Groep Administrator" +msgstr "Groep beheerder" #: templates/users.php:82 msgid "Quota" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 651f38bc470..915a405f313 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-13 02:04+0200\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 19b3af3c6b0..79c6cf29e4a 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-13 02:04+0200\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 536907bb008..e88c79bac94 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-13 02:04+0200\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index f04d2300cbb..c777afa0266 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-13 02:04+0200\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 499c844b6fa..873b3ed51e7 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-13 02:04+0200\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index db827defbd6..28461827040 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-13 02:04+0200\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 020ff3080e3..9d30d57aac4 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-13 02:05+0200\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index 009e49c13b6..b96487ae7b8 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-13 02:05+0200\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -88,7 +88,7 @@ msgstr "" msgid "Saving..." msgstr "" -#: personal.php:47 personal.php:48 +#: personal.php:42 personal.php:43 msgid "__language_name__" msgstr "" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index 3e8aebbb49b..8d5838f0b4e 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-13 02:04+0200\n" +"POT-Creation-Date: 2012-10-14 02:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/lib/l10n/nl.php b/lib/l10n/nl.php index c650071c03c..583956c66e6 100644 --- a/lib/l10n/nl.php +++ b/lib/l10n/nl.php @@ -4,7 +4,7 @@ "Settings" => "Instellingen", "Users" => "Gebruikers", "Apps" => "Apps", -"Admin" => "Administrator", +"Admin" => "Beheerder", "ZIP download is turned off." => "ZIP download is uitgeschakeld.", "Files need to be downloaded one by one." => "Bestanden moeten één voor één worden gedownload.", "Back to Files" => "Terug naar bestanden", diff --git a/settings/l10n/el.php b/settings/l10n/el.php index c6bb9857100..bf74d0bde21 100644 --- a/settings/l10n/el.php +++ b/settings/l10n/el.php @@ -4,7 +4,7 @@ "Group already exists" => "Η ομάδα υπάρχει ήδη", "Unable to add group" => "Αδυναμία προσθήκης ομάδας", "Could not enable app. " => "Αδυναμία ενεργοποίησης εφαρμογής ", -"Email saved" => "Το Email αποθηκεύτηκε ", +"Email saved" => "Το email αποθηκεύτηκε ", "Invalid email" => "Μη έγκυρο email", "OpenID Changed" => "Το OpenID άλλαξε", "Invalid request" => "Μη έγκυρο αίτημα", @@ -33,14 +33,15 @@ "Allow users to share with anyone" => "Να επιτρέπεται ο διαμοιρασμός με οποιονδήποτε", "Allow users to only share with users in their groups" => "Να επιτρέπεται ο διαμοιρασμός μόνο με χρήστες της ίδιας ομάδας", "Log" => "Αρχείο καταγραφής", -"More" => "Περισσότερο", +"More" => "Περισσότερα", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Αναπτύχθηκε από την κοινότητα ownCloud, ο πηγαίος κώδικας είναι υπό άδεια χρήσης AGPL.", -"Add your App" => "Πρόσθεσε τη δικιά σου εφαρμογή ", -"Select an App" => "Επιλέξτε μια εφαρμογή", -"See application page at apps.owncloud.com" => "Η σελίδα εφαρμογών στο apps.owncloud.com", +"Add your App" => "Πρόσθεστε τη Δικιά σας Εφαρμογή", +"More Apps" => "Περισσότερες Εφαρμογές", +"Select an App" => "Επιλέξτε μια Εφαρμογή", +"See application page at apps.owncloud.com" => "Δείτε την σελίδα εφαρμογών στο apps.owncloud.com", "-licensed by " => "-άδεια από ", "Documentation" => "Τεκμηρίωση", -"Managing Big Files" => "Διαχείριση μεγάλων αρχείων", +"Managing Big Files" => "Διαχείριση Μεγάλων Αρχείων", "Ask a question" => "Ρωτήστε μια ερώτηση", "Problems connecting to help database." => "Προβλήματα κατά τη σύνδεση με τη βάση δεδομένων βοήθειας.", "Go there manually." => "Χειροκίνητη μετάβαση.", @@ -55,18 +56,18 @@ "show" => "εμφάνιση", "Change password" => "Αλλαγή συνθηματικού", "Email" => "Email", -"Your email address" => "Διεύθυνση ηλεκτρονικού ταχυδρομείου σας", +"Your email address" => "Η διεύθυνση ηλεκτρονικού ταχυδρομείου σας", "Fill in an email address to enable password recovery" => "Συμπληρώστε μια διεύθυνση ηλεκτρονικού ταχυδρομείου για να ενεργοποιηθεί η ανάκτηση συνθηματικού", "Language" => "Γλώσσα", -"Help translate" => "Βοηθήστε στην μετάφραση", -"use this address to connect to your ownCloud in your file manager" => "χρησιμοποιήστε αυτή τη διεύθυνση για να συνδεθείτε στο ownCloud σας από το διαχειριστή αρχείων σας", +"Help translate" => "Βοηθήστε στη μετάφραση", +"use this address to connect to your ownCloud in your file manager" => "χρησιμοποιήστε αυτήν τη διεύθυνση για να συνδεθείτε στο ownCloud σας από το διαχειριστή αρχείων σας", "Name" => "Όνομα", "Password" => "Συνθηματικό", "Groups" => "Ομάδες", "Create" => "Δημιουργία", -"Default Quota" => "Προεπιλεγμένο όριο", +"Default Quota" => "Προεπιλεγμένο Όριο", "Other" => "Άλλα", "Group Admin" => "Ομάδα Διαχειριστών", -"Quota" => "Σύνολο χώρου", +"Quota" => "Σύνολο Χώρου", "Delete" => "Διαγραφή" ); diff --git a/settings/l10n/eo.php b/settings/l10n/eo.php index 7052bf34c92..2c8263d292f 100644 --- a/settings/l10n/eo.php +++ b/settings/l10n/eo.php @@ -1,30 +1,50 @@ "Ne eblis ŝargi liston el aplikaĵovendejo", "Authentication error" => "Aŭtentiga eraro", +"Group already exists" => "La grupo jam ekzistas", +"Unable to add group" => "Ne eblis aldoni la grupon", +"Could not enable app. " => "Ne eblis kapabligi la aplikaĵon.", "Email saved" => "La retpoŝtadreso konserviĝis", "Invalid email" => "Nevalida retpoŝtadreso", "OpenID Changed" => "La agordo de OpenID estas ŝanĝita", "Invalid request" => "Nevalida peto", +"Unable to delete group" => "Ne eblis forigi la grupon", +"Unable to delete user" => "Ne eblis forigi la uzanton", "Language changed" => "La lingvo estas ŝanĝita", +"Unable to add user to group %s" => "Ne eblis aldoni la uzanton al la grupo %s", +"Unable to remove user from group %s" => "Ne eblis forigi la uzantan el la grupo %s", "Disable" => "Malkapabligi", "Enable" => "Kapabligi", "Saving..." => "Konservante...", "__language_name__" => "Esperanto", "Security Warning" => "Sekureca averto", "Cron" => "Cron", +"Sharing" => "Kunhavigo", +"Enable Share API" => "Kapabligi API-on por Kunhavigo", +"Allow apps to use the Share API" => "Kapabligi aplikaĵojn uzi la API-on pri Kunhavigo", +"Allow links" => "Kapabligi ligilojn", +"Allow users to share items to the public with links" => "Kapabligi uzantojn kunhavigi erojn kun la publiko perligile", +"Allow resharing" => "Kapabligi rekunhavigon", +"Allow users to share items shared with them again" => "Kapabligi uzantojn rekunhavigi erojn kunhavigitajn kun ili", +"Allow users to share with anyone" => "Kapabligi uzantojn kunhavigi kun ĉiu ajn", +"Allow users to only share with users in their groups" => "Kapabligi uzantojn nur kunhavigi kun uzantoj el siaj grupoj", "Log" => "Protokolo", "More" => "Pli", "Add your App" => "Aldonu vian aplikaĵon", +"More Apps" => "Pli da aplikaĵoj", "Select an App" => "Elekti aplikaĵon", "See application page at apps.owncloud.com" => "Vidu la paĝon pri aplikaĵoj ĉe apps.owncloud.com", +"-licensed by " => "-permesilhavigita de ", "Documentation" => "Dokumentaro", "Managing Big Files" => "Administrante grandajn dosierojn", "Ask a question" => "Faru demandon", "Problems connecting to help database." => "Problemoj okazis dum konektado al la helpa datumbazo.", "Go there manually." => "Iri tien mane.", "Answer" => "Respondi", +"You have used %s of the available %s" => "Vi uzas %s el la haveblaj %s", "Desktop and Mobile Syncing Clients" => "Labortablaj kaj porteblaj sinkronigoklientoj", "Download" => "Elŝuti", +"Your password was changed" => "Via pasvorto ŝanĝiĝis", "Unable to change your password" => "Ne eblis ŝanĝi vian pasvorton", "Current password" => "Nuna pasvorto", "New password" => "Nova pasvorto", diff --git a/settings/l10n/ja_JP.php b/settings/l10n/ja_JP.php index 72f79837d90..38e9dfda65a 100644 --- a/settings/l10n/ja_JP.php +++ b/settings/l10n/ja_JP.php @@ -36,6 +36,7 @@ "More" => "もっと", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "ownCloud communityにより開発されています、ソースコードライセンスは、AGPL ライセンスにより提供されています。", "Add your App" => "アプリを追加", +"More Apps" => "さらにアプリを表示", "Select an App" => "アプリを選択してください", "See application page at apps.owncloud.com" => "apps.owncloud.com でアプリケーションのページを見てください", "-licensed by " => "-ライセンス: ", diff --git a/settings/l10n/nl.php b/settings/l10n/nl.php index d7bd4267ac1..d24c4f04ad1 100644 --- a/settings/l10n/nl.php +++ b/settings/l10n/nl.php @@ -67,7 +67,7 @@ "Create" => "Creëer", "Default Quota" => "Standaard limiet", "Other" => "Andere", -"Group Admin" => "Groep Administrator", +"Group Admin" => "Groep beheerder", "Quota" => "Limieten", "Delete" => "verwijderen" ); -- GitLab From 99cd922b82ca7684967ec3533fcdd5af32c0edc7 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sun, 14 Oct 2012 12:12:55 +0200 Subject: [PATCH 046/576] Doublehash the token to prevent timing attacks --- core/lostpassword/index.php | 4 ++-- core/lostpassword/resetpassword.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/lostpassword/index.php b/core/lostpassword/index.php index 4cd8b9079fd..906208dcbc4 100644 --- a/core/lostpassword/index.php +++ b/core/lostpassword/index.php @@ -13,8 +13,8 @@ require_once '../../lib/base.php'; // Someone lost their password: if (isset($_POST['user'])) { if (OC_User::userExists($_POST['user'])) { - $token = hash("sha256", $_POST['user'].OC_Util::generate_random_bytes(10)); - OC_Preferences::setValue($_POST['user'], 'owncloud', 'lostpassword', $token); + $token = hash("sha256", OC_Util::generate_random_bytes(30).OC_Config::getValue('passwordsalt', '')); + OC_Preferences::setValue($_POST['user'], 'owncloud', 'lostpassword', hash("sha256", $token)); // Hash the token again to prevent timing attacks $email = OC_Preferences::getValue($_POST['user'], 'settings', 'email', ''); if (!empty($email)) { $link = OC_Helper::linkToAbsolute('core/lostpassword', 'resetpassword.php', array('user' => $_POST['user'], 'token' => $token)); diff --git a/core/lostpassword/resetpassword.php b/core/lostpassword/resetpassword.php index 28a0063fc64..896c8da76e0 100644 --- a/core/lostpassword/resetpassword.php +++ b/core/lostpassword/resetpassword.php @@ -10,7 +10,7 @@ $RUNTIME_NOAPPS = TRUE; //no apps require_once '../../lib/base.php'; // Someone wants to reset their password: -if(isset($_GET['token']) && isset($_GET['user']) && OC_Preferences::getValue($_GET['user'], 'owncloud', 'lostpassword') === $_GET['token']) { +if(isset($_GET['token']) && isset($_GET['user']) && OC_Preferences::getValue($_GET['user'], 'owncloud', 'lostpassword') === hash("sha256", $_GET['token'])) { if (isset($_POST['password'])) { if (OC_User::setPassword($_GET['user'], $_POST['password'])) { OC_Preferences::deleteKey($_GET['user'], 'owncloud', 'lostpassword'); -- GitLab From d6c4b83f13976b19f471ce3a02c5b872c2f79bdc Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sun, 14 Oct 2012 16:14:45 +0200 Subject: [PATCH 047/576] Fallback to /dev/random if openssl_random_pseudo_bytes not available --- lib/util.php | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/util.php b/lib/util.php index afbea9a00cb..748886083dd 100755 --- a/lib/util.php +++ b/lib/util.php @@ -556,12 +556,13 @@ class OC_Util { } /* - * @brief Generates random bytes with "openssl_random_pseudo_bytes" with a fallback for systems without openssl - * Inspired by gorgo on php.net - * @param Int with the length of the random - * @return String with the random bytes + * @brief Generates a cryptographical secure pseudorandom string + * @param Int with the length of the random string + * @return String */ public static function generate_random_bytes($length = 30) { + + // Try to use openssl_random_pseudo_bytes if(function_exists('openssl_random_pseudo_bytes')) { $pseudo_byte = bin2hex(openssl_random_pseudo_bytes($length, $strong)); if($strong == TRUE) { @@ -569,9 +570,16 @@ class OC_Util { } } - // fallback to mt_rand() + // Try to use /dev/random + $fp = @file_get_contents('/dev/random', false, null, 0, $length); + if ($fp !== FALSE) { + $string = substr(bin2hex($fp), 0, $length); + return $string; + } + + // Fallback to mt_rand() $characters = '0123456789'; - $characters .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; + $characters .= 'abcdefghijklmnopqrstuvwxyz'; $charactersLength = strlen($characters)-1; $pseudo_byte = ""; -- GitLab From 2c427f050e2bc263b5c4c2faabf73e3993f1d29d Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sun, 14 Oct 2012 17:17:06 +0200 Subject: [PATCH 048/576] Show a warning in the installer if no secure RNG is available --- core/templates/installation.php | 10 ++++++++-- lib/setup.php | 2 ++ lib/util.php | 24 ++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/core/templates/installation.php b/core/templates/installation.php index 1a05c3fb762..426d60989a6 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -3,7 +3,6 @@ '> '>
    - 0): ?>
      @@ -19,7 +18,14 @@
    - + +
    + t('Security Warning');?> + t('No secure random number generator is available, please enable the PHP OpenSSL extension.');?> +
    + t('Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account.');?> +
    +
    t( 'Create an admin account' ); ?>

    diff --git a/lib/setup.php b/lib/setup.php index 16b9ec68df6..be4101fd7b0 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -5,12 +5,14 @@ $hasMySQL = is_callable('mysql_connect'); $hasPostgreSQL = is_callable('pg_connect'); $hasOracle = is_callable('oci_connect'); $datadir = OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data'); + $opts = array( 'hasSQLite' => $hasSQLite, 'hasMySQL' => $hasMySQL, 'hasPostgreSQL' => $hasPostgreSQL, 'hasOracle' => $hasOracle, 'directory' => $datadir, + 'secureRNG' => OC_Util::secureRNG_available(), 'errors' => array(), ); diff --git a/lib/util.php b/lib/util.php index 748886083dd..9fde98c1972 100755 --- a/lib/util.php +++ b/lib/util.php @@ -559,6 +559,7 @@ class OC_Util { * @brief Generates a cryptographical secure pseudorandom string * @param Int with the length of the random string * @return String + * Please also update secureRNG_available if you change something here */ public static function generate_random_bytes($length = 30) { @@ -589,4 +590,27 @@ class OC_Util { } return $pseudo_byte; } + + /* + * @brief Checks if a secure random number generator is available + * @return bool + */ + public static function secureRNG_available() { + + // Check openssl_random_pseudo_bytes + if(function_exists('openssl_random_pseudo_bytes')) { + openssl_random_pseudo_bytes(1, $strong); + if($strong == TRUE) { + return true; + } + } + + // Check /dev/random + $fp = @file_get_contents('/dev/random', false, null, 0, 1); + if ($fp !== FALSE) { + return true; + } + + return false; + } } -- GitLab From 7095b3a083041a435adc50afbec397bd9be614c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Fri, 12 Oct 2012 16:12:43 +0200 Subject: [PATCH 049/576] extend logon page to display multiple error messages --- core/templates/login.php | 15 +++++++++++++-- lib/base.php | 10 +++++----- lib/util.php | 6 ++++-- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/core/templates/login.php b/core/templates/login.php index bb7a8337523..a3a62b97958 100644 --- a/core/templates/login.php +++ b/core/templates/login.php @@ -2,9 +2,20 @@

    '; } ?> - - t('Lost your password?'); ?> +
      + +
    • + t('Automatic logon rejected!'); ?>
      + t('If you did not change your password recently, your account may be compromised!'); ?>
      + t('Please change your password to secure your account again.'); ?> +
    • + +
    • + t('Lost your password?'); ?> +
    • + +

    autocomplete="on" required /> diff --git a/lib/base.php b/lib/base.php index 51f8f4efc5b..9f21e26279f 100644 --- a/lib/base.php +++ b/lib/base.php @@ -494,20 +494,20 @@ class OC{ protected static function handleLogin() { OC_App::loadApps(array('prelogin')); - $error = false; + $error = array(); // remember was checked after last login if (OC::tryRememberLogin()) { - // nothing more to do + $error[] = 'invalidcookie'; // Someone wants to log in : } elseif (OC::tryFormLogin()) { - $error = true; + $error[] = 'invalidpassword'; // The user is already authenticated using Apaches AuthType Basic... very usable in combination with LDAP } elseif (OC::tryBasicAuthLogin()) { - $error = true; + $error[] = 'invalidpassword'; } - OC_Util::displayLoginPage($error); + OC_Util::displayLoginPage(array_unique($error)); } protected static function tryRememberLogin() { diff --git a/lib/util.php b/lib/util.php index d01a1aa405c..564407779dc 100755 --- a/lib/util.php +++ b/lib/util.php @@ -308,9 +308,11 @@ class OC_Util { return $errors; } - public static function displayLoginPage($display_lostpassword) { + public static function displayLoginPage($errors = array()) { $parameters = array(); - $parameters['display_lostpassword'] = $display_lostpassword; + foreach( $errors as $key => $value ) { + $parameters[$value] = true; + } if (!empty($_POST['user'])) { $parameters["username"] = OC_Util::sanitizeHTML($_POST['user']).'"'; -- GitLab From 4af5b016cc0bb4e5f7e73a50d38e16d3c539bf5f Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sun, 14 Oct 2012 21:04:08 +0200 Subject: [PATCH 050/576] Whitespace cleanup --- apps/files/admin.php | 1 - apps/files/css/files.css | 1 - apps/files/js/filelist.js | 8 +- apps/files/js/files.js | 2 +- apps/files/templates/part.list.php | 2 +- .../ajax/addRootCertificate.php | 12 +- .../ajax/removeRootCertificate.php | 1 - apps/files_external/lib/config.php | 6 +- apps/files_sharing/lib/share/folder.php | 2 +- apps/files_sharing/public.php | 12 +- apps/files_versions/js/versions.js | 6 +- apps/files_versions/lib/versions.php | 2 +- lib/app.php | 34 +- lib/connector/sabre/directory.php | 2 +- lib/connector/sabre/principal.php | 4 +- lib/db.php | 4 +- lib/fileproxy/fileoperations.php | 62 +- lib/image.php | 2 +- lib/migration/content.php | 4 +- lib/ocsclient.php | 2 +- lib/public/share.php | 2502 ++++++++--------- lib/updater.php | 12 +- lib/util.php | 20 +- 23 files changed, 1350 insertions(+), 1353 deletions(-) diff --git a/apps/files/admin.php b/apps/files/admin.php index 547f2bd7ddb..e8b3cb0aca0 100644 --- a/apps/files/admin.php +++ b/apps/files/admin.php @@ -63,4 +63,3 @@ $tmpl->assign( 'maxPossibleUploadSize', $maxUploadFilesizePossible); $tmpl->assign( 'allowZipDownload', $allowZipDownload); $tmpl->assign( 'maxZipInputSize', $maxZipInputSize); return $tmpl->fetchPage(); - diff --git a/apps/files/css/files.css b/apps/files/css/files.css index f15cd514241..14482c5edb5 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -89,4 +89,3 @@ a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; } #scanning-message{ top:40%; left:40%; position:absolute; display:none; } div.crumb a{ padding: 0.9em 0 0.7em 0; } - diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 100a2368722..870437ae672 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -150,7 +150,7 @@ var FileList={ if (newname != name) { if (FileList.checkName(name, newname, false)) { newname = name; - } else { + } else { $.get(OC.filePath('files','ajax','rename.php'), { dir : $('#dir').val(), newname: newname, file: name },function(result) { if (!result || result.status == 'error') { OC.dialogs.alert(result.data.message, 'Error moving file'); @@ -158,7 +158,7 @@ var FileList={ } tr.data('renaming',false); }); - + } } tr.attr('data-file', newname); @@ -264,9 +264,9 @@ var FileList={ if (FileList.lastAction) { FileList.lastAction(); } - + FileList.prepareDeletion(files); - + if (!FileList.useUndo) { FileList.lastAction(); } else { diff --git a/apps/files/js/files.js b/apps/files/js/files.js index c5333f2fafb..777a5ec647e 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -199,7 +199,7 @@ $(document).ready(function() { $(document).bind('drop dragover', function (e) { e.preventDefault(); // prevent browser from doing anything, if file isn't dropped in dropZone }); - + if ( document.getElementById("data-upload-form") ) { $(function() { $('.file_upload_start').fileupload({ diff --git a/apps/files/templates/part.list.php b/apps/files/templates/part.list.php index 1329b5dc5cd..0f5b839b180 100644 --- a/apps/files/templates/part.list.php +++ b/apps/files/templates/part.list.php @@ -6,7 +6,7 @@ } ?> - + file_exists('')) $view->mkdir(''); $isValid = openssl_pkey_get_public($data); //maybe it was just the wrong file format, try to convert it... if ($isValid == false) { - $data = chunk_split(base64_encode($data), 64, "\n"); + $data = chunk_split(base64_encode($data), 64, "\n"); $data = "-----BEGIN CERTIFICATE-----\n".$data."-----END CERTIFICATE-----\n"; $isValid = openssl_pkey_get_public($data); } diff --git a/apps/files_external/ajax/removeRootCertificate.php b/apps/files_external/ajax/removeRootCertificate.php index 6871b0fd1d4..664b3937e97 100644 --- a/apps/files_external/ajax/removeRootCertificate.php +++ b/apps/files_external/ajax/removeRootCertificate.php @@ -11,4 +11,3 @@ if ( $view->file_exists($file) ) { $view->unlink($file); OC_Mount_Config::createCertificateBundle(); } - diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 0a576f06f1f..068475783cd 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -120,10 +120,10 @@ class OC_Mount_Config { $dir = $dir.'/'.$pathPart; if ( !$view->file_exists($dir)) { $view->mkdir($dir); - } + } } } - + /** * Add a mount point to the filesystem @@ -160,7 +160,7 @@ class OC_Mount_Config { self::addMountPointDirectory($view, $path); } break; - case 'group' : + case 'group' : $groupMembers = OC_Group::usersInGroups(array($applicable)); foreach ( $groupMembers as $user ) { $path = $user.'/files/'.ltrim($mountPoint, '/'); diff --git a/apps/files_sharing/lib/share/folder.php b/apps/files_sharing/lib/share/folder.php index e29e9b7e002..bddda99f8bb 100644 --- a/apps/files_sharing/lib/share/folder.php +++ b/apps/files_sharing/lib/share/folder.php @@ -59,7 +59,7 @@ class OC_Share_Backend_Folder extends OC_Share_Backend_File implements OCP\Share $parents = array(); while ($file = $result->fetchRow()) { $children[] = array('source' => $file['id'], 'file_path' => $file['name']); - // If a child folder is found look inside it + // If a child folder is found look inside it if ($file['mimetype'] == 'httpd/unix-directory') { $parents[] = $file['id']; } diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index e9f318efd9d..d79f1955978 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -45,10 +45,10 @@ if (isset($_GET['file']) || isset($_GET['dir'])) { } if (isset($linkItem['share_with'])) { // Check password - if (isset($_GET['file'])) { - $url = OCP\Util::linkToPublic('files').'&file='.$_GET['file']; - } else { - $url = OCP\Util::linkToPublic('files').'&dir='.$_GET['dir']; + if (isset($_GET['file'])) { + $url = OCP\Util::linkToPublic('files').'&file='.$_GET['file']; + } else { + $url = OCP\Util::linkToPublic('files').'&dir='.$_GET['dir']; } if (isset($_POST['password'])) { $password = $_POST['password']; @@ -98,7 +98,7 @@ if (isset($_GET['file']) || isset($_GET['dir'])) { } else { // download a single shared file OC_Files::get("", $path, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); } - + } else { OCP\Util::addStyle('files_sharing', 'public'); OCP\Util::addScript('files_sharing', 'public'); @@ -134,7 +134,7 @@ if (isset($_GET['file']) || isset($_GET['dir'])) { if ($i != '') { if ($i != $baseDir) { $pathtohere .= '/'.$i; - } + } if ( strlen($pathtohere) < strlen($_GET['dir'])) { continue; } diff --git a/apps/files_versions/js/versions.js b/apps/files_versions/js/versions.js index 07c5655560e..426d521df82 100644 --- a/apps/files_versions/js/versions.js +++ b/apps/files_versions/js/versions.js @@ -68,7 +68,7 @@ function createVersionsDropdown(filename, files) { data: { source: files }, async: false, success: function( versions ) { - + if (versions) { $.each( versions, function(index, row ) { addVersion( row ); @@ -128,7 +128,7 @@ function createVersionsDropdown(filename, files) { version.appendTo('#found_versions'); } - + $('tr').filterAttr('data-file',filename).addClass('mouseOver'); $('#dropdown').show('blind'); @@ -144,6 +144,6 @@ $(this).click( }); } - + } ); diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index b68fa28a1ff..076094ae781 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -106,7 +106,7 @@ class Storage { // create all parent folders - $info=pathinfo($filename); + $info=pathinfo($filename); if(!file_exists($versionsFolderName.'/'.$info['dirname'])) { mkdir($versionsFolderName.'/'.$info['dirname'],0750,true); } diff --git a/lib/app.php b/lib/app.php index 395230156f6..594f0577091 100755 --- a/lib/app.php +++ b/lib/app.php @@ -63,7 +63,7 @@ class OC_App{ if (!defined('DEBUG') || !DEBUG) { if (is_null($types) - && empty(OC_Util::$core_scripts) + && empty(OC_Util::$core_scripts) && empty(OC_Util::$core_styles)) { OC_Util::$core_scripts = OC_Util::$scripts; OC_Util::$scripts = array(); @@ -458,7 +458,7 @@ class OC_App{ } } self::$appInfo[$appid]=$data; - + return $data; } @@ -545,34 +545,34 @@ class OC_App{ * @todo: change the name of this method to getInstalledApps, which is more accurate */ public static function getAllApps() { - + $apps=array(); - + foreach ( OC::$APPSROOTS as $apps_dir ) { if(! is_readable($apps_dir['path'])) { OC_Log::write('core', 'unable to read app folder : ' .$apps_dir['path'] , OC_Log::WARN); continue; } $dh = opendir( $apps_dir['path'] ); - + while( $file = readdir( $dh ) ) { - - if ( - $file[0] != '.' - and is_file($apps_dir['path'].'/'.$file.'/appinfo/app.php' ) + + if ( + $file[0] != '.' + and is_file($apps_dir['path'].'/'.$file.'/appinfo/app.php' ) ) { - + $apps[] = $file; - + } - + } - + } - + return $apps; } - + /** * @brief: get a list of all apps on apps.owncloud.com * @return array, multi-dimensional array of apps. Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description @@ -584,7 +584,7 @@ class OC_App{ if ( ! $categories = array_keys( $catagoryNames ) ) { return false; } - + $page = 0; $remoteApps = OC_OCSClient::getApplications( $categories, $page, $filter ); $app1 = array(); @@ -659,7 +659,7 @@ class OC_App{ $version = OC_Util::getVersion(); foreach($apps as $app) { // check if the app is compatible with this version of ownCloud - $info = OC_App::getAppInfo($app); + $info = OC_App::getAppInfo($app); if(!isset($info['require']) or (($version[0].'.'.$version[1])>$info['require'])) { OC_Log::write('core', 'App "'.$info['name'].'" ('.$app.') can\'t be used because it is not compatible with this version of ownCloud', OC_Log::ERROR); OC_App::disable( $app ); diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php index 413efef73b7..b6e02569d2a 100644 --- a/lib/connector/sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -200,7 +200,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa public function getProperties($properties) { $props = parent::getProperties($properties); if (in_array(self::GETETAG_PROPERTYNAME, $properties) && !isset($props[self::GETETAG_PROPERTYNAME])) { - $props[self::GETETAG_PROPERTYNAME] + $props[self::GETETAG_PROPERTYNAME] = OC_Connector_Sabre_Node::getETagPropertyForPath($this->path); } return $props; diff --git a/lib/connector/sabre/principal.php b/lib/connector/sabre/principal.php index ee95ae63306..763503721f8 100644 --- a/lib/connector/sabre/principal.php +++ b/lib/connector/sabre/principal.php @@ -115,11 +115,11 @@ class OC_Connector_Sabre_Principal implements Sabre_DAVACL_IPrincipalBackend { public function setGroupMemberSet($principal, array $members) { throw new Sabre_DAV_Exception('Setting members of the group is not supported yet'); } - + function updatePrincipal($path, $mutations) { return 0; } - + function searchPrincipals($prefixPath, array $searchProperties) { return 0; } diff --git a/lib/db.php b/lib/db.php index 6c9eec5637d..a43f2ad20b2 100644 --- a/lib/db.php +++ b/lib/db.php @@ -476,7 +476,7 @@ class OC_DB { public static function updateDbFromStructure($file) { $CONFIG_DBTABLEPREFIX = OC_Config::getValue( "dbtableprefix", "oc_" ); $CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" ); - + self::connectScheme(); // read file @@ -683,7 +683,7 @@ class OC_DB { return false; } } - + /** * returns the error code and message as a string for logging * works with MDB2 and PDOException diff --git a/lib/fileproxy/fileoperations.php b/lib/fileproxy/fileoperations.php index fe7edafad2b..23fb63fcfb1 100644 --- a/lib/fileproxy/fileoperations.php +++ b/lib/fileproxy/fileoperations.php @@ -1,37 +1,37 @@ - * - * 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 . - * - */ - -/** - * check if standard file operations +/** + * ownCloud + * + * @author Bjoern Schiessle + * @copyright 2012 Bjoern Schiessle + * + * 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 . + * */ - -class OC_FileProxy_FileOperations extends OC_FileProxy{ - static $rootView; - public function premkdir($path) { - if(!self::$rootView){ - self::$rootView = new OC_FilesystemView(''); +/** + * check if standard file operations + */ + +class OC_FileProxy_FileOperations extends OC_FileProxy{ + static $rootView; + + public function premkdir($path) { + if(!self::$rootView){ + self::$rootView = new OC_FilesystemView(''); } - return !self::$rootView->file_exists($path); + return !self::$rootView->file_exists($path); } - + } \ No newline at end of file diff --git a/lib/image.php b/lib/image.php index 861353e039d..016d20599b2 100644 --- a/lib/image.php +++ b/lib/image.php @@ -669,7 +669,7 @@ class OC_Image { $newWidth = min($maxWidth, $ratio*$maxHeight); $newHeight = min($maxHeight, $maxWidth/$ratio); - + $this->preciseResize(round($newWidth), round($newHeight)); return true; } diff --git a/lib/migration/content.php b/lib/migration/content.php index 89b1e782d86..87f8da68c9d 100644 --- a/lib/migration/content.php +++ b/lib/migration/content.php @@ -48,7 +48,7 @@ class OC_Migration_Content{ // @brief prepares the db // @param $query the sql query to prepare public function prepare( $query ) { - + // Only add database to tmpfiles if actually used if( !is_null( $this->db ) ) { // Get db path @@ -57,7 +57,7 @@ class OC_Migration_Content{ $this->tmpfiles[] = $db; } } - + // Optimize the query $query = $this->processQuery( $query ); diff --git a/lib/ocsclient.php b/lib/ocsclient.php index 794bc972f57..3c80f319662 100644 --- a/lib/ocsclient.php +++ b/lib/ocsclient.php @@ -62,7 +62,7 @@ class OC_OCSClient{ 'timeout' => 10 ) ) - ); + ); $data=@file_get_contents($url, 0, $ctx); return($data); } diff --git a/lib/public/share.php b/lib/public/share.php index 1db3a0b2c1d..faa44d74735 100644 --- a/lib/public/share.php +++ b/lib/public/share.php @@ -1,1251 +1,1251 @@ -. -*/ -namespace OCP; - -\OC_Hook::connect('OC_User', 'post_deleteUser', 'OCP\Share', 'post_deleteUser'); -\OC_Hook::connect('OC_User', 'post_addToGroup', 'OCP\Share', 'post_addToGroup'); -\OC_Hook::connect('OC_User', 'post_removeFromGroup', 'OCP\Share', 'post_removeFromGroup'); -\OC_Hook::connect('OC_User', 'post_deleteGroup', 'OCP\Share', 'post_deleteGroup'); - -/** -* This class provides the ability for apps to share their content between users. -* Apps must create a backend class that implements OCP\Share_Backend and register it with this class. -*/ -class Share { - - const SHARE_TYPE_USER = 0; - const SHARE_TYPE_GROUP = 1; - const SHARE_TYPE_LINK = 3; - const SHARE_TYPE_EMAIL = 4; - const SHARE_TYPE_CONTACT = 5; - const SHARE_TYPE_REMOTE = 6; - - /** CRUDS permissions (Create, Read, Update, Delete, Share) using a bitmask - * Construct permissions for share() and setPermissions with Or (|) e.g. Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE - * Check if permission is granted with And (&) e.g. Check if delete is granted: if ($permissions & PERMISSION_DELETE) - * Remove permissions with And (&) and Not (~) e.g. Remove the update permission: $permissions &= ~PERMISSION_UPDATE - * Apps are required to handle permissions on their own, this class only stores and manages the permissions of shares - */ - const PERMISSION_CREATE = 4; - const PERMISSION_READ = 1; - const PERMISSION_UPDATE = 2; - const PERMISSION_DELETE = 8; - const PERMISSION_SHARE = 16; - - const FORMAT_NONE = -1; - const FORMAT_STATUSES = -2; - const FORMAT_SOURCES = -3; - - private static $shareTypeUserAndGroups = -1; - private static $shareTypeGroupUserUnique = 2; - private static $backends = array(); - private static $backendTypes = array(); - - /** - * @brief Register a sharing backend class that implements OCP\Share_Backend for an item type - * @param string Item type - * @param string Backend class - * @param string (optional) Depends on item type - * @param array (optional) List of supported file extensions if this item type depends on files - * @return Returns true if backend is registered or false if error - */ - public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) { - if (self::isEnabled()) { - if (!isset(self::$backendTypes[$itemType])) { - self::$backendTypes[$itemType] = array('class' => $class, 'collectionOf' => $collectionOf, 'supportedFileExtensions' => $supportedFileExtensions); - if(count(self::$backendTypes) === 1) { - \OC_Util::addScript('core', 'share'); - \OC_Util::addStyle('core', 'share'); - } - return true; - } - \OC_Log::write('OCP\Share', 'Sharing backend '.$class.' not registered, '.self::$backendTypes[$itemType]['class'].' is already registered for '.$itemType, \OC_Log::WARN); - } - return false; - } - - /** - * @brief Check if the Share API is enabled - * @return Returns true if enabled or false - * - * The Share API is enabled by default if not configured - * - */ - public static function isEnabled() { - if (\OC_Appconfig::getValue('core', 'shareapi_enabled', 'yes') == 'yes') { - return true; - } - return false; - } - - /** - * @brief Get the items of item type shared with the current user - * @param string Item type - * @param int Format (optional) Format type must be defined by the backend - * @param int Number of items to return (optional) Returns all by default - * @return Return depends on format - */ - public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) { - return self::getItems($itemType, null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, $limit, $includeCollections); - } - - /** - * @brief Get the item of item type shared with the current user - * @param string Item type - * @param string Item target - * @param int Format (optional) Format type must be defined by the backend - * @return Return depends on format - */ - public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { - return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections); - } - - /** - * @brief Get the item of item type shared with the current user by source - * @param string Item type - * @param string Item source - * @param int Format (optional) Format type must be defined by the backend - * @return Return depends on format - */ - public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { - return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections, true); - } - - /** - * @brief Get the item of item type shared by a link - * @param string Item type - * @param string Item source - * @param string Owner of link - * @return Item - */ - public static function getItemSharedWithByLink($itemType, $itemSource, $uidOwner) { - return self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1); - } - - /** - * @brief Get the shared items of item type owned by the current user - * @param string Item type - * @param int Format (optional) Format type must be defined by the backend - * @param int Number of items to return (optional) Returns all by default - * @return Return depends on format - */ - public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) { - return self::getItems($itemType, null, null, null, \OC_User::getUser(), $format, $parameters, $limit, $includeCollections); - } - - /** - * @brief Get the shared item of item type owned by the current user - * @param string Item type - * @param string Item source - * @param int Format (optional) Format type must be defined by the backend - * @return Return depends on format - */ - public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { - return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format, $parameters, -1, $includeCollections); - } - - /** - * @brief Share an item with a user, group, or via private link - * @param string Item type - * @param string Item source - * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK - * @param string User or group the item is being shared with - * @param int CRUDS permissions - * @return bool Returns true on success or false on failure - */ - public static function shareItem($itemType, $itemSource, $shareType, $shareWith, $permissions) { - $uidOwner = \OC_User::getUser(); - $sharingPolicy = \OC_Appconfig::getValue('core', 'shareapi_share_policy', 'global'); - // Verify share type and sharing conditions are met - if ($shareType === self::SHARE_TYPE_USER) { - if ($shareWith == $uidOwner) { - $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is the item owner'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - if (!\OC_User::userExists($shareWith)) { - $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' does not exist'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - if ($sharingPolicy == 'groups_only') { - $inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith)); - if (empty($inGroup)) { - $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is not a member of any groups that '.$uidOwner.' is a member of'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - } - // Check if the item source is already shared with the user, either from the same owner or a different user - if ($checkExists = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) { - // Only allow the same share to occur again if it is the same owner and is not a user share, this use case is for increasing permissions for a specific user - if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) { - $message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - } - } else if ($shareType === self::SHARE_TYPE_GROUP) { - if (!\OC_Group::groupExists($shareWith)) { - $message = 'Sharing '.$itemSource.' failed, because the group '.$shareWith.' does not exist'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - if ($sharingPolicy == 'groups_only' && !\OC_Group::inGroup($uidOwner, $shareWith)) { - $message = 'Sharing '.$itemSource.' failed, because '.$uidOwner.' is not a member of the group '.$shareWith; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - // Check if the item source is already shared with the group, either from the same owner or a different user - // The check for each user in the group is done inside the put() function - if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) { - // Only allow the same share to occur again if it is the same owner and is not a group share, this use case is for increasing permissions for a specific user - if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) { - $message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - } - // Convert share with into an array with the keys group and users - $group = $shareWith; - $shareWith = array(); - $shareWith['group'] = $group; - $shareWith['users'] = array_diff(\OC_Group::usersInGroup($group), array($uidOwner)); - } else if ($shareType === self::SHARE_TYPE_LINK) { - if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') == 'yes') { - if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1)) { - // If password is set delete the old link - if (isset($shareWith)) { - self::delete($checkExists['id']); - } else { - $message = 'Sharing '.$itemSource.' failed, because this item is already shared with a link'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - } - // Generate hash of password - same method as user passwords - if (isset($shareWith)) { - $forcePortable = (CRYPT_BLOWFISH != 1); - $hasher = new \PasswordHash(8, $forcePortable); - $shareWith = $hasher->HashPassword($shareWith.\OC_Config::getValue('passwordsalt', '')); - } - return self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions); - } - $message = 'Sharing '.$itemSource.' failed, because sharing with links is not allowed'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - return false; -// } else if ($shareType === self::SHARE_TYPE_CONTACT) { -// if (!\OC_App::isEnabled('contacts')) { -// $message = 'Sharing '.$itemSource.' failed, because the contacts app is not enabled'; -// \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); -// return false; -// } -// $vcard = \OC_Contacts_App::getContactVCard($shareWith); -// if (!isset($vcard)) { -// $message = 'Sharing '.$itemSource.' failed, because the contact does not exist'; -// \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); -// throw new \Exception($message); -// } -// $details = \OC_Contacts_VCard::structureContact($vcard); -// // TODO Add ownCloud user to contacts vcard -// if (!isset($details['EMAIL'])) { -// $message = 'Sharing '.$itemSource.' failed, because no email address is associated with the contact'; -// \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); -// throw new \Exception($message); -// } -// return self::shareItem($itemType, $itemSource, self::SHARE_TYPE_EMAIL, $details['EMAIL'], $permissions); - } else { - // Future share types need to include their own conditions - $message = 'Share type '.$shareType.' is not valid for '.$itemSource; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - // If the item is a folder, scan through the folder looking for equivalent item types - if ($itemType == 'folder') { - $parentFolder = self::put('folder', $itemSource, $shareType, $shareWith, $uidOwner, $permissions, true); - if ($parentFolder && $files = \OC_Files::getDirectoryContent($itemSource)) { - for ($i = 0; $i < count($files); $i++) { - $name = substr($files[$i]['name'], strpos($files[$i]['name'], $itemSource) - strlen($itemSource)); - if ($files[$i]['mimetype'] == 'httpd/unix-directory' && $children = \OC_Files::getDirectoryContent($name, '/')) { - // Continue scanning into child folders - array_push($files, $children); - } else { - // Check file extension for an equivalent item type to convert to - $extension = strtolower(substr($itemSource, strrpos($itemSource, '.') + 1)); - foreach (self::$backends as $type => $backend) { - if (isset($backend->dependsOn) && $backend->dependsOn == 'file' && isset($backend->supportedFileExtensions) && in_array($extension, $backend->supportedFileExtensions)) { - $itemType = $type; - break; - } - } - // Pass on to put() to check if this item should be converted, the item won't be inserted into the database unless it can be converted - self::put($itemType, $name, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder); - } - } - return true; - } - return false; - } else { - // Put the item into the database - return self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions); - } - } - - /** - * @brief Unshare an item from a user, group, or delete a private link - * @param string Item type - * @param string Item source - * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK - * @param string User or group the item is being shared with - * @return Returns true on success or false on failure - */ - public static function unshare($itemType, $itemSource, $shareType, $shareWith) { - if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1)) { - self::delete($item['id']); - return true; - } - return false; - } - - /** - * @brief Unshare an item shared with the current user - * @param string Item type - * @param string Item target - * @return Returns true on success or false on failure - * - * Unsharing from self is not allowed for items inside collections - * - */ - public static function unshareFromSelf($itemType, $itemTarget) { - if ($item = self::getItemSharedWith($itemType, $itemTarget)) { - if ((int)$item['share_type'] === self::SHARE_TYPE_GROUP) { - // Insert an extra row for the group share and set permission to 0 to prevent it from showing up for the user - $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)'); - $query->execute(array($item['item_type'], $item['item_source'], $item['item_target'], $item['id'], self::$shareTypeGroupUserUnique, \OC_User::getUser(), $item['uid_owner'], 0, $item['stime'], $item['file_source'], $item['file_target'])); - \OC_DB::insertid('*PREFIX*share'); - // Delete all reshares by this user of the group share - self::delete($item['id'], true, \OC_User::getUser()); - } else if ((int)$item['share_type'] === self::$shareTypeGroupUserUnique) { - // Set permission to 0 to prevent it from showing up for the user - $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = ? WHERE `id` = ?'); - $query->execute(array(0, $item['id'])); - self::delete($item['id'], true); - } else { - self::delete($item['id']); - } - return true; - } - return false; - } - - /** - * @brief Set the permissions of an item for a specific user or group - * @param string Item type - * @param string Item source - * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK - * @param string User or group the item is being shared with - * @param int CRUDS permissions - * @return Returns true on success or false on failure - */ - public static function setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions) { - if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1, false)) { - // Check if this item is a reshare and verify that the permissions granted don't exceed the parent shared item - if (isset($item['parent'])) { - $query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*share` WHERE `id` = ?', 1); - $result = $query->execute(array($item['parent']))->fetchRow(); - if (~(int)$result['permissions'] & $permissions) { - $message = 'Setting permissions for '.$itemSource.' failed, because the permissions exceed permissions granted to '.\OC_User::getUser(); - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - } - $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = ? WHERE `id` = ?'); - $query->execute(array($permissions, $item['id'])); - // Check if permissions were removed - if ($item['permissions'] & ~$permissions) { - // If share permission is removed all reshares must be deleted - if (($item['permissions'] & self::PERMISSION_SHARE) && (~$permissions & self::PERMISSION_SHARE)) { - self::delete($item['id'], true); - } else { - $ids = array(); - $parents = array($item['id']); - while (!empty($parents)) { - $parents = "'".implode("','", $parents)."'"; - $query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')'); - $result = $query->execute(); - // Reset parents array, only go through loop again if items are found that need permissions removed - $parents = array(); - while ($item = $result->fetchRow()) { - // Check if permissions need to be removed - if ($item['permissions'] & ~$permissions) { - // Add to list of items that need permissions removed - $ids[] = $item['id']; - $parents[] = $item['id']; - } - } - } - // Remove the permissions for all reshares of this item - if (!empty($ids)) { - $ids = "'".implode("','", $ids)."'"; - $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = `permissions` & ? WHERE `id` IN ('.$ids.')'); - $query->execute(array($permissions)); - } - } - } - return true; - } - $message = 'Setting permissions for '.$itemSource.' failed, because the item was not found'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - - public static function setExpirationDate($itemType, $itemSource, $date) { - if ($items = self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), self::FORMAT_NONE, null, -1, false)) { - if (!empty($items)) { - if ($date == '') { - $date = null; - } else { - $date = new \DateTime($date); - $date = date('Y-m-d H:i', $date->format('U') - $date->getOffset()); - } - $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `expiration` = ? WHERE `id` = ?'); - foreach ($items as $item) { - $query->execute(array($date, $item['id'])); - } - return true; - } - } - return false; - } - - /** - * @brief Get the backend class for the specified item type - * @param string Item type - * @return Sharing backend object - */ - private static function getBackend($itemType) { - if (isset(self::$backends[$itemType])) { - return self::$backends[$itemType]; - } else if (isset(self::$backendTypes[$itemType]['class'])) { - $class = self::$backendTypes[$itemType]['class']; - if (class_exists($class)) { - self::$backends[$itemType] = new $class; - if (!(self::$backends[$itemType] instanceof Share_Backend)) { - $message = 'Sharing backend '.$class.' must implement the interface OCP\Share_Backend'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - return self::$backends[$itemType]; - } else { - $message = 'Sharing backend '.$class.' not found'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - } - $message = 'Sharing backend for '.$itemType.' not found'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - - /** - * @brief Get a list of collection item types for the specified item type - * @param string Item type - * @return array - */ - private static function getCollectionItemTypes($itemType) { - $collectionTypes = array($itemType); - foreach (self::$backendTypes as $type => $backend) { - if (in_array($backend['collectionOf'], $collectionTypes)) { - $collectionTypes[] = $type; - } - } - if (!self::getBackend($itemType) instanceof Share_Backend_Collection) { - unset($collectionTypes[0]); - } - // Return array if collections were found or the item type is a collection itself - collections can be inside collections - if (count($collectionTypes) > 0) { - return $collectionTypes; - } - return false; - } - - /** - * @brief Get shared items from the database - * @param string Item type - * @param string Item source or target (optional) - * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, SHARE_TYPE_LINK, $shareTypeUserAndGroups, or $shareTypeGroupUserUnique - * @param string User or group the item is being shared with - * @param string User that is the owner of shared items (optional) - * @param int Format to convert items to with formatItems() - * @param mixed Parameters to pass to formatItems() - * @param int Number of items to return, -1 to return all matches (optional) - * @param bool Include collection item types (optional) - * @return mixed - * - * See public functions getItem(s)... for parameter usage - * - */ - private static function getItems($itemType, $item = null, $shareType = null, $shareWith = null, $uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false, $itemShareWithBySource = false) { - if (!self::isEnabled()) { - if ($limit == 1 || (isset($uidOwner) && isset($item))) { - return false; - } else { - return array(); - } - } - $backend = self::getBackend($itemType); - // Get filesystem root to add it to the file target and remove from the file source, match file_source with the file cache - if ($itemType == 'file' || $itemType == 'folder') { - $root = \OC_Filesystem::getRoot(); - $where = 'INNER JOIN `*PREFIX*fscache` ON `file_source` = `*PREFIX*fscache`.`id`'; - if (!isset($item)) { - $where .= ' WHERE `file_target` IS NOT NULL'; - } - $fileDependent = true; - $queryArgs = array(); - } else { - $fileDependent = false; - $root = ''; - if ($includeCollections && !isset($item) && ($collectionTypes = self::getCollectionItemTypes($itemType))) { - // If includeCollections is true, find collections of this item type, e.g. a music album contains songs - if (!in_array($itemType, $collectionTypes)) { - $itemTypes = array_merge(array($itemType), $collectionTypes); - } else { - $itemTypes = $collectionTypes; - } - $placeholders = join(',', array_fill(0, count($itemTypes), '?')); - $where .= ' WHERE item_type IN ('.$placeholders.'))'; - $queryArgs = $itemTypes; - } else { - $where = ' WHERE `item_type` = ?'; - $queryArgs = array($itemType); - } - } - if (isset($shareType)) { - // Include all user and group items - if ($shareType == self::$shareTypeUserAndGroups && isset($shareWith)) { - $where .= ' AND `share_type` IN (?,?,?)'; - $queryArgs[] = self::SHARE_TYPE_USER; - $queryArgs[] = self::SHARE_TYPE_GROUP; - $queryArgs[] = self::$shareTypeGroupUserUnique; - $userAndGroups = array_merge(array($shareWith), \OC_Group::getUserGroups($shareWith)); - $placeholders = join(',', array_fill(0, count($userAndGroups), '?')); - $where .= ' AND `share_with` IN ('.$placeholders.')'; - $queryArgs = array_merge($queryArgs, $userAndGroups); - // Don't include own group shares - $where .= ' AND `uid_owner` != ?'; - $queryArgs[] = $shareWith; - } else { - $where .= ' AND `share_type` = ?'; - $queryArgs[] = $shareType; - if (isset($shareWith)) { - $where .= ' AND `share_with` = ?'; - $queryArgs[] = $shareWith; - } - } - } - if (isset($uidOwner)) { - $where .= ' AND `uid_owner` = ?'; - $queryArgs[] = $uidOwner; - if (!isset($shareType)) { - // Prevent unique user targets for group shares from being selected - $where .= ' AND `share_type` != ?'; - $queryArgs[] = self::$shareTypeGroupUserUnique; - } - if ($itemType == 'file' || $itemType == 'folder') { - $column = 'file_source'; - } else { - $column = 'item_source'; - } - } else { - if ($itemType == 'file' || $itemType == 'folder') { - $column = 'file_target'; - } else { - $column = 'item_target'; - } - } - if (isset($item)) { - if ($includeCollections && $collectionTypes = self::getCollectionItemTypes($itemType)) { - $where .= ' AND ('; - } else { - $where .= ' AND'; - } - // If looking for own shared items, check item_source else check item_target - if (isset($uidOwner) || $itemShareWithBySource) { - // If item type is a file, file source needs to be checked in case the item was converted - if ($itemType == 'file' || $itemType == 'folder') { - $where .= ' `file_source` = ?'; - $column = 'file_source'; - } else { - $where .= ' `item_source` = ?'; - $column = 'item_source'; - } - } else { - if ($itemType == 'file' || $itemType == 'folder') { - $where .= ' `file_target` = ?'; - $item = \OC_Filesystem::normalizePath($item); - } else { - $where .= ' `item_target` = ?'; - } - } - $queryArgs[] = $item; - if ($includeCollections && $collectionTypes) { - $placeholders = join(',', array_fill(0, count($collectionTypes), '?')); - $where .= ' OR item_type IN ('.$placeholders.'))'; - $queryArgs = array_merge($queryArgs, $collectionTypes); - } - } - if ($limit != -1 && !$includeCollections) { - if ($shareType == self::$shareTypeUserAndGroups) { - // Make sure the unique user target is returned if it exists, unique targets should follow the group share in the database - // If the limit is not 1, the filtering can be done later - $where .= ' ORDER BY `*PREFIX*share`.`id` DESC'; - } - // The limit must be at least 3, because filtering needs to be done - if ($limit < 3) { - $queryLimit = 3; - } else { - $queryLimit = $limit; - } - } else { - $queryLimit = null; - } - // TODO Optimize selects - if ($format == self::FORMAT_STATUSES) { - if ($itemType == 'file' || $itemType == 'folder') { - $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `file_source`, `path`, `expiration`'; - } else { - $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `expiration`'; - } - } else { - if (isset($uidOwner)) { - if ($itemType == 'file' || $itemType == 'folder') { - $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `file_source`, `path`, `permissions`, `stime`, `expiration`'; - } else { - $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `permissions`, `stime`, `file_source`, `expiration`'; - } - } else { - if ($fileDependent) { - if (($itemType == 'file' || $itemType == 'folder') && $format == \OC_Share_Backend_File::FORMAT_FILE_APP || $format == \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT) { - $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `uid_owner`, `share_type`, `share_with`, `file_source`, `path`, `file_target`, `permissions`, `expiration`, `name`, `ctime`, `mtime`, `mimetype`, `size`, `encrypted`, `versioned`, `writable`'; - } else { - $select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`, `file_source`, `path`, `file_target`, `permissions`, `stime`, `expiration`'; - } - } else { - $select = '*'; - } - } - } - $root = strlen($root); - $query = \OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*share` '.$where, $queryLimit); - $result = $query->execute($queryArgs); - $items = array(); - $targets = array(); - while ($row = $result->fetchRow()) { - // Filter out duplicate group shares for users with unique targets - if ($row['share_type'] == self::$shareTypeGroupUserUnique && isset($items[$row['parent']])) { - $row['share_type'] = self::SHARE_TYPE_GROUP; - $row['share_with'] = $items[$row['parent']]['share_with']; - // Remove the parent group share - unset($items[$row['parent']]); - if ($row['permissions'] == 0) { - continue; - } - } else if (!isset($uidOwner)) { - // Check if the same target already exists - if (isset($targets[$row[$column]])) { - // Check if the same owner shared with the user twice through a group and user share - this is allowed - $id = $targets[$row[$column]]; - if ($items[$id]['uid_owner'] == $row['uid_owner']) { - // Switch to group share type to ensure resharing conditions aren't bypassed - if ($items[$id]['share_type'] != self::SHARE_TYPE_GROUP) { - $items[$id]['share_type'] = self::SHARE_TYPE_GROUP; - $items[$id]['share_with'] = $row['share_with']; - } - // Switch ids if sharing permission is granted on only one share to ensure correct parent is used if resharing - if (~(int)$items[$id]['permissions'] & self::PERMISSION_SHARE && (int)$row['permissions'] & self::PERMISSION_SHARE) { - $items[$row['id']] = $items[$id]; - unset($items[$id]); - $id = $row['id']; - } - // Combine the permissions for the item - $items[$id]['permissions'] |= (int)$row['permissions']; - continue; - } - } else { - $targets[$row[$column]] = $row['id']; - } - } - // Remove root from file source paths if retrieving own shared items - if (isset($uidOwner) && isset($row['path'])) { - if (isset($row['parent'])) { - $row['path'] = '/Shared/'.basename($row['path']); - } else { - $row['path'] = substr($row['path'], $root); - } - } - if (isset($row['expiration'])) { - $time = new \DateTime(); - if ($row['expiration'] < date('Y-m-d H:i', $time->format('U') - $time->getOffset())) { - self::delete($row['id']); - continue; - } - } - $items[$row['id']] = $row; - } - if (!empty($items)) { - $collectionItems = array(); - foreach ($items as &$row) { - // Return only the item instead of a 2-dimensional array - if ($limit == 1 && $row['item_type'] == $itemType && $row[$column] == $item) { - if ($format == self::FORMAT_NONE) { - return $row; - } else { - break; - } - } - // Check if this is a collection of the requested item type - if ($includeCollections && $collectionTypes && in_array($row['item_type'], $collectionTypes)) { - if (($collectionBackend = self::getBackend($row['item_type'])) && $collectionBackend instanceof Share_Backend_Collection) { - // Collections can be inside collections, check if the item is a collection - if (isset($item) && $row['item_type'] == $itemType && $row[$column] == $item) { - $collectionItems[] = $row; - } else { - $collection = array(); - $collection['item_type'] = $row['item_type']; - if ($row['item_type'] == 'file' || $row['item_type'] == 'folder') { - $collection['path'] = basename($row['path']); - } - $row['collection'] = $collection; - // Fetch all of the children sources - $children = $collectionBackend->getChildren($row[$column]); - foreach ($children as $child) { - $childItem = $row; - $childItem['item_type'] = $itemType; - if ($row['item_type'] != 'file' && $row['item_type'] != 'folder') { - $childItem['item_source'] = $child['source']; - $childItem['item_target'] = $child['target']; - } - if ($backend instanceof Share_Backend_File_Dependent) { - if ($row['item_type'] == 'file' || $row['item_type'] == 'folder') { - $childItem['file_source'] = $child['source']; - } else { - $childItem['file_source'] = \OC_FileCache::getId($child['file_path']); - } - $childItem['file_target'] = \OC_Filesystem::normalizePath($child['file_path']); - } - if (isset($item)) { - if ($childItem[$column] == $item) { - // Return only the item instead of a 2-dimensional array - if ($limit == 1) { - if ($format == self::FORMAT_NONE) { - return $childItem; - } else { - // Unset the items array and break out of both loops - $items = array(); - $items[] = $childItem; - break 2; - } - } else { - $collectionItems[] = $childItem; - } - } - } else { - $collectionItems[] = $childItem; - } - } - } - } - // Remove collection item - unset($items[$row['id']]); - } - } - if (!empty($collectionItems)) { - $items = array_merge($items, $collectionItems); - } - if ($format == self::FORMAT_NONE) { - return $items; - } else if ($format == self::FORMAT_STATUSES) { - $statuses = array(); - // Switch column to path for files and folders, used for determining statuses inside of folders - if ($itemType == 'file' || $itemType == 'folder') { - $column = 'path'; - } - foreach ($items as $item) { - if ($item['share_type'] == self::SHARE_TYPE_LINK) { - $statuses[$item[$column]] = true; - } else if (!isset($statuses[$item[$column]])) { - $statuses[$item[$column]] = false; - } - } - return $statuses; - } else { - return $backend->formatItems($items, $format, $parameters); - } - } else if ($limit == 1 || (isset($uidOwner) && isset($item))) { - return false; - } - return array(); - } - - /** - * @brief Put shared item into the database - * @param string Item type - * @param string Item source - * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK - * @param string User or group the item is being shared with - * @param int CRUDS permissions - * @param bool|array Parent folder target (optional) - * @return bool Returns true on success or false on failure - */ - private static function put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder = null) { - $backend = self::getBackend($itemType); - // Check if this is a reshare - if ($checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true)) { - // Check if attempting to share back to owner - if ($checkReshare['uid_owner'] == $shareWith && $shareType == self::SHARE_TYPE_USER) { - $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is the original sharer'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - // Check if share permissions is granted - if ((int)$checkReshare['permissions'] & self::PERMISSION_SHARE) { - if (~(int)$checkReshare['permissions'] & $permissions) { - $message = 'Sharing '.$itemSource.' failed, because the permissions exceed permissions granted to '.$uidOwner; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } else { - // TODO Don't check if inside folder - $parent = $checkReshare['id']; - $itemSource = $checkReshare['item_source']; - $fileSource = $checkReshare['file_source']; - $suggestedItemTarget = $checkReshare['item_target']; - $suggestedFileTarget = $checkReshare['file_target']; - $filePath = $checkReshare['file_target']; - } - } else { - $message = 'Sharing '.$itemSource.' failed, because resharing is not allowed'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - } else { - $parent = null; - $suggestedItemTarget = null; - $suggestedFileTarget = null; - if (!$backend->isValidSource($itemSource, $uidOwner)) { - $message = 'Sharing '.$itemSource.' failed, because the sharing backend for '.$itemType.' could not find its source'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - $parent = null; - if ($backend instanceof Share_Backend_File_Dependent) { - $filePath = $backend->getFilePath($itemSource, $uidOwner); - if ($itemType == 'file' || $itemType == 'folder') { - $fileSource = $itemSource; - } else { - $fileSource = \OC_FileCache::getId($filePath); - } - if ($fileSource == -1) { - $message = 'Sharing '.$itemSource.' failed, because the file could not be found in the file cache'; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - } else { - $filePath = null; - $fileSource = null; - } - } - $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)'); - // Share with a group - if ($shareType == self::SHARE_TYPE_GROUP) { - $groupItemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith['group'], $uidOwner, $suggestedItemTarget); - if (isset($fileSource)) { - if ($parentFolder) { - if ($parentFolder === true) { - $groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget); - // Set group default file target for future use - $parentFolders[0]['folder'] = $groupFileTarget; - } else { - // Get group default file target - $groupFileTarget = $parentFolder[0]['folder'].$itemSource; - $parent = $parentFolder[0]['id']; - } - } else { - $groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget); - } - } else { - $groupFileTarget = null; - } - $query->execute(array($itemType, $itemSource, $groupItemTarget, $parent, $shareType, $shareWith['group'], $uidOwner, $permissions, time(), $fileSource, $groupFileTarget)); - // Save this id, any extra rows for this group share will need to reference it - $parent = \OC_DB::insertid('*PREFIX*share'); - // Loop through all users of this group in case we need to add an extra row - foreach ($shareWith['users'] as $uid) { - $itemTarget = self::generateTarget($itemType, $itemSource, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedItemTarget, $parent); - if (isset($fileSource)) { - if ($parentFolder) { - if ($parentFolder === true) { - $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent); - if ($fileTarget != $groupFileTarget) { - $parentFolders[$uid]['folder'] = $fileTarget; - } - } else if (isset($parentFolder[$uid])) { - $fileTarget = $parentFolder[$uid]['folder'].$itemSource; - $parent = $parentFolder[$uid]['id']; - } - } else { - $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent); - } - } else { - $fileTarget = null; - } - // Insert an extra row for the group share if the item or file target is unique for this user - if ($itemTarget != $groupItemTarget || (isset($fileSource) && $fileTarget != $groupFileTarget)) { - $query->execute(array($itemType, $itemSource, $itemTarget, $parent, self::$shareTypeGroupUserUnique, $uid, $uidOwner, $permissions, time(), $fileSource, $fileTarget)); - \OC_DB::insertid('*PREFIX*share'); - } - } - if ($parentFolder === true) { - // Return parent folders to preserve file target paths for potential children - return $parentFolders; - } - } else { - $itemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedItemTarget); - if (isset($fileSource)) { - if ($parentFolder) { - if ($parentFolder === true) { - $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget); - $parentFolders['folder'] = $fileTarget; - } else { - $fileTarget = $parentFolder['folder'].$itemSource; - $parent = $parentFolder['id']; - } - } else { - $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget); - } - } else { - $fileTarget = null; - } - $query->execute(array($itemType, $itemSource, $itemTarget, $parent, $shareType, $shareWith, $uidOwner, $permissions, time(), $fileSource, $fileTarget)); - $id = \OC_DB::insertid('*PREFIX*share'); - if ($parentFolder === true) { - $parentFolders['id'] = $id; - // Return parent folder to preserve file target paths for potential children - return $parentFolders; - } - } - return true; - } - - /** - * @brief Generate a unique target for the item - * @param string Item type - * @param string Item source - * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK - * @param string User or group the item is being shared with - * @param string The suggested target originating from a reshare (optional) - * @param int The id of the parent group share (optional) - * @return string Item target - */ - private static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedTarget = null, $groupParent = null) { - $backend = self::getBackend($itemType); - if ($shareType == self::SHARE_TYPE_LINK) { - if (isset($suggestedTarget)) { - return $suggestedTarget; - } - return $backend->generateTarget($itemSource, false); - } else { - if ($itemType == 'file' || $itemType == 'folder') { - $column = 'file_target'; - $columnSource = 'file_source'; - } else { - $column = 'item_target'; - $columnSource = 'item_source'; - } - if ($shareType == self::SHARE_TYPE_USER) { - // Share with is a user, so set share type to user and groups - $shareType = self::$shareTypeUserAndGroups; - $userAndGroups = array_merge(array($shareWith), \OC_Group::getUserGroups($shareWith)); - } else { - $userAndGroups = false; - } - $exclude = null; - // Backend has 3 opportunities to generate a unique target - for ($i = 0; $i < 2; $i++) { - // Check if suggested target exists first - if ($i == 0 && isset($suggestedTarget)) { - $target = $suggestedTarget; - } else { - if ($shareType == self::SHARE_TYPE_GROUP) { - $target = $backend->generateTarget($itemSource, false, $exclude); - } else { - $target = $backend->generateTarget($itemSource, $shareWith, $exclude); - } - if (is_array($exclude) && in_array($target, $exclude)) { - break; - } - } - // Check if target already exists - $checkTarget = self::getItems($itemType, $target, $shareType, $shareWith); - if (!empty($checkTarget)) { - foreach ($checkTarget as $item) { - // Skip item if it is the group parent row - if (isset($groupParent) && $item['id'] == $groupParent) { - if (count($checkTarget) == 1) { - return $target; - } else { - continue; - } - } - if ($item['uid_owner'] == $uidOwner) { - if ($itemType == 'file' || $itemType == 'folder') { - if ($item['file_source'] == \OC_FileCache::getId($itemSource)) { - return $target; - } - } else if ($item['item_source'] == $itemSource) { - return $target; - } - } - } - if (!isset($exclude)) { - $exclude = array(); - } - // Find similar targets to improve backend's chances to generate a unqiue target - if ($userAndGroups) { - if ($column == 'file_target') { - $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')'); - $result = $checkTargets->execute(array(self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique)); - } else { - $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')'); - $result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique)); - } - } else { - if ($column == 'file_target') { - $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` = ? AND `share_with` = ?'); - $result = $checkTargets->execute(array(self::SHARE_TYPE_GROUP, $shareWith)); - } else { - $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` = ? AND `share_with` = ?'); - $result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_GROUP, $shareWith)); - } - } - while ($row = $result->fetchRow()) { - $exclude[] = $row[$column]; - } - } else { - return $target; - } - } - } - $message = 'Sharing backend registered for '.$itemType.' did not generate a unique target for '.$itemSource; - \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); - throw new \Exception($message); - } - - /** - * @brief Delete all reshares of an item - * @param int Id of item to delete - * @param bool If true, exclude the parent from the delete (optional) - * @param string The user that the parent was shared with (optinal) - */ - private static function delete($parent, $excludeParent = false, $uidOwner = null) { - $ids = array($parent); - $parents = array($parent); - while (!empty($parents)) { - $parents = "'".implode("','", $parents)."'"; - // Check the owner on the first search of reshares, useful for finding and deleting the reshares by a single user of a group share - if (count($ids) == 1 && isset($uidOwner)) { - $query = \OC_DB::prepare('SELECT `id`, `uid_owner`, `item_type`, `item_target`, `parent` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ?'); - $result = $query->execute(array($uidOwner)); - } else { - $query = \OC_DB::prepare('SELECT `id`, `item_type`, `item_target`, `parent`, `uid_owner` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')'); - $result = $query->execute(); - } - // Reset parents array, only go through loop again if items are found - $parents = array(); - while ($item = $result->fetchRow()) { - // Search for a duplicate parent share, this occurs when an item is shared to the same user through a group and user or the same item is shared by different users - $userAndGroups = array_merge(array($item['uid_owner']), \OC_Group::getUserGroups($item['uid_owner'])); - $query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `item_type` = ? AND `item_target` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\') AND `uid_owner` != ? AND `id` != ?'); - $duplicateParent = $query->execute(array($item['item_type'], $item['item_target'], self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique, $item['uid_owner'], $item['parent']))->fetchRow(); - if ($duplicateParent) { - // Change the parent to the other item id if share permission is granted - if ($duplicateParent['permissions'] & self::PERMISSION_SHARE) { - $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `parent` = ? WHERE `id` = ?'); - $query->execute(array($duplicateParent['id'], $item['id'])); - continue; - } - } - $ids[] = $item['id']; - $parents[] = $item['id']; - } - } - if ($excludeParent) { - unset($ids[0]); - } - if (!empty($ids)) { - $ids = "'".implode("','", $ids)."'"; - $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `id` IN ('.$ids.')'); - $query->execute(); - } - } - - /** - * Hook Listeners - */ - - public static function post_deleteUser($arguments) { - // Delete any items shared with the deleted user - $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `share_with` = ? AND `share_type` = ? OR `share_type` = ?'); - $result = $query->execute(array($arguments['uid'], self::SHARE_TYPE_USER, self::$shareTypeGroupUserUnique)); - // Delete any items the deleted user shared - $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*share` WHERE `uid_owner` = ?'); - $result = $query->execute(array($arguments['uid'])); - while ($item = $result->fetchRow()) { - self::delete($item['id']); - } - } - - public static function post_addToGroup($arguments) { - // Find the group shares and check if the user needs a unique target - $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `share_type` = ? AND `share_with` = ?'); - $result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'])); - $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)'); - while ($item = $result->fetchRow()) { - if ($item['item_type'] == 'file' || $item['item_type'] == 'file') { - $itemTarget = null; - } else { - $itemTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['item_target'], $item['id']); - } - if (isset($item['file_source'])) { - $fileTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['file_target'], $item['id']); - } else { - $fileTarget = null; - } - // Insert an extra row for the group share if the item or file target is unique for this user - if ($itemTarget != $item['item_target'] || $fileTarget != $item['file_target']) { - $query->execute(array($item['item_type'], $item['item_source'], $itemTarget, $item['id'], self::$shareTypeGroupUserUnique, $arguments['uid'], $item['uid_owner'], $item['permissions'], $item['stime'], $item['file_source'], $fileTarget)); - \OC_DB::insertid('*PREFIX*share'); - } - } - } - - public static function post_removeFromGroup($arguments) { - // TODO Don't call if user deleted? - $query = \OC_DB::prepare('SELECT `id`, `share_type` FROM `*PREFIX*share` WHERE (`share_type` = ? AND `share_with` = ?) OR (`share_type` = ? AND `share_with` = ?)'); - $result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'], self::$shareTypeGroupUserUnique, $arguments['uid'])); - while ($item = $result->fetchRow()) { - if ($item['share_type'] == self::SHARE_TYPE_GROUP) { - // Delete all reshares by this user of the group share - self::delete($item['id'], true, $arguments['uid']); - } else { - self::delete($item['id']); - } - } - } - - public static function post_deleteGroup($arguments) { - $query = \OC_DB::prepare('SELECT id FROM `*PREFIX*share` WHERE `share_type` = ? AND `share_with` = ?'); - $result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'])); - while ($item = $result->fetchRow()) { - self::delete($item['id']); - } - } - -} - -/** -* Interface that apps must implement to share content. -*/ -interface Share_Backend { - - /** - * @brief Get the source of the item to be stored in the database - * @param string Item source - * @param string Owner of the item - * @return mixed|array|false Source - * - * Return an array if the item is file dependent, the array needs two keys: 'item' and 'file' - * Return false if the item does not exist for the user - * - * The formatItems() function will translate the source returned back into the item - */ - public function isValidSource($itemSource, $uidOwner); - - /** - * @brief Get a unique name of the item for the specified user - * @param string Item source - * @param string|false User the item is being shared with - * @param array|null List of similar item names already existing as shared items - * @return string Target name - * - * This function needs to verify that the user does not already have an item with this name. - * If it does generate a new name e.g. name_# - */ - public function generateTarget($itemSource, $shareWith, $exclude = null); - - /** - * @brief Converts the shared item sources back into the item in the specified format - * @param array Shared items - * @param int Format - * @return ? - * - * The items array is a 3-dimensional array with the item_source as the first key and the share id as the second key to an array with the share info. - * The key/value pairs included in the share info depend on the function originally called: - * If called by getItem(s)Shared: id, item_type, item, item_source, share_type, share_with, permissions, stime, file_source - * If called by getItem(s)SharedWith: id, item_type, item, item_source, item_target, share_type, share_with, permissions, stime, file_source, file_target - * This function allows the backend to control the output of shared items with custom formats. - * It is only called through calls to the public getItem(s)Shared(With) functions. - */ - public function formatItems($items, $format, $parameters = null); - -} - -/** -* Interface for share backends that share content that is dependent on files. -* Extends the Share_Backend interface. -*/ -interface Share_Backend_File_Dependent extends Share_Backend { - - /** - * @brief Get the file path of the item - * @param - * @param - * @return - */ - public function getFilePath($itemSource, $uidOwner); - -} - -/** -* Interface for collections of of items implemented by another share backend. -* Extends the Share_Backend interface. -*/ -interface Share_Backend_Collection extends Share_Backend { - - /** - * @brief Get the sources of the children of the item - * @param string Item source - * @return array Returns an array of children each inside an array with the keys: source, target, and file_path if applicable - */ - public function getChildren($itemSource); - -} +. +*/ +namespace OCP; + +\OC_Hook::connect('OC_User', 'post_deleteUser', 'OCP\Share', 'post_deleteUser'); +\OC_Hook::connect('OC_User', 'post_addToGroup', 'OCP\Share', 'post_addToGroup'); +\OC_Hook::connect('OC_User', 'post_removeFromGroup', 'OCP\Share', 'post_removeFromGroup'); +\OC_Hook::connect('OC_User', 'post_deleteGroup', 'OCP\Share', 'post_deleteGroup'); + +/** +* This class provides the ability for apps to share their content between users. +* Apps must create a backend class that implements OCP\Share_Backend and register it with this class. +*/ +class Share { + + const SHARE_TYPE_USER = 0; + const SHARE_TYPE_GROUP = 1; + const SHARE_TYPE_LINK = 3; + const SHARE_TYPE_EMAIL = 4; + const SHARE_TYPE_CONTACT = 5; + const SHARE_TYPE_REMOTE = 6; + + /** CRUDS permissions (Create, Read, Update, Delete, Share) using a bitmask + * Construct permissions for share() and setPermissions with Or (|) e.g. Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE + * Check if permission is granted with And (&) e.g. Check if delete is granted: if ($permissions & PERMISSION_DELETE) + * Remove permissions with And (&) and Not (~) e.g. Remove the update permission: $permissions &= ~PERMISSION_UPDATE + * Apps are required to handle permissions on their own, this class only stores and manages the permissions of shares + */ + const PERMISSION_CREATE = 4; + const PERMISSION_READ = 1; + const PERMISSION_UPDATE = 2; + const PERMISSION_DELETE = 8; + const PERMISSION_SHARE = 16; + + const FORMAT_NONE = -1; + const FORMAT_STATUSES = -2; + const FORMAT_SOURCES = -3; + + private static $shareTypeUserAndGroups = -1; + private static $shareTypeGroupUserUnique = 2; + private static $backends = array(); + private static $backendTypes = array(); + + /** + * @brief Register a sharing backend class that implements OCP\Share_Backend for an item type + * @param string Item type + * @param string Backend class + * @param string (optional) Depends on item type + * @param array (optional) List of supported file extensions if this item type depends on files + * @return Returns true if backend is registered or false if error + */ + public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) { + if (self::isEnabled()) { + if (!isset(self::$backendTypes[$itemType])) { + self::$backendTypes[$itemType] = array('class' => $class, 'collectionOf' => $collectionOf, 'supportedFileExtensions' => $supportedFileExtensions); + if(count(self::$backendTypes) === 1) { + \OC_Util::addScript('core', 'share'); + \OC_Util::addStyle('core', 'share'); + } + return true; + } + \OC_Log::write('OCP\Share', 'Sharing backend '.$class.' not registered, '.self::$backendTypes[$itemType]['class'].' is already registered for '.$itemType, \OC_Log::WARN); + } + return false; + } + + /** + * @brief Check if the Share API is enabled + * @return Returns true if enabled or false + * + * The Share API is enabled by default if not configured + * + */ + public static function isEnabled() { + if (\OC_Appconfig::getValue('core', 'shareapi_enabled', 'yes') == 'yes') { + return true; + } + return false; + } + + /** + * @brief Get the items of item type shared with the current user + * @param string Item type + * @param int Format (optional) Format type must be defined by the backend + * @param int Number of items to return (optional) Returns all by default + * @return Return depends on format + */ + public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) { + return self::getItems($itemType, null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, $limit, $includeCollections); + } + + /** + * @brief Get the item of item type shared with the current user + * @param string Item type + * @param string Item target + * @param int Format (optional) Format type must be defined by the backend + * @return Return depends on format + */ + public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { + return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections); + } + + /** + * @brief Get the item of item type shared with the current user by source + * @param string Item type + * @param string Item source + * @param int Format (optional) Format type must be defined by the backend + * @return Return depends on format + */ + public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { + return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections, true); + } + + /** + * @brief Get the item of item type shared by a link + * @param string Item type + * @param string Item source + * @param string Owner of link + * @return Item + */ + public static function getItemSharedWithByLink($itemType, $itemSource, $uidOwner) { + return self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1); + } + + /** + * @brief Get the shared items of item type owned by the current user + * @param string Item type + * @param int Format (optional) Format type must be defined by the backend + * @param int Number of items to return (optional) Returns all by default + * @return Return depends on format + */ + public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) { + return self::getItems($itemType, null, null, null, \OC_User::getUser(), $format, $parameters, $limit, $includeCollections); + } + + /** + * @brief Get the shared item of item type owned by the current user + * @param string Item type + * @param string Item source + * @param int Format (optional) Format type must be defined by the backend + * @return Return depends on format + */ + public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { + return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format, $parameters, -1, $includeCollections); + } + + /** + * @brief Share an item with a user, group, or via private link + * @param string Item type + * @param string Item source + * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK + * @param string User or group the item is being shared with + * @param int CRUDS permissions + * @return bool Returns true on success or false on failure + */ + public static function shareItem($itemType, $itemSource, $shareType, $shareWith, $permissions) { + $uidOwner = \OC_User::getUser(); + $sharingPolicy = \OC_Appconfig::getValue('core', 'shareapi_share_policy', 'global'); + // Verify share type and sharing conditions are met + if ($shareType === self::SHARE_TYPE_USER) { + if ($shareWith == $uidOwner) { + $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is the item owner'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + if (!\OC_User::userExists($shareWith)) { + $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' does not exist'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + if ($sharingPolicy == 'groups_only') { + $inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith)); + if (empty($inGroup)) { + $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is not a member of any groups that '.$uidOwner.' is a member of'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + } + // Check if the item source is already shared with the user, either from the same owner or a different user + if ($checkExists = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) { + // Only allow the same share to occur again if it is the same owner and is not a user share, this use case is for increasing permissions for a specific user + if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) { + $message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + } + } else if ($shareType === self::SHARE_TYPE_GROUP) { + if (!\OC_Group::groupExists($shareWith)) { + $message = 'Sharing '.$itemSource.' failed, because the group '.$shareWith.' does not exist'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + if ($sharingPolicy == 'groups_only' && !\OC_Group::inGroup($uidOwner, $shareWith)) { + $message = 'Sharing '.$itemSource.' failed, because '.$uidOwner.' is not a member of the group '.$shareWith; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + // Check if the item source is already shared with the group, either from the same owner or a different user + // The check for each user in the group is done inside the put() function + if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) { + // Only allow the same share to occur again if it is the same owner and is not a group share, this use case is for increasing permissions for a specific user + if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) { + $message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + } + // Convert share with into an array with the keys group and users + $group = $shareWith; + $shareWith = array(); + $shareWith['group'] = $group; + $shareWith['users'] = array_diff(\OC_Group::usersInGroup($group), array($uidOwner)); + } else if ($shareType === self::SHARE_TYPE_LINK) { + if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') == 'yes') { + if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1)) { + // If password is set delete the old link + if (isset($shareWith)) { + self::delete($checkExists['id']); + } else { + $message = 'Sharing '.$itemSource.' failed, because this item is already shared with a link'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + } + // Generate hash of password - same method as user passwords + if (isset($shareWith)) { + $forcePortable = (CRYPT_BLOWFISH != 1); + $hasher = new \PasswordHash(8, $forcePortable); + $shareWith = $hasher->HashPassword($shareWith.\OC_Config::getValue('passwordsalt', '')); + } + return self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions); + } + $message = 'Sharing '.$itemSource.' failed, because sharing with links is not allowed'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + return false; +// } else if ($shareType === self::SHARE_TYPE_CONTACT) { +// if (!\OC_App::isEnabled('contacts')) { +// $message = 'Sharing '.$itemSource.' failed, because the contacts app is not enabled'; +// \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); +// return false; +// } +// $vcard = \OC_Contacts_App::getContactVCard($shareWith); +// if (!isset($vcard)) { +// $message = 'Sharing '.$itemSource.' failed, because the contact does not exist'; +// \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); +// throw new \Exception($message); +// } +// $details = \OC_Contacts_VCard::structureContact($vcard); +// // TODO Add ownCloud user to contacts vcard +// if (!isset($details['EMAIL'])) { +// $message = 'Sharing '.$itemSource.' failed, because no email address is associated with the contact'; +// \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); +// throw new \Exception($message); +// } +// return self::shareItem($itemType, $itemSource, self::SHARE_TYPE_EMAIL, $details['EMAIL'], $permissions); + } else { + // Future share types need to include their own conditions + $message = 'Share type '.$shareType.' is not valid for '.$itemSource; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + // If the item is a folder, scan through the folder looking for equivalent item types + if ($itemType == 'folder') { + $parentFolder = self::put('folder', $itemSource, $shareType, $shareWith, $uidOwner, $permissions, true); + if ($parentFolder && $files = \OC_Files::getDirectoryContent($itemSource)) { + for ($i = 0; $i < count($files); $i++) { + $name = substr($files[$i]['name'], strpos($files[$i]['name'], $itemSource) - strlen($itemSource)); + if ($files[$i]['mimetype'] == 'httpd/unix-directory' && $children = \OC_Files::getDirectoryContent($name, '/')) { + // Continue scanning into child folders + array_push($files, $children); + } else { + // Check file extension for an equivalent item type to convert to + $extension = strtolower(substr($itemSource, strrpos($itemSource, '.') + 1)); + foreach (self::$backends as $type => $backend) { + if (isset($backend->dependsOn) && $backend->dependsOn == 'file' && isset($backend->supportedFileExtensions) && in_array($extension, $backend->supportedFileExtensions)) { + $itemType = $type; + break; + } + } + // Pass on to put() to check if this item should be converted, the item won't be inserted into the database unless it can be converted + self::put($itemType, $name, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder); + } + } + return true; + } + return false; + } else { + // Put the item into the database + return self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions); + } + } + + /** + * @brief Unshare an item from a user, group, or delete a private link + * @param string Item type + * @param string Item source + * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK + * @param string User or group the item is being shared with + * @return Returns true on success or false on failure + */ + public static function unshare($itemType, $itemSource, $shareType, $shareWith) { + if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1)) { + self::delete($item['id']); + return true; + } + return false; + } + + /** + * @brief Unshare an item shared with the current user + * @param string Item type + * @param string Item target + * @return Returns true on success or false on failure + * + * Unsharing from self is not allowed for items inside collections + * + */ + public static function unshareFromSelf($itemType, $itemTarget) { + if ($item = self::getItemSharedWith($itemType, $itemTarget)) { + if ((int)$item['share_type'] === self::SHARE_TYPE_GROUP) { + // Insert an extra row for the group share and set permission to 0 to prevent it from showing up for the user + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)'); + $query->execute(array($item['item_type'], $item['item_source'], $item['item_target'], $item['id'], self::$shareTypeGroupUserUnique, \OC_User::getUser(), $item['uid_owner'], 0, $item['stime'], $item['file_source'], $item['file_target'])); + \OC_DB::insertid('*PREFIX*share'); + // Delete all reshares by this user of the group share + self::delete($item['id'], true, \OC_User::getUser()); + } else if ((int)$item['share_type'] === self::$shareTypeGroupUserUnique) { + // Set permission to 0 to prevent it from showing up for the user + $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = ? WHERE `id` = ?'); + $query->execute(array(0, $item['id'])); + self::delete($item['id'], true); + } else { + self::delete($item['id']); + } + return true; + } + return false; + } + + /** + * @brief Set the permissions of an item for a specific user or group + * @param string Item type + * @param string Item source + * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK + * @param string User or group the item is being shared with + * @param int CRUDS permissions + * @return Returns true on success or false on failure + */ + public static function setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions) { + if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1, false)) { + // Check if this item is a reshare and verify that the permissions granted don't exceed the parent shared item + if (isset($item['parent'])) { + $query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*share` WHERE `id` = ?', 1); + $result = $query->execute(array($item['parent']))->fetchRow(); + if (~(int)$result['permissions'] & $permissions) { + $message = 'Setting permissions for '.$itemSource.' failed, because the permissions exceed permissions granted to '.\OC_User::getUser(); + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + } + $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = ? WHERE `id` = ?'); + $query->execute(array($permissions, $item['id'])); + // Check if permissions were removed + if ($item['permissions'] & ~$permissions) { + // If share permission is removed all reshares must be deleted + if (($item['permissions'] & self::PERMISSION_SHARE) && (~$permissions & self::PERMISSION_SHARE)) { + self::delete($item['id'], true); + } else { + $ids = array(); + $parents = array($item['id']); + while (!empty($parents)) { + $parents = "'".implode("','", $parents)."'"; + $query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')'); + $result = $query->execute(); + // Reset parents array, only go through loop again if items are found that need permissions removed + $parents = array(); + while ($item = $result->fetchRow()) { + // Check if permissions need to be removed + if ($item['permissions'] & ~$permissions) { + // Add to list of items that need permissions removed + $ids[] = $item['id']; + $parents[] = $item['id']; + } + } + } + // Remove the permissions for all reshares of this item + if (!empty($ids)) { + $ids = "'".implode("','", $ids)."'"; + $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = `permissions` & ? WHERE `id` IN ('.$ids.')'); + $query->execute(array($permissions)); + } + } + } + return true; + } + $message = 'Setting permissions for '.$itemSource.' failed, because the item was not found'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + + public static function setExpirationDate($itemType, $itemSource, $date) { + if ($items = self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), self::FORMAT_NONE, null, -1, false)) { + if (!empty($items)) { + if ($date == '') { + $date = null; + } else { + $date = new \DateTime($date); + $date = date('Y-m-d H:i', $date->format('U') - $date->getOffset()); + } + $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `expiration` = ? WHERE `id` = ?'); + foreach ($items as $item) { + $query->execute(array($date, $item['id'])); + } + return true; + } + } + return false; + } + + /** + * @brief Get the backend class for the specified item type + * @param string Item type + * @return Sharing backend object + */ + private static function getBackend($itemType) { + if (isset(self::$backends[$itemType])) { + return self::$backends[$itemType]; + } else if (isset(self::$backendTypes[$itemType]['class'])) { + $class = self::$backendTypes[$itemType]['class']; + if (class_exists($class)) { + self::$backends[$itemType] = new $class; + if (!(self::$backends[$itemType] instanceof Share_Backend)) { + $message = 'Sharing backend '.$class.' must implement the interface OCP\Share_Backend'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + return self::$backends[$itemType]; + } else { + $message = 'Sharing backend '.$class.' not found'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + } + $message = 'Sharing backend for '.$itemType.' not found'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + + /** + * @brief Get a list of collection item types for the specified item type + * @param string Item type + * @return array + */ + private static function getCollectionItemTypes($itemType) { + $collectionTypes = array($itemType); + foreach (self::$backendTypes as $type => $backend) { + if (in_array($backend['collectionOf'], $collectionTypes)) { + $collectionTypes[] = $type; + } + } + if (!self::getBackend($itemType) instanceof Share_Backend_Collection) { + unset($collectionTypes[0]); + } + // Return array if collections were found or the item type is a collection itself - collections can be inside collections + if (count($collectionTypes) > 0) { + return $collectionTypes; + } + return false; + } + + /** + * @brief Get shared items from the database + * @param string Item type + * @param string Item source or target (optional) + * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, SHARE_TYPE_LINK, $shareTypeUserAndGroups, or $shareTypeGroupUserUnique + * @param string User or group the item is being shared with + * @param string User that is the owner of shared items (optional) + * @param int Format to convert items to with formatItems() + * @param mixed Parameters to pass to formatItems() + * @param int Number of items to return, -1 to return all matches (optional) + * @param bool Include collection item types (optional) + * @return mixed + * + * See public functions getItem(s)... for parameter usage + * + */ + private static function getItems($itemType, $item = null, $shareType = null, $shareWith = null, $uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false, $itemShareWithBySource = false) { + if (!self::isEnabled()) { + if ($limit == 1 || (isset($uidOwner) && isset($item))) { + return false; + } else { + return array(); + } + } + $backend = self::getBackend($itemType); + // Get filesystem root to add it to the file target and remove from the file source, match file_source with the file cache + if ($itemType == 'file' || $itemType == 'folder') { + $root = \OC_Filesystem::getRoot(); + $where = 'INNER JOIN `*PREFIX*fscache` ON `file_source` = `*PREFIX*fscache`.`id`'; + if (!isset($item)) { + $where .= ' WHERE `file_target` IS NOT NULL'; + } + $fileDependent = true; + $queryArgs = array(); + } else { + $fileDependent = false; + $root = ''; + if ($includeCollections && !isset($item) && ($collectionTypes = self::getCollectionItemTypes($itemType))) { + // If includeCollections is true, find collections of this item type, e.g. a music album contains songs + if (!in_array($itemType, $collectionTypes)) { + $itemTypes = array_merge(array($itemType), $collectionTypes); + } else { + $itemTypes = $collectionTypes; + } + $placeholders = join(',', array_fill(0, count($itemTypes), '?')); + $where .= ' WHERE item_type IN ('.$placeholders.'))'; + $queryArgs = $itemTypes; + } else { + $where = ' WHERE `item_type` = ?'; + $queryArgs = array($itemType); + } + } + if (isset($shareType)) { + // Include all user and group items + if ($shareType == self::$shareTypeUserAndGroups && isset($shareWith)) { + $where .= ' AND `share_type` IN (?,?,?)'; + $queryArgs[] = self::SHARE_TYPE_USER; + $queryArgs[] = self::SHARE_TYPE_GROUP; + $queryArgs[] = self::$shareTypeGroupUserUnique; + $userAndGroups = array_merge(array($shareWith), \OC_Group::getUserGroups($shareWith)); + $placeholders = join(',', array_fill(0, count($userAndGroups), '?')); + $where .= ' AND `share_with` IN ('.$placeholders.')'; + $queryArgs = array_merge($queryArgs, $userAndGroups); + // Don't include own group shares + $where .= ' AND `uid_owner` != ?'; + $queryArgs[] = $shareWith; + } else { + $where .= ' AND `share_type` = ?'; + $queryArgs[] = $shareType; + if (isset($shareWith)) { + $where .= ' AND `share_with` = ?'; + $queryArgs[] = $shareWith; + } + } + } + if (isset($uidOwner)) { + $where .= ' AND `uid_owner` = ?'; + $queryArgs[] = $uidOwner; + if (!isset($shareType)) { + // Prevent unique user targets for group shares from being selected + $where .= ' AND `share_type` != ?'; + $queryArgs[] = self::$shareTypeGroupUserUnique; + } + if ($itemType == 'file' || $itemType == 'folder') { + $column = 'file_source'; + } else { + $column = 'item_source'; + } + } else { + if ($itemType == 'file' || $itemType == 'folder') { + $column = 'file_target'; + } else { + $column = 'item_target'; + } + } + if (isset($item)) { + if ($includeCollections && $collectionTypes = self::getCollectionItemTypes($itemType)) { + $where .= ' AND ('; + } else { + $where .= ' AND'; + } + // If looking for own shared items, check item_source else check item_target + if (isset($uidOwner) || $itemShareWithBySource) { + // If item type is a file, file source needs to be checked in case the item was converted + if ($itemType == 'file' || $itemType == 'folder') { + $where .= ' `file_source` = ?'; + $column = 'file_source'; + } else { + $where .= ' `item_source` = ?'; + $column = 'item_source'; + } + } else { + if ($itemType == 'file' || $itemType == 'folder') { + $where .= ' `file_target` = ?'; + $item = \OC_Filesystem::normalizePath($item); + } else { + $where .= ' `item_target` = ?'; + } + } + $queryArgs[] = $item; + if ($includeCollections && $collectionTypes) { + $placeholders = join(',', array_fill(0, count($collectionTypes), '?')); + $where .= ' OR item_type IN ('.$placeholders.'))'; + $queryArgs = array_merge($queryArgs, $collectionTypes); + } + } + if ($limit != -1 && !$includeCollections) { + if ($shareType == self::$shareTypeUserAndGroups) { + // Make sure the unique user target is returned if it exists, unique targets should follow the group share in the database + // If the limit is not 1, the filtering can be done later + $where .= ' ORDER BY `*PREFIX*share`.`id` DESC'; + } + // The limit must be at least 3, because filtering needs to be done + if ($limit < 3) { + $queryLimit = 3; + } else { + $queryLimit = $limit; + } + } else { + $queryLimit = null; + } + // TODO Optimize selects + if ($format == self::FORMAT_STATUSES) { + if ($itemType == 'file' || $itemType == 'folder') { + $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `file_source`, `path`, `expiration`'; + } else { + $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `expiration`'; + } + } else { + if (isset($uidOwner)) { + if ($itemType == 'file' || $itemType == 'folder') { + $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `file_source`, `path`, `permissions`, `stime`, `expiration`'; + } else { + $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `permissions`, `stime`, `file_source`, `expiration`'; + } + } else { + if ($fileDependent) { + if (($itemType == 'file' || $itemType == 'folder') && $format == \OC_Share_Backend_File::FORMAT_FILE_APP || $format == \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT) { + $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `uid_owner`, `share_type`, `share_with`, `file_source`, `path`, `file_target`, `permissions`, `expiration`, `name`, `ctime`, `mtime`, `mimetype`, `size`, `encrypted`, `versioned`, `writable`'; + } else { + $select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`, `file_source`, `path`, `file_target`, `permissions`, `stime`, `expiration`'; + } + } else { + $select = '*'; + } + } + } + $root = strlen($root); + $query = \OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*share` '.$where, $queryLimit); + $result = $query->execute($queryArgs); + $items = array(); + $targets = array(); + while ($row = $result->fetchRow()) { + // Filter out duplicate group shares for users with unique targets + if ($row['share_type'] == self::$shareTypeGroupUserUnique && isset($items[$row['parent']])) { + $row['share_type'] = self::SHARE_TYPE_GROUP; + $row['share_with'] = $items[$row['parent']]['share_with']; + // Remove the parent group share + unset($items[$row['parent']]); + if ($row['permissions'] == 0) { + continue; + } + } else if (!isset($uidOwner)) { + // Check if the same target already exists + if (isset($targets[$row[$column]])) { + // Check if the same owner shared with the user twice through a group and user share - this is allowed + $id = $targets[$row[$column]]; + if ($items[$id]['uid_owner'] == $row['uid_owner']) { + // Switch to group share type to ensure resharing conditions aren't bypassed + if ($items[$id]['share_type'] != self::SHARE_TYPE_GROUP) { + $items[$id]['share_type'] = self::SHARE_TYPE_GROUP; + $items[$id]['share_with'] = $row['share_with']; + } + // Switch ids if sharing permission is granted on only one share to ensure correct parent is used if resharing + if (~(int)$items[$id]['permissions'] & self::PERMISSION_SHARE && (int)$row['permissions'] & self::PERMISSION_SHARE) { + $items[$row['id']] = $items[$id]; + unset($items[$id]); + $id = $row['id']; + } + // Combine the permissions for the item + $items[$id]['permissions'] |= (int)$row['permissions']; + continue; + } + } else { + $targets[$row[$column]] = $row['id']; + } + } + // Remove root from file source paths if retrieving own shared items + if (isset($uidOwner) && isset($row['path'])) { + if (isset($row['parent'])) { + $row['path'] = '/Shared/'.basename($row['path']); + } else { + $row['path'] = substr($row['path'], $root); + } + } + if (isset($row['expiration'])) { + $time = new \DateTime(); + if ($row['expiration'] < date('Y-m-d H:i', $time->format('U') - $time->getOffset())) { + self::delete($row['id']); + continue; + } + } + $items[$row['id']] = $row; + } + if (!empty($items)) { + $collectionItems = array(); + foreach ($items as &$row) { + // Return only the item instead of a 2-dimensional array + if ($limit == 1 && $row['item_type'] == $itemType && $row[$column] == $item) { + if ($format == self::FORMAT_NONE) { + return $row; + } else { + break; + } + } + // Check if this is a collection of the requested item type + if ($includeCollections && $collectionTypes && in_array($row['item_type'], $collectionTypes)) { + if (($collectionBackend = self::getBackend($row['item_type'])) && $collectionBackend instanceof Share_Backend_Collection) { + // Collections can be inside collections, check if the item is a collection + if (isset($item) && $row['item_type'] == $itemType && $row[$column] == $item) { + $collectionItems[] = $row; + } else { + $collection = array(); + $collection['item_type'] = $row['item_type']; + if ($row['item_type'] == 'file' || $row['item_type'] == 'folder') { + $collection['path'] = basename($row['path']); + } + $row['collection'] = $collection; + // Fetch all of the children sources + $children = $collectionBackend->getChildren($row[$column]); + foreach ($children as $child) { + $childItem = $row; + $childItem['item_type'] = $itemType; + if ($row['item_type'] != 'file' && $row['item_type'] != 'folder') { + $childItem['item_source'] = $child['source']; + $childItem['item_target'] = $child['target']; + } + if ($backend instanceof Share_Backend_File_Dependent) { + if ($row['item_type'] == 'file' || $row['item_type'] == 'folder') { + $childItem['file_source'] = $child['source']; + } else { + $childItem['file_source'] = \OC_FileCache::getId($child['file_path']); + } + $childItem['file_target'] = \OC_Filesystem::normalizePath($child['file_path']); + } + if (isset($item)) { + if ($childItem[$column] == $item) { + // Return only the item instead of a 2-dimensional array + if ($limit == 1) { + if ($format == self::FORMAT_NONE) { + return $childItem; + } else { + // Unset the items array and break out of both loops + $items = array(); + $items[] = $childItem; + break 2; + } + } else { + $collectionItems[] = $childItem; + } + } + } else { + $collectionItems[] = $childItem; + } + } + } + } + // Remove collection item + unset($items[$row['id']]); + } + } + if (!empty($collectionItems)) { + $items = array_merge($items, $collectionItems); + } + if ($format == self::FORMAT_NONE) { + return $items; + } else if ($format == self::FORMAT_STATUSES) { + $statuses = array(); + // Switch column to path for files and folders, used for determining statuses inside of folders + if ($itemType == 'file' || $itemType == 'folder') { + $column = 'path'; + } + foreach ($items as $item) { + if ($item['share_type'] == self::SHARE_TYPE_LINK) { + $statuses[$item[$column]] = true; + } else if (!isset($statuses[$item[$column]])) { + $statuses[$item[$column]] = false; + } + } + return $statuses; + } else { + return $backend->formatItems($items, $format, $parameters); + } + } else if ($limit == 1 || (isset($uidOwner) && isset($item))) { + return false; + } + return array(); + } + + /** + * @brief Put shared item into the database + * @param string Item type + * @param string Item source + * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK + * @param string User or group the item is being shared with + * @param int CRUDS permissions + * @param bool|array Parent folder target (optional) + * @return bool Returns true on success or false on failure + */ + private static function put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder = null) { + $backend = self::getBackend($itemType); + // Check if this is a reshare + if ($checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true)) { + // Check if attempting to share back to owner + if ($checkReshare['uid_owner'] == $shareWith && $shareType == self::SHARE_TYPE_USER) { + $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is the original sharer'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + // Check if share permissions is granted + if ((int)$checkReshare['permissions'] & self::PERMISSION_SHARE) { + if (~(int)$checkReshare['permissions'] & $permissions) { + $message = 'Sharing '.$itemSource.' failed, because the permissions exceed permissions granted to '.$uidOwner; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } else { + // TODO Don't check if inside folder + $parent = $checkReshare['id']; + $itemSource = $checkReshare['item_source']; + $fileSource = $checkReshare['file_source']; + $suggestedItemTarget = $checkReshare['item_target']; + $suggestedFileTarget = $checkReshare['file_target']; + $filePath = $checkReshare['file_target']; + } + } else { + $message = 'Sharing '.$itemSource.' failed, because resharing is not allowed'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + } else { + $parent = null; + $suggestedItemTarget = null; + $suggestedFileTarget = null; + if (!$backend->isValidSource($itemSource, $uidOwner)) { + $message = 'Sharing '.$itemSource.' failed, because the sharing backend for '.$itemType.' could not find its source'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + $parent = null; + if ($backend instanceof Share_Backend_File_Dependent) { + $filePath = $backend->getFilePath($itemSource, $uidOwner); + if ($itemType == 'file' || $itemType == 'folder') { + $fileSource = $itemSource; + } else { + $fileSource = \OC_FileCache::getId($filePath); + } + if ($fileSource == -1) { + $message = 'Sharing '.$itemSource.' failed, because the file could not be found in the file cache'; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + } else { + $filePath = null; + $fileSource = null; + } + } + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)'); + // Share with a group + if ($shareType == self::SHARE_TYPE_GROUP) { + $groupItemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith['group'], $uidOwner, $suggestedItemTarget); + if (isset($fileSource)) { + if ($parentFolder) { + if ($parentFolder === true) { + $groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget); + // Set group default file target for future use + $parentFolders[0]['folder'] = $groupFileTarget; + } else { + // Get group default file target + $groupFileTarget = $parentFolder[0]['folder'].$itemSource; + $parent = $parentFolder[0]['id']; + } + } else { + $groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget); + } + } else { + $groupFileTarget = null; + } + $query->execute(array($itemType, $itemSource, $groupItemTarget, $parent, $shareType, $shareWith['group'], $uidOwner, $permissions, time(), $fileSource, $groupFileTarget)); + // Save this id, any extra rows for this group share will need to reference it + $parent = \OC_DB::insertid('*PREFIX*share'); + // Loop through all users of this group in case we need to add an extra row + foreach ($shareWith['users'] as $uid) { + $itemTarget = self::generateTarget($itemType, $itemSource, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedItemTarget, $parent); + if (isset($fileSource)) { + if ($parentFolder) { + if ($parentFolder === true) { + $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent); + if ($fileTarget != $groupFileTarget) { + $parentFolders[$uid]['folder'] = $fileTarget; + } + } else if (isset($parentFolder[$uid])) { + $fileTarget = $parentFolder[$uid]['folder'].$itemSource; + $parent = $parentFolder[$uid]['id']; + } + } else { + $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent); + } + } else { + $fileTarget = null; + } + // Insert an extra row for the group share if the item or file target is unique for this user + if ($itemTarget != $groupItemTarget || (isset($fileSource) && $fileTarget != $groupFileTarget)) { + $query->execute(array($itemType, $itemSource, $itemTarget, $parent, self::$shareTypeGroupUserUnique, $uid, $uidOwner, $permissions, time(), $fileSource, $fileTarget)); + \OC_DB::insertid('*PREFIX*share'); + } + } + if ($parentFolder === true) { + // Return parent folders to preserve file target paths for potential children + return $parentFolders; + } + } else { + $itemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedItemTarget); + if (isset($fileSource)) { + if ($parentFolder) { + if ($parentFolder === true) { + $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget); + $parentFolders['folder'] = $fileTarget; + } else { + $fileTarget = $parentFolder['folder'].$itemSource; + $parent = $parentFolder['id']; + } + } else { + $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget); + } + } else { + $fileTarget = null; + } + $query->execute(array($itemType, $itemSource, $itemTarget, $parent, $shareType, $shareWith, $uidOwner, $permissions, time(), $fileSource, $fileTarget)); + $id = \OC_DB::insertid('*PREFIX*share'); + if ($parentFolder === true) { + $parentFolders['id'] = $id; + // Return parent folder to preserve file target paths for potential children + return $parentFolders; + } + } + return true; + } + + /** + * @brief Generate a unique target for the item + * @param string Item type + * @param string Item source + * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK + * @param string User or group the item is being shared with + * @param string The suggested target originating from a reshare (optional) + * @param int The id of the parent group share (optional) + * @return string Item target + */ + private static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedTarget = null, $groupParent = null) { + $backend = self::getBackend($itemType); + if ($shareType == self::SHARE_TYPE_LINK) { + if (isset($suggestedTarget)) { + return $suggestedTarget; + } + return $backend->generateTarget($itemSource, false); + } else { + if ($itemType == 'file' || $itemType == 'folder') { + $column = 'file_target'; + $columnSource = 'file_source'; + } else { + $column = 'item_target'; + $columnSource = 'item_source'; + } + if ($shareType == self::SHARE_TYPE_USER) { + // Share with is a user, so set share type to user and groups + $shareType = self::$shareTypeUserAndGroups; + $userAndGroups = array_merge(array($shareWith), \OC_Group::getUserGroups($shareWith)); + } else { + $userAndGroups = false; + } + $exclude = null; + // Backend has 3 opportunities to generate a unique target + for ($i = 0; $i < 2; $i++) { + // Check if suggested target exists first + if ($i == 0 && isset($suggestedTarget)) { + $target = $suggestedTarget; + } else { + if ($shareType == self::SHARE_TYPE_GROUP) { + $target = $backend->generateTarget($itemSource, false, $exclude); + } else { + $target = $backend->generateTarget($itemSource, $shareWith, $exclude); + } + if (is_array($exclude) && in_array($target, $exclude)) { + break; + } + } + // Check if target already exists + $checkTarget = self::getItems($itemType, $target, $shareType, $shareWith); + if (!empty($checkTarget)) { + foreach ($checkTarget as $item) { + // Skip item if it is the group parent row + if (isset($groupParent) && $item['id'] == $groupParent) { + if (count($checkTarget) == 1) { + return $target; + } else { + continue; + } + } + if ($item['uid_owner'] == $uidOwner) { + if ($itemType == 'file' || $itemType == 'folder') { + if ($item['file_source'] == \OC_FileCache::getId($itemSource)) { + return $target; + } + } else if ($item['item_source'] == $itemSource) { + return $target; + } + } + } + if (!isset($exclude)) { + $exclude = array(); + } + // Find similar targets to improve backend's chances to generate a unqiue target + if ($userAndGroups) { + if ($column == 'file_target') { + $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')'); + $result = $checkTargets->execute(array(self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique)); + } else { + $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')'); + $result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique)); + } + } else { + if ($column == 'file_target') { + $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` = ? AND `share_with` = ?'); + $result = $checkTargets->execute(array(self::SHARE_TYPE_GROUP, $shareWith)); + } else { + $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` = ? AND `share_with` = ?'); + $result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_GROUP, $shareWith)); + } + } + while ($row = $result->fetchRow()) { + $exclude[] = $row[$column]; + } + } else { + return $target; + } + } + } + $message = 'Sharing backend registered for '.$itemType.' did not generate a unique target for '.$itemSource; + \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); + throw new \Exception($message); + } + + /** + * @brief Delete all reshares of an item + * @param int Id of item to delete + * @param bool If true, exclude the parent from the delete (optional) + * @param string The user that the parent was shared with (optinal) + */ + private static function delete($parent, $excludeParent = false, $uidOwner = null) { + $ids = array($parent); + $parents = array($parent); + while (!empty($parents)) { + $parents = "'".implode("','", $parents)."'"; + // Check the owner on the first search of reshares, useful for finding and deleting the reshares by a single user of a group share + if (count($ids) == 1 && isset($uidOwner)) { + $query = \OC_DB::prepare('SELECT `id`, `uid_owner`, `item_type`, `item_target`, `parent` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ?'); + $result = $query->execute(array($uidOwner)); + } else { + $query = \OC_DB::prepare('SELECT `id`, `item_type`, `item_target`, `parent`, `uid_owner` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')'); + $result = $query->execute(); + } + // Reset parents array, only go through loop again if items are found + $parents = array(); + while ($item = $result->fetchRow()) { + // Search for a duplicate parent share, this occurs when an item is shared to the same user through a group and user or the same item is shared by different users + $userAndGroups = array_merge(array($item['uid_owner']), \OC_Group::getUserGroups($item['uid_owner'])); + $query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `item_type` = ? AND `item_target` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\') AND `uid_owner` != ? AND `id` != ?'); + $duplicateParent = $query->execute(array($item['item_type'], $item['item_target'], self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique, $item['uid_owner'], $item['parent']))->fetchRow(); + if ($duplicateParent) { + // Change the parent to the other item id if share permission is granted + if ($duplicateParent['permissions'] & self::PERMISSION_SHARE) { + $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `parent` = ? WHERE `id` = ?'); + $query->execute(array($duplicateParent['id'], $item['id'])); + continue; + } + } + $ids[] = $item['id']; + $parents[] = $item['id']; + } + } + if ($excludeParent) { + unset($ids[0]); + } + if (!empty($ids)) { + $ids = "'".implode("','", $ids)."'"; + $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `id` IN ('.$ids.')'); + $query->execute(); + } + } + + /** + * Hook Listeners + */ + + public static function post_deleteUser($arguments) { + // Delete any items shared with the deleted user + $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `share_with` = ? AND `share_type` = ? OR `share_type` = ?'); + $result = $query->execute(array($arguments['uid'], self::SHARE_TYPE_USER, self::$shareTypeGroupUserUnique)); + // Delete any items the deleted user shared + $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*share` WHERE `uid_owner` = ?'); + $result = $query->execute(array($arguments['uid'])); + while ($item = $result->fetchRow()) { + self::delete($item['id']); + } + } + + public static function post_addToGroup($arguments) { + // Find the group shares and check if the user needs a unique target + $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `share_type` = ? AND `share_with` = ?'); + $result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'])); + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)'); + while ($item = $result->fetchRow()) { + if ($item['item_type'] == 'file' || $item['item_type'] == 'file') { + $itemTarget = null; + } else { + $itemTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['item_target'], $item['id']); + } + if (isset($item['file_source'])) { + $fileTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['file_target'], $item['id']); + } else { + $fileTarget = null; + } + // Insert an extra row for the group share if the item or file target is unique for this user + if ($itemTarget != $item['item_target'] || $fileTarget != $item['file_target']) { + $query->execute(array($item['item_type'], $item['item_source'], $itemTarget, $item['id'], self::$shareTypeGroupUserUnique, $arguments['uid'], $item['uid_owner'], $item['permissions'], $item['stime'], $item['file_source'], $fileTarget)); + \OC_DB::insertid('*PREFIX*share'); + } + } + } + + public static function post_removeFromGroup($arguments) { + // TODO Don't call if user deleted? + $query = \OC_DB::prepare('SELECT `id`, `share_type` FROM `*PREFIX*share` WHERE (`share_type` = ? AND `share_with` = ?) OR (`share_type` = ? AND `share_with` = ?)'); + $result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'], self::$shareTypeGroupUserUnique, $arguments['uid'])); + while ($item = $result->fetchRow()) { + if ($item['share_type'] == self::SHARE_TYPE_GROUP) { + // Delete all reshares by this user of the group share + self::delete($item['id'], true, $arguments['uid']); + } else { + self::delete($item['id']); + } + } + } + + public static function post_deleteGroup($arguments) { + $query = \OC_DB::prepare('SELECT id FROM `*PREFIX*share` WHERE `share_type` = ? AND `share_with` = ?'); + $result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'])); + while ($item = $result->fetchRow()) { + self::delete($item['id']); + } + } + +} + +/** +* Interface that apps must implement to share content. +*/ +interface Share_Backend { + + /** + * @brief Get the source of the item to be stored in the database + * @param string Item source + * @param string Owner of the item + * @return mixed|array|false Source + * + * Return an array if the item is file dependent, the array needs two keys: 'item' and 'file' + * Return false if the item does not exist for the user + * + * The formatItems() function will translate the source returned back into the item + */ + public function isValidSource($itemSource, $uidOwner); + + /** + * @brief Get a unique name of the item for the specified user + * @param string Item source + * @param string|false User the item is being shared with + * @param array|null List of similar item names already existing as shared items + * @return string Target name + * + * This function needs to verify that the user does not already have an item with this name. + * If it does generate a new name e.g. name_# + */ + public function generateTarget($itemSource, $shareWith, $exclude = null); + + /** + * @brief Converts the shared item sources back into the item in the specified format + * @param array Shared items + * @param int Format + * @return ? + * + * The items array is a 3-dimensional array with the item_source as the first key and the share id as the second key to an array with the share info. + * The key/value pairs included in the share info depend on the function originally called: + * If called by getItem(s)Shared: id, item_type, item, item_source, share_type, share_with, permissions, stime, file_source + * If called by getItem(s)SharedWith: id, item_type, item, item_source, item_target, share_type, share_with, permissions, stime, file_source, file_target + * This function allows the backend to control the output of shared items with custom formats. + * It is only called through calls to the public getItem(s)Shared(With) functions. + */ + public function formatItems($items, $format, $parameters = null); + +} + +/** +* Interface for share backends that share content that is dependent on files. +* Extends the Share_Backend interface. +*/ +interface Share_Backend_File_Dependent extends Share_Backend { + + /** + * @brief Get the file path of the item + * @param + * @param + * @return + */ + public function getFilePath($itemSource, $uidOwner); + +} + +/** +* Interface for collections of of items implemented by another share backend. +* Extends the Share_Backend interface. +*/ +interface Share_Backend_Collection extends Share_Backend { + + /** + * @brief Get the sources of the children of the item + * @param string Item source + * @return array Returns an array of children each inside an array with the keys: source, target, and file_path if applicable + */ + public function getChildren($itemSource); + +} diff --git a/lib/updater.php b/lib/updater.php index b3b289ef276..cb22da4f906 100644 --- a/lib/updater.php +++ b/lib/updater.php @@ -45,12 +45,12 @@ class OC_Updater{ // set a sensible timeout of 10 sec to stay responsive even if the update server is down. $ctx = stream_context_create( - array( - 'http' => array( - 'timeout' => 10 - ) - ) - ); + array( + 'http' => array( + 'timeout' => 10 + ) + ) + ); $xml=@file_get_contents($url, 0, $ctx); if($xml==FALSE) { return array(); diff --git a/lib/util.php b/lib/util.php index 9fde98c1972..68c4920258f 100755 --- a/lib/util.php +++ b/lib/util.php @@ -426,7 +426,7 @@ class OC_Util { * @description * Also required for the client side to compute the piont in time when to * request a fresh token. The client will do so when nearly 97% of the - * timespan coded here has expired. + * timespan coded here has expired. */ public static $callLifespan = 3600; // 3600 secs = 1 hour @@ -564,7 +564,7 @@ class OC_Util { public static function generate_random_bytes($length = 30) { // Try to use openssl_random_pseudo_bytes - if(function_exists('openssl_random_pseudo_bytes')) { + if(function_exists('openssl_random_pseudo_bytes')) { $pseudo_byte = bin2hex(openssl_random_pseudo_bytes($length, $strong)); if($strong == TRUE) { return substr($pseudo_byte, 0, $length); // Truncate it to match the length @@ -574,31 +574,31 @@ class OC_Util { // Try to use /dev/random $fp = @file_get_contents('/dev/random', false, null, 0, $length); if ($fp !== FALSE) { - $string = substr(bin2hex($fp), 0, $length); + $string = substr(bin2hex($fp), 0, $length); return $string; } - // Fallback to mt_rand() + // Fallback to mt_rand() $characters = '0123456789'; - $characters .= 'abcdefghijklmnopqrstuvwxyz'; + $characters .= 'abcdefghijklmnopqrstuvwxyz'; $charactersLength = strlen($characters)-1; $pseudo_byte = ""; // Select some random characters for ($i = 0; $i < $length; $i++) { $pseudo_byte .= $characters[mt_rand(0, $charactersLength)]; - } + } return $pseudo_byte; } - + /* * @brief Checks if a secure random number generator is available - * @return bool + * @return bool */ public static function secureRNG_available() { // Check openssl_random_pseudo_bytes - if(function_exists('openssl_random_pseudo_bytes')) { + if(function_exists('openssl_random_pseudo_bytes')) { openssl_random_pseudo_bytes(1, $strong); if($strong == TRUE) { return true; @@ -612,5 +612,5 @@ class OC_Util { } return false; - } + } } -- GitLab From 1012d317e320468c0e704a3d93514334f4557a63 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Tue, 4 Sep 2012 18:07:38 +0200 Subject: [PATCH 051/576] Add support for multiple login cookie tokens --- lib/base.php | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/base.php b/lib/base.php index 51f8f4efc5b..3b873118f4f 100644 --- a/lib/base.php +++ b/lib/base.php @@ -449,6 +449,7 @@ class OC{ OC_App::loadApps(); OC_User::setupBackends(); if(isset($_GET["logout"]) and ($_GET["logout"])) { + OC_Preferences::deleteKey(OC_User::getUser(), 'login_token', $_COOKIE['oc_token']); OC_User::logout(); header("Location: ".OC::$WEBROOT.'/'); }else{ @@ -523,15 +524,17 @@ class OC{ OC_Log::write('core', 'Trying to login from cookie', OC_Log::DEBUG); } // confirm credentials in cookie - if(isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username']) && - OC_Preferences::getValue($_COOKIE['oc_username'], "login", "token") === $_COOKIE['oc_token']) - { - OC_User::setUserId($_COOKIE['oc_username']); - OC_Util::redirectToDefaultPage(); - } - else { - OC_User::unsetMagicInCookie(); + if(isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username'])) { + $tokens = OC_Preferences::getKeys($_COOKIE['oc_username'], 'login_token'); + $tokens[] = OC_Preferences::getValue($_COOKIE['oc_username'], 'login', 'token'); + if (in_array($_COOKIE['oc_token'], $tokens, true)) { + OC_User::setUserId($_COOKIE['oc_username']); + OC_Util::redirectToDefaultPage(); + // doesn't return + } + OC_Preferences::deleteKey($_POST['user'], 'login_token', $_COOKIE['oc_token']); } + OC_User::unsetMagicInCookie(); return true; } @@ -551,7 +554,7 @@ class OC{ OC_Log::write('core', 'Setting remember login to cookie', OC_Log::DEBUG); } $token = md5($_POST["user"].time().$_POST['password']); - OC_Preferences::setValue($_POST['user'], 'login', 'token', $token); + OC_Preferences::setValue($_POST['user'], 'login_token', $token, time()); OC_User::setMagicInCookie($_POST["user"], $token); } else { -- GitLab From 7f3e0b5566b8c3e54cb97d186da6d398f58f8b15 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Tue, 4 Sep 2012 20:36:26 +0200 Subject: [PATCH 052/576] Cleanup login tokens on login success --- lib/base.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/base.php b/lib/base.php index 3b873118f4f..78f1f85f745 100644 --- a/lib/base.php +++ b/lib/base.php @@ -511,6 +511,17 @@ class OC{ OC_Util::displayLoginPage($error); } + protected static function cleanupLoginTokens($user) { + $cutoff = time() - 60*60*24*15; + $tokens = OC_Preferences::getKeys($_COOKIE['oc_username'], 'login_token'); + foreach($tokens as $token) { + $time = OC_Preferences::getValue($user, 'login_token', $token); + if ($time < $cutoff) { + OC_Preferences::deleteKey($user, 'login_token', $token); + } + } + } + protected static function tryRememberLogin() { if(!isset($_COOKIE["oc_remember_login"]) || !isset($_COOKIE["oc_token"]) @@ -528,6 +539,7 @@ class OC{ $tokens = OC_Preferences::getKeys($_COOKIE['oc_username'], 'login_token'); $tokens[] = OC_Preferences::getValue($_COOKIE['oc_username'], 'login', 'token'); if (in_array($_COOKIE['oc_token'], $tokens, true)) { + self::cleanupLoginTokens($_COOKIE['oc_username']); OC_User::setUserId($_COOKIE['oc_username']); OC_Util::redirectToDefaultPage(); // doesn't return @@ -549,6 +561,7 @@ class OC{ OC_User::setupBackends(); if(OC_User::login($_POST["user"], $_POST["password"])) { + self::cleanupLoginTokens($_POST['user']); if(!empty($_POST["remember_login"])) { if(defined("DEBUG") && DEBUG) { OC_Log::write('core', 'Setting remember login to cookie', OC_Log::DEBUG); -- GitLab From 4b799a69824f9f4a2ddb7df382b305b304b7d754 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 5 Sep 2012 17:33:15 +0200 Subject: [PATCH 053/576] Make the lifetime of the remember login cookie --- config/config.sample.php | 5 ++++- lib/base.php | 2 +- lib/user.php | 7 ++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/config/config.sample.php b/config/config.sample.php index 09eb6053c24..0c685945904 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -86,6 +86,9 @@ $CONFIG = array( /* Loglevel to start logging at. 0=DEBUG, 1=INFO, 2=WARN, 3=ERROR (default is WARN) */ "loglevel" => "", +/* Lifetime of the remember login cookie, default is 15 days */ +"remember_login_cookie_lifetime" => 60*60*24*15, + /* The directory where the user data is stored, default to data in the owncloud * directory. The sqlite database is also stored here, when sqlite is used. */ @@ -104,4 +107,4 @@ $CONFIG = array( 'writable' => true, ), ), -); \ No newline at end of file +); diff --git a/lib/base.php b/lib/base.php index 78f1f85f745..be93cb40e7c 100644 --- a/lib/base.php +++ b/lib/base.php @@ -512,7 +512,7 @@ class OC{ } protected static function cleanupLoginTokens($user) { - $cutoff = time() - 60*60*24*15; + $cutoff = time() - OC_Config::getValue('remember_login_cookie_lifetime', 60*60*24*15); $tokens = OC_Preferences::getKeys($_COOKIE['oc_username'], 'login_token'); foreach($tokens as $token) { $time = OC_Preferences::getValue($user, 'login_token', $token); diff --git a/lib/user.php b/lib/user.php index 7de2a4b7fe6..be8ddce88bb 100644 --- a/lib/user.php +++ b/lib/user.php @@ -472,9 +472,10 @@ class OC_User { */ public static function setMagicInCookie($username, $token) { $secure_cookie = OC_Config::getValue("forcessl", false); - setcookie("oc_username", $username, time()+60*60*24*15, '', '', $secure_cookie); - setcookie("oc_token", $token, time()+60*60*24*15, '', '', $secure_cookie); - setcookie("oc_remember_login", true, time()+60*60*24*15, '', '', $secure_cookie); + $expires = time() + OC_Config::getValue('remember_login_cookie_lifetime', 60*60*24*15); + setcookie("oc_username", $username, $expires, '', '', $secure_cookie); + setcookie("oc_token", $token, $expires, '', '', $secure_cookie); + setcookie("oc_remember_login", true, $expires, '', '', $secure_cookie); } /** -- GitLab From ee5d0f328fcaaabee00f3a3fda22c49f6ab84f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Thu, 11 Oct 2012 10:50:17 +0200 Subject: [PATCH 054/576] improve token security switched from time() to internal method OC_Util::generate_random_bytes() --- lib/base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/base.php b/lib/base.php index be93cb40e7c..4dd69f3cc3e 100644 --- a/lib/base.php +++ b/lib/base.php @@ -566,7 +566,7 @@ class OC{ if(defined("DEBUG") && DEBUG) { OC_Log::write('core', 'Setting remember login to cookie', OC_Log::DEBUG); } - $token = md5($_POST["user"].time().$_POST['password']); + $token = md5($_POST["user"].OC_Util::generate_random_bytes(10).$_POST['password']); OC_Preferences::setValue($_POST['user'], 'login_token', $token, time()); OC_User::setMagicInCookie($_POST["user"], $token); } -- GitLab From 45f1c3f120e459a48ccb54b74cc97facb1946042 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Thu, 11 Oct 2012 11:38:42 +0200 Subject: [PATCH 055/576] further improvements on multiple login token support outdated tokens are deleted before checking against cookies if an invalid token is used we delete all stored tokens for saveness used token will be replaced by a new one after successful authentication --- lib/base.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/base.php b/lib/base.php index 4dd69f3cc3e..cac416003e0 100644 --- a/lib/base.php +++ b/lib/base.php @@ -536,15 +536,25 @@ class OC{ } // confirm credentials in cookie if(isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username'])) { + // delete outdated cookies + cleanupLoginTokens($_COOKIE['oc_username']); + // get new tokens $tokens = OC_Preferences::getKeys($_COOKIE['oc_username'], 'login_token'); - $tokens[] = OC_Preferences::getValue($_COOKIE['oc_username'], 'login', 'token'); + // test cookies token against stored tokens if (in_array($_COOKIE['oc_token'], $tokens, true)) { - self::cleanupLoginTokens($_COOKIE['oc_username']); + // replace successfully used token with a new one + OC_Preferences::deleteKey($_POST['user'], 'login_token', $_COOKIE['oc_token']); + $token = md5($_POST["user"].OC_Util::generate_random_bytes(10).$_COOKIE['oc_token']); + OC_Preferences::setValue($_POST['user'], 'login_token', $token, time()); + OC_User::setMagicInCookie($_POST['user'], $token); + // login OC_User::setUserId($_COOKIE['oc_username']); OC_Util::redirectToDefaultPage(); // doesn't return } - OC_Preferences::deleteKey($_POST['user'], 'login_token', $_COOKIE['oc_token']); + // if you reach this point you are an attacker + // we remove all tokens to be save + OC_Preferences::deleteApp($_POST['user'], 'login_token'); } OC_User::unsetMagicInCookie(); return true; -- GitLab From 2ea06f67bd8bf8293afdff91fbbc42d021d2c211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Thu, 11 Oct 2012 11:54:40 +0200 Subject: [PATCH 056/576] delete all tokens on password change --- lib/base.php | 8 +++++--- lib/user.php | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/base.php b/lib/base.php index cac416003e0..b02db4d05f5 100644 --- a/lib/base.php +++ b/lib/base.php @@ -552,9 +552,11 @@ class OC{ OC_Util::redirectToDefaultPage(); // doesn't return } - // if you reach this point you are an attacker - // we remove all tokens to be save - OC_Preferences::deleteApp($_POST['user'], 'login_token'); + // if you reach this point you have changed your password + // or you are an attacker + // we can not delete tokens here because users will reach + // this point multible times after a password change + //OC_Preferences::deleteApp($_POST['user'], 'login_token'); } OC_User::unsetMagicInCookie(); return true; diff --git a/lib/user.php b/lib/user.php index be8ddce88bb..11373a74014 100644 --- a/lib/user.php +++ b/lib/user.php @@ -329,6 +329,8 @@ class OC_User { } } } + // invalidate all login cookies + OC_Preferences::deleteApp($uid, 'login_token'); OC_Hook::emit( "OC_User", "post_setPassword", array( "uid" => $uid, "password" => $password )); return $success; } -- GitLab From eb79ccafe3c0fcb20282d56e6ab04e0c051f929a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Thu, 11 Oct 2012 12:30:43 +0200 Subject: [PATCH 057/576] forgot a class name --- lib/base.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/base.php b/lib/base.php index b02db4d05f5..9cd2ee55b03 100644 --- a/lib/base.php +++ b/lib/base.php @@ -537,8 +537,8 @@ class OC{ // confirm credentials in cookie if(isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username'])) { // delete outdated cookies - cleanupLoginTokens($_COOKIE['oc_username']); - // get new tokens + self::cleanupLoginTokens($_COOKIE['oc_username']); + // get stored tokens $tokens = OC_Preferences::getKeys($_COOKIE['oc_username'], 'login_token'); // test cookies token against stored tokens if (in_array($_COOKIE['oc_token'], $tokens, true)) { -- GitLab From 38b9bffaeaaa6154c903f87100f20e07afe8261d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Thu, 11 Oct 2012 12:53:34 +0200 Subject: [PATCH 058/576] call unsetMagicInCookie if token is invalid --- lib/base.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/base.php b/lib/base.php index 9cd2ee55b03..6105f525845 100644 --- a/lib/base.php +++ b/lib/base.php @@ -554,9 +554,9 @@ class OC{ } // if you reach this point you have changed your password // or you are an attacker - // we can not delete tokens here because users will reach + // we can not delete tokens here because users may reach // this point multible times after a password change - //OC_Preferences::deleteApp($_POST['user'], 'login_token'); + OC_User::unsetMagicInCookie(); } OC_User::unsetMagicInCookie(); return true; -- GitLab From 382f8d060cad9da01ff7c24fc937b3f0d1b46990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Thu, 11 Oct 2012 14:11:30 +0200 Subject: [PATCH 059/576] fixed wrong variable usage --- lib/base.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/base.php b/lib/base.php index 6105f525845..4007d241dee 100644 --- a/lib/base.php +++ b/lib/base.php @@ -513,7 +513,7 @@ class OC{ protected static function cleanupLoginTokens($user) { $cutoff = time() - OC_Config::getValue('remember_login_cookie_lifetime', 60*60*24*15); - $tokens = OC_Preferences::getKeys($_COOKIE['oc_username'], 'login_token'); + $tokens = OC_Preferences::getKeys($user, 'login_token'); foreach($tokens as $token) { $time = OC_Preferences::getValue($user, 'login_token', $token); if ($time < $cutoff) { @@ -543,10 +543,10 @@ class OC{ // test cookies token against stored tokens if (in_array($_COOKIE['oc_token'], $tokens, true)) { // replace successfully used token with a new one - OC_Preferences::deleteKey($_POST['user'], 'login_token', $_COOKIE['oc_token']); - $token = md5($_POST["user"].OC_Util::generate_random_bytes(10).$_COOKIE['oc_token']); - OC_Preferences::setValue($_POST['user'], 'login_token', $token, time()); - OC_User::setMagicInCookie($_POST['user'], $token); + OC_Preferences::deleteKey($_COOKIE['oc_username'], 'login_token', $_COOKIE['oc_token']); + $token = md5($_COOKIE['oc_username'].OC_Util::generate_random_bytes(10).$_COOKIE['oc_token']); + OC_Preferences::setValue($_COOKIE['oc_username'], 'login_token', $token, time()); + OC_User::setMagicInCookie($_COOKIE['oc_username'], $token); // login OC_User::setUserId($_COOKIE['oc_username']); OC_Util::redirectToDefaultPage(); -- GitLab From d8fe6fbb400e80e51655b78883925efe6b3af937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Thu, 11 Oct 2012 14:12:19 +0200 Subject: [PATCH 060/576] added a warning message to the log when a cookie is rejected --- lib/base.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/base.php b/lib/base.php index 4007d241dee..b030b38b5ee 100644 --- a/lib/base.php +++ b/lib/base.php @@ -556,6 +556,7 @@ class OC{ // or you are an attacker // we can not delete tokens here because users may reach // this point multible times after a password change + OC_Log::write('core', 'Authentication cookie rejected for user '.$_COOKIE['oc_username'], OC_Log::WARN); OC_User::unsetMagicInCookie(); } OC_User::unsetMagicInCookie(); -- GitLab From a6c4046f48752b957d591a9c9574caf6f18e6d40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Fri, 12 Oct 2012 11:12:31 +0200 Subject: [PATCH 061/576] fixed typo and redundant method call --- lib/base.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/base.php b/lib/base.php index b030b38b5ee..bf2c2199ff5 100644 --- a/lib/base.php +++ b/lib/base.php @@ -555,9 +555,8 @@ class OC{ // if you reach this point you have changed your password // or you are an attacker // we can not delete tokens here because users may reach - // this point multible times after a password change + // this point multiple times after a password change OC_Log::write('core', 'Authentication cookie rejected for user '.$_COOKIE['oc_username'], OC_Log::WARN); - OC_User::unsetMagicInCookie(); } OC_User::unsetMagicInCookie(); return true; -- GitLab From b92fd984aa7f9281144b410ff703ca1796c10d41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Sat, 13 Oct 2012 16:02:45 +0200 Subject: [PATCH 062/576] removed username and password from token generation --- lib/base.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/base.php b/lib/base.php index bf2c2199ff5..ebeec22088a 100644 --- a/lib/base.php +++ b/lib/base.php @@ -544,7 +544,7 @@ class OC{ if (in_array($_COOKIE['oc_token'], $tokens, true)) { // replace successfully used token with a new one OC_Preferences::deleteKey($_COOKIE['oc_username'], 'login_token', $_COOKIE['oc_token']); - $token = md5($_COOKIE['oc_username'].OC_Util::generate_random_bytes(10).$_COOKIE['oc_token']); + $token = OC_Util::generate_random_bytes(128); OC_Preferences::setValue($_COOKIE['oc_username'], 'login_token', $token, time()); OC_User::setMagicInCookie($_COOKIE['oc_username'], $token); // login @@ -578,7 +578,7 @@ class OC{ if(defined("DEBUG") && DEBUG) { OC_Log::write('core', 'Setting remember login to cookie', OC_Log::DEBUG); } - $token = md5($_POST["user"].OC_Util::generate_random_bytes(10).$_POST['password']); + $token = OC_Util::generate_random_bytes(128); OC_Preferences::setValue($_POST['user'], 'login_token', $token, time()); OC_User::setMagicInCookie($_POST["user"], $token); } -- GitLab From ae1f33db5453052a1b267b00b0c6fd7b6b70ff82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Sun, 14 Oct 2012 20:47:31 +0200 Subject: [PATCH 063/576] implement fixed php session timeout and session id regeneration --- lib/base.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/base.php b/lib/base.php index ebeec22088a..0ba028a68d2 100644 --- a/lib/base.php +++ b/lib/base.php @@ -264,8 +264,30 @@ class OC{ } public static function initSession() { + // prevents javascript from accessing php session cookies ini_set('session.cookie_httponly', '1;'); + + // (re)-initialize session session_start(); + + // regenerate session id periodically to avoid session fixation + if (!isset($_SESSION['SID_CREATED'])) { + $_SESSION['SID_CREATED'] = time(); + } else if (time() - $_SESSION['SID_CREATED'] > 900) { + session_regenerate_id(true); + $_SESSION['SID_CREATED'] = time(); + } + + // session timeout + if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 3600)) { + if (isset($_COOKIE[session_name()])) { + setcookie(session_name(), '', time() - 42000, '/'); + } + session_unset(); + session_destroy(); + session_start(); + } + $_SESSION['LAST_ACTIVITY'] = time(); } public static function init() { -- GitLab From 22fa23b4da06eef0cb2f22db25339838fc58a994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Sun, 14 Oct 2012 22:25:05 +0200 Subject: [PATCH 064/576] extend configkey column to hold 128bit values --- db_structure.xml | 2 +- lib/util.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/db_structure.xml b/db_structure.xml index 99a30cb6137..a17ab90b8a1 100644 --- a/db_structure.xml +++ b/db_structure.xml @@ -395,7 +395,7 @@ text true - 64 + 128 diff --git a/lib/util.php b/lib/util.php index 68c4920258f..707100a9bcc 100755 --- a/lib/util.php +++ b/lib/util.php @@ -83,7 +83,7 @@ class OC_Util { */ public static function getVersion() { // hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user - return array(4,91,00); + return array(4,91,01); } /** -- GitLab From cf7df2db7a4e729c0cef5932b1aed792390bb7d3 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 15 Oct 2012 02:09:11 +0200 Subject: [PATCH 065/576] [tx-robot] updated from transifex --- apps/user_ldap/l10n/pt_PT.php | 8 +++ l10n/af/core.po | 102 +++++++++++++++------------ l10n/ar/core.po | 102 +++++++++++++++------------ l10n/ar_SA/core.po | 102 +++++++++++++++------------ l10n/bg_BG/core.po | 102 +++++++++++++++------------ l10n/ca/core.po | 86 +++++++++++++---------- l10n/cs_CZ/core.po | 98 +++++++++++++++----------- l10n/da/core.po | 48 ++++++++----- l10n/de/core.po | 86 +++++++++++++---------- l10n/el/core.po | 98 +++++++++++++++----------- l10n/eo/core.po | 48 ++++++++----- l10n/es/core.po | 98 +++++++++++++++----------- l10n/es_AR/core.po | 86 +++++++++++++---------- l10n/et_EE/core.po | 102 +++++++++++++++------------ l10n/eu/core.po | 86 +++++++++++++---------- l10n/eu_ES/core.po | 102 +++++++++++++++------------ l10n/fa/core.po | 102 +++++++++++++++------------ l10n/fi/core.po | 102 +++++++++++++++------------ l10n/fi_FI/core.po | 74 ++++++++++++-------- l10n/fr/core.po | 98 +++++++++++++++----------- l10n/gl/core.po | 102 +++++++++++++++------------ l10n/he/core.po | 102 +++++++++++++++------------ l10n/hi/core.po | 102 +++++++++++++++------------ l10n/hr/core.po | 84 +++++++++++++--------- l10n/hu_HU/core.po | 102 +++++++++++++++------------ l10n/hy/core.po | 102 +++++++++++++++------------ l10n/ia/core.po | 102 +++++++++++++++------------ l10n/id/core.po | 102 +++++++++++++++------------ l10n/id_ID/core.po | 102 +++++++++++++++------------ l10n/it/core.po | 98 +++++++++++++++----------- l10n/ja_JP/core.po | 86 +++++++++++++---------- l10n/ko/core.po | 102 +++++++++++++++------------ l10n/ku_IQ/core.po | 74 ++++++++++++-------- l10n/lb/core.po | 102 +++++++++++++++------------ l10n/lt_LT/core.po | 102 +++++++++++++++------------ l10n/lv/core.po | 102 +++++++++++++++------------ l10n/mk/core.po | 102 +++++++++++++++------------ l10n/ms_MY/core.po | 102 +++++++++++++++------------ l10n/nb_NO/core.po | 102 +++++++++++++++------------ l10n/nl/core.po | 48 ++++++++----- l10n/nn_NO/core.po | 102 +++++++++++++++------------ l10n/oc/core.po | 104 ++++++++++++++++------------ l10n/pl/core.po | 84 +++++++++++++--------- l10n/pl_PL/core.po | 102 +++++++++++++++------------ l10n/pt_BR/core.po | 84 +++++++++++++--------- l10n/pt_PT/core.po | 74 ++++++++++++-------- l10n/pt_PT/user_ldap.po | 22 +++--- l10n/ro/core.po | 102 +++++++++++++++------------ l10n/ru/core.po | 102 +++++++++++++++------------ l10n/ru_RU/core.po | 74 ++++++++++++-------- l10n/sk_SK/core.po | 74 ++++++++++++-------- l10n/sl/core.po | 102 +++++++++++++++------------ l10n/so/core.po | 102 +++++++++++++++------------ l10n/sr/core.po | 102 +++++++++++++++------------ l10n/sr@latin/core.po | 102 +++++++++++++++------------ l10n/sv/core.po | 98 +++++++++++++++----------- l10n/templates/core.pot | 44 ++++++++---- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/th_TH/core.po | 98 +++++++++++++++----------- l10n/tr/core.po | 102 +++++++++++++++------------ l10n/uk/core.po | 102 +++++++++++++++------------ l10n/vi/core.po | 102 +++++++++++++++------------ l10n/zh_CN.GB2312/core.po | 74 ++++++++++++-------- l10n/zh_CN/core.po | 102 +++++++++++++++------------ l10n/zh_TW/core.po | 102 +++++++++++++++------------ 72 files changed, 3411 insertions(+), 2411 deletions(-) diff --git a/apps/user_ldap/l10n/pt_PT.php b/apps/user_ldap/l10n/pt_PT.php index bf32a295371..a85b2a6f1b4 100644 --- a/apps/user_ldap/l10n/pt_PT.php +++ b/apps/user_ldap/l10n/pt_PT.php @@ -1,10 +1,18 @@ "Anfitrião", +"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Pode omitir o protocolo, excepto se necessitar de SSL. Neste caso, comece com ldaps://", +"Base DN" => "DN base", "You can specify Base DN for users and groups in the Advanced tab" => "Pode especificar o ND Base para utilizadores e grupos no separador Avançado", +"User DN" => "DN do utilizador", "Password" => "Palavra-passe", +"For anonymous access, leave DN and Password empty." => "Para acesso anónimo, deixe DN e a Palavra-passe vazios.", "Group Filter" => "Filtrar por grupo", "Port" => "Porto", +"Use TLS" => "Usar TLS", +"Do not use it for SSL connections, it will fail." => "Não use para ligações SSL, irá falhar.", +"Turn off SSL certificate validation." => "Desligar a validação de certificado SSL.", "in bytes" => "em bytes", "in seconds. A change empties the cache." => "em segundos. Uma alteração esvazia a cache.", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Deixe vazio para nome de utilizador (padrão). De outro modo, especifique um atributo LDAP/AD.", "Help" => "Ajuda" ); diff --git a/l10n/af/core.po b/l10n/af/core.po index b341411ef2f..a58f8ce0ad4 100644 --- a/l10n/af/core.po +++ b/l10n/af/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n" "MIME-Version: 1.0\n" @@ -29,55 +29,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -105,8 +105,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -146,7 +146,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "" @@ -182,39 +182,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -238,12 +238,12 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "" @@ -299,52 +299,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -356,11 +372,11 @@ msgstr "" msgid "Lost your password?" msgstr "" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "" diff --git a/l10n/ar/core.po b/l10n/ar/core.po index d15bbe4a7cd..fa1727298b8 100644 --- a/l10n/ar/core.po +++ b/l10n/ar/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -30,55 +30,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "تعديلات" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -106,8 +106,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "كلمة السر" @@ -183,39 +183,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -239,12 +239,12 @@ msgstr "تم طلب" msgid "Login failed!" msgstr "محاولة دخول فاشلة!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "إسم المستخدم" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "طلب تعديل" @@ -300,52 +300,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "أضف مستخدم رئيسي " -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "خيارات متقدمة" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "مجلد المعلومات" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "أسس قاعدة البيانات" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "سيتم استخدمه" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "مستخدم قاعدة البيانات" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "كلمة سر مستخدم قاعدة البيانات" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "إسم قاعدة البيانات" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "خادم قاعدة البيانات" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "انهاء التعديلات" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "خدمات الوب تحت تصرفك" @@ -357,11 +373,11 @@ msgstr "الخروج" msgid "Lost your password?" msgstr "هل نسيت كلمة السر؟" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "تذكر" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "أدخل" diff --git a/l10n/ar_SA/core.po b/l10n/ar_SA/core.po index e63e571d91d..fee98bcffc6 100644 --- a/l10n/ar_SA/core.po +++ b/l10n/ar_SA/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n" "MIME-Version: 1.0\n" @@ -29,55 +29,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -105,8 +105,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -146,7 +146,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "" @@ -182,39 +182,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -238,12 +238,12 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "" @@ -299,52 +299,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -356,11 +372,11 @@ msgstr "" msgid "Lost your password?" msgstr "" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "" diff --git a/l10n/bg_BG/core.po b/l10n/bg_BG/core.po index ff661733f9f..c1c34e005b9 100644 --- a/l10n/bg_BG/core.po +++ b/l10n/bg_BG/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -33,55 +33,55 @@ msgstr "" msgid "This category already exists: " msgstr "Категорията вече съществува:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Настройки" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Януари" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Февруари" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Март" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Април" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Май" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Юни" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Юли" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Август" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Септември" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Октомври" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Ноември" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Декември" @@ -109,8 +109,8 @@ msgstr "Добре" msgid "No categories selected for deletion." msgstr "Няма избрани категории за изтриване" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Грешка" @@ -150,7 +150,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Парола" @@ -186,39 +186,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -242,12 +242,12 @@ msgstr "Заявено" msgid "Login failed!" msgstr "Входа пропадна!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Потребител" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Нулиране на заявка" @@ -303,52 +303,68 @@ msgstr "Редактиране на категориите" msgid "Add" msgstr "Добавяне" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Създаване на админ профил" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Разширено" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Директория за данни" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Конфигуриране на базата" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "ще се ползва" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Потребител за базата" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Парола за базата" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Име на базата" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Хост за базата" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Завършване на настройките" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -360,11 +376,11 @@ msgstr "Изход" msgid "Lost your password?" msgstr "Забравена парола?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "запомни" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Вход" diff --git a/l10n/ca/core.po b/l10n/ca/core.po index dcfd7d3d0c3..d02a32199ee 100644 --- a/l10n/ca/core.po +++ b/l10n/ca/core.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-02 02:03+0200\n" -"PO-Revision-Date: 2012-10-01 08:49+0000\n" -"Last-Translator: rogerc \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,55 +31,55 @@ msgstr "No voleu afegir cap categoria?" msgid "This category already exists: " msgstr "Aquesta categoria ja existeix:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Arranjament" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Gener" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Febrer" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Març" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Abril" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Maig" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Juny" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Juliol" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Agost" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Setembre" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Octubre" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Novembre" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Desembre" @@ -107,8 +107,8 @@ msgstr "D'acord" msgid "No categories selected for deletion." msgstr "No hi ha categories per eliminar." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:493 -#: js/share.js:505 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Error" @@ -148,7 +148,7 @@ msgstr "Comparteix amb enllaç" msgid "Password protect" msgstr "Protegir amb contrasenya" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Contrasenya" @@ -208,15 +208,15 @@ msgstr "elimina" msgid "share" msgstr "comparteix" -#: js/share.js:321 js/share.js:480 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Protegeix amb contrasenya" -#: js/share.js:493 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Error en eliminar la data d'expiració" -#: js/share.js:505 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Error en establir la data d'expiració" @@ -240,7 +240,7 @@ msgstr "Sol·licitat" msgid "Login failed!" msgstr "No s'ha pogut iniciar la sessió" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Nom d'usuari" @@ -301,52 +301,68 @@ msgstr "Edita les categories" msgid "Add" msgstr "Afegeix" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Crea un compte d'administrador" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avançat" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Carpeta de dades" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configura la base de dades" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "s'usarà" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Usuari de la base de dades" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Contrasenya de la base de dades" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nom de la base de dades" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Espai de taula de la base de dades" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Ordinador central de la base de dades" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Acaba la configuració" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "controleu els vostres serveis web" diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po index b589fce4cd9..590bd503d45 100644 --- a/l10n/cs_CZ/core.po +++ b/l10n/cs_CZ/core.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-30 02:02+0200\n" -"PO-Revision-Date: 2012-09-29 08:16+0000\n" -"Last-Translator: Tomáš Chvátal \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,55 +33,55 @@ msgstr "Žádná kategorie k přidání?" msgid "This category already exists: " msgstr "Tato kategorie již existuje: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Nastavení" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Leden" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Únor" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Březen" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Duben" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Květen" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Červen" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Červenec" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Srpen" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Září" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Říjen" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Listopad" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Prosinec" @@ -109,8 +109,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Žádné kategorie nebyly vybrány ke smazání." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Chyba" @@ -150,7 +150,7 @@ msgstr "Sdílet s odkazem" msgid "Password protect" msgstr "Chránit heslem" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Heslo" @@ -186,39 +186,39 @@ msgstr "s" msgid "Unshare" msgstr "Zrušit sdílení" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "lze upravovat" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "řízení přístupu" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "vytvořit" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "aktualizovat" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "smazat" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "sdílet" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Chráněno heslem" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Chyba při odstraňování data vypršení platnosti" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Chyba při nastavení data vypršení platnosti" @@ -242,7 +242,7 @@ msgstr "Požadováno" msgid "Login failed!" msgstr "Přihlášení selhalo." -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Uživatelské jméno" @@ -303,52 +303,68 @@ msgstr "Upravit kategorie" msgid "Add" msgstr "Přidat" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Vytvořit účet správce" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Pokročilé" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Složka s daty" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Nastavit databázi" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "bude použito" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Uživatel databáze" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Heslo databáze" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Název databáze" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Tabulkový prostor databáze" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Hostitel databáze" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Dokončit nastavení" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "webové služby pod Vaší kontrolou" diff --git a/l10n/da/core.po b/l10n/da/core.po index 0612baf36cc..93c824bb4a7 100644 --- a/l10n/da/core.po +++ b/l10n/da/core.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-13 02:04+0200\n" -"PO-Revision-Date: 2012-10-12 17:45+0000\n" -"Last-Translator: Ole Holm Frandsen \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \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" @@ -153,7 +153,7 @@ msgstr "Del med link" msgid "Password protect" msgstr "Beskyt med adgangskode" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Kodeord" @@ -245,7 +245,7 @@ msgstr "Forespugt" msgid "Login failed!" msgstr "Login fejlede!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Brugernavn" @@ -306,48 +306,64 @@ msgstr "Rediger kategorier" msgid "Add" msgstr "Tilføj" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Opret en administratorkonto" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avanceret" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Datamappe" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Konfigurer databasen" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "vil blive brugt" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Databasebruger" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Databasekodeord" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Navn på database" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Database tabelplads" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Databasehost" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Afslut opsætning" diff --git a/l10n/de/core.po b/l10n/de/core.po index 27511ab1ee1..c261cd3df46 100644 --- a/l10n/de/core.po +++ b/l10n/de/core.po @@ -20,9 +20,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-02 23:16+0200\n" -"PO-Revision-Date: 2012-10-02 07:55+0000\n" -"Last-Translator: Mirodin \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -42,55 +42,55 @@ msgstr "Keine Kategorie hinzuzufügen?" msgid "This category already exists: " msgstr "Kategorie existiert bereits:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Einstellungen" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Januar" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Februar" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "März" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "April" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Mai" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Juni" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Juli" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "August" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "September" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Oktober" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "November" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Dezember" @@ -118,8 +118,8 @@ msgstr "OK" msgid "No categories selected for deletion." msgstr "Es wurde keine Kategorien zum Löschen ausgewählt." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:493 -#: js/share.js:505 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Fehler" @@ -159,7 +159,7 @@ msgstr "Über einen Link freigeben" msgid "Password protect" msgstr "Passwortschutz" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Passwort" @@ -219,15 +219,15 @@ msgstr "löschen" msgid "share" msgstr "teilen" -#: js/share.js:321 js/share.js:480 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Durch ein Passwort geschützt" -#: js/share.js:493 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Fehler beim entfernen des Ablaufdatums" -#: js/share.js:505 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Fehler beim Setzen des Ablaufdatums" @@ -251,7 +251,7 @@ msgstr "Angefragt" msgid "Login failed!" msgstr "Login fehlgeschlagen!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Benutzername" @@ -312,52 +312,68 @@ msgstr "Kategorien bearbeiten" msgid "Add" msgstr "Hinzufügen" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Administrator-Konto anlegen" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Fortgeschritten" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Datenverzeichnis" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Datenbank einrichten" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "wird verwendet" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Datenbank-Benutzer" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Datenbank-Passwort" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Datenbank-Name" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Datenbank-Tablespace" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Datenbank-Host" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Installation abschließen" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "Web-Services unter Ihrer Kontrolle" diff --git a/l10n/el/core.po b/l10n/el/core.po index 7edf2b29dd9..c7c201ca95d 100644 --- a/l10n/el/core.po +++ b/l10n/el/core.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-01 02:04+0200\n" -"PO-Revision-Date: 2012-09-30 17:27+0000\n" -"Last-Translator: Dimitris M. \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \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" @@ -34,55 +34,55 @@ msgstr "Δεν έχετε να προστέσθέσεται μια κα" msgid "This category already exists: " msgstr "Αυτή η κατηγορία υπάρχει ήδη" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Ρυθμίσεις" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Ιανουάριος" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Φεβρουάριος" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Μάρτιος" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Απρίλιος" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Μάϊος" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Ιούνιος" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Ιούλιος" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Αύγουστος" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Σεπτέμβριος" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Οκτώβριος" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Νοέμβριος" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Δεκέμβριος" @@ -110,8 +110,8 @@ msgstr "Οκ" msgid "No categories selected for deletion." msgstr "Δεν επιλέχτηκαν κατηγορίες για διαγραφή" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Σφάλμα" @@ -151,7 +151,7 @@ msgstr "Διαμοιρασμός με σύνδεσμο" msgid "Password protect" msgstr "Προστασία κωδικού" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Κωδικός" @@ -187,39 +187,39 @@ msgstr "με" msgid "Unshare" msgstr "Σταμάτημα μοιράσματος" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "δυνατότητα αλλαγής" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "έλεγχος πρόσβασης" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "δημιουργία" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "ανανέωση" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "διαγραφή" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "διαμοιρασμός" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Προστασία με κωδικό" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Σφάλμα κατά την διαγραφή της ημ. λήξης" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Σφάλμα κατά τον ορισμό ημ. λήξης" @@ -243,7 +243,7 @@ msgstr "Ζητήθησαν" msgid "Login failed!" msgstr "Η σύνδεση απέτυχε!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Όνομα Χρήστη" @@ -304,52 +304,68 @@ msgstr "Επεξεργασία κατηγορίας" msgid "Add" msgstr "Προσθήκη" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Δημιουργήστε έναν λογαριασμό διαχειριστή" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Για προχωρημένους" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Φάκελος δεδομένων" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Διαμόρφωση της βάσης δεδομένων" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "θα χρησιμοποιηθούν" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Χρήστης της βάσης δεδομένων" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Κωδικός πρόσβασης βάσης δεδομένων" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Όνομα βάσης δεδομένων" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Κενά Πινάκων Βάσης Δεδομένων" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Διακομιστής βάσης δεδομένων" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Ολοκλήρωση εγκατάστασης" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "Υπηρεσίες web υπό τον έλεγχό σας" diff --git a/l10n/eo/core.po b/l10n/eo/core.po index cd6dc54094e..ae26e1e3476 100644 --- a/l10n/eo/core.po +++ b/l10n/eo/core.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-14 02:05+0200\n" -"PO-Revision-Date: 2012-10-13 05:07+0000\n" -"Last-Translator: Mariano \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -149,7 +149,7 @@ msgstr "Kunhavigi per ligilo" msgid "Password protect" msgstr "Protekti per pasvorto" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Pasvorto" @@ -241,7 +241,7 @@ msgstr "Petita" msgid "Login failed!" msgstr "Ensaluto malsukcesis!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Uzantonomo" @@ -302,48 +302,64 @@ msgstr "Redakti kategoriojn" msgid "Add" msgstr "Aldoni" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Krei administran konton" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Progresinta" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Datuma dosierujo" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Agordi la datumbazon" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "estos uzata" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Datumbaza uzanto" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Datumbaza pasvorto" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Datumbaza nomo" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Datumbaza tabelospaco" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Datumbaza gastigo" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Fini la instalon" diff --git a/l10n/es/core.po b/l10n/es/core.po index 98e33ab2a08..8ea4c971320 100644 --- a/l10n/es/core.po +++ b/l10n/es/core.po @@ -16,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-30 02:02+0200\n" -"PO-Revision-Date: 2012-09-29 20:46+0000\n" -"Last-Translator: Raul Fernandez Garcia \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -38,55 +38,55 @@ msgstr "¿Ninguna categoría para añadir?" msgid "This category already exists: " msgstr "Esta categoría ya existe: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Ajustes" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Enero" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Febrero" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Marzo" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Abril" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Mayo" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Junio" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Julio" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Agosto" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Septiembre" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Octubre" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Noviembre" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Diciembre" @@ -114,8 +114,8 @@ msgstr "Aceptar" msgid "No categories selected for deletion." msgstr "No hay categorías seleccionadas para borrar." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Fallo" @@ -155,7 +155,7 @@ msgstr "Enlace de compartir con " msgid "Password protect" msgstr "Protegido por contraseña" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Contraseña" @@ -191,39 +191,39 @@ msgstr "con" msgid "Unshare" msgstr "No compartir" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "puede editar" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "control de acceso" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "crear" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "modificar" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "eliminar" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "compartir" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Protegido por contraseña" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Error al eliminar la fecha de caducidad" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Error estableciendo fecha de caducidad" @@ -247,7 +247,7 @@ msgstr "Pedido" msgid "Login failed!" msgstr "¡Fallo al iniciar sesión!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Nombre de usuario" @@ -308,52 +308,68 @@ msgstr "Editar categorías" msgid "Add" msgstr "Añadir" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Crea una cuenta de administrador" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avanzado" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Directorio de almacenamiento" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configurar la base de datos" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "se utilizarán" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Usuario de la base de datos" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Contraseña de la base de datos" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nombre de la base de datos" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Espacio de tablas de la base de datos" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Host de la base de datos" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Completar la instalación" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "servicios web bajo tu control" diff --git a/l10n/es_AR/core.po b/l10n/es_AR/core.po index fdae03f14c3..690a7a4423f 100644 --- a/l10n/es_AR/core.po +++ b/l10n/es_AR/core.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-02 02:03+0200\n" -"PO-Revision-Date: 2012-10-01 14:58+0000\n" -"Last-Translator: cjtess \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,55 +30,55 @@ msgstr "¿Ninguna categoría para añadir?" msgid "This category already exists: " msgstr "Esta categoría ya existe: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Ajustes" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Enero" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Febrero" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Marzo" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Abril" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Mayo" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Junio" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Julio" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Agosto" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Septiembre" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Octubre" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Noviembre" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Diciembre" @@ -106,8 +106,8 @@ msgstr "Aceptar" msgid "No categories selected for deletion." msgstr "No hay categorías seleccionadas para borrar." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:493 -#: js/share.js:505 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Error" @@ -147,7 +147,7 @@ msgstr "Compartir con link" msgid "Password protect" msgstr "Proteger con contraseña " -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Contraseña" @@ -207,15 +207,15 @@ msgstr "remover" msgid "share" msgstr "compartir" -#: js/share.js:321 js/share.js:480 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Protegido por contraseña" -#: js/share.js:493 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Error al remover la fecha de caducidad" -#: js/share.js:505 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Error al asignar fecha de vencimiento" @@ -239,7 +239,7 @@ msgstr "Pedido" msgid "Login failed!" msgstr "¡Fallo al iniciar sesión!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Nombre de usuario" @@ -300,52 +300,68 @@ msgstr "Editar categorías" msgid "Add" msgstr "Añadir" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Creá una cuenta de administrador" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avanzado" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Directorio de almacenamiento" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configurar la base de datos" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "se utilizarán" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Usuario de la base de datos" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Contraseña de la base de datos" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nombre de la base de datos" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Espacio de tablas de la base de datos" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Host de la base de datos" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Completar la instalación" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "servicios web sobre los que tenés control" diff --git a/l10n/et_EE/core.po b/l10n/et_EE/core.po index 81a2ab9c72d..9c49d202768 100644 --- a/l10n/et_EE/core.po +++ b/l10n/et_EE/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" @@ -30,55 +30,55 @@ msgstr "Pole kategooriat, mida lisada?" msgid "This category already exists: " msgstr "See kategooria on juba olemas: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Seaded" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Jaanuar" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Veebruar" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Märts" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Aprill" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Mai" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Juuni" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Juuli" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "August" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "September" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Oktoober" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "November" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Detsember" @@ -106,8 +106,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Kustutamiseks pole kategooriat valitud." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Viga" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Parool" @@ -183,39 +183,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -239,12 +239,12 @@ msgstr "Kohustuslik" msgid "Login failed!" msgstr "Sisselogimine ebaõnnestus!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Kasutajanimi" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Päringu taastamine" @@ -300,52 +300,68 @@ msgstr "Muuda kategooriaid" msgid "Add" msgstr "Lisa" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Loo admini konto" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Lisavalikud" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Andmete kaust" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Seadista andmebaasi" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "kasutatakse" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Andmebaasi kasutaja" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Andmebaasi parool" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Andmebasi nimi" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Andmebaasi host" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Lõpeta seadistamine" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "veebiteenused sinu kontrolli all" @@ -357,11 +373,11 @@ msgstr "Logi välja" msgid "Lost your password?" msgstr "Kaotasid oma parooli?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "pea meeles" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Logi sisse" diff --git a/l10n/eu/core.po b/l10n/eu/core.po index 8eef5491204..aacda8aaef3 100644 --- a/l10n/eu/core.po +++ b/l10n/eu/core.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-04 02:04+0200\n" -"PO-Revision-Date: 2012-10-03 08:35+0000\n" -"Last-Translator: asieriko \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,55 +31,55 @@ msgstr "Ez dago gehitzeko kategoriarik?" msgid "This category already exists: " msgstr "Kategoria hau dagoeneko existitzen da:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Ezarpenak" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Urtarrila" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Otsaila" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Martxoa" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Apirila" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Maiatza" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Ekaina" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Uztaila" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Abuztua" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Iraila" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Urria" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Azaroa" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Abendua" @@ -107,8 +107,8 @@ msgstr "Ados" msgid "No categories selected for deletion." msgstr "Ez da ezabatzeko kategoriarik hautatu." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:494 -#: js/share.js:506 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Errorea" @@ -148,7 +148,7 @@ msgstr "Elkarbanatu lotura batekin" msgid "Password protect" msgstr "Babestu pasahitzarekin" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Pasahitza" @@ -208,15 +208,15 @@ msgstr "ezabatu" msgid "share" msgstr "elkarbanatu" -#: js/share.js:322 js/share.js:481 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Pasahitzarekin babestuta" -#: js/share.js:494 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Errorea izan da muga data kentzean" -#: js/share.js:506 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Errore bat egon da muga data ezartzean" @@ -240,7 +240,7 @@ msgstr "Eskatuta" msgid "Login failed!" msgstr "Saio hasierak huts egin du!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Erabiltzaile izena" @@ -301,52 +301,68 @@ msgstr "Editatu kategoriak" msgid "Add" msgstr "Gehitu" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Sortu kudeatzaile kontu bat" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Aurreratua" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Datuen karpeta" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Konfiguratu datu basea" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "erabiliko da" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Datubasearen erabiltzailea" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Datubasearen pasahitza" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Datubasearen izena" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Datu basearen taula-lekua" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Datubasearen hostalaria" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Bukatu konfigurazioa" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "web zerbitzuak zure kontrolpean" diff --git a/l10n/eu_ES/core.po b/l10n/eu_ES/core.po index 96133924d3e..5c711824ef1 100644 --- a/l10n/eu_ES/core.po +++ b/l10n/eu_ES/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n" "MIME-Version: 1.0\n" @@ -29,55 +29,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -105,8 +105,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -146,7 +146,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "" @@ -182,39 +182,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -238,12 +238,12 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "" @@ -299,52 +299,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -356,11 +372,11 @@ msgstr "" msgid "Lost your password?" msgstr "" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "" diff --git a/l10n/fa/core.po b/l10n/fa/core.po index 18c5c3f42c9..5b5725416a3 100644 --- a/l10n/fa/core.po +++ b/l10n/fa/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -30,55 +30,55 @@ msgstr "آیا گروه دیگری برای افزودن ندارید" msgid "This category already exists: " msgstr "این گروه از قبل اضافه شده" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "تنظیمات" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "ژانویه" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "فبریه" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "مارس" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "آوریل" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "می" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "ژوئن" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "جولای" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "آگوست" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "سپتامبر" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "اکتبر" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "نوامبر" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "دسامبر" @@ -106,8 +106,8 @@ msgstr "قبول" msgid "No categories selected for deletion." msgstr "هیج دسته ای برای پاک شدن انتخاب نشده است" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "خطا" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "گذرواژه" @@ -183,39 +183,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -239,12 +239,12 @@ msgstr "درخواست" msgid "Login failed!" msgstr "ورود ناموفق بود" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "شناسه" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "درخواست دوباره سازی" @@ -300,52 +300,68 @@ msgstr "ویرایش گروه ها" msgid "Add" msgstr "افزودن" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "لطفا یک شناسه برای مدیر بسازید" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "حرفه ای" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "پوشه اطلاعاتی" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "پایگاه داده برنامه ریزی شدند" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "استفاده خواهد شد" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "شناسه پایگاه داده" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "پسورد پایگاه داده" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "نام پایگاه داده" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "هاست پایگاه داده" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "اتمام نصب" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "سرویس وب تحت کنترل شما" @@ -357,11 +373,11 @@ msgstr "خروج" msgid "Lost your password?" msgstr "آیا گذرواژه تان را به یاد نمی آورید؟" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "بیاد آوری" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "ورود" diff --git a/l10n/fi/core.po b/l10n/fi/core.po index f44a41d09a2..3c0aadf84f6 100644 --- a/l10n/fi/core.po +++ b/l10n/fi/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n" "MIME-Version: 1.0\n" @@ -29,55 +29,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -105,8 +105,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -146,7 +146,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "" @@ -182,39 +182,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -238,12 +238,12 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "" @@ -299,52 +299,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -356,11 +372,11 @@ msgstr "" msgid "Lost your password?" msgstr "" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "" diff --git a/l10n/fi_FI/core.po b/l10n/fi_FI/core.po index 1d64256ea07..f44f056a9cc 100644 --- a/l10n/fi_FI/core.po +++ b/l10n/fi_FI/core.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-12 02:04+0200\n" -"PO-Revision-Date: 2012-10-11 18:01+0000\n" -"Last-Translator: variaatiox \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -36,55 +36,55 @@ msgstr "Ei lisättävää luokkaa?" msgid "This category already exists: " msgstr "Tämä luokka on jo olemassa: " -#: js/js.js:229 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Asetukset" -#: js/js.js:661 +#: js/js.js:670 msgid "January" msgstr "Tammikuu" -#: js/js.js:661 +#: js/js.js:670 msgid "February" msgstr "Helmikuu" -#: js/js.js:661 +#: js/js.js:670 msgid "March" msgstr "Maaliskuu" -#: js/js.js:661 +#: js/js.js:670 msgid "April" msgstr "Huhtikuu" -#: js/js.js:661 +#: js/js.js:670 msgid "May" msgstr "Toukokuu" -#: js/js.js:661 +#: js/js.js:670 msgid "June" msgstr "Kesäkuu" -#: js/js.js:662 +#: js/js.js:671 msgid "July" msgstr "Heinäkuu" -#: js/js.js:662 +#: js/js.js:671 msgid "August" msgstr "Elokuu" -#: js/js.js:662 +#: js/js.js:671 msgid "September" msgstr "Syyskuu" -#: js/js.js:662 +#: js/js.js:671 msgid "October" msgstr "Lokakuu" -#: js/js.js:662 +#: js/js.js:671 msgid "November" msgstr "Marraskuu" -#: js/js.js:662 +#: js/js.js:671 msgid "December" msgstr "Joulukuu" @@ -153,7 +153,7 @@ msgstr "Jaa linkillä" msgid "Password protect" msgstr "Suojaa salasanalla" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Salasana" @@ -245,7 +245,7 @@ msgstr "Tilattu" msgid "Login failed!" msgstr "Kirjautuminen epäonnistui!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Käyttäjätunnus" @@ -306,48 +306,64 @@ msgstr "Muokkaa luokkia" msgid "Add" msgstr "Lisää" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Luo ylläpitäjän tunnus" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Lisäasetukset" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Datakansio" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Muokkaa tietokantaa" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "käytetään" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Tietokannan käyttäjä" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Tietokannan salasana" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Tietokannan nimi" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Tietokannan taulukkotila" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Tietokantapalvelin" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Viimeistele asennus" diff --git a/l10n/fr/core.po b/l10n/fr/core.po index aec436ebe73..03013b660f8 100644 --- a/l10n/fr/core.po +++ b/l10n/fr/core.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-01 02:04+0200\n" -"PO-Revision-Date: 2012-09-30 15:52+0000\n" -"Last-Translator: Romain DEP. \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -36,55 +36,55 @@ msgstr "Pas de catégorie à ajouter ?" msgid "This category already exists: " msgstr "Cette catégorie existe déjà : " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Paramètres" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "janvier" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "février" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "mars" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "avril" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "mai" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "juin" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "juillet" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "août" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "septembre" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "octobre" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "novembre" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "décembre" @@ -112,8 +112,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Aucune catégorie sélectionnée pour suppression" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Erreur" @@ -153,7 +153,7 @@ msgstr "Partager via lien" msgid "Password protect" msgstr "Protéger par un mot de passe" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Mot de passe" @@ -189,39 +189,39 @@ msgstr "avec" msgid "Unshare" msgstr "Ne plus partager" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "édition autorisée" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "contrôle des accès" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "créer" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "mettre à jour" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "supprimer" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "partager" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Protégé par un mot de passe" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Un erreur est survenue pendant la suppression de la date d'expiration" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Erreur lors de la spécification de la date d'expiration" @@ -245,7 +245,7 @@ msgstr "Demande envoyée" msgid "Login failed!" msgstr "Nom d'utilisateur ou e-mail invalide" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Nom d'utilisateur" @@ -306,52 +306,68 @@ msgstr "Modifier les catégories" msgid "Add" msgstr "Ajouter" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Créer un compte administrateur" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avancé" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Répertoire des données" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configurer la base de données" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "sera utilisé" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Utilisateur pour la base de données" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Mot de passe de la base de données" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nom de la base de données" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Tablespaces de la base de données" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Serveur de la base de données" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Terminer l'installation" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "services web sous votre contrôle" diff --git a/l10n/gl/core.po b/l10n/gl/core.po index e1324b3c423..2e0bf2f9440 100644 --- a/l10n/gl/core.po +++ b/l10n/gl/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -31,55 +31,55 @@ msgstr "Sen categoría que engadir?" msgid "This category already exists: " msgstr "Esta categoría xa existe: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Preferencias" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Xaneiro" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Febreiro" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Marzo" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Abril" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Maio" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Xuño" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Xullo" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Agosto" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Setembro" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Outubro" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Novembro" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Nadal" @@ -107,8 +107,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Non hai categorías seleccionadas para eliminar." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Erro" @@ -148,7 +148,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Contrasinal" @@ -184,39 +184,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -240,12 +240,12 @@ msgstr "Solicitado" msgid "Login failed!" msgstr "Fallou a conexión." -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Nome de usuario" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Petición de restablecemento" @@ -301,52 +301,68 @@ msgstr "Editar categorias" msgid "Add" msgstr "Engadir" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Crear unha contra de administrador" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avanzado" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Cartafol de datos" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configurar a base de datos" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "será utilizado" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Usuario da base de datos" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Contrasinal da base de datos" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nome da base de datos" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Servidor da base de datos" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Rematar configuración" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "servizos web baixo o seu control" @@ -358,11 +374,11 @@ msgstr "Desconectar" msgid "Lost your password?" msgstr "Perdeu o contrasinal?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "lembrar" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Conectar" diff --git a/l10n/he/core.po b/l10n/he/core.po index 715be471e84..eb683e2fd22 100644 --- a/l10n/he/core.po +++ b/l10n/he/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -33,55 +33,55 @@ msgstr "אין קטגוריה להוספה?" msgid "This category already exists: " msgstr "קטגוריה זאת כבר קיימת: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "הגדרות" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "ינואר" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "פברואר" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "מרץ" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "אפריל" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "מאי" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "יוני" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "יולי" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "אוגוסט" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "ספטמבר" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "אוקטובר" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "נובמבר" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "דצמבר" @@ -109,8 +109,8 @@ msgstr "בסדר" msgid "No categories selected for deletion." msgstr "לא נבחרו קטגוריות למחיקה" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "שגיאה" @@ -150,7 +150,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "ססמה" @@ -186,39 +186,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -242,12 +242,12 @@ msgstr "נדרש" msgid "Login failed!" msgstr "הכניסה נכשלה!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "שם משתמש" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "בקשת איפוס" @@ -303,52 +303,68 @@ msgstr "עריכת הקטגוריות" msgid "Add" msgstr "הוספה" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "יצירת חשבון מנהל" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "מתקדם" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "תיקיית נתונים" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "הגדרת מסד הנתונים" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "ינוצלו" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "שם משתמש במסד הנתונים" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "ססמת מסד הנתונים" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "שם מסד הנתונים" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "מרחב הכתובות של מסד הנתונים" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "שרת בסיס נתונים" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "סיום התקנה" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "שירותי רשת בשליטתך" @@ -360,11 +376,11 @@ msgstr "התנתקות" msgid "Lost your password?" msgstr "שכחת את ססמתך?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "שמירת הססמה" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "כניסה" diff --git a/l10n/hi/core.po b/l10n/hi/core.po index b6cb8ef89be..de5a741a57d 100644 --- a/l10n/hi/core.po +++ b/l10n/hi/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -30,55 +30,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -106,8 +106,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "पासवर्ड" @@ -183,39 +183,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -239,12 +239,12 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "प्रयोक्ता का नाम" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "" @@ -300,52 +300,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "व्यवस्थापक खाता बनाएँ" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "उन्नत" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "डेटाबेस कॉन्फ़िगर करें " -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "डेटाबेस उपयोगकर्ता" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "डेटाबेस पासवर्ड" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "सेटअप समाप्त करे" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -357,11 +373,11 @@ msgstr "" msgid "Lost your password?" msgstr "" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "" diff --git a/l10n/hr/core.po b/l10n/hr/core.po index cc72990a914..1e6530210b2 100644 --- a/l10n/hr/core.po +++ b/l10n/hr/core.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-08 02:03+0200\n" -"PO-Revision-Date: 2012-10-07 15:56+0000\n" -"Last-Translator: fposavec \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,55 +33,55 @@ msgstr "Nemate kategorija koje možete dodati?" msgid "This category already exists: " msgstr "Ova kategorija već postoji: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Postavke" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Siječanj" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Veljača" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Ožujak" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Travanj" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Svibanj" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Lipanj" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Srpanj" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Kolovoz" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Rujan" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Listopad" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Studeni" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Prosinac" @@ -109,8 +109,8 @@ msgstr "U redu" msgid "No categories selected for deletion." msgstr "Nema odabranih kategorija za brisanje." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:494 -#: js/share.js:506 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Pogreška" @@ -150,7 +150,7 @@ msgstr "Djeli preko link-a" msgid "Password protect" msgstr "Zaštiti lozinkom" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Lozinka" @@ -210,15 +210,15 @@ msgstr "izbriši" msgid "share" msgstr "djeli" -#: js/share.js:322 js/share.js:481 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Zaštita lozinkom" -#: js/share.js:494 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Greška prilikom brisanja datuma isteka" -#: js/share.js:506 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Greška prilikom postavljanja datuma isteka" @@ -242,7 +242,7 @@ msgstr "Zahtijevano" msgid "Login failed!" msgstr "Prijava nije uspjela!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Korisničko ime" @@ -303,48 +303,64 @@ msgstr "Uredi kategorije" msgid "Add" msgstr "Dodaj" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Stvori administratorski račun" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Dodatno" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Mapa baze podataka" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Konfiguriraj bazu podataka" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "će se koristiti" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Korisnik baze podataka" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Lozinka baze podataka" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Ime baze podataka" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Database tablespace" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Poslužitelj baze podataka" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Završi postavljanje" diff --git a/l10n/hu_HU/core.po b/l10n/hu_HU/core.po index 0b0e753c080..1a43add411a 100644 --- a/l10n/hu_HU/core.po +++ b/l10n/hu_HU/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" @@ -32,55 +32,55 @@ msgstr "Nincs hozzáadandó kategória?" msgid "This category already exists: " msgstr "Ez a kategória már létezik" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Beállítások" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Január" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Február" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Március" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Április" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Május" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Június" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Július" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Augusztus" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Szeptember" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Október" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "November" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "December" @@ -108,8 +108,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Nincs törlésre jelölt kategória" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Hiba" @@ -149,7 +149,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Jelszó" @@ -185,39 +185,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -241,12 +241,12 @@ msgstr "Kérés elküldve" msgid "Login failed!" msgstr "Belépés sikertelen!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Felhasználónév" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Visszaállítás igénylése" @@ -302,52 +302,68 @@ msgstr "Kategóriák szerkesztése" msgid "Add" msgstr "Hozzáadás" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Rendszergazdafiók létrehozása" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Haladó" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Adatkönyvtár" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Adatbázis konfigurálása" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "használva lesz" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Adatbázis felhasználónév" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Adatbázis jelszó" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Adatbázis név" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Adatbázis szerver" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Beállítás befejezése" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "webszolgáltatások az irányításod alatt" @@ -359,11 +375,11 @@ msgstr "Kilépés" msgid "Lost your password?" msgstr "Elfelejtett jelszó?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "emlékezzen" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Bejelentkezés" diff --git a/l10n/hy/core.po b/l10n/hy/core.po index 7a03a8bcd29..7837ad8b5e6 100644 --- a/l10n/hy/core.po +++ b/l10n/hy/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n" "MIME-Version: 1.0\n" @@ -29,55 +29,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -105,8 +105,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -146,7 +146,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "" @@ -182,39 +182,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -238,12 +238,12 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "" @@ -299,52 +299,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -356,11 +372,11 @@ msgstr "" msgid "Lost your password?" msgstr "" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "" diff --git a/l10n/ia/core.po b/l10n/ia/core.po index 76ea29ba15c..5863372d9d7 100644 --- a/l10n/ia/core.po +++ b/l10n/ia/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -30,55 +30,55 @@ msgstr "" msgid "This category already exists: " msgstr "Iste categoria jam existe:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Configurationes" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -106,8 +106,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Contrasigno" @@ -183,39 +183,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -239,12 +239,12 @@ msgstr "Requestate" msgid "Login failed!" msgstr "Initio de session fallite!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Nomine de usator" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Requestar reinitialisation" @@ -300,52 +300,68 @@ msgstr "Modificar categorias" msgid "Add" msgstr "Adder" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Crear un conto de administration" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avantiate" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Dossier de datos" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configurar le base de datos" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "essera usate" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Usator de base de datos" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Contrasigno de base de datos" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nomine de base de datos" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Hospite de base de datos" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "servicios web sub tu controlo" @@ -357,11 +373,11 @@ msgstr "Clauder le session" msgid "Lost your password?" msgstr "Tu perdeva le contrasigno?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "memora" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Aperir session" diff --git a/l10n/id/core.po b/l10n/id/core.po index 1cd079372c4..b55ed5a2447 100644 --- a/l10n/id/core.po +++ b/l10n/id/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+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" @@ -32,55 +32,55 @@ msgstr "Tidak ada kategori yang akan ditambahkan?" msgid "This category already exists: " msgstr "Kategori ini sudah ada:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Setelan" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Januari" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Februari" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Maret" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "April" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Mei" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Juni" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Juli" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Agustus" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "September" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Oktober" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Nopember" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Desember" @@ -108,8 +108,8 @@ msgstr "Oke" msgid "No categories selected for deletion." msgstr "Tidak ada kategori terpilih untuk penghapusan." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -149,7 +149,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Password" @@ -185,39 +185,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -241,12 +241,12 @@ msgstr "Telah diminta" msgid "Login failed!" msgstr "Login gagal!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Username" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Meminta reset" @@ -302,52 +302,68 @@ msgstr "Edit kategori" msgid "Add" msgstr "Tambahkan" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Buat sebuah akun admin" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Tingkat Lanjut" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Folder data" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Konfigurasi database" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "akan digunakan" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Pengguna database" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Password database" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nama database" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Host database" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Selesaikan instalasi" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "web service dibawah kontrol anda" @@ -359,11 +375,11 @@ msgstr "Keluar" msgid "Lost your password?" msgstr "Lupa password anda?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "selalu login" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Masuk" diff --git a/l10n/id_ID/core.po b/l10n/id_ID/core.po index d0c351df95d..ed267ebbd64 100644 --- a/l10n/id_ID/core.po +++ b/l10n/id_ID/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n" "MIME-Version: 1.0\n" @@ -29,55 +29,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -105,8 +105,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -146,7 +146,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "" @@ -182,39 +182,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -238,12 +238,12 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "" @@ -299,52 +299,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -356,11 +372,11 @@ msgstr "" msgid "Lost your password?" msgstr "" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "" diff --git a/l10n/it/core.po b/l10n/it/core.po index 6127433b0fe..300d95c864f 100644 --- a/l10n/it/core.po +++ b/l10n/it/core.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-30 02:02+0200\n" -"PO-Revision-Date: 2012-09-29 05:31+0000\n" -"Last-Translator: Vincenzo Reale \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -34,55 +34,55 @@ msgstr "Nessuna categoria da aggiungere?" msgid "This category already exists: " msgstr "Questa categoria esiste già: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Impostazioni" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Gennaio" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Febbraio" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Marzo" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Aprile" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Maggio" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Giugno" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Luglio" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Agosto" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Settembre" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Ottobre" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Novembre" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Dicembre" @@ -110,8 +110,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Nessuna categoria selezionata per l'eliminazione." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Errore" @@ -151,7 +151,7 @@ msgstr "Condividi con collegamento" msgid "Password protect" msgstr "Proteggi con password" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Password" @@ -187,39 +187,39 @@ msgstr "con" msgid "Unshare" msgstr "Rimuovi condivisione" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "può modificare" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "controllo d'accesso" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "creare" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "aggiornare" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "eliminare" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "condividere" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Protetta da password" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Errore durante la rimozione della data di scadenza" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Errore durante l'impostazione della data di scadenza" @@ -243,7 +243,7 @@ msgstr "Richiesto" msgid "Login failed!" msgstr "Accesso non riuscito!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Nome utente" @@ -304,52 +304,68 @@ msgstr "Modifica le categorie" msgid "Add" msgstr "Aggiungi" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Crea un account amministratore" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avanzate" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Cartella dati" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configura il database" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "sarà utilizzato" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Utente del database" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Password del database" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nome del database" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Spazio delle tabelle del database" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Host del database" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Termina la configurazione" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "servizi web nelle tue mani" diff --git a/l10n/ja_JP/core.po b/l10n/ja_JP/core.po index 9ab3f59c8b3..d7bb736fa7d 100644 --- a/l10n/ja_JP/core.po +++ b/l10n/ja_JP/core.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-02 02:03+0200\n" -"PO-Revision-Date: 2012-10-01 08:51+0000\n" -"Last-Translator: Daisuke Deguchi \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,55 +31,55 @@ msgstr "追加するカテゴリはありませんか?" msgid "This category already exists: " msgstr "このカテゴリはすでに存在します: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "設定" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "1月" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "2月" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "3月" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "4月" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "5月" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "6月" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "7月" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "8月" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "9月" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "10月" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "11月" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "12月" @@ -107,8 +107,8 @@ msgstr "OK" msgid "No categories selected for deletion." msgstr "削除するカテゴリが選択されていません。" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:493 -#: js/share.js:505 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "エラー" @@ -148,7 +148,7 @@ msgstr "URLリンクで共有" msgid "Password protect" msgstr "パスワード保護" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "パスワード" @@ -208,15 +208,15 @@ msgstr "削除" msgid "share" msgstr "共有" -#: js/share.js:321 js/share.js:480 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "パスワード保護" -#: js/share.js:493 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "有効期限の未設定エラー" -#: js/share.js:505 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "有効期限の設定でエラー発生" @@ -240,7 +240,7 @@ msgstr "送信されました" msgid "Login failed!" msgstr "ログインに失敗しました!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "ユーザ名" @@ -301,52 +301,68 @@ msgstr "カテゴリを編集" msgid "Add" msgstr "追加" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "管理者アカウントを作成してください" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "詳細設定" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "データフォルダ" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "データベースを設定してください" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "が使用されます" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "データベースのユーザ名" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "データベースのパスワード" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "データベース名" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "データベースの表領域" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "データベースのホスト名" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "セットアップを完了します" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "管理下にあるウェブサービス" diff --git a/l10n/ko/core.po b/l10n/ko/core.po index abd9275c62e..98ff5bf9579 100644 --- a/l10n/ko/core.po +++ b/l10n/ko/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -31,55 +31,55 @@ msgstr "추가할 카테고리가 없습니까?" msgid "This category already exists: " msgstr "이 카테고리는 이미 존재합니다:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "설정" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "1월" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "2월" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "3월" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "4월" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "5월" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "6월" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "7월" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "8월" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "9월" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "10월" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "11월" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "12월" @@ -107,8 +107,8 @@ msgstr "승락" msgid "No categories selected for deletion." msgstr "삭제 카테고리를 선택하지 않았습니다." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "에러" @@ -148,7 +148,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "암호" @@ -184,39 +184,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -240,12 +240,12 @@ msgstr "요청함" msgid "Login failed!" msgstr "로그인 실패!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "사용자 이름" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "요청 초기화" @@ -301,52 +301,68 @@ msgstr "카테고리 편집" msgid "Add" msgstr "추가" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "관리자 계정을 만드십시오" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "고급" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "자료 폴더" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "데이터베이스 구성" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "사용 될 것임" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "데이터베이스 사용자" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "데이터베이스 암호" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "데이터베이스 이름" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "데이터베이스 호스트" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "설치 완료" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "내가 관리하는 웹 서비스" @@ -358,11 +374,11 @@ msgstr "로그아웃" msgid "Lost your password?" msgstr "암호를 잊으셨습니까?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "기억하기" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "로그인" diff --git a/l10n/ku_IQ/core.po b/l10n/ku_IQ/core.po index 01e916f1ebf..f4776ae7a8d 100644 --- a/l10n/ku_IQ/core.po +++ b/l10n/ku_IQ/core.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-11 02:04+0200\n" -"PO-Revision-Date: 2012-10-10 15:25+0000\n" -"Last-Translator: kurdboy \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,55 +30,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:229 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "ده‌ستكاری" -#: js/js.js:661 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:661 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:661 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:661 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:661 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:661 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:662 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:662 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:662 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:662 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:662 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:662 +#: js/js.js:671 msgid "December" msgstr "" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "وشەی تێپەربو" @@ -239,7 +239,7 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "" @@ -300,48 +300,64 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "هه‌ڵبژاردنی پیشكه‌وتوو" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "زانیاری فۆڵده‌ر" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "به‌كارهێنه‌ری داتابه‌یس" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "وشه‌ی نهێنی داتا به‌یس" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "ناوی داتابه‌یس" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "هۆستی داتابه‌یس" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "كۆتایی هات ده‌ستكاریه‌كان" diff --git a/l10n/lb/core.po b/l10n/lb/core.po index 80b7b61b14c..63634fa60be 100644 --- a/l10n/lb/core.po +++ b/l10n/lb/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -30,55 +30,55 @@ msgstr "Keng Kategorie fir bäizesetzen?" msgid "This category already exists: " msgstr "Des Kategorie existéiert schonn:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Astellungen" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Januar" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Februar" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Mäerz" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Abrëll" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Mee" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Juni" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Juli" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "August" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "September" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Oktober" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "November" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Dezember" @@ -106,8 +106,8 @@ msgstr "OK" msgid "No categories selected for deletion." msgstr "Keng Kategorien ausgewielt fir ze läschen." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Fehler" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Passwuert" @@ -183,39 +183,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -239,12 +239,12 @@ msgstr "Gefrot" msgid "Login failed!" msgstr "Falschen Login!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Benotzernumm" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Reset ufroen" @@ -300,52 +300,68 @@ msgstr "Kategorien editéieren" msgid "Add" msgstr "Bäisetzen" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "En Admin Account uleeën" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Advanced" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Daten Dossier" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Datebank konfiguréieren" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "wärt benotzt ginn" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Datebank Benotzer" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Datebank Passwuert" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Datebank Numm" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Datebank Tabelle-Gréisst" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Datebank Server" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Installatioun ofschléissen" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "Web Servicer ënnert denger Kontroll" @@ -357,11 +373,11 @@ msgstr "Ausloggen" msgid "Lost your password?" msgstr "Passwuert vergiess?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "verhalen" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Log dech an" diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po index 130c447211e..638e40bdbe9 100644 --- a/l10n/lt_LT/core.po +++ b/l10n/lt_LT/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -30,55 +30,55 @@ msgstr "Nepridėsite jokios kategorijos?" msgid "This category already exists: " msgstr "Tokia kategorija jau yra:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Nustatymai" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Sausis" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Vasaris" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Kovas" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Balandis" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Gegužė" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Birželis" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Liepa" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Rugpjūtis" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Rugsėjis" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Spalis" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Lapkritis" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Gruodis" @@ -106,8 +106,8 @@ msgstr "Gerai" msgid "No categories selected for deletion." msgstr "Trynimui nepasirinkta jokia kategorija." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Klaida" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Slaptažodis" @@ -183,39 +183,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -239,12 +239,12 @@ msgstr "Užklausta" msgid "Login failed!" msgstr "Prisijungti nepavyko!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Prisijungimo vardas" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Prašyti nustatymo iš najo" @@ -300,52 +300,68 @@ msgstr "Redaguoti kategorijas" msgid "Add" msgstr "Pridėti" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Sukurti administratoriaus paskyrą" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Išplėstiniai" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Duomenų katalogas" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Nustatyti duomenų bazę" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "bus naudojama" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Duomenų bazės vartotojas" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Duomenų bazės slaptažodis" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Duomenų bazės pavadinimas" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Duomenų bazės serveris" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Baigti diegimą" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "jūsų valdomos web paslaugos" @@ -357,11 +373,11 @@ msgstr "Atsijungti" msgid "Lost your password?" msgstr "Pamiršote slaptažodį?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "prisiminti" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Prisijungti" diff --git a/l10n/lv/core.po b/l10n/lv/core.po index a28f72fdd52..d1f63690f9b 100644 --- a/l10n/lv/core.po +++ b/l10n/lv/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" @@ -30,55 +30,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Iestatījumi" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -106,8 +106,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Parole" @@ -183,39 +183,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -239,12 +239,12 @@ msgstr "Obligāts" msgid "Login failed!" msgstr "Neizdevās ielogoties." -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Lietotājvārds" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Pieprasīt paroles maiņu" @@ -300,52 +300,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Datu mape" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Nokonfigurēt datubāzi" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "tiks izmantots" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Datubāzes lietotājs" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Datubāzes parole" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Datubāzes nosaukums" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Datubāzes mājvieta" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Pabeigt uzstādījumus" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -357,11 +373,11 @@ msgstr "Izlogoties" msgid "Lost your password?" msgstr "Aizmirsāt paroli?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "atcerēties" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Ielogoties" diff --git a/l10n/mk/core.po b/l10n/mk/core.po index 367a70fb295..327bd73fdff 100644 --- a/l10n/mk/core.po +++ b/l10n/mk/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -32,55 +32,55 @@ msgstr "Нема категорија да се додаде?" msgid "This category already exists: " msgstr "Оваа категорија веќе постои:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Поставки" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Јануари" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Февруари" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Март" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Април" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Мај" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Јуни" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Јули" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Август" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Септември" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Октомври" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Ноември" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Декември" @@ -108,8 +108,8 @@ msgstr "Во ред" msgid "No categories selected for deletion." msgstr "Не е одбрана категорија за бришење." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Грешка" @@ -149,7 +149,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Лозинка" @@ -185,39 +185,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -241,12 +241,12 @@ msgstr "Побарано" msgid "Login failed!" msgstr "Најавата не успеа!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Корисничко име" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Побарајте ресетирање" @@ -302,52 +302,68 @@ msgstr "Уреди категории" msgid "Add" msgstr "Додади" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Направете администраторска сметка" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Напредно" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Фолдер со податоци" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Конфигурирај ја базата" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "ќе биде користено" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Корисник на база" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Лозинка на база" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Име на база" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Сервер со база" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Заврши го подесувањето" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "веб сервиси под Ваша контрола" @@ -359,11 +375,11 @@ msgstr "Одјава" msgid "Lost your password?" msgstr "Ја заборавивте лозинката?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "запамти" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Најава" diff --git a/l10n/ms_MY/core.po b/l10n/ms_MY/core.po index 006132e2091..0d823cc7b4f 100644 --- a/l10n/ms_MY/core.po +++ b/l10n/ms_MY/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -32,55 +32,55 @@ msgstr "Tiada kategori untuk di tambah?" msgid "This category already exists: " msgstr "Kategori ini telah wujud" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Tetapan" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Januari" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Februari" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Mac" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "April" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Mei" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Jun" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Julai" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Ogos" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "September" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Oktober" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "November" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Disember" @@ -108,8 +108,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "tiada kategori dipilih untuk penghapusan" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Ralat" @@ -149,7 +149,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Kata laluan" @@ -185,39 +185,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -241,12 +241,12 @@ msgstr "Meminta" msgid "Login failed!" msgstr "Log masuk gagal!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Nama pengguna" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Permintaan set semula" @@ -302,52 +302,68 @@ msgstr "Edit kategori" msgid "Add" msgstr "Tambah" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "buat akaun admin" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Maju" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Fail data" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Konfigurasi pangkalan data" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "akan digunakan" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Nama pengguna pangkalan data" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Kata laluan pangkalan data" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nama pangkalan data" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Hos pangkalan data" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Setup selesai" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "Perkhidmatan web di bawah kawalan anda" @@ -359,11 +375,11 @@ msgstr "Log keluar" msgid "Lost your password?" msgstr "Hilang kata laluan?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "ingat" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Log masuk" diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po index 3a89a7bb4bc..c2c79c1e459 100644 --- a/l10n/nb_NO/core.po +++ b/l10n/nb_NO/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -34,55 +34,55 @@ msgstr "Ingen kategorier å legge til?" msgid "This category already exists: " msgstr "Denne kategorien finnes allerede:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Innstillinger" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Januar" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Februar" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Mars" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "April" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Mai" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Juni" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Juli" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "August" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "September" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Oktober" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "November" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Desember" @@ -110,8 +110,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Ingen kategorier merket for sletting." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Feil" @@ -151,7 +151,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Passord" @@ -187,39 +187,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -243,12 +243,12 @@ msgstr "Anmodning" msgid "Login failed!" msgstr "Innloggingen var ikke vellykket." -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Brukernavn" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Anmod tilbakestilling" @@ -304,52 +304,68 @@ msgstr "Rediger kategorier" msgid "Add" msgstr "Legg til" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "opprett en administrator-konto" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avansert" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Datamappe" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Konfigurer databasen" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "vil bli brukt" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Databasebruker" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Databasepassord" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Databasenavn" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Databasevert" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Fullfør oppsetting" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "nettjenester under din kontroll" @@ -361,11 +377,11 @@ msgstr "Logg ut" msgid "Lost your password?" msgstr "Mistet passordet ditt?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "husk" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Logg inn" diff --git a/l10n/nl/core.po b/l10n/nl/core.po index 1f7c606ba22..320ba85ff36 100644 --- a/l10n/nl/core.po +++ b/l10n/nl/core.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-13 02:04+0200\n" -"PO-Revision-Date: 2012-10-12 20:18+0000\n" -"Last-Translator: Richard Bos \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -154,7 +154,7 @@ msgstr "Deel met link" msgid "Password protect" msgstr "Passeerwoord beveiliging" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Wachtwoord" @@ -246,7 +246,7 @@ msgstr "Gevraagd" msgid "Login failed!" msgstr "Login mislukt!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Gebruikersnaam" @@ -307,48 +307,64 @@ msgstr "Wijzigen categorieën" msgid "Add" msgstr "Toevoegen" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Maak een beheerdersaccount aan" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Geavanceerd" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Gegevensmap" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configureer de databank" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "zal gebruikt worden" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Gebruiker databank" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Wachtwoord databank" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Naam databank" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Database tablespace" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Database server" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Installatie afronden" diff --git a/l10n/nn_NO/core.po b/l10n/nn_NO/core.po index d2c8eef0fb9..50d54f08e90 100644 --- a/l10n/nn_NO/core.po +++ b/l10n/nn_NO/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -31,55 +31,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Innstillingar" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -107,8 +107,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -148,7 +148,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Passord" @@ -184,39 +184,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -240,12 +240,12 @@ msgstr "Førespurt" msgid "Login failed!" msgstr "Feil ved innlogging!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Brukarnamn" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Be om nullstilling" @@ -301,52 +301,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Lag ein admin-konto" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avansert" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Datamappe" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Konfigurer databasen" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "vil bli nytta" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Databasebrukar" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Databasepassord" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Databasenamn" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Databasetenar" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Fullfør oppsettet" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "Vev tjenester under din kontroll" @@ -358,11 +374,11 @@ msgstr "Logg ut" msgid "Lost your password?" msgstr "Gløymt passordet?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "hugs" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Logg inn" diff --git a/l10n/oc/core.po b/l10n/oc/core.po index f2a698077ea..b8653a0809a 100644 --- a/l10n/oc/core.po +++ b/l10n/oc/core.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-29 02:02+0200\n" -"PO-Revision-Date: 2012-09-28 22:00+0000\n" -"Last-Translator: tartafione \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,55 +30,55 @@ msgstr "Pas de categoria d'ajustar ?" msgid "This category already exists: " msgstr "La categoria exista ja :" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Configuracion" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Genièr" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Febrièr" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Març" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Abril" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Mai" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Junh" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Julhet" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Agost" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Septembre" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Octobre" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Novembre" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Decembre" @@ -106,8 +106,8 @@ msgstr "D'accòrdi" msgid "No categories selected for deletion." msgstr "Pas de categorias seleccionadas per escafar." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Error" @@ -147,7 +147,7 @@ msgstr "Parteja amb lo ligam" msgid "Password protect" msgstr "Parat per senhal" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Senhal" @@ -183,39 +183,39 @@ msgstr "amb" msgid "Unshare" msgstr "Non parteje" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "pòt modificar" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "Contraròtle d'acces" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "crea" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "met a jorn" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "escafa" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "parteja" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Parat per senhal" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Error al metre de la data d'expiracion" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Error setting expiration date" @@ -239,12 +239,12 @@ msgstr "Requesit" msgid "Login failed!" msgstr "Fracàs de login" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Nom d'usancièr" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Tornar botar requesit" @@ -300,52 +300,68 @@ msgstr "Edita categorias" msgid "Add" msgstr "Ajusta" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Crea un compte admin" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avançat" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Dorsièr de donadas" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configura la basa de donadas" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "serà utilizat" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Usancièr de la basa de donadas" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Senhal de la basa de donadas" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nom de la basa de donadas" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Espandi de taula de basa de donadas" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Òste de basa de donadas" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Configuracion acabada" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "Services web jos ton contraròtle" @@ -357,11 +373,11 @@ msgstr "Sortida" msgid "Lost your password?" msgstr "L'as perdut lo senhal ?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "bremba-te" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Dintrada" diff --git a/l10n/pl/core.po b/l10n/pl/core.po index de4980565c0..f636d052421 100644 --- a/l10n/pl/core.po +++ b/l10n/pl/core.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-06 02:03+0200\n" -"PO-Revision-Date: 2012-10-05 21:17+0000\n" -"Last-Translator: Cyryl Sochacki \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -37,55 +37,55 @@ msgstr "Brak kategorii" msgid "This category already exists: " msgstr "Ta kategoria już istnieje" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Ustawienia" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Styczeń" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Luty" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Marzec" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Kwiecień" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Maj" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Czerwiec" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Lipiec" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Sierpień" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Wrzesień" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Październik" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Listopad" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Grudzień" @@ -113,8 +113,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Nie ma kategorii zaznaczonych do usunięcia." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:494 -#: js/share.js:506 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Błąd" @@ -154,7 +154,7 @@ msgstr "Współdziel z link" msgid "Password protect" msgstr "Zabezpieczone hasłem" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Hasło" @@ -214,15 +214,15 @@ msgstr "usuń" msgid "share" msgstr "współdziel" -#: js/share.js:322 js/share.js:481 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Zabezpieczone hasłem" -#: js/share.js:494 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Błąd niszczenie daty wygaśnięcia" -#: js/share.js:506 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Błąd podczas ustawiania daty wygaśnięcia" @@ -246,7 +246,7 @@ msgstr "Żądane" msgid "Login failed!" msgstr "Nie udało się zalogować!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Nazwa użytkownika" @@ -307,48 +307,64 @@ msgstr "Edytuj kategorię" msgid "Add" msgstr "Dodaj" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Tworzenie konta administratora" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Zaawansowane" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Katalog danych" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Konfiguracja bazy danych" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "zostanie użyte" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Użytkownik bazy danych" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Hasło do bazy danych" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nazwa bazy danych" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Obszar tabel bazy danych" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Komputer bazy danych" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Zakończ konfigurowanie" diff --git a/l10n/pl_PL/core.po b/l10n/pl_PL/core.po index 4b3dc86393d..a4e184f4e41 100644 --- a/l10n/pl_PL/core.po +++ b/l10n/pl_PL/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -29,55 +29,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -105,8 +105,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -146,7 +146,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "" @@ -182,39 +182,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -238,12 +238,12 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "" @@ -299,52 +299,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -356,11 +372,11 @@ msgstr "" msgid "Lost your password?" msgstr "" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "" diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po index 1089f64ba69..1f1d243ea0f 100644 --- a/l10n/pt_BR/core.po +++ b/l10n/pt_BR/core.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-07 02:03+0200\n" -"PO-Revision-Date: 2012-10-06 13:45+0000\n" -"Last-Translator: sedir \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -35,55 +35,55 @@ msgstr "Nenhuma categoria adicionada?" msgid "This category already exists: " msgstr "Essa categoria já existe" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Configurações" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Janeiro" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Fevereiro" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Março" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Abril" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Maio" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Junho" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Julho" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Agosto" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Setembro" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Outubro" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Novembro" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Dezembro" @@ -111,8 +111,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Nenhuma categoria selecionada para deletar." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:494 -#: js/share.js:506 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Erro" @@ -152,7 +152,7 @@ msgstr "Compartilhar com link" msgid "Password protect" msgstr "Proteger com senha" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Senha" @@ -212,15 +212,15 @@ msgstr "remover" msgid "share" msgstr "compartilhar" -#: js/share.js:322 js/share.js:481 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Protegido com senha" -#: js/share.js:494 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Erro ao remover data de expiração" -#: js/share.js:506 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Erro ao definir data de expiração" @@ -244,7 +244,7 @@ msgstr "Solicitado" msgid "Login failed!" msgstr "Falha ao fazer o login!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Nome de Usuário" @@ -305,48 +305,64 @@ msgstr "Editar categorias" msgid "Add" msgstr "Adicionar" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Criar uma conta de administrador" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avançado" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Pasta de dados" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configurar o banco de dados" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "será usado" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Usuário de banco de dados" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Senha do banco de dados" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nome do banco de dados" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Espaço de tabela do banco de dados" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Banco de dados do host" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Concluir configuração" diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po index c49019a3863..a5287196930 100644 --- a/l10n/pt_PT/core.po +++ b/l10n/pt_PT/core.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-12 02:04+0200\n" -"PO-Revision-Date: 2012-10-11 10:31+0000\n" -"Last-Translator: Duarte Velez Grilo \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,55 +33,55 @@ msgstr "Nenhuma categoria para adicionar?" msgid "This category already exists: " msgstr "Esta categoria já existe:" -#: js/js.js:229 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Definições" -#: js/js.js:661 +#: js/js.js:670 msgid "January" msgstr "Janeiro" -#: js/js.js:661 +#: js/js.js:670 msgid "February" msgstr "Fevereiro" -#: js/js.js:661 +#: js/js.js:670 msgid "March" msgstr "Março" -#: js/js.js:661 +#: js/js.js:670 msgid "April" msgstr "Abril" -#: js/js.js:661 +#: js/js.js:670 msgid "May" msgstr "Maio" -#: js/js.js:661 +#: js/js.js:670 msgid "June" msgstr "Junho" -#: js/js.js:662 +#: js/js.js:671 msgid "July" msgstr "Julho" -#: js/js.js:662 +#: js/js.js:671 msgid "August" msgstr "Agosto" -#: js/js.js:662 +#: js/js.js:671 msgid "September" msgstr "Setembro" -#: js/js.js:662 +#: js/js.js:671 msgid "October" msgstr "Outubro" -#: js/js.js:662 +#: js/js.js:671 msgid "November" msgstr "Novembro" -#: js/js.js:662 +#: js/js.js:671 msgid "December" msgstr "Dezembro" @@ -150,7 +150,7 @@ msgstr "Partilhar com link" msgid "Password protect" msgstr "Proteger com palavra-passe" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Palavra chave" @@ -242,7 +242,7 @@ msgstr "Pedido" msgid "Login failed!" msgstr "Conexão falhado!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Utilizador" @@ -303,48 +303,64 @@ msgstr "Editar categorias" msgid "Add" msgstr "Adicionar" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Criar uma conta administrativa" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avançado" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Pasta de dados" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configure a base de dados" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "vai ser usada" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Utilizador da base de dados" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Password da base de dados" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Nome da base de dados" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Tablespace da base de dados" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Host da base de dados" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Acabar instalação" diff --git a/l10n/pt_PT/user_ldap.po b/l10n/pt_PT/user_ldap.po index f9ac903822d..86440d7324f 100644 --- a/l10n/pt_PT/user_ldap.po +++ b/l10n/pt_PT/user_ldap.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-11 02:04+0200\n" -"PO-Revision-Date: 2012-10-10 21:26+0000\n" -"Last-Translator: Helder Meneses \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-14 01:19+0000\n" +"Last-Translator: Duarte Velez Grilo \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,11 +26,11 @@ msgstr "Anfitrião" #: templates/settings.php:8 msgid "" "You can omit the protocol, except you require SSL. Then start with ldaps://" -msgstr "" +msgstr "Pode omitir o protocolo, excepto se necessitar de SSL. Neste caso, comece com ldaps://" #: templates/settings.php:9 msgid "Base DN" -msgstr "" +msgstr "DN base" #: templates/settings.php:9 msgid "You can specify Base DN for users and groups in the Advanced tab" @@ -38,7 +38,7 @@ msgstr "Pode especificar o ND Base para utilizadores e grupos no separador Avan #: templates/settings.php:10 msgid "User DN" -msgstr "" +msgstr "DN do utilizador" #: templates/settings.php:10 msgid "" @@ -53,7 +53,7 @@ msgstr "Palavra-passe" #: templates/settings.php:11 msgid "For anonymous access, leave DN and Password empty." -msgstr "" +msgstr "Para acesso anónimo, deixe DN e a Palavra-passe vazios." #: templates/settings.php:12 msgid "User Login Filter" @@ -113,11 +113,11 @@ msgstr "" #: templates/settings.php:21 msgid "Use TLS" -msgstr "" +msgstr "Usar TLS" #: templates/settings.php:21 msgid "Do not use it for SSL connections, it will fail." -msgstr "" +msgstr "Não use para ligações SSL, irá falhar." #: templates/settings.php:22 msgid "Case insensitve LDAP server (Windows)" @@ -125,7 +125,7 @@ msgstr "" #: templates/settings.php:23 msgid "Turn off SSL certificate validation." -msgstr "" +msgstr "Desligar a validação de certificado SSL." #: templates/settings.php:23 msgid "" @@ -165,7 +165,7 @@ msgstr "em segundos. Uma alteração esvazia a cache." msgid "" "Leave empty for user name (default). Otherwise, specify an LDAP/AD " "attribute." -msgstr "" +msgstr "Deixe vazio para nome de utilizador (padrão). De outro modo, especifique um atributo LDAP/AD." #: templates/settings.php:32 msgid "Help" diff --git a/l10n/ro/core.po b/l10n/ro/core.po index 48c69f2447b..8858cc6e71e 100644 --- a/l10n/ro/core.po +++ b/l10n/ro/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -33,55 +33,55 @@ msgstr "Nici o categorie de adăugat?" msgid "This category already exists: " msgstr "Această categorie deja există:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Configurări" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Ianuarie" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Februarie" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Martie" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Aprilie" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Mai" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Iunie" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Iulie" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "August" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Septembrie" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Octombrie" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Noiembrie" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Decembrie" @@ -109,8 +109,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Nici o categorie selectată pentru ștergere." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Eroare" @@ -150,7 +150,7 @@ msgstr "Partajare cu legătură" msgid "Password protect" msgstr "Protejare cu parolă" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Parola" @@ -186,39 +186,39 @@ msgstr "" msgid "Unshare" msgstr "Anulare partajare" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "poate edita" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "control acces" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "creare" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "actualizare" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "ștergere" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "partajare" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Protejare cu parolă" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Eroare la anularea datei de expirare" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Eroare la specificarea datei de expirare" @@ -242,12 +242,12 @@ msgstr "Solicitat" msgid "Login failed!" msgstr "Autentificare eșuată" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Utilizator" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Cerere trimisă" @@ -303,52 +303,68 @@ msgstr "Editează categoriile" msgid "Add" msgstr "Adaugă" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Crează un cont de administrator" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avansat" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Director date" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Configurează baza de date" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "vor fi folosite" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Utilizatorul bazei de date" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Parola bazei de date" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Numele bazei de date" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Tabela de spațiu a bazei de date" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Bază date" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Finalizează instalarea" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "servicii web controlate de tine" @@ -360,11 +376,11 @@ msgstr "Ieșire" msgid "Lost your password?" msgstr "Ai uitat parola?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "amintește" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Autentificare" diff --git a/l10n/ru/core.po b/l10n/ru/core.po index b76cabfb0f1..c8b1165123f 100644 --- a/l10n/ru/core.po +++ b/l10n/ru/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" @@ -34,55 +34,55 @@ msgstr "Нет категорий для добавления?" msgid "This category already exists: " msgstr "Эта категория уже существует: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Настройки" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Январь" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Февраль" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Март" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Апрель" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Май" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Июнь" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Июль" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Август" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Сентябрь" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Октябрь" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Ноябрь" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Декабрь" @@ -110,8 +110,8 @@ msgstr "Ок" msgid "No categories selected for deletion." msgstr "Нет категорий для удаления." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Ошибка" @@ -151,7 +151,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Пароль" @@ -187,39 +187,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -243,12 +243,12 @@ msgstr "Запрошено" msgid "Login failed!" msgstr "Не удалось войти!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Имя пользователя" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Запросить сброс" @@ -304,52 +304,68 @@ msgstr "Редактировать категории" msgid "Add" msgstr "Добавить" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Создать учётную запись администратора" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Дополнительно" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Директория с данными" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Настройка базы данных" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "будет использовано" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Имя пользователя для базы данных" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Пароль для базы данных" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Название базы данных" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Табличое пространство базы данных" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Хост базы данных" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Завершить установку" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "Сетевые службы под твоим контролем" @@ -361,11 +377,11 @@ msgstr "Выйти" msgid "Lost your password?" msgstr "Забыли пароль?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "запомнить" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Войти" diff --git a/l10n/ru_RU/core.po b/l10n/ru_RU/core.po index 32fa4465b3a..6a9c71caa37 100644 --- a/l10n/ru_RU/core.po +++ b/l10n/ru_RU/core.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-12 02:04+0200\n" -"PO-Revision-Date: 2012-10-11 08:47+0000\n" -"Last-Translator: AnnaSch \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,55 +30,55 @@ msgstr "Нет категории для добавления?" msgid "This category already exists: " msgstr "Эта категория уже существует:" -#: js/js.js:229 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Настройки" -#: js/js.js:661 +#: js/js.js:670 msgid "January" msgstr "Январь" -#: js/js.js:661 +#: js/js.js:670 msgid "February" msgstr "Февраль" -#: js/js.js:661 +#: js/js.js:670 msgid "March" msgstr "Март" -#: js/js.js:661 +#: js/js.js:670 msgid "April" msgstr "Апрель" -#: js/js.js:661 +#: js/js.js:670 msgid "May" msgstr "Май" -#: js/js.js:661 +#: js/js.js:670 msgid "June" msgstr "Июнь" -#: js/js.js:662 +#: js/js.js:671 msgid "July" msgstr "Июль" -#: js/js.js:662 +#: js/js.js:671 msgid "August" msgstr "Август" -#: js/js.js:662 +#: js/js.js:671 msgid "September" msgstr "Сентябрь" -#: js/js.js:662 +#: js/js.js:671 msgid "October" msgstr "Октябрь" -#: js/js.js:662 +#: js/js.js:671 msgid "November" msgstr "Ноябрь" -#: js/js.js:662 +#: js/js.js:671 msgid "December" msgstr "Декабрь" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "Защитить паролем" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Пароль" @@ -239,7 +239,7 @@ msgstr "Запрашиваемое" msgid "Login failed!" msgstr "Войти не удалось!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Имя пользователя" @@ -300,48 +300,64 @@ msgstr "Редактирование категорий" msgid "Add" msgstr "Добавить" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Создать admin account" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Расширенный" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Папка данных" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Настроить базу данных" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "будет использоваться" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Пользователь базы данных" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Пароль базы данных" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Имя базы данных" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Табличная область базы данных" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Сервер базы данных" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Завершение настройки" diff --git a/l10n/sk_SK/core.po b/l10n/sk_SK/core.po index 719062c7870..8566a8adc55 100644 --- a/l10n/sk_SK/core.po +++ b/l10n/sk_SK/core.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-10 02:04+0200\n" -"PO-Revision-Date: 2012-10-09 18:37+0000\n" -"Last-Translator: martinb \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -32,55 +32,55 @@ msgstr "Žiadna kategória pre pridanie?" msgid "This category already exists: " msgstr "Táto kategória už existuje:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Nastavenia" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Január" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Február" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Marec" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Apríl" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Máj" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Jún" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Júl" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "August" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "September" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Október" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "November" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "December" @@ -149,7 +149,7 @@ msgstr "Zdieľať cez odkaz" msgid "Password protect" msgstr "Chrániť heslom" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Heslo" @@ -241,7 +241,7 @@ msgstr "Požiadané" msgid "Login failed!" msgstr "Prihlásenie zlyhalo!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Prihlasovacie meno" @@ -302,48 +302,64 @@ msgstr "Úprava kategórií" msgid "Add" msgstr "Pridať" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Vytvoriť administrátorský účet" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Pokročilé" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Priečinok dát" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Nastaviť databázu" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "bude použité" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Hostiteľ databázy" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Heslo databázy" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Meno databázy" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Server databázy" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Dokončiť inštaláciu" diff --git a/l10n/sl/core.po b/l10n/sl/core.po index 278ba738e13..2ea6a606772 100644 --- a/l10n/sl/core.po +++ b/l10n/sl/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -32,55 +32,55 @@ msgstr "Ni kategorije za dodajanje?" msgid "This category already exists: " msgstr "Ta kategorija že obstaja:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Nastavitve" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "januar" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "februar" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "marec" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "april" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "maj" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "junij" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "julij" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "avgust" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "september" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "oktober" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "november" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "december" @@ -108,8 +108,8 @@ msgstr "V redu" msgid "No categories selected for deletion." msgstr "Za izbris ni bila izbrana nobena kategorija." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Napaka" @@ -149,7 +149,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Geslo" @@ -185,39 +185,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Zaščiteno z geslom" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -241,12 +241,12 @@ msgstr "Zahtevano" msgid "Login failed!" msgstr "Prijava je spodletela!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Uporabniško Ime" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Zahtevaj ponastavitev" @@ -302,52 +302,68 @@ msgstr "Uredi kategorije" msgid "Add" msgstr "Dodaj" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Ustvari skrbniški račun" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Napredne možnosti" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Mapa s podatki" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Nastavi podatkovno zbirko" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "bo uporabljen" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Uporabnik zbirke" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Geslo podatkovne zbirke" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Ime podatkovne zbirke" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Razpredelnica podatkovne zbirke" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Gostitelj podatkovne zbirke" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Dokončaj namestitev" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "spletne storitve pod vašim nadzorom" @@ -359,11 +375,11 @@ msgstr "Odjava" msgid "Lost your password?" msgstr "Ste pozabili vaše geslo?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "Zapomni si me" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Prijava" diff --git a/l10n/so/core.po b/l10n/so/core.po index 399a26593ac..c7734f3d3b0 100644 --- a/l10n/so/core.po +++ b/l10n/so/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n" "MIME-Version: 1.0\n" @@ -29,55 +29,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -105,8 +105,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -146,7 +146,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "" @@ -182,39 +182,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -238,12 +238,12 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "" @@ -299,52 +299,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -356,11 +372,11 @@ msgstr "" msgid "Lost your password?" msgstr "" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "" diff --git a/l10n/sr/core.po b/l10n/sr/core.po index eaeee371618..8ae8078ba49 100644 --- a/l10n/sr/core.po +++ b/l10n/sr/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -30,55 +30,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Подешавања" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -106,8 +106,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Лозинка" @@ -183,39 +183,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -239,12 +239,12 @@ msgstr "Захтевано" msgid "Login failed!" msgstr "Несупела пријава!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Корисничко име" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Захтевај ресетовање" @@ -300,52 +300,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Направи административни налог" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Напредно" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Фацикла података" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Подешавање базе" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "ће бити коришћен" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Корисник базе" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Лозинка базе" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Име базе" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Домаћин базе" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Заврши подешавање" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "веб сервиси под контролом" @@ -357,11 +373,11 @@ msgstr "Одјава" msgid "Lost your password?" msgstr "Изгубили сте лозинку?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "упамти" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Пријава" diff --git a/l10n/sr@latin/core.po b/l10n/sr@latin/core.po index cd06b0f3b2c..35fc115d821 100644 --- a/l10n/sr@latin/core.po +++ b/l10n/sr@latin/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -30,55 +30,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Podešavanja" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "" @@ -106,8 +106,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Lozinka" @@ -183,39 +183,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -239,12 +239,12 @@ msgstr "Zahtevano" msgid "Login failed!" msgstr "Nesupela prijava!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Korisničko ime" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Zahtevaj resetovanje" @@ -300,52 +300,68 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Napravi administrativni nalog" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Napredno" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Facikla podataka" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Podešavanje baze" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "će biti korišćen" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Korisnik baze" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Lozinka baze" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Ime baze" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Domaćin baze" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Završi podešavanje" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "" @@ -357,11 +373,11 @@ msgstr "Odjava" msgid "Lost your password?" msgstr "Izgubili ste lozinku?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "upamti" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "" diff --git a/l10n/sv/core.po b/l10n/sv/core.po index 1eaf985129e..a2e4aea4a25 100644 --- a/l10n/sv/core.po +++ b/l10n/sv/core.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-30 02:02+0200\n" -"PO-Revision-Date: 2012-09-29 11:11+0000\n" -"Last-Translator: Magnus Höglund \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -35,55 +35,55 @@ msgstr "Ingen kategori att lägga till?" msgid "This category already exists: " msgstr "Denna kategori finns redan:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Inställningar" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Januari" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Februari" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Mars" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "April" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Maj" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Juni" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Juli" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Augusti" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "September" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Oktober" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "November" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "December" @@ -111,8 +111,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Inga kategorier valda för radering." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Fel" @@ -152,7 +152,7 @@ msgstr "Delad med länk" msgid "Password protect" msgstr "Lösenordsskydda" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Lösenord" @@ -188,39 +188,39 @@ msgstr "med" msgid "Unshare" msgstr "Sluta dela" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "kan redigera" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "åtkomstkontroll" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "skapa" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "uppdatera" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "radera" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "dela" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "Lösenordsskyddad" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "Fel vid borttagning av utgångsdatum" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "Fel vid sättning av utgångsdatum" @@ -244,7 +244,7 @@ msgstr "Begärd" msgid "Login failed!" msgstr "Misslyckad inloggning!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Användarnamn" @@ -305,52 +305,68 @@ msgstr "Redigera kategorier" msgid "Add" msgstr "Lägg till" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Skapa ett administratörskonto" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Avancerat" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Datamapp" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Konfigurera databasen" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "kommer att användas" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Databasanvändare" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Lösenord till databasen" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Databasnamn" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Databas tabellutrymme" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Databasserver" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Avsluta installation" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "webbtjänster under din kontroll" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 915a405f313..b12bec9a772 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -146,7 +146,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "" @@ -238,7 +238,7 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "" @@ -299,48 +299,64 @@ msgstr "" msgid "Add" msgstr "" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 79c6cf29e4a..e3f198351b3 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index e88c79bac94..81653fc4976 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index c777afa0266..943b147cf7b 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 873b3ed51e7..9349caaa325 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 28461827040..9d6c5cde279 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 9d30d57aac4..831124a8aa5 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index b96487ae7b8..6c422f4427c 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index 8d5838f0b4e..5c27df10ae1 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-14 02:05+0200\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/th_TH/core.po b/l10n/th_TH/core.po index b9f67f922d2..724c62ae757 100644 --- a/l10n/th_TH/core.po +++ b/l10n/th_TH/core.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-01 02:04+0200\n" -"PO-Revision-Date: 2012-09-30 07:07+0000\n" -"Last-Translator: AriesAnywhere Anywhere \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,55 +31,55 @@ msgstr "ไม่มีหมวดหมู่ที่ต้องการเ msgid "This category already exists: " msgstr "หมวดหมู่นี้มีอยู่แล้ว: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "ตั้งค่า" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "มกราคม" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "กุมภาพันธ์" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "มีนาคม" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "เมษายน" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "พฤษภาคม" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "มิถุนายน" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "กรกฏาคม" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "สิงหาคม" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "กันยายน" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "ตุลาคม" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "พฤศจิกายน" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "ธันวาคม" @@ -107,8 +107,8 @@ msgstr "ตกลง" msgid "No categories selected for deletion." msgstr "ยังไม่ได้เลือกหมวดหมู่ที่ต้องการลบ" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "พบข้อผิดพลาด" @@ -148,7 +148,7 @@ msgstr "แชร์ด้วยลิงก์" msgid "Password protect" msgstr "ใส่รหัสผ่านไว้" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "รหัสผ่าน" @@ -184,39 +184,39 @@ msgstr "ด้วย" msgid "Unshare" msgstr "ยกเลิกการแชร์" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "สามารถแก้ไข" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "ระดับควบคุมการเข้าใช้งาน" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "สร้าง" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "อัพเดท" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "ลบ" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "แชร์" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "ใส่รหัสผ่านไว้" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "เกิดข้อผิดพลาดในการยกเลิกการตั้งค่าวันที่หมดอายุ" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "เกิดข้อผิดพลาดในการตั้งค่าวันที่หมดอายุ" @@ -240,7 +240,7 @@ msgstr "ส่งคำร้องเรียบร้อยแล้ว" msgid "Login failed!" msgstr "ไม่สามารถเข้าสู่ระบบได้!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "ชื่อผู้ใช้งาน" @@ -301,52 +301,68 @@ msgstr "แก้ไขหมวดหมู่" msgid "Add" msgstr "เพิ่ม" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "สร้าง บัญชีผู้ดูแลระบบ" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "ขั้นสูง" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "โฟลเดอร์เก็บข้อมูล" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "กำหนดค่าฐานข้อมูล" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "จะถูกใช้" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "ชื่อผู้ใช้งานฐานข้อมูล" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "รหัสผ่านฐานข้อมูล" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "ชื่อฐานข้อมูล" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "พื้นที่ตารางในฐานข้อมูล" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Database host" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "ติดตั้งเรียบร้อยแล้ว" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "web services under your control" diff --git a/l10n/tr/core.po b/l10n/tr/core.po index 0fdd0fc3b34..e9b8c396854 100644 --- a/l10n/tr/core.po +++ b/l10n/tr/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -32,55 +32,55 @@ msgstr "Eklenecek kategori yok?" msgid "This category already exists: " msgstr "Bu kategori zaten mevcut: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Ayarlar" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Ocak" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Şubat" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Mart" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Nisan" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Mayıs" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Haziran" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Temmuz" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Ağustos" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Eylül" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Ekim" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Kasım" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Aralık" @@ -108,8 +108,8 @@ msgstr "Tamam" msgid "No categories selected for deletion." msgstr "Silmek için bir kategori seçilmedi" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Hata" @@ -149,7 +149,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Parola" @@ -185,39 +185,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -241,12 +241,12 @@ msgstr "İstendi" msgid "Login failed!" msgstr "Giriş başarısız!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Kullanıcı adı" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Sıfırlama iste" @@ -302,52 +302,68 @@ msgstr "Kategorileri düzenle" msgid "Add" msgstr "Ekle" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Bir yönetici hesabı oluşturun" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Gelişmiş" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Veri klasörü" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Veritabanını ayarla" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "kullanılacak" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Veritabanı kullanıcı adı" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Veritabanı parolası" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Veritabanı adı" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "Veritabanı tablo alanı" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Veritabanı sunucusu" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Kurulumu tamamla" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "kontrolünüzdeki web servisleri" @@ -359,11 +375,11 @@ msgstr "Çıkış yap" msgid "Lost your password?" msgstr "Parolanızı mı unuttunuz?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "hatırla" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Giriş yap" diff --git a/l10n/uk/core.po b/l10n/uk/core.po index 47f5aeb7430..5fd0d8dfb12 100644 --- a/l10n/uk/core.po +++ b/l10n/uk/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" @@ -32,55 +32,55 @@ msgstr "" msgid "This category already exists: " msgstr "" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Налаштування" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Січень" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Лютий" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Березень" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Квітень" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Травень" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Червень" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Липень" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Серпень" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Вересень" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Жовтень" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Листопад" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Грудень" @@ -108,8 +108,8 @@ msgstr "" msgid "No categories selected for deletion." msgstr "" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Помилка" @@ -149,7 +149,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Пароль" @@ -185,39 +185,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -241,12 +241,12 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Ім'я користувача" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "" @@ -302,52 +302,68 @@ msgstr "" msgid "Add" msgstr "Додати" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Налаштування бази даних" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "буде використано" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Користувач бази даних" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Пароль для бази даних" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Назва бази даних" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Завершити налаштування" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "веб-сервіс під вашим контролем" @@ -359,11 +375,11 @@ msgstr "Вихід" msgid "Lost your password?" msgstr "Забули пароль?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "запам'ятати" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Вхід" diff --git a/l10n/vi/core.po b/l10n/vi/core.po index a5861cdf0f7..132f026b98c 100644 --- a/l10n/vi/core.po +++ b/l10n/vi/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" @@ -30,55 +30,55 @@ msgstr "Không có danh mục được thêm?" msgid "This category already exists: " msgstr "Danh mục này đã được tạo :" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "Cài đặt" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "Tháng 1" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "Tháng 2" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "Tháng 3" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "Tháng 4" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "Tháng 5" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "Tháng 6" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "Tháng 7" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "Tháng 8" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "Tháng 9" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "Tháng 10" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "Tháng 11" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "Tháng 12" @@ -106,8 +106,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "Không có thể loại nào được chọn để xóa." -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "Lỗi" @@ -147,7 +147,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "Mật khẩu" @@ -183,39 +183,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -239,12 +239,12 @@ msgstr "Yêu cầu" msgid "Login failed!" msgstr "Bạn đã nhập sai mật khẩu hay tên người dùng !" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "Tên người dùng" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "Yêu cầu thiết lập lại " @@ -300,52 +300,68 @@ msgstr "Sửa thể loại" msgid "Add" msgstr "Thêm" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "Tạo một tài khoản quản trị" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "Nâng cao" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "Thư mục dữ liệu" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "Cấu hình Cơ Sở Dữ Liệu" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "được sử dụng" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "Người dùng cơ sở dữ liệu" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "Mật khẩu cơ sở dữ liệu" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "Tên cơ sở dữ liệu" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "Database host" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "Cài đặt hoàn tất" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "các dịch vụ web dưới sự kiểm soát của bạn" @@ -357,11 +373,11 @@ msgstr "Đăng xuất" msgid "Lost your password?" msgstr "Bạn quên mật khẩu ?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "Nhớ" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "Đăng nhập" diff --git a/l10n/zh_CN.GB2312/core.po b/l10n/zh_CN.GB2312/core.po index 892575be9dd..68632f16902 100644 --- a/l10n/zh_CN.GB2312/core.po +++ b/l10n/zh_CN.GB2312/core.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-12 02:04+0200\n" -"PO-Revision-Date: 2012-10-11 23:45+0000\n" -"Last-Translator: marguerite su \n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,55 +31,55 @@ msgstr "没有分类添加了?" msgid "This category already exists: " msgstr "这个分类已经存在了:" -#: js/js.js:229 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "设置" -#: js/js.js:661 +#: js/js.js:670 msgid "January" msgstr "一月" -#: js/js.js:661 +#: js/js.js:670 msgid "February" msgstr "二月" -#: js/js.js:661 +#: js/js.js:670 msgid "March" msgstr "三月" -#: js/js.js:661 +#: js/js.js:670 msgid "April" msgstr "四月" -#: js/js.js:661 +#: js/js.js:670 msgid "May" msgstr "五月" -#: js/js.js:661 +#: js/js.js:670 msgid "June" msgstr "六月" -#: js/js.js:662 +#: js/js.js:671 msgid "July" msgstr "七月" -#: js/js.js:662 +#: js/js.js:671 msgid "August" msgstr "八月" -#: js/js.js:662 +#: js/js.js:671 msgid "September" msgstr "九月" -#: js/js.js:662 +#: js/js.js:671 msgid "October" msgstr "十月" -#: js/js.js:662 +#: js/js.js:671 msgid "November" msgstr "十一月" -#: js/js.js:662 +#: js/js.js:671 msgid "December" msgstr "十二月" @@ -148,7 +148,7 @@ msgstr "分享链接" msgid "Password protect" msgstr "密码保护" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "密码" @@ -240,7 +240,7 @@ msgstr "请求" msgid "Login failed!" msgstr "登陆失败!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "用户名" @@ -301,48 +301,64 @@ msgstr "编辑分类" msgid "Add" msgstr "添加" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "建立一个 管理帐户" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "进阶" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "数据存放文件夹" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "配置数据库" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "将会使用" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "数据库用户" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "数据库密码" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "数据库用户名" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "数据库表格空间" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "数据库主机" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "完成安装" diff --git a/l10n/zh_CN/core.po b/l10n/zh_CN/core.po index 2c707704182..1802288e32a 100644 --- a/l10n/zh_CN/core.po +++ b/l10n/zh_CN/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -33,55 +33,55 @@ msgstr "没有可添加分类?" msgid "This category already exists: " msgstr "此分类已存在: " -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "设置" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "一月" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "二月" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "三月" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "四月" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "五月" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "六月" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "七月" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "八月" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "九月" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "十月" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "十一月" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "十二月" @@ -109,8 +109,8 @@ msgstr "好" msgid "No categories selected for deletion." msgstr "没有选择要删除的类别" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "错误" @@ -150,7 +150,7 @@ msgstr "共享链接" msgid "Password protect" msgstr "密码保护" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "密码" @@ -186,39 +186,39 @@ msgstr "" msgid "Unshare" msgstr "取消共享" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "可以修改" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "访问控制" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "创建" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "更新" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "删除" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "共享" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "密码已受保护" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "取消设置过期日期时出错" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "设置过期日期时出错" @@ -242,12 +242,12 @@ msgstr "已请求" msgid "Login failed!" msgstr "登录失败!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "用户名" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "请求重置" @@ -303,52 +303,68 @@ msgstr "编辑分类" msgid "Add" msgstr "添加" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "创建管理员账号" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "高级" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "数据目录" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "配置数据库" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "将被使用" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "数据库用户" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "数据库密码" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "数据库名" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "数据库表空间" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "数据库主机" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "安装完成" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "由您掌控的网络服务" @@ -360,11 +376,11 @@ msgstr "注销" msgid "Lost your password?" msgstr "忘记密码?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "记住" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "登录" diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po index 97fc8c8bf66..73eab0d57cb 100644 --- a/l10n/zh_TW/core.po +++ b/l10n/zh_TW/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-28 23:34+0200\n" -"PO-Revision-Date: 2012-09-28 21:34+0000\n" +"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -31,55 +31,55 @@ msgstr "無分類添加?" msgid "This category already exists: " msgstr "此分類已經存在:" -#: js/js.js:213 templates/layout.user.php:49 templates/layout.user.php:50 +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 msgid "Settings" msgstr "設定" -#: js/js.js:645 +#: js/js.js:670 msgid "January" msgstr "一月" -#: js/js.js:645 +#: js/js.js:670 msgid "February" msgstr "二月" -#: js/js.js:645 +#: js/js.js:670 msgid "March" msgstr "三月" -#: js/js.js:645 +#: js/js.js:670 msgid "April" msgstr "四月" -#: js/js.js:645 +#: js/js.js:670 msgid "May" msgstr "五月" -#: js/js.js:645 +#: js/js.js:670 msgid "June" msgstr "六月" -#: js/js.js:646 +#: js/js.js:671 msgid "July" msgstr "七月" -#: js/js.js:646 +#: js/js.js:671 msgid "August" msgstr "八月" -#: js/js.js:646 +#: js/js.js:671 msgid "September" msgstr "九月" -#: js/js.js:646 +#: js/js.js:671 msgid "October" msgstr "十月" -#: js/js.js:646 +#: js/js.js:671 msgid "November" msgstr "十一月" -#: js/js.js:646 +#: js/js.js:671 msgid "December" msgstr "十二月" @@ -107,8 +107,8 @@ msgstr "Ok" msgid "No categories selected for deletion." msgstr "沒選擇要刪除的分類" -#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:489 -#: js/share.js:501 +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 msgid "Error" msgstr "錯誤" @@ -148,7 +148,7 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:30 templates/login.php:13 +#: js/share.js:147 templates/installation.php:36 templates/login.php:13 msgid "Password" msgstr "密碼" @@ -184,39 +184,39 @@ msgstr "" msgid "Unshare" msgstr "" -#: js/share.js:279 +#: js/share.js:283 msgid "can edit" msgstr "" -#: js/share.js:281 +#: js/share.js:285 msgid "access control" msgstr "" -#: js/share.js:284 +#: js/share.js:288 msgid "create" msgstr "" -#: js/share.js:287 +#: js/share.js:291 msgid "update" msgstr "" -#: js/share.js:290 +#: js/share.js:294 msgid "delete" msgstr "" -#: js/share.js:293 +#: js/share.js:297 msgid "share" msgstr "" -#: js/share.js:317 js/share.js:476 +#: js/share.js:322 js/share.js:484 msgid "Password protected" msgstr "" -#: js/share.js:489 +#: js/share.js:497 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:501 +#: js/share.js:509 msgid "Error setting expiration date" msgstr "" @@ -240,12 +240,12 @@ msgstr "已要求" msgid "Login failed!" msgstr "登入失敗!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:26 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 #: templates/login.php:9 msgid "Username" msgstr "使用者名稱" -#: lostpassword/templates/lostpassword.php:15 +#: lostpassword/templates/lostpassword.php:14 msgid "Request reset" msgstr "要求重設" @@ -301,52 +301,68 @@ msgstr "編輯分類" msgid "Add" msgstr "添加" +#: templates/installation.php:23 +msgid "Security Warning" +msgstr "" + #: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:30 msgid "Create an admin account" msgstr "建立一個管理者帳號" -#: templates/installation.php:36 +#: templates/installation.php:42 msgid "Advanced" msgstr "進階" -#: templates/installation.php:38 +#: templates/installation.php:44 msgid "Data folder" msgstr "資料夾" -#: templates/installation.php:45 +#: templates/installation.php:51 msgid "Configure the database" msgstr "設定資料庫" -#: templates/installation.php:50 templates/installation.php:61 -#: templates/installation.php:71 templates/installation.php:81 +#: templates/installation.php:56 templates/installation.php:67 +#: templates/installation.php:77 templates/installation.php:87 msgid "will be used" msgstr "將會使用" -#: templates/installation.php:93 +#: templates/installation.php:99 msgid "Database user" msgstr "資料庫使用者" -#: templates/installation.php:97 +#: templates/installation.php:103 msgid "Database password" msgstr "資料庫密碼" -#: templates/installation.php:101 +#: templates/installation.php:107 msgid "Database name" msgstr "資料庫名稱" -#: templates/installation.php:109 +#: templates/installation.php:115 msgid "Database tablespace" msgstr "資料庫 tablespace" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database host" msgstr "資料庫主機" -#: templates/installation.php:120 +#: templates/installation.php:126 msgid "Finish setup" msgstr "完成設定" -#: templates/layout.guest.php:36 +#: templates/layout.guest.php:38 msgid "web services under your control" msgstr "網路服務已在你控制" @@ -358,11 +374,11 @@ msgstr "登出" msgid "Lost your password?" msgstr "忘記密碼?" -#: templates/login.php:17 +#: templates/login.php:16 msgid "remember" msgstr "記住" -#: templates/login.php:18 +#: templates/login.php:17 msgid "Log in" msgstr "登入" -- GitLab From f08ff3b6e64d3ca5db3862cf18eacb3b9197feae Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 15:25:40 +0300 Subject: [PATCH 066/576] Correct formatting --- lib/util.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/util.php b/lib/util.php index 315e33e96e2..9a3bf162062 100755 --- a/lib/util.php +++ b/lib/util.php @@ -557,7 +557,7 @@ class OC_Util { } } - /* + /** * @brief Generates a cryptographical secure pseudorandom string * @param Int with the length of the random string * @return String @@ -593,7 +593,7 @@ class OC_Util { return $pseudo_byte; } - /* + /** * @brief Checks if a secure random number generator is available * @return bool */ -- GitLab From 0b42d702590208ab687ba953f6b0516f6bd48975 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 16:08:39 +0300 Subject: [PATCH 067/576] Unneeded double check --- settings/ajax/changepassword.php | 1 - 1 file changed, 1 deletion(-) diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php index b251fea504b..b3ebbe6e456 100644 --- a/settings/ajax/changepassword.php +++ b/settings/ajax/changepassword.php @@ -2,7 +2,6 @@ // Init owncloud require_once '../../lib/base.php'; -OCP\JSON::callCheck(); $username = isset($_POST["username"]) ? $_POST["username"] : OC_User::getUser(); $password = $_POST["password"]; -- GitLab From 800fd5fd798567d899b1559ca3e91dc15212d027 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Mon, 15 Oct 2012 17:16:47 +0200 Subject: [PATCH 068/576] LDAP: check if index is set, fix Notices --- apps/user_ldap/lib/access.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index 66007d09536..a500e1bf5b4 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -339,7 +339,8 @@ abstract class Access { $ownCloudNames = array(); foreach($ldapObjects as $ldapObject) { - $ocname = $this->dn2ocname($ldapObject['dn'], $ldapObject[$nameAttribute], $isUsers); + $nameByLDAP = isset($ldapObject[$nameAttribute]) ? $ldapObject[$nameAttribute] : null; + $ocname = $this->dn2ocname($ldapObject['dn'], $nameByLDAP, $isUsers); if($ocname) { $ownCloudNames[] = $ocname; } -- GitLab From d33bec09fe1da810f0a7f60d9b6a61e513ce0b2f Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 16:14:24 +0200 Subject: [PATCH 069/576] Verify password page for users --- core/templates/verify.php | 18 ++++++++++++++++++ lib/util.php | 19 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 core/templates/verify.php diff --git a/core/templates/verify.php b/core/templates/verify.php new file mode 100644 index 00000000000..7be0d69ed00 --- /dev/null +++ b/core/templates/verify.php @@ -0,0 +1,18 @@ + +

    +
      +
    • + t('Security Warning!'); ?>
      + t("Please verify your password.
      For security reasons you may be occasionally asked to enter your password again. "); ?>
      +
    • +
    +

    + +

    +

    + + +

    + +
    + diff --git a/lib/util.php b/lib/util.php index 9a3bf162062..b92f97b0375 100755 --- a/lib/util.php +++ b/lib/util.php @@ -361,6 +361,7 @@ class OC_Util { public static function checkAdminUser() { // Check if we are a user self::checkLoggedIn(); + self::verifyUser(); if( !OC_Group::inGroup( OC_User::getUser(), 'admin' )) { header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php' )); exit(); @@ -374,6 +375,7 @@ class OC_Util { public static function checkSubAdminUser() { // Check if we are a user self::checkLoggedIn(); + self::verifyUser(); if(OC_Group::inGroup(OC_User::getUser(),'admin')) { return true; } @@ -384,6 +386,23 @@ class OC_Util { return true; } + /** + * Check if the user verified the login with his password in the last 15 minutes + * If not, the user will be shown a password verification page + */ + public static function verifyUser() { + // Check password to set session + if (OC_User::login(OC_User::getUser(), $_POST["password"] ) === true) { + $_SESSION['verifiedLogin']=time() + (15 * 60); + } + + // Check if the user verified his password in the last 15 minutes + if($_SESSION['verifiedLogin'] < time() OR !isset($_SESSION['verifiedLogin'])) { + OC_Template::printGuestPage("", "verify", array('username' => OC_User::getUser())); + exit(); + } + } + /** * Redirect to the user default page */ -- GitLab From 4d7b0e9bb3d39d40af2bab9dc891226f7fbb591d Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 16:26:34 +0200 Subject: [PATCH 070/576] verifyUser() for the json part --- lib/json.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/json.php b/lib/json.php index 518c3c87c49..89509710745 100644 --- a/lib/json.php +++ b/lib/json.php @@ -58,7 +58,7 @@ class OC_JSON{ */ public static function checkAdminUser() { self::checkLoggedIn(); - if( !OC_Group::inGroup( OC_User::getUser(), 'admin' )) { + if( !OC_Group::inGroup( OC_User::getUser(), 'admin' ) || self::verifyUser() === false) { $l = OC_L10N::get('lib'); self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); exit(); @@ -70,13 +70,25 @@ class OC_JSON{ */ public static function checkSubAdminUser() { self::checkLoggedIn(); - if(!OC_Group::inGroup(OC_User::getUser(),'admin') && !OC_SubAdmin::isSubAdmin(OC_User::getUser())) { + if(!OC_Group::inGroup(OC_User::getUser(),'admin') && !OC_SubAdmin::isSubAdmin(OC_User::getUser()) || self::verifyUser() === false) { $l = OC_L10N::get('lib'); self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); exit(); } } + /** + * Check if the user verified the login with his password in the last 15 minutes + * @return bool + */ + public static function verifyUser() { + // Check if the user verified his password in the last 15 minutes + if($_SESSION['verifiedLogin'] < time() OR !isset($_SESSION['verifiedLogin'])) { + return false; + } + return true; + } + /** * Send json error msg */ -- GitLab From 842d6dad47f90730bcc0ac04b36891dfe119eb2a Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 16:27:15 +0200 Subject: [PATCH 071/576] Remove space --- core/templates/verify.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/templates/verify.php b/core/templates/verify.php index 7be0d69ed00..600eaca05b7 100644 --- a/core/templates/verify.php +++ b/core/templates/verify.php @@ -3,7 +3,7 @@
    • t('Security Warning!'); ?>
      - t("Please verify your password.
      For security reasons you may be occasionally asked to enter your password again. "); ?>
      + t("Please verify your password.
      For security reasons you may be occasionally asked to enter your password again."); ?>

    -- GitLab From 1c865f702c948dcc41b9a69f22d8a3e9e31b8f6b Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 16:30:53 +0200 Subject: [PATCH 072/576] Change verifyUser so that external json files can call it --- lib/json.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/json.php b/lib/json.php index 89509710745..c362c66693b 100644 --- a/lib/json.php +++ b/lib/json.php @@ -58,7 +58,8 @@ class OC_JSON{ */ public static function checkAdminUser() { self::checkLoggedIn(); - if( !OC_Group::inGroup( OC_User::getUser(), 'admin' ) || self::verifyUser() === false) { + self::verifyUser(); + if( !OC_Group::inGroup( OC_User::getUser(), 'admin' )) { $l = OC_L10N::get('lib'); self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); exit(); @@ -70,7 +71,8 @@ class OC_JSON{ */ public static function checkSubAdminUser() { self::checkLoggedIn(); - if(!OC_Group::inGroup(OC_User::getUser(),'admin') && !OC_SubAdmin::isSubAdmin(OC_User::getUser()) || self::verifyUser() === false) { + self::verifyUser(); + if(!OC_Group::inGroup(OC_User::getUser(),'admin') && !OC_SubAdmin::isSubAdmin(OC_User::getUser())) { $l = OC_L10N::get('lib'); self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); exit(); @@ -84,9 +86,9 @@ class OC_JSON{ public static function verifyUser() { // Check if the user verified his password in the last 15 minutes if($_SESSION['verifiedLogin'] < time() OR !isset($_SESSION['verifiedLogin'])) { - return false; + self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); + exit(); } - return true; } /** -- GitLab From 6e045b9ea1f3435da3456d333a57753069b6bc8c Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 16:40:47 +0200 Subject: [PATCH 073/576] Check if $_Post --- lib/util.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/util.php b/lib/util.php index b92f97b0375..7af28c920f0 100755 --- a/lib/util.php +++ b/lib/util.php @@ -392,8 +392,10 @@ class OC_Util { */ public static function verifyUser() { // Check password to set session - if (OC_User::login(OC_User::getUser(), $_POST["password"] ) === true) { - $_SESSION['verifiedLogin']=time() + (15 * 60); + if(isset($_POST['password'])) { + if (OC_User::login(OC_User::getUser(), $_POST["password"] ) === true) { + $_SESSION['verifiedLogin']=time() + (15 * 60); + } } // Check if the user verified his password in the last 15 minutes -- GitLab From 6b39b80648ea022cfb5839d1ac415912cafaa417 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 16:41:42 +0200 Subject: [PATCH 074/576] Change auth checks --- settings/ajax/changepassword.php | 9 +++++---- settings/ajax/creategroup.php | 9 +-------- settings/ajax/createuser.php | 8 +------- settings/personal.php | 1 + settings/settings.php | 1 + 5 files changed, 9 insertions(+), 19 deletions(-) diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php index b3ebbe6e456..5eab751b04e 100644 --- a/settings/ajax/changepassword.php +++ b/settings/ajax/changepassword.php @@ -3,14 +3,15 @@ // Init owncloud require_once '../../lib/base.php'; +// Check if we are a user +OCP\JSON::callCheck(); +OC_JSON::checkLoggedIn(); +OC_JSON::verifyUser(); + $username = isset($_POST["username"]) ? $_POST["username"] : OC_User::getUser(); $password = $_POST["password"]; $oldPassword=isset($_POST["oldpassword"])?$_POST["oldpassword"]:''; -// Check if we are a user -OC_JSON::checkLoggedIn(); -OCP\JSON::callCheck(); - $userstatus = null; if(OC_Group::inGroup(OC_User::getUser(), 'admin')) { $userstatus = 'admin'; diff --git a/settings/ajax/creategroup.php b/settings/ajax/creategroup.php index 83733ac4d2d..431b449a811 100644 --- a/settings/ajax/creategroup.php +++ b/settings/ajax/creategroup.php @@ -3,14 +3,7 @@ // Init owncloud require_once '../../lib/base.php'; OCP\JSON::callCheck(); - -// Check if we are a user -if( !OC_User::isLoggedIn() || !OC_Group::inGroup( OC_User::getUser(), 'admin' )) { - OC_JSON::error(array("data" => array( "message" => $l->t("Authentication error") ))); - exit(); -} - -OCP\JSON::callCheck(); +OC_JSON::checkAdminUser(); $groupname = $_POST["groupname"]; diff --git a/settings/ajax/createuser.php b/settings/ajax/createuser.php index bdf7e4983ac..b3e5c23de54 100644 --- a/settings/ajax/createuser.php +++ b/settings/ajax/createuser.php @@ -3,13 +3,7 @@ // Init owncloud require_once '../../lib/base.php'; OCP\JSON::callCheck(); - -// Check if we are a user -if( !OC_User::isLoggedIn() || (!OC_Group::inGroup( OC_User::getUser(), 'admin' ) && !OC_SubAdmin::isSubAdmin(OC_User::getUser()))) { - OC_JSON::error(array("data" => array( "message" => "Authentication error" ))); - exit(); -} -OCP\JSON::callCheck(); +OC_JSON::checkSubAdminUser(); $isadmin = OC_Group::inGroup(OC_User::getUser(), 'admin')?true:false; diff --git a/settings/personal.php b/settings/personal.php index 2031edd8df8..3348b3290f4 100644 --- a/settings/personal.php +++ b/settings/personal.php @@ -7,6 +7,7 @@ require_once '../lib/base.php'; OC_Util::checkLoggedIn(); +OC_Util::verifyUser(); // Highlight navigation entry OC_Util::addScript( 'settings', 'personal' ); diff --git a/settings/settings.php b/settings/settings.php index 24099ef5742..68c07ff60f0 100644 --- a/settings/settings.php +++ b/settings/settings.php @@ -7,6 +7,7 @@ require_once '../lib/base.php'; OC_Util::checkLoggedIn(); +OC_Util::verifyUser(); OC_Util::addStyle( 'settings', 'settings' ); OC_App::setActiveNavigationEntry( 'settings' ); -- GitLab From e6b8153865a521a4750ec44016c5f22f453edfe1 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 16:50:41 +0200 Subject: [PATCH 075/576] Remove old password check from changepassword and use verifyUser instead --- settings/ajax/changepassword.php | 3 +-- settings/templates/personal.php | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php index 5eab751b04e..5d94497ce58 100644 --- a/settings/ajax/changepassword.php +++ b/settings/ajax/changepassword.php @@ -10,7 +10,6 @@ OC_JSON::verifyUser(); $username = isset($_POST["username"]) ? $_POST["username"] : OC_User::getUser(); $password = $_POST["password"]; -$oldPassword=isset($_POST["oldpassword"])?$_POST["oldpassword"]:''; $userstatus = null; if(OC_Group::inGroup(OC_User::getUser(), 'admin')) { @@ -19,7 +18,7 @@ if(OC_Group::inGroup(OC_User::getUser(), 'admin')) { if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) { $userstatus = 'subadmin'; } -if(OC_User::getUser() == $username && OC_User::checkPassword($username, $oldPassword)) { +if(OC_User::getUser() == $username) { $userstatus = 'user'; } diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 55ff24b4223..0683bd3b64f 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -18,9 +18,8 @@

    t('Your password was changed');?>
    t('Unable to change your password');?>
    - - - + +
    -- GitLab From 9aa9110fd906bc9191adbb129bf421ede77ccad7 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 16:53:38 +0200 Subject: [PATCH 076/576] Verify user login before changing the password reset mail --- settings/ajax/lostpassword.php | 1 + 1 file changed, 1 insertion(+) diff --git a/settings/ajax/lostpassword.php b/settings/ajax/lostpassword.php index 2a40ba09a8a..af1a35fda4a 100644 --- a/settings/ajax/lostpassword.php +++ b/settings/ajax/lostpassword.php @@ -4,6 +4,7 @@ require_once '../../lib/base.php'; OC_JSON::checkLoggedIn(); OCP\JSON::callCheck(); +OC_JSON::verifyUser(); $l=OC_L10N::get('core'); -- GitLab From 5708488b3e3a2e8c60ac6fe32724f36428c2abff Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Mon, 15 Oct 2012 18:11:22 +0200 Subject: [PATCH 077/576] make files_versions use OC_User::getHome, fixes 'PHP Warning: Missing argument 1 for OC_FilesystemView::getAbsolutePath' with custom user home dirs --- apps/files_versions/lib/versions.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index 076094ae781..1b3de84f31a 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -58,8 +58,9 @@ class Storage { public function store($filename) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { list($uid, $filename) = self::getUidAndFilename($filename); - $files_view = new \OC_FilesystemView('/'.$uid.'/files'); - $users_view = new \OC_FilesystemView('/'.$uid); + $userHome = \OC_User::getHome($uid); + $files_view = new \OC_FilesystemView($userHome.'/files'); + $users_view = new \OC_FilesystemView($userHome); //check if source file already exist as version to avoid recursions. // todo does this check work? @@ -94,7 +95,7 @@ class Storage { // check mininterval if the file is being modified by the owner (all shared files should be versioned despite mininterval) if ($uid == \OCP\User::getUser()) { - $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions'); + $versions_fileview = new \OC_FilesystemView($userHome.'/files_versions'); $versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath(''); $matches=glob($versionsFolderName.'/'.$filename.'.v*'); sort($matches); @@ -127,7 +128,7 @@ class Storage { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { list($uid, $filename) = self::getUidAndFilename($filename); - $users_view = new \OC_FilesystemView('/'.$uid); + $users_view = new \OC_FilesystemView(\OC_User::getHome($uid)); // rollback if( @$users_view->copy('files_versions'.$filename.'.v'.$revision, 'files'.$filename) ) { @@ -150,7 +151,7 @@ class Storage { public static function isversioned($filename) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { list($uid, $filename) = self::getUidAndFilename($filename); - $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions'); + $versions_fileview = new \OC_FilesystemView(\OC_User::getHome($uid).'/files_versions'); $versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath(''); @@ -178,7 +179,7 @@ class Storage { if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) { list($uid, $filename) = self::getUidAndFilename($filename); - $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions'); + $versions_fileview = new \OC_FilesystemView(\OC_User::getHome($uid).'/files_versions'); $versionsFolderName = \OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath(''); $versions = array(); @@ -190,7 +191,7 @@ class Storage { $i = 0; - $files_view = new \OC_FilesystemView('/'.$uid.'/files'); + $files_view = new \OC_FilesystemView(\OC_User::getHome($uid).'/files'); $local_file = $files_view->getLocalFile($filename); foreach( $matches as $ma ) { -- GitLab From 24ad6b5a62244bb107cf915e75e9f8d8866497ec Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Mon, 15 Oct 2012 18:46:42 +0200 Subject: [PATCH 078/576] LDAP: fix retrieval of Quota and Email --- apps/user_ldap/user_ldap.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 53a65129108..e104c8d1764 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -29,11 +29,13 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { private function updateQuota($dn) { $quota = null; - if(!empty($this->connection->ldapQuotaDefault)) { - $quota = $this->connection->ldapQuotaDefault; + $quotaDefault = $this->connection->ldapQuotaDefault; + $quotaAttribute = $this->connection->ldapQuotaAttribute; + if(!empty($quotaDefault)) { + $quota = $quotaDefault; } - if(!empty($this->connection->ldapQuotaAttribute)) { - $aQuota = $this->readAttribute($dn, $this->connection->ldapQuotaAttribute); + if(!empty($quotaAttribute)) { + $aQuota = $this->readAttribute($dn, $quotaAttribute); if($aQuota && (count($aQuota) > 0)) { $quota = $aQuota[0]; @@ -46,8 +48,9 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { private function updateEmail($dn) { $email = null; - if(!empty($this->connection->ldapEmailAttribute)) { - $aEmail = $this->readAttribute($dn, $this->connection->ldapEmailAttribute); + $emailAttribute = $this->connection->ldapEmailAttribute; + if(!empty($emailAttribute)) { + $aEmail = $this->readAttribute($dn, $emailAttribute); if($aEmail && (count($aEmail) > 0)) { $email = $aEmail[0]; } -- GitLab From fa71e51e679b7a25de7ff8af31119721b6f13d3c Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 19:21:37 +0200 Subject: [PATCH 079/576] Use /dev/urandom instead of /dev/random The usage of /dev/urandom is enough secure --- lib/util.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/util.php b/lib/util.php index 7af28c920f0..c6b164adbe8 100755 --- a/lib/util.php +++ b/lib/util.php @@ -594,8 +594,8 @@ class OC_Util { } } - // Try to use /dev/random - $fp = @file_get_contents('/dev/random', false, null, 0, $length); + // Try to use /dev/urandom + $fp = @file_get_contents('/dev/urandom', false, null, 0, $length); if ($fp !== FALSE) { $string = substr(bin2hex($fp), 0, $length); return $string; @@ -628,8 +628,8 @@ class OC_Util { } } - // Check /dev/random - $fp = @file_get_contents('/dev/random', false, null, 0, 1); + // Check /dev/urandom + $fp = @file_get_contents('/dev/urandom', false, null, 0, 1); if ($fp !== FALSE) { return true; } -- GitLab From 8be9c04a3a6f84c8673e0b6db3305cf0f427a43b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Mon, 15 Oct 2012 20:00:33 +0200 Subject: [PATCH 080/576] 128byte is not 128bit - now we realy use 256bit (same as PHPSESSID) --- db_structure.xml | 2 +- lib/base.php | 4 ++-- lib/util.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/db_structure.xml b/db_structure.xml index a17ab90b8a1..99a30cb6137 100644 --- a/db_structure.xml +++ b/db_structure.xml @@ -395,7 +395,7 @@ text true - 128 + 64 diff --git a/lib/base.php b/lib/base.php index 0ba028a68d2..c9dcac3cbb9 100644 --- a/lib/base.php +++ b/lib/base.php @@ -566,7 +566,7 @@ class OC{ if (in_array($_COOKIE['oc_token'], $tokens, true)) { // replace successfully used token with a new one OC_Preferences::deleteKey($_COOKIE['oc_username'], 'login_token', $_COOKIE['oc_token']); - $token = OC_Util::generate_random_bytes(128); + $token = OC_Util::generate_random_bytes(32); OC_Preferences::setValue($_COOKIE['oc_username'], 'login_token', $token, time()); OC_User::setMagicInCookie($_COOKIE['oc_username'], $token); // login @@ -600,7 +600,7 @@ class OC{ if(defined("DEBUG") && DEBUG) { OC_Log::write('core', 'Setting remember login to cookie', OC_Log::DEBUG); } - $token = OC_Util::generate_random_bytes(128); + $token = OC_Util::generate_random_bytes(32); OC_Preferences::setValue($_POST['user'], 'login_token', $token, time()); OC_User::setMagicInCookie($_POST["user"], $token); } diff --git a/lib/util.php b/lib/util.php index 707100a9bcc..68c4920258f 100755 --- a/lib/util.php +++ b/lib/util.php @@ -83,7 +83,7 @@ class OC_Util { */ public static function getVersion() { // hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user - return array(4,91,01); + return array(4,91,00); } /** -- GitLab From d7a45474824bdfe1b34cbb35c01e46f5217aeb06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6hler?= Date: Mon, 15 Oct 2012 20:37:52 +0200 Subject: [PATCH 081/576] avoid undefined index warning on login page --- core/templates/login.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/templates/login.php b/core/templates/login.php index a3a62b97958..0768b664c6f 100644 --- a/core/templates/login.php +++ b/core/templates/login.php @@ -3,14 +3,14 @@
    '; } ?>
      - +
    • t('Automatic logon rejected!'); ?>
      t('If you did not change your password recently, your account may be compromised!'); ?>
      t('Please change your password to secure your account again.'); ?>
    • - +
    • t('Lost your password?'); ?>
    • -- GitLab From 3eb43c1fbe61a1663abc4e885f663250e57c6be1 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 23:25:10 +0200 Subject: [PATCH 082/576] Show a warning in the installer if .htaccess is not working --- core/templates/installation.php | 6 ++++++ lib/setup.php | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/core/templates/installation.php b/core/templates/installation.php index 426d60989a6..c0b29ea909d 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -26,6 +26,12 @@ t('Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account.');?>
    + +
    + t('Security Warning');?> + t('Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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.');?> +
    +
    t( 'Create an admin account' ); ?>

    diff --git a/lib/setup.php b/lib/setup.php index be4101fd7b0..8b9103b7501 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -6,6 +6,12 @@ $hasPostgreSQL = is_callable('pg_connect'); $hasOracle = is_callable('oci_connect'); $datadir = OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data'); +// Test if .htaccess is working +$content = "\n"; +$content.= "Deny from All\n"; +$content.= ""; +file_put_contents(OC::$SERVERROOT.'/data/.htaccess', $content); + $opts = array( 'hasSQLite' => $hasSQLite, 'hasMySQL' => $hasMySQL, @@ -13,6 +19,7 @@ $opts = array( 'hasOracle' => $hasOracle, 'directory' => $datadir, 'secureRNG' => OC_Util::secureRNG_available(), + 'htaccessWorking' => OC_Util::ishtaccessworking(), 'errors' => array(), ); -- GitLab From c9ac1364d179bde343f0fd943d30b6fdc3330a0d Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 23:35:27 +0200 Subject: [PATCH 083/576] "deny from all" instead directory --- lib/setup.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/setup.php b/lib/setup.php index 8b9103b7501..716b0ef063d 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -7,9 +7,7 @@ $hasOracle = is_callable('oci_connect'); $datadir = OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data'); // Test if .htaccess is working -$content = "\n"; -$content.= "Deny from All\n"; -$content.= ""; +$content = "deny from all"; file_put_contents(OC::$SERVERROOT.'/data/.htaccess', $content); $opts = array( -- GitLab From f475ed5cc1733ae768f0f7518a70e88977d33f75 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 23:49:49 +0200 Subject: [PATCH 084/576] Revert "Remove old password check from changepassword and use verifyUser instead" This reverts commit e6b8153865a521a4750ec44016c5f22f453edfe1. --- settings/ajax/changepassword.php | 3 ++- settings/templates/personal.php | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php index 5d94497ce58..5eab751b04e 100644 --- a/settings/ajax/changepassword.php +++ b/settings/ajax/changepassword.php @@ -10,6 +10,7 @@ OC_JSON::verifyUser(); $username = isset($_POST["username"]) ? $_POST["username"] : OC_User::getUser(); $password = $_POST["password"]; +$oldPassword=isset($_POST["oldpassword"])?$_POST["oldpassword"]:''; $userstatus = null; if(OC_Group::inGroup(OC_User::getUser(), 'admin')) { @@ -18,7 +19,7 @@ if(OC_Group::inGroup(OC_User::getUser(), 'admin')) { if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) { $userstatus = 'subadmin'; } -if(OC_User::getUser() == $username) { +if(OC_User::getUser() == $username && OC_User::checkPassword($username, $oldPassword)) { $userstatus = 'user'; } diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 0683bd3b64f..55ff24b4223 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -18,8 +18,9 @@

    t('Your password was changed');?>
    t('Unable to change your password');?>
    - - + + +
    -- GitLab From e3054b6201f477f22d512280823a6d702c4655c2 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 23:50:12 +0200 Subject: [PATCH 085/576] Revert "Verify user login before changing the password reset mail" This reverts commit 9aa9110fd906bc9191adbb129bf421ede77ccad7. --- settings/ajax/lostpassword.php | 1 - 1 file changed, 1 deletion(-) diff --git a/settings/ajax/lostpassword.php b/settings/ajax/lostpassword.php index af1a35fda4a..2a40ba09a8a 100644 --- a/settings/ajax/lostpassword.php +++ b/settings/ajax/lostpassword.php @@ -4,7 +4,6 @@ require_once '../../lib/base.php'; OC_JSON::checkLoggedIn(); OCP\JSON::callCheck(); -OC_JSON::verifyUser(); $l=OC_L10N::get('core'); -- GitLab From 7e2d4e2a8e91fcc1dc57c770ced1fc67123b5f27 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Mon, 15 Oct 2012 23:51:22 +0200 Subject: [PATCH 086/576] Remove verify user from personal.php --- settings/personal.php | 1 - 1 file changed, 1 deletion(-) diff --git a/settings/personal.php b/settings/personal.php index 3348b3290f4..2031edd8df8 100644 --- a/settings/personal.php +++ b/settings/personal.php @@ -7,7 +7,6 @@ require_once '../lib/base.php'; OC_Util::checkLoggedIn(); -OC_Util::verifyUser(); // Highlight navigation entry OC_Util::addScript( 'settings', 'personal' ); -- GitLab From e6c9f5d9f4ea78a89892932bd0f6752d19ee2c3a Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 00:01:48 +0200 Subject: [PATCH 087/576] Verify passwords for admins --- settings/ajax/changepassword.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php index 5eab751b04e..d421181c3bb 100644 --- a/settings/ajax/changepassword.php +++ b/settings/ajax/changepassword.php @@ -6,7 +6,6 @@ require_once '../../lib/base.php'; // Check if we are a user OCP\JSON::callCheck(); OC_JSON::checkLoggedIn(); -OC_JSON::verifyUser(); $username = isset($_POST["username"]) ? $_POST["username"] : OC_User::getUser(); $password = $_POST["password"]; @@ -19,8 +18,13 @@ if(OC_Group::inGroup(OC_User::getUser(), 'admin')) { if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) { $userstatus = 'subadmin'; } -if(OC_User::getUser() == $username && OC_User::checkPassword($username, $oldPassword)) { - $userstatus = 'user'; +if(OC_User::getUser() === $username) { + if (OC_User::checkPassword($username, $oldPassword)) + { + $userstatus = 'user'; + } else { + $userstatus = null; + } } if(is_null($userstatus)) { @@ -28,6 +32,10 @@ if(is_null($userstatus)) { exit(); } +if($userstatus === 'admin' || $userstatus === 'subadmin') { + OC_JSON::verifyUser(); +} + // Return Success story if( OC_User::setPassword( $username, $password )) { OC_JSON::success(array("data" => array( "username" => $username ))); -- GitLab From c83a2a5517bc320d418b31005efc6f37c9091b9a Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 00:28:20 +0200 Subject: [PATCH 088/576] Correct check for admin --- settings/ajax/changepassword.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php index d421181c3bb..b797fcf9185 100644 --- a/settings/ajax/changepassword.php +++ b/settings/ajax/changepassword.php @@ -19,12 +19,10 @@ if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) { $userstatus = 'subadmin'; } if(OC_User::getUser() === $username) { - if (OC_User::checkPassword($username, $oldPassword)) + if (OC_User::checkPassword($username, $oldPassword) && ($userstatus === null || !OC_JSON::isUserVerified())) { $userstatus = 'user'; - } else { - $userstatus = null; - } + } } if(is_null($userstatus)) { -- GitLab From 097f4298165a7d028757de61c6fef49f1f8f6a9a Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 00:32:06 +0200 Subject: [PATCH 089/576] Add isUserVerified() --- lib/json.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/json.php b/lib/json.php index c362c66693b..0a62dc8a65b 100644 --- a/lib/json.php +++ b/lib/json.php @@ -81,15 +81,26 @@ class OC_JSON{ /** * Check if the user verified the login with his password in the last 15 minutes - * @return bool */ public static function verifyUser() { // Check if the user verified his password in the last 15 minutes if($_SESSION['verifiedLogin'] < time() OR !isset($_SESSION['verifiedLogin'])) { + $l = OC_L10N::get('lib'); self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); exit(); } } + /** + * Check if the user verified the login with his password in the last 15 minutes + * @return bool + */ + public static function isUserVerified() { + // Check if the user verified his password in the last 15 minutes + if($_SESSION['verifiedLogin'] < time() OR !isset($_SESSION['verifiedLogin'])) { + return false; + } + return true; + } /** * Send json error msg -- GitLab From 1a187d1ca563607a537b837226eca42d51545c4a Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 00:34:39 +0200 Subject: [PATCH 090/576] Fix PHP notice --- lib/util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util.php b/lib/util.php index c6b164adbe8..db712627581 100755 --- a/lib/util.php +++ b/lib/util.php @@ -399,7 +399,7 @@ class OC_Util { } // Check if the user verified his password in the last 15 minutes - if($_SESSION['verifiedLogin'] < time() OR !isset($_SESSION['verifiedLogin'])) { + if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { OC_Template::printGuestPage("", "verify", array('username' => OC_User::getUser())); exit(); } -- GitLab From 91d4b23efe6446240d89425060ca4483a1eecf77 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 00:43:05 +0200 Subject: [PATCH 091/576] Fix PHP notice --- lib/json.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/json.php b/lib/json.php index 0a62dc8a65b..e4c34e21f69 100644 --- a/lib/json.php +++ b/lib/json.php @@ -84,7 +84,7 @@ class OC_JSON{ */ public static function verifyUser() { // Check if the user verified his password in the last 15 minutes - if($_SESSION['verifiedLogin'] < time() OR !isset($_SESSION['verifiedLogin'])) { + if(!isset($_SESSION['verifiedLogin'] OR $_SESSION['verifiedLogin'] < time())) { $l = OC_L10N::get('lib'); self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); exit(); @@ -96,7 +96,7 @@ class OC_JSON{ */ public static function isUserVerified() { // Check if the user verified his password in the last 15 minutes - if($_SESSION['verifiedLogin'] < time() OR !isset($_SESSION['verifiedLogin'])) { + if(!isset($_SESSION['verifiedLogin'] OR $_SESSION['verifiedLogin'] < time())) { return false; } return true; -- GitLab From c404148f9a1c33c1b8966653f4bc37fe2a44a285 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 00:43:19 +0200 Subject: [PATCH 092/576] Password check for admins --- settings/ajax/changepassword.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php index b797fcf9185..822a95c1bc2 100644 --- a/settings/ajax/changepassword.php +++ b/settings/ajax/changepassword.php @@ -19,10 +19,14 @@ if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) { $userstatus = 'subadmin'; } if(OC_User::getUser() === $username) { - if (OC_User::checkPassword($username, $oldPassword) && ($userstatus === null || !OC_JSON::isUserVerified())) + if (OC_User::checkPassword($username, $oldPassword)) { $userstatus = 'user'; - } + } else { + if (!OC_JSON::isUserVerified()) { + $userstatus = null; + } + } } if(is_null($userstatus)) { -- GitLab From 77e18b01ba19d8573b3d5360d492e2f0b5d1d391 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 00:45:56 +0200 Subject: [PATCH 093/576] Move the ( to the right position --- lib/json.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/json.php b/lib/json.php index e4c34e21f69..b6acaae4c97 100644 --- a/lib/json.php +++ b/lib/json.php @@ -84,7 +84,7 @@ class OC_JSON{ */ public static function verifyUser() { // Check if the user verified his password in the last 15 minutes - if(!isset($_SESSION['verifiedLogin'] OR $_SESSION['verifiedLogin'] < time())) { + if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { $l = OC_L10N::get('lib'); self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); exit(); @@ -96,7 +96,7 @@ class OC_JSON{ */ public static function isUserVerified() { // Check if the user verified his password in the last 15 minutes - if(!isset($_SESSION['verifiedLogin'] OR $_SESSION['verifiedLogin'] < time())) { + if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { return false; } return true; -- GitLab From f4142bd2a8508577ca0abc1f6d84b59dc6de26e5 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 00:47:22 +0200 Subject: [PATCH 094/576] Move isUserVerified to OC_Util --- lib/json.php | 13 +------------ lib/util.php | 12 ++++++++++++ settings/ajax/changepassword.php | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/lib/json.php b/lib/json.php index b6acaae4c97..3e55f618430 100644 --- a/lib/json.php +++ b/lib/json.php @@ -90,18 +90,7 @@ class OC_JSON{ exit(); } } - /** - * Check if the user verified the login with his password in the last 15 minutes - * @return bool - */ - public static function isUserVerified() { - // Check if the user verified his password in the last 15 minutes - if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { - return false; - } - return true; - } - + /** * Send json error msg */ diff --git a/lib/util.php b/lib/util.php index db712627581..ba2a02922a5 100755 --- a/lib/util.php +++ b/lib/util.php @@ -405,6 +405,18 @@ class OC_Util { } } + /** + * Check if the user verified the login with his password in the last 15 minutes + * @return bool + */ + public static function isUserVerified() { + // Check if the user verified his password in the last 15 minutes + if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { + return false; + } + return true; + } + /** * Redirect to the user default page */ diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php index 822a95c1bc2..12d3b67037a 100644 --- a/settings/ajax/changepassword.php +++ b/settings/ajax/changepassword.php @@ -23,7 +23,7 @@ if(OC_User::getUser() === $username) { { $userstatus = 'user'; } else { - if (!OC_JSON::isUserVerified()) { + if (!OC_Util::isUserVerified()) { $userstatus = null; } } -- GitLab From 6f2e8788ca7cc8edb677b8596f39c90c3f13be77 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 01:02:03 +0200 Subject: [PATCH 095/576] Make enhanced auth time configurable --- config/config.sample.php | 3 +++ lib/json.php | 3 +-- lib/setup.php | 3 +++ lib/util.php | 7 +++---- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/config/config.sample.php b/config/config.sample.php index 09eb6053c24..762633c7832 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -30,6 +30,9 @@ $CONFIG = array( /* Force use of HTTPS connection (true = use HTTPS) */ "forcessl" => false, +/* Time in seconds how long an user is authenticated without entering his password again before performing sensitive actions like creating or deleting users etc...*/ +"enhancedauthtime" => 15 * 60, + /* Theme to use for ownCloud */ "theme" => "", diff --git a/lib/json.php b/lib/json.php index 3e55f618430..b828f35f345 100644 --- a/lib/json.php +++ b/lib/json.php @@ -80,10 +80,9 @@ class OC_JSON{ } /** - * Check if the user verified the login with his password in the last 15 minutes + * Check if the user verified the login with his password */ public static function verifyUser() { - // Check if the user verified his password in the last 15 minutes if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { $l = OC_L10N::get('lib'); self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); diff --git a/lib/setup.php b/lib/setup.php index 716b0ef063d..2ac91482e54 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -391,6 +391,9 @@ class OC_Setup { self::createHtaccess(); } + // Set the admin auth time + OC_Config::setValue('enhancedauthtime', 15 * 60); + //and we are done OC_Config::setValue('installed', true); } diff --git a/lib/util.php b/lib/util.php index ba2a02922a5..58d784057ac 100755 --- a/lib/util.php +++ b/lib/util.php @@ -394,11 +394,11 @@ class OC_Util { // Check password to set session if(isset($_POST['password'])) { if (OC_User::login(OC_User::getUser(), $_POST["password"] ) === true) { - $_SESSION['verifiedLogin']=time() + (15 * 60); + $_SESSION['verifiedLogin']=time() + OC_Config::getValue('enhancedauthtime'); } } - // Check if the user verified his password in the last 15 minutes + // Check if the user verified his password if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { OC_Template::printGuestPage("", "verify", array('username' => OC_User::getUser())); exit(); @@ -406,11 +406,10 @@ class OC_Util { } /** - * Check if the user verified the login with his password in the last 15 minutes + * Check if the user verified the login with his password * @return bool */ public static function isUserVerified() { - // Check if the user verified his password in the last 15 minutes if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { return false; } -- GitLab From 5c0407306c56ccf583ad679d30f13b75c3856c55 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 01:04:20 +0200 Subject: [PATCH 096/576] Set a standard value for enhanced auth time --- lib/util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util.php b/lib/util.php index 58d784057ac..873562cbc1f 100755 --- a/lib/util.php +++ b/lib/util.php @@ -394,7 +394,7 @@ class OC_Util { // Check password to set session if(isset($_POST['password'])) { if (OC_User::login(OC_User::getUser(), $_POST["password"] ) === true) { - $_SESSION['verifiedLogin']=time() + OC_Config::getValue('enhancedauthtime'); + $_SESSION['verifiedLogin']=time() + OC_Config::getValue('enhancedauthtime', 15 * 60); } } -- GitLab From c85c35dfae8fa7135d42c905f955ff71af849b6a Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 01:04:34 +0200 Subject: [PATCH 097/576] Don't add the enhanced auth time to the configuration --- lib/setup.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/setup.php b/lib/setup.php index 2ac91482e54..3c92e9c5599 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -390,10 +390,7 @@ class OC_Setup { if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) { self::createHtaccess(); } - - // Set the admin auth time - OC_Config::setValue('enhancedauthtime', 15 * 60); - + //and we are done OC_Config::setValue('installed', true); } -- GitLab From e299c241df23770efbb6f5c833d77edcdeed7410 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 01:08:05 +0200 Subject: [PATCH 098/576] Make enhanced auth configurable --- config/config.sample.php | 3 +++ lib/json.php | 10 ++++++---- lib/util.php | 26 +++++++++++++++----------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/config/config.sample.php b/config/config.sample.php index 762633c7832..f2fd948418f 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -30,6 +30,9 @@ $CONFIG = array( /* Force use of HTTPS connection (true = use HTTPS) */ "forcessl" => false, +/* Enhanced auth forces users to enter their password again when performing potential sensitive actions like creating or deleting users */ +"enhancedauth" => true, + /* Time in seconds how long an user is authenticated without entering his password again before performing sensitive actions like creating or deleting users etc...*/ "enhancedauthtime" => 15 * 60, diff --git a/lib/json.php b/lib/json.php index b828f35f345..cc504907261 100644 --- a/lib/json.php +++ b/lib/json.php @@ -83,10 +83,12 @@ class OC_JSON{ * Check if the user verified the login with his password */ public static function verifyUser() { - if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { - $l = OC_L10N::get('lib'); - self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); - exit(); + if(OC_Config::getValue('enhancedauth', true) === true) { + if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { + $l = OC_L10N::get('lib'); + self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); + exit(); + } } } diff --git a/lib/util.php b/lib/util.php index 873562cbc1f..5771b89f265 100755 --- a/lib/util.php +++ b/lib/util.php @@ -391,17 +391,19 @@ class OC_Util { * If not, the user will be shown a password verification page */ public static function verifyUser() { - // Check password to set session - if(isset($_POST['password'])) { - if (OC_User::login(OC_User::getUser(), $_POST["password"] ) === true) { - $_SESSION['verifiedLogin']=time() + OC_Config::getValue('enhancedauthtime', 15 * 60); + if(OC_Config::getValue('enhancedauth', true) === true) { + // Check password to set session + if(isset($_POST['password'])) { + if (OC_User::login(OC_User::getUser(), $_POST["password"] ) === true) { + $_SESSION['verifiedLogin']=time() + OC_Config::getValue('enhancedauthtime', 15 * 60); + } } - } // Check if the user verified his password - if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { - OC_Template::printGuestPage("", "verify", array('username' => OC_User::getUser())); - exit(); + if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { + OC_Template::printGuestPage("", "verify", array('username' => OC_User::getUser())); + exit(); + } } } @@ -410,10 +412,12 @@ class OC_Util { * @return bool */ public static function isUserVerified() { - if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { - return false; + if(OC_Config::getValue('enhancedauth', true) === true) { + if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) { + return false; + } + return true; } - return true; } /** -- GitLab From c3823aa864938c38349d45a0524e2db3a71b2f4b Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 16 Oct 2012 02:08:21 +0200 Subject: [PATCH 099/576] [tx-robot] updated from transifex --- apps/files/l10n/si_LK.php | 18 ++ apps/user_ldap/l10n/ru_RU.php | 8 + core/l10n/ca.php | 3 + core/l10n/cs_CZ.php | 3 + core/l10n/de.php | 3 + core/l10n/el.php | 1 + core/l10n/fr.php | 3 + core/l10n/it.php | 3 + core/l10n/ja_JP.php | 3 + core/l10n/pt_BR.php | 3 + core/l10n/si_LK.php | 29 ++ core/l10n/sv.php | 3 + l10n/af/core.po | 80 ++++-- l10n/ar/core.po | 80 ++++-- l10n/ar_SA/core.po | 80 ++++-- l10n/bg_BG/core.po | 80 ++++-- l10n/ca/core.po | 84 ++++-- l10n/cs_CZ/core.po | 84 ++++-- l10n/da/core.po | 80 ++++-- l10n/de/core.po | 84 ++++-- l10n/el/core.po | 82 ++++-- l10n/eo/core.po | 80 ++++-- l10n/es/core.po | 80 ++++-- l10n/es_AR/core.po | 80 ++++-- l10n/et_EE/core.po | 80 ++++-- l10n/eu/core.po | 80 ++++-- l10n/eu_ES/core.po | 80 ++++-- l10n/fa/core.po | 80 ++++-- l10n/fi/core.po | 80 ++++-- l10n/fi_FI/core.po | 80 ++++-- l10n/fr/core.po | 84 ++++-- l10n/fr/settings.po | 25 +- l10n/gl/core.po | 80 ++++-- l10n/he/core.po | 80 ++++-- l10n/hi/core.po | 80 ++++-- l10n/hr/core.po | 80 ++++-- l10n/hu_HU/core.po | 80 ++++-- l10n/hy/core.po | 80 ++++-- l10n/ia/core.po | 80 ++++-- l10n/id/core.po | 80 ++++-- l10n/id_ID/core.po | 80 ++++-- l10n/it/core.po | 84 ++++-- l10n/ja_JP/core.po | 84 ++++-- l10n/ja_JP/settings.po | 19 +- l10n/ko/core.po | 80 ++++-- l10n/ku_IQ/core.po | 80 ++++-- l10n/lb/core.po | 80 ++++-- l10n/lt_LT/core.po | 80 ++++-- l10n/lv/core.po | 80 ++++-- l10n/mk/core.po | 80 ++++-- l10n/ms_MY/core.po | 80 ++++-- l10n/nb_NO/core.po | 80 ++++-- l10n/nl/core.po | 80 ++++-- l10n/nn_NO/core.po | 80 ++++-- l10n/oc/core.po | 80 ++++-- l10n/pl/core.po | 80 ++++-- l10n/pl_PL/core.po | 80 ++++-- l10n/pt_BR/core.po | 85 ++++-- l10n/pt_PT/core.po | 80 ++++-- l10n/ro/core.po | 80 ++++-- l10n/ru/core.po | 80 ++++-- l10n/ru_RU/core.po | 80 ++++-- l10n/ru_RU/user_ldap.po | 20 +- l10n/si_LK/core.po | 432 ++++++++++++++++++++++++++++ l10n/si_LK/files.po | 300 +++++++++++++++++++ l10n/si_LK/files_encryption.po | 34 +++ l10n/si_LK/files_external.po | 106 +++++++ l10n/si_LK/files_sharing.po | 48 ++++ l10n/si_LK/files_versions.po | 42 +++ l10n/si_LK/lib.po | 125 ++++++++ l10n/si_LK/settings.po | 321 +++++++++++++++++++++ l10n/si_LK/user_ldap.po | 170 +++++++++++ l10n/sk_SK/core.po | 80 ++++-- l10n/sl/core.po | 80 ++++-- l10n/so/core.po | 80 ++++-- l10n/sr/core.po | 80 ++++-- l10n/sr@latin/core.po | 80 ++++-- l10n/sv/core.po | 84 ++++-- l10n/ta_LK/core.po | 431 +++++++++++++++++++++++++++ l10n/ta_LK/files.po | 299 +++++++++++++++++++ l10n/ta_LK/files_encryption.po | 34 +++ l10n/ta_LK/files_external.po | 106 +++++++ l10n/ta_LK/files_sharing.po | 48 ++++ l10n/ta_LK/files_versions.po | 42 +++ l10n/ta_LK/lib.po | 125 ++++++++ l10n/ta_LK/settings.po | 320 +++++++++++++++++++++ l10n/ta_LK/user_ldap.po | 170 +++++++++++ l10n/templates/core.pot | 78 +++-- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 4 +- l10n/templates/settings.pot | 15 +- l10n/templates/user_ldap.pot | 2 +- l10n/th_TH/core.po | 80 ++++-- l10n/tr/core.po | 80 ++++-- l10n/uk/core.po | 80 ++++-- l10n/vi/core.po | 80 ++++-- l10n/zh_CN.GB2312/core.po | 80 ++++-- l10n/zh_CN/core.po | 80 ++++-- l10n/zh_TW/core.po | 80 ++++-- settings/l10n/fr.php | 3 +- settings/l10n/ja_JP.php | 4 +- settings/l10n/si_LK.php | 15 + 106 files changed, 6973 insertions(+), 1370 deletions(-) create mode 100644 apps/files/l10n/si_LK.php create mode 100644 core/l10n/si_LK.php create mode 100644 l10n/si_LK/core.po create mode 100644 l10n/si_LK/files.po create mode 100644 l10n/si_LK/files_encryption.po create mode 100644 l10n/si_LK/files_external.po create mode 100644 l10n/si_LK/files_sharing.po create mode 100644 l10n/si_LK/files_versions.po create mode 100644 l10n/si_LK/lib.po create mode 100644 l10n/si_LK/settings.po create mode 100644 l10n/si_LK/user_ldap.po create mode 100644 l10n/ta_LK/core.po create mode 100644 l10n/ta_LK/files.po create mode 100644 l10n/ta_LK/files_encryption.po create mode 100644 l10n/ta_LK/files_external.po create mode 100644 l10n/ta_LK/files_sharing.po create mode 100644 l10n/ta_LK/files_versions.po create mode 100644 l10n/ta_LK/lib.po create mode 100644 l10n/ta_LK/settings.po create mode 100644 l10n/ta_LK/user_ldap.po create mode 100644 settings/l10n/si_LK.php diff --git a/apps/files/l10n/si_LK.php b/apps/files/l10n/si_LK.php new file mode 100644 index 00000000000..97a125faff1 --- /dev/null +++ b/apps/files/l10n/si_LK.php @@ -0,0 +1,18 @@ + "නිවැරදි ව ගොනුව උඩුගත කෙරිනි", +"The uploaded file was only partially uploaded" => "උඩුගත කළ ගොනුවේ කොටසක් පමණක් උඩුගත විය", +"No file was uploaded" => "කිසිදු ගොනවක් උඩුගත නොවිනි", +"Files" => "ගොනු", +"Name" => "නම", +"Size" => "ප්‍රමාණය", +"folder" => "ෆෝල්ඩරය", +"folders" => "ෆෝල්ඩර", +"file" => "ගොනුව", +"files" => "ගොනු", +"Maximum upload size" => "උඩුගත කිරීමක උපරිම ප්‍රමාණය", +"New" => "නව", +"Folder" => "ෆෝල්ඩරය", +"Upload" => "උඩුගත කිරීම", +"Nothing in here. Upload something!" => "මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න", +"Download" => "බාගත කිරීම" +); diff --git a/apps/user_ldap/l10n/ru_RU.php b/apps/user_ldap/l10n/ru_RU.php index 8433f39e83c..d5adb9fffd3 100644 --- a/apps/user_ldap/l10n/ru_RU.php +++ b/apps/user_ldap/l10n/ru_RU.php @@ -4,23 +4,31 @@ "Base DN" => "База DN", "You can specify Base DN for users and groups in the Advanced tab" => "Вы можете задать Base DN для пользователей и групп во вкладке «Дополнительно»", "User DN" => "DN пользователя", +"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." => "DN клиентского пользователя, с которого должна осуществляться привязка, например, uid=agent,dc=example,dc=com. Для анонимного доступа оставьте поля DN и Пароль пустыми.", "Password" => "Пароль", "For anonymous access, leave DN and Password empty." => "Для анонимного доступа оставьте поля DN и пароль пустыми.", "User Login Filter" => "Фильтр имен пользователей", +"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Задает фильтр, применяемый при загрузке пользователя. %%uid заменяет имя пользователя при входе.", "use %%uid placeholder, e.g. \"uid=%%uid\"" => "используйте %%uid заполнитель, например, \"uid=%%uid\"", +"User List Filter" => "Фильтр списка пользователей", +"Defines the filter to apply, when retrieving users." => "Задает фильтр, применяемый при получении пользователей.", "without any placeholder, e.g. \"objectClass=person\"." => "без каких-либо заполнителей, например, \"objectClass=person\".", "Group Filter" => "Групповой фильтр", +"Defines the filter to apply, when retrieving groups." => "Задает фильтр, применяемый при получении групп.", "without any placeholder, e.g. \"objectClass=posixGroup\"." => "без каких-либо заполнителей, например, \"objectClass=posixGroup\".", "Port" => "Порт", "Base User Tree" => "Базовое дерево пользователей", +"Base Group Tree" => "Базовое дерево групп", "Group-Member association" => "Связь член-группа", "Use TLS" => "Использовать TLS", "Do not use it for SSL connections, it will fail." => "Не используйте это SSL-соединений, это не будет выполнено.", "Case insensitve LDAP server (Windows)" => "Нечувствительный к регистру LDAP-сервер (Windows)", "Turn off SSL certificate validation." => "Выключить проверку сертификата SSL.", +"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Если соединение работает только с этой опцией, импортируйте SSL-сертификат LDAP сервера в ваш ownCloud сервер.", "Not recommended, use for testing only." => "Не рекомендовано, используйте только для тестирования.", "User Display Name Field" => "Поле, отображаемое как имя пользователя", "The LDAP attribute to use to generate the user`s ownCloud name." => "Атрибут LDAP, используемый для создания имени пользователя в ownCloud.", +"Group Display Name Field" => "Поле, отображаемое как имя группы", "The LDAP attribute to use to generate the groups`s ownCloud name." => "Атрибут LDAP, используемый для создания группового имени в ownCloud.", "in bytes" => "в байтах", "in seconds. A change empties the cache." => "в секундах. Изменение очищает кэш.", diff --git a/core/l10n/ca.php b/core/l10n/ca.php index 70286040bfd..08b150467ff 100644 --- a/core/l10n/ca.php +++ b/core/l10n/ca.php @@ -69,6 +69,9 @@ "Cloud not found" => "No s'ha trobat el núvol", "Edit categories" => "Edita les categories", "Add" => "Afegeix", +"Security Warning" => "Avís de seguretat", +"No secure random number generator is available, please enable the PHP OpenSSL extension." => "No està disponible el generador de nombres aleatoris segurs, habiliteu l'extensió de PHP OpenSSL.", +"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sense un generador de nombres aleatoris segurs un atacant podria predir els senyals per restablir la contrasenya i prendre-us el compte.", "Create an admin account" => "Crea un compte d'administrador", "Advanced" => "Avançat", "Data folder" => "Carpeta de dades", diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php index 461bed99334..396f316b48c 100644 --- a/core/l10n/cs_CZ.php +++ b/core/l10n/cs_CZ.php @@ -69,6 +69,9 @@ "Cloud not found" => "Cloud nebyl nalezen", "Edit categories" => "Upravit kategorie", "Add" => "Přidat", +"Security Warning" => "Bezpečnostní upozornění", +"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Není dostupný žádný bezpečný generátor náhodných čísel. Povolte, prosím, rozšíření OpenSSL v PHP.", +"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez bezpečného generátoru náhodných čísel může útočník předpovědět token pro obnovu hesla a převzít kontrolu nad Vaším účtem.", "Create an admin account" => "Vytvořit účet správce", "Advanced" => "Pokročilé", "Data folder" => "Složka s daty", diff --git a/core/l10n/de.php b/core/l10n/de.php index 31cfa764f98..1d2daeef037 100644 --- a/core/l10n/de.php +++ b/core/l10n/de.php @@ -69,6 +69,9 @@ "Cloud not found" => "Cloud nicht gefunden", "Edit categories" => "Kategorien bearbeiten", "Add" => "Hinzufügen", +"Security Warning" => "Sicherheitshinweis", +"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktivieren Sie die PHP-Erweiterung für OpenSSL", +"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage die Tokens für das Zurücksetzen der Passwörter vorherzusehen und damit können Konten übernommen.", "Create an admin account" => "Administrator-Konto anlegen", "Advanced" => "Fortgeschritten", "Data folder" => "Datenverzeichnis", diff --git a/core/l10n/el.php b/core/l10n/el.php index 0e0c43b899e..f2b9a48fe12 100644 --- a/core/l10n/el.php +++ b/core/l10n/el.php @@ -69,6 +69,7 @@ "Cloud not found" => "Δεν βρέθηκε σύννεφο", "Edit categories" => "Επεξεργασία κατηγορίας", "Add" => "Προσθήκη", +"Security Warning" => "Προειδοποίηση Ασφαλείας", "Create an admin account" => "Δημιουργήστε έναν λογαριασμό διαχειριστή", "Advanced" => "Για προχωρημένους", "Data folder" => "Φάκελος δεδομένων", diff --git a/core/l10n/fr.php b/core/l10n/fr.php index 4ab46a8a332..06d599f7c79 100644 --- a/core/l10n/fr.php +++ b/core/l10n/fr.php @@ -69,6 +69,9 @@ "Cloud not found" => "Introuvable", "Edit categories" => "Modifier les catégories", "Add" => "Ajouter", +"Security Warning" => "Avertissement de sécutité", +"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Aucun générateur de nombre aléatoire sécurisé n'est disponible, veuillez activer l'extension PHP OpenSSL", +"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sans générateur de nombre aléatoire sécurisé, un attaquant peut être en mesure de prédire les jetons de réinitialisation du mot de passe, et ainsi prendre le contrôle de votre compte utilisateur.", "Create an admin account" => "Créer un compte administrateur", "Advanced" => "Avancé", "Data folder" => "Répertoire des données", diff --git a/core/l10n/it.php b/core/l10n/it.php index c586171275d..71e76912413 100644 --- a/core/l10n/it.php +++ b/core/l10n/it.php @@ -69,6 +69,9 @@ "Cloud not found" => "Nuvola non trovata", "Edit categories" => "Modifica le categorie", "Add" => "Aggiungi", +"Security Warning" => "Avviso di sicurezza", +"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Non è disponibile alcun generatore di numeri casuali sicuro. Abilita l'estensione OpenSSL di PHP", +"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Senza un generatore di numeri casuali sicuro, un malintenzionato potrebbe riuscire a individuare i token di ripristino delle password e impossessarsi del tuo account.", "Create an admin account" => "Crea un account amministratore", "Advanced" => "Avanzate", "Data folder" => "Cartella dati", diff --git a/core/l10n/ja_JP.php b/core/l10n/ja_JP.php index 94e1d4dd4fb..718af15c28b 100644 --- a/core/l10n/ja_JP.php +++ b/core/l10n/ja_JP.php @@ -69,6 +69,9 @@ "Cloud not found" => "見つかりません", "Edit categories" => "カテゴリを編集", "Add" => "追加", +"Security Warning" => "セキュリティ警告", +"No secure random number generator is available, please enable the PHP OpenSSL extension." => "セキュアな乱数生成器が利用可能ではありません。PHPのOpenSSL拡張を有効にして下さい。", +"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "セキュアな乱数生成器が無い場合、攻撃者はパスワードリセットのトークンを予測してアカウントを乗っ取られる可能性があります。", "Create an admin account" => "管理者アカウントを作成してください", "Advanced" => "詳細設定", "Data folder" => "データフォルダ", diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php index c332585325b..54a442bc2f2 100644 --- a/core/l10n/pt_BR.php +++ b/core/l10n/pt_BR.php @@ -69,6 +69,9 @@ "Cloud not found" => "Cloud não encontrado", "Edit categories" => "Editar categorias", "Add" => "Adicionar", +"Security Warning" => "Aviso de Segurança", +"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nenhum gerador de número aleatório de segurança disponível. Habilite a extensão OpenSSL do PHP.", +"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sem um gerador de número aleatório de segurança, um invasor pode ser capaz de prever os símbolos de redefinição de senhas e assumir sua conta.", "Create an admin account" => "Criar uma conta de administrador", "Advanced" => "Avançado", "Data folder" => "Pasta de dados", diff --git a/core/l10n/si_LK.php b/core/l10n/si_LK.php new file mode 100644 index 00000000000..bfccbfd3e8e --- /dev/null +++ b/core/l10n/si_LK.php @@ -0,0 +1,29 @@ + "යෙදුම් නාමය සපයා නැත.", +"Settings" => "සැකසුම්", +"January" => "ජනවාරි", +"February" => "පෙබරවාරි", +"March" => "මාර්තු", +"April" => "අප්‍රේල්", +"May" => "මැයි", +"June" => "ජූනි", +"July" => "ජූලි", +"August" => "අගෝස්තු", +"September" => "සැප්තැම්බර්", +"October" => "ඔක්තෝබර්", +"November" => "නොවැම්බර්", +"December" => "දෙසැම්බර්", +"Choose" => "තෝරන්න", +"Cancel" => "එපා", +"No" => "නැහැ", +"Yes" => "ඔව්", +"Ok" => "හරි", +"Password" => "මුර පදය ", +"To login page" => "පිවිසුම් පිටුවට", +"New password" => "නව මුර පදයක්", +"Apps" => "යෙදුම්", +"Help" => "උදව්", +"Add" => "එක් කරන්න", +"Data folder" => "දත්ත ෆෝල්ඩරය", +"next" => "ඊළඟ" +); diff --git a/core/l10n/sv.php b/core/l10n/sv.php index 90e416fc737..2833792e0b7 100644 --- a/core/l10n/sv.php +++ b/core/l10n/sv.php @@ -69,6 +69,9 @@ "Cloud not found" => "Hittade inget moln", "Edit categories" => "Redigera kategorier", "Add" => "Lägg till", +"Security Warning" => "Säkerhetsvarning", +"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ingen säker slumptalsgenerator finns tillgänglig. Du bör aktivera PHP OpenSSL-tillägget.", +"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Utan en säker slumptalsgenerator kan angripare få möjlighet att förutsäga lösenordsåterställningar och ta över ditt konto.", "Create an admin account" => "Skapa ett administratörskonto", "Advanced" => "Avancerat", "Data folder" => "Datamapp", diff --git a/l10n/af/core.po b/l10n/af/core.po index a58f8ce0ad4..61c871deff8 100644 --- a/l10n/af/core.po +++ b/l10n/af/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n" "MIME-Version: 1.0\n" @@ -146,7 +146,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "" @@ -238,8 +239,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "" @@ -299,7 +300,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -315,48 +316,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "" @@ -368,15 +378,29 @@ msgstr "" msgid "Log out" msgstr "" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -391,3 +415,17 @@ msgstr "" #: templates/part.pagenavi.php:20 msgid "next" msgstr "" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ar/core.po b/l10n/ar/core.po index fa1727298b8..7338fcb1fa5 100644 --- a/l10n/ar/core.po +++ b/l10n/ar/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "كلمة السر" @@ -239,8 +240,8 @@ msgstr "تم طلب" msgid "Login failed!" msgstr "محاولة دخول فاشلة!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "إسم المستخدم" @@ -300,7 +301,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "أضف
    مستخدم رئيسي " -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "خيارات متقدمة" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "مجلد المعلومات" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "أسس قاعدة البيانات" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "سيتم استخدمه" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "مستخدم قاعدة البيانات" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "كلمة سر مستخدم قاعدة البيانات" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "إسم قاعدة البيانات" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "خادم قاعدة البيانات" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "انهاء التعديلات" @@ -369,15 +379,29 @@ msgstr "خدمات الوب تحت تصرفك" msgid "Log out" msgstr "الخروج" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "هل نسيت كلمة السر؟" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "تذكر" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "أدخل" @@ -392,3 +416,17 @@ msgstr "السابق" #: templates/part.pagenavi.php:20 msgid "next" msgstr "التالي" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ar_SA/core.po b/l10n/ar_SA/core.po index fee98bcffc6..d567806a443 100644 --- a/l10n/ar_SA/core.po +++ b/l10n/ar_SA/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n" "MIME-Version: 1.0\n" @@ -146,7 +146,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "" @@ -238,8 +239,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "" @@ -299,7 +300,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -315,48 +316,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "" @@ -368,15 +378,29 @@ msgstr "" msgid "Log out" msgstr "" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -391,3 +415,17 @@ msgstr "" #: templates/part.pagenavi.php:20 msgid "next" msgstr "" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/bg_BG/core.po b/l10n/bg_BG/core.po index c1c34e005b9..cbc25fc2b30 100644 --- a/l10n/bg_BG/core.po +++ b/l10n/bg_BG/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -150,7 +150,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Парола" @@ -242,8 +243,8 @@ msgstr "Заявено" msgid "Login failed!" msgstr "Входа пропадна!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Потребител" @@ -303,7 +304,7 @@ msgstr "Редактиране на категориите" msgid "Add" msgstr "Добавяне" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -319,48 +320,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Създаване на админ профил" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Разширено" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Директория за данни" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Конфигуриране на базата" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "ще се ползва" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Потребител за базата" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Парола за базата" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Име на базата" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Хост за базата" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Завършване на настройките" @@ -372,15 +382,29 @@ msgstr "" msgid "Log out" msgstr "Изход" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Забравена парола?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "запомни" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Вход" @@ -395,3 +419,17 @@ msgstr "пред." #: templates/part.pagenavi.php:20 msgid "next" msgstr "следващо" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ca/core.po b/l10n/ca/core.po index d02a32199ee..dc715f5e190 100644 --- a/l10n/ca/core.po +++ b/l10n/ca/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" @@ -148,7 +148,8 @@ msgstr "Comparteix amb enllaç" msgid "Password protect" msgstr "Protegir amb contrasenya" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Contrasenya" @@ -240,8 +241,8 @@ msgstr "Sol·licitat" msgid "Login failed!" msgstr "No s'ha pogut iniciar la sessió" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Nom d'usuari" @@ -301,64 +302,73 @@ msgstr "Edita les categories" msgid "Add" msgstr "Afegeix" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" -msgstr "" +msgstr "Avís de seguretat" #: templates/installation.php:24 msgid "" "No secure random number generator is available, please enable the PHP " "OpenSSL extension." -msgstr "" +msgstr "No està disponible el generador de nombres aleatoris segurs, habiliteu l'extensió de PHP OpenSSL." #: templates/installation.php:26 msgid "" "Without a secure random number generator an attacker may be able to predict " "password reset tokens and take over your account." +msgstr "Sense un generador de nombres aleatoris segurs un atacant podria predir els senyals per restablir la contrasenya i prendre-us el compte." + +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:30 +#: templates/installation.php:36 msgid "Create an admin account" msgstr "Crea un compte d'administrador" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avançat" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Carpeta de dades" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configura la base de dades" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "s'usarà" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Usuari de la base de dades" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Contrasenya de la base de dades" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nom de la base de dades" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Espai de taula de la base de dades" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Ordinador central de la base de dades" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Acaba la configuració" @@ -370,15 +380,29 @@ msgstr "controleu els vostres serveis web" msgid "Log out" msgstr "Surt" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Heu perdut la contrasenya?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "recorda'm" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Inici de sessió" @@ -393,3 +417,17 @@ msgstr "anterior" #: templates/part.pagenavi.php:20 msgid "next" msgstr "següent" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po index 590bd503d45..28c0ee90d98 100644 --- a/l10n/cs_CZ/core.po +++ b/l10n/cs_CZ/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" @@ -150,7 +150,8 @@ msgstr "Sdílet s odkazem" msgid "Password protect" msgstr "Chránit heslem" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Heslo" @@ -242,8 +243,8 @@ msgstr "Požadováno" msgid "Login failed!" msgstr "Přihlášení selhalo." -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Uživatelské jméno" @@ -303,64 +304,73 @@ msgstr "Upravit kategorie" msgid "Add" msgstr "Přidat" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" -msgstr "" +msgstr "Bezpečnostní upozornění" #: templates/installation.php:24 msgid "" "No secure random number generator is available, please enable the PHP " "OpenSSL extension." -msgstr "" +msgstr "Není dostupný žádný bezpečný generátor náhodných čísel. Povolte, prosím, rozšíření OpenSSL v PHP." #: templates/installation.php:26 msgid "" "Without a secure random number generator an attacker may be able to predict " "password reset tokens and take over your account." +msgstr "Bez bezpečného generátoru náhodných čísel může útočník předpovědět token pro obnovu hesla a převzít kontrolu nad Vaším účtem." + +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:30 +#: templates/installation.php:36 msgid "Create an admin account" msgstr "Vytvořit účet správce" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Pokročilé" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Složka s daty" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Nastavit databázi" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "bude použito" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Uživatel databáze" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Heslo databáze" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Název databáze" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Tabulkový prostor databáze" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Hostitel databáze" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Dokončit nastavení" @@ -372,15 +382,29 @@ msgstr "webové služby pod Vaší kontrolou" msgid "Log out" msgstr "Odhlásit se" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Ztratili jste své heslo?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "zapamatovat si" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Přihlásit" @@ -395,3 +419,17 @@ msgstr "předchozí" #: templates/part.pagenavi.php:20 msgid "next" msgstr "následující" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/da/core.po b/l10n/da/core.po index 93c824bb4a7..98ece178a5d 100644 --- a/l10n/da/core.po +++ b/l10n/da/core.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" @@ -153,7 +153,8 @@ msgstr "Del med link" msgid "Password protect" msgstr "Beskyt med adgangskode" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Kodeord" @@ -245,8 +246,8 @@ msgstr "Forespugt" msgid "Login failed!" msgstr "Login fejlede!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Brugernavn" @@ -306,7 +307,7 @@ msgstr "Rediger kategorier" msgid "Add" msgstr "Tilføj" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -322,48 +323,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Opret en administratorkonto" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avanceret" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Datamappe" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Konfigurer databasen" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "vil blive brugt" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Databasebruger" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Databasekodeord" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Navn på database" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Database tabelplads" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Databasehost" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Afslut opsætning" @@ -375,15 +385,29 @@ msgstr "Webtjenester under din kontrol" msgid "Log out" msgstr "Log ud" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Mistet dit kodeord?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "husk" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Log ind" @@ -398,3 +422,17 @@ msgstr "forrige" #: templates/part.pagenavi.php:20 msgid "next" msgstr "næste" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/de/core.po b/l10n/de/core.po index c261cd3df46..8e023a66d62 100644 --- a/l10n/de/core.po +++ b/l10n/de/core.po @@ -20,8 +20,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" @@ -159,7 +159,8 @@ msgstr "Über einen Link freigeben" msgid "Password protect" msgstr "Passwortschutz" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Passwort" @@ -251,8 +252,8 @@ msgstr "Angefragt" msgid "Login failed!" msgstr "Login fehlgeschlagen!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Benutzername" @@ -312,64 +313,73 @@ msgstr "Kategorien bearbeiten" msgid "Add" msgstr "Hinzufügen" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" -msgstr "" +msgstr "Sicherheitshinweis" #: templates/installation.php:24 msgid "" "No secure random number generator is available, please enable the PHP " "OpenSSL extension." -msgstr "" +msgstr "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktivieren Sie die PHP-Erweiterung für OpenSSL" #: templates/installation.php:26 msgid "" "Without a secure random number generator an attacker may be able to predict " "password reset tokens and take over your account." +msgstr "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage die Tokens für das Zurücksetzen der Passwörter vorherzusehen und damit können Konten übernommen." + +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:30 +#: templates/installation.php:36 msgid "Create an admin account" msgstr "Administrator-Konto anlegen" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Fortgeschritten" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Datenverzeichnis" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Datenbank einrichten" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "wird verwendet" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Datenbank-Benutzer" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Datenbank-Passwort" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Datenbank-Name" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Datenbank-Tablespace" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Datenbank-Host" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Installation abschließen" @@ -381,15 +391,29 @@ msgstr "Web-Services unter Ihrer Kontrolle" msgid "Log out" msgstr "Abmelden" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Passwort vergessen?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "merken" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Einloggen" @@ -404,3 +428,17 @@ msgstr "Zurück" #: templates/part.pagenavi.php:20 msgid "next" msgstr "Weiter" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/el/core.po b/l10n/el/core.po index c7c201ca95d..35782e6e575 100644 --- a/l10n/el/core.po +++ b/l10n/el/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" @@ -151,7 +151,8 @@ msgstr "Διαμοιρασμός με σύνδεσμο" msgid "Password protect" msgstr "Προστασία κωδικού" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Κωδικός" @@ -243,8 +244,8 @@ msgstr "Ζητήθησαν" msgid "Login failed!" msgstr "Η σύνδεση απέτυχε!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Όνομα Χρήστη" @@ -304,9 +305,9 @@ msgstr "Επεξεργασία κατηγορίας" msgid "Add" msgstr "Προσθήκη" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" -msgstr "" +msgstr "Προειδοποίηση Ασφαλείας" #: templates/installation.php:24 msgid "" @@ -320,48 +321,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Δημιουργήστε έναν λογαριασμό διαχειριστή" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Για προχωρημένους" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Φάκελος δεδομένων" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Διαμόρφωση της βάσης δεδομένων" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "θα χρησιμοποιηθούν" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Χρήστης της βάσης δεδομένων" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Κωδικός πρόσβασης βάσης δεδομένων" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Όνομα βάσης δεδομένων" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Κενά Πινάκων Βάσης Δεδομένων" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Διακομιστής βάσης δεδομένων" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Ολοκλήρωση εγκατάστασης" @@ -373,15 +383,29 @@ msgstr "Υπηρεσίες web υπό τον έλεγχό σας" msgid "Log out" msgstr "Αποσύνδεση" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Ξεχάσατε τον κωδικό σας;" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "να με θυμάσαι" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Είσοδος" @@ -396,3 +420,17 @@ msgstr "προηγούμενο" #: templates/part.pagenavi.php:20 msgid "next" msgstr "επόμενο" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/eo/core.po b/l10n/eo/core.po index ae26e1e3476..294292e186f 100644 --- a/l10n/eo/core.po +++ b/l10n/eo/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -149,7 +149,8 @@ msgstr "Kunhavigi per ligilo" msgid "Password protect" msgstr "Protekti per pasvorto" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Pasvorto" @@ -241,8 +242,8 @@ msgstr "Petita" msgid "Login failed!" msgstr "Ensaluto malsukcesis!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Uzantonomo" @@ -302,7 +303,7 @@ msgstr "Redakti kategoriojn" msgid "Add" msgstr "Aldoni" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -318,48 +319,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Krei administran konton" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Progresinta" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Datuma dosierujo" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Agordi la datumbazon" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "estos uzata" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Datumbaza uzanto" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Datumbaza pasvorto" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Datumbaza nomo" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Datumbaza tabelospaco" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Datumbaza gastigo" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Fini la instalon" @@ -371,15 +381,29 @@ msgstr "TTT-servoj sub via kontrolo" msgid "Log out" msgstr "Elsaluti" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Ĉu vi perdis vian pasvorton?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "memori" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Ensaluti" @@ -394,3 +418,17 @@ msgstr "maljena" #: templates/part.pagenavi.php:20 msgid "next" msgstr "jena" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/es/core.po b/l10n/es/core.po index 8ea4c971320..b69469f28d8 100644 --- a/l10n/es/core.po +++ b/l10n/es/core.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" @@ -155,7 +155,8 @@ msgstr "Enlace de compartir con " msgid "Password protect" msgstr "Protegido por contraseña" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Contraseña" @@ -247,8 +248,8 @@ msgstr "Pedido" msgid "Login failed!" msgstr "¡Fallo al iniciar sesión!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Nombre de usuario" @@ -308,7 +309,7 @@ msgstr "Editar categorías" msgid "Add" msgstr "Añadir" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -324,48 +325,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Crea una cuenta de administrador" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avanzado" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Directorio de almacenamiento" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configurar la base de datos" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "se utilizarán" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Usuario de la base de datos" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Contraseña de la base de datos" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nombre de la base de datos" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Espacio de tablas de la base de datos" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Host de la base de datos" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Completar la instalación" @@ -377,15 +387,29 @@ msgstr "servicios web bajo tu control" msgid "Log out" msgstr "Salir" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "¿Has perdido tu contraseña?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "recuérdame" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Entrar" @@ -400,3 +424,17 @@ msgstr "anterior" #: templates/part.pagenavi.php:20 msgid "next" msgstr "siguiente" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/es_AR/core.po b/l10n/es_AR/core.po index 690a7a4423f..004bbbdbd23 100644 --- a/l10n/es_AR/core.po +++ b/l10n/es_AR/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "Compartir con link" msgid "Password protect" msgstr "Proteger con contraseña " -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Contraseña" @@ -239,8 +240,8 @@ msgstr "Pedido" msgid "Login failed!" msgstr "¡Fallo al iniciar sesión!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Nombre de usuario" @@ -300,7 +301,7 @@ msgstr "Editar categorías" msgid "Add" msgstr "Añadir" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Creá una cuenta de administrador" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avanzado" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Directorio de almacenamiento" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configurar la base de datos" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "se utilizarán" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Usuario de la base de datos" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Contraseña de la base de datos" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nombre de la base de datos" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Espacio de tablas de la base de datos" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Host de la base de datos" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Completar la instalación" @@ -369,15 +379,29 @@ msgstr "servicios web sobre los que tenés control" msgid "Log out" msgstr "Cerrar la sesión" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "¿Perdiste tu contraseña?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "recordame" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Entrar" @@ -392,3 +416,17 @@ msgstr "anterior" #: templates/part.pagenavi.php:20 msgid "next" msgstr "siguiente" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/et_EE/core.po b/l10n/et_EE/core.po index 9c49d202768..6476f3b1ae4 100644 --- a/l10n/et_EE/core.po +++ b/l10n/et_EE/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Parool" @@ -239,8 +240,8 @@ msgstr "Kohustuslik" msgid "Login failed!" msgstr "Sisselogimine ebaõnnestus!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Kasutajanimi" @@ -300,7 +301,7 @@ msgstr "Muuda kategooriaid" msgid "Add" msgstr "Lisa" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Loo admini konto" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Lisavalikud" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Andmete kaust" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Seadista andmebaasi" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "kasutatakse" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Andmebaasi kasutaja" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Andmebaasi parool" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Andmebasi nimi" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Andmebaasi host" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Lõpeta seadistamine" @@ -369,15 +379,29 @@ msgstr "veebiteenused sinu kontrolli all" msgid "Log out" msgstr "Logi välja" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Kaotasid oma parooli?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "pea meeles" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Logi sisse" @@ -392,3 +416,17 @@ msgstr "eelm" #: templates/part.pagenavi.php:20 msgid "next" msgstr "järgm" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/eu/core.po b/l10n/eu/core.po index aacda8aaef3..c72e8ac4949 100644 --- a/l10n/eu/core.po +++ b/l10n/eu/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" @@ -148,7 +148,8 @@ msgstr "Elkarbanatu lotura batekin" msgid "Password protect" msgstr "Babestu pasahitzarekin" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Pasahitza" @@ -240,8 +241,8 @@ msgstr "Eskatuta" msgid "Login failed!" msgstr "Saio hasierak huts egin du!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Erabiltzaile izena" @@ -301,7 +302,7 @@ msgstr "Editatu kategoriak" msgid "Add" msgstr "Gehitu" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -317,48 +318,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Sortu kudeatzaile kontu bat" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Aurreratua" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Datuen karpeta" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Konfiguratu datu basea" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "erabiliko da" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Datubasearen erabiltzailea" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Datubasearen pasahitza" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Datubasearen izena" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Datu basearen taula-lekua" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Datubasearen hostalaria" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Bukatu konfigurazioa" @@ -370,15 +380,29 @@ msgstr "web zerbitzuak zure kontrolpean" msgid "Log out" msgstr "Saioa bukatu" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Galdu duzu pasahitza?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "gogoratu" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Hasi saioa" @@ -393,3 +417,17 @@ msgstr "aurrekoa" #: templates/part.pagenavi.php:20 msgid "next" msgstr "hurrengoa" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/eu_ES/core.po b/l10n/eu_ES/core.po index 5c711824ef1..a83a3117caf 100644 --- a/l10n/eu_ES/core.po +++ b/l10n/eu_ES/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n" "MIME-Version: 1.0\n" @@ -146,7 +146,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "" @@ -238,8 +239,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "" @@ -299,7 +300,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -315,48 +316,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "" @@ -368,15 +378,29 @@ msgstr "" msgid "Log out" msgstr "" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -391,3 +415,17 @@ msgstr "" #: templates/part.pagenavi.php:20 msgid "next" msgstr "" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/fa/core.po b/l10n/fa/core.po index 5b5725416a3..beb8c04f5ff 100644 --- a/l10n/fa/core.po +++ b/l10n/fa/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "گذرواژه" @@ -239,8 +240,8 @@ msgstr "درخواست" msgid "Login failed!" msgstr "ورود ناموفق بود" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "شناسه" @@ -300,7 +301,7 @@ msgstr "ویرایش گروه ها" msgid "Add" msgstr "افزودن" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "لطفا یک شناسه برای مدیر بسازید" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "حرفه ای" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "پوشه اطلاعاتی" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "پایگاه داده برنامه ریزی شدند" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "استفاده خواهد شد" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "شناسه پایگاه داده" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "پسورد پایگاه داده" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "نام پایگاه داده" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "هاست پایگاه داده" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "اتمام نصب" @@ -369,15 +379,29 @@ msgstr "سرویس وب تحت کنترل شما" msgid "Log out" msgstr "خروج" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "آیا گذرواژه تان را به یاد نمی آورید؟" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "بیاد آوری" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "ورود" @@ -392,3 +416,17 @@ msgstr "بازگشت" #: templates/part.pagenavi.php:20 msgid "next" msgstr "بعدی" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/fi/core.po b/l10n/fi/core.po index 3c0aadf84f6..b8ba8133417 100644 --- a/l10n/fi/core.po +++ b/l10n/fi/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n" "MIME-Version: 1.0\n" @@ -146,7 +146,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "" @@ -238,8 +239,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "" @@ -299,7 +300,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -315,48 +316,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "" @@ -368,15 +378,29 @@ msgstr "" msgid "Log out" msgstr "" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -391,3 +415,17 @@ msgstr "" #: templates/part.pagenavi.php:20 msgid "next" msgstr "" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/fi_FI/core.po b/l10n/fi_FI/core.po index f44f056a9cc..313e7668c11 100644 --- a/l10n/fi_FI/core.po +++ b/l10n/fi_FI/core.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" @@ -153,7 +153,8 @@ msgstr "Jaa linkillä" msgid "Password protect" msgstr "Suojaa salasanalla" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Salasana" @@ -245,8 +246,8 @@ msgstr "Tilattu" msgid "Login failed!" msgstr "Kirjautuminen epäonnistui!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Käyttäjätunnus" @@ -306,7 +307,7 @@ msgstr "Muokkaa luokkia" msgid "Add" msgstr "Lisää" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -322,48 +323,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Luo ylläpitäjän tunnus" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Lisäasetukset" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Datakansio" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Muokkaa tietokantaa" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "käytetään" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Tietokannan käyttäjä" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Tietokannan salasana" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Tietokannan nimi" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Tietokannan taulukkotila" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Tietokantapalvelin" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Viimeistele asennus" @@ -375,15 +385,29 @@ msgstr "verkkopalvelut hallinnassasi" msgid "Log out" msgstr "Kirjaudu ulos" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Unohditko salasanasi?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "muista" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Kirjaudu sisään" @@ -398,3 +422,17 @@ msgstr "edellinen" #: templates/part.pagenavi.php:20 msgid "next" msgstr "seuraava" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/fr/core.po b/l10n/fr/core.po index 03013b660f8..fa5216a8761 100644 --- a/l10n/fr/core.po +++ b/l10n/fr/core.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" @@ -153,7 +153,8 @@ msgstr "Partager via lien" msgid "Password protect" msgstr "Protéger par un mot de passe" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Mot de passe" @@ -245,8 +246,8 @@ msgstr "Demande envoyée" msgid "Login failed!" msgstr "Nom d'utilisateur ou e-mail invalide" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Nom d'utilisateur" @@ -306,64 +307,73 @@ msgstr "Modifier les catégories" msgid "Add" msgstr "Ajouter" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" -msgstr "" +msgstr "Avertissement de sécutité" #: templates/installation.php:24 msgid "" "No secure random number generator is available, please enable the PHP " "OpenSSL extension." -msgstr "" +msgstr "Aucun générateur de nombre aléatoire sécurisé n'est disponible, veuillez activer l'extension PHP OpenSSL" #: templates/installation.php:26 msgid "" "Without a secure random number generator an attacker may be able to predict " "password reset tokens and take over your account." +msgstr "Sans générateur de nombre aléatoire sécurisé, un attaquant peut être en mesure de prédire les jetons de réinitialisation du mot de passe, et ainsi prendre le contrôle de votre compte utilisateur." + +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:30 +#: templates/installation.php:36 msgid "Create an admin account" msgstr "Créer un compte administrateur" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avancé" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Répertoire des données" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configurer la base de données" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "sera utilisé" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Utilisateur pour la base de données" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Mot de passe de la base de données" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nom de la base de données" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Tablespaces de la base de données" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Serveur de la base de données" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Terminer l'installation" @@ -375,15 +385,29 @@ msgstr "services web sous votre contrôle" msgid "Log out" msgstr "Se déconnecter" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Mot de passe perdu ?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "se souvenir de moi" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Connexion" @@ -398,3 +422,17 @@ msgstr "précédent" #: templates/part.pagenavi.php:20 msgid "next" msgstr "suivant" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po index ef847eb4878..881d3febfb9 100644 --- a/l10n/fr/settings.po +++ b/l10n/fr/settings.po @@ -19,9 +19,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-09 02:03+0200\n" -"PO-Revision-Date: 2012-10-09 00:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 15:26+0000\n" +"Last-Translator: Romain DEP. \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,16 +33,11 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "Impossible de charger la liste depuis l'App Store" -#: ajax/creategroup.php:9 ajax/removeuser.php:13 ajax/setquota.php:18 -#: ajax/togglegroups.php:15 -msgid "Authentication error" -msgstr "Erreur d'authentification" - -#: ajax/creategroup.php:19 +#: ajax/creategroup.php:12 msgid "Group already exists" msgstr "Ce groupe existe déjà" -#: ajax/creategroup.php:28 +#: ajax/creategroup.php:21 msgid "Unable to add group" msgstr "Impossible d'ajouter le groupe" @@ -70,7 +65,11 @@ msgstr "Requête invalide" msgid "Unable to delete group" msgstr "Impossible de supprimer le groupe" -#: ajax/removeuser.php:22 +#: ajax/removeuser.php:18 ajax/setquota.php:18 ajax/togglegroups.php:15 +msgid "Authentication error" +msgstr "Erreur d'authentification" + +#: ajax/removeuser.php:27 msgid "Unable to delete user" msgstr "Impossible de supprimer l'utilisateur" @@ -100,7 +99,7 @@ msgstr "Activer" msgid "Saving..." msgstr "Sauvegarde..." -#: personal.php:47 personal.php:48 +#: personal.php:42 personal.php:43 msgid "__language_name__" msgstr "Français" @@ -197,7 +196,7 @@ msgstr "Ajoutez votre application" #: templates/apps.php:11 msgid "More Apps" -msgstr "" +msgstr "Plus d'applications…" #: templates/apps.php:27 msgid "Select an App" diff --git a/l10n/gl/core.po b/l10n/gl/core.po index 2e0bf2f9440..ba2c90991a2 100644 --- a/l10n/gl/core.po +++ b/l10n/gl/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -148,7 +148,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Contrasinal" @@ -240,8 +241,8 @@ msgstr "Solicitado" msgid "Login failed!" msgstr "Fallou a conexión." -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Nome de usuario" @@ -301,7 +302,7 @@ msgstr "Editar categorias" msgid "Add" msgstr "Engadir" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -317,48 +318,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Crear unha contra de administrador" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avanzado" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Cartafol de datos" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configurar a base de datos" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "será utilizado" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Usuario da base de datos" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Contrasinal da base de datos" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nome da base de datos" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Servidor da base de datos" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Rematar configuración" @@ -370,15 +380,29 @@ msgstr "servizos web baixo o seu control" msgid "Log out" msgstr "Desconectar" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Perdeu o contrasinal?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "lembrar" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Conectar" @@ -393,3 +417,17 @@ msgstr "anterior" #: templates/part.pagenavi.php:20 msgid "next" msgstr "seguinte" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/he/core.po b/l10n/he/core.po index eb683e2fd22..ba5968dffac 100644 --- a/l10n/he/core.po +++ b/l10n/he/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -150,7 +150,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "ססמה" @@ -242,8 +243,8 @@ msgstr "נדרש" msgid "Login failed!" msgstr "הכניסה נכשלה!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "שם משתמש" @@ -303,7 +304,7 @@ msgstr "עריכת הקטגוריות" msgid "Add" msgstr "הוספה" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -319,48 +320,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "יצירת חשבון מנהל" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "מתקדם" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "תיקיית נתונים" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "הגדרת מסד הנתונים" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "ינוצלו" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "שם משתמש במסד הנתונים" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "ססמת מסד הנתונים" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "שם מסד הנתונים" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "מרחב הכתובות של מסד הנתונים" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "שרת בסיס נתונים" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "סיום התקנה" @@ -372,15 +382,29 @@ msgstr "שירותי רשת בשליטתך" msgid "Log out" msgstr "התנתקות" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "שכחת את ססמתך?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "שמירת הססמה" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "כניסה" @@ -395,3 +419,17 @@ msgstr "הקודם" #: templates/part.pagenavi.php:20 msgid "next" msgstr "הבא" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/hi/core.po b/l10n/hi/core.po index de5a741a57d..9f9f0bf0823 100644 --- a/l10n/hi/core.po +++ b/l10n/hi/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "पासवर्ड" @@ -239,8 +240,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "प्रयोक्ता का नाम" @@ -300,7 +301,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "व्यवस्थापक खाता बनाएँ" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "उन्नत" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "डेटाबेस कॉन्फ़िगर करें " -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "डेटाबेस उपयोगकर्ता" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "डेटाबेस पासवर्ड" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "सेटअप समाप्त करे" @@ -369,15 +379,29 @@ msgstr "" msgid "Log out" msgstr "" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -392,3 +416,17 @@ msgstr "पिछला" #: templates/part.pagenavi.php:20 msgid "next" msgstr "अगला" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/hr/core.po b/l10n/hr/core.po index 1e6530210b2..9ab1d15928b 100644 --- a/l10n/hr/core.po +++ b/l10n/hr/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -150,7 +150,8 @@ msgstr "Djeli preko link-a" msgid "Password protect" msgstr "Zaštiti lozinkom" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Lozinka" @@ -242,8 +243,8 @@ msgstr "Zahtijevano" msgid "Login failed!" msgstr "Prijava nije uspjela!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Korisničko ime" @@ -303,7 +304,7 @@ msgstr "Uredi kategorije" msgid "Add" msgstr "Dodaj" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -319,48 +320,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Stvori administratorski račun" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Dodatno" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Mapa baze podataka" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Konfiguriraj bazu podataka" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "će se koristiti" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Korisnik baze podataka" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Lozinka baze podataka" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Ime baze podataka" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Database tablespace" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Poslužitelj baze podataka" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Završi postavljanje" @@ -372,15 +382,29 @@ msgstr "web usluge pod vašom kontrolom" msgid "Log out" msgstr "Odjava" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Izgubili ste lozinku?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "zapamtiti" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Prijava" @@ -395,3 +419,17 @@ msgstr "prethodan" #: templates/part.pagenavi.php:20 msgid "next" msgstr "sljedeći" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/hu_HU/core.po b/l10n/hu_HU/core.po index 1a43add411a..20cf6de2f5d 100644 --- a/l10n/hu_HU/core.po +++ b/l10n/hu_HU/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" @@ -149,7 +149,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Jelszó" @@ -241,8 +242,8 @@ msgstr "Kérés elküldve" msgid "Login failed!" msgstr "Belépés sikertelen!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Felhasználónév" @@ -302,7 +303,7 @@ msgstr "Kategóriák szerkesztése" msgid "Add" msgstr "Hozzáadás" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -318,48 +319,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Rendszergazdafiók létrehozása" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Haladó" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Adatkönyvtár" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Adatbázis konfigurálása" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "használva lesz" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Adatbázis felhasználónév" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Adatbázis jelszó" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Adatbázis név" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Adatbázis szerver" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Beállítás befejezése" @@ -371,15 +381,29 @@ msgstr "webszolgáltatások az irányításod alatt" msgid "Log out" msgstr "Kilépés" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Elfelejtett jelszó?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "emlékezzen" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Bejelentkezés" @@ -394,3 +418,17 @@ msgstr "Előző" #: templates/part.pagenavi.php:20 msgid "next" msgstr "Következő" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/hy/core.po b/l10n/hy/core.po index 7837ad8b5e6..92b68ed29b0 100644 --- a/l10n/hy/core.po +++ b/l10n/hy/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n" "MIME-Version: 1.0\n" @@ -146,7 +146,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "" @@ -238,8 +239,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "" @@ -299,7 +300,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -315,48 +316,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "" @@ -368,15 +378,29 @@ msgstr "" msgid "Log out" msgstr "" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -391,3 +415,17 @@ msgstr "" #: templates/part.pagenavi.php:20 msgid "next" msgstr "" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ia/core.po b/l10n/ia/core.po index 5863372d9d7..f194ff40eb6 100644 --- a/l10n/ia/core.po +++ b/l10n/ia/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Contrasigno" @@ -239,8 +240,8 @@ msgstr "Requestate" msgid "Login failed!" msgstr "Initio de session fallite!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Nomine de usator" @@ -300,7 +301,7 @@ msgstr "Modificar categorias" msgid "Add" msgstr "Adder" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Crear un conto de administration" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avantiate" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Dossier de datos" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configurar le base de datos" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "essera usate" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Usator de base de datos" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Contrasigno de base de datos" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nomine de base de datos" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Hospite de base de datos" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "" @@ -369,15 +379,29 @@ msgstr "servicios web sub tu controlo" msgid "Log out" msgstr "Clauder le session" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Tu perdeva le contrasigno?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "memora" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Aperir session" @@ -392,3 +416,17 @@ msgstr "prev" #: templates/part.pagenavi.php:20 msgid "next" msgstr "prox" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/id/core.po b/l10n/id/core.po index b55ed5a2447..2f45fed4aaf 100644 --- a/l10n/id/core.po +++ b/l10n/id/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+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" @@ -149,7 +149,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Password" @@ -241,8 +242,8 @@ msgstr "Telah diminta" msgid "Login failed!" msgstr "Login gagal!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Username" @@ -302,7 +303,7 @@ msgstr "Edit kategori" msgid "Add" msgstr "Tambahkan" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -318,48 +319,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Buat sebuah akun admin" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Tingkat Lanjut" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Folder data" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Konfigurasi database" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "akan digunakan" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Pengguna database" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Password database" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nama database" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Host database" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Selesaikan instalasi" @@ -371,15 +381,29 @@ msgstr "web service dibawah kontrol anda" msgid "Log out" msgstr "Keluar" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Lupa password anda?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "selalu login" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Masuk" @@ -394,3 +418,17 @@ msgstr "sebelum" #: templates/part.pagenavi.php:20 msgid "next" msgstr "selanjutnya" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/id_ID/core.po b/l10n/id_ID/core.po index ed267ebbd64..bda0015060e 100644 --- a/l10n/id_ID/core.po +++ b/l10n/id_ID/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n" "MIME-Version: 1.0\n" @@ -146,7 +146,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "" @@ -238,8 +239,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "" @@ -299,7 +300,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -315,48 +316,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "" @@ -368,15 +378,29 @@ msgstr "" msgid "Log out" msgstr "" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -391,3 +415,17 @@ msgstr "" #: templates/part.pagenavi.php:20 msgid "next" msgstr "" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/it/core.po b/l10n/it/core.po index 300d95c864f..656400c8b7d 100644 --- a/l10n/it/core.po +++ b/l10n/it/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" @@ -151,7 +151,8 @@ msgstr "Condividi con collegamento" msgid "Password protect" msgstr "Proteggi con password" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Password" @@ -243,8 +244,8 @@ msgstr "Richiesto" msgid "Login failed!" msgstr "Accesso non riuscito!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Nome utente" @@ -304,64 +305,73 @@ msgstr "Modifica le categorie" msgid "Add" msgstr "Aggiungi" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" -msgstr "" +msgstr "Avviso di sicurezza" #: templates/installation.php:24 msgid "" "No secure random number generator is available, please enable the PHP " "OpenSSL extension." -msgstr "" +msgstr "Non è disponibile alcun generatore di numeri casuali sicuro. Abilita l'estensione OpenSSL di PHP" #: templates/installation.php:26 msgid "" "Without a secure random number generator an attacker may be able to predict " "password reset tokens and take over your account." +msgstr "Senza un generatore di numeri casuali sicuro, un malintenzionato potrebbe riuscire a individuare i token di ripristino delle password e impossessarsi del tuo account." + +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:30 +#: templates/installation.php:36 msgid "Create an admin account" msgstr "Crea un account amministratore" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avanzate" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Cartella dati" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configura il database" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "sarà utilizzato" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Utente del database" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Password del database" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nome del database" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Spazio delle tabelle del database" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Host del database" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Termina la configurazione" @@ -373,15 +383,29 @@ msgstr "servizi web nelle tue mani" msgid "Log out" msgstr "Esci" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Hai perso la password?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "ricorda" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Accedi" @@ -396,3 +420,17 @@ msgstr "precedente" #: templates/part.pagenavi.php:20 msgid "next" msgstr "successivo" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ja_JP/core.po b/l10n/ja_JP/core.po index d7bb736fa7d..4e57760cc55 100644 --- a/l10n/ja_JP/core.po +++ b/l10n/ja_JP/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" @@ -148,7 +148,8 @@ msgstr "URLリンクで共有" msgid "Password protect" msgstr "パスワード保護" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "パスワード" @@ -240,8 +241,8 @@ msgstr "送信されました" msgid "Login failed!" msgstr "ログインに失敗しました!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "ユーザ名" @@ -301,64 +302,73 @@ msgstr "カテゴリを編集" msgid "Add" msgstr "追加" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" -msgstr "" +msgstr "セキュリティ警告" #: templates/installation.php:24 msgid "" "No secure random number generator is available, please enable the PHP " "OpenSSL extension." -msgstr "" +msgstr "セキュアな乱数生成器が利用可能ではありません。PHPのOpenSSL拡張を有効にして下さい。" #: templates/installation.php:26 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:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:30 +#: templates/installation.php:36 msgid "Create an admin account" msgstr "管理者アカウントを作成してください" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "詳細設定" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "データフォルダ" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "データベースを設定してください" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "が使用されます" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "データベースのユーザ名" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "データベースのパスワード" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "データベース名" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "データベースの表領域" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "データベースのホスト名" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "セットアップを完了します" @@ -370,15 +380,29 @@ msgstr "管理下にあるウェブサービス" msgid "Log out" msgstr "ログアウト" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "パスワードを忘れましたか?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "パスワードを記憶する" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "ログイン" @@ -393,3 +417,17 @@ msgstr "前" #: templates/part.pagenavi.php:20 msgid "next" msgstr "次" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po index 17fb4b3c392..88c1e5402c1 100644 --- a/l10n/ja_JP/settings.po +++ b/l10n/ja_JP/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-14 02:05+0200\n" -"PO-Revision-Date: 2012-10-13 06:57+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 07:29+0000\n" "Last-Translator: Daisuke Deguchi \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" @@ -23,16 +23,11 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "アプリストアからリストをロードできません" -#: ajax/creategroup.php:9 ajax/removeuser.php:18 ajax/setquota.php:18 -#: ajax/togglegroups.php:15 -msgid "Authentication error" -msgstr "認証エラー" - -#: ajax/creategroup.php:19 +#: ajax/creategroup.php:12 msgid "Group already exists" msgstr "グループは既に存在しています" -#: ajax/creategroup.php:28 +#: ajax/creategroup.php:21 msgid "Unable to add group" msgstr "グループを追加できません" @@ -60,6 +55,10 @@ msgstr "無効なリクエストです" msgid "Unable to delete group" msgstr "グループを削除できません" +#: ajax/removeuser.php:18 ajax/setquota.php:18 ajax/togglegroups.php:15 +msgid "Authentication error" +msgstr "認証エラー" + #: ajax/removeuser.php:27 msgid "Unable to delete user" msgstr "ユーザを削除できません" @@ -228,7 +227,7 @@ msgstr "解答" #: templates/personal.php:8 #, php-format msgid "You have used %s of the available %s" -msgstr "現在、%s / %s を利用しています" +msgstr "現在、 %s / %s を利用しています" #: templates/personal.php:12 msgid "Desktop and Mobile Syncing Clients" diff --git a/l10n/ko/core.po b/l10n/ko/core.po index 98ff5bf9579..79125bc4578 100644 --- a/l10n/ko/core.po +++ b/l10n/ko/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -148,7 +148,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "암호" @@ -240,8 +241,8 @@ msgstr "요청함" msgid "Login failed!" msgstr "로그인 실패!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "사용자 이름" @@ -301,7 +302,7 @@ msgstr "카테고리 편집" msgid "Add" msgstr "추가" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -317,48 +318,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "관리자 계정을 만드십시오" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "고급" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "자료 폴더" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "데이터베이스 구성" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "사용 될 것임" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "데이터베이스 사용자" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "데이터베이스 암호" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "데이터베이스 이름" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "데이터베이스 호스트" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "설치 완료" @@ -370,15 +380,29 @@ msgstr "내가 관리하는 웹 서비스" msgid "Log out" msgstr "로그아웃" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "암호를 잊으셨습니까?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "기억하기" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "로그인" @@ -393,3 +417,17 @@ msgstr "이전" #: templates/part.pagenavi.php:20 msgid "next" msgstr "다음" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ku_IQ/core.po b/l10n/ku_IQ/core.po index f4776ae7a8d..56a268f7ba1 100644 --- a/l10n/ku_IQ/core.po +++ b/l10n/ku_IQ/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "وشەی تێپەربو" @@ -239,8 +240,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "" @@ -300,7 +301,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "هه‌ڵبژاردنی پیشكه‌وتوو" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "زانیاری فۆڵده‌ر" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "به‌كارهێنه‌ری داتابه‌یس" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "وشه‌ی نهێنی داتا به‌یس" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "ناوی داتابه‌یس" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "هۆستی داتابه‌یس" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "كۆتایی هات ده‌ستكاریه‌كان" @@ -369,15 +379,29 @@ msgstr "" msgid "Log out" msgstr "چوونەدەرەوە" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -392,3 +416,17 @@ msgstr "پێشتر" #: templates/part.pagenavi.php:20 msgid "next" msgstr "دواتر" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/lb/core.po b/l10n/lb/core.po index 63634fa60be..eeafec6d3bd 100644 --- a/l10n/lb/core.po +++ b/l10n/lb/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Passwuert" @@ -239,8 +240,8 @@ msgstr "Gefrot" msgid "Login failed!" msgstr "Falschen Login!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Benotzernumm" @@ -300,7 +301,7 @@ msgstr "Kategorien editéieren" msgid "Add" msgstr "Bäisetzen" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "En Admin Account uleeën" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Advanced" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Daten Dossier" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Datebank konfiguréieren" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "wärt benotzt ginn" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Datebank Benotzer" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Datebank Passwuert" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Datebank Numm" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Datebank Tabelle-Gréisst" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Datebank Server" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Installatioun ofschléissen" @@ -369,15 +379,29 @@ msgstr "Web Servicer ënnert denger Kontroll" msgid "Log out" msgstr "Ausloggen" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Passwuert vergiess?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "verhalen" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Log dech an" @@ -392,3 +416,17 @@ msgstr "zeréck" #: templates/part.pagenavi.php:20 msgid "next" msgstr "weider" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po index 638e40bdbe9..529ba10793d 100644 --- a/l10n/lt_LT/core.po +++ b/l10n/lt_LT/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Slaptažodis" @@ -239,8 +240,8 @@ msgstr "Užklausta" msgid "Login failed!" msgstr "Prisijungti nepavyko!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Prisijungimo vardas" @@ -300,7 +301,7 @@ msgstr "Redaguoti kategorijas" msgid "Add" msgstr "Pridėti" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Sukurti administratoriaus paskyrą" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Išplėstiniai" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Duomenų katalogas" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Nustatyti duomenų bazę" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "bus naudojama" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Duomenų bazės vartotojas" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Duomenų bazės slaptažodis" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Duomenų bazės pavadinimas" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Duomenų bazės serveris" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Baigti diegimą" @@ -369,15 +379,29 @@ msgstr "jūsų valdomos web paslaugos" msgid "Log out" msgstr "Atsijungti" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Pamiršote slaptažodį?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "prisiminti" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Prisijungti" @@ -392,3 +416,17 @@ msgstr "atgal" #: templates/part.pagenavi.php:20 msgid "next" msgstr "kitas" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/lv/core.po b/l10n/lv/core.po index d1f63690f9b..dbc6b29788e 100644 --- a/l10n/lv/core.po +++ b/l10n/lv/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Parole" @@ -239,8 +240,8 @@ msgstr "Obligāts" msgid "Login failed!" msgstr "Neizdevās ielogoties." -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Lietotājvārds" @@ -300,7 +301,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Datu mape" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Nokonfigurēt datubāzi" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "tiks izmantots" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Datubāzes lietotājs" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Datubāzes parole" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Datubāzes nosaukums" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Datubāzes mājvieta" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Pabeigt uzstādījumus" @@ -369,15 +379,29 @@ msgstr "" msgid "Log out" msgstr "Izlogoties" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Aizmirsāt paroli?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "atcerēties" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Ielogoties" @@ -392,3 +416,17 @@ msgstr "iepriekšējā" #: templates/part.pagenavi.php:20 msgid "next" msgstr "nākamā" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/mk/core.po b/l10n/mk/core.po index 327bd73fdff..e3ef1875d13 100644 --- a/l10n/mk/core.po +++ b/l10n/mk/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -149,7 +149,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Лозинка" @@ -241,8 +242,8 @@ msgstr "Побарано" msgid "Login failed!" msgstr "Најавата не успеа!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Корисничко име" @@ -302,7 +303,7 @@ msgstr "Уреди категории" msgid "Add" msgstr "Додади" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -318,48 +319,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Направете администраторска сметка" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Напредно" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Фолдер со податоци" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Конфигурирај ја базата" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "ќе биде користено" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Корисник на база" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Лозинка на база" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Име на база" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Сервер со база" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Заврши го подесувањето" @@ -371,15 +381,29 @@ msgstr "веб сервиси под Ваша контрола" msgid "Log out" msgstr "Одјава" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Ја заборавивте лозинката?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "запамти" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Најава" @@ -394,3 +418,17 @@ msgstr "претходно" #: templates/part.pagenavi.php:20 msgid "next" msgstr "следно" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ms_MY/core.po b/l10n/ms_MY/core.po index 0d823cc7b4f..d336f9d5447 100644 --- a/l10n/ms_MY/core.po +++ b/l10n/ms_MY/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -149,7 +149,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Kata laluan" @@ -241,8 +242,8 @@ msgstr "Meminta" msgid "Login failed!" msgstr "Log masuk gagal!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Nama pengguna" @@ -302,7 +303,7 @@ msgstr "Edit kategori" msgid "Add" msgstr "Tambah" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -318,48 +319,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "buat akaun admin" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Maju" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Fail data" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Konfigurasi pangkalan data" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "akan digunakan" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Nama pengguna pangkalan data" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Kata laluan pangkalan data" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nama pangkalan data" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Hos pangkalan data" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Setup selesai" @@ -371,15 +381,29 @@ msgstr "Perkhidmatan web di bawah kawalan anda" msgid "Log out" msgstr "Log keluar" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Hilang kata laluan?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "ingat" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Log masuk" @@ -394,3 +418,17 @@ msgstr "sebelum" #: templates/part.pagenavi.php:20 msgid "next" msgstr "seterus" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po index c2c79c1e459..baab6b280d8 100644 --- a/l10n/nb_NO/core.po +++ b/l10n/nb_NO/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -151,7 +151,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Passord" @@ -243,8 +244,8 @@ msgstr "Anmodning" msgid "Login failed!" msgstr "Innloggingen var ikke vellykket." -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Brukernavn" @@ -304,7 +305,7 @@ msgstr "Rediger kategorier" msgid "Add" msgstr "Legg til" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -320,48 +321,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "opprett en administrator-konto" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avansert" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Datamappe" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Konfigurer databasen" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "vil bli brukt" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Databasebruker" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Databasepassord" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Databasenavn" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Databasevert" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Fullfør oppsetting" @@ -373,15 +383,29 @@ msgstr "nettjenester under din kontroll" msgid "Log out" msgstr "Logg ut" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Mistet passordet ditt?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "husk" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Logg inn" @@ -396,3 +420,17 @@ msgstr "forrige" #: templates/part.pagenavi.php:20 msgid "next" msgstr "neste" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/nl/core.po b/l10n/nl/core.po index 320ba85ff36..b4220820df5 100644 --- a/l10n/nl/core.po +++ b/l10n/nl/core.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" @@ -154,7 +154,8 @@ msgstr "Deel met link" msgid "Password protect" msgstr "Passeerwoord beveiliging" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Wachtwoord" @@ -246,8 +247,8 @@ msgstr "Gevraagd" msgid "Login failed!" msgstr "Login mislukt!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Gebruikersnaam" @@ -307,7 +308,7 @@ msgstr "Wijzigen categorieën" msgid "Add" msgstr "Toevoegen" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -323,48 +324,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Maak een beheerdersaccount aan" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Geavanceerd" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Gegevensmap" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configureer de databank" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "zal gebruikt worden" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Gebruiker databank" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Wachtwoord databank" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Naam databank" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Database tablespace" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Database server" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Installatie afronden" @@ -376,15 +386,29 @@ msgstr "webdiensten die je beheerst" msgid "Log out" msgstr "Afmelden" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Uw wachtwoord vergeten?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "onthoud gegevens" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Meld je aan" @@ -399,3 +423,17 @@ msgstr "vorige" #: templates/part.pagenavi.php:20 msgid "next" msgstr "volgende" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/nn_NO/core.po b/l10n/nn_NO/core.po index 50d54f08e90..36653dc6fb7 100644 --- a/l10n/nn_NO/core.po +++ b/l10n/nn_NO/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -148,7 +148,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Passord" @@ -240,8 +241,8 @@ msgstr "Førespurt" msgid "Login failed!" msgstr "Feil ved innlogging!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Brukarnamn" @@ -301,7 +302,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -317,48 +318,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Lag ein admin-konto" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avansert" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Datamappe" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Konfigurer databasen" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "vil bli nytta" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Databasebrukar" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Databasepassord" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Databasenamn" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Databasetenar" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Fullfør oppsettet" @@ -370,15 +380,29 @@ msgstr "Vev tjenester under din kontroll" msgid "Log out" msgstr "Logg ut" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Gløymt passordet?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "hugs" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Logg inn" @@ -393,3 +417,17 @@ msgstr "førre" #: templates/part.pagenavi.php:20 msgid "next" msgstr "neste" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/oc/core.po b/l10n/oc/core.po index b8653a0809a..2e89d694c30 100644 --- a/l10n/oc/core.po +++ b/l10n/oc/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "Parteja amb lo ligam" msgid "Password protect" msgstr "Parat per senhal" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Senhal" @@ -239,8 +240,8 @@ msgstr "Requesit" msgid "Login failed!" msgstr "Fracàs de login" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Nom d'usancièr" @@ -300,7 +301,7 @@ msgstr "Edita categorias" msgid "Add" msgstr "Ajusta" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Crea un compte admin" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avançat" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Dorsièr de donadas" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configura la basa de donadas" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "serà utilizat" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Usancièr de la basa de donadas" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Senhal de la basa de donadas" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nom de la basa de donadas" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Espandi de taula de basa de donadas" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Òste de basa de donadas" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Configuracion acabada" @@ -369,15 +379,29 @@ msgstr "Services web jos ton contraròtle" msgid "Log out" msgstr "Sortida" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "L'as perdut lo senhal ?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "bremba-te" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Dintrada" @@ -392,3 +416,17 @@ msgstr "dariièr" #: templates/part.pagenavi.php:20 msgid "next" msgstr "venent" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/pl/core.po b/l10n/pl/core.po index f636d052421..7e47de56d83 100644 --- a/l10n/pl/core.po +++ b/l10n/pl/core.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" @@ -154,7 +154,8 @@ msgstr "Współdziel z link" msgid "Password protect" msgstr "Zabezpieczone hasłem" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Hasło" @@ -246,8 +247,8 @@ msgstr "Żądane" msgid "Login failed!" msgstr "Nie udało się zalogować!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Nazwa użytkownika" @@ -307,7 +308,7 @@ msgstr "Edytuj kategorię" msgid "Add" msgstr "Dodaj" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -323,48 +324,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Tworzenie konta administratora" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Zaawansowane" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Katalog danych" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Konfiguracja bazy danych" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "zostanie użyte" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Użytkownik bazy danych" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Hasło do bazy danych" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nazwa bazy danych" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Obszar tabel bazy danych" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Komputer bazy danych" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Zakończ konfigurowanie" @@ -376,15 +386,29 @@ msgstr "usługi internetowe pod kontrolą" msgid "Log out" msgstr "Wylogowuje użytkownika" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Nie pamiętasz hasła?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "Zapamiętanie" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Zaloguj" @@ -399,3 +423,17 @@ msgstr "wstecz" #: templates/part.pagenavi.php:20 msgid "next" msgstr "naprzód" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/pl_PL/core.po b/l10n/pl_PL/core.po index a4e184f4e41..8cf58274487 100644 --- a/l10n/pl_PL/core.po +++ b/l10n/pl_PL/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -146,7 +146,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "" @@ -238,8 +239,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "" @@ -299,7 +300,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -315,48 +316,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "" @@ -368,15 +378,29 @@ msgstr "" msgid "Log out" msgstr "" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -391,3 +415,17 @@ msgstr "" #: templates/part.pagenavi.php:20 msgid "next" msgstr "" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po index 1f1d243ea0f..990a977673d 100644 --- a/l10n/pt_BR/core.po +++ b/l10n/pt_BR/core.po @@ -5,6 +5,7 @@ # Translators: # , 2011. # Guilherme Maluf Balzana , 2012. +# , 2012. # , 2012. # Thiago Vicente , 2012. # Unforgiving Fallout <>, 2012. @@ -13,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -152,7 +153,8 @@ msgstr "Compartilhar com link" msgid "Password protect" msgstr "Proteger com senha" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Senha" @@ -244,8 +246,8 @@ msgstr "Solicitado" msgid "Login failed!" msgstr "Falha ao fazer o login!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Nome de Usuário" @@ -305,64 +307,73 @@ msgstr "Editar categorias" msgid "Add" msgstr "Adicionar" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" -msgstr "" +msgstr "Aviso de Segurança" #: templates/installation.php:24 msgid "" "No secure random number generator is available, please enable the PHP " "OpenSSL extension." -msgstr "" +msgstr "Nenhum gerador de número aleatório de segurança disponível. Habilite a extensão OpenSSL do PHP." #: templates/installation.php:26 msgid "" "Without a secure random number generator an attacker may be able to predict " "password reset tokens and take over your account." +msgstr "Sem um gerador de número aleatório de segurança, um invasor pode ser capaz de prever os símbolos de redefinição de senhas e assumir sua conta." + +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:30 +#: templates/installation.php:36 msgid "Create an admin account" msgstr "Criar uma conta de administrador" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avançado" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Pasta de dados" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configurar o banco de dados" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "será usado" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Usuário de banco de dados" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Senha do banco de dados" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nome do banco de dados" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Espaço de tabela do banco de dados" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Banco de dados do host" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Concluir configuração" @@ -374,15 +385,29 @@ msgstr "web services sob seu controle" msgid "Log out" msgstr "Sair" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Esqueçeu sua senha?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "lembrete" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Log in" @@ -397,3 +422,17 @@ msgstr "anterior" #: templates/part.pagenavi.php:20 msgid "next" msgstr "próximo" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po index a5287196930..000d5c3ff38 100644 --- a/l10n/pt_PT/core.po +++ b/l10n/pt_PT/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" @@ -150,7 +150,8 @@ msgstr "Partilhar com link" msgid "Password protect" msgstr "Proteger com palavra-passe" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Palavra chave" @@ -242,8 +243,8 @@ msgstr "Pedido" msgid "Login failed!" msgstr "Conexão falhado!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Utilizador" @@ -303,7 +304,7 @@ msgstr "Editar categorias" msgid "Add" msgstr "Adicionar" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -319,48 +320,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Criar uma conta administrativa" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avançado" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Pasta de dados" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configure a base de dados" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "vai ser usada" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Utilizador da base de dados" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Password da base de dados" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Nome da base de dados" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Tablespace da base de dados" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Host da base de dados" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Acabar instalação" @@ -372,15 +382,29 @@ msgstr "serviços web sob o seu controlo" msgid "Log out" msgstr "Sair" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Esqueceu a sua password?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "lembrar" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Entrar" @@ -395,3 +419,17 @@ msgstr "anterior" #: templates/part.pagenavi.php:20 msgid "next" msgstr "seguinte" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ro/core.po b/l10n/ro/core.po index 8858cc6e71e..27279e061fd 100644 --- a/l10n/ro/core.po +++ b/l10n/ro/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -150,7 +150,8 @@ msgstr "Partajare cu legătură" msgid "Password protect" msgstr "Protejare cu parolă" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Parola" @@ -242,8 +243,8 @@ msgstr "Solicitat" msgid "Login failed!" msgstr "Autentificare eșuată" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Utilizator" @@ -303,7 +304,7 @@ msgstr "Editează categoriile" msgid "Add" msgstr "Adaugă" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -319,48 +320,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Crează un cont de administrator" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avansat" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Director date" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Configurează baza de date" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "vor fi folosite" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Utilizatorul bazei de date" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Parola bazei de date" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Numele bazei de date" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Tabela de spațiu a bazei de date" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Bază date" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Finalizează instalarea" @@ -372,15 +382,29 @@ msgstr "servicii web controlate de tine" msgid "Log out" msgstr "Ieșire" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Ai uitat parola?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "amintește" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Autentificare" @@ -395,3 +419,17 @@ msgstr "precedentul" #: templates/part.pagenavi.php:20 msgid "next" msgstr "următorul" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ru/core.po b/l10n/ru/core.po index c8b1165123f..fe949c2e2b4 100644 --- a/l10n/ru/core.po +++ b/l10n/ru/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" @@ -151,7 +151,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Пароль" @@ -243,8 +244,8 @@ msgstr "Запрошено" msgid "Login failed!" msgstr "Не удалось войти!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Имя пользователя" @@ -304,7 +305,7 @@ msgstr "Редактировать категории" msgid "Add" msgstr "Добавить" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -320,48 +321,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Создать учётную запись администратора" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Дополнительно" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Директория с данными" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Настройка базы данных" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "будет использовано" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Имя пользователя для базы данных" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Пароль для базы данных" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Название базы данных" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Табличое пространство базы данных" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Хост базы данных" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Завершить установку" @@ -373,15 +383,29 @@ msgstr "Сетевые службы под твоим контролем" msgid "Log out" msgstr "Выйти" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Забыли пароль?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "запомнить" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Войти" @@ -396,3 +420,17 @@ msgstr "пред" #: templates/part.pagenavi.php:20 msgid "next" msgstr "след" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ru_RU/core.po b/l10n/ru_RU/core.po index 6a9c71caa37..67a19716691 100644 --- a/l10n/ru_RU/core.po +++ b/l10n/ru_RU/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "Защитить паролем" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Пароль" @@ -239,8 +240,8 @@ msgstr "Запрашиваемое" msgid "Login failed!" msgstr "Войти не удалось!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Имя пользователя" @@ -300,7 +301,7 @@ msgstr "Редактирование категорий" msgid "Add" msgstr "Добавить" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Создать admin account" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Расширенный" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Папка данных" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Настроить базу данных" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "будет использоваться" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Пользователь базы данных" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Пароль базы данных" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Имя базы данных" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Табличная область базы данных" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Сервер базы данных" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Завершение настройки" @@ -369,15 +379,29 @@ msgstr "веб-сервисы под Вашим контролем" msgid "Log out" msgstr "Выйти" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Забыли пароль?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "запомнить" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Войти" @@ -392,3 +416,17 @@ msgstr "предыдущий" #: templates/part.pagenavi.php:20 msgid "next" msgstr "следующий" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ru_RU/user_ldap.po b/l10n/ru_RU/user_ldap.po index 72709623ece..a66fb2f7962 100644 --- a/l10n/ru_RU/user_ldap.po +++ b/l10n/ru_RU/user_ldap.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-12 02:03+0200\n" -"PO-Revision-Date: 2012-10-11 08:03+0000\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-10-15 13:57+0000\n" "Last-Translator: AnnaSch \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" @@ -44,7 +44,7 @@ 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 "" +msgstr "DN клиентского пользователя, с которого должна осуществляться привязка, например, uid=agent,dc=example,dc=com. Для анонимного доступа оставьте поля DN и Пароль пустыми." #: templates/settings.php:11 msgid "Password" @@ -63,7 +63,7 @@ msgstr "Фильтр имен пользователей" msgid "" "Defines the filter to apply, when login is attempted. %%uid replaces the " "username in the login action." -msgstr "" +msgstr "Задает фильтр, применяемый при загрузке пользователя. %%uid заменяет имя пользователя при входе." #: templates/settings.php:12 #, php-format @@ -72,11 +72,11 @@ msgstr "используйте %%uid заполнитель, например, \ #: templates/settings.php:13 msgid "User List Filter" -msgstr "" +msgstr "Фильтр списка пользователей" #: templates/settings.php:13 msgid "Defines the filter to apply, when retrieving users." -msgstr "" +msgstr "Задает фильтр, применяемый при получении пользователей." #: templates/settings.php:13 msgid "without any placeholder, e.g. \"objectClass=person\"." @@ -88,7 +88,7 @@ msgstr "Групповой фильтр" #: templates/settings.php:14 msgid "Defines the filter to apply, when retrieving groups." -msgstr "" +msgstr "Задает фильтр, применяемый при получении групп." #: templates/settings.php:14 msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." @@ -104,7 +104,7 @@ msgstr "Базовое дерево пользователей" #: templates/settings.php:19 msgid "Base Group Tree" -msgstr "" +msgstr "Базовое дерево групп" #: templates/settings.php:20 msgid "Group-Member association" @@ -130,7 +130,7 @@ msgstr "Выключить проверку сертификата SSL." msgid "" "If connection only works with this option, import the LDAP server's SSL " "certificate in your ownCloud server." -msgstr "" +msgstr "Если соединение работает только с этой опцией, импортируйте SSL-сертификат LDAP сервера в ваш ownCloud сервер." #: templates/settings.php:23 msgid "Not recommended, use for testing only." @@ -146,7 +146,7 @@ msgstr "Атрибут LDAP, используемый для создания и #: templates/settings.php:25 msgid "Group Display Name Field" -msgstr "" +msgstr "Поле, отображаемое как имя группы" #: templates/settings.php:25 msgid "The LDAP attribute to use to generate the groups`s ownCloud name." diff --git a/l10n/si_LK/core.po b/l10n/si_LK/core.po new file mode 100644 index 00000000000..ff4b345ed83 --- /dev/null +++ b/l10n/si_LK/core.po @@ -0,0 +1,432 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Chamara Disanayake , 2012. +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" +"Last-Translator: I Robot \n" +"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: si_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23 +msgid "Application name not provided." +msgstr "යෙදුම් නාමය සපයා නැත." + +#: ajax/vcategories/add.php:29 +msgid "No category to add?" +msgstr "" + +#: ajax/vcategories/add.php:36 +msgid "This category already exists: " +msgstr "" + +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 +msgid "Settings" +msgstr "සැකසුම්" + +#: js/js.js:670 +msgid "January" +msgstr "ජනවාරි" + +#: js/js.js:670 +msgid "February" +msgstr "පෙබරවාරි" + +#: js/js.js:670 +msgid "March" +msgstr "මාර්තු" + +#: js/js.js:670 +msgid "April" +msgstr "අප්‍රේල්" + +#: js/js.js:670 +msgid "May" +msgstr "මැයි" + +#: js/js.js:670 +msgid "June" +msgstr "ජූනි" + +#: js/js.js:671 +msgid "July" +msgstr "ජූලි" + +#: js/js.js:671 +msgid "August" +msgstr "අගෝස්තු" + +#: js/js.js:671 +msgid "September" +msgstr "සැප්තැම්බර්" + +#: js/js.js:671 +msgid "October" +msgstr "ඔක්තෝබර්" + +#: js/js.js:671 +msgid "November" +msgstr "නොවැම්බර්" + +#: js/js.js:671 +msgid "December" +msgstr "දෙසැම්බර්" + +#: js/oc-dialogs.js:123 +msgid "Choose" +msgstr "තෝරන්න" + +#: js/oc-dialogs.js:143 js/oc-dialogs.js:163 +msgid "Cancel" +msgstr "එපා" + +#: js/oc-dialogs.js:159 +msgid "No" +msgstr "නැහැ" + +#: js/oc-dialogs.js:160 +msgid "Yes" +msgstr "ඔව්" + +#: js/oc-dialogs.js:177 +msgid "Ok" +msgstr "හරි" + +#: js/oc-vcategories.js:68 +msgid "No categories selected for deletion." +msgstr "" + +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 +msgid "Error" +msgstr "" + +#: js/share.js:103 +msgid "Error while sharing" +msgstr "" + +#: js/share.js:114 +msgid "Error while unsharing" +msgstr "" + +#: js/share.js:121 +msgid "Error while changing permissions" +msgstr "" + +#: js/share.js:130 +msgid "Shared with you and the group" +msgstr "" + +#: js/share.js:130 +msgid "by" +msgstr "" + +#: js/share.js:132 +msgid "Shared with you by" +msgstr "" + +#: js/share.js:137 +msgid "Share with" +msgstr "" + +#: js/share.js:142 +msgid "Share with link" +msgstr "" + +#: js/share.js:143 +msgid "Password protect" +msgstr "" + +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 +msgid "Password" +msgstr "මුර පදය " + +#: js/share.js:152 +msgid "Set expiration date" +msgstr "" + +#: js/share.js:153 +msgid "Expiration date" +msgstr "" + +#: js/share.js:185 +msgid "Share via email:" +msgstr "" + +#: js/share.js:187 +msgid "No people found" +msgstr "" + +#: js/share.js:214 +msgid "Resharing is not allowed" +msgstr "" + +#: js/share.js:250 +msgid "Shared in" +msgstr "" + +#: js/share.js:250 +msgid "with" +msgstr "" + +#: js/share.js:271 +msgid "Unshare" +msgstr "" + +#: js/share.js:283 +msgid "can edit" +msgstr "" + +#: js/share.js:285 +msgid "access control" +msgstr "" + +#: js/share.js:288 +msgid "create" +msgstr "" + +#: js/share.js:291 +msgid "update" +msgstr "" + +#: js/share.js:294 +msgid "delete" +msgstr "" + +#: js/share.js:297 +msgid "share" +msgstr "" + +#: js/share.js:322 js/share.js:484 +msgid "Password protected" +msgstr "" + +#: js/share.js:497 +msgid "Error unsetting expiration date" +msgstr "" + +#: js/share.js:509 +msgid "Error setting expiration date" +msgstr "" + +#: lostpassword/index.php:26 +msgid "ownCloud password reset" +msgstr "" + +#: lostpassword/templates/email.php:2 +msgid "Use the following link to reset your password: {link}" +msgstr "" + +#: lostpassword/templates/lostpassword.php:3 +msgid "You will receive a link to reset your password via Email." +msgstr "" + +#: lostpassword/templates/lostpassword.php:5 +msgid "Requested" +msgstr "" + +#: lostpassword/templates/lostpassword.php:8 +msgid "Login failed!" +msgstr "" + +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 +msgid "Username" +msgstr "" + +#: lostpassword/templates/lostpassword.php:14 +msgid "Request 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 +msgid "Apps" +msgstr "යෙදුම්" + +#: strings.php:8 +msgid "Admin" +msgstr "" + +#: strings.php:9 +msgid "Help" +msgstr "උදව්" + +#: templates/403.php:12 +msgid "Access forbidden" +msgstr "" + +#: templates/404.php:12 +msgid "Cloud not found" +msgstr "" + +#: templates/edit_categories_dialog.php:4 +msgid "Edit categories" +msgstr "" + +#: templates/edit_categories_dialog.php:14 +msgid "Add" +msgstr "එක් කරන්න" + +#: templates/installation.php:23 templates/installation.php:31 +msgid "Security Warning" +msgstr "" + +#: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 +msgid "Create an admin account" +msgstr "" + +#: templates/installation.php:48 +msgid "Advanced" +msgstr "" + +#: templates/installation.php:50 +msgid "Data folder" +msgstr "දත්ත ෆෝල්ඩරය" + +#: templates/installation.php:57 +msgid "Configure the database" +msgstr "" + +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 +msgid "will be used" +msgstr "" + +#: templates/installation.php:105 +msgid "Database user" +msgstr "" + +#: templates/installation.php:109 +msgid "Database password" +msgstr "" + +#: templates/installation.php:113 +msgid "Database name" +msgstr "" + +#: templates/installation.php:121 +msgid "Database tablespace" +msgstr "" + +#: templates/installation.php:127 +msgid "Database host" +msgstr "" + +#: templates/installation.php:132 +msgid "Finish setup" +msgstr "" + +#: templates/layout.guest.php:38 +msgid "web services under your control" +msgstr "" + +#: templates/layout.user.php:34 +msgid "Log out" +msgstr "" + +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 +msgid "Lost your password?" +msgstr "" + +#: templates/login.php:27 +msgid "remember" +msgstr "" + +#: templates/login.php:28 +msgid "Log in" +msgstr "" + +#: templates/logout.php:1 +msgid "You are logged out." +msgstr "" + +#: templates/part.pagenavi.php:3 +msgid "prev" +msgstr "" + +#: templates/part.pagenavi.php:20 +msgid "next" +msgstr "ඊළඟ" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/si_LK/files.po b/l10n/si_LK/files.po new file mode 100644 index 00000000000..0b5e050f8c0 --- /dev/null +++ b/l10n/si_LK/files.po @@ -0,0 +1,300 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Chamara Disanayake , 2012. +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-10-15 10:48+0000\n" +"Last-Translator: Chamara Disanayake \n" +"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: si_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ajax/upload.php:20 +msgid "There is no error, the file uploaded with success" +msgstr "නිවැරදි ව ගොනුව උඩුගත කෙරිනි" + +#: ajax/upload.php:21 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini" +msgstr "" + +#: ajax/upload.php:22 +msgid "" +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " +"the HTML form" +msgstr "" + +#: ajax/upload.php:23 +msgid "The uploaded file was only partially uploaded" +msgstr "උඩුගත කළ ගොනුවේ කොටසක් පමණක් උඩුගත විය" + +#: ajax/upload.php:24 +msgid "No file was uploaded" +msgstr "කිසිදු ගොනවක් උඩුගත නොවිනි" + +#: ajax/upload.php:25 +msgid "Missing a temporary folder" +msgstr "" + +#: ajax/upload.php:26 +msgid "Failed to write to disk" +msgstr "" + +#: appinfo/app.php:6 +msgid "Files" +msgstr "ගොනු" + +#: js/fileactions.js:108 templates/index.php:62 +msgid "Unshare" +msgstr "" + +#: js/fileactions.js:110 templates/index.php:64 +msgid "Delete" +msgstr "" + +#: js/fileactions.js:182 +msgid "Rename" +msgstr "" + +#: js/filelist.js:192 js/filelist.js:194 +msgid "already exists" +msgstr "" + +#: js/filelist.js:192 js/filelist.js:194 +msgid "replace" +msgstr "" + +#: js/filelist.js:192 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:192 js/filelist.js:194 +msgid "cancel" +msgstr "" + +#: js/filelist.js:241 js/filelist.js:243 +msgid "replaced" +msgstr "" + +#: js/filelist.js:241 js/filelist.js:243 js/filelist.js:275 js/filelist.js:277 +msgid "undo" +msgstr "" + +#: js/filelist.js:243 +msgid "with" +msgstr "" + +#: js/filelist.js:275 +msgid "unshared" +msgstr "" + +#: js/filelist.js:277 +msgid "deleted" +msgstr "" + +#: js/files.js:179 +msgid "generating ZIP-file, it may take some time." +msgstr "" + +#: js/files.js:214 +msgid "Unable to upload your file as it is a directory or has 0 bytes" +msgstr "" + +#: js/files.js:214 +msgid "Upload Error" +msgstr "" + +#: js/files.js:242 js/files.js:347 js/files.js:377 +msgid "Pending" +msgstr "" + +#: js/files.js:262 +msgid "1 file uploading" +msgstr "" + +#: js/files.js:265 js/files.js:310 js/files.js:325 +msgid "files uploading" +msgstr "" + +#: js/files.js:328 js/files.js:361 +msgid "Upload cancelled." +msgstr "" + +#: js/files.js:430 +msgid "" +"File upload is in progress. Leaving the page now will cancel the upload." +msgstr "" + +#: js/files.js:500 +msgid "Invalid name, '/' is not allowed." +msgstr "" + +#: js/files.js:681 +msgid "files scanned" +msgstr "" + +#: js/files.js:689 +msgid "error while scanning" +msgstr "" + +#: js/files.js:762 templates/index.php:48 +msgid "Name" +msgstr "නම" + +#: js/files.js:763 templates/index.php:56 +msgid "Size" +msgstr "ප්‍රමාණය" + +#: js/files.js:764 templates/index.php:58 +msgid "Modified" +msgstr "" + +#: js/files.js:791 +msgid "folder" +msgstr "ෆෝල්ඩරය" + +#: js/files.js:793 +msgid "folders" +msgstr "ෆෝල්ඩර" + +#: js/files.js:801 +msgid "file" +msgstr "ගොනුව" + +#: js/files.js:803 +msgid "files" +msgstr "ගොනු" + +#: js/files.js:847 +msgid "seconds ago" +msgstr "" + +#: js/files.js:848 +msgid "minute ago" +msgstr "" + +#: js/files.js:849 +msgid "minutes ago" +msgstr "" + +#: js/files.js:852 +msgid "today" +msgstr "" + +#: js/files.js:853 +msgid "yesterday" +msgstr "" + +#: js/files.js:854 +msgid "days ago" +msgstr "" + +#: js/files.js:855 +msgid "last month" +msgstr "" + +#: js/files.js:857 +msgid "months ago" +msgstr "" + +#: js/files.js:858 +msgid "last year" +msgstr "" + +#: js/files.js:859 +msgid "years ago" +msgstr "" + +#: templates/admin.php:5 +msgid "File handling" +msgstr "" + +#: templates/admin.php:7 +msgid "Maximum upload size" +msgstr "උඩුගත කිරීමක උපරිම ප්‍රමාණය" + +#: templates/admin.php:7 +msgid "max. possible: " +msgstr "" + +#: templates/admin.php:9 +msgid "Needed for multi-file and folder downloads." +msgstr "" + +#: templates/admin.php:9 +msgid "Enable ZIP-download" +msgstr "" + +#: templates/admin.php:11 +msgid "0 is unlimited" +msgstr "" + +#: templates/admin.php:12 +msgid "Maximum input size for ZIP files" +msgstr "" + +#: templates/admin.php:14 +msgid "Save" +msgstr "" + +#: templates/index.php:7 +msgid "New" +msgstr "නව" + +#: templates/index.php:9 +msgid "Text file" +msgstr "" + +#: templates/index.php:10 +msgid "Folder" +msgstr "ෆෝල්ඩරය" + +#: templates/index.php:11 +msgid "From url" +msgstr "" + +#: templates/index.php:20 +msgid "Upload" +msgstr "උඩුගත කිරීම" + +#: templates/index.php:27 +msgid "Cancel upload" +msgstr "" + +#: templates/index.php:40 +msgid "Nothing in here. Upload something!" +msgstr "මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න" + +#: templates/index.php:50 +msgid "Share" +msgstr "" + +#: templates/index.php:52 +msgid "Download" +msgstr "බාගත කිරීම" + +#: templates/index.php:75 +msgid "Upload too large" +msgstr "" + +#: templates/index.php:77 +msgid "" +"The files you are trying to upload exceed the maximum size for file uploads " +"on this server." +msgstr "" + +#: templates/index.php:82 +msgid "Files are being scanned, please wait." +msgstr "" + +#: templates/index.php:85 +msgid "Current scanning" +msgstr "" diff --git a/l10n/si_LK/files_encryption.po b/l10n/si_LK/files_encryption.po new file mode 100644 index 00000000000..b321106d981 --- /dev/null +++ b/l10n/si_LK/files_encryption.po @@ -0,0 +1,34 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-08-12 22:33+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: si_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: templates/settings.php:3 +msgid "Encryption" +msgstr "" + +#: templates/settings.php:4 +msgid "Exclude the following file types from encryption" +msgstr "" + +#: templates/settings.php:5 +msgid "None" +msgstr "" + +#: templates/settings.php:10 +msgid "Enable Encryption" +msgstr "" diff --git a/l10n/si_LK/files_external.po b/l10n/si_LK/files_external.po new file mode 100644 index 00000000000..3f565dbbd43 --- /dev/null +++ b/l10n/si_LK/files_external.po @@ -0,0 +1,106 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-08-12 22:34+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: si_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23 +msgid "Access granted" +msgstr "" + +#: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86 +msgid "Error configuring Dropbox storage" +msgstr "" + +#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 +msgid "Grant access" +msgstr "" + +#: js/dropbox.js:73 js/google.js:72 +msgid "Fill out all required fields" +msgstr "" + +#: js/dropbox.js:85 +msgid "Please provide a valid Dropbox app key and secret." +msgstr "" + +#: js/google.js:26 js/google.js:73 js/google.js:78 +msgid "Error configuring Google Drive storage" +msgstr "" + +#: templates/settings.php:3 +msgid "External Storage" +msgstr "" + +#: templates/settings.php:7 templates/settings.php:19 +msgid "Mount point" +msgstr "" + +#: templates/settings.php:8 +msgid "Backend" +msgstr "" + +#: templates/settings.php:9 +msgid "Configuration" +msgstr "" + +#: templates/settings.php:10 +msgid "Options" +msgstr "" + +#: templates/settings.php:11 +msgid "Applicable" +msgstr "" + +#: templates/settings.php:23 +msgid "Add mount point" +msgstr "" + +#: templates/settings.php:54 templates/settings.php:62 +msgid "None set" +msgstr "" + +#: templates/settings.php:63 +msgid "All Users" +msgstr "" + +#: templates/settings.php:64 +msgid "Groups" +msgstr "" + +#: templates/settings.php:69 +msgid "Users" +msgstr "" + +#: templates/settings.php:77 templates/settings.php:107 +msgid "Delete" +msgstr "" + +#: templates/settings.php:87 +msgid "Enable User External Storage" +msgstr "" + +#: templates/settings.php:88 +msgid "Allow users to mount their own external storage" +msgstr "" + +#: templates/settings.php:99 +msgid "SSL root certificates" +msgstr "" + +#: templates/settings.php:113 +msgid "Import Root Certificate" +msgstr "" diff --git a/l10n/si_LK/files_sharing.po b/l10n/si_LK/files_sharing.po new file mode 100644 index 00000000000..fa03702776a --- /dev/null +++ b/l10n/si_LK/files_sharing.po @@ -0,0 +1,48 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-08-12 22:35+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: si_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: templates/authenticate.php:4 +msgid "Password" +msgstr "" + +#: templates/authenticate.php:6 +msgid "Submit" +msgstr "" + +#: templates/public.php:9 +#, php-format +msgid "%s shared the folder %s with you" +msgstr "" + +#: templates/public.php:11 +#, php-format +msgid "%s shared the file %s with you" +msgstr "" + +#: templates/public.php:14 templates/public.php:30 +msgid "Download" +msgstr "" + +#: templates/public.php:29 +msgid "No preview available for" +msgstr "" + +#: templates/public.php:35 +msgid "web services under your control" +msgstr "" diff --git a/l10n/si_LK/files_versions.po b/l10n/si_LK/files_versions.po new file mode 100644 index 00000000000..41165d94348 --- /dev/null +++ b/l10n/si_LK/files_versions.po @@ -0,0 +1,42 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-08-12 22:37+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: si_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: js/settings-personal.js:31 templates/settings-personal.php:10 +msgid "Expire all versions" +msgstr "" + +#: js/versions.js:16 +msgid "History" +msgstr "" + +#: templates/settings-personal.php:4 +msgid "Versions" +msgstr "" + +#: templates/settings-personal.php:7 +msgid "This will delete all existing backup versions of your files" +msgstr "" + +#: templates/settings.php:3 +msgid "Files Versioning" +msgstr "" + +#: templates/settings.php:4 +msgid "Enable" +msgstr "" diff --git a/l10n/si_LK/lib.po b/l10n/si_LK/lib.po new file mode 100644 index 00000000000..bc62f158cf4 --- /dev/null +++ b/l10n/si_LK/lib.po @@ -0,0 +1,125 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-07-27 22:23+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: si_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: app.php:285 +msgid "Help" +msgstr "" + +#: app.php:292 +msgid "Personal" +msgstr "" + +#: app.php:297 +msgid "Settings" +msgstr "" + +#: app.php:302 +msgid "Users" +msgstr "" + +#: app.php:309 +msgid "Apps" +msgstr "" + +#: app.php:311 +msgid "Admin" +msgstr "" + +#: files.php:328 +msgid "ZIP download is turned off." +msgstr "" + +#: files.php:329 +msgid "Files need to be downloaded one by one." +msgstr "" + +#: files.php:329 files.php:354 +msgid "Back to Files" +msgstr "" + +#: files.php:353 +msgid "Selected files too large to generate zip file." +msgstr "" + +#: json.php:28 +msgid "Application is not enabled" +msgstr "" + +#: json.php:39 json.php:64 json.php:77 json.php:89 +msgid "Authentication error" +msgstr "" + +#: json.php:51 +msgid "Token expired. Please reload page." +msgstr "" + +#: template.php:87 +msgid "seconds ago" +msgstr "" + +#: template.php:88 +msgid "1 minute ago" +msgstr "" + +#: template.php:89 +#, php-format +msgid "%d minutes ago" +msgstr "" + +#: template.php:92 +msgid "today" +msgstr "" + +#: template.php:93 +msgid "yesterday" +msgstr "" + +#: template.php:94 +#, php-format +msgid "%d days ago" +msgstr "" + +#: template.php:95 +msgid "last month" +msgstr "" + +#: template.php:96 +msgid "months ago" +msgstr "" + +#: template.php:97 +msgid "last year" +msgstr "" + +#: template.php:98 +msgid "years ago" +msgstr "" + +#: updater.php:75 +#, php-format +msgid "%s is available. Get more information" +msgstr "" + +#: updater.php:77 +msgid "up to date" +msgstr "" + +#: updater.php:80 +msgid "updates check is disabled" +msgstr "" diff --git a/l10n/si_LK/settings.po b/l10n/si_LK/settings.po new file mode 100644 index 00000000000..fa1e595106e --- /dev/null +++ b/l10n/si_LK/settings.po @@ -0,0 +1,321 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2012. +msgid "" +msgstr "" +"Project-Id-Version: ownCloud\n" +"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-15 10:27+0000\n" +"Last-Translator: Thanoja \n" +"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: si_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ajax/apps/ocs.php:23 +msgid "Unable to load list from App Store" +msgstr "" + +#: ajax/creategroup.php:12 +msgid "Group already exists" +msgstr "" + +#: ajax/creategroup.php:21 +msgid "Unable to add group" +msgstr "" + +#: ajax/enableapp.php:14 +msgid "Could not enable app. " +msgstr "" + +#: ajax/lostpassword.php:14 +msgid "Email saved" +msgstr "" + +#: ajax/lostpassword.php:16 +msgid "Invalid email" +msgstr "" + +#: ajax/openid.php:16 +msgid "OpenID Changed" +msgstr "" + +#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23 +msgid "Invalid request" +msgstr "අවලංගු අයදුම" + +#: ajax/removegroup.php:16 +msgid "Unable to delete group" +msgstr "" + +#: ajax/removeuser.php:18 ajax/setquota.php:18 ajax/togglegroups.php:15 +msgid "Authentication error" +msgstr "" + +#: ajax/removeuser.php:27 +msgid "Unable to delete user" +msgstr "" + +#: ajax/setlanguage.php:18 +msgid "Language changed" +msgstr "භාෂාව ාවනස් කිරීම" + +#: ajax/togglegroups.php:25 +#, php-format +msgid "Unable to add user to group %s" +msgstr "" + +#: ajax/togglegroups.php:31 +#, php-format +msgid "Unable to remove user from group %s" +msgstr "" + +#: js/apps.js:28 js/apps.js:65 +msgid "Disable" +msgstr "" + +#: js/apps.js:28 js/apps.js:54 +msgid "Enable" +msgstr "" + +#: js/personal.js:69 +msgid "Saving..." +msgstr "" + +#: personal.php:42 personal.php:43 +msgid "__language_name__" +msgstr "" + +#: templates/admin.php:14 +msgid "Security Warning" +msgstr "" + +#: templates/admin.php:17 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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:31 +msgid "Cron" +msgstr "" + +#: templates/admin.php:37 +msgid "Execute one task with each page loaded" +msgstr "" + +#: templates/admin.php:43 +msgid "" +"cron.php is registered at a webcron service. Call the cron.php page in the " +"owncloud root once a minute over http." +msgstr "" + +#: templates/admin.php:49 +msgid "" +"Use systems cron service. Call the cron.php file in the owncloud folder via " +"a system cronjob once a minute." +msgstr "" + +#: templates/admin.php:56 +msgid "Sharing" +msgstr "" + +#: templates/admin.php:61 +msgid "Enable Share API" +msgstr "" + +#: templates/admin.php:62 +msgid "Allow apps to use the Share API" +msgstr "" + +#: templates/admin.php:67 +msgid "Allow links" +msgstr "" + +#: templates/admin.php:68 +msgid "Allow users to share items to the public with links" +msgstr "" + +#: templates/admin.php:73 +msgid "Allow resharing" +msgstr "" + +#: templates/admin.php:74 +msgid "Allow users to share items shared with them again" +msgstr "" + +#: templates/admin.php:79 +msgid "Allow users to share with anyone" +msgstr "" + +#: templates/admin.php:81 +msgid "Allow users to only share with users in their groups" +msgstr "" + +#: templates/admin.php:88 +msgid "Log" +msgstr "" + +#: templates/admin.php:116 +msgid "More" +msgstr "" + +#: templates/admin.php:124 +msgid "" +"Developed by the ownCloud community, the source code is " +"licensed under the AGPL." +msgstr "" + +#: templates/apps.php:10 +msgid "Add your App" +msgstr "" + +#: templates/apps.php:11 +msgid "More Apps" +msgstr "" + +#: templates/apps.php:27 +msgid "Select an App" +msgstr "" + +#: templates/apps.php:31 +msgid "See application page at apps.owncloud.com" +msgstr "" + +#: templates/apps.php:32 +msgid "-licensed by " +msgstr "" + +#: templates/help.php:9 +msgid "Documentation" +msgstr "" + +#: templates/help.php:10 +msgid "Managing Big Files" +msgstr "" + +#: templates/help.php:11 +msgid "Ask a question" +msgstr "" + +#: templates/help.php:23 +msgid "Problems connecting to help database." +msgstr "" + +#: templates/help.php:24 +msgid "Go there manually." +msgstr "" + +#: templates/help.php:32 +msgid "Answer" +msgstr "පිළිතුර" + +#: templates/personal.php:8 +#, php-format +msgid "You have used %s of the available %s" +msgstr "" + +#: templates/personal.php:12 +msgid "Desktop and Mobile Syncing Clients" +msgstr "" + +#: templates/personal.php:13 +msgid "Download" +msgstr "" + +#: templates/personal.php:19 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:20 +msgid "Unable to change your password" +msgstr "" + +#: templates/personal.php:21 +msgid "Current password" +msgstr "නූතන මුරපදය" + +#: templates/personal.php:22 +msgid "New password" +msgstr "නව මුරපදය" + +#: templates/personal.php:23 +msgid "show" +msgstr "ප්‍රදර්ශනය කිරීම" + +#: templates/personal.php:24 +msgid "Change password" +msgstr "මුරපදය වෙනස් කිරීම" + +#: templates/personal.php:30 +msgid "Email" +msgstr "" + +#: templates/personal.php:31 +msgid "Your email address" +msgstr "" + +#: templates/personal.php:32 +msgid "Fill in an email address to enable password recovery" +msgstr "" + +#: templates/personal.php:38 templates/personal.php:39 +msgid "Language" +msgstr "භාෂාව" + +#: templates/personal.php:44 +msgid "Help translate" +msgstr "" + +#: templates/personal.php:51 +msgid "use this address to connect to your ownCloud in your file manager" +msgstr "" + +#: templates/users.php:21 templates/users.php:76 +msgid "Name" +msgstr "නාමය" + +#: templates/users.php:23 templates/users.php:77 +msgid "Password" +msgstr "මුරපදය" + +#: templates/users.php:26 templates/users.php:78 templates/users.php:98 +msgid "Groups" +msgstr "සමූහය" + +#: templates/users.php:32 +msgid "Create" +msgstr "තනනවා" + +#: templates/users.php:35 +msgid "Default Quota" +msgstr "" + +#: templates/users.php:55 templates/users.php:138 +msgid "Other" +msgstr "" + +#: templates/users.php:80 templates/users.php:112 +msgid "Group Admin" +msgstr "" + +#: templates/users.php:82 +msgid "Quota" +msgstr "" + +#: templates/users.php:146 +msgid "Delete" +msgstr "මකා දමනවා" diff --git a/l10n/si_LK/user_ldap.po b/l10n/si_LK/user_ldap.po new file mode 100644 index 00000000000..8279ec5bca5 --- /dev/null +++ b/l10n/si_LK/user_ldap.po @@ -0,0 +1,170 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-08-12 22:45+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: si_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: templates/settings.php:8 +msgid "Host" +msgstr "" + +#: templates/settings.php:8 +msgid "" +"You can omit the protocol, except you require SSL. Then start with ldaps://" +msgstr "" + +#: templates/settings.php:9 +msgid "Base DN" +msgstr "" + +#: templates/settings.php:9 +msgid "You can specify Base DN for users and groups in the Advanced tab" +msgstr "" + +#: templates/settings.php:10 +msgid "User DN" +msgstr "" + +#: templates/settings.php:10 +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/settings.php:11 +msgid "Password" +msgstr "" + +#: templates/settings.php:11 +msgid "For anonymous access, leave DN and Password empty." +msgstr "" + +#: templates/settings.php:12 +msgid "User Login Filter" +msgstr "" + +#: templates/settings.php:12 +#, php-format +msgid "" +"Defines the filter to apply, when login is attempted. %%uid replaces the " +"username in the login action." +msgstr "" + +#: templates/settings.php:12 +#, php-format +msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" +msgstr "" + +#: templates/settings.php:13 +msgid "User List Filter" +msgstr "" + +#: templates/settings.php:13 +msgid "Defines the filter to apply, when retrieving users." +msgstr "" + +#: templates/settings.php:13 +msgid "without any placeholder, e.g. \"objectClass=person\"." +msgstr "" + +#: templates/settings.php:14 +msgid "Group Filter" +msgstr "" + +#: templates/settings.php:14 +msgid "Defines the filter to apply, when retrieving groups." +msgstr "" + +#: templates/settings.php:14 +msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." +msgstr "" + +#: templates/settings.php:17 +msgid "Port" +msgstr "" + +#: templates/settings.php:18 +msgid "Base User Tree" +msgstr "" + +#: templates/settings.php:19 +msgid "Base Group Tree" +msgstr "" + +#: templates/settings.php:20 +msgid "Group-Member association" +msgstr "" + +#: templates/settings.php:21 +msgid "Use TLS" +msgstr "" + +#: templates/settings.php:21 +msgid "Do not use it for SSL connections, it will fail." +msgstr "" + +#: templates/settings.php:22 +msgid "Case insensitve LDAP server (Windows)" +msgstr "" + +#: templates/settings.php:23 +msgid "Turn off SSL certificate validation." +msgstr "" + +#: templates/settings.php:23 +msgid "" +"If connection only works with this option, import the LDAP server's SSL " +"certificate in your ownCloud server." +msgstr "" + +#: templates/settings.php:23 +msgid "Not recommended, use for testing only." +msgstr "" + +#: templates/settings.php:24 +msgid "User Display Name Field" +msgstr "" + +#: templates/settings.php:24 +msgid "The LDAP attribute to use to generate the user`s ownCloud name." +msgstr "" + +#: templates/settings.php:25 +msgid "Group Display Name Field" +msgstr "" + +#: templates/settings.php:25 +msgid "The LDAP attribute to use to generate the groups`s ownCloud name." +msgstr "" + +#: templates/settings.php:27 +msgid "in bytes" +msgstr "" + +#: templates/settings.php:29 +msgid "in seconds. A change empties the cache." +msgstr "" + +#: templates/settings.php:30 +msgid "" +"Leave empty for user name (default). Otherwise, specify an LDAP/AD " +"attribute." +msgstr "" + +#: templates/settings.php:32 +msgid "Help" +msgstr "" diff --git a/l10n/sk_SK/core.po b/l10n/sk_SK/core.po index 8566a8adc55..b362f1c0f4b 100644 --- a/l10n/sk_SK/core.po +++ b/l10n/sk_SK/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" @@ -149,7 +149,8 @@ msgstr "Zdieľať cez odkaz" msgid "Password protect" msgstr "Chrániť heslom" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Heslo" @@ -241,8 +242,8 @@ msgstr "Požiadané" msgid "Login failed!" msgstr "Prihlásenie zlyhalo!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Prihlasovacie meno" @@ -302,7 +303,7 @@ msgstr "Úprava kategórií" msgid "Add" msgstr "Pridať" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -318,48 +319,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Vytvoriť administrátorský účet" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Pokročilé" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Priečinok dát" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Nastaviť databázu" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "bude použité" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Hostiteľ databázy" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Heslo databázy" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Meno databázy" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Server databázy" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Dokončiť inštaláciu" @@ -371,15 +381,29 @@ msgstr "webové služby pod vašou kontrolou" msgid "Log out" msgstr "Odhlásiť" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Zabudli ste heslo?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "zapamätať" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Prihlásiť sa" @@ -394,3 +418,17 @@ msgstr "späť" #: templates/part.pagenavi.php:20 msgid "next" msgstr "ďalej" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/sl/core.po b/l10n/sl/core.po index 2ea6a606772..1a771160cf2 100644 --- a/l10n/sl/core.po +++ b/l10n/sl/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -149,7 +149,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Geslo" @@ -241,8 +242,8 @@ msgstr "Zahtevano" msgid "Login failed!" msgstr "Prijava je spodletela!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Uporabniško Ime" @@ -302,7 +303,7 @@ msgstr "Uredi kategorije" msgid "Add" msgstr "Dodaj" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -318,48 +319,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Ustvari skrbniški račun" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Napredne možnosti" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Mapa s podatki" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Nastavi podatkovno zbirko" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "bo uporabljen" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Uporabnik zbirke" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Geslo podatkovne zbirke" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Ime podatkovne zbirke" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Razpredelnica podatkovne zbirke" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Gostitelj podatkovne zbirke" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Dokončaj namestitev" @@ -371,15 +381,29 @@ msgstr "spletne storitve pod vašim nadzorom" msgid "Log out" msgstr "Odjava" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Ste pozabili vaše geslo?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "Zapomni si me" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Prijava" @@ -394,3 +418,17 @@ msgstr "nazaj" #: templates/part.pagenavi.php:20 msgid "next" msgstr "naprej" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/so/core.po b/l10n/so/core.po index c7734f3d3b0..b7723cd0820 100644 --- a/l10n/so/core.po +++ b/l10n/so/core.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n" "MIME-Version: 1.0\n" @@ -146,7 +146,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "" @@ -238,8 +239,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "" @@ -299,7 +300,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -315,48 +316,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "" @@ -368,15 +378,29 @@ msgstr "" msgid "Log out" msgstr "" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -391,3 +415,17 @@ msgstr "" #: templates/part.pagenavi.php:20 msgid "next" msgstr "" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/sr/core.po b/l10n/sr/core.po index 8ae8078ba49..79b292785c8 100644 --- a/l10n/sr/core.po +++ b/l10n/sr/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Лозинка" @@ -239,8 +240,8 @@ msgstr "Захтевано" msgid "Login failed!" msgstr "Несупела пријава!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Корисничко име" @@ -300,7 +301,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Направи административни налог" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Напредно" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Фацикла података" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Подешавање базе" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "ће бити коришћен" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Корисник базе" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Лозинка базе" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Име базе" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Домаћин базе" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Заврши подешавање" @@ -369,15 +379,29 @@ msgstr "веб сервиси под контролом" msgid "Log out" msgstr "Одјава" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Изгубили сте лозинку?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "упамти" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Пријава" @@ -392,3 +416,17 @@ msgstr "претходно" #: templates/part.pagenavi.php:20 msgid "next" msgstr "следеће" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/sr@latin/core.po b/l10n/sr@latin/core.po index 35fc115d821..760ce1d3314 100644 --- a/l10n/sr@latin/core.po +++ b/l10n/sr@latin/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Lozinka" @@ -239,8 +240,8 @@ msgstr "Zahtevano" msgid "Login failed!" msgstr "Nesupela prijava!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Korisničko ime" @@ -300,7 +301,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Napravi administrativni nalog" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Napredno" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Facikla podataka" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Podešavanje baze" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "će biti korišćen" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Korisnik baze" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Lozinka baze" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Ime baze" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Domaćin baze" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Završi podešavanje" @@ -369,15 +379,29 @@ msgstr "" msgid "Log out" msgstr "Odjava" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Izgubili ste lozinku?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "upamti" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -392,3 +416,17 @@ msgstr "prethodno" #: templates/part.pagenavi.php:20 msgid "next" msgstr "sledeće" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/sv/core.po b/l10n/sv/core.po index a2e4aea4a25..6c2844d6453 100644 --- a/l10n/sv/core.po +++ b/l10n/sv/core.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" @@ -152,7 +152,8 @@ msgstr "Delad med länk" msgid "Password protect" msgstr "Lösenordsskydda" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Lösenord" @@ -244,8 +245,8 @@ msgstr "Begärd" msgid "Login failed!" msgstr "Misslyckad inloggning!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Användarnamn" @@ -305,64 +306,73 @@ msgstr "Redigera kategorier" msgid "Add" msgstr "Lägg till" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" -msgstr "" +msgstr "Säkerhetsvarning" #: templates/installation.php:24 msgid "" "No secure random number generator is available, please enable the PHP " "OpenSSL extension." -msgstr "" +msgstr "Ingen säker slumptalsgenerator finns tillgänglig. Du bör aktivera PHP OpenSSL-tillägget." #: templates/installation.php:26 msgid "" "Without a secure random number generator an attacker may be able to predict " "password reset tokens and take over your account." +msgstr "Utan en säker slumptalsgenerator kan angripare få möjlighet att förutsäga lösenordsåterställningar och ta över ditt konto." + +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:30 +#: templates/installation.php:36 msgid "Create an admin account" msgstr "Skapa ett administratörskonto" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Avancerat" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Datamapp" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Konfigurera databasen" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "kommer att användas" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Databasanvändare" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Lösenord till databasen" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Databasnamn" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Databas tabellutrymme" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Databasserver" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Avsluta installation" @@ -374,15 +384,29 @@ msgstr "webbtjänster under din kontroll" msgid "Log out" msgstr "Logga ut" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Glömt ditt lösenord?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "kom ihåg" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Logga in" @@ -397,3 +421,17 @@ msgstr "föregående" #: templates/part.pagenavi.php:20 msgid "next" msgstr "nästa" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ta_LK/core.po b/l10n/ta_LK/core.po new file mode 100644 index 00000000000..1686955bd99 --- /dev/null +++ b/l10n/ta_LK/core.po @@ -0,0 +1,431 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" +"Last-Translator: I Robot \n" +"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23 +msgid "Application name not provided." +msgstr "" + +#: ajax/vcategories/add.php:29 +msgid "No category to add?" +msgstr "" + +#: ajax/vcategories/add.php:36 +msgid "This category already exists: " +msgstr "" + +#: js/js.js:238 templates/layout.user.php:49 templates/layout.user.php:50 +msgid "Settings" +msgstr "" + +#: js/js.js:670 +msgid "January" +msgstr "" + +#: js/js.js:670 +msgid "February" +msgstr "" + +#: js/js.js:670 +msgid "March" +msgstr "" + +#: js/js.js:670 +msgid "April" +msgstr "" + +#: js/js.js:670 +msgid "May" +msgstr "" + +#: js/js.js:670 +msgid "June" +msgstr "" + +#: js/js.js:671 +msgid "July" +msgstr "" + +#: js/js.js:671 +msgid "August" +msgstr "" + +#: js/js.js:671 +msgid "September" +msgstr "" + +#: js/js.js:671 +msgid "October" +msgstr "" + +#: js/js.js:671 +msgid "November" +msgstr "" + +#: js/js.js:671 +msgid "December" +msgstr "" + +#: js/oc-dialogs.js:123 +msgid "Choose" +msgstr "" + +#: js/oc-dialogs.js:143 js/oc-dialogs.js:163 +msgid "Cancel" +msgstr "" + +#: js/oc-dialogs.js:159 +msgid "No" +msgstr "" + +#: js/oc-dialogs.js:160 +msgid "Yes" +msgstr "" + +#: js/oc-dialogs.js:177 +msgid "Ok" +msgstr "" + +#: js/oc-vcategories.js:68 +msgid "No categories selected for deletion." +msgstr "" + +#: js/oc-vcategories.js:68 js/share.js:114 js/share.js:121 js/share.js:497 +#: js/share.js:509 +msgid "Error" +msgstr "" + +#: js/share.js:103 +msgid "Error while sharing" +msgstr "" + +#: js/share.js:114 +msgid "Error while unsharing" +msgstr "" + +#: js/share.js:121 +msgid "Error while changing permissions" +msgstr "" + +#: js/share.js:130 +msgid "Shared with you and the group" +msgstr "" + +#: js/share.js:130 +msgid "by" +msgstr "" + +#: js/share.js:132 +msgid "Shared with you by" +msgstr "" + +#: js/share.js:137 +msgid "Share with" +msgstr "" + +#: js/share.js:142 +msgid "Share with link" +msgstr "" + +#: js/share.js:143 +msgid "Password protect" +msgstr "" + +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 +msgid "Password" +msgstr "" + +#: js/share.js:152 +msgid "Set expiration date" +msgstr "" + +#: js/share.js:153 +msgid "Expiration date" +msgstr "" + +#: js/share.js:185 +msgid "Share via email:" +msgstr "" + +#: js/share.js:187 +msgid "No people found" +msgstr "" + +#: js/share.js:214 +msgid "Resharing is not allowed" +msgstr "" + +#: js/share.js:250 +msgid "Shared in" +msgstr "" + +#: js/share.js:250 +msgid "with" +msgstr "" + +#: js/share.js:271 +msgid "Unshare" +msgstr "" + +#: js/share.js:283 +msgid "can edit" +msgstr "" + +#: js/share.js:285 +msgid "access control" +msgstr "" + +#: js/share.js:288 +msgid "create" +msgstr "" + +#: js/share.js:291 +msgid "update" +msgstr "" + +#: js/share.js:294 +msgid "delete" +msgstr "" + +#: js/share.js:297 +msgid "share" +msgstr "" + +#: js/share.js:322 js/share.js:484 +msgid "Password protected" +msgstr "" + +#: js/share.js:497 +msgid "Error unsetting expiration date" +msgstr "" + +#: js/share.js:509 +msgid "Error setting expiration date" +msgstr "" + +#: lostpassword/index.php:26 +msgid "ownCloud password reset" +msgstr "" + +#: lostpassword/templates/email.php:2 +msgid "Use the following link to reset your password: {link}" +msgstr "" + +#: lostpassword/templates/lostpassword.php:3 +msgid "You will receive a link to reset your password via Email." +msgstr "" + +#: lostpassword/templates/lostpassword.php:5 +msgid "Requested" +msgstr "" + +#: lostpassword/templates/lostpassword.php:8 +msgid "Login failed!" +msgstr "" + +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 +msgid "Username" +msgstr "" + +#: lostpassword/templates/lostpassword.php:14 +msgid "Request 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 +msgid "Apps" +msgstr "" + +#: strings.php:8 +msgid "Admin" +msgstr "" + +#: strings.php:9 +msgid "Help" +msgstr "" + +#: templates/403.php:12 +msgid "Access forbidden" +msgstr "" + +#: templates/404.php:12 +msgid "Cloud not found" +msgstr "" + +#: templates/edit_categories_dialog.php:4 +msgid "Edit categories" +msgstr "" + +#: templates/edit_categories_dialog.php:14 +msgid "Add" +msgstr "" + +#: templates/installation.php:23 templates/installation.php:31 +msgid "Security Warning" +msgstr "" + +#: templates/installation.php:24 +msgid "" +"No secure random number generator is available, please enable the PHP " +"OpenSSL extension." +msgstr "" + +#: templates/installation.php:26 +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:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 +msgid "Create an admin account" +msgstr "" + +#: templates/installation.php:48 +msgid "Advanced" +msgstr "" + +#: templates/installation.php:50 +msgid "Data folder" +msgstr "" + +#: templates/installation.php:57 +msgid "Configure the database" +msgstr "" + +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 +msgid "will be used" +msgstr "" + +#: templates/installation.php:105 +msgid "Database user" +msgstr "" + +#: templates/installation.php:109 +msgid "Database password" +msgstr "" + +#: templates/installation.php:113 +msgid "Database name" +msgstr "" + +#: templates/installation.php:121 +msgid "Database tablespace" +msgstr "" + +#: templates/installation.php:127 +msgid "Database host" +msgstr "" + +#: templates/installation.php:132 +msgid "Finish setup" +msgstr "" + +#: templates/layout.guest.php:38 +msgid "web services under your control" +msgstr "" + +#: templates/layout.user.php:34 +msgid "Log out" +msgstr "" + +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 +msgid "Lost your password?" +msgstr "" + +#: templates/login.php:27 +msgid "remember" +msgstr "" + +#: templates/login.php:28 +msgid "Log in" +msgstr "" + +#: templates/logout.php:1 +msgid "You are logged out." +msgstr "" + +#: templates/part.pagenavi.php:3 +msgid "prev" +msgstr "" + +#: templates/part.pagenavi.php:20 +msgid "next" +msgstr "" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/ta_LK/files.po b/l10n/ta_LK/files.po new file mode 100644 index 00000000000..942737c0f60 --- /dev/null +++ b/l10n/ta_LK/files.po @@ -0,0 +1,299 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2011-08-13 02:19+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ajax/upload.php:20 +msgid "There is no error, the file uploaded with success" +msgstr "" + +#: ajax/upload.php:21 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini" +msgstr "" + +#: ajax/upload.php:22 +msgid "" +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " +"the HTML form" +msgstr "" + +#: ajax/upload.php:23 +msgid "The uploaded file was only partially uploaded" +msgstr "" + +#: ajax/upload.php:24 +msgid "No file was uploaded" +msgstr "" + +#: ajax/upload.php:25 +msgid "Missing a temporary folder" +msgstr "" + +#: ajax/upload.php:26 +msgid "Failed to write to disk" +msgstr "" + +#: appinfo/app.php:6 +msgid "Files" +msgstr "" + +#: js/fileactions.js:108 templates/index.php:62 +msgid "Unshare" +msgstr "" + +#: js/fileactions.js:110 templates/index.php:64 +msgid "Delete" +msgstr "" + +#: js/fileactions.js:182 +msgid "Rename" +msgstr "" + +#: js/filelist.js:192 js/filelist.js:194 +msgid "already exists" +msgstr "" + +#: js/filelist.js:192 js/filelist.js:194 +msgid "replace" +msgstr "" + +#: js/filelist.js:192 +msgid "suggest name" +msgstr "" + +#: js/filelist.js:192 js/filelist.js:194 +msgid "cancel" +msgstr "" + +#: js/filelist.js:241 js/filelist.js:243 +msgid "replaced" +msgstr "" + +#: js/filelist.js:241 js/filelist.js:243 js/filelist.js:275 js/filelist.js:277 +msgid "undo" +msgstr "" + +#: js/filelist.js:243 +msgid "with" +msgstr "" + +#: js/filelist.js:275 +msgid "unshared" +msgstr "" + +#: js/filelist.js:277 +msgid "deleted" +msgstr "" + +#: js/files.js:179 +msgid "generating ZIP-file, it may take some time." +msgstr "" + +#: js/files.js:214 +msgid "Unable to upload your file as it is a directory or has 0 bytes" +msgstr "" + +#: js/files.js:214 +msgid "Upload Error" +msgstr "" + +#: js/files.js:242 js/files.js:347 js/files.js:377 +msgid "Pending" +msgstr "" + +#: js/files.js:262 +msgid "1 file uploading" +msgstr "" + +#: js/files.js:265 js/files.js:310 js/files.js:325 +msgid "files uploading" +msgstr "" + +#: js/files.js:328 js/files.js:361 +msgid "Upload cancelled." +msgstr "" + +#: js/files.js:430 +msgid "" +"File upload is in progress. Leaving the page now will cancel the upload." +msgstr "" + +#: js/files.js:500 +msgid "Invalid name, '/' is not allowed." +msgstr "" + +#: js/files.js:681 +msgid "files scanned" +msgstr "" + +#: js/files.js:689 +msgid "error while scanning" +msgstr "" + +#: js/files.js:762 templates/index.php:48 +msgid "Name" +msgstr "" + +#: js/files.js:763 templates/index.php:56 +msgid "Size" +msgstr "" + +#: js/files.js:764 templates/index.php:58 +msgid "Modified" +msgstr "" + +#: js/files.js:791 +msgid "folder" +msgstr "" + +#: js/files.js:793 +msgid "folders" +msgstr "" + +#: js/files.js:801 +msgid "file" +msgstr "" + +#: js/files.js:803 +msgid "files" +msgstr "" + +#: js/files.js:847 +msgid "seconds ago" +msgstr "" + +#: js/files.js:848 +msgid "minute ago" +msgstr "" + +#: js/files.js:849 +msgid "minutes ago" +msgstr "" + +#: js/files.js:852 +msgid "today" +msgstr "" + +#: js/files.js:853 +msgid "yesterday" +msgstr "" + +#: js/files.js:854 +msgid "days ago" +msgstr "" + +#: js/files.js:855 +msgid "last month" +msgstr "" + +#: js/files.js:857 +msgid "months ago" +msgstr "" + +#: js/files.js:858 +msgid "last year" +msgstr "" + +#: js/files.js:859 +msgid "years ago" +msgstr "" + +#: templates/admin.php:5 +msgid "File handling" +msgstr "" + +#: templates/admin.php:7 +msgid "Maximum upload size" +msgstr "" + +#: templates/admin.php:7 +msgid "max. possible: " +msgstr "" + +#: templates/admin.php:9 +msgid "Needed for multi-file and folder downloads." +msgstr "" + +#: templates/admin.php:9 +msgid "Enable ZIP-download" +msgstr "" + +#: templates/admin.php:11 +msgid "0 is unlimited" +msgstr "" + +#: templates/admin.php:12 +msgid "Maximum input size for ZIP files" +msgstr "" + +#: templates/admin.php:14 +msgid "Save" +msgstr "" + +#: templates/index.php:7 +msgid "New" +msgstr "" + +#: templates/index.php:9 +msgid "Text file" +msgstr "" + +#: templates/index.php:10 +msgid "Folder" +msgstr "" + +#: templates/index.php:11 +msgid "From url" +msgstr "" + +#: templates/index.php:20 +msgid "Upload" +msgstr "" + +#: templates/index.php:27 +msgid "Cancel upload" +msgstr "" + +#: templates/index.php:40 +msgid "Nothing in here. Upload something!" +msgstr "" + +#: templates/index.php:50 +msgid "Share" +msgstr "" + +#: templates/index.php:52 +msgid "Download" +msgstr "" + +#: templates/index.php:75 +msgid "Upload too large" +msgstr "" + +#: templates/index.php:77 +msgid "" +"The files you are trying to upload exceed the maximum size for file uploads " +"on this server." +msgstr "" + +#: templates/index.php:82 +msgid "Files are being scanned, please wait." +msgstr "" + +#: templates/index.php:85 +msgid "Current scanning" +msgstr "" diff --git a/l10n/ta_LK/files_encryption.po b/l10n/ta_LK/files_encryption.po new file mode 100644 index 00000000000..59c15d46d9b --- /dev/null +++ b/l10n/ta_LK/files_encryption.po @@ -0,0 +1,34 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-08-12 22:33+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: templates/settings.php:3 +msgid "Encryption" +msgstr "" + +#: templates/settings.php:4 +msgid "Exclude the following file types from encryption" +msgstr "" + +#: templates/settings.php:5 +msgid "None" +msgstr "" + +#: templates/settings.php:10 +msgid "Enable Encryption" +msgstr "" diff --git a/l10n/ta_LK/files_external.po b/l10n/ta_LK/files_external.po new file mode 100644 index 00000000000..469c1e516eb --- /dev/null +++ b/l10n/ta_LK/files_external.po @@ -0,0 +1,106 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-08-12 22:34+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23 +msgid "Access granted" +msgstr "" + +#: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86 +msgid "Error configuring Dropbox storage" +msgstr "" + +#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 +msgid "Grant access" +msgstr "" + +#: js/dropbox.js:73 js/google.js:72 +msgid "Fill out all required fields" +msgstr "" + +#: js/dropbox.js:85 +msgid "Please provide a valid Dropbox app key and secret." +msgstr "" + +#: js/google.js:26 js/google.js:73 js/google.js:78 +msgid "Error configuring Google Drive storage" +msgstr "" + +#: templates/settings.php:3 +msgid "External Storage" +msgstr "" + +#: templates/settings.php:7 templates/settings.php:19 +msgid "Mount point" +msgstr "" + +#: templates/settings.php:8 +msgid "Backend" +msgstr "" + +#: templates/settings.php:9 +msgid "Configuration" +msgstr "" + +#: templates/settings.php:10 +msgid "Options" +msgstr "" + +#: templates/settings.php:11 +msgid "Applicable" +msgstr "" + +#: templates/settings.php:23 +msgid "Add mount point" +msgstr "" + +#: templates/settings.php:54 templates/settings.php:62 +msgid "None set" +msgstr "" + +#: templates/settings.php:63 +msgid "All Users" +msgstr "" + +#: templates/settings.php:64 +msgid "Groups" +msgstr "" + +#: templates/settings.php:69 +msgid "Users" +msgstr "" + +#: templates/settings.php:77 templates/settings.php:107 +msgid "Delete" +msgstr "" + +#: templates/settings.php:87 +msgid "Enable User External Storage" +msgstr "" + +#: templates/settings.php:88 +msgid "Allow users to mount their own external storage" +msgstr "" + +#: templates/settings.php:99 +msgid "SSL root certificates" +msgstr "" + +#: templates/settings.php:113 +msgid "Import Root Certificate" +msgstr "" diff --git a/l10n/ta_LK/files_sharing.po b/l10n/ta_LK/files_sharing.po new file mode 100644 index 00000000000..b2ec47ff867 --- /dev/null +++ b/l10n/ta_LK/files_sharing.po @@ -0,0 +1,48 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-08-12 22:35+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: templates/authenticate.php:4 +msgid "Password" +msgstr "" + +#: templates/authenticate.php:6 +msgid "Submit" +msgstr "" + +#: templates/public.php:9 +#, php-format +msgid "%s shared the folder %s with you" +msgstr "" + +#: templates/public.php:11 +#, php-format +msgid "%s shared the file %s with you" +msgstr "" + +#: templates/public.php:14 templates/public.php:30 +msgid "Download" +msgstr "" + +#: templates/public.php:29 +msgid "No preview available for" +msgstr "" + +#: templates/public.php:35 +msgid "web services under your control" +msgstr "" diff --git a/l10n/ta_LK/files_versions.po b/l10n/ta_LK/files_versions.po new file mode 100644 index 00000000000..7fc3ff7a54f --- /dev/null +++ b/l10n/ta_LK/files_versions.po @@ -0,0 +1,42 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-08-12 22:37+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: js/settings-personal.js:31 templates/settings-personal.php:10 +msgid "Expire all versions" +msgstr "" + +#: js/versions.js:16 +msgid "History" +msgstr "" + +#: templates/settings-personal.php:4 +msgid "Versions" +msgstr "" + +#: templates/settings-personal.php:7 +msgid "This will delete all existing backup versions of your files" +msgstr "" + +#: templates/settings.php:3 +msgid "Files Versioning" +msgstr "" + +#: templates/settings.php:4 +msgid "Enable" +msgstr "" diff --git a/l10n/ta_LK/lib.po b/l10n/ta_LK/lib.po new file mode 100644 index 00000000000..f55cc274872 --- /dev/null +++ b/l10n/ta_LK/lib.po @@ -0,0 +1,125 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-07-27 22:23+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: app.php:285 +msgid "Help" +msgstr "" + +#: app.php:292 +msgid "Personal" +msgstr "" + +#: app.php:297 +msgid "Settings" +msgstr "" + +#: app.php:302 +msgid "Users" +msgstr "" + +#: app.php:309 +msgid "Apps" +msgstr "" + +#: app.php:311 +msgid "Admin" +msgstr "" + +#: files.php:328 +msgid "ZIP download is turned off." +msgstr "" + +#: files.php:329 +msgid "Files need to be downloaded one by one." +msgstr "" + +#: files.php:329 files.php:354 +msgid "Back to Files" +msgstr "" + +#: files.php:353 +msgid "Selected files too large to generate zip file." +msgstr "" + +#: json.php:28 +msgid "Application is not enabled" +msgstr "" + +#: json.php:39 json.php:64 json.php:77 json.php:89 +msgid "Authentication error" +msgstr "" + +#: json.php:51 +msgid "Token expired. Please reload page." +msgstr "" + +#: template.php:87 +msgid "seconds ago" +msgstr "" + +#: template.php:88 +msgid "1 minute ago" +msgstr "" + +#: template.php:89 +#, php-format +msgid "%d minutes ago" +msgstr "" + +#: template.php:92 +msgid "today" +msgstr "" + +#: template.php:93 +msgid "yesterday" +msgstr "" + +#: template.php:94 +#, php-format +msgid "%d days ago" +msgstr "" + +#: template.php:95 +msgid "last month" +msgstr "" + +#: template.php:96 +msgid "months ago" +msgstr "" + +#: template.php:97 +msgid "last year" +msgstr "" + +#: template.php:98 +msgid "years ago" +msgstr "" + +#: updater.php:75 +#, php-format +msgid "%s is available. Get more information" +msgstr "" + +#: updater.php:77 +msgid "up to date" +msgstr "" + +#: updater.php:80 +msgid "updates check is disabled" +msgstr "" diff --git a/l10n/ta_LK/settings.po b/l10n/ta_LK/settings.po new file mode 100644 index 00000000000..934df12e9d2 --- /dev/null +++ b/l10n/ta_LK/settings.po @@ -0,0 +1,320 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2011-07-25 16:05+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ajax/apps/ocs.php:23 +msgid "Unable to load list from App Store" +msgstr "" + +#: ajax/creategroup.php:12 +msgid "Group already exists" +msgstr "" + +#: ajax/creategroup.php:21 +msgid "Unable to add group" +msgstr "" + +#: ajax/enableapp.php:14 +msgid "Could not enable app. " +msgstr "" + +#: ajax/lostpassword.php:14 +msgid "Email saved" +msgstr "" + +#: ajax/lostpassword.php:16 +msgid "Invalid email" +msgstr "" + +#: ajax/openid.php:16 +msgid "OpenID Changed" +msgstr "" + +#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23 +msgid "Invalid request" +msgstr "" + +#: ajax/removegroup.php:16 +msgid "Unable to delete group" +msgstr "" + +#: ajax/removeuser.php:18 ajax/setquota.php:18 ajax/togglegroups.php:15 +msgid "Authentication error" +msgstr "" + +#: ajax/removeuser.php:27 +msgid "Unable to delete user" +msgstr "" + +#: ajax/setlanguage.php:18 +msgid "Language changed" +msgstr "" + +#: ajax/togglegroups.php:25 +#, php-format +msgid "Unable to add user to group %s" +msgstr "" + +#: ajax/togglegroups.php:31 +#, php-format +msgid "Unable to remove user from group %s" +msgstr "" + +#: js/apps.js:28 js/apps.js:65 +msgid "Disable" +msgstr "" + +#: js/apps.js:28 js/apps.js:54 +msgid "Enable" +msgstr "" + +#: js/personal.js:69 +msgid "Saving..." +msgstr "" + +#: personal.php:42 personal.php:43 +msgid "__language_name__" +msgstr "" + +#: templates/admin.php:14 +msgid "Security Warning" +msgstr "" + +#: templates/admin.php:17 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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:31 +msgid "Cron" +msgstr "" + +#: templates/admin.php:37 +msgid "Execute one task with each page loaded" +msgstr "" + +#: templates/admin.php:43 +msgid "" +"cron.php is registered at a webcron service. Call the cron.php page in the " +"owncloud root once a minute over http." +msgstr "" + +#: templates/admin.php:49 +msgid "" +"Use systems cron service. Call the cron.php file in the owncloud folder via " +"a system cronjob once a minute." +msgstr "" + +#: templates/admin.php:56 +msgid "Sharing" +msgstr "" + +#: templates/admin.php:61 +msgid "Enable Share API" +msgstr "" + +#: templates/admin.php:62 +msgid "Allow apps to use the Share API" +msgstr "" + +#: templates/admin.php:67 +msgid "Allow links" +msgstr "" + +#: templates/admin.php:68 +msgid "Allow users to share items to the public with links" +msgstr "" + +#: templates/admin.php:73 +msgid "Allow resharing" +msgstr "" + +#: templates/admin.php:74 +msgid "Allow users to share items shared with them again" +msgstr "" + +#: templates/admin.php:79 +msgid "Allow users to share with anyone" +msgstr "" + +#: templates/admin.php:81 +msgid "Allow users to only share with users in their groups" +msgstr "" + +#: templates/admin.php:88 +msgid "Log" +msgstr "" + +#: templates/admin.php:116 +msgid "More" +msgstr "" + +#: templates/admin.php:124 +msgid "" +"Developed by the ownCloud community, the source code is " +"licensed under the AGPL." +msgstr "" + +#: templates/apps.php:10 +msgid "Add your App" +msgstr "" + +#: templates/apps.php:11 +msgid "More Apps" +msgstr "" + +#: templates/apps.php:27 +msgid "Select an App" +msgstr "" + +#: templates/apps.php:31 +msgid "See application page at apps.owncloud.com" +msgstr "" + +#: templates/apps.php:32 +msgid "-licensed by " +msgstr "" + +#: templates/help.php:9 +msgid "Documentation" +msgstr "" + +#: templates/help.php:10 +msgid "Managing Big Files" +msgstr "" + +#: templates/help.php:11 +msgid "Ask a question" +msgstr "" + +#: templates/help.php:23 +msgid "Problems connecting to help database." +msgstr "" + +#: templates/help.php:24 +msgid "Go there manually." +msgstr "" + +#: templates/help.php:32 +msgid "Answer" +msgstr "" + +#: templates/personal.php:8 +#, php-format +msgid "You have used %s of the available %s" +msgstr "" + +#: templates/personal.php:12 +msgid "Desktop and Mobile Syncing Clients" +msgstr "" + +#: templates/personal.php:13 +msgid "Download" +msgstr "" + +#: templates/personal.php:19 +msgid "Your password was changed" +msgstr "" + +#: templates/personal.php:20 +msgid "Unable to change your password" +msgstr "" + +#: templates/personal.php:21 +msgid "Current password" +msgstr "" + +#: templates/personal.php:22 +msgid "New password" +msgstr "" + +#: templates/personal.php:23 +msgid "show" +msgstr "" + +#: templates/personal.php:24 +msgid "Change password" +msgstr "" + +#: templates/personal.php:30 +msgid "Email" +msgstr "" + +#: templates/personal.php:31 +msgid "Your email address" +msgstr "" + +#: templates/personal.php:32 +msgid "Fill in an email address to enable password recovery" +msgstr "" + +#: templates/personal.php:38 templates/personal.php:39 +msgid "Language" +msgstr "" + +#: templates/personal.php:44 +msgid "Help translate" +msgstr "" + +#: templates/personal.php:51 +msgid "use this address to connect to your ownCloud in your file manager" +msgstr "" + +#: templates/users.php:21 templates/users.php:76 +msgid "Name" +msgstr "" + +#: templates/users.php:23 templates/users.php:77 +msgid "Password" +msgstr "" + +#: templates/users.php:26 templates/users.php:78 templates/users.php:98 +msgid "Groups" +msgstr "" + +#: templates/users.php:32 +msgid "Create" +msgstr "" + +#: templates/users.php:35 +msgid "Default Quota" +msgstr "" + +#: templates/users.php:55 templates/users.php:138 +msgid "Other" +msgstr "" + +#: templates/users.php:80 templates/users.php:112 +msgid "Group Admin" +msgstr "" + +#: templates/users.php:82 +msgid "Quota" +msgstr "" + +#: templates/users.php:146 +msgid "Delete" +msgstr "" diff --git a/l10n/ta_LK/user_ldap.po b/l10n/ta_LK/user_ldap.po new file mode 100644 index 00000000000..878df1455d0 --- /dev/null +++ b/l10n/ta_LK/user_ldap.po @@ -0,0 +1,170 @@ +# 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: http://bugs.owncloud.org/\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" +"PO-Revision-Date: 2012-08-12 22:45+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta_LK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: templates/settings.php:8 +msgid "Host" +msgstr "" + +#: templates/settings.php:8 +msgid "" +"You can omit the protocol, except you require SSL. Then start with ldaps://" +msgstr "" + +#: templates/settings.php:9 +msgid "Base DN" +msgstr "" + +#: templates/settings.php:9 +msgid "You can specify Base DN for users and groups in the Advanced tab" +msgstr "" + +#: templates/settings.php:10 +msgid "User DN" +msgstr "" + +#: templates/settings.php:10 +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/settings.php:11 +msgid "Password" +msgstr "" + +#: templates/settings.php:11 +msgid "For anonymous access, leave DN and Password empty." +msgstr "" + +#: templates/settings.php:12 +msgid "User Login Filter" +msgstr "" + +#: templates/settings.php:12 +#, php-format +msgid "" +"Defines the filter to apply, when login is attempted. %%uid replaces the " +"username in the login action." +msgstr "" + +#: templates/settings.php:12 +#, php-format +msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" +msgstr "" + +#: templates/settings.php:13 +msgid "User List Filter" +msgstr "" + +#: templates/settings.php:13 +msgid "Defines the filter to apply, when retrieving users." +msgstr "" + +#: templates/settings.php:13 +msgid "without any placeholder, e.g. \"objectClass=person\"." +msgstr "" + +#: templates/settings.php:14 +msgid "Group Filter" +msgstr "" + +#: templates/settings.php:14 +msgid "Defines the filter to apply, when retrieving groups." +msgstr "" + +#: templates/settings.php:14 +msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." +msgstr "" + +#: templates/settings.php:17 +msgid "Port" +msgstr "" + +#: templates/settings.php:18 +msgid "Base User Tree" +msgstr "" + +#: templates/settings.php:19 +msgid "Base Group Tree" +msgstr "" + +#: templates/settings.php:20 +msgid "Group-Member association" +msgstr "" + +#: templates/settings.php:21 +msgid "Use TLS" +msgstr "" + +#: templates/settings.php:21 +msgid "Do not use it for SSL connections, it will fail." +msgstr "" + +#: templates/settings.php:22 +msgid "Case insensitve LDAP server (Windows)" +msgstr "" + +#: templates/settings.php:23 +msgid "Turn off SSL certificate validation." +msgstr "" + +#: templates/settings.php:23 +msgid "" +"If connection only works with this option, import the LDAP server's SSL " +"certificate in your ownCloud server." +msgstr "" + +#: templates/settings.php:23 +msgid "Not recommended, use for testing only." +msgstr "" + +#: templates/settings.php:24 +msgid "User Display Name Field" +msgstr "" + +#: templates/settings.php:24 +msgid "The LDAP attribute to use to generate the user`s ownCloud name." +msgstr "" + +#: templates/settings.php:25 +msgid "Group Display Name Field" +msgstr "" + +#: templates/settings.php:25 +msgid "The LDAP attribute to use to generate the groups`s ownCloud name." +msgstr "" + +#: templates/settings.php:27 +msgid "in bytes" +msgstr "" + +#: templates/settings.php:29 +msgid "in seconds. A change empties the cache." +msgstr "" + +#: templates/settings.php:30 +msgid "" +"Leave empty for user name (default). Otherwise, specify an LDAP/AD " +"attribute." +msgstr "" + +#: templates/settings.php:32 +msgid "Help" +msgstr "" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index b12bec9a772..691c7cc63c5 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -146,7 +146,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "" @@ -238,8 +239,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "" @@ -299,7 +300,7 @@ msgstr "" msgid "Add" msgstr "" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -315,48 +316,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "" @@ -368,15 +378,29 @@ msgstr "" msgid "Log out" msgstr "" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "" @@ -391,3 +415,17 @@ msgstr "" #: templates/part.pagenavi.php:20 msgid "next" msgstr "" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index e3f198351b3..2be16caf0a2 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 81653fc4976..ef857a831d1 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index 943b147cf7b..570055034cf 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 9349caaa325..e01ebef68a6 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 9d6c5cde279..7e12c35e75e 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 831124a8aa5..6a33055b64b 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -61,7 +61,7 @@ msgstr "" msgid "Application is not enabled" msgstr "" -#: json.php:39 json.php:63 json.php:75 +#: json.php:39 json.php:64 json.php:77 json.php:89 msgid "Authentication error" msgstr "" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index 6c422f4427c..24b905ed9a9 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,16 +21,11 @@ msgstr "" msgid "Unable to load list from App Store" msgstr "" -#: ajax/creategroup.php:9 ajax/removeuser.php:18 ajax/setquota.php:18 -#: ajax/togglegroups.php:15 -msgid "Authentication error" -msgstr "" - -#: ajax/creategroup.php:19 +#: ajax/creategroup.php:12 msgid "Group already exists" msgstr "" -#: ajax/creategroup.php:28 +#: ajax/creategroup.php:21 msgid "Unable to add group" msgstr "" @@ -58,6 +53,10 @@ msgstr "" msgid "Unable to delete group" msgstr "" +#: ajax/removeuser.php:18 ajax/setquota.php:18 ajax/togglegroups.php:15 +msgid "Authentication error" +msgstr "" + #: ajax/removeuser.php:27 msgid "Unable to delete user" msgstr "" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index 5c27df10ae1..ca917b56419 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" +"POT-Creation-Date: 2012-10-16 02:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/th_TH/core.po b/l10n/th_TH/core.po index 724c62ae757..7c760142837 100644 --- a/l10n/th_TH/core.po +++ b/l10n/th_TH/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" @@ -148,7 +148,8 @@ msgstr "แชร์ด้วยลิงก์" msgid "Password protect" msgstr "ใส่รหัสผ่านไว้" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "รหัสผ่าน" @@ -240,8 +241,8 @@ msgstr "ส่งคำร้องเรียบร้อยแล้ว" msgid "Login failed!" msgstr "ไม่สามารถเข้าสู่ระบบได้!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "ชื่อผู้ใช้งาน" @@ -301,7 +302,7 @@ msgstr "แก้ไขหมวดหมู่" msgid "Add" msgstr "เพิ่ม" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -317,48 +318,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "สร้าง บัญชีผู้ดูแลระบบ" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "ขั้นสูง" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "โฟลเดอร์เก็บข้อมูล" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "กำหนดค่าฐานข้อมูล" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "จะถูกใช้" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "ชื่อผู้ใช้งานฐานข้อมูล" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "รหัสผ่านฐานข้อมูล" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "ชื่อฐานข้อมูล" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "พื้นที่ตารางในฐานข้อมูล" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Database host" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "ติดตั้งเรียบร้อยแล้ว" @@ -370,15 +380,29 @@ msgstr "web services under your control" msgid "Log out" msgstr "ออกจากระบบ" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "ลืมรหัสผ่าน?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "จำรหัสผ่าน" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "เข้าสู่ระบบ" @@ -393,3 +417,17 @@ msgstr "ก่อนหน้า" #: templates/part.pagenavi.php:20 msgid "next" msgstr "ถัดไป" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/tr/core.po b/l10n/tr/core.po index e9b8c396854..17d229d0355 100644 --- a/l10n/tr/core.po +++ b/l10n/tr/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -149,7 +149,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Parola" @@ -241,8 +242,8 @@ msgstr "İstendi" msgid "Login failed!" msgstr "Giriş başarısız!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Kullanıcı adı" @@ -302,7 +303,7 @@ msgstr "Kategorileri düzenle" msgid "Add" msgstr "Ekle" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -318,48 +319,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Bir yönetici hesabı oluşturun" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Gelişmiş" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Veri klasörü" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Veritabanını ayarla" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "kullanılacak" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Veritabanı kullanıcı adı" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Veritabanı parolası" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Veritabanı adı" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "Veritabanı tablo alanı" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Veritabanı sunucusu" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Kurulumu tamamla" @@ -371,15 +381,29 @@ msgstr "kontrolünüzdeki web servisleri" msgid "Log out" msgstr "Çıkış yap" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Parolanızı mı unuttunuz?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "hatırla" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Giriş yap" @@ -394,3 +418,17 @@ msgstr "önceki" #: templates/part.pagenavi.php:20 msgid "next" msgstr "sonraki" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/uk/core.po b/l10n/uk/core.po index 5fd0d8dfb12..8657d0895cd 100644 --- a/l10n/uk/core.po +++ b/l10n/uk/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" @@ -149,7 +149,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Пароль" @@ -241,8 +242,8 @@ msgstr "" msgid "Login failed!" msgstr "" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Ім'я користувача" @@ -302,7 +303,7 @@ msgstr "" msgid "Add" msgstr "Додати" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -318,48 +319,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Налаштування бази даних" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "буде використано" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Користувач бази даних" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Пароль для бази даних" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Назва бази даних" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Завершити налаштування" @@ -371,15 +381,29 @@ msgstr "веб-сервіс під вашим контролем" msgid "Log out" msgstr "Вихід" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Забули пароль?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "запам'ятати" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Вхід" @@ -394,3 +418,17 @@ msgstr "" #: templates/part.pagenavi.php:20 msgid "next" msgstr "" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/vi/core.po b/l10n/vi/core.po index 132f026b98c..83429ba958a 100644 --- a/l10n/vi/core.po +++ b/l10n/vi/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" @@ -147,7 +147,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "Mật khẩu" @@ -239,8 +240,8 @@ msgstr "Yêu cầu" msgid "Login failed!" msgstr "Bạn đã nhập sai mật khẩu hay tên người dùng !" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "Tên người dùng" @@ -300,7 +301,7 @@ msgstr "Sửa thể loại" msgid "Add" msgstr "Thêm" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -316,48 +317,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "Tạo một tài khoản quản trị" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "Nâng cao" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "Thư mục dữ liệu" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "Cấu hình Cơ Sở Dữ Liệu" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "được sử dụng" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "Người dùng cơ sở dữ liệu" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "Mật khẩu cơ sở dữ liệu" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "Tên cơ sở dữ liệu" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "Database host" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "Cài đặt hoàn tất" @@ -369,15 +379,29 @@ msgstr "các dịch vụ web dưới sự kiểm soát của bạn" msgid "Log out" msgstr "Đăng xuất" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "Bạn quên mật khẩu ?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "Nhớ" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "Đăng nhập" @@ -392,3 +416,17 @@ msgstr "Lùi lại" #: templates/part.pagenavi.php:20 msgid "next" msgstr "Kế tiếp" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/zh_CN.GB2312/core.po b/l10n/zh_CN.GB2312/core.po index 68632f16902..ce748b4f8c4 100644 --- a/l10n/zh_CN.GB2312/core.po +++ b/l10n/zh_CN.GB2312/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -148,7 +148,8 @@ msgstr "分享链接" msgid "Password protect" msgstr "密码保护" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "密码" @@ -240,8 +241,8 @@ msgstr "请求" msgid "Login failed!" msgstr "登陆失败!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "用户名" @@ -301,7 +302,7 @@ msgstr "编辑分类" msgid "Add" msgstr "添加" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -317,48 +318,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "建立一个 管理帐户" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "进阶" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "数据存放文件夹" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "配置数据库" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "将会使用" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "数据库用户" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "数据库密码" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "数据库用户名" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "数据库表格空间" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "数据库主机" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "完成安装" @@ -370,15 +380,29 @@ msgstr "你控制下的网络服务" msgid "Log out" msgstr "注销" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "忘记密码?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "备忘" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "登陆" @@ -393,3 +417,17 @@ msgstr "后退" #: templates/part.pagenavi.php:20 msgid "next" msgstr "前进" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/zh_CN/core.po b/l10n/zh_CN/core.po index 1802288e32a..bab36633e1a 100644 --- a/l10n/zh_CN/core.po +++ b/l10n/zh_CN/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -150,7 +150,8 @@ msgstr "共享链接" msgid "Password protect" msgstr "密码保护" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "密码" @@ -242,8 +243,8 @@ msgstr "已请求" msgid "Login failed!" msgstr "登录失败!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "用户名" @@ -303,7 +304,7 @@ msgstr "编辑分类" msgid "Add" msgstr "添加" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -319,48 +320,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "创建管理员账号" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "高级" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "数据目录" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "配置数据库" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "将被使用" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "数据库用户" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "数据库密码" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "数据库名" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "数据库表空间" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "数据库主机" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "安装完成" @@ -372,15 +382,29 @@ msgstr "由您掌控的网络服务" msgid "Log out" msgstr "注销" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "忘记密码?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "记住" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "登录" @@ -395,3 +419,17 @@ msgstr "上一页" #: templates/part.pagenavi.php:20 msgid "next" msgstr "下一页" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po index 73eab0d57cb..9bb44a04f17 100644 --- a/l10n/zh_TW/core.po +++ b/l10n/zh_TW/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-10-15 02:04+0200\n" -"PO-Revision-Date: 2012-10-15 00:05+0000\n" +"POT-Creation-Date: 2012-10-16 02:04+0200\n" +"PO-Revision-Date: 2012-10-16 00:05+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -148,7 +148,8 @@ msgstr "" msgid "Password protect" msgstr "" -#: js/share.js:147 templates/installation.php:36 templates/login.php:13 +#: js/share.js:147 templates/installation.php:42 templates/login.php:24 +#: templates/verify.php:13 msgid "Password" msgstr "密碼" @@ -240,8 +241,8 @@ msgstr "已要求" msgid "Login failed!" msgstr "登入失敗!" -#: lostpassword/templates/lostpassword.php:11 templates/installation.php:32 -#: templates/login.php:9 +#: lostpassword/templates/lostpassword.php:11 templates/installation.php:38 +#: templates/login.php:20 msgid "Username" msgstr "使用者名稱" @@ -301,7 +302,7 @@ msgstr "編輯分類" msgid "Add" msgstr "添加" -#: templates/installation.php:23 +#: templates/installation.php:23 templates/installation.php:31 msgid "Security Warning" msgstr "" @@ -317,48 +318,57 @@ msgid "" "password reset tokens and take over your account." msgstr "" -#: templates/installation.php:30 +#: templates/installation.php:32 +msgid "" +"Your data directory and your files are probably accessible from the " +"internet. The .htaccess file that ownCloud provides 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/installation.php:36 msgid "Create an admin account" msgstr "建立一個管理者帳號" -#: templates/installation.php:42 +#: templates/installation.php:48 msgid "Advanced" msgstr "進階" -#: templates/installation.php:44 +#: templates/installation.php:50 msgid "Data folder" msgstr "資料夾" -#: templates/installation.php:51 +#: templates/installation.php:57 msgid "Configure the database" msgstr "設定資料庫" -#: templates/installation.php:56 templates/installation.php:67 -#: templates/installation.php:77 templates/installation.php:87 +#: templates/installation.php:62 templates/installation.php:73 +#: templates/installation.php:83 templates/installation.php:93 msgid "will be used" msgstr "將會使用" -#: templates/installation.php:99 +#: templates/installation.php:105 msgid "Database user" msgstr "資料庫使用者" -#: templates/installation.php:103 +#: templates/installation.php:109 msgid "Database password" msgstr "資料庫密碼" -#: templates/installation.php:107 +#: templates/installation.php:113 msgid "Database name" msgstr "資料庫名稱" -#: templates/installation.php:115 +#: templates/installation.php:121 msgid "Database tablespace" msgstr "資料庫 tablespace" -#: templates/installation.php:121 +#: templates/installation.php:127 msgid "Database host" msgstr "資料庫主機" -#: templates/installation.php:126 +#: templates/installation.php:132 msgid "Finish setup" msgstr "完成設定" @@ -370,15 +380,29 @@ msgstr "網路服務已在你控制" msgid "Log out" msgstr "登出" -#: templates/login.php:6 +#: templates/login.php:8 +msgid "Automatic logon rejected!" +msgstr "" + +#: templates/login.php:9 +msgid "" +"If you did not change your password recently, your account may be " +"compromised!" +msgstr "" + +#: templates/login.php:10 +msgid "Please change your password to secure your account again." +msgstr "" + +#: templates/login.php:15 msgid "Lost your password?" msgstr "忘記密碼?" -#: templates/login.php:16 +#: templates/login.php:27 msgid "remember" msgstr "記住" -#: templates/login.php:17 +#: templates/login.php:28 msgid "Log in" msgstr "登入" @@ -393,3 +417,17 @@ msgstr "上一頁" #: templates/part.pagenavi.php:20 msgid "next" msgstr "下一頁" + +#: templates/verify.php:5 +msgid "Security Warning!" +msgstr "" + +#: templates/verify.php:6 +msgid "" +"Please verify your password.
    For security reasons you may be " +"occasionally asked to enter your password again." +msgstr "" + +#: templates/verify.php:16 +msgid "Verify" +msgstr "" diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php index b81f545b13e..3a7bf0749bf 100644 --- a/settings/l10n/fr.php +++ b/settings/l10n/fr.php @@ -1,6 +1,5 @@ "Impossible de charger la liste depuis l'App Store", -"Authentication error" => "Erreur d'authentification", "Group already exists" => "Ce groupe existe déjà", "Unable to add group" => "Impossible d'ajouter le groupe", "Could not enable app. " => "Impossible d'activer l'Application", @@ -9,6 +8,7 @@ "OpenID Changed" => "Identifiant OpenID changé", "Invalid request" => "Requête invalide", "Unable to delete group" => "Impossible de supprimer le groupe", +"Authentication error" => "Erreur d'authentification", "Unable to delete user" => "Impossible de supprimer l'utilisateur", "Language changed" => "Langue changée", "Unable to add user to group %s" => "Impossible d'ajouter l'utilisateur au groupe %s", @@ -36,6 +36,7 @@ "More" => "Plus", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Développé par la communauté ownCloud, le code source est publié sous license AGPL.", "Add your App" => "Ajoutez votre application", +"More Apps" => "Plus d'applications…", "Select an App" => "Sélectionner une Application", "See application page at apps.owncloud.com" => "Voir la page des applications à l'url apps.owncloud.com", "-licensed by " => "Distribué sous licence , par ", diff --git a/settings/l10n/ja_JP.php b/settings/l10n/ja_JP.php index 38e9dfda65a..81b7861a3be 100644 --- a/settings/l10n/ja_JP.php +++ b/settings/l10n/ja_JP.php @@ -1,6 +1,5 @@ "アプリストアからリストをロードできません", -"Authentication error" => "認証エラー", "Group already exists" => "グループは既に存在しています", "Unable to add group" => "グループを追加できません", "Could not enable app. " => "アプリを有効にできませんでした。", @@ -9,6 +8,7 @@ "OpenID Changed" => "OpenIDが変更されました", "Invalid request" => "無効なリクエストです", "Unable to delete group" => "グループを削除できません", +"Authentication error" => "認証エラー", "Unable to delete user" => "ユーザを削除できません", "Language changed" => "言語が変更されました", "Unable to add user to group %s" => "ユーザをグループ %s に追加できません", @@ -46,7 +46,7 @@ "Problems connecting to help database." => "ヘルプデータベースへの接続時に問題が発生しました", "Go there manually." => "手動で移動してください。", "Answer" => "解答", -"You have used %s of the available %s" => "現在、%s / %s を利用しています", +"You have used %s of the available %s" => "現在、 %s / %s を利用しています", "Desktop and Mobile Syncing Clients" => "デスクトップおよびモバイル用の同期クライアント", "Download" => "ダウンロード", "Your password was changed" => "パスワードを変更しました", diff --git a/settings/l10n/si_LK.php b/settings/l10n/si_LK.php new file mode 100644 index 00000000000..451fb8a9858 --- /dev/null +++ b/settings/l10n/si_LK.php @@ -0,0 +1,15 @@ + "අවලංගු අයදුම", +"Language changed" => "භාෂාව ාවනස් කිරීම", +"Answer" => "පිළිතුර", +"Current password" => "නූතන මුරපදය", +"New password" => "නව මුරපදය", +"show" => "ප්‍රදර්ශනය කිරීම", +"Change password" => "මුරපදය වෙනස් කිරීම", +"Language" => "භාෂාව", +"Name" => "නාමය", +"Password" => "මුරපදය", +"Groups" => "සමූහය", +"Create" => "තනනවා", +"Delete" => "මකා දමනවා" +); -- GitLab From b08a1696f5a30321b0073799d6f0984daf392115 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Tue, 16 Oct 2012 12:46:39 +0200 Subject: [PATCH 100/576] normalize path to avoid problems with trailing slashes, double-slashes, etc. --- apps/files_sharing/public.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index d79f1955978..59385dd6868 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -24,12 +24,12 @@ if (isset($_GET['token'])) { if (isset($_GET['file']) || isset($_GET['dir'])) { if (isset($_GET['dir'])) { $type = 'folder'; - $path = $_GET['dir']; + $path = OC_Filesystem::normalizePath($_GET['dir']); $baseDir = $path; $dir = $baseDir; } else { $type = 'file'; - $path = $_GET['file']; + $path = OC_Filesystem::normalizePath($_GET['file']); } $uidOwner = substr($path, 1, strpos($path, '/', 1) - 1); if (OCP\User::userExists($uidOwner)) { -- GitLab From e7c9d5fe54ec619793ae77829b93df4635279662 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 13:53:40 +0200 Subject: [PATCH 101/576] Set oc_token to httponly --- lib/user.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/user.php b/lib/user.php index 11373a74014..e577002650c 100644 --- a/lib/user.php +++ b/lib/user.php @@ -476,7 +476,7 @@ class OC_User { $secure_cookie = OC_Config::getValue("forcessl", false); $expires = time() + OC_Config::getValue('remember_login_cookie_lifetime', 60*60*24*15); setcookie("oc_username", $username, $expires, '', '', $secure_cookie); - setcookie("oc_token", $token, $expires, '', '', $secure_cookie); + setcookie("oc_token", $token, $expires, '', '', $secure_cookie, true); setcookie("oc_remember_login", true, $expires, '', '', $secure_cookie); } -- GitLab From e8441becdba97ce46585043a071d01b5c74526a6 Mon Sep 17 00:00:00 2001 From: scambra Date: Thu, 14 Jun 2012 16:09:32 +0200 Subject: [PATCH 102/576] delete fscache on deleting user --- lib/filecache.php | 3 ++- lib/filecache/update.php | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/filecache.php b/lib/filecache.php index 8fcb6fd9404..a36cfef6759 100644 --- a/lib/filecache.php +++ b/lib/filecache.php @@ -203,7 +203,7 @@ class OC_FileCache{ OC_Cache::remove('fileid/'.$root.$path); } - + /** * return array of filenames matching the querty * @param string $query @@ -509,3 +509,4 @@ class OC_FileCache{ OC_Hook::connect('OC_Filesystem','post_write','OC_FileCache_Update','fileSystemWatcherWrite'); OC_Hook::connect('OC_Filesystem','post_delete','OC_FileCache_Update','fileSystemWatcherDelete'); OC_Hook::connect('OC_Filesystem','post_rename','OC_FileCache_Update','fileSystemWatcherRename'); +OC_Hook::connect('OC_User','post_deleteUser','OC_FileCache_Update','deleteFromUser'); diff --git a/lib/filecache/update.php b/lib/filecache/update.php index 4a5ea873b17..f9d64d0ae99 100644 --- a/lib/filecache/update.php +++ b/lib/filecache/update.php @@ -216,4 +216,12 @@ class OC_FileCache_Update{ OC_FileCache::increaseSize(dirname($newPath), $oldSize, $root); OC_FileCache::move($oldPath, $newPath); } + + /** + * delete files owned by user from the cache + * @param string $parameters$parameters["uid"]) + */ + public static function deleteFromUser($parameters) { + OC_FileCache::clear($parameters["uid"]); + } } -- GitLab From de7b46c66a77dd207929c222ec71d0b238da5f50 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 16 Oct 2012 19:42:17 +0200 Subject: [PATCH 103/576] Use `get_magic_quotes_gpc()` to determine if magic_quotes is enabled set_magic_quotes_runtime gives a PHP warning --- lib/base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/base.php b/lib/base.php index 803d3e8bde5..a1ad4f6dc0a 100644 --- a/lib/base.php +++ b/lib/base.php @@ -307,7 +307,7 @@ class OC{ ini_set('arg_separator.output', '&'); // try to switch magic quotes off. - if(function_exists('set_magic_quotes_runtime')) { + if(get_magic_quotes_gpc()) { @set_magic_quotes_runtime(false); } -- GitLab From ec253f1354b6993cf204ee60ec87350119a3c91e Mon Sep 17 00:00:00 2001 From: scambra Date: Thu, 7 Jun 2012 14:44:59 +0200 Subject: [PATCH 104/576] Use strftime to format date with translated month names --- core/l10n/l10n-de.php | 6 +++--- core/l10n/l10n-en.php | 5 +++++ core/l10n/l10n-es.php | 5 +++++ lib/l10n.php | 10 ++++++---- lib/util.php | 4 ++-- 5 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 core/l10n/l10n-en.php create mode 100644 core/l10n/l10n-es.php diff --git a/core/l10n/l10n-de.php b/core/l10n/l10n-de.php index f3084b05df8..976f8ce3c51 100644 --- a/core/l10n/l10n-de.php +++ b/core/l10n/l10n-de.php @@ -1,5 +1,5 @@ 'd.m.Y', - 'datetime' => 'd.m.Y H:i:s', - 'time' => 'H:i:s' ); + 'date' => '%d.%m.%Y', + 'datetime' => '%d.%m.%Y %H:%M:%S', + 'time' => '%H:%M:%S' ); diff --git a/core/l10n/l10n-en.php b/core/l10n/l10n-en.php new file mode 100644 index 00000000000..3a050d477ce --- /dev/null +++ b/core/l10n/l10n-en.php @@ -0,0 +1,5 @@ + '%B %e, %Y', + 'datetime' => '%B %e, %Y %H:%M', + 'time' => '%H:%M:%S' ); diff --git a/core/l10n/l10n-es.php b/core/l10n/l10n-es.php new file mode 100644 index 00000000000..b81464b491a --- /dev/null +++ b/core/l10n/l10n-es.php @@ -0,0 +1,5 @@ + '%e de %B de %Y', + 'datetime' => '%e de %B de %Y %H:%M', + 'time' => '%H:%M:%S' ); diff --git a/lib/l10n.php b/lib/l10n.php index 4eb4c323d88..7df01ced72f 100644 --- a/lib/l10n.php +++ b/lib/l10n.php @@ -58,9 +58,9 @@ class OC_L10N{ * Localization */ private $localizations = array( - 'date' => 'd.m.Y', - 'datetime' => 'd.m.Y H:i:s', - 'time' => 'H:i:s'); + 'date' => '%d.%m.%Y', + 'datetime' => '%d.%m.%Y %H:%M:%S', + 'time' => '%H:%M:%S'); /** * get an L10N instance @@ -216,7 +216,9 @@ class OC_L10N{ case 'time': if($data instanceof DateTime) return $data->format($this->localizations[$type]); elseif(is_string($data)) $data = strtotime($data); - return date($this->localizations[$type], $data); + $language = self::findLanguage(); + setlocale(LC_TIME, array($language, $language.'_'.strtoupper($language))); + return strftime($this->localizations[$type], $data); break; default: return false; diff --git a/lib/util.php b/lib/util.php index 5771b89f265..880a519d347 100755 --- a/lib/util.php +++ b/lib/util.php @@ -162,8 +162,8 @@ class OC_Util { $offset=$clientTimeZone-$systemTimeZone; $timestamp=$timestamp+$offset*60; } - $timeformat=$dateOnly?'F j, Y':'F j, Y, H:i'; - return date($timeformat,$timestamp); + $l=OC_L10N::get('lib'); + return $l->l($dateOnly ? 'date' : 'datetime', $timestamp); } /** -- GitLab From 5ecce8bfb7e615b4b0576ff28d21e5b8a5d68878 Mon Sep 17 00:00:00 2001 From: scambra Date: Fri, 21 Sep 2012 07:38:07 +0200 Subject: [PATCH 105/576] Translate modification date when file is created/uploaded, use same strings as lib/template.php --- apps/files/js/files.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 777a5ec647e..fe89b8105ac 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -843,20 +843,19 @@ function relative_modified_date(timestamp) { var diffhours = Math.round(diffminutes/60); var diffdays = Math.round(diffhours/24); var diffmonths = Math.round(diffdays/31); - var diffyears = Math.round(diffdays/365); if(timediff < 60) { return t('files','seconds ago'); } - else if(timediff < 120) { return '1 '+t('files','minute ago'); } - else if(timediff < 3600) { return diffminutes+' '+t('files','minutes ago'); } + else if(timediff < 120) { return t('files','1 minute ago'); } + else if(timediff < 3600) { return t('files','{minutes} minutes ago',{minutes: diffminutes}); } //else if($timediff < 7200) { return '1 hour ago'; } //else if($timediff < 86400) { return $diffhours.' hours ago'; } else if(timediff < 86400) { return t('files','today'); } else if(timediff < 172800) { return t('files','yesterday'); } - else if(timediff < 2678400) { return diffdays+' '+t('files','days ago'); } + else if(timediff < 2678400) { return t('files','{days} days ago',{days: diffdays}); } else if(timediff < 5184000) { return t('files','last month'); } //else if($timediff < 31556926) { return $diffmonths.' months ago'; } else if(timediff < 31556926) { return t('files','months ago'); } else if(timediff < 63113852) { return t('files','last year'); } - else { return diffyears+' '+t('files','years ago'); } + else { return t('files','years ago'); } } function getMimeIcon(mime, ready){ -- GitLab From d8eb62232e2b3003925c87b316b66ed6b39ff100 Mon Sep 17 00:00:00 2001 From: scambra Date: Wed, 26 Sep 2012 07:10:54 +0200 Subject: [PATCH 106/576] don't duplicate locales with country code --- lib/l10n.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/l10n.php b/lib/l10n.php index 7df01ced72f..26611537175 100644 --- a/lib/l10n.php +++ b/lib/l10n.php @@ -216,8 +216,9 @@ class OC_L10N{ case 'time': if($data instanceof DateTime) return $data->format($this->localizations[$type]); elseif(is_string($data)) $data = strtotime($data); - $language = self::findLanguage(); - setlocale(LC_TIME, array($language, $language.'_'.strtoupper($language))); + $locales = array(self::findLanguage()); + if (strlen($locales[0]) == 2) $locales[] = $language.'_'.strtoupper($language); + setlocale(LC_TIME, $locales); return strftime($this->localizations[$type], $data); break; default: -- GitLab From c814a7a8411d709efd56b884f0219a18c544fcc0 Mon Sep 17 00:00:00 2001 From: scambra Date: Wed, 26 Sep 2012 07:46:04 +0200 Subject: [PATCH 107/576] use interpolation for some translations in js --- apps/files/js/filelist.js | 12 ++++++------ apps/files/js/files.js | 16 ++++++++-------- core/js/share.js | 6 +++--- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 870437ae672..6cddea8492c 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -189,9 +189,9 @@ var FileList={ checkName:function(oldName, newName, isNewFile) { if (isNewFile || $('tr').filterAttr('data-file', newName).length > 0) { if (isNewFile) { - $('#notification').html(escapeHTML(newName)+' '+t('files', 'already exists')+''+t('files', 'replace')+''+t('files', 'suggest name')+''+t('files', 'cancel')+''); + $('#notification').html(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+''+t('files', 'replace')+''+t('files', 'suggest name')+''+t('files', 'cancel')+''); } else { - $('#notification').html(escapeHTML(newName)+' '+t('files', 'already exists')+''+t('files', 'replace')+''+t('files', 'cancel')+''); + $('#notification').html(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+''+t('files', 'replace')+''+t('files', 'cancel')+''); } $('#notification').data('oldName', oldName); $('#notification').data('newName', newName); @@ -238,9 +238,9 @@ var FileList={ FileList.finishReplace(); }; if (isNewFile) { - $('#notification').html(t('files', 'replaced')+' '+newName+''+t('files', 'undo')+''); + $('#notification').html(t('files', 'replaced {new_name}', {new_name: newName})+''+t('files', 'undo')+''); } else { - $('#notification').html(t('files', 'replaced')+' '+newName+' '+t('files', 'with')+' '+oldName+''+t('files', 'undo')+''); + $('#notification').html(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+''+t('files', 'undo')+''); } $('#notification').fadeIn(); }, @@ -272,9 +272,9 @@ var FileList={ } else { // NOTE: Temporary fix to change the text to unshared for files in root of Shared folder if ($('#dir').val() == '/Shared') { - $('#notification').html(t('files', 'unshared')+' '+ escapeHTML(files) +''+t('files', 'undo')+''); + $('#notification').html(t('files', 'unshared {files}', {'files': escapeHTML(files)})+''+t('files', 'undo')+''); } else { - $('#notification').html(t('files', 'deleted')+' '+ escapeHTML(files)+''+t('files', 'undo')+''); + $('#notification').html(t('files', 'deleted {files}', {'files': escapeHTML(files)})+''+t('files', 'undo')+''); } $('#notification').fadeIn(); } diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 777a5ec647e..6715e3fec60 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -262,7 +262,7 @@ $(document).ready(function() { uploadtext.text(t('files', '1 file uploading')); uploadtext.show(); } else { - uploadtext.text(currentUploads + ' ' + t('files', 'files uploading')); + uploadtext.text(t('files', '{count} files uploading', {count: currentUploads})); } } } @@ -307,7 +307,7 @@ $(document).ready(function() { uploadtext.text(''); uploadtext.hide(); } else { - uploadtext.text(currentUploads + ' ' + t('files', 'files uploading')); + uploadtext.text(t('files', '{count} files uploading', {count: currentUploads})); } }) .error(function(jqXHR, textStatus, errorThrown) { @@ -322,7 +322,7 @@ $(document).ready(function() { uploadtext.text(''); uploadtext.hide(); } else { - uploadtext.text(currentUploads + ' ' + t('files', 'files uploading')); + uploadtext.text(t('files', '{count} files uploading', {count: currentUploads})); } $('#notification').hide(); $('#notification').text(t('files', 'Upload cancelled.')); @@ -678,7 +678,7 @@ function scanFiles(force,dir){ var scannerEventSource=new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir}); scanFiles.cancel=scannerEventSource.close.bind(scannerEventSource); scannerEventSource.listen('scanning',function(data){ - $('#scan-count').text(data.count + ' ' + t('files', 'files scanned')); + $('#scan-count').text(t('files', '{count} files scanned', {count: data.count})); $('#scan-current').text(data.file+'/'); }); scannerEventSource.listen('success',function(success){ @@ -788,9 +788,9 @@ function procesSelection(){ var selection=''; if(selectedFolders.length>0){ if(selectedFolders.length==1){ - selection+='1 '+t('files','folder'); + selection+=t('files','1 folder'); }else{ - selection+=selectedFolders.length+' '+t('files','folders'); + selection+=t('files','{count} folders',{count: selectedFolders.length}); } if(selectedFiles.length>0){ selection+=' & '; @@ -798,9 +798,9 @@ function procesSelection(){ } if(selectedFiles.length>0){ if(selectedFiles.length==1){ - selection+='1 '+t('files','file'); + selection+=t('files','1 file'); }else{ - selection+=selectedFiles.length+' '+t('files','files'); + selection+=t('files','{count} files',{count: selectedFiles.length}); } } $('#headerName>span.name').text(selection); diff --git a/core/js/share.js b/core/js/share.js index 7968edebb7a..de50e53a441 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -127,9 +127,9 @@ OC.Share={ var html = ' - +

    t('Problems connecting to help database.');?>

    t('Go there manually.');?>

    -- GitLab From f4d7955fe6f6531fda3b8d7e51a117d548a44002 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 3 Dec 2012 00:05:40 +0100 Subject: [PATCH 566/576] [tx-robot] updated from transifex --- apps/files/l10n/el.php | 1 + apps/files/l10n/eo.php | 4 +++- apps/files/l10n/gl.php | 3 +++ apps/files/l10n/pt_BR.php | 3 +++ core/l10n/eo.php | 3 +++ core/l10n/pt_BR.php | 8 ++++++++ l10n/ar/settings.po | 8 ++++---- l10n/bg_BG/settings.po | 4 ++-- l10n/ca/settings.po | 4 ++-- l10n/cs_CZ/settings.po | 4 ++-- l10n/da/settings.po | 4 ++-- l10n/de/settings.po | 4 ++-- l10n/de_DE/settings.po | 4 ++-- l10n/el/files.po | 8 ++++---- l10n/el/settings.po | 8 ++++---- l10n/eo/core.po | 20 ++++++++++---------- l10n/eo/files.po | 12 ++++++------ l10n/eo/lib.po | 24 ++++++++++++------------ l10n/eo/settings.po | 12 ++++++------ l10n/es/settings.po | 4 ++-- l10n/es_AR/settings.po | 4 ++-- l10n/et_EE/settings.po | 4 ++-- l10n/eu/settings.po | 4 ++-- l10n/fa/settings.po | 4 ++-- l10n/fi_FI/settings.po | 4 ++-- l10n/fr/settings.po | 4 ++-- l10n/gl/files.po | 12 ++++++------ l10n/gl/settings.po | 8 ++++---- l10n/he/settings.po | 4 ++-- l10n/hi/settings.po | 6 +++--- l10n/hr/settings.po | 4 ++-- l10n/hu_HU/settings.po | 4 ++-- l10n/ia/settings.po | 4 ++-- l10n/id/settings.po | 4 ++-- l10n/it/settings.po | 4 ++-- l10n/ja_JP/settings.po | 4 ++-- l10n/ka_GE/settings.po | 4 ++-- l10n/ko/settings.po | 4 ++-- l10n/ku_IQ/settings.po | 4 ++-- l10n/lb/settings.po | 4 ++-- l10n/lt_LT/settings.po | 4 ++-- l10n/lv/settings.po | 4 ++-- l10n/mk/settings.po | 4 ++-- l10n/ms_MY/settings.po | 4 ++-- l10n/nb_NO/settings.po | 4 ++-- l10n/nl/settings.po | 4 ++-- l10n/nn_NO/settings.po | 4 ++-- l10n/oc/settings.po | 4 ++-- l10n/pl/settings.po | 4 ++-- l10n/pl_PL/settings.po | 4 ++-- l10n/pt_BR/core.po | 23 ++++++++++++----------- l10n/pt_BR/files.po | 13 +++++++------ l10n/pt_BR/settings.po | 9 +++++---- l10n/pt_PT/settings.po | 4 ++-- l10n/ro/settings.po | 4 ++-- l10n/ru/settings.po | 4 ++-- l10n/ru_RU/settings.po | 4 ++-- l10n/si_LK/settings.po | 4 ++-- l10n/sk_SK/settings.po | 4 ++-- l10n/sl/settings.po | 4 ++-- l10n/sq/settings.po | 4 ++-- l10n/sr/settings.po | 6 +++--- l10n/sr@latin/settings.po | 4 ++-- l10n/sv/settings.po | 4 ++-- l10n/ta_LK/settings.po | 4 ++-- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 4 ++-- l10n/templates/files_external.pot | 25 +++++++++++++------------ l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/th_TH/settings.po | 4 ++-- l10n/tr/settings.po | 4 ++-- l10n/uk/settings.po | 4 ++-- l10n/vi/settings.po | 4 ++-- l10n/zh_CN.GB2312/settings.po | 4 ++-- l10n/zh_CN/settings.po | 4 ++-- l10n/zh_HK/settings.po | 4 ++-- l10n/zh_TW/settings.po | 4 ++-- l10n/zu_ZA/settings.po | 4 ++-- lib/l10n/eo.php | 7 ++++++- settings/l10n/ar.php | 2 ++ settings/l10n/el.php | 1 + settings/l10n/eo.php | 3 +++ settings/l10n/gl.php | 1 + settings/l10n/hi.php | 1 + settings/l10n/pt_BR.php | 1 + settings/l10n/sr.php | 1 + 92 files changed, 254 insertions(+), 215 deletions(-) diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php index f9c1d6d47b2..ddbea421241 100644 --- a/apps/files/l10n/el.php +++ b/apps/files/l10n/el.php @@ -1,5 +1,6 @@ "Δεν υπάρχει σφάλμα, το αρχείο εστάλει επιτυχώς", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Το απεσταλμένο αρχείο ξεπερνά την οδηγία upload_max_filesize στο php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Το αρχείο υπερβαίνει την οδηγία μέγιστου επιτρεπτού μεγέθους \"MAX_FILE_SIZE\" που έχει οριστεί στην HTML φόρμα", "The uploaded file was only partially uploaded" => "Το αρχείο εστάλει μόνο εν μέρει", "No file was uploaded" => "Κανένα αρχείο δεν στάλθηκε", diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php index 3d918b196c0..bdde6d0fece 100644 --- a/apps/files/l10n/eo.php +++ b/apps/files/l10n/eo.php @@ -1,6 +1,7 @@ "Ne estas eraro, la dosiero alŝutiĝis sukcese", -"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "La dosiero alŝutita superas laregulon MAX_FILE_SIZE, kiu estas difinita en la HTML-formularo", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "La dosiero alŝutita superas la regulon upload_max_filesize el php.ini: ", +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "La dosiero alŝutita superas la regulon MAX_FILE_SIZE, kiu estas difinita en la HTML-formularo", "The uploaded file was only partially uploaded" => "La alŝutita dosiero nur parte alŝutiĝis", "No file was uploaded" => "Neniu dosiero estas alŝutita", "Missing a temporary folder" => "Mankas tempa dosierujo", @@ -18,6 +19,7 @@ "replaced {new_name} with {old_name}" => "anstataŭiĝis {new_name} per {old_name}", "unshared {files}" => "malkunhaviĝis {files}", "deleted {files}" => "foriĝis {files}", +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nevalida nomo: “\\”, “/”, “<”, “>”, “:”, “\"”, “|”, “?” kaj “*” ne permesatas.", "generating ZIP-file, it may take some time." => "generanta ZIP-dosiero, ĝi povas daŭri iom da tempo", "Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn", "Upload Error" => "Alŝuta eraro", diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php index 868f99ec521..5c50e3764cf 100644 --- a/apps/files/l10n/gl.php +++ b/apps/files/l10n/gl.php @@ -1,5 +1,6 @@ "Non hai erros. O ficheiro enviouse correctamente", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro subido excede a directiva indicada polo tamaño_máximo_de_subida de php.ini", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O ficheiro enviado supera a directiva MAX_FILE_SIZE que foi indicada no formulario HTML", "The uploaded file was only partially uploaded" => "O ficheiro enviado foi só parcialmente enviado", "No file was uploaded" => "Non se enviou ningún ficheiro", @@ -18,6 +19,7 @@ "replaced {new_name} with {old_name}" => "substituír {new_name} polo {old_name}", "unshared {files}" => "{files} sen compartir", "deleted {files}" => "{files} eliminados", +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome non válido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non se permiten.", "generating ZIP-file, it may take some time." => "xerando un ficheiro ZIP, o que pode levar un anaco.", "Unable to upload your file as it is a directory or has 0 bytes" => "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes", "Upload Error" => "Erro na subida", @@ -27,6 +29,7 @@ "{count} files uploading" => "{count} ficheiros subíndose", "Upload cancelled." => "Subida cancelada.", "File upload is in progress. Leaving the page now will cancel the upload." => "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida.", +"Invalid folder name. Usage of \"Shared\" is reserved by Owncloud" => "Nome de cartafol non válido. O uso de \"compartido\" está reservado exclusivamente para ownCloud", "{count} files scanned" => "{count} ficheiros escaneados", "error while scanning" => "erro mentres analizaba", "Name" => "Nome", diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php index 5b7dfaaf610..97e5c94fb31 100644 --- a/apps/files/l10n/pt_BR.php +++ b/apps/files/l10n/pt_BR.php @@ -1,5 +1,6 @@ "Não houve nenhum erro, o arquivo foi transferido com sucesso", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O arquivo enviado excede a diretiva upload_max_filesize no php.ini: ", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O arquivo carregado excede o MAX_FILE_SIZE que foi especificado no formulário HTML", "The uploaded file was only partially uploaded" => "O arquivo foi transferido parcialmente", "No file was uploaded" => "Nenhum arquivo foi transferido", @@ -18,6 +19,7 @@ "replaced {new_name} with {old_name}" => "Substituído {old_name} por {new_name} ", "unshared {files}" => "{files} não compartilhados", "deleted {files}" => "{files} apagados", +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.", "generating ZIP-file, it may take some time." => "gerando arquivo ZIP, isso pode levar um tempo.", "Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes.", "Upload Error" => "Erro de envio", @@ -27,6 +29,7 @@ "{count} files uploading" => "Enviando {count} arquivos", "Upload cancelled." => "Envio cancelado.", "File upload is in progress. Leaving the page now will cancel the upload." => "Upload em andamento. Sair da página agora resultará no cancelamento do envio.", +"Invalid folder name. Usage of \"Shared\" is reserved by Owncloud" => "Nome de pasta inválido. O nome \"Shared\" é reservado pelo Owncloud", "{count} files scanned" => "{count} arquivos scaneados", "error while scanning" => "erro durante verificação", "Name" => "Nome", diff --git a/core/l10n/eo.php b/core/l10n/eo.php index b61dbf14279..4674c8c357a 100644 --- a/core/l10n/eo.php +++ b/core/l10n/eo.php @@ -4,7 +4,9 @@ "This category already exists: " => "Ĉi tiu kategorio jam ekzistas: ", "Object type not provided." => "Ne proviziĝis tipon de objekto.", "%s ID not provided." => "Ne proviziĝis ID-on de %s.", +"Error adding %s to favorites." => "Eraro dum aldono de %s al favoratoj.", "No categories selected for deletion." => "Neniu kategorio elektiĝis por forigo.", +"Error removing %s from favorites." => "Eraro dum forigo de %s el favoratoj.", "Settings" => "Agordo", "seconds ago" => "sekundoj antaŭe", "1 minute ago" => "antaŭ 1 minuto", @@ -73,6 +75,7 @@ "Edit categories" => "Redakti kategoriojn", "Add" => "Aldoni", "Security Warning" => "Sekureca averto", +"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ne disponeblas sekura generilo de hazardaj numeroj; bonvolu kapabligi la OpenSSL-kromaĵon por PHP.", "Create an admin account" => "Krei administran konton", "Advanced" => "Progresinta", "Data folder" => "Datuma dosierujo", diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php index 6782cc1ebfc..f28b0035995 100644 --- a/core/l10n/pt_BR.php +++ b/core/l10n/pt_BR.php @@ -1,7 +1,12 @@ "Tipo de categoria não fornecido.", "No category to add?" => "Nenhuma categoria adicionada?", "This category already exists: " => "Essa categoria já existe", +"Object type not provided." => "tipo de objeto não fornecido.", +"%s ID not provided." => "%s ID não fornecido(s).", +"Error adding %s to favorites." => "Erro ao adicionar %s aos favoritos.", "No categories selected for deletion." => "Nenhuma categoria selecionada para deletar.", +"Error removing %s from favorites." => "Erro ao remover %s dos favoritos.", "Settings" => "Configurações", "seconds ago" => "segundos atrás", "1 minute ago" => "1 minuto atrás", @@ -21,7 +26,10 @@ "No" => "Não", "Yes" => "Sim", "Ok" => "Ok", +"The object type is not specified." => "O tipo de objeto não foi especificado.", "Error" => "Erro", +"The app name is not specified." => "O nome do app não foi especificado.", +"The required file {file} is not installed!" => "O arquivo {file} necessário não está instalado!", "Error while sharing" => "Erro ao compartilhar", "Error while unsharing" => "Erro ao descompartilhar", "Error while changing permissions" => "Erro ao mudar permissões", diff --git a/l10n/ar/settings.po b/l10n/ar/settings.po index 6310ebe7cff..e84963aded2 100644 --- a/l10n/ar/settings.po +++ b/l10n/ar/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -91,7 +91,7 @@ msgstr "" #: js/personal.js:69 msgid "Saving..." -msgstr "" +msgstr "حفظ" #: personal.php:42 personal.php:43 msgid "__language_name__" @@ -119,7 +119,7 @@ msgstr "" #: templates/help.php:9 msgid "Documentation" -msgstr "" +msgstr "التوثيق" #: templates/help.php:10 msgid "Managing Big Files" diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po index a4ec810db81..3b8329c58be 100644 --- a/l10n/bg_BG/settings.po +++ b/l10n/bg_BG/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po index d87a9e5a347..b17a5d30e30 100644 --- a/l10n/ca/settings.po +++ b/l10n/ca/settings.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" -"PO-Revision-Date: 2012-12-01 16:58+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: Josep Tomàs \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/cs_CZ/settings.po b/l10n/cs_CZ/settings.po index 0dbbf69983c..e2e213e5fcb 100644 --- a/l10n/cs_CZ/settings.po +++ b/l10n/cs_CZ/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 06:45+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: Tomáš Chvátal \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/da/settings.po b/l10n/da/settings.po index 4545d6306f9..948c398c076 100644 --- a/l10n/da/settings.po +++ b/l10n/da/settings.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/de/settings.po b/l10n/de/settings.po index 5f9c1421150..d2826158105 100644 --- a/l10n/de/settings.po +++ b/l10n/de/settings.po @@ -23,8 +23,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po index 6bade1820b7..cc633c1c241 100644 --- a/l10n/de_DE/settings.po +++ b/l10n/de_DE/settings.po @@ -22,8 +22,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/el/files.po b/l10n/el/files.po index eea5102149f..85209f363a5 100644 --- a/l10n/el/files.po +++ b/l10n/el/files.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 11:20+0000\n" +"Last-Translator: Efstathios Iosifidis \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" @@ -30,7 +30,7 @@ msgstr "Δεν υπάρχει σφάλμα, το αρχείο εστάλει ε #: ajax/upload.php:21 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "Το απεσταλμένο αρχείο ξεπερνά την οδηγία upload_max_filesize στο php.ini:" #: ajax/upload.php:23 msgid "" diff --git a/l10n/el/settings.po b/l10n/el/settings.po index e6ff75bf80c..62961834e0e 100644 --- a/l10n/el/settings.po +++ b/l10n/el/settings.po @@ -18,9 +18,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 11:21+0000\n" +"Last-Translator: Efstathios Iosifidis \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" @@ -78,7 +78,7 @@ msgstr "Η γλώσσα άλλαξε" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών" #: ajax/togglegroups.php:28 #, php-format diff --git a/l10n/eo/core.po b/l10n/eo/core.po index b6504a6e24f..759c54ff164 100644 --- a/l10n/eo/core.po +++ b/l10n/eo/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-24 00:01+0100\n" -"PO-Revision-Date: 2012-11-23 20:03+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 23:00+0000\n" "Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -47,7 +47,7 @@ msgstr "Ne proviziĝis ID-on de %s." #: ajax/vcategories/addToFavorites.php:35 #, php-format msgid "Error adding %s to favorites." -msgstr "" +msgstr "Eraro dum aldono de %s al favoratoj." #: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136 msgid "No categories selected for deletion." @@ -56,7 +56,7 @@ msgstr "Neniu kategorio elektiĝis por forigo." #: ajax/vcategories/removeFromFavorites.php:35 #, php-format msgid "Error removing %s from favorites." -msgstr "" +msgstr "Eraro dum forigo de %s el favoratoj." #: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61 msgid "Settings" @@ -140,8 +140,8 @@ msgid "The object type is not specified." msgstr "Ne indikiĝis tipo de la objekto." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:527 -#: js/share.js:539 +#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:533 +#: js/share.js:545 msgid "Error" msgstr "Eraro" @@ -242,15 +242,15 @@ msgstr "forigi" msgid "share" msgstr "kunhavigi" -#: js/share.js:343 js/share.js:514 js/share.js:516 +#: js/share.js:349 js/share.js:520 js/share.js:522 msgid "Password protected" msgstr "Protektita per pasvorto" -#: js/share.js:527 +#: js/share.js:533 msgid "Error unsetting expiration date" msgstr "Eraro dum malagordado de limdato" -#: js/share.js:539 +#: js/share.js:545 msgid "Error setting expiration date" msgstr "Eraro dum agordado de limdato" @@ -343,7 +343,7 @@ msgstr "Sekureca averto" msgid "" "No secure random number generator is available, please enable the PHP " "OpenSSL extension." -msgstr "" +msgstr "Ne disponeblas sekura generilo de hazardaj numeroj; bonvolu kapabligi la OpenSSL-kromaĵon por PHP." #: templates/installation.php:26 msgid "" diff --git a/l10n/eo/files.po b/l10n/eo/files.po index c4c42339ac7..98d1dba639f 100644 --- a/l10n/eo/files.po +++ b/l10n/eo/files.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 22:06+0000\n" +"Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,13 +26,13 @@ msgstr "Ne estas eraro, la dosiero alŝutiĝis sukcese" #: ajax/upload.php:21 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "La dosiero alŝutita superas la regulon upload_max_filesize el php.ini: " #: ajax/upload.php:23 msgid "" "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " "the HTML form" -msgstr "La dosiero alŝutita superas laregulon MAX_FILE_SIZE, kiu estas difinita en la HTML-formularo" +msgstr "La dosiero alŝutita superas la regulon MAX_FILE_SIZE, kiu estas difinita en la HTML-formularo" #: ajax/upload.php:25 msgid "The uploaded file was only partially uploaded" @@ -106,7 +106,7 @@ msgstr "foriĝis {files}" msgid "" "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not " "allowed." -msgstr "" +msgstr "Nevalida nomo: “\\”, “/”, “<”, “>”, “:”, “\"”, “|”, “?” kaj “*” ne permesatas." #: js/files.js:183 msgid "generating ZIP-file, it may take some time." diff --git a/l10n/eo/lib.po b/l10n/eo/lib.po index f733202ac60..b4a219e21a2 100644 --- a/l10n/eo/lib.po +++ b/l10n/eo/lib.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-16 00:02+0100\n" -"PO-Revision-Date: 2012-11-14 23:13+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 21:42+0000\n" +"Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -42,19 +42,19 @@ msgstr "Aplikaĵoj" msgid "Admin" msgstr "Administranto" -#: files.php:332 +#: files.php:361 msgid "ZIP download is turned off." msgstr "ZIP-elŝuto estas malkapabligita." -#: files.php:333 +#: files.php:362 msgid "Files need to be downloaded one by one." msgstr "Dosieroj devas elŝutiĝi unuope." -#: files.php:333 files.php:358 +#: files.php:362 files.php:387 msgid "Back to Files" msgstr "Reen al la dosieroj" -#: files.php:357 +#: files.php:386 msgid "Selected files too large to generate zip file." msgstr "La elektitaj dosieroj tro grandas por genero de ZIP-dosiero." @@ -80,7 +80,7 @@ msgstr "Teksto" #: search/provider/file.php:29 msgid "Images" -msgstr "" +msgstr "Bildoj" #: template.php:103 msgid "seconds ago" @@ -97,12 +97,12 @@ msgstr "antaŭ %d minutoj" #: template.php:106 msgid "1 hour ago" -msgstr "" +msgstr "antaŭ 1 horo" #: template.php:107 #, php-format msgid "%d hours ago" -msgstr "" +msgstr "antaŭ %d horoj" #: template.php:108 msgid "today" @@ -124,7 +124,7 @@ msgstr "lasta monato" #: template.php:112 #, php-format msgid "%d months ago" -msgstr "" +msgstr "antaŭ %d monatoj" #: template.php:113 msgid "last year" @@ -150,4 +150,4 @@ msgstr "ĝisdateckontrolo estas malkapabligita" #: vcategories.php:188 vcategories.php:249 #, php-format msgid "Could not find category \"%s\"" -msgstr "" +msgstr "Ne troviĝis kategorio “%s”" diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po index 6f14e83e5f9..49a5a9135e4 100644 --- a/l10n/eo/settings.po +++ b/l10n/eo/settings.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 22:14+0000\n" +"Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -69,7 +69,7 @@ msgstr "La lingvo estas ŝanĝita" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "Administrantoj ne povas forigi sin mem el la administra grupo." #: ajax/togglegroups.php:28 #, php-format @@ -144,7 +144,7 @@ msgstr "Respondi" #: templates/personal.php:8 #, php-format msgid "You have used %s of the available %s" -msgstr "" +msgstr "Vi uzas %s el la haveblaj %s" #: templates/personal.php:12 msgid "Desktop and Mobile Syncing Clients" @@ -210,7 +210,7 @@ msgid "" "licensed under the AGPL." -msgstr "" +msgstr "Ellaborita de la komunumo de ownCloud, la fontokodo publikas laŭ la permesilo AGPL." #: templates/users.php:21 templates/users.php:76 msgid "Name" diff --git a/l10n/es/settings.po b/l10n/es/settings.po index cddf4306466..8e8c25c4e24 100644 --- a/l10n/es/settings.po +++ b/l10n/es/settings.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" -"PO-Revision-Date: 2012-12-01 20:49+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: xsergiolpx \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po index debe69a6262..b52e9fbc915 100644 --- a/l10n/es_AR/settings.po +++ b/l10n/es_AR/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po index 3caa027b5a7..d758c91271d 100644 --- a/l10n/et_EE/settings.po +++ b/l10n/et_EE/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po index 775a959f739..58ef06e8a66 100644 --- a/l10n/eu/settings.po +++ b/l10n/eu/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/fa/settings.po b/l10n/fa/settings.po index 3c7b8196089..e0c3b853c89 100644 --- a/l10n/fa/settings.po +++ b/l10n/fa/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 14:39+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: ho2o2oo \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po index f2b6937d17e..d7f6f888d43 100644 --- a/l10n/fi_FI/settings.po +++ b/l10n/fi_FI/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po index 32ef15c211c..a443aba93f2 100644 --- a/l10n/fr/settings.po +++ b/l10n/fr/settings.po @@ -20,8 +20,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/gl/files.po b/l10n/gl/files.po index 93132eddc56..d44302b22d1 100644 --- a/l10n/gl/files.po +++ b/l10n/gl/files.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 21:51+0000\n" +"Last-Translator: Miguel Branco \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,7 +26,7 @@ msgstr "Non hai erros. O ficheiro enviouse correctamente" #: ajax/upload.php:21 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "O ficheiro subido excede a directiva indicada polo tamaño_máximo_de_subida de php.ini" #: ajax/upload.php:23 msgid "" @@ -106,7 +106,7 @@ msgstr "{files} eliminados" msgid "" "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not " "allowed." -msgstr "" +msgstr "Nome non válido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non se permiten." #: js/files.js:183 msgid "generating ZIP-file, it may take some time." @@ -147,7 +147,7 @@ msgstr "A subida do ficheiro está en curso. Saír agora da páxina cancelará a #: js/files.js:523 msgid "Invalid folder name. Usage of \"Shared\" is reserved by Owncloud" -msgstr "" +msgstr "Nome de cartafol non válido. O uso de \"compartido\" está reservado exclusivamente para ownCloud" #: js/files.js:704 msgid "{count} files scanned" diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po index 414d7edb14d..335d35593ba 100644 --- a/l10n/gl/settings.po +++ b/l10n/gl/settings.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 21:49+0000\n" +"Last-Translator: Miguel Branco \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -69,7 +69,7 @@ msgstr "O idioma mudou" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "Os administradores non se pode eliminar a si mesmos do grupo admin" #: ajax/togglegroups.php:28 #, php-format diff --git a/l10n/he/settings.po b/l10n/he/settings.po index 245b0b50b46..50e610dd371 100644 --- a/l10n/he/settings.po +++ b/l10n/he/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" -"PO-Revision-Date: 2012-12-01 06:31+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: Yaron Shahrabani \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/hi/settings.po b/l10n/hi/settings.po index 54da734ea4e..4f0ccd14335 100644 --- a/l10n/hi/settings.po +++ b/l10n/hi/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -166,7 +166,7 @@ msgstr "" #: templates/personal.php:22 msgid "New password" -msgstr "" +msgstr "नया पासवर्ड" #: templates/personal.php:23 msgid "show" diff --git a/l10n/hr/settings.po b/l10n/hr/settings.po index 13434df9805..5410216db21 100644 --- a/l10n/hr/settings.po +++ b/l10n/hr/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po index 187f0bc7cd4..f83e6251d1b 100644 --- a/l10n/hu_HU/settings.po +++ b/l10n/hu_HU/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/ia/settings.po b/l10n/ia/settings.po index e1670a16043..45647784aed 100644 --- a/l10n/ia/settings.po +++ b/l10n/ia/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/id/settings.po b/l10n/id/settings.po index be1beb4d29c..478557f09e0 100644 --- a/l10n/id/settings.po +++ b/l10n/id/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+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" diff --git a/l10n/it/settings.po b/l10n/it/settings.po index e79980dca1a..2313377614a 100644 --- a/l10n/it/settings.po +++ b/l10n/it/settings.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-29 23:38+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: Vincenzo Reale \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po index c8c111d5d69..8d92134dba5 100644 --- a/l10n/ja_JP/settings.po +++ b/l10n/ja_JP/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 01:02+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: Daisuke Deguchi \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/ka_GE/settings.po b/l10n/ka_GE/settings.po index 10893b5fb94..b957617cec3 100644 --- a/l10n/ka_GE/settings.po +++ b/l10n/ka_GE/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/ko/settings.po b/l10n/ko/settings.po index a35f2371bb6..1b4bacb26b9 100644 --- a/l10n/ko/settings.po +++ b/l10n/ko/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/ku_IQ/settings.po b/l10n/ku_IQ/settings.po index a735dc6ebc6..c64763c9cfc 100644 --- a/l10n/ku_IQ/settings.po +++ b/l10n/ku_IQ/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/lb/settings.po b/l10n/lb/settings.po index 8cecd15f02e..2b969101b5f 100644 --- a/l10n/lb/settings.po +++ b/l10n/lb/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po index 06d3e49173a..10dd1bb7eb1 100644 --- a/l10n/lt_LT/settings.po +++ b/l10n/lt_LT/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/lv/settings.po b/l10n/lv/settings.po index 42ea6eea5d6..bb71a36d28a 100644 --- a/l10n/lv/settings.po +++ b/l10n/lv/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/mk/settings.po b/l10n/mk/settings.po index 4382dd3cbd0..b295cb7b667 100644 --- a/l10n/mk/settings.po +++ b/l10n/mk/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/ms_MY/settings.po b/l10n/ms_MY/settings.po index 5c0bb24bc64..1de42e3e9c3 100644 --- a/l10n/ms_MY/settings.po +++ b/l10n/ms_MY/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po index 711137497d6..ab234540e25 100644 --- a/l10n/nb_NO/settings.po +++ b/l10n/nb_NO/settings.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po index e8fee6c9016..1b28da61ba6 100644 --- a/l10n/nl/settings.po +++ b/l10n/nl/settings.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 10:57+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: Len \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po index 7bb941c4577..b38152f949c 100644 --- a/l10n/nn_NO/settings.po +++ b/l10n/nn_NO/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/oc/settings.po b/l10n/oc/settings.po index 37e364fb5d3..a4f159a9c57 100644 --- a/l10n/oc/settings.po +++ b/l10n/oc/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po index bcd1383d41a..17eb403e70c 100644 --- a/l10n/pl/settings.po +++ b/l10n/pl/settings.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/pl_PL/settings.po b/l10n/pl_PL/settings.po index 1a2dfb5a222..9b602355608 100644 --- a/l10n/pl_PL/settings.po +++ b/l10n/pl_PL/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po index c40ffb6fb05..58cb66c3215 100644 --- a/l10n/pt_BR/core.po +++ b/l10n/pt_BR/core.po @@ -5,6 +5,7 @@ # Translators: # , 2012. # , 2011. +# , 2012. # , 2012. # Guilherme Maluf Balzana , 2012. # , 2012. @@ -16,9 +17,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" -"PO-Revision-Date: 2012-12-01 18:48+0000\n" -"Last-Translator: Schopfer \n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-01 23:28+0000\n" +"Last-Translator: FredMaranhao \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -28,7 +29,7 @@ msgstr "" #: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25 msgid "Category type not provided." -msgstr "" +msgstr "Tipo de categoria não fornecido." #: ajax/vcategories/add.php:30 msgid "No category to add?" @@ -42,18 +43,18 @@ msgstr "Essa categoria já existe" #: ajax/vcategories/favorites.php:24 #: ajax/vcategories/removeFromFavorites.php:26 msgid "Object type not provided." -msgstr "" +msgstr "tipo de objeto não fornecido." #: ajax/vcategories/addToFavorites.php:30 #: ajax/vcategories/removeFromFavorites.php:30 #, php-format msgid "%s ID not provided." -msgstr "" +msgstr "%s ID não fornecido(s)." #: ajax/vcategories/addToFavorites.php:35 #, php-format msgid "Error adding %s to favorites." -msgstr "" +msgstr "Erro ao adicionar %s aos favoritos." #: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136 msgid "No categories selected for deletion." @@ -62,7 +63,7 @@ msgstr "Nenhuma categoria selecionada para deletar." #: ajax/vcategories/removeFromFavorites.php:35 #, php-format msgid "Error removing %s from favorites." -msgstr "" +msgstr "Erro ao remover %s dos favoritos." #: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61 msgid "Settings" @@ -143,7 +144,7 @@ msgstr "Ok" #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162 msgid "The object type is not specified." -msgstr "" +msgstr "O tipo de objeto não foi especificado." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 #: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:533 @@ -153,11 +154,11 @@ msgstr "Erro" #: js/oc-vcategories.js:179 msgid "The app name is not specified." -msgstr "" +msgstr "O nome do app não foi especificado." #: js/oc-vcategories.js:194 msgid "The required file {file} is not installed!" -msgstr "" +msgstr "O arquivo {file} necessário não está instalado!" #: js/share.js:124 msgid "Error while sharing" diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po index 81bc23bfb92..91ecfae55f0 100644 --- a/l10n/pt_BR/files.po +++ b/l10n/pt_BR/files.po @@ -4,6 +4,7 @@ # # Translators: # , 2012. +# , 2012. # Guilherme Maluf Balzana , 2012. # , 2012. # , 2012. @@ -14,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-01 23:23+0000\n" +"Last-Translator: FredMaranhao \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,7 +32,7 @@ msgstr "Não houve nenhum erro, o arquivo foi transferido com sucesso" #: ajax/upload.php:21 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "O arquivo enviado excede a diretiva upload_max_filesize no php.ini: " #: ajax/upload.php:23 msgid "" @@ -111,7 +112,7 @@ msgstr "{files} apagados" msgid "" "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not " "allowed." -msgstr "" +msgstr "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos." #: js/files.js:183 msgid "generating ZIP-file, it may take some time." @@ -152,7 +153,7 @@ msgstr "Upload em andamento. Sair da página agora resultará no cancelamento do #: js/files.js:523 msgid "Invalid folder name. Usage of \"Shared\" is reserved by Owncloud" -msgstr "" +msgstr "Nome de pasta inválido. O nome \"Shared\" é reservado pelo Owncloud" #: js/files.js:704 msgid "{count} files scanned" diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po index fc029c13739..a8b2a98a550 100644 --- a/l10n/pt_BR/settings.po +++ b/l10n/pt_BR/settings.po @@ -4,6 +4,7 @@ # # Translators: # , 2011. +# , 2012. # Guilherme Maluf Balzana , 2012. # , 2012. # Sandro Venezuela , 2012. @@ -15,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" +"Last-Translator: FredMaranhao \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -75,7 +76,7 @@ msgstr "Mudou Idioma" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "Admins não podem se remover do grupo admin" #: ajax/togglegroups.php:28 #, php-format diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po index 71e00dc5a01..38b4491aa64 100644 --- a/l10n/pt_PT/settings.po +++ b/l10n/pt_PT/settings.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 01:44+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: Mouxy \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po index 7a1c740b15e..f963f93caf9 100644 --- a/l10n/ro/settings.po +++ b/l10n/ro/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po index a90c2ca9dfb..8c3270fb087 100644 --- a/l10n/ru/settings.po +++ b/l10n/ru/settings.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/ru_RU/settings.po b/l10n/ru_RU/settings.po index 753a9ef16d4..fabcb827160 100644 --- a/l10n/ru_RU/settings.po +++ b/l10n/ru_RU/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/si_LK/settings.po b/l10n/si_LK/settings.po index c77635cd34f..1bc5f94e9ad 100644 --- a/l10n/si_LK/settings.po +++ b/l10n/si_LK/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po index b0b41c5f018..111c6ee3ec7 100644 --- a/l10n/sk_SK/settings.po +++ b/l10n/sk_SK/settings.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" -"PO-Revision-Date: 2012-12-01 16:16+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: martin \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po index 80b325a36e5..d8b32993d45 100644 --- a/l10n/sl/settings.po +++ b/l10n/sl/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/sq/settings.po b/l10n/sq/settings.po index fbf5a7e21d3..8857016c268 100644 --- a/l10n/sq/settings.po +++ b/l10n/sq/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po index 1e34b5be240..1ee35e9cf0a 100644 --- a/l10n/sr/settings.po +++ b/l10n/sr/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -118,7 +118,7 @@ msgstr "" #: templates/help.php:9 msgid "Documentation" -msgstr "" +msgstr "Документација" #: templates/help.php:10 msgid "Managing Big Files" diff --git a/l10n/sr@latin/settings.po b/l10n/sr@latin/settings.po index dc0210d88c9..d871fb7eb2b 100644 --- a/l10n/sr@latin/settings.po +++ b/l10n/sr@latin/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po index e37e4ecb365..4a9703d905b 100644 --- a/l10n/sv/settings.po +++ b/l10n/sv/settings.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/ta_LK/settings.po b/l10n/ta_LK/settings.po index d3e7e2c1937..4732ffd51c0 100644 --- a/l10n/ta_LK/settings.po +++ b/l10n/ta_LK/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 41f4f890ba4..d66c9699d09 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 5f70311e553..317fa90ac61 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 2fb3ee36065..c44886a1db6 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,6 +29,6 @@ msgstr "" msgid "None" msgstr "" -#: templates/settings.php:10 +#: templates/settings.php:12 msgid "Enable Encryption" msgstr "" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index 2bab82e112a..f89ffb9a858 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -45,7 +45,7 @@ msgstr "" msgid "External Storage" msgstr "" -#: templates/settings.php:7 templates/settings.php:19 +#: templates/settings.php:7 templates/settings.php:21 msgid "Mount point" msgstr "" @@ -65,42 +65,43 @@ msgstr "" msgid "Applicable" msgstr "" -#: templates/settings.php:23 +#: templates/settings.php:26 msgid "Add mount point" msgstr "" -#: templates/settings.php:54 templates/settings.php:62 +#: templates/settings.php:84 msgid "None set" msgstr "" -#: templates/settings.php:63 +#: templates/settings.php:85 msgid "All Users" msgstr "" -#: templates/settings.php:64 +#: templates/settings.php:86 msgid "Groups" msgstr "" -#: templates/settings.php:69 +#: templates/settings.php:94 msgid "Users" msgstr "" -#: templates/settings.php:77 templates/settings.php:107 +#: templates/settings.php:107 templates/settings.php:108 +#: templates/settings.php:148 templates/settings.php:149 msgid "Delete" msgstr "" -#: templates/settings.php:87 +#: templates/settings.php:123 msgid "Enable User External Storage" msgstr "" -#: templates/settings.php:88 +#: templates/settings.php:124 msgid "Allow users to mount their own external storage" msgstr "" -#: templates/settings.php:99 +#: templates/settings.php:138 msgid "SSL root certificates" msgstr "" -#: templates/settings.php:113 +#: templates/settings.php:157 msgid "Import Root Certificate" msgstr "" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index a049f5cf2af..236ac473a83 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 457c6ed09e8..55a26098877 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 82efa45aa64..f7bd22d456e 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index 49db7f9c9a0..793ca34b3ae 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index a8733cf81ad..193d34358dd 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 191fb7704f0..847227c8567 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/th_TH/settings.po b/l10n/th_TH/settings.po index 9faf18df70c..d15a654e588 100644 --- a/l10n/th_TH/settings.po +++ b/l10n/th_TH/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po index 721196eed8c..df5e72846b5 100644 --- a/l10n/tr/settings.po +++ b/l10n/tr/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po index 85fd27ccf87..a169a56596c 100644 --- a/l10n/uk/settings.po +++ b/l10n/uk/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 09:53+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: volodya327 \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/vi/settings.po b/l10n/vi/settings.po index 7fb46b1f6a3..63bd843d709 100644 --- a/l10n/vi/settings.po +++ b/l10n/vi/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-29 23:17+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: mattheu_9x \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/zh_CN.GB2312/settings.po b/l10n/zh_CN.GB2312/settings.po index 0f0d5333d5b..8dee70c1dde 100644 --- a/l10n/zh_CN.GB2312/settings.po +++ b/l10n/zh_CN.GB2312/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po index b79b28d7442..073572833a6 100644 --- a/l10n/zh_CN/settings.po +++ b/l10n/zh_CN/settings.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/zh_HK/settings.po b/l10n/zh_HK/settings.po index fd4f4f10868..df89b1aac2e 100644 --- a/l10n/zh_HK/settings.po +++ b/l10n/zh_HK/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/zh_TW/settings.po b/l10n/zh_TW/settings.po index 57275489207..cc8fc8f62b2 100644 --- a/l10n/zh_TW/settings.po +++ b/l10n/zh_TW/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 01:19+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: dw4dev \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/zu_ZA/settings.po b/l10n/zu_ZA/settings.po index 51a07c2359d..34b89c89036 100644 --- a/l10n/zu_ZA/settings.po +++ b/l10n/zu_ZA/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-30 00:04+0100\n" -"PO-Revision-Date: 2012-11-29 23:04+0000\n" +"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"PO-Revision-Date: 2012-12-02 03:18+0000\n" "Last-Translator: I Robot \n" "Language-Team: Zulu (South Africa) (http://www.transifex.com/projects/p/owncloud/language/zu_ZA/)\n" "MIME-Version: 1.0\n" diff --git a/lib/l10n/eo.php b/lib/l10n/eo.php index f660c5743b5..dac11ffe7e6 100644 --- a/lib/l10n/eo.php +++ b/lib/l10n/eo.php @@ -14,16 +14,21 @@ "Token expired. Please reload page." => "Ĵetono eksvalidiĝis. Bonvolu reŝargi la paĝon.", "Files" => "Dosieroj", "Text" => "Teksto", +"Images" => "Bildoj", "seconds ago" => "sekundojn antaŭe", "1 minute ago" => "antaŭ 1 minuto", "%d minutes ago" => "antaŭ %d minutoj", +"1 hour ago" => "antaŭ 1 horo", +"%d hours ago" => "antaŭ %d horoj", "today" => "hodiaŭ", "yesterday" => "hieraŭ", "%d days ago" => "antaŭ %d tagoj", "last month" => "lasta monato", +"%d months ago" => "antaŭ %d monatoj", "last year" => "lasta jaro", "years ago" => "jarojn antaŭe", "%s is available. Get more information" => "%s haveblas. Ekhavu pli da informo", "up to date" => "ĝisdata", -"updates check is disabled" => "ĝisdateckontrolo estas malkapabligita" +"updates check is disabled" => "ĝisdateckontrolo estas malkapabligita", +"Could not find category \"%s\"" => "Ne troviĝis kategorio “%s”" ); diff --git a/settings/l10n/ar.php b/settings/l10n/ar.php index b095836c9ec..662e69bbfc5 100644 --- a/settings/l10n/ar.php +++ b/settings/l10n/ar.php @@ -3,8 +3,10 @@ "Invalid request" => "طلبك غير مفهوم", "Authentication error" => "لم يتم التأكد من الشخصية بنجاح", "Language changed" => "تم تغيير اللغة", +"Saving..." => "حفظ", "__language_name__" => "__language_name__", "Select an App" => "إختر تطبيقاً", +"Documentation" => "التوثيق", "Ask a question" => "إسأل سؤال", "Problems connecting to help database." => "الاتصال بقاعدة بيانات المساعدة لم يتم بنجاح", "Go there manually." => "إذهب هنالك بنفسك", diff --git a/settings/l10n/el.php b/settings/l10n/el.php index af3fd446acc..ac62453886c 100644 --- a/settings/l10n/el.php +++ b/settings/l10n/el.php @@ -11,6 +11,7 @@ "Authentication error" => "Σφάλμα πιστοποίησης", "Unable to delete user" => "Αδυναμία διαγραφής χρήστη", "Language changed" => "Η γλώσσα άλλαξε", +"Admins can't remove themself from the admin group" => "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών", "Unable to add user to group %s" => "Αδυναμία προσθήκη χρήστη στην ομάδα %s", "Unable to remove user from group %s" => "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s", "Disable" => "Απενεργοποίηση", diff --git a/settings/l10n/eo.php b/settings/l10n/eo.php index 6d299d93adf..e686868e67c 100644 --- a/settings/l10n/eo.php +++ b/settings/l10n/eo.php @@ -11,6 +11,7 @@ "Authentication error" => "Aŭtentiga eraro", "Unable to delete user" => "Ne eblis forigi la uzanton", "Language changed" => "La lingvo estas ŝanĝita", +"Admins can't remove themself from the admin group" => "Administrantoj ne povas forigi sin mem el la administra grupo.", "Unable to add user to group %s" => "Ne eblis aldoni la uzanton al la grupo %s", "Unable to remove user from group %s" => "Ne eblis forigi la uzantan el la grupo %s", "Disable" => "Malkapabligi", @@ -28,6 +29,7 @@ "Problems connecting to help database." => "Problemoj okazis dum konektado al la helpa datumbazo.", "Go there manually." => "Iri tien mane.", "Answer" => "Respondi", +"You have used %s of the available %s" => "Vi uzas %s el la haveblaj %s", "Desktop and Mobile Syncing Clients" => "Labortablaj kaj porteblaj sinkronigoklientoj", "Download" => "Elŝuti", "Your password was changed" => "Via pasvorto ŝanĝiĝis", @@ -42,6 +44,7 @@ "Language" => "Lingvo", "Help translate" => "Helpu traduki", "use this address to connect to your ownCloud in your file manager" => "uzu ĉi tiun adreson por konektiĝi al via ownCloud per via dosieradministrilo", +"Developed by the ownCloud community, the source code is licensed under the AGPL." => "Ellaborita de la komunumo de ownCloud, la fontokodo publikas laŭ la permesilo AGPL.", "Name" => "Nomo", "Password" => "Pasvorto", "Groups" => "Grupoj", diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php index a719ac8eb99..1cde895d0d9 100644 --- a/settings/l10n/gl.php +++ b/settings/l10n/gl.php @@ -11,6 +11,7 @@ "Authentication error" => "Erro na autenticación", "Unable to delete user" => "Non se pode eliminar o usuario", "Language changed" => "O idioma mudou", +"Admins can't remove themself from the admin group" => "Os administradores non se pode eliminar a si mesmos do grupo admin", "Unable to add user to group %s" => "Non se puido engadir o usuario ao grupo %s", "Unable to remove user from group %s" => "Non se puido eliminar o usuario do grupo %s", "Disable" => "Desactivar", diff --git a/settings/l10n/hi.php b/settings/l10n/hi.php index 560df54fc94..645b991a912 100644 --- a/settings/l10n/hi.php +++ b/settings/l10n/hi.php @@ -1,3 +1,4 @@ "नया पासवर्ड", "Password" => "पासवर्ड" ); diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php index 399b0a17129..d09e867f7f2 100644 --- a/settings/l10n/pt_BR.php +++ b/settings/l10n/pt_BR.php @@ -11,6 +11,7 @@ "Authentication error" => "erro de autenticação", "Unable to delete user" => "Não foi possivel remover usuário", "Language changed" => "Mudou Idioma", +"Admins can't remove themself from the admin group" => "Admins não podem se remover do grupo admin", "Unable to add user to group %s" => "Não foi possivel adicionar usuário ao grupo %s", "Unable to remove user from group %s" => "Não foi possivel remover usuário ao grupo %s", "Disable" => "Desabilitado", diff --git a/settings/l10n/sr.php b/settings/l10n/sr.php index 31cd4c491d6..9250dd13977 100644 --- a/settings/l10n/sr.php +++ b/settings/l10n/sr.php @@ -5,6 +5,7 @@ "Language changed" => "Језик је измењен", "__language_name__" => "__language_name__", "Select an App" => "Изаберите програм", +"Documentation" => "Документација", "Ask a question" => "Поставите питање", "Problems connecting to help database." => "Проблем у повезивању са базом помоћи", "Go there manually." => "Отиђите тамо ручно.", -- GitLab From 4cb760a92402ab3eb8550fb05b05eae800030680 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Sat, 1 Dec 2012 00:27:48 +0100 Subject: [PATCH 567/576] LDAP: ldap_explode_dn escaped too much, fix it by manual replacement. Fixes different problems, esp. with non-ascii characters in the dn (#631) --- apps/user_ldap/lib/access.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index 53d4edbe69c..042076fe62e 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -123,10 +123,17 @@ abstract class Access { //escape DN values according to RFC 2253 – this is already done by ldap_explode_dn //to use the DN in search filters, \ needs to be escaped to \5c additionally //to use them in bases, we convert them back to simple backslashes in readAttribute() - $aDN = ldap_explode_dn($dn, false); - unset($aDN['count']); - $dn = implode(',', $aDN); - $dn = str_replace('\\', '\\5c', $dn); + $replacements = array( + '\,' => '\5c2C', + '\=' => '\5c3D', + '\+' => '\5c2B', + '\<' => '\5c3C', + '\>' => '\5c3E', + '\;' => '\5c3B', + '\"' => '\5c22', + '\#' => '\5c23', + ); + $dn = str_replace(array_keys($replacements),array_values($replacements), $dn); return $dn; } -- GitLab From a310dcb0ff4e787ea0a060db6960ba191f04a33f Mon Sep 17 00:00:00 2001 From: Brice Maron Date: Mon, 3 Dec 2012 22:53:06 +0000 Subject: [PATCH 568/576] Fix a dirty function preventing showing errors --- lib/template.php | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/lib/template.php b/lib/template.php index 868d5f2ba2e..04667d73a2c 100644 --- a/lib/template.php +++ b/lib/template.php @@ -497,18 +497,14 @@ class OC_Template{ return $content->printPage(); } - /** - * @brief Print a fatal error page and terminates the script - * @param string $error The error message to show - * @param string $hint An option hint message - */ - public static function printErrorPage( $error, $hint = '' ) { - $error['error']=$error; - $error['hint']=$hint; - $errors[]=$error; - OC_Template::printGuestPage("", "error", array("errors" => $errors)); - die(); - } - - + /** + * @brief Print a fatal error page and terminates the script + * @param string $error The error message to show + * @param string $hint An option hint message + */ + public static function printErrorPage( $error_msg, $hint = '' ) { + $errors = array(array('error' => $error_msg, 'hint' => $hint)); + OC_Template::printGuestPage("", "error", array("errors" => $errors)); + die(); + } } -- GitLab From a53a946c20031e891e781b38cfd0fcb849db3cb1 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 4 Dec 2012 00:07:11 +0100 Subject: [PATCH 569/576] [tx-robot] updated from transifex --- apps/files/l10n/ja_JP.php | 1 + apps/files/l10n/nl.php | 1 + apps/files/l10n/pl.php | 1 + apps/files/l10n/sv.php | 1 + apps/files/l10n/uk.php | 3 ++- apps/files/l10n/zh_CN.php | 1 + core/l10n/eo.php | 1 + l10n/de_DE/settings.po | 9 +++++---- l10n/eo/core.po | 6 +++--- l10n/ja_JP/files.po | 9 +++++---- l10n/nl/files.po | 9 +++++---- l10n/pl/files.po | 8 ++++---- l10n/pl/settings.po | 9 +++++---- l10n/sv/files.po | 8 ++++---- l10n/sv/settings.po | 8 ++++---- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/uk/files.po | 10 +++++----- l10n/zh_CN/files.po | 8 ++++---- l10n/zh_CN/settings.po | 8 ++++---- settings/l10n/de_DE.php | 1 + settings/l10n/pl.php | 1 + settings/l10n/sv.php | 1 + settings/l10n/zh_CN.php | 1 + 32 files changed, 70 insertions(+), 55 deletions(-) diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php index 27974160ff0..7b8c3ca4778 100644 --- a/apps/files/l10n/ja_JP.php +++ b/apps/files/l10n/ja_JP.php @@ -1,5 +1,6 @@ "エラーはありません。ファイルのアップロードは成功しました", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "アップロードされたファイルはphp.ini の upload_max_filesize に設定されたサイズを超えています:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "アップロードされたファイルはHTMLのフォームに設定されたMAX_FILE_SIZEに設定されたサイズを超えています", "The uploaded file was only partially uploaded" => "ファイルは一部分しかアップロードされませんでした", "No file was uploaded" => "ファイルはアップロードされませんでした", diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php index 74a8ff3bfb0..093a5430d53 100644 --- a/apps/files/l10n/nl.php +++ b/apps/files/l10n/nl.php @@ -1,5 +1,6 @@ "Geen fout opgetreden, bestand successvol geupload.", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Het geüploade bestand overscheidt de upload_max_filesize optie in php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Het geüploade bestand is groter dan de MAX_FILE_SIZE richtlijn die is opgegeven in de HTML-formulier", "The uploaded file was only partially uploaded" => "Het bestand is slechts gedeeltelijk geupload", "No file was uploaded" => "Geen bestand geüpload", diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php index 6667cb66dfd..8051eae8c42 100644 --- a/apps/files/l10n/pl.php +++ b/apps/files/l10n/pl.php @@ -1,5 +1,6 @@ "Przesłano plik", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Wgrany plik przekracza wartość upload_max_filesize zdefiniowaną w php.ini: ", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Rozmiar przesłanego pliku przekracza maksymalną wartość dyrektywy upload_max_filesize, zawartą formularzu HTML", "The uploaded file was only partially uploaded" => "Plik przesłano tylko częściowo", "No file was uploaded" => "Nie przesłano żadnego pliku", diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php index 3503c6c1a17..bcc849242ac 100644 --- a/apps/files/l10n/sv.php +++ b/apps/files/l10n/sv.php @@ -1,5 +1,6 @@ "Inga fel uppstod. Filen laddades upp utan problem", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uppladdade filen överskrider upload_max_filesize direktivet php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Den uppladdade filen överstiger MAX_FILE_SIZE direktivet som anges i HTML-formulär", "The uploaded file was only partially uploaded" => "Den uppladdade filen var endast delvis uppladdad", "No file was uploaded" => "Ingen fil blev uppladdad", diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php index 4823bdbd27d..00491bcc2d6 100644 --- a/apps/files/l10n/uk.php +++ b/apps/files/l10n/uk.php @@ -1,5 +1,6 @@ "Файл успішно відвантажено без помилок.", +"There is no error, the file uploaded with success" => "Файл успішно вивантажено без помилок.", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Розмір звантаження перевищує upload_max_filesize параметра в php.ini: ", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Розмір відвантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі", "The uploaded file was only partially uploaded" => "Файл відвантажено лише частково", "No file was uploaded" => "Не відвантажено жодного файлу", diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php index ab8e980c336..8db652f003e 100644 --- a/apps/files/l10n/zh_CN.php +++ b/apps/files/l10n/zh_CN.php @@ -1,5 +1,6 @@ "没有发生错误,文件上传成功。", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "上传文件大小已超过php.ini中upload_max_filesize所规定的值", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "上传的文件超过了在HTML 表单中指定的MAX_FILE_SIZE", "The uploaded file was only partially uploaded" => "只上传了文件的一部分", "No file was uploaded" => "文件没有上传", diff --git a/core/l10n/eo.php b/core/l10n/eo.php index 4674c8c357a..7b65652d67c 100644 --- a/core/l10n/eo.php +++ b/core/l10n/eo.php @@ -108,6 +108,7 @@ "December" => "Decembro", "web services under your control" => "TTT-servoj sub via kontrolo", "Log out" => "Elsaluti", +"If you did not change your password recently, your account may be compromised!" => "Se vi ne ŝanĝis vian pasvorton lastatempe, via konto eble kompromitas!", "Please change your password to secure your account again." => "Bonvolu ŝanĝi vian pasvorton por sekurigi vian konton ree.", "Lost your password?" => "Ĉu vi perdis vian pasvorton?", "remember" => "memori", diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po index cc633c1c241..064c038d576 100644 --- a/l10n/de_DE/settings.po +++ b/l10n/de_DE/settings.po @@ -16,15 +16,16 @@ # , 2012. # , 2012. # Phi Lieb <>, 2012. +# , 2012. # , 2012. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" -"PO-Revision-Date: 2012-12-02 03:18+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"PO-Revision-Date: 2012-12-03 21:41+0000\n" +"Last-Translator: seeed \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -82,7 +83,7 @@ msgstr "Sprache geändert" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "Administratoren können sich nicht selbst aus der admin-Gruppe löschen" #: ajax/togglegroups.php:28 #, php-format diff --git a/l10n/eo/core.po b/l10n/eo/core.po index 759c54ff164..517787299a0 100644 --- a/l10n/eo/core.po +++ b/l10n/eo/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" -"PO-Revision-Date: 2012-12-02 23:00+0000\n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"PO-Revision-Date: 2012-12-02 23:10+0000\n" "Last-Translator: Mariano \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -497,7 +497,7 @@ msgstr "" msgid "" "If you did not change your password recently, your account may be " "compromised!" -msgstr "" +msgstr "Se vi ne ŝanĝis vian pasvorton lastatempe, via konto eble kompromitas!" #: templates/login.php:10 msgid "Please change your password to secure your account again." diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po index 05c448fe959..3f253361a8a 100644 --- a/l10n/ja_JP/files.po +++ b/l10n/ja_JP/files.po @@ -4,15 +4,16 @@ # # Translators: # Daisuke Deguchi , 2012. +# Daisuke Deguchi , 2012. # , 2012. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"PO-Revision-Date: 2012-12-03 01:53+0000\n" +"Last-Translator: Daisuke Deguchi \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,7 +28,7 @@ msgstr "エラーはありません。ファイルのアップロードは成功 #: ajax/upload.php:21 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "アップロードされたファイルはphp.ini の upload_max_filesize に設定されたサイズを超えています:" #: ajax/upload.php:23 msgid "" diff --git a/l10n/nl/files.po b/l10n/nl/files.po index dc5709b30f6..bb78a69078c 100644 --- a/l10n/nl/files.po +++ b/l10n/nl/files.po @@ -11,15 +11,16 @@ # , 2011. # , 2012. # , 2011. +# , 2012. # , 2012. # Richard Bos , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"PO-Revision-Date: 2012-12-03 09:15+0000\n" +"Last-Translator: Len \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -34,7 +35,7 @@ msgstr "Geen fout opgetreden, bestand successvol geupload." #: ajax/upload.php:21 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "Het geüploade bestand overscheidt de upload_max_filesize optie in php.ini:" #: ajax/upload.php:23 msgid "" diff --git a/l10n/pl/files.po b/l10n/pl/files.po index 1922ea7974b..8c9563a58e4 100644 --- a/l10n/pl/files.po +++ b/l10n/pl/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"PO-Revision-Date: 2012-12-03 10:15+0000\n" +"Last-Translator: Thomasso \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,7 +31,7 @@ msgstr "Przesłano plik" #: ajax/upload.php:21 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "Wgrany plik przekracza wartość upload_max_filesize zdefiniowaną w php.ini: " #: ajax/upload.php:23 msgid "" diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po index 17eb403e70c..beb685551e5 100644 --- a/l10n/pl/settings.po +++ b/l10n/pl/settings.po @@ -12,13 +12,14 @@ # , 2011. # , 2012. # Piotr Sokół , 2012. +# , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" -"PO-Revision-Date: 2012-12-02 03:18+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"PO-Revision-Date: 2012-12-03 10:16+0000\n" +"Last-Translator: Thomasso \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -76,7 +77,7 @@ msgstr "Język zmieniony" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "Administratorzy nie mogą usunąć się sami z grupy administratorów." #: ajax/togglegroups.php:28 #, php-format diff --git a/l10n/sv/files.po b/l10n/sv/files.po index ed4860b71cd..7c197ea6056 100644 --- a/l10n/sv/files.po +++ b/l10n/sv/files.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"PO-Revision-Date: 2012-12-03 19:45+0000\n" +"Last-Translator: Magnus Höglund \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,7 +30,7 @@ msgstr "Inga fel uppstod. Filen laddades upp utan problem" #: ajax/upload.php:21 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "Den uppladdade filen överskrider upload_max_filesize direktivet php.ini:" #: ajax/upload.php:23 msgid "" diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po index 4a9703d905b..1f1645f74eb 100644 --- a/l10n/sv/settings.po +++ b/l10n/sv/settings.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" -"PO-Revision-Date: 2012-12-02 03:18+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"PO-Revision-Date: 2012-12-03 19:44+0000\n" +"Last-Translator: Magnus Höglund \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -74,7 +74,7 @@ msgstr "Språk ändrades" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "Administratörer kan inte ta bort sig själva från admingruppen" #: ajax/togglegroups.php:28 #, php-format diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index d66c9699d09..a62ab6f3589 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 317fa90ac61..e7085af495f 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index c44886a1db6..121ae600540 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index f89ffb9a858..00f1ac97c27 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 236ac473a83..f3afb117e39 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 55a26098877..d7d960434db 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index f7bd22d456e..50787532aa6 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index 793ca34b3ae..a7211cf78e1 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index 193d34358dd..a38c808fe03 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 847227c8567..5dd7d99d927 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/uk/files.po b/l10n/uk/files.po index 04e2e33d5eb..c37f23560d7 100644 --- a/l10n/uk/files.po +++ b/l10n/uk/files.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"PO-Revision-Date: 2012-12-03 10:32+0000\n" +"Last-Translator: volodya327 \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,12 +22,12 @@ msgstr "" #: ajax/upload.php:20 msgid "There is no error, the file uploaded with success" -msgstr "Файл успішно відвантажено без помилок." +msgstr "Файл успішно вивантажено без помилок." #: ajax/upload.php:21 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "Розмір звантаження перевищує upload_max_filesize параметра в php.ini: " #: ajax/upload.php:23 msgid "" diff --git a/l10n/zh_CN/files.po b/l10n/zh_CN/files.po index d92d087c660..0493f0631c1 100644 --- a/l10n/zh_CN/files.po +++ b/l10n/zh_CN/files.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"PO-Revision-Date: 2012-12-03 00:57+0000\n" +"Last-Translator: hanfeng \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -29,7 +29,7 @@ msgstr "没有发生错误,文件上传成功。" #: ajax/upload.php:21 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "上传文件大小已超过php.ini中upload_max_filesize所规定的值" #: ajax/upload.php:23 msgid "" diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po index 073572833a6..bd122830a29 100644 --- a/l10n/zh_CN/settings.po +++ b/l10n/zh_CN/settings.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" -"PO-Revision-Date: 2012-12-02 03:18+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"PO-Revision-Date: 2012-12-03 00:58+0000\n" +"Last-Translator: hanfeng \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -72,7 +72,7 @@ msgstr "语言已修改" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "管理员不能将自己移出管理组。" #: ajax/togglegroups.php:28 #, php-format diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php index 72d27aedf05..9db7cb93c36 100644 --- a/settings/l10n/de_DE.php +++ b/settings/l10n/de_DE.php @@ -11,6 +11,7 @@ "Authentication error" => "Fehler bei der Anmeldung", "Unable to delete user" => "Der Benutzer konnte nicht gelöscht werden", "Language changed" => "Sprache geändert", +"Admins can't remove themself from the admin group" => "Administratoren können sich nicht selbst aus der admin-Gruppe löschen", "Unable to add user to group %s" => "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", "Unable to remove user from group %s" => "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", "Disable" => "Deaktivieren", diff --git a/settings/l10n/pl.php b/settings/l10n/pl.php index 3946ee1973e..e17e3c00e53 100644 --- a/settings/l10n/pl.php +++ b/settings/l10n/pl.php @@ -11,6 +11,7 @@ "Authentication error" => "Błąd uwierzytelniania", "Unable to delete user" => "Nie można usunąć użytkownika", "Language changed" => "Język zmieniony", +"Admins can't remove themself from the admin group" => "Administratorzy nie mogą usunąć się sami z grupy administratorów.", "Unable to add user to group %s" => "Nie można dodać użytkownika do grupy %s", "Unable to remove user from group %s" => "Nie można usunąć użytkownika z grupy %s", "Disable" => "Wyłącz", diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php index b921046d6cd..c829e0376b7 100644 --- a/settings/l10n/sv.php +++ b/settings/l10n/sv.php @@ -11,6 +11,7 @@ "Authentication error" => "Autentiseringsfel", "Unable to delete user" => "Kan inte radera användare", "Language changed" => "Språk ändrades", +"Admins can't remove themself from the admin group" => "Administratörer kan inte ta bort sig själva från admingruppen", "Unable to add user to group %s" => "Kan inte lägga till användare i gruppen %s", "Unable to remove user from group %s" => "Kan inte radera användare från gruppen %s", "Disable" => "Deaktivera", diff --git a/settings/l10n/zh_CN.php b/settings/l10n/zh_CN.php index ad8140e6cc5..87c8172d6fa 100644 --- a/settings/l10n/zh_CN.php +++ b/settings/l10n/zh_CN.php @@ -11,6 +11,7 @@ "Authentication error" => "认证错误", "Unable to delete user" => "无法删除用户", "Language changed" => "语言已修改", +"Admins can't remove themself from the admin group" => "管理员不能将自己移出管理组。", "Unable to add user to group %s" => "无法把用户添加到组 %s", "Unable to remove user from group %s" => "无法从组%s中移除用户", "Disable" => "禁用", -- GitLab From 3e519945c3d3ceeafb6ca302f8cf720943d397a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Tue, 4 Dec 2012 13:30:13 +0100 Subject: [PATCH 570/576] replace minified infieldlabel with dcneiners version --- core/js/jquery.infieldlabel.js | 153 +++++++++++++++++++++++++++++ core/js/jquery.infieldlabel.min.js | 12 --- 2 files changed, 153 insertions(+), 12 deletions(-) create mode 100644 core/js/jquery.infieldlabel.js delete mode 100644 core/js/jquery.infieldlabel.min.js diff --git a/core/js/jquery.infieldlabel.js b/core/js/jquery.infieldlabel.js new file mode 100644 index 00000000000..67608493f8a --- /dev/null +++ b/core/js/jquery.infieldlabel.js @@ -0,0 +1,153 @@ +/** + * @license In-Field Label jQuery Plugin + * http://fuelyourcoding.com/scripts/infield.html + * + * Copyright (c) 2009-2010 Doug Neiner + * Dual licensed under the MIT and GPL licenses. + * Uses the same license as jQuery, see: + * http://docs.jquery.com/License + * + * @version 0.1.2 + */ +(function ($) { + + $.InFieldLabels = function (label, field, options) { + // To avoid scope issues, use 'base' instead of 'this' + // to reference this class from internal events and functions. + var base = this; + + // Access to jQuery and DOM versions of each element + base.$label = $(label); + base.label = label; + + base.$field = $(field); + base.field = field; + + base.$label.data("InFieldLabels", base); + base.showing = true; + + base.init = function () { + // Merge supplied options with default options + base.options = $.extend({}, $.InFieldLabels.defaultOptions, options); + + // Check if the field is already filled in + if (base.$field.val() !== "") { + base.$label.hide(); + base.showing = false; + } + + base.$field.focus(function () { + base.fadeOnFocus(); + }).blur(function () { + base.checkForEmpty(true); + }).bind('keydown.infieldlabel', function (e) { + // Use of a namespace (.infieldlabel) allows us to + // unbind just this method later + base.hideOnChange(e); + }).bind('paste', function (e) { + // Since you can not paste an empty string we can assume + // that the fieldis not empty and the label can be cleared. + base.setOpacity(0.0); + }).change(function (e) { + base.checkForEmpty(); + }).bind('onPropertyChange', function () { + base.checkForEmpty(); + }); + }; + + // If the label is currently showing + // then fade it down to the amount + // specified in the settings + base.fadeOnFocus = function () { + if (base.showing) { + base.setOpacity(base.options.fadeOpacity); + } + }; + + base.setOpacity = function (opacity) { + base.$label.stop().animate({ opacity: opacity }, base.options.fadeDuration); + base.showing = (opacity > 0.0); + }; + + // Checks for empty as a fail safe + // set blur to true when passing from + // the blur event + base.checkForEmpty = function (blur) { + if (base.$field.val() === "") { + base.prepForShow(); + base.setOpacity(blur ? 1.0 : base.options.fadeOpacity); + } else { + base.setOpacity(0.0); + } + }; + + base.prepForShow = function (e) { + if (!base.showing) { + // Prepare for a animate in... + base.$label.css({opacity: 0.0}).show(); + + // Reattach the keydown event + base.$field.bind('keydown.infieldlabel', function (e) { + base.hideOnChange(e); + }); + } + }; + + base.hideOnChange = function (e) { + if ( + (e.keyCode === 16) || // Skip Shift + (e.keyCode === 9) // Skip Tab + ) { + return; + } + + if (base.showing) { + base.$label.hide(); + base.showing = false; + } + + // Remove keydown event to save on CPU processing + base.$field.unbind('keydown.infieldlabel'); + }; + + // Run the initialization method + base.init(); + }; + + $.InFieldLabels.defaultOptions = { + fadeOpacity: 0.5, // Once a field has focus, how transparent should the label be + fadeDuration: 300 // How long should it take to animate from 1.0 opacity to the fadeOpacity + }; + + + $.fn.inFieldLabels = function (options) { + return this.each(function () { + // Find input or textarea based on for= attribute + // The for attribute on the label must contain the ID + // of the input or textarea element + var for_attr = $(this).attr('for'), $field; + if (!for_attr) { + return; // Nothing to attach, since the for field wasn't used + } + + // Find the referenced input or textarea element + $field = $( + "input#" + for_attr + "[type='text']," + + "input#" + for_attr + "[type='search']," + + "input#" + for_attr + "[type='tel']," + + "input#" + for_attr + "[type='url']," + + "input#" + for_attr + "[type='email']," + + "input#" + for_attr + "[type='password']," + + "textarea#" + for_attr + ); + + if ($field.length === 0) { + return; // Again, nothing to attach + } + + // Only create object for input[text], input[password], or textarea + (new $.InFieldLabels(this, $field[0], options)); + }); + }; + +}(jQuery)); \ No newline at end of file diff --git a/core/js/jquery.infieldlabel.min.js b/core/js/jquery.infieldlabel.min.js deleted file mode 100644 index 36f6b8f1271..00000000000 --- a/core/js/jquery.infieldlabel.min.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - In-Field Label jQuery Plugin - http://fuelyourcoding.com/scripts/infield.html - - Copyright (c) 2009-2010 Doug Neiner - Dual licensed under the MIT and GPL licenses. - Uses the same license as jQuery, see: - http://docs.jquery.com/License - - @version 0.1.5 -*/ -(function($){$.InFieldLabels=function(label,field,options){var base=this;base.$label=$(label);base.label=label;base.$field=$(field);base.field=field;base.$label.data("InFieldLabels",base);base.showing=true;base.init=function(){base.options=$.extend({},$.InFieldLabels.defaultOptions,options);setTimeout(function(){if(base.$field.val()!==""){base.$label.hide();base.showing=false}},200);base.$field.focus(function(){base.fadeOnFocus()}).blur(function(){base.checkForEmpty(true)}).bind('keydown.infieldlabel',function(e){base.hideOnChange(e)}).bind('paste',function(e){base.setOpacity(0.0)}).change(function(e){base.checkForEmpty()}).bind('onPropertyChange',function(){base.checkForEmpty()}).bind('keyup.infieldlabel',function(){base.checkForEmpty()})};base.fadeOnFocus=function(){if(base.showing){base.setOpacity(base.options.fadeOpacity)}};base.setOpacity=function(opacity){base.$label.stop().animate({opacity:opacity},base.options.fadeDuration);base.showing=(opacity>0.0)};base.checkForEmpty=function(blur){if(base.$field.val()===""){base.prepForShow();base.setOpacity(blur?1.0:base.options.fadeOpacity)}else{base.setOpacity(0.0)}};base.prepForShow=function(e){if(!base.showing){base.$label.css({opacity:0.0}).show();base.$field.bind('keydown.infieldlabel',function(e){base.hideOnChange(e)})}};base.hideOnChange=function(e){if((e.keyCode===16)||(e.keyCode===9)){return}if(base.showing){base.$label.hide();base.showing=false}base.$field.unbind('keydown.infieldlabel')};base.init()};$.InFieldLabels.defaultOptions={fadeOpacity:0.5,fadeDuration:300};$.fn.inFieldLabels=function(options){return this.each(function(){var for_attr=$(this).attr('for'),$field;if(!for_attr){return}$field=$("input#"+for_attr+"[type='text'],"+"input#"+for_attr+"[type='search'],"+"input#"+for_attr+"[type='tel'],"+"input#"+for_attr+"[type='url'],"+"input#"+for_attr+"[type='email'],"+"input#"+for_attr+"[type='password'],"+"textarea#"+for_attr);if($field.length===0){return}(new $.InFieldLabels(this,$field[0],options))})}}(jQuery)); -- GitLab From e72f95f643e5d9bdb9a9293eb14bf58170fae102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Tue, 4 Dec 2012 13:32:55 +0100 Subject: [PATCH 571/576] merge changes discussed in dcneiner pull number 4 'fix for autocomplete issue' including firefox password overlay --- core/js/jquery.infieldlabel.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/core/js/jquery.infieldlabel.js b/core/js/jquery.infieldlabel.js index 67608493f8a..c7daf61edd8 100644 --- a/core/js/jquery.infieldlabel.js +++ b/core/js/jquery.infieldlabel.js @@ -7,7 +7,7 @@ * Uses the same license as jQuery, see: * http://docs.jquery.com/License * - * @version 0.1.2 + * @version 0.1.6 */ (function ($) { @@ -31,10 +31,13 @@ base.options = $.extend({}, $.InFieldLabels.defaultOptions, options); // Check if the field is already filled in - if (base.$field.val() !== "") { - base.$label.hide(); - base.showing = false; - } + // add a short delay to handle autocomplete + setTimeout(function() { + if (base.$field.val() !== "") { + base.$label.hide(); + base.showing = false; + } + }, 200); base.$field.focus(function () { base.fadeOnFocus(); @@ -52,7 +55,15 @@ base.checkForEmpty(); }).bind('onPropertyChange', function () { base.checkForEmpty(); + }).bind('keyup.infieldlabel', function () { + base.checkForEmpty() }); + setInterval(function(){ + if(base.$field.val() != ""){ + base.$label.hide(); + base.showing = false; + }; + },100); }; // If the label is currently showing -- GitLab From e65abb8054e17eb850969b659259385b83e85639 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Tue, 4 Dec 2012 14:49:19 +0100 Subject: [PATCH 572/576] minified version no longer available --- lib/base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/base.php b/lib/base.php index dff73ef1ae8..8c508c48767 100644 --- a/lib/base.php +++ b/lib/base.php @@ -260,7 +260,7 @@ class OC{ OC_Util::addScript( "jquery-1.7.2.min" ); OC_Util::addScript( "jquery-ui-1.8.16.custom.min" ); OC_Util::addScript( "jquery-showpassword" ); - OC_Util::addScript( "jquery.infieldlabel.min" ); + OC_Util::addScript( "jquery.infieldlabel" ); OC_Util::addScript( "jquery-tipsy" ); OC_Util::addScript( "oc-dialogs" ); OC_Util::addScript( "js" ); -- GitLab From e6ec0e8a5e35b94dee83bdd53302d76a6f4e92fa Mon Sep 17 00:00:00 2001 From: Brice Maron Date: Tue, 4 Dec 2012 17:36:23 +0000 Subject: [PATCH 573/576] Remove support of sqlite2 at installation --- core/setup.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/setup.php b/core/setup.php index 7a5c6d5f3e0..9e15f205c00 100644 --- a/core/setup.php +++ b/core/setup.php @@ -12,7 +12,7 @@ if( file_exists( $autosetup_file )) { OC_Util::addScript('setup'); -$hasSQLite = (is_callable('sqlite_open') or class_exists('SQLite3')); +$hasSQLite = (is_callable('sqlite_open') and class_exists('SQLite3')); $hasMySQL = is_callable('mysql_connect'); $hasPostgreSQL = is_callable('pg_connect'); $hasOracle = is_callable('oci_connect'); -- GitLab From 39e37fa9c64b61fa4d01a8894cd0a7ef577e61f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 4 Dec 2012 19:28:46 +0100 Subject: [PATCH 574/576] Enabling unit testing for apptemplate_advanced --- tests/enable_all.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/enable_all.php b/tests/enable_all.php index 23a1e8ab68c..16838398f17 100644 --- a/tests/enable_all.php +++ b/tests/enable_all.php @@ -10,6 +10,7 @@ require_once __DIR__.'/../lib/base.php'; OC_App::enable('calendar'); OC_App::enable('contacts'); +OC_App::enable('apptemplate_advanced'); #OC_App::enable('files_archive'); #OC_App::enable('mozilla_sync'); #OC_App::enable('news'); -- GitLab From 4df61c3e45b6dabb83e90f71d876ed020a0d9be6 Mon Sep 17 00:00:00 2001 From: Brice Maron Date: Tue, 4 Dec 2012 19:34:24 +0000 Subject: [PATCH 575/576] Simplify has sqlite test --- core/setup.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/setup.php b/core/setup.php index 9e15f205c00..66b8cf378bd 100644 --- a/core/setup.php +++ b/core/setup.php @@ -12,7 +12,7 @@ if( file_exists( $autosetup_file )) { OC_Util::addScript('setup'); -$hasSQLite = (is_callable('sqlite_open') and class_exists('SQLite3')); +$hasSQLite = class_exists('SQLite3'); $hasMySQL = is_callable('mysql_connect'); $hasPostgreSQL = is_callable('pg_connect'); $hasOracle = is_callable('oci_connect'); -- GitLab From 524f3c3c0bf2545ba82f9e98da6708335db15027 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Wed, 5 Dec 2012 00:04:55 +0100 Subject: [PATCH 576/576] [tx-robot] updated from transifex --- apps/files/l10n/fr.php | 1 + apps/files/l10n/tr.php | 7 ++ apps/files_encryption/l10n/sr.php | 1 + apps/files_sharing/l10n/tr.php | 9 +++ apps/user_webdavauth/l10n/tr.php | 3 + core/l10n/sr.php | 16 ++++ core/l10n/tr.php | 6 ++ l10n/de/settings.po | 9 ++- l10n/fr/files.po | 9 ++- l10n/fr/settings.po | 8 +- l10n/sr/core.po | 119 ++++++++++++++-------------- l10n/sr/files_encryption.po | 11 +-- l10n/sr/settings.po | 61 +++++++------- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/tr/core.po | 99 +++++++++++------------ l10n/tr/files.po | 21 ++--- l10n/tr/files_sharing.po | 31 ++++---- l10n/tr/settings.po | 29 +++---- l10n/tr/user_webdavauth.po | 9 ++- settings/l10n/de.php | 1 + settings/l10n/fr.php | 1 + settings/l10n/sr.php | 28 ++++++- settings/l10n/tr.php | 11 +++ 32 files changed, 301 insertions(+), 209 deletions(-) create mode 100644 apps/files_sharing/l10n/tr.php create mode 100644 apps/user_webdavauth/l10n/tr.php diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php index 30d96eb2c6c..86d476873d0 100644 --- a/apps/files/l10n/fr.php +++ b/apps/files/l10n/fr.php @@ -1,5 +1,6 @@ "Aucune erreur, le fichier a été téléversé avec succès", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Le fichier envoyé dépasse la valeur upload_max_filesize située dans le fichier php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Le fichier téléversé excède la valeur de MAX_FILE_SIZE spécifiée dans le formulaire HTML", "The uploaded file was only partially uploaded" => "Le fichier n'a été que partiellement téléversé", "No file was uploaded" => "Aucun fichier n'a été téléversé", diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php index 8f7814088b1..061ed1f3ae2 100644 --- a/apps/files/l10n/tr.php +++ b/apps/files/l10n/tr.php @@ -9,16 +9,23 @@ "Unshare" => "Paylaşılmayan", "Delete" => "Sil", "Rename" => "İsim değiştir.", +"{new_name} already exists" => "{new_name} zaten mevcut", "replace" => "değiştir", +"suggest name" => "Öneri ad", "cancel" => "iptal", +"replaced {new_name}" => "değiştirilen {new_name}", "undo" => "geri al", +"unshared {files}" => "paylaşılmamış {files}", +"deleted {files}" => "silinen {files}", "generating ZIP-file, it may take some time." => "ZIP dosyası oluşturuluyor, biraz sürebilir.", "Unable to upload your file as it is a directory or has 0 bytes" => "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi", "Upload Error" => "Yükleme hatası", "Close" => "Kapat", "Pending" => "Bekliyor", +"1 file uploading" => "1 dosya yüklendi", "Upload cancelled." => "Yükleme iptal edildi.", "File upload is in progress. Leaving the page now will cancel the upload." => "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur.", +"error while scanning" => "tararamada hata oluşdu", "Name" => "Ad", "Size" => "Boyut", "Modified" => "Değiştirilme", diff --git a/apps/files_encryption/l10n/sr.php b/apps/files_encryption/l10n/sr.php index dbeda58af08..4718780ee52 100644 --- a/apps/files_encryption/l10n/sr.php +++ b/apps/files_encryption/l10n/sr.php @@ -1,5 +1,6 @@ "Шифровање", +"Exclude the following file types from encryption" => "Не шифруј следеће типове датотека", "None" => "Ништа", "Enable Encryption" => "Омогући шифровање" ); diff --git a/apps/files_sharing/l10n/tr.php b/apps/files_sharing/l10n/tr.php new file mode 100644 index 00000000000..f2e6e5697d6 --- /dev/null +++ b/apps/files_sharing/l10n/tr.php @@ -0,0 +1,9 @@ + "Şifre", +"Submit" => "Gönder", +"%s shared the folder %s with you" => "%s sizinle paylaşılan %s klasör", +"%s shared the file %s with you" => "%s sizinle paylaşılan %s klasör", +"Download" => "İndir", +"No preview available for" => "Kullanılabilir önizleme yok", +"web services under your control" => "Bilgileriniz güvenli ve şifreli" +); diff --git a/apps/user_webdavauth/l10n/tr.php b/apps/user_webdavauth/l10n/tr.php new file mode 100644 index 00000000000..9bd32954b05 --- /dev/null +++ b/apps/user_webdavauth/l10n/tr.php @@ -0,0 +1,3 @@ + "WebDAV URL: http://" +); diff --git a/core/l10n/sr.php b/core/l10n/sr.php index 6355e3119f3..406b92ff83f 100644 --- a/core/l10n/sr.php +++ b/core/l10n/sr.php @@ -1,14 +1,23 @@ "Врста категорије није унет.", +"No category to add?" => "Додати још неку категорију?", "This category already exists: " => "Категорија већ постоји:", +"Object type not provided." => "Врста објекта није унета.", +"%s ID not provided." => "%s ИД нису унети.", +"Error adding %s to favorites." => "Грешка приликом додавања %s у омиљене.", "No categories selected for deletion." => "Ни једна категорија није означена за брисање.", +"Error removing %s from favorites." => "Грешка приликом уклањања %s из омиљених", "Settings" => "Подешавања", "seconds ago" => "пре неколико секунди", "1 minute ago" => "пре 1 минут", "{minutes} minutes ago" => "пре {minutes} минута", +"1 hour ago" => "Пре једног сата", +"{hours} hours ago" => "Пре {hours} сата (сати)", "today" => "данас", "yesterday" => "јуче", "{days} days ago" => "пре {days} дана", "last month" => "прошлог месеца", +"{months} months ago" => "Пре {months} месеца (месеци)", "months ago" => "месеци раније", "last year" => "прошле године", "years ago" => "година раније", @@ -17,10 +26,15 @@ "No" => "Не", "Yes" => "Да", "Ok" => "У реду", +"The object type is not specified." => "Врста објекта није подешена.", "Error" => "Грешка", +"The app name is not specified." => "Име програма није унето.", +"The required file {file} is not installed!" => "Потребна датотека {file} није инсталирана.", "Error while sharing" => "Грешка у дељењу", "Error while unsharing" => "Грешка код искључења дељења", "Error while changing permissions" => "Грешка код промене дозвола", +"Shared with you and the group {group} by {owner}" => "Дељено са вама и са групом {group}. Поделио {owner}.", +"Shared with you by {owner}" => "Поделио са вама {owner}", "Share with" => "Подели са", "Share with link" => "Подели линк", "Password protect" => "Заштићено лозинком", @@ -28,7 +42,9 @@ "Set expiration date" => "Постави датум истека", "Expiration date" => "Датум истека", "Share via email:" => "Подели поштом:", +"No people found" => "Особе нису пронађене.", "Resharing is not allowed" => "Поновно дељење није дозвољено", +"Shared in {item} with {user}" => "Подељено унутар {item} са {user}", "Unshare" => "Не дели", "can edit" => "може да мења", "access control" => "права приступа", diff --git a/core/l10n/tr.php b/core/l10n/tr.php index 01e3dd2838a..cb0df023993 100644 --- a/core/l10n/tr.php +++ b/core/l10n/tr.php @@ -3,12 +3,18 @@ "This category already exists: " => "Bu kategori zaten mevcut: ", "No categories selected for deletion." => "Silmek için bir kategori seçilmedi", "Settings" => "Ayarlar", +"Choose" => "seç", "Cancel" => "İptal", "No" => "Hayır", "Yes" => "Evet", "Ok" => "Tamam", "Error" => "Hata", +"Error while sharing" => "Paylaşım sırasında hata ", +"Share with" => "ile Paylaş", +"Share with link" => "Bağlantı ile paylaş", +"Password protect" => "Şifre korunması", "Password" => "Parola", +"Set expiration date" => "Son kullanma tarihini ayarla", "Unshare" => "Paylaşılmayan", "create" => "oluştur", "ownCloud password reset" => "ownCloud parola sıfırlama", diff --git a/l10n/de/settings.po b/l10n/de/settings.po index d2826158105..4d80da3751f 100644 --- a/l10n/de/settings.po +++ b/l10n/de/settings.po @@ -14,6 +14,7 @@ # , 2012. # Marcel Kühlhorn , 2012. # , 2012. +# , 2012. # , 2012. # , 2012. # Phi Lieb <>, 2012. @@ -23,9 +24,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" -"PO-Revision-Date: 2012-12-02 03:18+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" +"PO-Revision-Date: 2012-12-04 13:54+0000\n" +"Last-Translator: AndryXY \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -83,7 +84,7 @@ msgstr "Sprache geändert" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen." #: ajax/togglegroups.php:28 #, php-format diff --git a/l10n/fr/files.po b/l10n/fr/files.po index ca8bbd350fc..b0fb5e1a70e 100644 --- a/l10n/fr/files.po +++ b/l10n/fr/files.po @@ -11,15 +11,16 @@ # Guillaume Paumier , 2012. # , 2012. # Nahir Mohamed , 2012. +# Robert Di Rosa <>, 2012. # , 2011. # Romain DEP. , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" +"PO-Revision-Date: 2012-12-04 10:24+0000\n" +"Last-Translator: Robert Di Rosa <>\n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -34,7 +35,7 @@ msgstr "Aucune erreur, le fichier a été téléversé avec succès" #: ajax/upload.php:21 msgid "" "The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" +msgstr "Le fichier envoyé dépasse la valeur upload_max_filesize située dans le fichier php.ini:" #: ajax/upload.php:23 msgid "" diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po index a443aba93f2..c3e8712f322 100644 --- a/l10n/fr/settings.po +++ b/l10n/fr/settings.po @@ -20,9 +20,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" -"PO-Revision-Date: 2012-12-02 03:18+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" +"PO-Revision-Date: 2012-12-04 10:26+0000\n" +"Last-Translator: Robert Di Rosa <>\n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -80,7 +80,7 @@ msgstr "Langue changée" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin" #: ajax/togglegroups.php:28 #, php-format diff --git a/l10n/sr/core.po b/l10n/sr/core.po index 4e7abfceb6d..2aa7514268b 100644 --- a/l10n/sr/core.po +++ b/l10n/sr/core.po @@ -4,14 +4,15 @@ # # Translators: # Ivan Petrović , 2012. +# , 2012. # Slobodan Terzić , 2011, 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-16 00:02+0100\n" -"PO-Revision-Date: 2012-11-14 23:13+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" +"PO-Revision-Date: 2012-12-04 15:04+0000\n" +"Last-Translator: Kostic \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,11 +22,11 @@ msgstr "" #: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25 msgid "Category type not provided." -msgstr "" +msgstr "Врста категорије није унет." #: ajax/vcategories/add.php:30 msgid "No category to add?" -msgstr "" +msgstr "Додати још неку категорију?" #: ajax/vcategories/add.php:37 msgid "This category already exists: " @@ -35,18 +36,18 @@ msgstr "Категорија већ постоји:" #: ajax/vcategories/favorites.php:24 #: ajax/vcategories/removeFromFavorites.php:26 msgid "Object type not provided." -msgstr "" +msgstr "Врста објекта није унета." #: ajax/vcategories/addToFavorites.php:30 #: ajax/vcategories/removeFromFavorites.php:30 #, php-format msgid "%s ID not provided." -msgstr "" +msgstr "%s ИД нису унети." #: ajax/vcategories/addToFavorites.php:35 #, php-format msgid "Error adding %s to favorites." -msgstr "" +msgstr "Грешка приликом додавања %s у омиљене." #: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136 msgid "No categories selected for deletion." @@ -55,61 +56,61 @@ msgstr "Ни једна категорија није означена за бр #: ajax/vcategories/removeFromFavorites.php:35 #, php-format msgid "Error removing %s from favorites." -msgstr "" +msgstr "Грешка приликом уклањања %s из омиљених" -#: js/js.js:243 templates/layout.user.php:59 templates/layout.user.php:60 +#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61 msgid "Settings" msgstr "Подешавања" -#: js/js.js:688 +#: js/js.js:704 msgid "seconds ago" msgstr "пре неколико секунди" -#: js/js.js:689 +#: js/js.js:705 msgid "1 minute ago" msgstr "пре 1 минут" -#: js/js.js:690 +#: js/js.js:706 msgid "{minutes} minutes ago" msgstr "пре {minutes} минута" -#: js/js.js:691 +#: js/js.js:707 msgid "1 hour ago" -msgstr "" +msgstr "Пре једног сата" -#: js/js.js:692 +#: js/js.js:708 msgid "{hours} hours ago" -msgstr "" +msgstr "Пре {hours} сата (сати)" -#: js/js.js:693 +#: js/js.js:709 msgid "today" msgstr "данас" -#: js/js.js:694 +#: js/js.js:710 msgid "yesterday" msgstr "јуче" -#: js/js.js:695 +#: js/js.js:711 msgid "{days} days ago" msgstr "пре {days} дана" -#: js/js.js:696 +#: js/js.js:712 msgid "last month" msgstr "прошлог месеца" -#: js/js.js:697 +#: js/js.js:713 msgid "{months} months ago" -msgstr "" +msgstr "Пре {months} месеца (месеци)" -#: js/js.js:698 +#: js/js.js:714 msgid "months ago" msgstr "месеци раније" -#: js/js.js:699 +#: js/js.js:715 msgid "last year" msgstr "прошле године" -#: js/js.js:700 +#: js/js.js:716 msgid "years ago" msgstr "година раније" @@ -136,21 +137,21 @@ msgstr "У реду" #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162 msgid "The object type is not specified." -msgstr "" +msgstr "Врста објекта није подешена." #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:525 -#: js/share.js:537 +#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:533 +#: js/share.js:545 msgid "Error" msgstr "Грешка" #: js/oc-vcategories.js:179 msgid "The app name is not specified." -msgstr "" +msgstr "Име програма није унето." #: js/oc-vcategories.js:194 msgid "The required file {file} is not installed!" -msgstr "" +msgstr "Потребна датотека {file} није инсталирана." #: js/share.js:124 msgid "Error while sharing" @@ -166,11 +167,11 @@ msgstr "Грешка код промене дозвола" #: js/share.js:151 msgid "Shared with you and the group {group} by {owner}" -msgstr "" +msgstr "Дељено са вама и са групом {group}. Поделио {owner}." #: js/share.js:153 msgid "Shared with you by {owner}" -msgstr "" +msgstr "Поделио са вама {owner}" #: js/share.js:158 msgid "Share with" @@ -203,7 +204,7 @@ msgstr "Подели поштом:" #: js/share.js:208 msgid "No people found" -msgstr "" +msgstr "Особе нису пронађене." #: js/share.js:235 msgid "Resharing is not allowed" @@ -211,7 +212,7 @@ msgstr "Поновно дељење није дозвољено" #: js/share.js:271 msgid "Shared in {item} with {user}" -msgstr "" +msgstr "Подељено унутар {item} са {user}" #: js/share.js:292 msgid "Unshare" @@ -241,15 +242,15 @@ msgstr "обриши" msgid "share" msgstr "подели" -#: js/share.js:343 js/share.js:512 js/share.js:514 +#: js/share.js:349 js/share.js:520 js/share.js:522 msgid "Password protected" msgstr "Заштићено лозинком" -#: js/share.js:525 +#: js/share.js:533 msgid "Error unsetting expiration date" msgstr "Грешка код поништавања датума истека" -#: js/share.js:537 +#: js/share.js:545 msgid "Error setting expiration date" msgstr "Грешка код постављања датума истека" @@ -404,87 +405,87 @@ msgstr "Домаћин базе" msgid "Finish setup" msgstr "Заврши подешавање" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Sunday" msgstr "Недеља" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Monday" msgstr "Понедељак" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Tuesday" msgstr "Уторак" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Wednesday" msgstr "Среда" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Thursday" msgstr "Четвртак" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Friday" msgstr "Петак" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Saturday" msgstr "Субота" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "January" msgstr "Јануар" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "February" msgstr "Фебруар" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "March" msgstr "Март" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "April" msgstr "Април" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "May" msgstr "Мај" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "June" msgstr "Јун" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "July" msgstr "Јул" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "August" msgstr "Август" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "September" msgstr "Септембар" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "October" msgstr "Октобар" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "November" msgstr "Новембар" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "December" msgstr "Децембар" -#: templates/layout.guest.php:41 +#: templates/layout.guest.php:42 msgid "web services under your control" msgstr "веб сервиси под контролом" -#: templates/layout.user.php:44 +#: templates/layout.user.php:45 msgid "Log out" msgstr "Одјава" diff --git a/l10n/sr/files_encryption.po b/l10n/sr/files_encryption.po index 2d46f4f9b55..a0a21dd2c84 100644 --- a/l10n/sr/files_encryption.po +++ b/l10n/sr/files_encryption.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# , 2012. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-02 00:02+0100\n" -"PO-Revision-Date: 2012-12-01 20:46+0000\n" -"Last-Translator: Rancher \n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" +"PO-Revision-Date: 2012-12-04 15:06+0000\n" +"Last-Translator: Kostic \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,12 +25,12 @@ msgstr "Шифровање" #: templates/settings.php:4 msgid "Exclude the following file types from encryption" -msgstr "" +msgstr "Не шифруј следеће типове датотека" #: templates/settings.php:5 msgid "None" msgstr "Ништа" -#: templates/settings.php:10 +#: templates/settings.php:12 msgid "Enable Encryption" msgstr "Омогући шифровање" diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po index 1ee35e9cf0a..3d725b35b08 100644 --- a/l10n/sr/settings.po +++ b/l10n/sr/settings.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# , 2012. # Slobodan Terzić , 2011, 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" -"PO-Revision-Date: 2012-12-02 03:18+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" +"PO-Revision-Date: 2012-12-04 15:29+0000\n" +"Last-Translator: Kostic \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,27 +21,27 @@ msgstr "" #: ajax/apps/ocs.php:20 msgid "Unable to load list from App Store" -msgstr "" +msgstr "Грешка приликом учитавања списка из Складишта Програма" #: ajax/creategroup.php:10 msgid "Group already exists" -msgstr "" +msgstr "Група већ постоји" #: ajax/creategroup.php:19 msgid "Unable to add group" -msgstr "" +msgstr "Не могу да додам групу" #: ajax/enableapp.php:12 msgid "Could not enable app. " -msgstr "" +msgstr "Не могу да укључим програм" #: ajax/lostpassword.php:12 msgid "Email saved" -msgstr "" +msgstr "Е-порука сачувана" #: ajax/lostpassword.php:14 msgid "Invalid email" -msgstr "" +msgstr "Неисправна е-адреса" #: ajax/openid.php:13 msgid "OpenID Changed" @@ -52,7 +53,7 @@ msgstr "Неисправан захтев" #: ajax/removegroup.php:13 msgid "Unable to delete group" -msgstr "" +msgstr "Не могу да уклоним групу" #: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18 msgid "Authentication error" @@ -60,37 +61,37 @@ msgstr "Грешка при аутентификацији" #: ajax/removeuser.php:24 msgid "Unable to delete user" -msgstr "" +msgstr "Не могу да уклоним корисника" #: ajax/setlanguage.php:15 msgid "Language changed" -msgstr "Језик је измењен" +msgstr "Језик је промењен" #: ajax/togglegroups.php:12 msgid "Admins can't remove themself from the admin group" -msgstr "" +msgstr "Управници не могу себе уклонити из админ групе" #: ajax/togglegroups.php:28 #, php-format msgid "Unable to add user to group %s" -msgstr "" +msgstr "Не могу да додам корисника у групу %s" #: ajax/togglegroups.php:34 #, php-format msgid "Unable to remove user from group %s" -msgstr "" +msgstr "Не могу да уклоним корисника из групе %s" #: js/apps.js:28 js/apps.js:67 msgid "Disable" -msgstr "" +msgstr "Искључи" #: js/apps.js:28 js/apps.js:55 msgid "Enable" -msgstr "" +msgstr "Укључи" #: js/personal.js:69 msgid "Saving..." -msgstr "" +msgstr "Чување у току..." #: personal.php:42 personal.php:43 msgid "__language_name__" @@ -98,11 +99,11 @@ msgstr "__language_name__" #: templates/apps.php:10 msgid "Add your App" -msgstr "" +msgstr "Додајте ваш програм" #: templates/apps.php:11 msgid "More Apps" -msgstr "" +msgstr "Више програма" #: templates/apps.php:27 msgid "Select an App" @@ -110,11 +111,11 @@ msgstr "Изаберите програм" #: templates/apps.php:31 msgid "See application page at apps.owncloud.com" -msgstr "" +msgstr "Погледајте страницу са програмима на apps.owncloud.com" #: templates/apps.php:32 msgid "-licensed by " -msgstr "" +msgstr "-лиценцирао " #: templates/help.php:9 msgid "Documentation" @@ -122,7 +123,7 @@ msgstr "Документација" #: templates/help.php:10 msgid "Managing Big Files" -msgstr "" +msgstr "Управљање великим датотекама" #: templates/help.php:11 msgid "Ask a question" @@ -143,11 +144,11 @@ msgstr "Одговор" #: templates/personal.php:8 #, php-format msgid "You have used %s of the available %s" -msgstr "" +msgstr "Искористили сте %s од дозвољених %s" #: templates/personal.php:12 msgid "Desktop and Mobile Syncing Clients" -msgstr "" +msgstr "Стони и мобилни клијенти за усклађивање" #: templates/personal.php:13 msgid "Download" @@ -155,7 +156,7 @@ msgstr "Преузимање" #: templates/personal.php:19 msgid "Your password was changed" -msgstr "" +msgstr "Лозинка је промењена" #: templates/personal.php:20 msgid "Unable to change your password" @@ -209,7 +210,7 @@ msgid "" "licensed under the AGPL." -msgstr "" +msgstr "Развијају Оунклауд (ownCloud) заједница, изворни код је издат под АГПЛ лиценцом." #: templates/users.php:21 templates/users.php:76 msgid "Name" @@ -229,7 +230,7 @@ msgstr "Направи" #: templates/users.php:35 msgid "Default Quota" -msgstr "" +msgstr "Подразумевано ограничење" #: templates/users.php:55 templates/users.php:138 msgid "Other" @@ -237,11 +238,11 @@ msgstr "Друго" #: templates/users.php:80 templates/users.php:112 msgid "Group Admin" -msgstr "" +msgstr "Управник групе" #: templates/users.php:82 msgid "Quota" -msgstr "" +msgstr "Ограничење" #: templates/users.php:146 msgid "Delete" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index a62ab6f3589..95457184e9d 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index e7085af495f..30ec5c19b4a 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 121ae600540..10fb8e3c105 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index 00f1ac97c27..3261eb20170 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index f3afb117e39..4dbf6eef957 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index d7d960434db..a82ea8a94ef 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 50787532aa6..cd78b93de0b 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index a7211cf78e1..2ead3e9d136 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index a38c808fe03..5868d1d1c4f 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 5dd7d99d927..cebdd2e3ca7 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-04 00:06+0100\n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/tr/core.po b/l10n/tr/core.po index 1556ecbff67..83b9a8bcbfd 100644 --- a/l10n/tr/core.po +++ b/l10n/tr/core.po @@ -5,14 +5,15 @@ # Translators: # Aranel Surion , 2011, 2012. # Caner Başaran , 2012. +# , 2012. # Necdet Yücel , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-16 00:02+0100\n" -"PO-Revision-Date: 2012-11-14 23:13+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" +"PO-Revision-Date: 2012-12-04 12:02+0000\n" +"Last-Translator: alpere \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -58,65 +59,65 @@ msgstr "Silmek için bir kategori seçilmedi" msgid "Error removing %s from favorites." msgstr "" -#: js/js.js:243 templates/layout.user.php:59 templates/layout.user.php:60 +#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61 msgid "Settings" msgstr "Ayarlar" -#: js/js.js:688 +#: js/js.js:704 msgid "seconds ago" msgstr "" -#: js/js.js:689 +#: js/js.js:705 msgid "1 minute ago" msgstr "" -#: js/js.js:690 +#: js/js.js:706 msgid "{minutes} minutes ago" msgstr "" -#: js/js.js:691 +#: js/js.js:707 msgid "1 hour ago" msgstr "" -#: js/js.js:692 +#: js/js.js:708 msgid "{hours} hours ago" msgstr "" -#: js/js.js:693 +#: js/js.js:709 msgid "today" msgstr "" -#: js/js.js:694 +#: js/js.js:710 msgid "yesterday" msgstr "" -#: js/js.js:695 +#: js/js.js:711 msgid "{days} days ago" msgstr "" -#: js/js.js:696 +#: js/js.js:712 msgid "last month" msgstr "" -#: js/js.js:697 +#: js/js.js:713 msgid "{months} months ago" msgstr "" -#: js/js.js:698 +#: js/js.js:714 msgid "months ago" msgstr "" -#: js/js.js:699 +#: js/js.js:715 msgid "last year" msgstr "" -#: js/js.js:700 +#: js/js.js:716 msgid "years ago" msgstr "" #: js/oc-dialogs.js:126 msgid "Choose" -msgstr "" +msgstr "seç" #: js/oc-dialogs.js:146 js/oc-dialogs.js:166 msgid "Cancel" @@ -140,8 +141,8 @@ msgid "The object type is not specified." msgstr "" #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:525 -#: js/share.js:537 +#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:533 +#: js/share.js:545 msgid "Error" msgstr "Hata" @@ -155,7 +156,7 @@ msgstr "" #: js/share.js:124 msgid "Error while sharing" -msgstr "" +msgstr "Paylaşım sırasında hata " #: js/share.js:135 msgid "Error while unsharing" @@ -175,15 +176,15 @@ msgstr "" #: js/share.js:158 msgid "Share with" -msgstr "" +msgstr "ile Paylaş" #: js/share.js:163 msgid "Share with link" -msgstr "" +msgstr "Bağlantı ile paylaş" #: js/share.js:164 msgid "Password protect" -msgstr "" +msgstr "Şifre korunması" #: js/share.js:168 templates/installation.php:42 templates/login.php:24 #: templates/verify.php:13 @@ -192,7 +193,7 @@ msgstr "Parola" #: js/share.js:173 msgid "Set expiration date" -msgstr "" +msgstr "Son kullanma tarihini ayarla" #: js/share.js:174 msgid "Expiration date" @@ -242,15 +243,15 @@ msgstr "" msgid "share" msgstr "" -#: js/share.js:343 js/share.js:512 js/share.js:514 +#: js/share.js:349 js/share.js:520 js/share.js:522 msgid "Password protected" msgstr "" -#: js/share.js:525 +#: js/share.js:533 msgid "Error unsetting expiration date" msgstr "" -#: js/share.js:537 +#: js/share.js:545 msgid "Error setting expiration date" msgstr "" @@ -405,87 +406,87 @@ msgstr "Veritabanı sunucusu" msgid "Finish setup" msgstr "Kurulumu tamamla" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Sunday" msgstr "Pazar" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Monday" msgstr "Pazartesi" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Tuesday" msgstr "Salı" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Wednesday" msgstr "Çarşamba" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Thursday" msgstr "Perşembe" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Friday" msgstr "Cuma" -#: templates/layout.guest.php:15 templates/layout.user.php:16 +#: templates/layout.guest.php:16 templates/layout.user.php:17 msgid "Saturday" msgstr "Cumartesi" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "January" msgstr "Ocak" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "February" msgstr "Şubat" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "March" msgstr "Mart" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "April" msgstr "Nisan" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "May" msgstr "Mayıs" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "June" msgstr "Haziran" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "July" msgstr "Temmuz" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "August" msgstr "Ağustos" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "September" msgstr "Eylül" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "October" msgstr "Ekim" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "November" msgstr "Kasım" -#: templates/layout.guest.php:16 templates/layout.user.php:17 +#: templates/layout.guest.php:17 templates/layout.user.php:18 msgid "December" msgstr "Aralık" -#: templates/layout.guest.php:41 +#: templates/layout.guest.php:42 msgid "web services under your control" msgstr "kontrolünüzdeki web servisleri" -#: templates/layout.user.php:44 +#: templates/layout.user.php:45 msgid "Log out" msgstr "Çıkış yap" diff --git a/l10n/tr/files.po b/l10n/tr/files.po index de748373635..fbd322633df 100644 --- a/l10n/tr/files.po +++ b/l10n/tr/files.po @@ -6,14 +6,15 @@ # Aranel Surion , 2011, 2012. # Caner Başaran , 2012. # Emre , 2012. +# , 2012. # Necdet Yücel , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-01 00:01+0100\n" -"PO-Revision-Date: 2012-11-30 23:02+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" +"PO-Revision-Date: 2012-12-04 11:50+0000\n" +"Last-Translator: alpere \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -70,7 +71,7 @@ msgstr "İsim değiştir." #: js/filelist.js:201 js/filelist.js:203 msgid "{new_name} already exists" -msgstr "" +msgstr "{new_name} zaten mevcut" #: js/filelist.js:201 js/filelist.js:203 msgid "replace" @@ -78,7 +79,7 @@ msgstr "değiştir" #: js/filelist.js:201 msgid "suggest name" -msgstr "" +msgstr "Öneri ad" #: js/filelist.js:201 js/filelist.js:203 msgid "cancel" @@ -86,7 +87,7 @@ msgstr "iptal" #: js/filelist.js:250 msgid "replaced {new_name}" -msgstr "" +msgstr "değiştirilen {new_name}" #: js/filelist.js:250 js/filelist.js:252 js/filelist.js:284 js/filelist.js:286 msgid "undo" @@ -98,11 +99,11 @@ msgstr "" #: js/filelist.js:284 msgid "unshared {files}" -msgstr "" +msgstr "paylaşılmamış {files}" #: js/filelist.js:286 msgid "deleted {files}" -msgstr "" +msgstr "silinen {files}" #: js/files.js:33 msgid "" @@ -132,7 +133,7 @@ msgstr "Bekliyor" #: js/files.js:274 msgid "1 file uploading" -msgstr "" +msgstr "1 dosya yüklendi" #: js/files.js:277 js/files.js:331 js/files.js:346 msgid "{count} files uploading" @@ -157,7 +158,7 @@ msgstr "" #: js/files.js:712 msgid "error while scanning" -msgstr "" +msgstr "tararamada hata oluşdu" #: js/files.js:785 templates/index.php:65 msgid "Name" diff --git a/l10n/tr/files_sharing.po b/l10n/tr/files_sharing.po index fbf76ec640f..5cef16c9263 100644 --- a/l10n/tr/files_sharing.po +++ b/l10n/tr/files_sharing.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-09-22 01:14+0200\n" -"PO-Revision-Date: 2012-09-21 23:15+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" +"PO-Revision-Date: 2012-12-04 11:33+0000\n" +"Last-Translator: alpere \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,30 +20,30 @@ msgstr "" #: templates/authenticate.php:4 msgid "Password" -msgstr "" +msgstr "Şifre" #: templates/authenticate.php:6 msgid "Submit" -msgstr "" +msgstr "Gönder" -#: templates/public.php:9 +#: templates/public.php:17 #, php-format msgid "%s shared the folder %s with you" -msgstr "" +msgstr "%s sizinle paylaşılan %s klasör" -#: templates/public.php:11 +#: templates/public.php:19 #, php-format msgid "%s shared the file %s with you" -msgstr "" +msgstr "%s sizinle paylaşılan %s klasör" -#: templates/public.php:14 templates/public.php:30 +#: templates/public.php:22 templates/public.php:38 msgid "Download" -msgstr "" +msgstr "İndir" -#: templates/public.php:29 +#: templates/public.php:37 msgid "No preview available for" -msgstr "" +msgstr "Kullanılabilir önizleme yok" -#: templates/public.php:37 +#: templates/public.php:43 msgid "web services under your control" -msgstr "" +msgstr "Bilgileriniz güvenli ve şifreli" diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po index df5e72846b5..2842d1b2d17 100644 --- a/l10n/tr/settings.po +++ b/l10n/tr/settings.po @@ -5,14 +5,15 @@ # Translators: # Aranel Surion , 2011, 2012. # Emre , 2012. +# , 2012. # Necdet Yücel , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-03 00:04+0100\n" -"PO-Revision-Date: 2012-12-02 03:18+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" +"PO-Revision-Date: 2012-12-04 11:41+0000\n" +"Last-Translator: alpere \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,19 +23,19 @@ msgstr "" #: ajax/apps/ocs.php:20 msgid "Unable to load list from App Store" -msgstr "" +msgstr "App Store'dan liste yüklenemiyor" #: ajax/creategroup.php:10 msgid "Group already exists" -msgstr "" +msgstr "Grup zaten mevcut" #: ajax/creategroup.php:19 msgid "Unable to add group" -msgstr "" +msgstr "Gruba eklenemiyor" #: ajax/enableapp.php:12 msgid "Could not enable app. " -msgstr "" +msgstr "Uygulama devreye alınamadı" #: ajax/lostpassword.php:12 msgid "Email saved" @@ -54,7 +55,7 @@ msgstr "Geçersiz istek" #: ajax/removegroup.php:13 msgid "Unable to delete group" -msgstr "" +msgstr "Grup silinemiyor" #: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18 msgid "Authentication error" @@ -62,7 +63,7 @@ msgstr "Eşleşme hata" #: ajax/removeuser.php:24 msgid "Unable to delete user" -msgstr "" +msgstr "Kullanıcı silinemiyor" #: ajax/setlanguage.php:15 msgid "Language changed" @@ -75,7 +76,7 @@ msgstr "" #: ajax/togglegroups.php:28 #, php-format msgid "Unable to add user to group %s" -msgstr "" +msgstr "Kullanıcı %s grubuna eklenemiyor" #: ajax/togglegroups.php:34 #, php-format @@ -104,7 +105,7 @@ msgstr "Uygulamanı Ekle" #: templates/apps.php:11 msgid "More Apps" -msgstr "" +msgstr "Daha fazla App" #: templates/apps.php:27 msgid "Select an App" @@ -157,7 +158,7 @@ msgstr "İndir" #: templates/personal.php:19 msgid "Your password was changed" -msgstr "" +msgstr "Şifreniz değiştirildi" #: templates/personal.php:20 msgid "Unable to change your password" @@ -211,7 +212,7 @@ msgid "" "licensed under the AGPL." -msgstr "" +msgstr "Geliştirilen TarafownCloud community, the source code is altında lisanslanmıştır AGPL." #: templates/users.php:21 templates/users.php:76 msgid "Name" @@ -239,7 +240,7 @@ msgstr "Diğer" #: templates/users.php:80 templates/users.php:112 msgid "Group Admin" -msgstr "" +msgstr "Yönetici Grubu " #: templates/users.php:82 msgid "Quota" diff --git a/l10n/tr/user_webdavauth.po b/l10n/tr/user_webdavauth.po index c047335fa4f..55bcf674de0 100644 --- a/l10n/tr/user_webdavauth.po +++ b/l10n/tr/user_webdavauth.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-11-09 10:06+0100\n" -"PO-Revision-Date: 2012-11-09 09:06+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2012-12-05 00:04+0100\n" +"PO-Revision-Date: 2012-12-04 11:44+0000\n" +"Last-Translator: alpere \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,4 +20,4 @@ msgstr "" #: templates/settings.php:4 msgid "WebDAV URL: http://" -msgstr "" +msgstr "WebDAV URL: http://" diff --git a/settings/l10n/de.php b/settings/l10n/de.php index c80fdad764f..33de45a9225 100644 --- a/settings/l10n/de.php +++ b/settings/l10n/de.php @@ -11,6 +11,7 @@ "Authentication error" => "Fehler bei der Anmeldung", "Unable to delete user" => "Benutzer konnte nicht gelöscht werden", "Language changed" => "Sprache geändert", +"Admins can't remove themself from the admin group" => "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.", "Unable to add user to group %s" => "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", "Unable to remove user from group %s" => "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", "Disable" => "Deaktivieren", diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php index 405c8b02154..8e5169fe0f3 100644 --- a/settings/l10n/fr.php +++ b/settings/l10n/fr.php @@ -11,6 +11,7 @@ "Authentication error" => "Erreur d'authentification", "Unable to delete user" => "Impossible de supprimer l'utilisateur", "Language changed" => "Langue changée", +"Admins can't remove themself from the admin group" => "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin", "Unable to add user to group %s" => "Impossible d'ajouter l'utilisateur au groupe %s", "Unable to remove user from group %s" => "Impossible de supprimer l'utilisateur du groupe %s", "Disable" => "Désactiver", diff --git a/settings/l10n/sr.php b/settings/l10n/sr.php index 9250dd13977..924d6a07b39 100644 --- a/settings/l10n/sr.php +++ b/settings/l10n/sr.php @@ -1,16 +1,38 @@ "Грешка приликом учитавања списка из Складишта Програма", +"Group already exists" => "Група већ постоји", +"Unable to add group" => "Не могу да додам групу", +"Could not enable app. " => "Не могу да укључим програм", +"Email saved" => "Е-порука сачувана", +"Invalid email" => "Неисправна е-адреса", "OpenID Changed" => "OpenID је измењен", "Invalid request" => "Неисправан захтев", +"Unable to delete group" => "Не могу да уклоним групу", "Authentication error" => "Грешка при аутентификацији", -"Language changed" => "Језик је измењен", +"Unable to delete user" => "Не могу да уклоним корисника", +"Language changed" => "Језик је промењен", +"Admins can't remove themself from the admin group" => "Управници не могу себе уклонити из админ групе", +"Unable to add user to group %s" => "Не могу да додам корисника у групу %s", +"Unable to remove user from group %s" => "Не могу да уклоним корисника из групе %s", +"Disable" => "Искључи", +"Enable" => "Укључи", +"Saving..." => "Чување у току...", "__language_name__" => "__language_name__", +"Add your App" => "Додајте ваш програм", +"More Apps" => "Више програма", "Select an App" => "Изаберите програм", +"See application page at apps.owncloud.com" => "Погледајте страницу са програмима на apps.owncloud.com", +"-licensed by " => "-лиценцирао ", "Documentation" => "Документација", +"Managing Big Files" => "Управљање великим датотекама", "Ask a question" => "Поставите питање", "Problems connecting to help database." => "Проблем у повезивању са базом помоћи", "Go there manually." => "Отиђите тамо ручно.", "Answer" => "Одговор", +"You have used %s of the available %s" => "Искористили сте %s од дозвољених %s", +"Desktop and Mobile Syncing Clients" => "Стони и мобилни клијенти за усклађивање", "Download" => "Преузимање", +"Your password was changed" => "Лозинка је промењена", "Unable to change your password" => "Не могу да изменим вашу лозинку", "Current password" => "Тренутна лозинка", "New password" => "Нова лозинка", @@ -22,10 +44,14 @@ "Language" => "Језик", "Help translate" => " Помозите у превођењу", "use this address to connect to your ownCloud in your file manager" => "користите ову адресу да би се повезали на ownCloud путем менаџњера фајлова", +"Developed by the ownCloud community, the source code is licensed under the AGPL." => "Развијају Оунклауд (ownCloud) заједница, изворни код је издат под АГПЛ лиценцом.", "Name" => "Име", "Password" => "Лозинка", "Groups" => "Групе", "Create" => "Направи", +"Default Quota" => "Подразумевано ограничење", "Other" => "Друго", +"Group Admin" => "Управник групе", +"Quota" => "Ограничење", "Delete" => "Обриши" ); diff --git a/settings/l10n/tr.php b/settings/l10n/tr.php index 49e79256b82..1e301e8d323 100644 --- a/settings/l10n/tr.php +++ b/settings/l10n/tr.php @@ -1,15 +1,23 @@ "App Store'dan liste yüklenemiyor", +"Group already exists" => "Grup zaten mevcut", +"Unable to add group" => "Gruba eklenemiyor", +"Could not enable app. " => "Uygulama devreye alınamadı", "Email saved" => "Eposta kaydedildi", "Invalid email" => "Geçersiz eposta", "OpenID Changed" => "OpenID Değiştirildi", "Invalid request" => "Geçersiz istek", +"Unable to delete group" => "Grup silinemiyor", "Authentication error" => "Eşleşme hata", +"Unable to delete user" => "Kullanıcı silinemiyor", "Language changed" => "Dil değiştirildi", +"Unable to add user to group %s" => "Kullanıcı %s grubuna eklenemiyor", "Disable" => "Etkin değil", "Enable" => "Etkin", "Saving..." => "Kaydediliyor...", "__language_name__" => "__dil_adı__", "Add your App" => "Uygulamanı Ekle", +"More Apps" => "Daha fazla App", "Select an App" => "Bir uygulama seçin", "See application page at apps.owncloud.com" => "Uygulamanın sayfasına apps.owncloud.com adresinden bakın ", "Documentation" => "Dökümantasyon", @@ -20,6 +28,7 @@ "Answer" => "Cevap", "Desktop and Mobile Syncing Clients" => "Masaüstü ve Mobil Senkron İstemcileri", "Download" => "İndir", +"Your password was changed" => "Şifreniz değiştirildi", "Unable to change your password" => "Parolanız değiştirilemiyor", "Current password" => "Mevcut parola", "New password" => "Yeni parola", @@ -31,12 +40,14 @@ "Language" => "Dil", "Help translate" => "Çevirilere yardım edin", "use this address to connect to your ownCloud in your file manager" => "bu adresi kullanarak ownCloud unuza dosya yöneticinizle bağlanın", +"Developed by the ownCloud community, the source code is licensed under the AGPL." => "Geliştirilen TarafownCloud community, the source code is altında lisanslanmıştır AGPL.", "Name" => "Ad", "Password" => "Parola", "Groups" => "Gruplar", "Create" => "Oluştur", "Default Quota" => "Varsayılan Kota", "Other" => "Diğer", +"Group Admin" => "Yönetici Grubu ", "Quota" => "Kota", "Delete" => "Sil" ); -- GitLab