migrate therinaldos.com data
Build & Deploy to DigitalOcean Space / build (push) Failing after 2m38s

This commit is contained in:
2024-05-05 15:50:45 -04:00
commit ef1ff240d4
23182 changed files with 3801898 additions and 0 deletions
@@ -0,0 +1,59 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Christopher Schäpers <kondou@ts.unde.re>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
use OCA\User_LDAP\Mapping\GroupMapping;
use OCA\User_LDAP\Mapping\UserMapping;
// Check user and app status
\OC_JSON::checkAdminUser();
\OC_JSON::checkAppEnabled('user_ldap');
\OC_JSON::callCheck();
$subject = (string)$_POST['ldap_clear_mapping'];
$mapping = null;
try {
if ($subject === 'user') {
$mapping = \OCP\Server::get(UserMapping::class);
$result = $mapping->clearCb(
function ($uid) {
\OC::$server->getUserManager()->emit('\OC\User', 'preUnassignedUserId', [$uid]);
},
function ($uid) {
\OC::$server->getUserManager()->emit('\OC\User', 'postUnassignedUserId', [$uid]);
}
);
} elseif ($subject === 'group') {
$mapping = new GroupMapping(\OC::$server->getDatabaseConnection());
$result = $mapping->clear();
}
if ($mapping === null || !$result) {
$l = \OC::$server->getL10N('user_ldap');
throw new \Exception($l->t('Failed to clear the mappings.'));
}
\OC_JSON::success();
} catch (\Exception $e) {
\OC_JSON::error(['message' => $e->getMessage()]);
}
@@ -0,0 +1,40 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bart Visscher <bartv@thisnet.nl>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
// Check user and app status
\OC_JSON::checkAdminUser();
\OC_JSON::checkAppEnabled('user_ldap');
\OC_JSON::callCheck();
$prefix = (string)$_POST['ldap_serverconfig_chooser'];
$helper = new \OCA\User_LDAP\Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection());
if ($helper->deleteServerConfiguration($prefix)) {
\OC_JSON::success();
} else {
$l = \OC::$server->getL10N('user_ldap');
\OC_JSON::error(['message' => $l->t('Failed to delete the server configuration')]);
}
@@ -0,0 +1,40 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author Joas Schilling <coding@schilljs.com>
* @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
// Check user and app status
\OC_JSON::checkAdminUser();
\OC_JSON::checkAppEnabled('user_ldap');
\OC_JSON::callCheck();
$prefix = (string)$_POST['ldap_serverconfig_chooser'];
$ldapWrapper = new OCA\User_LDAP\LDAP();
$connection = new \OCA\User_LDAP\Connection($ldapWrapper, $prefix);
$configuration = $connection->getConfiguration();
if (isset($configuration['ldap_agent_password']) && $configuration['ldap_agent_password'] !== '') {
// hide password
$configuration['ldap_agent_password'] = '**PASSWORD SET**';
}
\OC_JSON::success(['configuration' => $configuration]);
@@ -0,0 +1,51 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
// Check user and app status
\OC_JSON::checkAdminUser();
\OC_JSON::checkAppEnabled('user_ldap');
\OC_JSON::callCheck();
$helper = new \OCA\User_LDAP\Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection());
$serverConnections = $helper->getServerConfigurationPrefixes();
sort($serverConnections);
$lk = array_pop($serverConnections);
$ln = (int)str_replace('s', '', $lk);
$nk = 's'.str_pad($ln + 1, 2, '0', STR_PAD_LEFT);
$resultData = ['configPrefix' => $nk];
$newConfig = new \OCA\User_LDAP\Configuration($nk, false);
if (isset($_POST['copyConfig'])) {
$originalConfig = new \OCA\User_LDAP\Configuration($_POST['copyConfig']);
$newConfig->setConfiguration($originalConfig->getConfiguration());
} else {
$configuration = new \OCA\User_LDAP\Configuration($nk, false);
$newConfig->setConfiguration($configuration->getDefaults());
$resultData['defaults'] = $configuration->getDefaults();
}
$newConfig->saveConfiguration();
\OC_JSON::success($resultData);
@@ -0,0 +1,48 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
// Check user and app status
\OC_JSON::checkAdminUser();
\OC_JSON::checkAppEnabled('user_ldap');
\OC_JSON::callCheck();
$prefix = (string)$_POST['ldap_serverconfig_chooser'];
// Checkboxes are not submitted, when they are unchecked. Set them manually.
// only legacy checkboxes (Advanced and Expert tab) need to be handled here,
// the Wizard-like tabs handle it on their own
$chkboxes = ['ldap_configuration_active', 'ldap_override_main_server',
'ldap_turn_off_cert_check'];
foreach ($chkboxes as $boxid) {
if (!isset($_POST[$boxid])) {
$_POST[$boxid] = 0;
}
}
$ldapWrapper = new OCA\User_LDAP\LDAP();
$connection = new \OCA\User_LDAP\Connection($ldapWrapper, $prefix);
$connection->setConfiguration($_POST);
$connection->saveConfiguration();
\OC_JSON::success();
@@ -0,0 +1,86 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author Joas Schilling <coding@schilljs.com>
* @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
// Check user and app status
\OC_JSON::checkAdminUser();
\OC_JSON::checkAppEnabled('user_ldap');
\OC_JSON::callCheck();
$l = \OC::$server->getL10N('user_ldap');
$ldapWrapper = new OCA\User_LDAP\LDAP();
$connection = new \OCA\User_LDAP\Connection($ldapWrapper, $_POST['ldap_serverconfig_chooser']);
try {
$configurationOk = true;
$conf = $connection->getConfiguration();
if ($conf['ldap_configuration_active'] === '0') {
//needs to be true, otherwise it will also fail with an irritating message
$conf['ldap_configuration_active'] = '1';
$configurationOk = $connection->setConfiguration($conf);
}
if ($configurationOk) {
//Configuration is okay
/*
* Closing the session since it won't be used from this point on. There might be a potential
* race condition if a second request is made: either this request or the other might not
* contact the LDAP backup server the first time when it should, but there shouldn't be any
* problem with that other than the extra connection.
*/
\OC::$server->getSession()->close();
if ($connection->bind()) {
/*
* This shiny if block is an ugly hack to find out whether anonymous
* bind is possible on AD or not. Because AD happily and constantly
* replies with success to any anonymous bind request, we need to
* fire up a broken operation. If AD does not allow anonymous bind,
* it will end up with LDAP error code 1 which is turned into an
* exception by the LDAP wrapper. We catch this. Other cases may
* pass (like e.g. expected syntax error).
*/
try {
$ldapWrapper->read($connection->getConnectionResource(), '', 'objectClass=*', ['dn']);
} catch (\Exception $e) {
if ($e->getCode() === 1) {
\OC_JSON::error(['message' => $l->t('Invalid configuration: Anonymous binding is not allowed.')]);
exit;
}
}
\OC_JSON::success(['message'
=> $l->t('Valid configuration, connection established!')]);
} else {
\OC_JSON::error(['message'
=> $l->t('Valid configuration, but binding failed. Please check the server settings and credentials.')]);
}
} else {
\OC_JSON::error(['message'
=> $l->t('Invalid configuration. Please have a look at the logs for further details.')]);
}
} catch (\Exception $e) {
\OC_JSON::error(['message' => $e->getMessage()]);
}
+135
View File
@@ -0,0 +1,135 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author Joas Schilling <coding@schilljs.com>
* @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Roger Szabo <roger.szabo@web.de>
*
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
// Check user and app status
\OC_JSON::checkAdminUser();
\OC_JSON::checkAppEnabled('user_ldap');
\OC_JSON::callCheck();
$l = \OC::$server->getL10N('user_ldap');
if (!isset($_POST['action'])) {
\OC_JSON::error(['message' => $l->t('No action specified')]);
}
$action = (string)$_POST['action'];
if (!isset($_POST['ldap_serverconfig_chooser'])) {
\OC_JSON::error(['message' => $l->t('No configuration specified')]);
}
$prefix = (string)$_POST['ldap_serverconfig_chooser'];
$ldapWrapper = new \OCA\User_LDAP\LDAP();
$configuration = new \OCA\User_LDAP\Configuration($prefix);
$con = new \OCA\User_LDAP\Connection($ldapWrapper, $prefix, null);
$con->setConfiguration($configuration->getConfiguration());
$con->ldapConfigurationActive = true;
$con->setIgnoreValidation(true);
$factory = \OC::$server->get(\OCA\User_LDAP\AccessFactory::class);
$access = $factory->get($con);
$wizard = new \OCA\User_LDAP\Wizard($configuration, $ldapWrapper, $access);
switch ($action) {
case 'guessPortAndTLS':
case 'guessBaseDN':
case 'detectEmailAttribute':
case 'detectUserDisplayNameAttribute':
case 'determineGroupMemberAssoc':
case 'determineUserObjectClasses':
case 'determineGroupObjectClasses':
case 'determineGroupsForUsers':
case 'determineGroupsForGroups':
case 'determineAttributes':
case 'getUserListFilter':
case 'getUserLoginFilter':
case 'getGroupFilter':
case 'countUsers':
case 'countGroups':
case 'countInBaseDN':
try {
$result = $wizard->$action();
if ($result !== false) {
\OC_JSON::success($result->getResultArray());
exit;
}
} catch (\Exception $e) {
\OC_JSON::error(['message' => $e->getMessage(), 'code' => $e->getCode()]);
exit;
}
\OC_JSON::error();
exit;
break;
case 'testLoginName': {
try {
$loginName = $_POST['ldap_test_loginname'];
$result = $wizard->$action($loginName);
if ($result !== false) {
\OC_JSON::success($result->getResultArray());
exit;
}
} catch (\Exception $e) {
\OC_JSON::error(['message' => $e->getMessage()]);
exit;
}
\OC_JSON::error();
exit;
break;
}
case 'save':
$key = $_POST['cfgkey'] ?? false;
$val = $_POST['cfgval'] ?? null;
if ($key === false || is_null($val)) {
\OC_JSON::error(['message' => $l->t('No data specified')]);
exit;
}
if (is_array($key)) {
\OC_JSON::error(['message' => $l->t('Invalid data specified')]);
exit;
}
$cfg = [$key => $val];
$setParameters = [];
$configuration->setConfiguration($cfg, $setParameters);
if (!in_array($key, $setParameters)) {
\OC_JSON::error(['message' => $l->t($key.
' Could not set configuration %s', $setParameters[0])]);
exit;
}
$configuration->saveConfiguration();
//clear the cache on save
$connection = new \OCA\User_LDAP\Connection($ldapWrapper, $prefix);
$connection->clearCache();
\OC_JSON::success();
break;
default:
\OC_JSON::error(['message' => $l->t('Action does not exist')]);
break;
}
@@ -0,0 +1,69 @@
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>user_ldap</id>
<name>LDAP user and group backend</name>
<summary>This application enables administrators to connect Nextcloud to an LDAP-based user directory.</summary>
<description>This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.
A user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation.
</description>
<version>1.19.0</version>
<licence>agpl</licence>
<author>Dominik Schmidt</author>
<author>Arthur Schiwon</author>
<namespace>User_LDAP</namespace>
<types>
<authentication/>
</types>
<documentation>
<admin>admin-ldap</admin>
</documentation>
<category>integration</category>
<bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
<lib>ldap</lib>
<nextcloud min-version="28" max-version="28"/>
</dependencies>
<background-jobs>
<job>OCA\User_LDAP\Jobs\UpdateGroups</job>
<job>OCA\User_LDAP\Jobs\CleanUp</job>
<job>OCA\User_LDAP\Jobs\Sync</job>
</background-jobs>
<repair-steps>
<install>
<step>OCA\User_LDAP\Migration\SetDefaultProvider</step>
</install>
<uninstall>
<step>OCA\User_LDAP\Migration\UnsetDefaultProvider</step>
</uninstall>
<post-migration>
<step>OCA\User_LDAP\Migration\UUIDFixInsert</step>
<step>OCA\User_LDAP\Migration\RemoveRefreshTime</step>
</post-migration>
</repair-steps>
<commands>
<command>OCA\User_LDAP\Command\CheckUser</command>
<command>OCA\User_LDAP\Command\CheckGroup</command>
<command>OCA\User_LDAP\Command\CreateEmptyConfig</command>
<command>OCA\User_LDAP\Command\DeleteConfig</command>
<command>OCA\User_LDAP\Command\PromoteGroup</command>
<command>OCA\User_LDAP\Command\ResetGroup</command>
<command>OCA\User_LDAP\Command\ResetUser</command>
<command>OCA\User_LDAP\Command\Search</command>
<command>OCA\User_LDAP\Command\SetConfig</command>
<command>OCA\User_LDAP\Command\ShowConfig</command>
<command>OCA\User_LDAP\Command\ShowRemnants</command>
<command>OCA\User_LDAP\Command\TestConfig</command>
<command>OCA\User_LDAP\Command\UpdateUUID</command>
</commands>
<settings>
<admin>OCA\User_LDAP\Settings\Admin</admin>
<admin-section>OCA\User_LDAP\Settings\Section</admin-section>
</settings>
</info>
@@ -0,0 +1,63 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Roger Szabo <roger.szabo@web.de>
*
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
$this->create('user_ldap_ajax_clearMappings', 'apps/user_ldap/ajax/clearMappings.php')
->actionInclude('user_ldap/ajax/clearMappings.php');
$this->create('user_ldap_ajax_deleteConfiguration', 'apps/user_ldap/ajax/deleteConfiguration.php')
->actionInclude('user_ldap/ajax/deleteConfiguration.php');
$this->create('user_ldap_ajax_getConfiguration', 'apps/user_ldap/ajax/getConfiguration.php')
->actionInclude('user_ldap/ajax/getConfiguration.php');
$this->create('user_ldap_ajax_getNewServerConfigPrefix', 'apps/user_ldap/ajax/getNewServerConfigPrefix.php')
->actionInclude('user_ldap/ajax/getNewServerConfigPrefix.php');
$this->create('user_ldap_ajax_setConfiguration', 'apps/user_ldap/ajax/setConfiguration.php')
->actionInclude('user_ldap/ajax/setConfiguration.php');
$this->create('user_ldap_ajax_testConfiguration', 'apps/user_ldap/ajax/testConfiguration.php')
->actionInclude('user_ldap/ajax/testConfiguration.php');
$this->create('user_ldap_ajax_wizard', 'apps/user_ldap/ajax/wizard.php')
->actionInclude('user_ldap/ajax/wizard.php');
$application = new \OCP\AppFramework\App('user_ldap');
$application->registerRoutes($this, [
'ocs' => [
['name' => 'ConfigAPI#create', 'url' => '/api/v1/config', 'verb' => 'POST'],
['name' => 'ConfigAPI#show', 'url' => '/api/v1/config/{configID}', 'verb' => 'GET'],
['name' => 'ConfigAPI#modify', 'url' => '/api/v1/config/{configID}', 'verb' => 'PUT'],
['name' => 'ConfigAPI#delete', 'url' => '/api/v1/config/{configID}', 'verb' => 'DELETE'],
]
]);
/** @var \OCA\User_LDAP\AppInfo\Application $application */
$application = \OC::$server->query(\OCA\User_LDAP\AppInfo\Application::class);
$application->registerRoutes($this, [
'routes' => [
['name' => 'renewPassword#tryRenewPassword', 'url' => '/renewpassword', 'verb' => 'POST'],
['name' => 'renewPassword#showRenewPasswordForm', 'url' => '/renewpassword/{user}', 'verb' => 'GET'],
['name' => 'renewPassword#cancel', 'url' => '/renewpassword/cancel', 'verb' => 'GET'],
['name' => 'renewPassword#showLoginFormInvalidPassword', 'url' => '/renewpassword/invalidlogin/{user}', 'verb' => 'GET'],
]
]);
@@ -0,0 +1,377 @@
{
"hashes": {
"ajax\/clearMappings.php": "eceff123178f28ad298d8ba339ee61fe0cc7bbfcf186146dd75fd3cb935273bec1bee8801291fbc5d4c31aaf52c9c30b33507ccea842fa62c7ae4837972b3930",
"ajax\/deleteConfiguration.php": "2e7a631502f03e92a0af029e0f34a0d9884543e5d6cb6806082ef352ba211cdb7be020c8d32a78a950a1d7a6e30d4e819a55d97d6a56ba773071e3e4e847b11b",
"ajax\/getConfiguration.php": "9e70faf3e2d6d281300bddd05090d5c6fa281ac00fd2731b7bf9aad94b3bf852d3f3f2ad8269c0225d2f332582b0abe8a506a43d0fd9baaefdebe25a40a5f492",
"ajax\/getNewServerConfigPrefix.php": "65e58bbbccf2d0f625676a89b0d1b445f4d3d3183a0df7ecef8e5b62d2fe80ac93b47858da0de9bd4c80277417581b8bc1847208dfc3407d3972629ddbc55b50",
"ajax\/setConfiguration.php": "560264d6eface574d0693dfbeae795380906d2dd1555362dab6d430b90168b16e69b448e43fac65837740f33d27be8f6887160af8fa9e25a3c009de382ecc787",
"ajax\/testConfiguration.php": "f305500fe371edfe3e1986653fe766bd2ff0f8b485f86d0b8a071e220afde40ecb42e105f21d5c53744d135355a438c8163b38e8395a3200f8b68ad9c407b143",
"ajax\/wizard.php": "75bae4515f7af24a3a50649354c78e81b136bfab4c6cb770f13fd79816af15d61f6f0c84ab6b17823862abc0121cf474da4dd014b1d48cbdf94205321dedf828",
"appinfo\/info.xml": "fe7251410ce3d397b7a1bcede53a9fd159836e2c350932d62d41b45d7d5bfc3d2b8cc040431968d2382131da5d97b0b97bb93033f1875b38487d8c8feee23e7a",
"appinfo\/routes.php": "f0877ccfe2c200c9df3a5f6bf1c9d9e4b8863774024453861620755fb53c5da44f1ab78928df43cc6f1fe38beb3ee6efee34ddf1887499548396c214f5520d6c",
"composer\/autoload.php": "f153608cec483d291ed1c488f0ba8d06dd8b8fcc13de6fe2c9ce1fafc14cc79881dc3a5691ee4252dfbd2c84b2796f13d2b2385da0906cd04ebf69c3a7d18540",
"composer\/composer.json": "3df63a6d4ea53ac3fcd1ab4a33620587353739d45e9d891e169ba515d1f74f5d0f10fe3fad84c64ce894c61c71c6450294c857d8cd2a4ab05dbd3548e3ef37fc",
"composer\/composer.lock": "aba0413aa705be0d0570c496a43249c551836824e7a2b4673b51838fe0d9f425ddd07b6c4b95aa74ca549f58e90f2a7d78b51a2a3080749a5dc2e4a46d04fd1e",
"composer\/composer\/ClassLoader.php": "f73af132ef1159370f4da75d1477541c8fd55e82d64e1a29b199e8963597b3558853edd48f703118bb139680e80bbae5cd601580c9f62355f3e749214b40e162",
"composer\/composer\/InstalledVersions.php": "733e68c171cb9e44868bb0f105850fbd0e4f225c67235bf30fb2ac5c3443c6edfb722d4b33aa91c82bb600e937cb6392eb1883694d41616e66969d7d42e23b4f",
"composer\/composer\/LICENSE": "f3bb64009f41a425df5a9bbab53490f0eb9b74fa8d6aaa2f57efb928edc4ffff330260666edeaa04a91fed708c3663371cf01b284f3a08d6698aaef7a23f355a",
"composer\/composer\/autoload_classmap.php": "d4c9387783576cbb1384f569cd28884b5171d62f36d4a93b804e1d302a692510244b9042255b2b1d26d8b16e29d515384cf39531fa1cc4d4c40fca70a1817a26",
"composer\/composer\/autoload_namespaces.php": "5b2571f3b573a778d362b8c7412787b4084c7f27d3f5bba1585243f3ccbb0b9054e68522a22a1ad59ec11097b03a0e343865c0188c65b25f0a97e24e120339d1",
"composer\/composer\/autoload_psr4.php": "74e7256f51bc448eaf9d86165795fa8795d9f877f28540fe73ef43182380d52f0073041c76fd44409937c23dfc8e656d6ce767bb1ade5f5110774bbed7367b6f",
"composer\/composer\/autoload_real.php": "4c8e2e5ab8f2b66f61b922f6d010dfda3a622872cb387dcca655e2f5e1d7386afe60ea980731054a834a898d903b926e55baee2fc984825ff7afc24ddd784bec",
"composer\/composer\/autoload_static.php": "a24cafb1afb413cef22366a9b3178f749c79e5acd930b5f266f0cd0a83e62e3a76f2ca9baacef2c323425d5ac213be45d9eeca2351cf2f255c8188cfa5f43e65",
"composer\/composer\/installed.json": "0a3ed51f953eb945b970a8eb21957ca2beee4669c7d0d9be97b8259c391b60688f8abb78d4b1fae5e4e2ea5e3d8747f4d35f066a2605e9a76f5b45ec3f1da357",
"composer\/composer\/installed.php": "b372675a6e17dcce3bad1dd5162285a96140bd104eefc2d1349784cd56d6eab6d8852b3d72126913eaea2be3c6b4242af5ba7da3d83b743c04f7832f9e4e6d76",
"css\/renewPassword.css": "94c76430e2dcfbf27614113dd7caecf0a213d695318eb267c8c20e6ff107ea261905d8ae926073a15524c419924dab5951fc3f11e188b4a0277a54f7d826b8a6",
"css\/settings.css": "5d1700651556434a0af746f7c28b374094411094349d3517c2f00f19a553b850107e51f5a6927c42de8208b28389ba5f167f4a98b7be4d6c963d94600c04c0cd",
"css\/vendor\/ui-multiselect\/jquery.multiselect.css": "cb29f588e4aa9f3d460315384940abc481b7121fe18ed56077e8e5608dc4dc01df1083c76871ae7109228a3b1a0c169962fb901bba323d91f2f4e5e2c16dff5e",
"img\/app-dark.svg": "80a94292292b8cf9b9c3fb26ada1692dbf1f45b2ef72621dea6c9c62ef888fe4a37e40856fe6458f45ee7f9e0f0c0efa32c5753947f3076c2eb8081a2a0e8b59",
"img\/app.svg": "7d20f6e7b9d1a21dc7aa7651636ce011343eb94c6cc921fa52c2a0af354afc38ba961d0d956910f3dc71f0a0f73fdde06a3d6461e3828bb884e467c3b140bccd",
"img\/copy.png": "973d218d92d42ab2b2a9109270668d3dda5ce47e8c78d4354602b7c602f8aa935abf0efa0c7b82dc085be3850642ef611902ea43935db64ac8c200b852533efc",
"img\/copy.svg": "76b1bc478541085455a8d7ad5d115e6f8c405f9ac72f72711f927ed3d9360cd0b149398351f1064f17e1c693c367b53101dd864833eabeb8404310eca8b97806",
"js\/renewPassword.js": "9e8e7baf67588bd5cd21a147b775182831be040be55beaebf34f0ae604a3cce10534d33905487f23ff43e724514b73443e8c613234d72daaa30202acbc408d3a",
"js\/vendor\/ui-multiselect\/MIT-LICENSE": "b27f1e9fc12aa2f9fb5cf3db9f24141f158e82770e8a00fe0ac464478ce9803d2db7d3e5257cf6597adf6c2c3a2b28c0adce530f5a72698a754b0a0983bf8c1c",
"js\/vendor\/ui-multiselect\/src\/jquery.multiselect.js": "8a30cdb626fe10b5a93ad61bd2eeb39c0628ee1bdeb9fc7bb1761a1bb972c9768a23c6a24e613167ccd49b93a50688cefe22001daa9627e89a1055b1d56cf700",
"js\/wizard\/configModel.js": "e6bffe941992874a9898300eb043aa6bf8fb81845869ff4301a07553bf67590f3960be6dc2c63bcd071024a10c5ae8d7d9284b5db83374b9b3f486d2cb383760",
"js\/wizard\/controller.js": "831dc868fc1ed9cc890214c7d8a9537d8e20ccae56a1c2cc5a8177acfbf3aa569597f51ff72038adf2de917eb762f69a61b7e9d6bca2e135bf5c980cc23ac933",
"js\/wizard\/view.js": "ecddab25de652d1bbf359e1fc7b6a860742484d5498ecd8668f8c7969f5627187a7a426a9853830fb5723447584b6f72a80e03967c6a49224d8e0bc29a2f8a36",
"js\/wizard\/wizard.js": "80032cbe47052bee60f54fe48995c70e19d07b2c0164fc8cdc804201619fe159c1451aa8de3863eb25ce988a3aca4fed7a21dac2a9961f80a461c67f0d4643fb",
"js\/wizard\/wizardDetectorAvailableAttributes.js": "770526bdceda18fec8fe5f1b7b3ce871a1928264091864834b612afbeeb98d020e9f769ed5873c63709e41a50d2605055ff4e992770c8b2760bf1118a1c87de2",
"js\/wizard\/wizardDetectorBaseDN.js": "88e9c3fa81a98198f4865e9a5024e5b5b35540eb2fe9032e6d8e90e4bdaed06432be69e3087099db1301e09b0ef72e49dc28cdf7e979863282576ce3b61f006a",
"js\/wizard\/wizardDetectorClearGroupMappings.js": "b43b6bcf2f476206055a24f887247ae0e5615382fbc586223518ce8836fe899eb4fa5d3993c12b714a3adb8d4eeb7f77200dd4408344e0e629702c8b7fb7b910",
"js\/wizard\/wizardDetectorClearUserMappings.js": "7e49a02453d17edf4216ac4f8d1a20529db500fe64dee1aaf2e4502fe60de88510957212c2a8fe246e38ae27180d64c386358910ff2f3dc6b7486d82d66bc6cc",
"js\/wizard\/wizardDetectorEmailAttribute.js": "f6f3723aab647fa6a2f38a52a34a29ff1f89126698039b4090919486c60a69a6f0dd62fc7e5458d7a1991172f5b1a1afb5380b7e8ef09f293dad474f7684fa0c",
"js\/wizard\/wizardDetectorFeatureAbstract.js": "730b67df59068523c892f3148c55abc6408461b3c9b72976574c83866b11298368447cbc897d0237f4b5ce94052c1084d3cf2407d4843ada43af4799c206554e",
"js\/wizard\/wizardDetectorFilterGroup.js": "c2cee452b2a91a84d0fae2054648b5720ee4d863b7233190a3b6bb54f82499c0e2d7f08a134d467044920149b3c47f5a9e1dbca22292bdca0732c2199b53004f",
"js\/wizard\/wizardDetectorFilterLogin.js": "8b0c6b6b05bf2e4b4c94fbd5f5e75659c12a732ee0df51f3248660cdadbe630bd2e4cc54a03724c7befeb89e2c2b54fb2a3860d3fb338bc3f8f7bbcff4662a31",
"js\/wizard\/wizardDetectorFilterUser.js": "af7d0a80e34012152e6e7f9f0f0edbbdf36a364bc693800bd9791205d6c8fd809afac9cd5f8f965f96491c40bcb8e6a02162ad73b07a12b4809ddbb22cb06f4d",
"js\/wizard\/wizardDetectorGeneric.js": "cc4dc083ec3529c5316051be091367fd66a8e8b9499bcd491dc26f831bb8582219b7e9be6517e95a52872939855d118ed17c6dc376ed2c440ca5a91861c9a926",
"js\/wizard\/wizardDetectorGroupCount.js": "47fddf38c98ed7d165d034f9367370dea3b5b00f1c57c2bc57554a53a64c4010e80e813409c64409f04bbfacaa64d10a12ed2c686b06f9734fa4b754627cb221",
"js\/wizard\/wizardDetectorGroupObjectClasses.js": "b898927813e56fb6be073bd1b2307ce0d28d5ff96ec158ffc9b7b8c3ccc47e0be8dce2eb4d940dc1954eafb7af5c611a0fa0c456b1ea89ee755a56414b44538a",
"js\/wizard\/wizardDetectorGroupsForGroups.js": "af88cd6550dca7cb3aec7b15640de0e54d6b58ae9b6c3b9004951bc23ee57ecebedc93b2d423efc822a45aeea9b05290888565381e1e0c7969ade90d2ebbdc57",
"js\/wizard\/wizardDetectorGroupsForUsers.js": "848df2ea9ce6b2f5d5c9ea2ae488b5978fff6ad88e917a3a7b7de5c3ab6e58dd2c33cf2f945463df648ff7d4a9cc735520643a3dcc7c802a3340ae0f373bf722",
"js\/wizard\/wizardDetectorPort.js": "c59500df1898bace884ef067254efe4d62456687d75f2bd626c74545163845972d911c1a766aa980fd4c13be644b7f28ac0793c43cf6d5ed3d068c282c9f202d",
"js\/wizard\/wizardDetectorQueue.js": "55e826710e56d073fe68a3ec9865a2939384b78bf1e00e18291ee49ad5c9aa741bb12c7a24d59895d89be255b2a8c8a2b544403d9eaea5a2b14a12679dbdc587",
"js\/wizard\/wizardDetectorSimpleRequestAbstract.js": "7985a8dcae3d662477e30e4c4cd6b10768a0eadf2b29f0760c4e66658e0a44a30e18ec23b098b27d24c8d6f00ddf7558639886c4f82f1e2cd651a799992f69bc",
"js\/wizard\/wizardDetectorTestAbstract.js": "723ad0ca8d5c7279cf83d0cfa809cd9a141a5b015a2f23255bbca40e89c79aef8e5b7a4f4ba1fefa2155dd3f2815a6036be8dacc2a35082e91214252d713d22b",
"js\/wizard\/wizardDetectorTestBaseDN.js": "fdaad3843ce8767bfa9525359142c9e54636d629d45b9b7d082f69b791a3081a16e5c4939fe441bba2eef4b604c0072ac2319a090a82a7fa54362f829afb7a6f",
"js\/wizard\/wizardDetectorTestConfiguration.js": "27b50b7564e58478f1e7a1b1918db26231170bd6264b812ec6047c1e313d640914e3fad568d8aed2b2a01be317e9d315752d26f42b7d7662ac8526c288ded009",
"js\/wizard\/wizardDetectorTestLoginName.js": "002517d45aea4e7456ceac1c6add1f52b3a79df52af0ef0e1fffab84ce59f858d33334b33d7a4fda2b936883e8ac5986eca933b55e705f850e0ac06116a3420a",
"js\/wizard\/wizardDetectorUserCount.js": "ac37b9bd82046afca6211a9c8daa3cc5abe59010c9266ece0ef7b6343ed2ee6448b41669b2698f228f87d0abe41a6b9ac0a22a5bc279f9af8ba6de4aeea3a8fd",
"js\/wizard\/wizardDetectorUserDisplayNameAttribute.js": "3c5b50c881d61ae7f98a48bfa5ebd0de02435f3475f8c5dd5f3c2f8bf11ecb5a177efcf4759bd069ed896350cecf430b35730fa8163c1b3f39595021490e00b0",
"js\/wizard\/wizardDetectorUserGroupAssociation.js": "595578d2a2ce0f7ceaf3e702536d429b65a75419823f54c00bc10f4f92a32fe4513d0e53447798372f94bd416cacc2d2a1015eedb647e58af6fa49ec950b5fca",
"js\/wizard\/wizardDetectorUserObjectClasses.js": "33dc057794b5ff169a830ca735f09c86beda21b0d166f15f1870006c5bde25fdf2ca02ccf936a51400b2873d27da95039f227bcf63d3844d8b272fe75f726cd2",
"js\/wizard\/wizardFilterOnType.js": "44f8424bdff5d5af5b34d52ba8e719a7cef8331d49a414c326a6ece727210b3846d37867f7bc9846e7a4897529ccf95121a2106d19ca7c3f05b885252ba36a6c",
"js\/wizard\/wizardFilterOnTypeFactory.js": "e4a167d6b4c2db7630defe05b944a38d8ee4fd358cc9b5c206391e5fe4fe35237e08f3bb511138be16fc21a5fbce6d54b55c8ec9b03ccdd33fdee250f55b989f",
"js\/wizard\/wizardObject.js": "d76fce9ea1abd4618012113bb9eb92e0e35de8277895d7e45f5cb616eec2c634078fe3ce6a41dc3b4f46c64240d9e831b0ce48906fd10a7172c15a5ff9833d29",
"js\/wizard\/wizardTabAbstractFilter.js": "678ebdf4163aa0c41a7837e7640a5afb8cd6e64cc910b21e048a1bc7264d2b7614290881b8ff1286376de68ad75b7dd4a7dd6759165bf6a7db03eaae5b892b9c",
"js\/wizard\/wizardTabAdvanced.js": "b4fe79c3b16154f6369abec272d110043ba829640f9de5f372d03b0c0edba29f2f50a19efed5535c00fa696f470d975589f16e75ba2c4a36f36313ca02623feb",
"js\/wizard\/wizardTabElementary.js": "8c1cb7158b48e0478d1cb6e5d47119da5e7a47c0aa26637b30a95ca97cf9ef1e29cf37eb661c8ca7fa2a6fea06bfe57fbe606bd9aee8d900888330038cee19e9",
"js\/wizard\/wizardTabExpert.js": "d6f66796a952238548d4b3bff3ad5a0f5a96c5ff179aa3e6de686021f6a7034780e221058f5f7cb49da77a9b1c1d912dc8b3cfc73137351dc748d9c9c2143e8c",
"js\/wizard\/wizardTabGeneric.js": "0edfd91dda6b8d2a70383674764608d9f6e426fdf74eecd5f92e3942d63bc3ea5ee58f40161576780ba2ff4219f7f91dfa0a03282807df72e4128214f2fb68eb",
"js\/wizard\/wizardTabGroupFilter.js": "1d8577373d5f68cb49234155553f4f9af631604bd02b57c25416f500086170b7ac8a579c82e8ed4dd9bad46ae6ec2a6b258555458870c0438d814e96e5f96b37",
"js\/wizard\/wizardTabLoginFilter.js": "d6fca8c3b65177e3dfb62baee0c269c9ff95d961d76d7a73b667f3dc0f856d6024ccc24baf87c9a7aa7e63ccebe6de0ab3437ba9b0d71c2adacf1c95a785456a",
"js\/wizard\/wizardTabUserFilter.js": "7150fb8f4159b65080b03194a6b62111b28ae83013a5d7c0816eb93d3bd6762341beecee379129eda6656f6f00931c0a66b1dd5adae1b8ecdbb7e168acbc878b",
"l10n\/ach.js": "584616c60777f992280413b3849fd779c5f8e1b4da2f4cbd3864dc35842550e01076fad35a6f95ebed4f32436db05e70f613e95e676a83add0e36232b922a0f8",
"l10n\/ach.json": "f3711573f0f71802cb423dd9c506c602996a7fbaab151df96a39f5049ef4f15617fc771d71766cca8f22e50ce5c5319f4438add093fdd0a1b73c5344d8c34348",
"l10n\/ady.js": "2e1675519b2c15d726505516d09fdf613d56907e3bcd3fc31c06dabb13639ab436a0b95879dfa115e53996070264b9b4f2555ff31ba58f89d4082d76a5e5c2b2",
"l10n\/ady.json": "0229170d1834bb20c391c0a9fd4dfdb43d495f2b9489f5c46ac5a673acc15f474732c222e4e5c79aa6221ab1fcf0ce298ced0b1111cbdc7fc36198dad72ac8c6",
"l10n\/ak.js": "684c1f70d99dabf5d979146e9cfbfea53c084a1fefd9c6a0c554f5a791822a88782f10011ae52634ef3d563a070e870d108f30705a47dab9e9498b92660ecfd5",
"l10n\/ak.json": "fdedcbc0ac85c73ec9e5121f515df2b2a2a35a08c0bec811d2e4672b7e609a6a348f062675c245767be3be16e4b5e54699fae6b5af07ce2d09324bab24669277",
"l10n\/am_ET.js": "2e1675519b2c15d726505516d09fdf613d56907e3bcd3fc31c06dabb13639ab436a0b95879dfa115e53996070264b9b4f2555ff31ba58f89d4082d76a5e5c2b2",
"l10n\/am_ET.json": "0229170d1834bb20c391c0a9fd4dfdb43d495f2b9489f5c46ac5a673acc15f474732c222e4e5c79aa6221ab1fcf0ce298ced0b1111cbdc7fc36198dad72ac8c6",
"l10n\/ar.js": "3766ee97b8f7761bb733701cd7cbbc2cfaf93613e9710cc36cc2637b12c116ab7e7a856bfb8f007cd1008fe4866019f90f9252bc40dc79d052a4e9e013ffe44f",
"l10n\/ar.json": "3d19fed596895e76f024c546cb77bc313967551ef3b4a38011666d3ec3c8b63c181a08e7a2d1d136a78dfb5412b77e0d7dfbe7c94093e471025949e1b99329e4",
"l10n\/ast.js": "d4354d029f6220f41dccc74114e70d35ca61899b4ba4f906dc18d3ee131b38dbcef6907aab0b58784c01f8d72bdbea85f6a2ff351d05efc1b0d6fdf8a44143ec",
"l10n\/ast.json": "77de885eededac857a5f89612e348b040b64ea322c7bc31cfadb3b174a3b4ed00248488b339034399596079b8a9dbbd7a588ff8c5f502d67bee6700df77cac10",
"l10n\/az.js": "e3e2852fce6e2e87a0556f0370872eff673b7ea1483c0b483212bde0394a0ed8df4ca836de080d6a7e9f7778baf415a76ec03d4615ee2894d99407547d9c9d1e",
"l10n\/az.json": "14190932496abbc90e7ac934f0731e5b6b3d5982f27881a60a55136404cc97bfc6bb9e3528bd4cb7752545b14bab2b0b7e5a96d5eac7c8f5e9bf3633fe787d3c",
"l10n\/be.js": "5d6f40227af673a9289b7e2adddb328440fd3760481977281f7c1f2a8d04d4c4a8c75a7a843aa66f6aa8fa1153de4b40c7b8d781692d3036d4889b68ab34e26e",
"l10n\/be.json": "59c943178552b703fa989e3cc1c54a56205c0d8e1a1feb3cc4f1a88178eb289579814612f6bd884092d8540887dd1829e0cbd8c38f9557ca459f80cf7bdf5b56",
"l10n\/bg.js": "5ec1caff4f871b3ce35494ff9666e08fbe8a64ee8d40a64328d70138d2ff3ecaa53ac921b1a2852ab60e130afee9fbff73613ca106541488a6f5a993298df454",
"l10n\/bg.json": "e89363f278e635db7c84b7ee5b3407ddb4d4b6cc8e304c2fe346e713f75ce1ae8dc5e4bcc2d9a5f735bfdfe83784a681dcdd51f477778e1ee3279401e64d6870",
"l10n\/bn_BD.js": "b494e45b53a4c475ff98cdcb6f82a4b4fddf4b87443743baa8ccbb8cf0b4fa7992189a881aca90485e9ddfb3bfae6af60db6bbd1808d06e72bc91806039707e9",
"l10n\/bn_BD.json": "150e514eae5ff7dfc65366a9046da727552595ce9a0096d9a2543ed3505ff0ab07014e64354cbea5321b07be0bd4dd1074ae72810e52cfb9b22c76702c9de76f",
"l10n\/bs.js": "35af64cd9ec04e8ccd830539bd812534879505314a1c717752bae305f7280fded2e4cb3e91a28b5209436de780eb040d48fe443bd1427d0aae8b14b97f335123",
"l10n\/bs.json": "b452d8d5e32b4be8a224061d1a10c090bb6360f7a85ab370195d999cd4bd57cb1b3caafbdf2e0b78cdc4af4c0bd191a988bad41d7d637dfa762a8b4755d3226c",
"l10n\/ca.js": "66654b48426d909dfbd0cdb4abe8e3b0e26f1765e31f2a519a95f3221df7a8f3f29d44e895ebdd14a3bbb50c28100a1eb912fbb6ba9b9bd28d73b02927dabd08",
"l10n\/ca.json": "a045a578528cde0c02c482d1753af7397d0c9ac7bf09559db6274ed2fecbd3f307c965a40edc7d9c80bed736313525bf1144fb24e6a80489a011abef0453bcc9",
"l10n\/cs.js": "af7c81cbed24cc83949e4cf7d430af8d2f307133c343485c36c7ca6ec5685d6e2da31c78431a07e70f914521a04623d88332cdc4640e4c6c9a15e3559804494e",
"l10n\/cs.json": "84e7f97d79fd3766c13ec7a72ada86c9fbaae4e8990d8837b49d008bdf7ca079d5862e729cb63d83908d223b2de3a36f2996d10c35a3a1ee5d82bcc794824720",
"l10n\/cy_GB.js": "44b83608ff038ae1af4991fff868f747288204437c28162de4785f78891815f6fadbba30973b83755a7c30616dd595bfe5d0bc1e7538120751e470ff24c4f1f4",
"l10n\/cy_GB.json": "9d583b7df484bd674ad4c76a3706588e56d252fe26ee40a757a01dc2a80960a53f366755be605441678d99487b4bda167e711520fe09482fede22a2798f1d9b1",
"l10n\/da.js": "c8972b950d2cc87cdcda21ce8367bbfaf7e7de0dae887b1456391b4ce62e054f8dd8ed55e37e6d0b6bfb81456787ea4453e071f525820b40afde67a8abfcdf2c",
"l10n\/da.json": "e94187d98f352eeb75f7ce6b7507a071a5be22031a75fa13777ed2a6c0458bea1bba4d9e3060c18205fc91c22d6649a48941f42eb7e5d6b11017220f24ef3f1b",
"l10n\/de.js": "0cc3bd1a8631b3bc352bfbff09f5e4df6c92c373b65f4b8fec94c7dfce22d0a5c13893952a4d4fd393770b7963c87d34f7801cafaf4bde17cf5c6c7582b36d25",
"l10n\/de.json": "54819001bea980a2e6b10ef2bdb49df69b9a44a62649e5df38ee508e7cb48e39fc49cf427a644ce401f0baef97c0fd320b84b5d71fc45afca2d4908177301bdd",
"l10n\/de_DE.js": "43c4e56bed398095a8937ffe7e13f8850e067e927aff2cd0503bdee155b7486b9ae5a069922e05bc40048eb2366864d815134b14d1bb54da36d5f8f988521c3b",
"l10n\/de_DE.json": "2f978e8cd8e355293f5bf33797b551841e913a206b7e5be5c27b929f3e9e4a88eb0e7ab040f917e961262c45f9c0e8e8770e157d6b7b00196afc3bc8fff9f5c0",
"l10n\/el.js": "0e8face75aedbec06b35c854f8b96b1c7cbcd1f7bfb5304243fe470c8e1f2ae6fd69baf9b224f216374b2ebcef46300fbaa6acdc1c9cdd8b5bade665f77a0627",
"l10n\/el.json": "75d638cbb72419dd53e165b9c2f1a10468985897c87a7568639662c4b20d1e5f0db8bf1d6ab69a57e599ba8dcc06f214d52d4f7ae612590c93f113aea4f72523",
"l10n\/en_GB.js": "6d0fea013ee3cdd2582ee7f2f4a2cb8e1b73a5db995348fb0fb687c61b46c8798cc01d4007fbee944653a0c2d003c30dc1e608f8a80ce3580a30cae07ab57519",
"l10n\/en_GB.json": "fa11401a4099eff1d809bf89313335713441dc78d0478b67441204c1f2f7a18639a4bf3546c3da6d86c0969ed9d9b5223d705fda6715992e6d9942c93fa12808",
"l10n\/eo.js": "4769be5b1e7e1d688db0ce7688a94735e4e02cf44066a54e4c1a4dbff986777c3589bdf6a781746cbee1023d73a752b8630a27ae1bae10a394ddaca537d319c5",
"l10n\/eo.json": "036d8e3864ba0697427c16671eb600cb64c46e5262d35af89e6b6dd97205e0a69d97f5f31cad9c97231c9cb35d25ba5c863425c0875680a66d54f434681c80c5",
"l10n\/es.js": "4cd26c16a394e19c48585831c98d6cd71f60072c9faf3ab3cbc5cc4537c5f3193e18e23f2b89e16c2a8981bbcb8838822a232e079477e71813c1233ac5638d95",
"l10n\/es.json": "1b30b7d7f77c949c1190d01b118e2b9629a1e1caa771ecd32e4e459c381927fd7957f214126785c0e20d50f9b3145afbc3e603c2dc97d4e465732ab75c01285e",
"l10n\/es_419.js": "3701b28c2ca58a1b3fb26a66ee79f61724aafcab57ff316d821b4ff8284a95241a5bd0893c6740b7a86a117e1e9955feda6e9c2b0939eced69e98a11a0cf5572",
"l10n\/es_419.json": "2fa62543a2b6c49f8c39acf76f64691932b3d91bbf061e6d2abb7a7abf74d7732cf5533a14de1fc1f3701c404b26d685ea94627c5ba39d6aa0c008f116591a98",
"l10n\/es_AR.js": "53b4adc6d36ffc488843808f65f629deb7772b8f536c77894a99c5a00a69ab64c56efc3997277047bd03ca4a0adafbdcf4c089c03a7885be324f4d13391a50fe",
"l10n\/es_AR.json": "023c6d580aa5e387143e180f7fcb822479ad9c0f07ab18596b8f2dd8727e4981b8044975406fddfbc5a674ff5069a492d797e45a57cf9d1fbc58db41743bf52d",
"l10n\/es_CL.js": "604d26d5c206bac49dfa811469d932f11f067bf35ae2ecac93108a2a8984034c8f9edab1d5c23cadeacbcea94611af1d6fff20ab6d32f68b145d779e41135e9f",
"l10n\/es_CL.json": "616f996913d04c23573e459db11df15525771befba24c9861b58f74fc802f7519db9c0bc9664593314474b9e23804dcdd58c15ddbb005b5ca796f4317cf32140",
"l10n\/es_CO.js": "604d26d5c206bac49dfa811469d932f11f067bf35ae2ecac93108a2a8984034c8f9edab1d5c23cadeacbcea94611af1d6fff20ab6d32f68b145d779e41135e9f",
"l10n\/es_CO.json": "616f996913d04c23573e459db11df15525771befba24c9861b58f74fc802f7519db9c0bc9664593314474b9e23804dcdd58c15ddbb005b5ca796f4317cf32140",
"l10n\/es_CR.js": "604d26d5c206bac49dfa811469d932f11f067bf35ae2ecac93108a2a8984034c8f9edab1d5c23cadeacbcea94611af1d6fff20ab6d32f68b145d779e41135e9f",
"l10n\/es_CR.json": "616f996913d04c23573e459db11df15525771befba24c9861b58f74fc802f7519db9c0bc9664593314474b9e23804dcdd58c15ddbb005b5ca796f4317cf32140",
"l10n\/es_DO.js": "604d26d5c206bac49dfa811469d932f11f067bf35ae2ecac93108a2a8984034c8f9edab1d5c23cadeacbcea94611af1d6fff20ab6d32f68b145d779e41135e9f",
"l10n\/es_DO.json": "616f996913d04c23573e459db11df15525771befba24c9861b58f74fc802f7519db9c0bc9664593314474b9e23804dcdd58c15ddbb005b5ca796f4317cf32140",
"l10n\/es_EC.js": "a3f9916346ce0c834e7f68b30f9b901c5faf98977f7aaa6a047080fd406a14d11651e771cc73ee8f553192c5de1352ca77363da488f89410d7b9943233f2e5de",
"l10n\/es_EC.json": "16b07e6eb0af567dfc783e672066c977ca5d50b55243b761f4b0751a3b58b4404a2c10595b969ffa948c33137eabb9ce17ce910c90015b9c0fdba800715e20bb",
"l10n\/es_GT.js": "604d26d5c206bac49dfa811469d932f11f067bf35ae2ecac93108a2a8984034c8f9edab1d5c23cadeacbcea94611af1d6fff20ab6d32f68b145d779e41135e9f",
"l10n\/es_GT.json": "616f996913d04c23573e459db11df15525771befba24c9861b58f74fc802f7519db9c0bc9664593314474b9e23804dcdd58c15ddbb005b5ca796f4317cf32140",
"l10n\/es_HN.js": "2c59eb14b89fd5b7298908e84c24c1a79a5b97ab61a1e4bb5df7074acaf20164f16546cdc08e295630e49b9715b8fbafd2896c7f279ec5e0d5d7b564f4bc2996",
"l10n\/es_HN.json": "d97fa521e388299f5aad5276e8a3db04e892e6a052c93bf53f4e87ffba39c3eb86e257e0aba973ecff3f1337e82345b5eb3ab65927d4e5e299160921837e5e9b",
"l10n\/es_MX.js": "5299e6089fa4b95dfce20504e5a8d9af15375d629734b274d97c7dc9f7d886d0c5a8974e098573e38706ef125260a766009dc14766cb9bc628e02e185ea73c42",
"l10n\/es_MX.json": "63e85a3f6ddfabda02f54a23c9fa1690b89d0f3fe044377598c80c538860b85bb490d9b900a15f844a46f30ef001fcbbd184500018a6d4d6720e15f81c22b5ae",
"l10n\/es_NI.js": "2c59eb14b89fd5b7298908e84c24c1a79a5b97ab61a1e4bb5df7074acaf20164f16546cdc08e295630e49b9715b8fbafd2896c7f279ec5e0d5d7b564f4bc2996",
"l10n\/es_NI.json": "d97fa521e388299f5aad5276e8a3db04e892e6a052c93bf53f4e87ffba39c3eb86e257e0aba973ecff3f1337e82345b5eb3ab65927d4e5e299160921837e5e9b",
"l10n\/es_PA.js": "2c59eb14b89fd5b7298908e84c24c1a79a5b97ab61a1e4bb5df7074acaf20164f16546cdc08e295630e49b9715b8fbafd2896c7f279ec5e0d5d7b564f4bc2996",
"l10n\/es_PA.json": "d97fa521e388299f5aad5276e8a3db04e892e6a052c93bf53f4e87ffba39c3eb86e257e0aba973ecff3f1337e82345b5eb3ab65927d4e5e299160921837e5e9b",
"l10n\/es_PE.js": "2c59eb14b89fd5b7298908e84c24c1a79a5b97ab61a1e4bb5df7074acaf20164f16546cdc08e295630e49b9715b8fbafd2896c7f279ec5e0d5d7b564f4bc2996",
"l10n\/es_PE.json": "d97fa521e388299f5aad5276e8a3db04e892e6a052c93bf53f4e87ffba39c3eb86e257e0aba973ecff3f1337e82345b5eb3ab65927d4e5e299160921837e5e9b",
"l10n\/es_PR.js": "2c59eb14b89fd5b7298908e84c24c1a79a5b97ab61a1e4bb5df7074acaf20164f16546cdc08e295630e49b9715b8fbafd2896c7f279ec5e0d5d7b564f4bc2996",
"l10n\/es_PR.json": "d97fa521e388299f5aad5276e8a3db04e892e6a052c93bf53f4e87ffba39c3eb86e257e0aba973ecff3f1337e82345b5eb3ab65927d4e5e299160921837e5e9b",
"l10n\/es_PY.js": "2c59eb14b89fd5b7298908e84c24c1a79a5b97ab61a1e4bb5df7074acaf20164f16546cdc08e295630e49b9715b8fbafd2896c7f279ec5e0d5d7b564f4bc2996",
"l10n\/es_PY.json": "d97fa521e388299f5aad5276e8a3db04e892e6a052c93bf53f4e87ffba39c3eb86e257e0aba973ecff3f1337e82345b5eb3ab65927d4e5e299160921837e5e9b",
"l10n\/es_SV.js": "604d26d5c206bac49dfa811469d932f11f067bf35ae2ecac93108a2a8984034c8f9edab1d5c23cadeacbcea94611af1d6fff20ab6d32f68b145d779e41135e9f",
"l10n\/es_SV.json": "616f996913d04c23573e459db11df15525771befba24c9861b58f74fc802f7519db9c0bc9664593314474b9e23804dcdd58c15ddbb005b5ca796f4317cf32140",
"l10n\/es_UY.js": "2c59eb14b89fd5b7298908e84c24c1a79a5b97ab61a1e4bb5df7074acaf20164f16546cdc08e295630e49b9715b8fbafd2896c7f279ec5e0d5d7b564f4bc2996",
"l10n\/es_UY.json": "d97fa521e388299f5aad5276e8a3db04e892e6a052c93bf53f4e87ffba39c3eb86e257e0aba973ecff3f1337e82345b5eb3ab65927d4e5e299160921837e5e9b",
"l10n\/et_EE.js": "0f969c2cc923a571cfe5916a5e70c308970b0ffd353eb514ac46b2d094e8ce42fe04d979318c798474a17c6da2e458afd8bd8e748d438420aec291158080277c",
"l10n\/et_EE.json": "de6f84e511207145776934a7fbf236e6e9ca5b35e958db56e855e454aabc602a7b9dfea245acb750a09cc52375b713823cb9af594867decb2556bf6312335113",
"l10n\/eu.js": "70d185e068a8f7f102b4ffdb9754e2b38f8d890f9c452c7c01d3e420fb5885df64af0e039a33e0bfdc38688fee25bba5f83bb701a7249a360ecb0f19d56f41b1",
"l10n\/eu.json": "fc43068c6370d0e176551d4162d941c6f4ae0e6d2e6b4f55646b284fa3667655a917afc62c4f101ceb50cefba5801572e9c60debd33b1ba01c82c9bdc6359c8a",
"l10n\/fa.js": "3b9bcb03857e253ccbdbc05796f9e3dec06e3f1d65aeebeed963a9cb65d83faab82277ae7f72e8ba7fd68af8e06974c8aa111a2720db70b346aef864f663a142",
"l10n\/fa.json": "9a50878ebdc045c43967763025247a5e373e6273ee32e8540e773d8a293d4c58c8b290b9a8940964aced0e02cd64a72477487d48ef7ec6b9ed7f3255934a3544",
"l10n\/fr.js": "ba794b91c0e8e725d0ea8b7f67ed81683b400e3a1ffb3212128291015baa611ae968beb3cbaf4ee8a4e687aadef7784ce9f4b98f1cfbd401f3dbaec78e70c079",
"l10n\/fr.json": "aedac08e63aecb31f4e436ddeec8d2609df756e0cbb6096c7882dea8a3b2318704dc9f0cf6d1203f79421bafa535cbdfe32bb046b4d213fc68f8dfa27a09a8ab",
"l10n\/fy_NL.js": "2e1675519b2c15d726505516d09fdf613d56907e3bcd3fc31c06dabb13639ab436a0b95879dfa115e53996070264b9b4f2555ff31ba58f89d4082d76a5e5c2b2",
"l10n\/fy_NL.json": "0229170d1834bb20c391c0a9fd4dfdb43d495f2b9489f5c46ac5a673acc15f474732c222e4e5c79aa6221ab1fcf0ce298ced0b1111cbdc7fc36198dad72ac8c6",
"l10n\/gl.js": "5ecd0a26546dbb865810da5790a81672db0e74060a215f5ec92e2ecd2859533def916a6bf1ee71443a494304d02d587280f750a284edb0ffc5d4f4e9ad93c372",
"l10n\/gl.json": "9fd7d9585de44703be2936a6af287b45a023df60d8cec1a5f6ef655d179c23caa078d724559a5fd3a68511e0468974cea61077527185dae5907e7d9e82ab034a",
"l10n\/gu.js": "2e1675519b2c15d726505516d09fdf613d56907e3bcd3fc31c06dabb13639ab436a0b95879dfa115e53996070264b9b4f2555ff31ba58f89d4082d76a5e5c2b2",
"l10n\/gu.json": "0229170d1834bb20c391c0a9fd4dfdb43d495f2b9489f5c46ac5a673acc15f474732c222e4e5c79aa6221ab1fcf0ce298ced0b1111cbdc7fc36198dad72ac8c6",
"l10n\/he.js": "96a66b856bd5412d0665c0d999e7c26ead9ea73033300d9073a83d72cd6a2255529621427c82163ad0aa2728cbd302c5efb554304ac60cb58fc65e23e691aabb",
"l10n\/he.json": "00707ea1c0055b6e672c0c046e6be506f4afbc7728caadf04e15a713790284f2fb69cccccae3db0ca51af3fa3adcc220351cdae0ffa12679f2474d38ffc45a2e",
"l10n\/hr.js": "b6695f489af1ffc31a02a16ce9cbd9851bd9c048891a74fd4fe64afe51e0bb5d7cb31120582b40baebfed541f569c752cc6e4babe2fec6bd54ea986e05f8f517",
"l10n\/hr.json": "dee9e9816672cb69de126817da0ee8df8f8fbeb73823c2a68c90214f75318eafbe1acd2a47e40275fb1c6b4ae981878962b90edbe8117c3c16a385e97ab5991f",
"l10n\/hu.js": "0a12ea98cab836390e2478807f79da839f9ed7d1eb957908a5b7b1b07eca4d6db160006bcfb4c2b7e07452b056d3f51382afd3ba0c79df20bf7b1c24896a8c03",
"l10n\/hu.json": "c8435f633825dfcecf7dd34517a890ada855448e924b6e5b687960d3f290b8286792b0c5edbb6ad0cd730585c60a70dce4cea9e1fc58b56866a466f57bc73265",
"l10n\/hy.js": "28be9adaa7b7dd2164c563f9aab7b744a3ad6b57f05837ed8f847e8e9d7f9181fd0d06461a9cc6a26877bb605e5241041475ecd733082d775dfe45aa385ed29b",
"l10n\/hy.json": "804c07cc49b22c1deb07890fd2036b371edbe4a0751849f185c3fde9cf01c6ec8998e7ee3d9ea7ce0892621d0161bbcd5aae85b5e287ac26145858c58e0c468a",
"l10n\/ia.js": "488245a1d513c7f2bc563d5c67b0db4f5ab7ba88cb67964fb513648c2e100a2581f95ae4c9eb2bd143d470d65c962eb15e0a3775dfe212edf258aaa49efacd37",
"l10n\/ia.json": "618133a3b6d8df8e9993eae72ff07405b1639f25754708958fb43ddd9a36a4c0868fdc539b3e2c41b2b9fac5cf187279a9e6d21fe7461ed1f39f7b21a98d89c0",
"l10n\/id.js": "a63aa09cfcfded81859c79433201a9cdf7bfda561cf5132705831b36eca0f1a161f5830a1148a5c74c423d97115a3ffd6fc3e7508a9ee378aec4cca54231c80f",
"l10n\/id.json": "fd411452da45d08accc1e80d5fe358ccc238ed90213cbbee77098fcb3c94cf2ce2352b95257091644558ceaeebee4c95aeda0f381476436f7c8e4d358ad517fe",
"l10n\/io.js": "2e1675519b2c15d726505516d09fdf613d56907e3bcd3fc31c06dabb13639ab436a0b95879dfa115e53996070264b9b4f2555ff31ba58f89d4082d76a5e5c2b2",
"l10n\/io.json": "0229170d1834bb20c391c0a9fd4dfdb43d495f2b9489f5c46ac5a673acc15f474732c222e4e5c79aa6221ab1fcf0ce298ced0b1111cbdc7fc36198dad72ac8c6",
"l10n\/is.js": "e1f4e1f29a98f3b980ff214f335c0da75fe156a4671e7d8cf514aa60ac30da3aa2fca233ab319a15bdb0e3e2ffcf11f235990b41a9306ca498d5e2bad0a62e14",
"l10n\/is.json": "6a07c2e1ccd07a22f06582853e1612313beaa7f9e364d8d54af6ac3bbc955e960b9469227f00e8d823deea148d5a500a93f7e90a7bd3ef6d5bf4f50e72991285",
"l10n\/it.js": "179a9866d3981b99c45f864a2369c25cdaa91ee86edb0490bcaf539617a4d6a4c5062c46d8f0ac2490b375b3969a783b535b8feec05c67ae333a35beed48053e",
"l10n\/it.json": "9caa7325f6d417acf98d4267f87e2f904c03e7c000730e4f2f6349c4a5f97aa966b31188a3198d53fa9f8cdc895a354dc49f18f1578e0161ab95a6c6e7863ef1",
"l10n\/ja.js": "f428956b7c3bbf9a836e9c2778a94b7ac3dbe9689e7ddca5a0890441115458f0ebd219fe5039a429f5e78d65ac6980f99fc7c4b248a0370fc673a197d3b7f30d",
"l10n\/ja.json": "e8e132ac2946cc6685ddf819b63522a146d78ecfee42962c1b6fcb3e885577cfb5158fdc7015c7e0eb50e05ddfdd15a5464e99cc69836db625659a93486d3925",
"l10n\/ka.js": "8ccd7ae9b281da501254474d38729ee3705373cecdb7c1d2de0fac00b8fb38e324f3fcffaf0690948c386616ee420fcd32217b03803a8bf27a5e2321b393cd61",
"l10n\/ka.json": "690d0faf5a95377f0b7677c074dae501c368020c741927b0e3f66c10dddf44d9b25a869a07feaa361202b84a85195f4243df20c9b87295e628452ccf3c638f77",
"l10n\/ka_GE.js": "c738b0a9c85fcedca14b450d33806d29f7e11f5f952ff64a77930307a4b60671592de1c7b74cfe7317559aa558635e5af8cd7cd02533f77cd351d3308d39b562",
"l10n\/ka_GE.json": "c9babbd22037dec0f4234847899b98da6b8c801ddfb2cdb2da90d88d251f70bbeed9b168253186bf7bdcadf6dd41d736d4415953b6fab44837522a7609a4f332",
"l10n\/km.js": "557c1bf0bd7219d7de10270639e674884d1ad088ddbf1d69a149e983b31588285dfac7ef1bbcc345d0093a01b1fedd2bae61bd99a2a407060f6d2b718adca2c2",
"l10n\/km.json": "0c4181d193c2900bc6cd2c11ac8b3550fafea4b9d9771bcead54cc31fb7e9686e890ad6c1cb9013f3b46a273669b5fb79b66472a89735efbb6599ff48c347e09",
"l10n\/kn.js": "8ea32b354ad6fafa8163c4e0fd71535d00da8f5e1a9e043c7a1aac4694581a4013b75e6e6aec3c68f365073f82096ba2e1690c342647dfaca56de30d1e515074",
"l10n\/kn.json": "095e1dc0efd11fc03456fcbdcddb933ab2d35a34f6e80b6398106b68ca46545c23fda045c7c70a1ef5882b48f17fae5936253ae81fdb39af89e7c2035a985700",
"l10n\/ko.js": "37930b2dd68978a902bb72b51c517d0122a7bb5cedc7f9ae3ea5ede415fe2e4145d54cd9aaf00e9bc51a859b18f041d315e2760296dd286df5c82e52d92d3b81",
"l10n\/ko.json": "50a0c9d345c16ecafe10e3014ab8dfaa32a8fa5509cc307d336939e37d4370a6c35dc3c7cba6cd357b0ccfac46097c88c583075b5620b354b17cc3abce1c0edd",
"l10n\/lb.js": "75cf77133674b06ade17f149ec45e56d8a8545df01d4a796a0b34a8f2d0302c97437d4e5bcb4b70626aa520cad2a11cc25c37848da80bef9d64489c236952c08",
"l10n\/lb.json": "1a907088abe0a783f2eb4dfafbf6ea0ef51ae606fe2fde9cbfa52b409db859fbddb35d45afeaf16260367dd59978fee5ba76c76bd463b5a3f535131fbb161dd3",
"l10n\/lo.js": "71e16eb185207be77e8efa486734ae0f4c5e639cdbdd799d9a0f1c59e966d0c0877c10f872a99a4d0489a2b32ffc76efdd09629f6b587f57e5d18582392b956f",
"l10n\/lo.json": "8feb98b74cc4e22fc60b147fbfe34148b407e37ea50e74cc8b205226a3db47d592ffb1125eced07fbebe9078f961f85df3ff6c33744082a7cc9a59db9ad9269b",
"l10n\/lt_LT.js": "967226242f64a8a9a4cf0f844d15642c1a782ab81aafc9b00086cb337811bc98eccbdb8905656fdd3f0ac5177e6cdbb7e424568db4af9e1165db0bd4c44e7702",
"l10n\/lt_LT.json": "714c386ed9e47755e07d6e2ead5b667a4f7146df94b24454df85005629c6bb19b9225d547617fb52d5454cb835b324936def1c5c72b74cc956f639933ebcfb1b",
"l10n\/lv.js": "68672a6e84f4071dceaf51acfbf6c2e99fa60349355bfbeb713807233ab00008624adcd1e9e2700b36c4f799dbcc179a53e3e6ee886b3a44ef2c00386764f70e",
"l10n\/lv.json": "4c3cb999dac7fb84c7f1e9b1ba55a56dfdf5979c95582c318f22ad70f104cea0ca6592c74e3c328fcc614650444f1f707ae52796933890ff8c3573342c98bb30",
"l10n\/mg.js": "584616c60777f992280413b3849fd779c5f8e1b4da2f4cbd3864dc35842550e01076fad35a6f95ebed4f32436db05e70f613e95e676a83add0e36232b922a0f8",
"l10n\/mg.json": "f3711573f0f71802cb423dd9c506c602996a7fbaab151df96a39f5049ef4f15617fc771d71766cca8f22e50ce5c5319f4438add093fdd0a1b73c5344d8c34348",
"l10n\/mk.js": "e1de68cd6ab6ee18ca877c29472b3d51670e5d531a92f8c6c1f6b586a4dd7b275a609edf766a8bdf1ea1ba26f15d26b29e3e6c7fd701a6c04b43fbdf4ff0de07",
"l10n\/mk.json": "c6142a36b4d70caf5775a80e9bb11b9f2f8afe6d71879f96fea1712e80e6cfc9c2df993b2a1c6a0f00971e8b022e4157335ad5d298d0d0b09a4dc9e5d114a069",
"l10n\/ml.js": "2e1675519b2c15d726505516d09fdf613d56907e3bcd3fc31c06dabb13639ab436a0b95879dfa115e53996070264b9b4f2555ff31ba58f89d4082d76a5e5c2b2",
"l10n\/ml.json": "0229170d1834bb20c391c0a9fd4dfdb43d495f2b9489f5c46ac5a673acc15f474732c222e4e5c79aa6221ab1fcf0ce298ced0b1111cbdc7fc36198dad72ac8c6",
"l10n\/mn.js": "0e2c26e565a2ae53ede2163b5bbc8972a5f1064f98d17acab0fa68238289c342026166679a2a1019b643006f2c8daae22a4f27ffed82dfd74bcd65a54fcf4e55",
"l10n\/mn.json": "180297b8d0dfb8cabbaf576adfe452df26fee9fca88f33f63a1af964cee633ab6170ef33346f91991b42930603a44b3b6a75bf611c0d0a44c6948ad77409a60c",
"l10n\/mr.js": "2e1675519b2c15d726505516d09fdf613d56907e3bcd3fc31c06dabb13639ab436a0b95879dfa115e53996070264b9b4f2555ff31ba58f89d4082d76a5e5c2b2",
"l10n\/mr.json": "0229170d1834bb20c391c0a9fd4dfdb43d495f2b9489f5c46ac5a673acc15f474732c222e4e5c79aa6221ab1fcf0ce298ced0b1111cbdc7fc36198dad72ac8c6",
"l10n\/ms_MY.js": "7733fc4a26e810877d77382d7ebeae209c8f1aa5f72f5528345f9daee2b7cbfa7f2e930a5a5f5a1ee8bf024fe3ce2556313cfd53a2788ae5553a4ae9ae51288f",
"l10n\/ms_MY.json": "3496e34b48fb8957469211e293f49cccf6301fd77206b8febf0873e009d1bd32ff512fc10d9ccaf8e16691965226788be7e1f1726e33f84cde735431332bf5e7",
"l10n\/mt_MT.js": "9e61dfcffa861ae96f054fe045d24544ad45ead40a56e25510d1442c254b89558b27f687f1c1dcd47e6e5e246446c8cc18b2e95401a4641f5e1a566c438ab7db",
"l10n\/mt_MT.json": "416cc992378a978622e5be64c58e6574a0afd3b667f43b878511070f0d30e99c98796438a51b2262ff3d711d6c058f16f917e43e5629d9f825807abb04896109",
"l10n\/nb.js": "e3139cf3486e339b286fbabe28acd6c9724dcb1c0da1734a40a2e6d1376a2bf7d34246c410f2d77c5e4e0a82b52162108aa4f2b0391907dcca018d55ca5c1052",
"l10n\/nb.json": "045e0933b24b4348c9997c355be1067665cea1d15ca3d0fd00ed6603d8d4e9a10d78201fb8a3b0d2b6bbdc1657617bc4e899025172f1723ebd3f293bd1f8df2c",
"l10n\/nl.js": "1522016fff961b14de389335da30a59523514b0794cc7ee431f7aaab0bff8b04284c6a91de3c49afa3c81b0eaa54713e0acf3e051791b34ae21618be827afe99",
"l10n\/nl.json": "5a91fef25334b222b0c463f2e64628714de682a814e771d8833b4bf906d753f32b05de77c6f8320557e02f2e9cbf5359273a532c239ac9a035d25d1aa563151d",
"l10n\/nn_NO.js": "e6b991393137b4009cee5b5c6d4f98d992a1d1b3ba0293fe2ebaedc1f5c0bcf0f81bee58414926968931f1fd1180afb4166c32c8a389ddc217801f3223270db3",
"l10n\/nn_NO.json": "d4d39a7c9fde982c00d82b19380a88d27ddc556e812a2f1cc2b79272d0015d0a00e0fddce7acc875ef395ab1ca7a6b30d041d517e5ef96d05bf4de687b232697",
"l10n\/nqo.js": "71e16eb185207be77e8efa486734ae0f4c5e639cdbdd799d9a0f1c59e966d0c0877c10f872a99a4d0489a2b32ffc76efdd09629f6b587f57e5d18582392b956f",
"l10n\/nqo.json": "8feb98b74cc4e22fc60b147fbfe34148b407e37ea50e74cc8b205226a3db47d592ffb1125eced07fbebe9078f961f85df3ff6c33744082a7cc9a59db9ad9269b",
"l10n\/oc.js": "b5fb2a9e49b2eba4db7004143f53eb07dabb551aa7ba540bcf842825903a968945cba7140a643b76b6156c4e9a2055c995675e3103a0d7995b7a79f0ac6884ec",
"l10n\/oc.json": "c1ca15652799fa8c90aedd61811283edc658967141a342551d7851e184ba1d879bd400b9b7c2ee5ad9e24d1ddc5982bb20e4eec8d9365b1814f86cb9aa3911a3",
"l10n\/pl.js": "f025ceaeeed29b8e0cf2e346924e204f5018ecdf477fdb682de3eb249be65be998ad2465f9e955767513b802396696c27634e2a2e8c378525523d9c3db707e64",
"l10n\/pl.json": "f4ca40271cd47a0e8b1b5e2f7774c536aae137f13885c3cbcab57d8528b2b59d331ecac2a200e005ff2ff0b577ccdf8061871b43fa31c950687b976aedc64039",
"l10n\/pt_BR.js": "f8d23990feef5c52ece302943415c4976246ed3442b12a0f2f4c10e6b804b79c4a380a6fcdb44b36c86d11cb1bf33168d4d44442d4a0306c1a41b9670de0bb21",
"l10n\/pt_BR.json": "7cb7d741f4ad35bdf0e0c78e9474faf3836275760896c277d03625d00964b72a7d956800f29234f59b6eccb4601180bb06bed0911045c8db3c6860c513464a30",
"l10n\/pt_PT.js": "02e4228e0f6f6d2c9546197d9158a82a5ab66beb6b67842a12cf83e2bf2fe5afad6999db828c477fb5be2d049116365e13fea2609abbf470e7b105c1ee4709ae",
"l10n\/pt_PT.json": "0a096f3d4732052516c8962474d8d7c1d1ac0e25b93fced2281434d0ec618bb9a8a375e0e7dfaa2983709bb6d822e158c3917221fd377e69a81a0da955162dad",
"l10n\/ro.js": "e6b31a24956f789683ba62901e4d01aca977eb53ea0dff0fd8c3f2af1ae976d3098386c98b3dd452f44ce3f481d537968f5dc49a53cd385b1eefb96ac5193e0e",
"l10n\/ro.json": "815dcec36d6eec5e08b39a30c82d8638aa486ae75d056b185f62c7e8c776225ff0face03fe25d5999588afe4f461b1496d6c51b8e5c77948323db1e27171f56d",
"l10n\/ru.js": "5c84ce7243ad8d2ff66aeac21c20fe5744eaa73922825a71c94f7786d8dc8bdf1e7c063c96b892252f8739064547b95d9c5a897e3735f9f17911ec36fbf8a1f9",
"l10n\/ru.json": "3650f380705d3e1077d3307ef4b0144f4b471e1c72f2b30e3a751ab04abd7f2eef8fc79fd10bcf1454bde8eb9ae9f9a18f292b6b13cd14b0c440e2cb724d7b22",
"l10n\/sc.js": "3d9dd27a23197617d25bd09e38bdb36ab8ac20f3eddf04814c607ef60e8acf9f0beab6a78b22fa3c49b83b10369d76c201e002d4775f404b013aca020e82af67",
"l10n\/sc.json": "46689495fa765ab0131bb75e2ef499e97ae3d90747e5a9d196f35e5c5dec31c93637b7348c74d0dee65f5d586d9d014e507c43f92d2e495ed6209e5dcfbf905e",
"l10n\/sk.js": "b41070a5a94c5a2a5f042608a716211c81b689ae77970604ab8fc7ed7c48dc42c977b0a962d3492d7cfd20243ff494ea6a86186a55c0f8e163035445201b055a",
"l10n\/sk.json": "6090e3873e5862a820668d8da745cbadf7ce488127fcd4be3f870d66266e31bdf419ff563d4cdd20f386bf52dc182f4b10db370f05becb0eab6aee7c7f26c13a",
"l10n\/sl.js": "da0d51fba30061583f4b0b5945b533dd1a08e89c2a9c42dfbbf5f5582f173bdfae7714cfbefc34fdc993842f051f2d589b9c2ef87d2e4717b54823d3765e9695",
"l10n\/sl.json": "191e8e0294205f02362edaca7652da13f4f88e8560bcac1d9b35a2ff73b5640f2daf9332fb34c28f1f2783b3b9c0504ef0afdf6de5d29d8616bee5d45dea31f0",
"l10n\/sq.js": "46feebd8299ad4256a9dcae829968b786d960f24ad8a21835b9232676060747d9038967c970936e28340e28b0eeef90793faaaf51eec0d4eefb878dadbeddf72",
"l10n\/sq.json": "b1e0019fb55e0b45f55ab5097d91b855a02ecff7316943df2a1693fd7dfd3c1543927a074722b03fb5d03dc13c1e4cc91fe58a26f3b73b946bd6a2bfe384a351",
"l10n\/sr.js": "6ee929ddfedc7f3af4ffbc10c723b60310681fb4020322c5a192e0eb17e44ac650b669e5a674adbb095970c4722cc8415ee6c48b5f16fe8c577e3400e70d843b",
"l10n\/sr.json": "c6435f4d735c47a8f020288a5669c5dafec3d6d8bef2ae79fc99d3addb5e44e01727481ff0bbe5c5bbe2eb4beb2bc8e8400398a481ef9f3b8421ea33e942314c",
"l10n\/sr@latin.js": "27c449e60967619e4b4000565c772f1dc268f1dc29349df639894b2f8567b1a17451e1c25785d2a727744418775bff0cda80f8639e418c4000fa5530adbe7601",
"l10n\/sr@latin.json": "052896ae8c2ae93b2a5212386172bcf3d20d0e20febb00d26abd519390858788c83599eabe5730075b8056588cffb2868fd4ab15b86e523faf048d2e1b484a38",
"l10n\/su.js": "71e16eb185207be77e8efa486734ae0f4c5e639cdbdd799d9a0f1c59e966d0c0877c10f872a99a4d0489a2b32ffc76efdd09629f6b587f57e5d18582392b956f",
"l10n\/su.json": "8feb98b74cc4e22fc60b147fbfe34148b407e37ea50e74cc8b205226a3db47d592ffb1125eced07fbebe9078f961f85df3ff6c33744082a7cc9a59db9ad9269b",
"l10n\/sv.js": "0b5ee0dcd107cf8fe39d333bd9dfdc10524c21fbee5809c2c8675298437ee7f41b9a0c225071348407a270340aa96736094ec88d0cd4c14ff665cf2c84ce70f3",
"l10n\/sv.json": "fdef3f1b765f67ab585c2662410194329b46341f03c29c0d0ee146e8e9fa48d1dbfe7a953245bb2d93fed059f0967101dfff4e1ee54c33f8eeb5b999ec1bc1c3",
"l10n\/sw_KE.js": "2e1675519b2c15d726505516d09fdf613d56907e3bcd3fc31c06dabb13639ab436a0b95879dfa115e53996070264b9b4f2555ff31ba58f89d4082d76a5e5c2b2",
"l10n\/sw_KE.json": "0229170d1834bb20c391c0a9fd4dfdb43d495f2b9489f5c46ac5a673acc15f474732c222e4e5c79aa6221ab1fcf0ce298ced0b1111cbdc7fc36198dad72ac8c6",
"l10n\/tg_TJ.js": "2e1675519b2c15d726505516d09fdf613d56907e3bcd3fc31c06dabb13639ab436a0b95879dfa115e53996070264b9b4f2555ff31ba58f89d4082d76a5e5c2b2",
"l10n\/tg_TJ.json": "0229170d1834bb20c391c0a9fd4dfdb43d495f2b9489f5c46ac5a673acc15f474732c222e4e5c79aa6221ab1fcf0ce298ced0b1111cbdc7fc36198dad72ac8c6",
"l10n\/th.js": "a02371f0a7cce0929c4b972b96c9b2d3f7d1e7cb11a9818cf5cbabd0e827b749a61bc4a08a97b4b2270b24de5eb8a93748323ef3ff35a32388345d9ee7245075",
"l10n\/th.json": "b10a97176bef8a160c5f563cbb83373daf130a744b175696675fd96f588011813b215b362fd00e7829aafbaf434d0d07e28aa4ff80870a3bed008d22f16cbe49",
"l10n\/tl_PH.js": "584616c60777f992280413b3849fd779c5f8e1b4da2f4cbd3864dc35842550e01076fad35a6f95ebed4f32436db05e70f613e95e676a83add0e36232b922a0f8",
"l10n\/tl_PH.json": "f3711573f0f71802cb423dd9c506c602996a7fbaab151df96a39f5049ef4f15617fc771d71766cca8f22e50ce5c5319f4438add093fdd0a1b73c5344d8c34348",
"l10n\/tr.js": "c546e18a2007d59bbba7494cfc641a68b6f9411cdde6d71f3d0ff66a003070d6fb28b6921252c2f5991c11fb2e16308c16d58baebe42dda37acb8da29f4366ae",
"l10n\/tr.json": "41a3c9b2d0752a49e96b0b3fab95a2b4f05adc10cc7e00ecb3b123758dd55a7dbac80f938744fb6a3e82d8a74b536a5ebc02fb6902bc0f1b74fcf5b225ac1022",
"l10n\/tzm.js": "64a3c0d91672049283317be11a85e316b547ca3aaab9849b21f7a09b22d1b0a24b58e522f9b5269e08c1a9e54305c381a4f0ce6a03f0c1aa1706a91c5cb4e11c",
"l10n\/tzm.json": "13ac19c58150750ea44bb764fa75811ebe09f8f98eed65e181928b1944c6c19d3763b05bfd86ab9a31198c0ec58b2d3ef3603bbb3a77ad6be8cf2af356dcd65f",
"l10n\/ug.js": "d3129bb0be6982e1607a37482e595a3fc759b4847bbd804b787124b3822bde529fdb2ccbbda3d128f86242f1af820558c524185e6789ce69f8c24d94078ef961",
"l10n\/ug.json": "971bc6057a1c2f68d462c53741254a96afba92cc44bd53bc02500867f94a39d6d08484ef7b3d87be136b4e2534d0eb6139427edc0aedfe05dcff44cb75e0b36b",
"l10n\/uk.js": "d1f6daaefe8eec343926ec1897686530feabd33e50412f1e2f5b060c03e77935694bb22a14ee5390da63ba8c06334463e282fcd881c5bc9065643d6b6578dfca",
"l10n\/uk.json": "0bd09a72f6e59cf8c575329feb8ea007afe92b4b8b2647059b3278b5c39c09de716b7862256b89862c9742d3722b22aa2afc318ad7db34b20bfdaea43fb55fd7",
"l10n\/ur_PK.js": "4af2df9528ea686197aacafd2dfd8a4d2ad579491418e564ce57a07132c620247e5d3b7026872acd5636a964b24d26e6310f80fcbf09aeb8705e3f7b00f21928",
"l10n\/ur_PK.json": "e7bc6b8ec19eb4eb552ba21f0895846e3856e0c390e6326b1b7dd82ae6ce6f19cced8af35ecb4047ae9d65a57808a72e3d6e5680e2e7a0dac5cd20f6a668423a",
"l10n\/vi.js": "d41c49aa9f19b432c0999ebadffa6add819b0e26de358de4d0651c5fa783155004d9e37c618b7716d5dc40ccf72afa02a856bbfc5ac277aab25d94fd74efcf14",
"l10n\/vi.json": "ce4b9bf4224b880a771c85449a9e72533b7013d2c7af750af5acc28da77e6bbfabec1216f96206f168d109b0a485dd70a2b97d663de44dbb49a29726c3793849",
"l10n\/zh_CN.js": "5b814a57a56476eaf19098bf3a453d549c911fbe6b6ec7e057f5b305e883b490ebd32479ef00aef4861a7ac944a919cbec030c9cd80beeef13a35edd623a50f9",
"l10n\/zh_CN.json": "1cff04b054a74c5b56bd8d2950eba7437f30af02b5059ccf85ffea086338d745b02e00995b2bea5e98b4b2f9be4198bd9ba843a7bdbd550e7b6d0edadb9efefc",
"l10n\/zh_HK.js": "2cf2f4b8a7faeb19e1380c38ee129197671130cfbff10033c6de8790dfb2cdea9393d955e9f315c39fd93cea801c32dbcd46f0a8e2cbf5f844dfe3516360ec9f",
"l10n\/zh_HK.json": "4f6585f9354062d706197f6bcc01731ccaa58eecbb575fb587eaa015e5e9ae1289bab90a3e33b3e5cf7f53d8a1f938a639df319f1a2fdce2d97bfe0fa95d73b2",
"l10n\/zh_TW.js": "5fd80726d4b2577a20b7c2ea78684b71f5e840b275dbfa16be3ccb4d3a43367fdfad3085949cd23a270709bda3161a139087bcaf4f10fa45820c6ef4b2626cda",
"l10n\/zh_TW.json": "536b4109538075660a5cd8e57667e86f1cc8737e1a32af6bfdea1f12e176eaea4ce45062e2cf4382f71fddca42829ad1663e9e70e34be58fbbfcb4814002fecb",
"lib\/Access.php": "c11476c4ce7589243b82f361fdd7fd7858a903c6bb1b9e0a3b67f9c1f226498beae0785d487cc5ca009d679c5676e4a47ff0492382fb7b6f30df386abcffe887",
"lib\/AccessFactory.php": "e6ba1ab606eabbf408058f9ca4ce008f7d671fc22d9665113188f113d9fae268ef1a967b049790d871bab52564cc3dfd6609115a7b7e0351b22822007b7674d2",
"lib\/AppInfo\/Application.php": "a545eb0706c381beb15ce8bc04b86eab8b1da998697b28dc2607fc7fd36932166dad5ca24825a50460e2b555f7bfa3ac30165b0a60d58cf776a11f23d3d3dabb",
"lib\/BackendUtility.php": "2320ea000c3f80f545ab5d6d22389f1b55d6f6a670a533d2f305f4139f3fa9329e46bfe0f89ac83867c397940847e2c095e29f0d6c1b498643b4cef08420ffc0",
"lib\/Command\/CheckGroup.php": "b0752e39318454462ff28e3283677a5463c58269c7f0bcaf02a1d8b37f4f3d2446a5dbe4f724f4d818e8938ef427b632e0ed1dd7e623f50ee6df2599b4dcbb8a",
"lib\/Command\/CheckUser.php": "a6c9dd51ffa372801379c4abafb3d6b1c3371d28312afdb7d15bafc87072a1764f47849af60e111624829b074e16f738d47cdf0cc429878ff025ad84671ea394",
"lib\/Command\/CreateEmptyConfig.php": "734e02e565e53da11a51158256daa218683a9010b3c888bf02ee0b482f131e1dd27fa1192be45e98307d66bbce79e79483bd31ace8cb537460c0c077c814bea0",
"lib\/Command\/DeleteConfig.php": "1d6e211911a86af8ca86fd8f9c69325491870a109e14c6f102a7dc7b96ce83122eb43b9bc7aeec47e49cc8e3cdf1884099e3ca8302ffa2bf067da428611e65df",
"lib\/Command\/PromoteGroup.php": "82c2c59b401ee54760b6c6639bf4a5e1562998d30dfdfe2254d6a21ed33b3a1a98d118617024ff3dd48d11939a58893c80caef39a23af7aba820a64d0bc30594",
"lib\/Command\/ResetGroup.php": "1d55be08d97176f3ee7d417943061afa6d8117e69ecd1becfaf822f1b2a94e21b42383ad9a75061c0e0232bb42c27546e35df1ab0cdae67eb99132178f9bf55d",
"lib\/Command\/ResetUser.php": "3c36cb51f76890fecc5a033d46b4864119b4628bcb3447e742b1693382c989cf6deb7eb94fde7459789390ce4c235b3fadcdd1c34d57abf699e51f80177d1273",
"lib\/Command\/Search.php": "a711c49c7455e283db54387085cfc450d9920e99f60cc839724954b79b9d9821c30103a6fd160bb8e7b8bde934d507d73391f90b72fe511a7eb6fe48ada24435",
"lib\/Command\/SetConfig.php": "d3792613c5c06eb64d45a96704bdab7c51de74f90f8aa191c9e2b0a54ab9db2114d45497f55bbcc781a18425209034b81236d477c1992225c94b7d51f9114e5a",
"lib\/Command\/ShowConfig.php": "db0c993f49fb3ebabc920e5ef223ab88d2689c205b6b34317cd95f61c811995c0794d52ef33b2641da0d9d37c06fc6058032a4e4aec3fa2370b66ec0d6f72486",
"lib\/Command\/ShowRemnants.php": "6f7098e4abaf541f35d10d9eff1b204534117ef7ea39db002f1f65767110c6b3c60e6274598be2fa7b328217a45efe32972b40260be69775257ffd652d5c96ca",
"lib\/Command\/TestConfig.php": "b057d9341c7478a3941757aa98d5c3888766f0ced4ba37434cafbbc0cf2d9df2bcab315c2319b5670ff563ee468be0cf1e6903cd41f3cd79446c49e1ced6798c",
"lib\/Command\/UpdateUUID.php": "d3b024bbf195bad95c33e966ab90ebed893f2ab39664db5ad347aecd2f6c36c19ea999144d3fb1920a83c44839d7b1f3d6f2a14f007a94c513a643220abb7849",
"lib\/Configuration.php": "4ef14ae602e549db4175b979c5f5a7c6fba5dcf1aba4e77824958d66d40d4892af1d8767dd76215f6b9877d2f2f455d6df5e531d4769ccee23f1bf6213c564fb",
"lib\/Connection.php": "126a03b31cee683f6905c0baa63097c49c46d8e4f5d2b8d06c59d7ce7fddf6f014b86d4d20192522d996c595c378c22611420402c83ea30823025ed73ed79b70",
"lib\/ConnectionFactory.php": "58b51de7aca4a5125c334da7449171b0921552f84c82040b120a9b47814b84a774a0e3a23390930918598063e7d3dd5458534487e06b05f6b3d6bd6f41f5cda2",
"lib\/Controller\/ConfigAPIController.php": "2532ff5608c21b392c92dd2450b0c7eff55a44aa5fff77810f7113e55fb6d5a8363532ba81dec51c9e6533e7aba3da6d972e0c97eba94ba67c27c75f21b59156",
"lib\/Controller\/RenewPasswordController.php": "b45671343086393e8a3bf4472d87c8d946d82106ad3a430cef59350f74beffa67c0a2e2543aec0d6b53abce4f6bac98113abac50f9f9997dc454f64f8a45c303",
"lib\/DataCollector\/LdapDataCollector.php": "5578cb02ce63a06eb2e6b118e8d3cdf8600718ee2bfd364fb443ee1fa682b3a63ac5979d96a157d4702f539d2e20d01b0833b40190ebd3d47ae3afd9898c93aa",
"lib\/Db\/GroupMembership.php": "85583485280a8680b14da188cbdddedec0f61a6d14ef882e82137aade94839fc8fcf821933a87447701f64611e8c56b603698e845df5f9163a90b89d476189dc",
"lib\/Db\/GroupMembershipMapper.php": "1bbd666ae1330f9f15bff3db9460a9494c12d3a562714fadb90cadec34c065916cc3e41a03b245c11f4e647451ed7d43bdd4cde88e83c6a81c9119e13ef08603",
"lib\/Events\/GroupBackendRegistered.php": "701aae4a742bc873664726631899be45bdc35ccbc9440619c76f02af868ba2f77a3546305067f4c65c8536f2621dda364a3b61d96713a7af973361653490ee22",
"lib\/Events\/UserBackendRegistered.php": "fa99b705e1dc6370c450c40021f770f9051ca5034337afb4af6a2908e8768a63ba5086d16d77dc6dd88f60a949cd39ee9450df93650d477cc4c0e69d2839ed80",
"lib\/Exceptions\/AttributeNotSet.php": "b979519230ea007c7f5c94b2ab34f9df7e16b029e7785220e017bfcfc39801066c04fd5f88ac96f96fdcd46e0a77c57312c99214f4ec952d289c706b827695b6",
"lib\/Exceptions\/ConstraintViolationException.php": "54e321fa05995373025a7654b02903e22ec139f6061bafd914e969e943574a079cd0e98ad3dc71ab67c3c37bddab34d6d8c891b285140ec27c5f30da06488e2d",
"lib\/Exceptions\/NoMoreResults.php": "b2ce7e3910090e49e98227ff203fbcb28ad227ca63cacb256e6c8af2edb80a961e29d8cb09060f9ae44b47859ec9ba6f8009013635d2a66cddda9ae2b43575e0",
"lib\/Exceptions\/NotOnLDAP.php": "81ef23ceb00d24b397e87aa2e7844cad1161274bdab084a0b53e699d5678066fbbfb39ceff8d0330bde91c8ee8510429cfe792e6b90eabde262d05d35608694e",
"lib\/FilesystemHelper.php": "b9523a589c5eaaf319130df25605b3bcd23fc04642be21698cdada3c99e65ccdff65ef9aba843ccc39974c65f4fecf443587379282d819fa497e3a3bd6fb4c83",
"lib\/GroupPluginManager.php": "0df496663e0d89638aaf5b335d168a037e84fbcb58a8676fa445eeff547a6b39886d3479816a56b9b4dc8c1be17746a655cd28ce118527ff56c9b248e2132af5",
"lib\/Group_LDAP.php": "2df609a258687e5f0640ec60049093ca23afc83ebb71078507cff39eaadb6020939922c9d6be428e7a3deb0876032853221c0bacb80993f51558a9ca59eda61c",
"lib\/Group_Proxy.php": "9a1034419b479e63f641755a1771ed6a3a4d24349d0cbb0895c26fbfee5c1c108ff2bd8419f478a750034187389bd6d7634432dbc55f9288b50d5f8f543917ac",
"lib\/Handler\/ExtStorageConfigHandler.php": "cf1a9730558a077c454c24e194396b408a97a92676f4398b002ba7a67e95934749cd70723c3328b15d48ba6e0ec095ca29ae3104f27f353b6102f99ddabfbbb5",
"lib\/Helper.php": "a0b9bfcaa704eaff88b6b13172820a44a3566ed1c06b55ecaed44df41fb74a54cac1594b442b6cc599f3255a52270d23eb5d043304133dde44d10af2c80333d5",
"lib\/IGroupLDAP.php": "f1bd949e11da7eefae58437a7114d24662735ddf7fcc2a1b0ec149f0f6435e6fa0cb729e82a4bfd64b7d9315a50eeba141bde98c393fdc8d427d848c49a56874",
"lib\/ILDAPGroupPlugin.php": "50ad6b05ff9089e55941863172f6cb4899d8eb820ecc004e9095916978b3ff2a18025f98be1b90c3c65988751d7183a4e85c9184d12156601d93dee482628b11",
"lib\/ILDAPUserPlugin.php": "9b587a8d63ce1135f4c768f05e06c18df2984bfeb8fc5103e6bb956d23489b599e04cab514b85c1ed43b9bcb04c31d5ba2b279c3da398af9b8858261de7729d4",
"lib\/ILDAPWrapper.php": "06bda50f80a2a7d6f8fd49aa4330c507e340f25e54c462182f120dc14463fd450e2c4dad7ea81c511b320a4246a35e994cbbc670d6ca3877bf3095d8fac0fcda",
"lib\/IUserLDAP.php": "3bce8559b34b27cbe510a5703d7bdd091bd5adf36a11e753918b9dd017712f6a441d1737b64a92dd5c453248ef90506c457f384522d72abcacb8bc52466cc2fb",
"lib\/Jobs\/CleanUp.php": "e545e772c8ab76a382acf7d182b784d8370942f4a637912c220d54988fd0b3203ebd9a2e9ca4689fe4a91c0ee2e66167777b9abeeccfede55a021138f3968052",
"lib\/Jobs\/Sync.php": "bbd2e454e98177c462c4cad175cc97bc1b82efd3f70c027741c216806574264b36c4a9772b83437f3d0c3222bcd84eb599f0c4a71e95bd02e41f3490bb21ef00",
"lib\/Jobs\/UpdateGroups.php": "7394cf7649670c966ca33f3122e5d6233747ac0b1fe236b76364908436bc364bf6053049d6baf85985f94beb5ff01ecb361fc040080fc297a2a8ce39f9281efc",
"lib\/LDAP.php": "3fdf0ed1319dad32aaeb19f203af470ff105668f0ed23755e7b36a21a15c9fb2a5cbec9ac8c22724025f05129a5b8e81bedf76b2b10daf5d3ce80408b818d89f",
"lib\/LDAPProvider.php": "de25c7640bbf09e8f668c148d9eef5777055745c0dbd9373969f626ed3cbe19d20c53cbe096095c2dfceaba1507c360c88ccb4c44d1437d1fdb2c34535cfd2cb",
"lib\/LDAPProviderFactory.php": "0fcf4b05961093b7a4dd3d76ad6022aa9365d6d1aa8b35b84f2015ce6bf603d146dde0d4d7402bbdaecbe747b02eaeea0cf718b32b421696f05e3b06ec3aad18",
"lib\/LDAPUtility.php": "5f55a769da462a473020018522dc8f89fdd4ccd8e7cb703e91743051116513ac8567f01985a6bf64e3ba22cd1628f35740cfc20011cc617984b83da6f664f00f",
"lib\/LoginListener.php": "a1fbbc8a6bc8ca02fe8d928611745022be5ff79c2ab5c671b9b92e582170a2438094848e66ce68ec8bce0b863229172594858e0fdd249d883c17c9c70a164804",
"lib\/Mapping\/AbstractMapping.php": "3c49d57c9b0935e2d3d8e514331f02bafdcf67e6260d117efec95807005bbca55efb85d1e114160629c630d6bbee58f669d39051623ed362cae852f6e5b4a321",
"lib\/Mapping\/GroupMapping.php": "3dc938348b31394d90c1b403714bae5fc750ef4fb63ce6c0bcbb6cab0e9d4a407505dcdff519518a08897692f9ad34d20abab44e7222ae85105648961eadb1d2",
"lib\/Mapping\/UserMapping.php": "c99edbb116b45be07d8a8c5c61ee7029304f73d58cc5dd61a07ab1111043cf914aa8898265a205b48ffb24fb0be48b127c412f2d24cac91fbc912d77a56ff500",
"lib\/Migration\/GroupMappingMigration.php": "b3916b850619064b18a11fa7c02b8c1131b5c86a103daae29282dc7bc0263a7b2bf0da57ffe7be021c9a361fe98f37829dd69ff12693ea310b003669f7ba4d92",
"lib\/Migration\/RemoveRefreshTime.php": "e24cb87ece2ce8970e0f8d7bb52fdff86150947018b948a9e156bebaa54778315d162c2246d3d339b3740e3e8578540d14a524de53c4027e3c193442ebef3ef8",
"lib\/Migration\/SetDefaultProvider.php": "058d3ccd60833d0f3d657dbc9a8cf7ac2d58f63329ee8e3bdfe41fdc397ac2aa73209d4f97c2fda91979e9964cc1caa9400d17395fbc24734d47a26e92918788",
"lib\/Migration\/UUIDFix.php": "f72a74ac35936b23901a91f837599e3bf68fba6c14cd5943a17ca293173dab7cbe9c39109ce5b2330321f4b8337d5950f60e2b659508924ca375a2fc33160fd9",
"lib\/Migration\/UUIDFixGroup.php": "4276adb628546df65790879c924a7bb4b8b64c03a866187e925978bea66711507f40d4cbfb967e0af83b30178e7bcbf1c656f4d4ebe06ebb0705264ec8165d09",
"lib\/Migration\/UUIDFixInsert.php": "374bad8bbd754875e53498730c0b32a3e299987542a166e4ce1b586bb48e494e0cd3f3e3c470d2edb012ff3d22c4d547748f2a15b0727f98d7df121aa76a7fe1",
"lib\/Migration\/UUIDFixUser.php": "669d83a49a1f5d8c11e270cfc0df0fbb32a2bf4ac424b5cdd8b84fcc1cac7d1b50911afd316a57fdd45384425889892408f03b3ec0a2396842d1e2e577e872ba",
"lib\/Migration\/UnsetDefaultProvider.php": "3ded7e2b2583de1072dbd98c38c6be1f3973bda5621ed8e81af7fd775d058a7e1ea993220b9f066df306a6d340a2df0fdb6148e5bcf92abca8a1e8cc5ea55ded",
"lib\/Migration\/Version1010Date20200630192842.php": "2840c0180c68bf60a3f6cf5c7d8b85576d55618e310db411f0d223dbb15483dcee420c77242af2a95ca25ec3a4828aa4c0d60e6312f6d7d4395d642bad11d9a8",
"lib\/Migration\/Version1120Date20210917155206.php": "c72ff1181f7bdc8f1af637a50cb5d288e867697f482f1f78360ae46698c9152e0cdab2f94b268f8509981b3cb87cbab461d055afabf2028c983139369f89a3e4",
"lib\/Migration\/Version1130Date20211102154716.php": "cc1b87260a3b88f128dfd0d3518518e10a631b8740c400067b401945242ef37639f9eedd1755c329a38c949f7b4d52597439f61ab4637e1533f82a03db9c1d83",
"lib\/Migration\/Version1130Date20220110154717.php": "661fef74c01bad1877016ebd09932ceaf4bb4d03012b6066249ba3ae4afa8ba4a3f88727a55ddccd9cd1ad516ba10e43a6de2677f9653089335d613709560b44",
"lib\/Migration\/Version1130Date20220110154718.php": "c248d5978df7ec94dc30f4c36120de7bb0e1012b0c4057d2cb232a456759a6f731f66d3d3ab94999358fd2a57691b6142de29ec7f4f44147d106cbb887ba9d79",
"lib\/Migration\/Version1130Date20220110154719.php": "2e10d547abd51381e50245e6d0f3687b7b35d8b9a0d37e2e135e63728e4bed4427bf228df96672904661c42dcf2794cb7e476b2d4cc380b054d3303381a4a799",
"lib\/Migration\/Version1141Date20220323143801.php": "9d31e497065162fafe9b55556dcdb54ebdaec59d2b54bc4ba8295ac913948df6c611494a652bf7b31b54429eef289a6a7b47e0d66cdcaab7b4f0ffcb83698b95",
"lib\/Migration\/Version1190Date20230706134108.php": "31c16e015d0031aaf029fc16dcd9f731d07b769bc2835254de7b086d7c7f812512421f92b9965fc6eae0ade03b47b4b60aa4dd39b2054eb5996632d86cf1f092",
"lib\/Migration\/Version1190Date20230706134109.php": "8dcd2b0e44ac2d1679fade5a9e705f9a3976b4f7a9dd55df3396dba17cd1523aebd56b55862aebc0ad59a2673cc8adb44dd78ef5773b1ffa541e10af2e3ba1fb",
"lib\/Notification\/Notifier.php": "6beffa14036f89a31ba60fe54e95173d6c9bb693e8a34d0899580bf0c222a794ca3c8308f2abbdf5be1dce8f33b9ec44ca93b6c34cc16a0c6e876be0418fbe81",
"lib\/PagedResults\/TLinkId.php": "1aabb926ce0f7390803ccb1f4672b1e02cd393a6a5e96deafffb61d48f71ecfdbaec5078a651941cda6a54958a69576faf2785cbe9564cb775b1c640eedcf6bd",
"lib\/Proxy.php": "7ab201b5a65e9ee6b823b22e0d7a64ffc1c27ccfb6f71631529e6ba2260b7dc6ef86db31c0307ee157a29a97a8ec0147827378c92a1d01965d00cc32d955ef32",
"lib\/Service\/UpdateGroupsService.php": "811536561ed25ca8ffe522476ea265b87ec1aeaf87acf8ccdd32f420aafb758b3091eee4506b78cc9d2be2a65e7f60f454f41901600353d2e6f332313e7d37f2",
"lib\/Settings\/Admin.php": "2c620ab267dc2bcca376a239b74a488a61ead557ceff33c3c9b87348491e6bb126c0804751a30c88d3c2950252eaeb0538afcc4e2676d1d59315a6cfb03d1f58",
"lib\/Settings\/Section.php": "c836ed36fd2ed50c96cdf93cbd694479cfbfc74034be8c89481fdd1e8078ab9346398a5d897ae043ad1c29c9c0529d867ce57784ce0ecf5a440b6a05bbfd5bf7",
"lib\/SetupChecks\/LdapInvalidUuids.php": "2cd3bc5b57fc57472d99fe8460e77230c3969bfe6a35ff367a7040a570d945e47e8e64f2df37ee89c30b411d91b0bc2287ac10bcc2065764002a5a34f0eade12",
"lib\/User\/DeletedUsersIndex.php": "e66a25c5ce4ae72ffe3e4003b819118ecb8385890971728beb0a41686afb17dfdff31e8f369b7e7df2974798930ec0d2f59ea059eff05ef851fc94d19f73abef",
"lib\/User\/Manager.php": "70ee8884c5683ba0ab5ce8e3f265eb477fc8fc65a9addeef558371ff7f6e9a45153a1967f879763da80e0785bb7fe64a7e19259e6b280ad6e19c45a02197313e",
"lib\/User\/OfflineUser.php": "af433496b20d7a9a39866576ceb7f6cf30bafe0eaa35e8596b2194a78a4d90363b205704efac3f7d58156d3e4a14ffd8dd47f682bdd90197303a9f2407d285f4",
"lib\/User\/User.php": "aba579cf9bf8e0f27afdb29213d069eb80477ce1ebbe44dfb07e1b39170b1ebe258802eaea11d3e4a398e3b09b8a455a4312a4603f557eb23eb7b73ecfed01e3",
"lib\/UserPluginManager.php": "207c52d374f1e43a0101004f5e1f57ce20ae99c4d92f85edd98c96b7010aa5038b4056cbae3140ac9911ee062f0713dbfa58f3c5ea8b097bde35b8d3fcab5fcf",
"lib\/User_LDAP.php": "eaefcbcd1e4d059ad8a4bd791ae0713a1376e0dc0ce0e35068937390cd42eb19df078446cc05a81ddec8d8aaf025b79b50bbc56c22710a583a0a5bb2ebbb4e91",
"lib\/User_Proxy.php": "0fbc66d8b5ca67dc2a2dc038ef4d204964e16fb5ceb43ef75254b52ada9cd9c1510c28841abf73bdaf6790b7335c70888b499462ec069fe5a30151ced779189b",
"lib\/Wizard.php": "39a516d338250beb81e7472a327aad54faeb6a63d50618100af03f4e29304c14e2a684a7623bb8b3351499a71db9825332368172562c25bb6bc044525df5ea4b",
"lib\/WizardResult.php": "ebd3953a2edec6e47e288cd56e139805c707c7dd3f4c09e814d7dbd8f6e2752df2cc32a48cce17982a645456e26d86c88dcef99c7b05f3102cf6012dcbf72047",
"openapi.json": "3d2e7ceb82d0989eb03d58e01e90b6e54320d8b81e7dbc3e120df0239f7e5eb8d811730e679ec3a6a2cd09fea5816b06b0d12ef5352f75804de74e9b2b170588",
"templates\/part.settingcontrols.php": "e0746d16210d76b860196de8ac1cb7719634cd3ba855356ca6c7c820160d7fa5c2d09e5f18f9ed681bc7a6fd615c4167e0186051502cab36df0d4d392c9fed23",
"templates\/part.wizard-groupfilter.php": "5b6f7daea7fbba573f2cd1db61822ea212df2ebda747a72f6647cd2d6d5811d21c815026c79d1b65835d9fbb800c741cbb2c9910735b1f2931aed62a0eb482d0",
"templates\/part.wizard-loginfilter.php": "3b5261b559c3fe26ba64c1e1a8af4b268791b21d4176cffd6351f5a35025bac671006696c879b4e014c4a0d37617f99b12029dec1de5499625eaf277f09f8d7f",
"templates\/part.wizard-server.php": "f763e84ba0419d9595ee5960ec926c3dedfb9cbe5cdc70e006f301d9e09b9256f68c7fec56d17338f55fe92980446f6c399407e118b1ef73983a7421fb4f7979",
"templates\/part.wizard-userfilter.php": "a329c45ae5da7e3ea26d5610e9eb2a0b2c29252a64987d1f98da5b05343cbba380ce41354ccd2364f5ab8bdab4cbb689c56b8696ee6cb0d859e8801efce84ebb",
"templates\/part.wizardcontrols.php": "b2335258c5d58cbd9a127c0bb733252553fb4708aad29c2712291a8d663af132f82e91bb3ffc66c42099e05a83876920c600a44bb93ae1eb236762b017cc35cb",
"templates\/renewpassword.php": "602ccf8bf07c58aab2fe926a14c33369bea42461fc15fb6b2819366cf836b391e0bbb29404a11471a9bfe3e96413b6943ca0532ade81a7df5f3b7972c051c567",
"templates\/settings.php": "4a44215eaaf672f07746a96db172a4618218abff5fe42ba901fe4901c68edb3544c921a1245da1f8488e42d702ab7330b82b9693bccd31d4fea5eea0ac7e2fa7"
},
"signature": "B1SPatp5ocDlkTcqTbp2jqxk0r0EJ7M5xwOzIf2iA4L8QX1E+XJp10oyZwQlKEWVmdHFprcBeDCroDKDUb677FwMjpb5eyc0P\/e6\/6hGYdT7LS0QI0EGBQkeiyDAh1gxI958lVxoxB8iydY505F+pRgAng0iPMD02byVP0bDp1zzY\/DU0NDJo2GIdqP7rTzBkm\/Dnw96vP0o3DC\/Utpv0PH6vYVeYe94ZOh1k75tZS98DbTzAKVmct+XxMcmLwfj3+cfYQFf2AEaRGN+6LaQrKQztsVWLQ4r1WxfhjGmPoRXK8Aizfkq54pjxrGMYyzivfv3mnXAcPkOjGDhW5ZfEw==",
"certificate": "-----BEGIN CERTIFICATE-----\r\nMIIEojCCA4qgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwezELMAkGA1UEBhMCREUx\r\nGzAZBgNVBAgMEkJhZGVuLVd1ZXJ0dGVtYmVyZzEXMBUGA1UECgwOTmV4dGNsb3Vk\r\nIEdtYkgxNjA0BgNVBAMMLU5leHRjbG91ZCBDb2RlIFNpZ25pbmcgSW50ZXJtZWRp\r\nYXRlIEF1dGhvcml0eTAeFw0xNjA2MTIyMTA1MDZaFw00MTA2MDYyMTA1MDZaMGYx\r\nCzAJBgNVBAYTAkRFMRswGQYDVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxEjAQBgNV\r\nBAcMCVN0dXR0Z2FydDEXMBUGA1UECgwOTmV4dGNsb3VkIEdtYkgxDTALBgNVBAMM\r\nBGNvcmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUxcrn2DC892IX\r\n8+dJjZVh9YeHF65n2ha886oeAizOuHBdWBfzqt+GoUYTOjqZF93HZMcwy0P+xyCf\r\nQqak5Ke9dybN06RXUuGP45k9UYBp03qzlUzCDalrkj+Jd30LqcSC1sjRTsfuhc+u\r\nvH1IBuBnf7SMUJUcoEffbmmpAPlEcLHxlUGlGnz0q1e8UFzjbEFj3JucMO4ys35F\r\nqZS4dhvCngQhRW3DaMlQLXEUL9k3kFV+BzlkPzVZEtSmk4HJujFCnZj1vMcjQBg\/\r\nBqq1HCmUB6tulnGcxUzt\/Z\/oSIgnuGyENeke077W3EyryINL7EIyD4Xp7sxLizTM\r\nFCFCjjH1AgMBAAGjggFDMIIBPzAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIG\r\nQDAzBglghkgBhvhCAQ0EJhYkT3BlblNTTCBHZW5lcmF0ZWQgU2VydmVyIENlcnRp\r\nZmljYXRlMB0GA1UdDgQWBBQwc1H9AL8pRlW2e5SLCfPPqtqc0DCBpQYDVR0jBIGd\r\nMIGagBRt6m6qqTcsPIktFz79Ru7DnnjtdKF+pHwwejELMAkGA1UEBhMCREUxGzAZ\r\nBgNVBAgMEkJhZGVuLVd1ZXJ0dGVtYmVyZzESMBAGA1UEBwwJU3R1dHRnYXJ0MRcw\r\nFQYDVQQKDA5OZXh0Y2xvdWQgR21iSDEhMB8GA1UEAwwYTmV4dGNsb3VkIFJvb3Qg\r\nQXV0aG9yaXR5ggIQADAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUH\r\nAwEwDQYJKoZIhvcNAQELBQADggEBADZ6+HV\/+0NEH3nahTBFxO6nKyR\/VWigACH0\r\nnaV0ecTcoQwDjKDNNFr+4S1WlHdwITlnNabC7v9rZ\/6QvbkrOTuO9fOR6azp1EwW\r\n2pixWqj0Sb9\/dSIVRpSq+jpBE6JAiX44dSR7zoBxRB8DgVO2Afy0s80xEpr5JAzb\r\nNYuPS7M5UHdAv2dr16fDcDIvn+vk92KpNh1NTeZFjBbRVQ9DXrgkRGW34TK8uSLI\r\nYG6jnfJ6eJgTaO431ywWPXNg1mUMaT\/+QBOgB299QVCKQU+lcZWptQt+RdsJUm46\r\nNY\/nARy4Oi4uOe88SuWITj9KhrFmEvrUlgM8FvoXA1ldrR7KiEg=\r\n-----END CERTIFICATE-----"
}
@@ -0,0 +1,25 @@
<?php
// autoload.php @generated by Composer
if (PHP_VERSION_ID < 50600) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, $err);
} elseif (!headers_sent()) {
echo $err;
}
}
trigger_error(
$err,
E_USER_ERROR
);
}
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInitUser_LDAP::getLoader();
@@ -0,0 +1,13 @@
{
"config" : {
"vendor-dir": ".",
"optimize-autoloader": true,
"classmap-authoritative": true,
"autoloader-suffix": "User_LDAP"
},
"autoload" : {
"psr-4": {
"OCA\\User_LDAP\\": "../lib/"
}
}
}
+18
View File
@@ -0,0 +1,18 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "d751713988987e9331980363e24189ce",
"packages": [],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": [],
"plugin-api-version": "2.1.0"
}
@@ -0,0 +1,579 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Autoload;
/**
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
*
* $loader = new \Composer\Autoload\ClassLoader();
*
* // register classes with namespaces
* $loader->add('Symfony\Component', __DIR__.'/component');
* $loader->add('Symfony', __DIR__.'/framework');
*
* // activate the autoloader
* $loader->register();
*
* // to enable searching the include path (eg. for PEAR packages)
* $loader->setUseIncludePath(true);
*
* In this example, if you try to use a class in the Symfony\Component
* namespace or one of its children (Symfony\Component\Console for instance),
* the autoloader will first look for the class under the component/
* directory, and it will then fallback to the framework/ directory if not
* found before giving up.
*
* This class is loosely based on the Symfony UniversalClassLoader.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
* @see https://www.php-fig.org/psr/psr-0/
* @see https://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
/** @var \Closure(string):void */
private static $includeFile;
/** @var string|null */
private $vendorDir;
// PSR-4
/**
* @var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array<string, list<string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var list<string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* List of PSR-0 prefixes
*
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
*
* @var array<string, array<string, list<string>>>
*/
private $prefixesPsr0 = array();
/**
* @var list<string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var array<string, bool>
*/
private $missingClasses = array();
/** @var string|null */
private $apcuPrefix;
/**
* @var array<string, self>
*/
private static $registeredLoaders = array();
/**
* @param string|null $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
self::initializeIncludeClosure();
}
/**
* @return array<string, list<string>>
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
}
return array();
}
/**
* @return array<string, list<string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return list<string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return list<string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return array<string, string> Array of classname => path
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array<string, string> $classMap Class to filename map
*
* @return void
*/
public function addClassMap(array $classMap)
{
if ($this->classMap) {
$this->classMap = array_merge($this->classMap, $classMap);
} else {
$this->classMap = $classMap;
}
}
/**
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
if ($prepend) {
$this->fallbackDirsPsr0 = array_merge(
$paths,
$this->fallbackDirsPsr0
);
} else {
$this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0,
$paths
);
}
return;
}
$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = $paths;
return;
}
if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$paths,
$this->prefixesPsr0[$first][$prefix]
);
} else {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix],
$paths
);
}
}
/**
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
// Register directories for the root namespace.
if ($prepend) {
$this->fallbackDirsPsr4 = array_merge(
$paths,
$this->fallbackDirsPsr4
);
} else {
$this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4,
$paths
);
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$paths,
$this->prefixDirsPsr4[$prefix]
);
} else {
// Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix],
$paths
);
}
}
/**
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr0 = (array) $paths;
} else {
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
}
}
/**
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
/**
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
$this->useIncludePath = $useIncludePath;
}
/**
* Can be used to check if the autoloader uses the include path to check
* for classes.
*
* @return bool
*/
public function getUseIncludePath()
{
return $this->useIncludePath;
}
/**
* Turns off searching the prefix and fallback directories for classes
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
$this->classMapAuthoritative = $classMapAuthoritative;
}
/**
* Should class lookup fail if not found in the current class map?
*
* @return bool
*/
public function isClassMapAuthoritative()
{
return $this->classMapAuthoritative;
}
/**
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
}
/**
* The APCu prefix in use, or null if APCu caching is not enabled.
*
* @return string|null
*/
public function getApcuPrefix()
{
return $this->apcuPrefix;
}
/**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
return;
}
if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
self::$registeredLoaders[$this->vendorDir] = $this;
}
}
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
if (null !== $this->apcuPrefix) {
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
if ($hit) {
return $file;
}
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
if (null !== $this->apcuPrefix) {
apcu_add($this->apcuPrefix.$class, $file);
}
if (false === $file) {
// Remember that this class does not exist.
$this->missingClasses[$class] = true;
}
return $file;
}
/**
* Returns the currently registered loaders keyed by their corresponding vendor directories.
*
* @return array<string, self>
*/
public static function getRegisteredLoaders()
{
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
}
}
}
// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
return $file;
}
}
// PSR-0 lookup
if (false !== $pos = strrpos($class, '\\')) {
// namespaced class name
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}
if (isset($this->prefixesPsr0[$first])) {
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
if (0 === strpos($class, $prefix)) {
foreach ($dirs as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
}
}
}
// PSR-0 fallback dirs
foreach ($this->fallbackDirsPsr0 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
// PSR-0 include paths.
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
return false;
}
/**
* @return void
*/
private static function initializeIncludeClosure()
{
if (self::$includeFile !== null) {
return;
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
*/
self::$includeFile = \Closure::bind(static function($file) {
include $file;
}, null, null);
}
}
@@ -0,0 +1,359 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer;
use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;
/**
* This class is copied in every Composer installed project and available to all
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require its presence, you can require `composer-runtime-api ^2.0`
*
* @final
*/
class InstalledVersions
{
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
*/
private static $installed;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
private static $installedByVendor = array();
/**
* Returns a list of all package names which are present, either by being installed, replaced or provided
*
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackages()
{
$packages = array();
foreach (self::getInstalled() as $installed) {
$packages[] = array_keys($installed['versions']);
}
if (1 === \count($packages)) {
return $packages[0];
}
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
}
/**
* Returns a list of all package names with a specific type e.g. 'library'
*
* @param string $type
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackagesByType($type)
{
$packagesByType = array();
foreach (self::getInstalled() as $installed) {
foreach ($installed['versions'] as $name => $package) {
if (isset($package['type']) && $package['type'] === $type) {
$packagesByType[] = $name;
}
}
}
return $packagesByType;
}
/**
* Checks whether the given package is installed
*
* This also returns true if the package name is provided or replaced by another package
*
* @param string $packageName
* @param bool $includeDevRequirements
* @return bool
*/
public static function isInstalled($packageName, $includeDevRequirements = true)
{
foreach (self::getInstalled() as $installed) {
if (isset($installed['versions'][$packageName])) {
return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
}
}
return false;
}
/**
* Checks whether the given package satisfies a version constraint
*
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
*
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
*
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
* @param string $packageName
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
* @return bool
*/
public static function satisfies(VersionParser $parser, $packageName, $constraint)
{
$constraint = $parser->parseConstraints((string) $constraint);
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
return $provided->matches($constraint);
}
/**
* Returns a version constraint representing all the range(s) which are installed for a given package
*
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
* whether a given version of a package is installed, and not just whether it exists
*
* @param string $packageName
* @return string Version constraint usable with composer/semver
*/
public static function getVersionRanges($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
$ranges = array();
if (isset($installed['versions'][$packageName]['pretty_version'])) {
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
}
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
}
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
}
if (array_key_exists('provided', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
}
return implode(' || ', $ranges);
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['version'])) {
return null;
}
return $installed['versions'][$packageName]['version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getPrettyVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
return null;
}
return $installed['versions'][$packageName]['pretty_version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
*/
public static function getReference($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['reference'])) {
return null;
}
return $installed['versions'][$packageName]['reference'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
*/
public static function getInstallPath($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @return array
* @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
*/
public static function getRootPackage()
{
$installed = self::getInstalled();
return $installed[0]['root'];
}
/**
* Returns the raw installed.php data for custom implementations
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
*/
public static function getRawData()
{
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = include __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
return self::$installed;
}
/**
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
public static function getAllRawData()
{
return self::getInstalled();
}
/**
* Lets you reload the static array from another file
*
* This is only useful for complex integrations in which a project needs to use
* this class but then also needs to execute another project's autoloader in process,
* and wants to ensure both projects have access to their version of installed.php.
*
* A typical case would be PHPUnit, where it would need to make sure it reads all
* the data it needs from this class, then call reload() with
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
* the project in which it runs can then also use this class safely, without
* interference between PHPUnit's dependencies and the project's dependencies.
*
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
*/
public static function reload($data)
{
self::$installed = $data;
self::$installedByVendor = array();
}
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
private static function getInstalled()
{
if (null === self::$canGetVendors) {
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
}
$installed = array();
if (self::$canGetVendors) {
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
$required = require $vendorDir.'/composer/installed.php';
$installed[] = self::$installedByVendor[$vendorDir] = $required;
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
self::$installed = $installed[count($installed) - 1];
}
}
}
}
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
$required = require __DIR__ . '/installed.php';
self::$installed = $required;
} else {
self::$installed = array();
}
}
if (self::$installed !== array()) {
$installed[] = self::$installed;
}
return $installed;
}
}
@@ -0,0 +1,21 @@
Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,96 @@
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'OCA\\User_LDAP\\Access' => $baseDir . '/../lib/Access.php',
'OCA\\User_LDAP\\AccessFactory' => $baseDir . '/../lib/AccessFactory.php',
'OCA\\User_LDAP\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
'OCA\\User_LDAP\\BackendUtility' => $baseDir . '/../lib/BackendUtility.php',
'OCA\\User_LDAP\\Command\\CheckGroup' => $baseDir . '/../lib/Command/CheckGroup.php',
'OCA\\User_LDAP\\Command\\CheckUser' => $baseDir . '/../lib/Command/CheckUser.php',
'OCA\\User_LDAP\\Command\\CreateEmptyConfig' => $baseDir . '/../lib/Command/CreateEmptyConfig.php',
'OCA\\User_LDAP\\Command\\DeleteConfig' => $baseDir . '/../lib/Command/DeleteConfig.php',
'OCA\\User_LDAP\\Command\\PromoteGroup' => $baseDir . '/../lib/Command/PromoteGroup.php',
'OCA\\User_LDAP\\Command\\ResetGroup' => $baseDir . '/../lib/Command/ResetGroup.php',
'OCA\\User_LDAP\\Command\\ResetUser' => $baseDir . '/../lib/Command/ResetUser.php',
'OCA\\User_LDAP\\Command\\Search' => $baseDir . '/../lib/Command/Search.php',
'OCA\\User_LDAP\\Command\\SetConfig' => $baseDir . '/../lib/Command/SetConfig.php',
'OCA\\User_LDAP\\Command\\ShowConfig' => $baseDir . '/../lib/Command/ShowConfig.php',
'OCA\\User_LDAP\\Command\\ShowRemnants' => $baseDir . '/../lib/Command/ShowRemnants.php',
'OCA\\User_LDAP\\Command\\TestConfig' => $baseDir . '/../lib/Command/TestConfig.php',
'OCA\\User_LDAP\\Command\\UpdateUUID' => $baseDir . '/../lib/Command/UpdateUUID.php',
'OCA\\User_LDAP\\Configuration' => $baseDir . '/../lib/Configuration.php',
'OCA\\User_LDAP\\Connection' => $baseDir . '/../lib/Connection.php',
'OCA\\User_LDAP\\ConnectionFactory' => $baseDir . '/../lib/ConnectionFactory.php',
'OCA\\User_LDAP\\Controller\\ConfigAPIController' => $baseDir . '/../lib/Controller/ConfigAPIController.php',
'OCA\\User_LDAP\\Controller\\RenewPasswordController' => $baseDir . '/../lib/Controller/RenewPasswordController.php',
'OCA\\User_LDAP\\DataCollector\\LdapDataCollector' => $baseDir . '/../lib/DataCollector/LdapDataCollector.php',
'OCA\\User_LDAP\\Db\\GroupMembership' => $baseDir . '/../lib/Db/GroupMembership.php',
'OCA\\User_LDAP\\Db\\GroupMembershipMapper' => $baseDir . '/../lib/Db/GroupMembershipMapper.php',
'OCA\\User_LDAP\\Events\\GroupBackendRegistered' => $baseDir . '/../lib/Events/GroupBackendRegistered.php',
'OCA\\User_LDAP\\Events\\UserBackendRegistered' => $baseDir . '/../lib/Events/UserBackendRegistered.php',
'OCA\\User_LDAP\\Exceptions\\AttributeNotSet' => $baseDir . '/../lib/Exceptions/AttributeNotSet.php',
'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => $baseDir . '/../lib/Exceptions/ConstraintViolationException.php',
'OCA\\User_LDAP\\Exceptions\\NoMoreResults' => $baseDir . '/../lib/Exceptions/NoMoreResults.php',
'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => $baseDir . '/../lib/Exceptions/NotOnLDAP.php',
'OCA\\User_LDAP\\FilesystemHelper' => $baseDir . '/../lib/FilesystemHelper.php',
'OCA\\User_LDAP\\GroupPluginManager' => $baseDir . '/../lib/GroupPluginManager.php',
'OCA\\User_LDAP\\Group_LDAP' => $baseDir . '/../lib/Group_LDAP.php',
'OCA\\User_LDAP\\Group_Proxy' => $baseDir . '/../lib/Group_Proxy.php',
'OCA\\User_LDAP\\Handler\\ExtStorageConfigHandler' => $baseDir . '/../lib/Handler/ExtStorageConfigHandler.php',
'OCA\\User_LDAP\\Helper' => $baseDir . '/../lib/Helper.php',
'OCA\\User_LDAP\\IGroupLDAP' => $baseDir . '/../lib/IGroupLDAP.php',
'OCA\\User_LDAP\\ILDAPGroupPlugin' => $baseDir . '/../lib/ILDAPGroupPlugin.php',
'OCA\\User_LDAP\\ILDAPUserPlugin' => $baseDir . '/../lib/ILDAPUserPlugin.php',
'OCA\\User_LDAP\\ILDAPWrapper' => $baseDir . '/../lib/ILDAPWrapper.php',
'OCA\\User_LDAP\\IUserLDAP' => $baseDir . '/../lib/IUserLDAP.php',
'OCA\\User_LDAP\\Jobs\\CleanUp' => $baseDir . '/../lib/Jobs/CleanUp.php',
'OCA\\User_LDAP\\Jobs\\Sync' => $baseDir . '/../lib/Jobs/Sync.php',
'OCA\\User_LDAP\\Jobs\\UpdateGroups' => $baseDir . '/../lib/Jobs/UpdateGroups.php',
'OCA\\User_LDAP\\LDAP' => $baseDir . '/../lib/LDAP.php',
'OCA\\User_LDAP\\LDAPProvider' => $baseDir . '/../lib/LDAPProvider.php',
'OCA\\User_LDAP\\LDAPProviderFactory' => $baseDir . '/../lib/LDAPProviderFactory.php',
'OCA\\User_LDAP\\LDAPUtility' => $baseDir . '/../lib/LDAPUtility.php',
'OCA\\User_LDAP\\LoginListener' => $baseDir . '/../lib/LoginListener.php',
'OCA\\User_LDAP\\Mapping\\AbstractMapping' => $baseDir . '/../lib/Mapping/AbstractMapping.php',
'OCA\\User_LDAP\\Mapping\\GroupMapping' => $baseDir . '/../lib/Mapping/GroupMapping.php',
'OCA\\User_LDAP\\Mapping\\UserMapping' => $baseDir . '/../lib/Mapping/UserMapping.php',
'OCA\\User_LDAP\\Migration\\GroupMappingMigration' => $baseDir . '/../lib/Migration/GroupMappingMigration.php',
'OCA\\User_LDAP\\Migration\\RemoveRefreshTime' => $baseDir . '/../lib/Migration/RemoveRefreshTime.php',
'OCA\\User_LDAP\\Migration\\SetDefaultProvider' => $baseDir . '/../lib/Migration/SetDefaultProvider.php',
'OCA\\User_LDAP\\Migration\\UUIDFix' => $baseDir . '/../lib/Migration/UUIDFix.php',
'OCA\\User_LDAP\\Migration\\UUIDFixGroup' => $baseDir . '/../lib/Migration/UUIDFixGroup.php',
'OCA\\User_LDAP\\Migration\\UUIDFixInsert' => $baseDir . '/../lib/Migration/UUIDFixInsert.php',
'OCA\\User_LDAP\\Migration\\UUIDFixUser' => $baseDir . '/../lib/Migration/UUIDFixUser.php',
'OCA\\User_LDAP\\Migration\\UnsetDefaultProvider' => $baseDir . '/../lib/Migration/UnsetDefaultProvider.php',
'OCA\\User_LDAP\\Migration\\Version1010Date20200630192842' => $baseDir . '/../lib/Migration/Version1010Date20200630192842.php',
'OCA\\User_LDAP\\Migration\\Version1120Date20210917155206' => $baseDir . '/../lib/Migration/Version1120Date20210917155206.php',
'OCA\\User_LDAP\\Migration\\Version1130Date20211102154716' => $baseDir . '/../lib/Migration/Version1130Date20211102154716.php',
'OCA\\User_LDAP\\Migration\\Version1130Date20220110154717' => $baseDir . '/../lib/Migration/Version1130Date20220110154717.php',
'OCA\\User_LDAP\\Migration\\Version1130Date20220110154718' => $baseDir . '/../lib/Migration/Version1130Date20220110154718.php',
'OCA\\User_LDAP\\Migration\\Version1130Date20220110154719' => $baseDir . '/../lib/Migration/Version1130Date20220110154719.php',
'OCA\\User_LDAP\\Migration\\Version1141Date20220323143801' => $baseDir . '/../lib/Migration/Version1141Date20220323143801.php',
'OCA\\User_LDAP\\Migration\\Version1190Date20230706134108' => $baseDir . '/../lib/Migration/Version1190Date20230706134108.php',
'OCA\\User_LDAP\\Migration\\Version1190Date20230706134109' => $baseDir . '/../lib/Migration/Version1190Date20230706134109.php',
'OCA\\User_LDAP\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
'OCA\\User_LDAP\\PagedResults\\TLinkId' => $baseDir . '/../lib/PagedResults/TLinkId.php',
'OCA\\User_LDAP\\Proxy' => $baseDir . '/../lib/Proxy.php',
'OCA\\User_LDAP\\Service\\UpdateGroupsService' => $baseDir . '/../lib/Service/UpdateGroupsService.php',
'OCA\\User_LDAP\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
'OCA\\User_LDAP\\Settings\\Section' => $baseDir . '/../lib/Settings/Section.php',
'OCA\\User_LDAP\\SetupChecks\\LdapInvalidUuids' => $baseDir . '/../lib/SetupChecks/LdapInvalidUuids.php',
'OCA\\User_LDAP\\UserPluginManager' => $baseDir . '/../lib/UserPluginManager.php',
'OCA\\User_LDAP\\User\\DeletedUsersIndex' => $baseDir . '/../lib/User/DeletedUsersIndex.php',
'OCA\\User_LDAP\\User\\Manager' => $baseDir . '/../lib/User/Manager.php',
'OCA\\User_LDAP\\User\\OfflineUser' => $baseDir . '/../lib/User/OfflineUser.php',
'OCA\\User_LDAP\\User\\User' => $baseDir . '/../lib/User/User.php',
'OCA\\User_LDAP\\User_LDAP' => $baseDir . '/../lib/User_LDAP.php',
'OCA\\User_LDAP\\User_Proxy' => $baseDir . '/../lib/User_Proxy.php',
'OCA\\User_LDAP\\Wizard' => $baseDir . '/../lib/Wizard.php',
'OCA\\User_LDAP\\WizardResult' => $baseDir . '/../lib/WizardResult.php',
);
@@ -0,0 +1,9 @@
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(
);
@@ -0,0 +1,10 @@
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(
'OCA\\User_LDAP\\' => array($baseDir . '/../lib'),
);
@@ -0,0 +1,37 @@
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInitUser_LDAP
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
/**
* @return \Composer\Autoload\ClassLoader
*/
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInitUser_LDAP', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInitUser_LDAP', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitUser_LDAP::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
return $loader;
}
}
@@ -0,0 +1,122 @@
<?php
// autoload_static.php @generated by Composer
namespace Composer\Autoload;
class ComposerStaticInitUser_LDAP
{
public static $prefixLengthsPsr4 = array (
'O' =>
array (
'OCA\\User_LDAP\\' => 14,
),
);
public static $prefixDirsPsr4 = array (
'OCA\\User_LDAP\\' =>
array (
0 => __DIR__ . '/..' . '/../lib',
),
);
public static $classMap = array (
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
'OCA\\User_LDAP\\Access' => __DIR__ . '/..' . '/../lib/Access.php',
'OCA\\User_LDAP\\AccessFactory' => __DIR__ . '/..' . '/../lib/AccessFactory.php',
'OCA\\User_LDAP\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
'OCA\\User_LDAP\\BackendUtility' => __DIR__ . '/..' . '/../lib/BackendUtility.php',
'OCA\\User_LDAP\\Command\\CheckGroup' => __DIR__ . '/..' . '/../lib/Command/CheckGroup.php',
'OCA\\User_LDAP\\Command\\CheckUser' => __DIR__ . '/..' . '/../lib/Command/CheckUser.php',
'OCA\\User_LDAP\\Command\\CreateEmptyConfig' => __DIR__ . '/..' . '/../lib/Command/CreateEmptyConfig.php',
'OCA\\User_LDAP\\Command\\DeleteConfig' => __DIR__ . '/..' . '/../lib/Command/DeleteConfig.php',
'OCA\\User_LDAP\\Command\\PromoteGroup' => __DIR__ . '/..' . '/../lib/Command/PromoteGroup.php',
'OCA\\User_LDAP\\Command\\ResetGroup' => __DIR__ . '/..' . '/../lib/Command/ResetGroup.php',
'OCA\\User_LDAP\\Command\\ResetUser' => __DIR__ . '/..' . '/../lib/Command/ResetUser.php',
'OCA\\User_LDAP\\Command\\Search' => __DIR__ . '/..' . '/../lib/Command/Search.php',
'OCA\\User_LDAP\\Command\\SetConfig' => __DIR__ . '/..' . '/../lib/Command/SetConfig.php',
'OCA\\User_LDAP\\Command\\ShowConfig' => __DIR__ . '/..' . '/../lib/Command/ShowConfig.php',
'OCA\\User_LDAP\\Command\\ShowRemnants' => __DIR__ . '/..' . '/../lib/Command/ShowRemnants.php',
'OCA\\User_LDAP\\Command\\TestConfig' => __DIR__ . '/..' . '/../lib/Command/TestConfig.php',
'OCA\\User_LDAP\\Command\\UpdateUUID' => __DIR__ . '/..' . '/../lib/Command/UpdateUUID.php',
'OCA\\User_LDAP\\Configuration' => __DIR__ . '/..' . '/../lib/Configuration.php',
'OCA\\User_LDAP\\Connection' => __DIR__ . '/..' . '/../lib/Connection.php',
'OCA\\User_LDAP\\ConnectionFactory' => __DIR__ . '/..' . '/../lib/ConnectionFactory.php',
'OCA\\User_LDAP\\Controller\\ConfigAPIController' => __DIR__ . '/..' . '/../lib/Controller/ConfigAPIController.php',
'OCA\\User_LDAP\\Controller\\RenewPasswordController' => __DIR__ . '/..' . '/../lib/Controller/RenewPasswordController.php',
'OCA\\User_LDAP\\DataCollector\\LdapDataCollector' => __DIR__ . '/..' . '/../lib/DataCollector/LdapDataCollector.php',
'OCA\\User_LDAP\\Db\\GroupMembership' => __DIR__ . '/..' . '/../lib/Db/GroupMembership.php',
'OCA\\User_LDAP\\Db\\GroupMembershipMapper' => __DIR__ . '/..' . '/../lib/Db/GroupMembershipMapper.php',
'OCA\\User_LDAP\\Events\\GroupBackendRegistered' => __DIR__ . '/..' . '/../lib/Events/GroupBackendRegistered.php',
'OCA\\User_LDAP\\Events\\UserBackendRegistered' => __DIR__ . '/..' . '/../lib/Events/UserBackendRegistered.php',
'OCA\\User_LDAP\\Exceptions\\AttributeNotSet' => __DIR__ . '/..' . '/../lib/Exceptions/AttributeNotSet.php',
'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => __DIR__ . '/..' . '/../lib/Exceptions/ConstraintViolationException.php',
'OCA\\User_LDAP\\Exceptions\\NoMoreResults' => __DIR__ . '/..' . '/../lib/Exceptions/NoMoreResults.php',
'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => __DIR__ . '/..' . '/../lib/Exceptions/NotOnLDAP.php',
'OCA\\User_LDAP\\FilesystemHelper' => __DIR__ . '/..' . '/../lib/FilesystemHelper.php',
'OCA\\User_LDAP\\GroupPluginManager' => __DIR__ . '/..' . '/../lib/GroupPluginManager.php',
'OCA\\User_LDAP\\Group_LDAP' => __DIR__ . '/..' . '/../lib/Group_LDAP.php',
'OCA\\User_LDAP\\Group_Proxy' => __DIR__ . '/..' . '/../lib/Group_Proxy.php',
'OCA\\User_LDAP\\Handler\\ExtStorageConfigHandler' => __DIR__ . '/..' . '/../lib/Handler/ExtStorageConfigHandler.php',
'OCA\\User_LDAP\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
'OCA\\User_LDAP\\IGroupLDAP' => __DIR__ . '/..' . '/../lib/IGroupLDAP.php',
'OCA\\User_LDAP\\ILDAPGroupPlugin' => __DIR__ . '/..' . '/../lib/ILDAPGroupPlugin.php',
'OCA\\User_LDAP\\ILDAPUserPlugin' => __DIR__ . '/..' . '/../lib/ILDAPUserPlugin.php',
'OCA\\User_LDAP\\ILDAPWrapper' => __DIR__ . '/..' . '/../lib/ILDAPWrapper.php',
'OCA\\User_LDAP\\IUserLDAP' => __DIR__ . '/..' . '/../lib/IUserLDAP.php',
'OCA\\User_LDAP\\Jobs\\CleanUp' => __DIR__ . '/..' . '/../lib/Jobs/CleanUp.php',
'OCA\\User_LDAP\\Jobs\\Sync' => __DIR__ . '/..' . '/../lib/Jobs/Sync.php',
'OCA\\User_LDAP\\Jobs\\UpdateGroups' => __DIR__ . '/..' . '/../lib/Jobs/UpdateGroups.php',
'OCA\\User_LDAP\\LDAP' => __DIR__ . '/..' . '/../lib/LDAP.php',
'OCA\\User_LDAP\\LDAPProvider' => __DIR__ . '/..' . '/../lib/LDAPProvider.php',
'OCA\\User_LDAP\\LDAPProviderFactory' => __DIR__ . '/..' . '/../lib/LDAPProviderFactory.php',
'OCA\\User_LDAP\\LDAPUtility' => __DIR__ . '/..' . '/../lib/LDAPUtility.php',
'OCA\\User_LDAP\\LoginListener' => __DIR__ . '/..' . '/../lib/LoginListener.php',
'OCA\\User_LDAP\\Mapping\\AbstractMapping' => __DIR__ . '/..' . '/../lib/Mapping/AbstractMapping.php',
'OCA\\User_LDAP\\Mapping\\GroupMapping' => __DIR__ . '/..' . '/../lib/Mapping/GroupMapping.php',
'OCA\\User_LDAP\\Mapping\\UserMapping' => __DIR__ . '/..' . '/../lib/Mapping/UserMapping.php',
'OCA\\User_LDAP\\Migration\\GroupMappingMigration' => __DIR__ . '/..' . '/../lib/Migration/GroupMappingMigration.php',
'OCA\\User_LDAP\\Migration\\RemoveRefreshTime' => __DIR__ . '/..' . '/../lib/Migration/RemoveRefreshTime.php',
'OCA\\User_LDAP\\Migration\\SetDefaultProvider' => __DIR__ . '/..' . '/../lib/Migration/SetDefaultProvider.php',
'OCA\\User_LDAP\\Migration\\UUIDFix' => __DIR__ . '/..' . '/../lib/Migration/UUIDFix.php',
'OCA\\User_LDAP\\Migration\\UUIDFixGroup' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixGroup.php',
'OCA\\User_LDAP\\Migration\\UUIDFixInsert' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixInsert.php',
'OCA\\User_LDAP\\Migration\\UUIDFixUser' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixUser.php',
'OCA\\User_LDAP\\Migration\\UnsetDefaultProvider' => __DIR__ . '/..' . '/../lib/Migration/UnsetDefaultProvider.php',
'OCA\\User_LDAP\\Migration\\Version1010Date20200630192842' => __DIR__ . '/..' . '/../lib/Migration/Version1010Date20200630192842.php',
'OCA\\User_LDAP\\Migration\\Version1120Date20210917155206' => __DIR__ . '/..' . '/../lib/Migration/Version1120Date20210917155206.php',
'OCA\\User_LDAP\\Migration\\Version1130Date20211102154716' => __DIR__ . '/..' . '/../lib/Migration/Version1130Date20211102154716.php',
'OCA\\User_LDAP\\Migration\\Version1130Date20220110154717' => __DIR__ . '/..' . '/../lib/Migration/Version1130Date20220110154717.php',
'OCA\\User_LDAP\\Migration\\Version1130Date20220110154718' => __DIR__ . '/..' . '/../lib/Migration/Version1130Date20220110154718.php',
'OCA\\User_LDAP\\Migration\\Version1130Date20220110154719' => __DIR__ . '/..' . '/../lib/Migration/Version1130Date20220110154719.php',
'OCA\\User_LDAP\\Migration\\Version1141Date20220323143801' => __DIR__ . '/..' . '/../lib/Migration/Version1141Date20220323143801.php',
'OCA\\User_LDAP\\Migration\\Version1190Date20230706134108' => __DIR__ . '/..' . '/../lib/Migration/Version1190Date20230706134108.php',
'OCA\\User_LDAP\\Migration\\Version1190Date20230706134109' => __DIR__ . '/..' . '/../lib/Migration/Version1190Date20230706134109.php',
'OCA\\User_LDAP\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
'OCA\\User_LDAP\\PagedResults\\TLinkId' => __DIR__ . '/..' . '/../lib/PagedResults/TLinkId.php',
'OCA\\User_LDAP\\Proxy' => __DIR__ . '/..' . '/../lib/Proxy.php',
'OCA\\User_LDAP\\Service\\UpdateGroupsService' => __DIR__ . '/..' . '/../lib/Service/UpdateGroupsService.php',
'OCA\\User_LDAP\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
'OCA\\User_LDAP\\Settings\\Section' => __DIR__ . '/..' . '/../lib/Settings/Section.php',
'OCA\\User_LDAP\\SetupChecks\\LdapInvalidUuids' => __DIR__ . '/..' . '/../lib/SetupChecks/LdapInvalidUuids.php',
'OCA\\User_LDAP\\UserPluginManager' => __DIR__ . '/..' . '/../lib/UserPluginManager.php',
'OCA\\User_LDAP\\User\\DeletedUsersIndex' => __DIR__ . '/..' . '/../lib/User/DeletedUsersIndex.php',
'OCA\\User_LDAP\\User\\Manager' => __DIR__ . '/..' . '/../lib/User/Manager.php',
'OCA\\User_LDAP\\User\\OfflineUser' => __DIR__ . '/..' . '/../lib/User/OfflineUser.php',
'OCA\\User_LDAP\\User\\User' => __DIR__ . '/..' . '/../lib/User/User.php',
'OCA\\User_LDAP\\User_LDAP' => __DIR__ . '/..' . '/../lib/User_LDAP.php',
'OCA\\User_LDAP\\User_Proxy' => __DIR__ . '/..' . '/../lib/User_Proxy.php',
'OCA\\User_LDAP\\Wizard' => __DIR__ . '/..' . '/../lib/Wizard.php',
'OCA\\User_LDAP\\WizardResult' => __DIR__ . '/..' . '/../lib/WizardResult.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitUser_LDAP::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitUser_LDAP::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitUser_LDAP::$classMap;
}, null, ClassLoader::class);
}
}
@@ -0,0 +1,5 @@
{
"packages": [],
"dev": false,
"dev-package-names": []
}
@@ -0,0 +1,23 @@
<?php return array(
'root' => array(
'name' => '__root__',
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'reference' => '722b062d3fb372799000591b8d23d3b65a4e50db',
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'dev' => false,
),
'versions' => array(
'__root__' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'reference' => '722b062d3fb372799000591b8d23d3b65a4e50db',
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'dev_requirement' => false,
),
),
);
@@ -0,0 +1,145 @@
#personal-show + label {
left: 230px !important;
margin-top: 8px !important;
box-sizing: border-box;
}
#renewpassword .strengthify-wrapper {
left: 10px;
margin-top: 65px;
position: absolute;
width: 219px;
}
#cancel-container p.info {
margin-top: 10px;
text-align: center;
}
#renewpassword .title {
background-color: transparent;
}
.tooltip {
position:absolute;
display:block;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
font-style:normal;
font-weight:400;
letter-spacing:normal;
line-break:auto;
line-height:1.6;
text-align:left;
text-align:start;
text-decoration:none;
text-shadow:none;
text-transform:none;
white-space:normal;
word-break:normal;
word-spacing:normal;
word-wrap:normal;
font-size:12px;
opacity:0;
z-index:100000;
filter:drop-shadow(0 1px 10px rgba(77, 77, 77, 0.75));
}
.tooltip.in {
opacity:1
}
.tooltip.top {
margin-top:-3px;
padding:10px 0
}
.tooltip.bottom {
margin-top:3px;
padding:10px 0
}
.tooltip.right {
margin-left:3px;
padding:0 10px
}
.tooltip.right .tooltip-arrow {
top:50%;
left:0;
margin-top:-10px;
border-width:10px 10px 10px 0;
border-right-color:#fff
}
.tooltip.left {
margin-left:-3px;
padding:0 5px
}
.tooltip.left .tooltip-arrow {
top:50%;
right:0;
margin-top:-10px;
border-width:10px 0 10px 10px;
border-left-color:#fff
}
.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow {
bottom:0;
border-width:10px 10px 0;
border-top-color:#fff
}
.tooltip.top .tooltip-arrow {
left:50%;
margin-left:-10px
}
.tooltip.top-left .tooltip-arrow {
right:10px;
margin-bottom:-10px
}
.tooltip.top-right .tooltip-arrow {
left:10px;
margin-bottom:-10px
}
.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow {
top:0;
border-width:0 10px 10px;
border-bottom-color:#fff
}
.tooltip.bottom .tooltip-arrow {
left:50%;
margin-left:-10px
}
.tooltip.bottom-left .tooltip-arrow {
right:10px;
margin-top:-10px
}
.tooltip.bottom-right .tooltip-arrow {
left:10px;
margin-top:-10px
}
.tooltip-inner {
max-width:350px;
padding:5px 8px !important;
background-color:#fff;
color:#000 !important;
text-align:center !important;
font-weight:normal !important;
border-radius:3px
}
.tooltip-arrow {
position:absolute;
width:0;
height:0;
border-color:transparent;
border-style:solid
}
@@ -0,0 +1,220 @@
.table {
display: table;
width: 85%;
}
.inlinetable {
display: inline-table;
vertical-align: bottom;
}
.tablerow {
display: flex;
align-items: center;
white-space: nowrap;
text-align: left;
}
.tablerow input, .tablerow textarea {
width: 100% !important;
}
.tablerow textarea {
height: 15px;
}
#ldap .tablerow label {
margin-left: 3px;
}
.ldapIconCopy {
background-image: url('../img/copy.svg');
}
.invisible {
visibility: hidden;
}
.forceHidden {
display: none !important;
}
.ldapSettingsTabs {
float: right !important;
}
.ldapWizardControls {
width: 60%;
text-align: right;
}
.ldapWizardInfo {
width: 100% !important;
height: 50px;
background-color: lightyellow;
border-radius: 8px;
padding: 10px 8px 6px !important;
margin-bottom: 5px;
}
#ldapWizard1 .hostPortCombinator {
width: 60%;
display: table;
}
#ldapWizard1 .hostPortCombinatorSpan {
width: 14.5%;
display: inline-block;
text-align: right;
}
#ldapWizard1 .host {
width: 100%;
margin-left: 0;
margin-right: 0;
}
.tableCellInput {
margin-left: -40%;
width: 100%;
}
.tableCellLabel {
text-align: right;
padding-right: 25%;
}
.ldapIndent {
margin-left: 50px;
}
.ldapwarning {
margin-left: 22px;
color: #FF3B3B;
}
.ldapSpinner {
height: 15px;
margin: 5px;
}
.ldap_count {
line-height: 45px;
}
.ldapSettingControls {
margin-top: 3px;
}
#ldap fieldset p label {
width: 20%;
max-width: 200px;
display: inline-block;
vertical-align: top;
text-align: right;
padding-top: 9px;
padding-right: 5px;
}
#ldap fieldset input[type=submit] {
width: auto;
}
.ldapManyGroupsSupport .buttonSpan {
display: inline-block;
vertical-align: top;
height: 150px;
}
.ldapManyGroupsSupport .buttonSpan button {
margin-top: 35px;
}
.ldapManyGroupsSearch {
width: 425px !important;
}
.ldapGroupList {
height: 150px;
width: 200px;
}
#ldap fieldset input, #ldap fieldset textarea {
width: 60%;
}
#ldap fieldset textarea ~ button {
vertical-align: text-bottom;
}
input.ldapVerifyInput {
width: 150px !important;
}
.ldapInputColElement {
width: 35%;
display: inline-block;
padding-left: 10px;
}
.ldapToggle {
text-decoration: underline;
}
span.ldapInputColElement {
margin-top: 9px;
}
#ldap fieldset p input[type=checkbox] {
vertical-align: bottom;
}
#ldap input[type=checkbox] {
width: 15px !important;
}
select[multiple=multiple] + button {
height: 28px;
padding-top: 6px !important;
min-width: 40%;
max-width: 40%;
}
.save-cursor {
cursor: wait;
}
#ldap .ldap_saving {
margin-right: 15px;
color: orange;
font-weight: bold;
}
#ldap .ldap_saving img { height: 15px; }
.ldap_config_state_indicator_sign {
display: inline-block;
height: 16px;
width: 16px;
vertical-align: text-bottom;
}
.ldap_config_state_indicator_sign.success {
background: #37ce02;
border-radius: 8px;
}
.ldap_config_state_indicator_sign.error {
background: #ce3702;
}
.ldap_grey {
color: #777;
}
#ldapSettings {
padding: 0;
}
ul.ui-multiselect-checkboxes label {
display: flex;
align-items: center;
}
@@ -0,0 +1,23 @@
.ui-multiselect { padding:2px 0 2px 4px; text-align:left; }
.ui-multiselect span.ui-icon { float:right; }
.ui-multiselect-single .ui-multiselect-checkboxes input { position:absolute !important; top: auto !important; left:-9999px; }
.ui-multiselect-single .ui-multiselect-checkboxes label { padding:5px !important; }
.ui-multiselect-header { margin-bottom:3px; padding:3px 0 3px 4px; }
.ui-multiselect-header ul { font-size:14px; }
.ui-multiselect-header ul li { float:left; padding:0 10px 0 0; }
.ui-multiselect-header a { text-decoration:none; }
.ui-multiselect-header a:hover { text-decoration:underline; }
.ui-multiselect-header span.ui-icon { float:left;}
.ui-multiselect-header li.ui-multiselect-close { float:right; text-align:right; padding-right:0; }
.ui-multiselect-menu { display:none; padding:3px; position:absolute; z-index:10000; text-align: left; }
.ui-multiselect-checkboxes { position:relative /* fixes bug in IE6/7 */; overflow-y:scroll; }
.ui-multiselect-checkboxes label { cursor:default; display:block; border:1px solid transparent; padding:3px 1px; }
.ui-multiselect-checkboxes label input { position:relative; top:1px; }
.ui-multiselect-checkboxes li { clear:both; font-size:14px; padding-right:3px; }
.ui-multiselect-checkboxes li.ui-multiselect-optgroup-label { text-align:center; font-weight:bold; border-bottom:1px solid; }
.ui-multiselect-checkboxes li.ui-multiselect-optgroup-label a { display:block; padding:3px; margin:1px 0; text-decoration:none; }
/* remove label borders in IE6 because IE6 does not support transparency */
* html .ui-multiselect-checkboxes label { border:none; }
@@ -0,0 +1 @@
<svg width="16" height="16" version="1.0" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8.4036 1c-1.7312 0-3.1998 1.2661-3.1998 2.9 0.012287 0.51643 0.058473 1.1532 0.36664 2.5v0.033333l0.033328 0.033333c0.098928 0.28338 0.24289 0.44549 0.4333 0.66666s0.41742 0.48149 0.63328 0.69999c0.025397 0.025708 0.041676 0.041633 0.066656 0.066677 0.04281 0.18631 0.094672 0.38681 0.13332 0.56666 0.10284 0.47851 0.092296 0.81737 0.066668 0.93332-0.74389 0.26121-1.6694 0.57228-2.4998 0.93332-0.46622 0.2027-0.8881 0.3837-1.2332 0.59999-0.34513 0.2163-0.68837 0.37971-0.79994 0.86666-0.16004 0.63293-0.19866 0.7539-0.39997 1.5333-0.027212 0.20914 0.083011 0.42961 0.26665 0.53333 1.5078 0.81451 3.824 1.1423 6.1329 1.1333s4.6066-0.35609 6.0662-1.1333c0.11739-0.07353 0.14304-0.10869 0.13332-0.2333-0.04365-0.68908-0.08154-1.3669-0.13332-1.7666-0.01807-0.09908-0.06492-0.19275-0.13332-0.26666-0.46366-0.5537-1.1564-0.89218-1.9665-1.2333-0.7396-0.31144-1.6067-0.63486-2.4665-0.99999-0.048123-0.10721-0.095926-0.41912 0-0.89999 0.025759-0.12912 0.066096-0.26742 0.099994-0.4 0.0808-0.090507 0.14378-0.16447 0.23332-0.26666 0.19096-0.21796 0.39614-0.44661 0.56662-0.66666s0.30996-0.40882 0.39997-0.66666l0.03333-0.033333c0.34839-1.4062 0.34857-1.9929 0.36664-2.5v-0.033333c0-1.6339-1.4686-2.9-3.1998-2.9z" color="#000000" style="block-progression:tb;text-indent:0;text-transform:none"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+1
View File
@@ -0,0 +1 @@
<svg width="16" height="16" version="1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m-62.897-32.993h163.31v97.986h-163.31z" fill="none"/><path d="M8.404 1c-1.732 0-3.2 1.266-3.2 2.9.012.516.058 1.153.366 2.5v.033l.034.034c.1.283.243.445.433.666s.417.482.633.7l.067.067c.043.186.095.387.133.567.103.478.093.817.067.933-.744.26-1.67.572-2.5.933-.466.203-.888.384-1.233.6-.345.217-.688.38-.8.867-.16.633-.2.754-.4 1.533-.027.21.083.43.267.534C3.78 14.68 6.096 15.01 8.405 15s4.606-.356 6.066-1.133c.117-.074.143-.11.133-.234-.043-.69-.08-1.367-.133-1.766a.537.537 0 0 0-.133-.267c-.464-.554-1.157-.892-1.967-1.233-.74-.312-1.607-.635-2.466-1-.05-.107-.096-.42 0-.9.025-.13.066-.268.1-.4.08-.09.143-.165.233-.267.19-.218.396-.447.566-.667s.31-.408.4-.666l.034-.034c.348-1.406.348-1.992.366-2.5V3.9c0-1.634-1.468-2.9-3.2-2.9z" fill="#fff" style="block-progression:tb;text-indent:0;text-transform:none"/></svg>

After

Width:  |  Height:  |  Size: 925 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 B

+1
View File
@@ -0,0 +1 @@
<svg width="16px" height="16px" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g stroke-linejoin="round"><g><path transform="scale(.26667)" d="m8.1738 4.6875c-0.64453 0-1.2598 0.24902-1.6992 0.70312-0.4541 0.4541-0.70312 1.0547-0.70312 1.6992v30.674c0 0.64453 0.24902 1.2451 0.70312 1.6992 0.4541 0.4541 1.0547 0.70312 1.6992 0.70312h28.945c0.62988 0 1.2451-0.24902 1.6992-0.70312 0.4541-0.4541 0.70312-1.0547 0.70312-1.6992v-30.674c0-0.64453-0.24902-1.2451-0.70312-1.6992-0.4541-0.4541-1.0693-0.70312-1.6992-0.70312z" fill="none" stroke="#fff" stroke-width="8.1255"/><path transform="scale(.26667)" d="m8.1738 4.6875c-0.64453 0-1.2598 0.24902-1.6992 0.70312-0.4541 0.4541-0.70312 1.0547-0.70312 1.6992v30.674c0 0.64453 0.24902 1.2451 0.70312 1.6992 0.4541 0.4541 1.0547 0.70312 1.6992 0.70312h28.945c0.62988 0 1.2451-0.24902 1.6992-0.70312 0.4541-0.4541 0.70312-1.0547 0.70312-1.6992v-30.674c0-0.64453-0.24902-1.2451-0.70312-1.6992-0.4541-0.4541-1.0693-0.70312-1.6992-0.70312z" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="3.1254"/><path transform="scale(.26667)" d="m22.881 19.834c-0.62988 0-1.2451 0.24902-1.6992 0.70312-0.4541 0.4541-0.70312 1.0547-0.70312 1.6992v30.674c0 0.64453 0.24902 1.2451 0.70312 1.6992 0.4541 0.4541 1.0693 0.70312 1.6992 0.70312h28.945c0.64453 0 1.2598-0.24902 1.6992-0.70312 0.4541-0.4541 0.70312-1.0547 0.70312-1.6992v-30.674c0-0.64453-0.24902-1.2451-0.70312-1.6992-0.43945-0.4541-1.0547-0.70312-1.6992-0.70312z" fill="none" stroke="#fff" stroke-width="8.1255"/><path transform="scale(.26667)" d="m22.881 19.834c-0.62988 0-1.2451 0.24902-1.6992 0.70312-0.4541 0.4541-0.70312 1.0547-0.70312 1.6992v30.674c0 0.64453 0.24902 1.2451 0.70312 1.6992 0.4541 0.4541 1.0693 0.70312 1.6992 0.70312h28.945c0.64453 0 1.2598-0.24902 1.6992-0.70312 0.4541-0.4541 0.70312-1.0547 0.70312-1.6992v-30.674c0-0.64453-0.24902-1.2451-0.70312-1.6992-0.43945-0.4541-1.0547-0.70312-1.6992-0.70312z" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="3.1254"/></g><path transform="scale(.26667)" d="m12.451 21.606c2.3291 20.522 20.156 19.146 21.299 19.028v6.1523l8.9795-8.8916-8.9795-8.877v6.0645c-1.3477 0.16113-13.931 1.4209-21.299-13.491zm0 0" fill="none" stroke="#fff" stroke-linecap="round" stroke-width="8.125"/><path transform="scale(.26667)" d="m12.451 21.606c2.3291 20.522 20.156 19.146 21.299 19.028v6.1523l8.9795-8.8916-8.9795-8.877v6.0645c-1.3477 0.16113-13.931 1.4209-21.299-13.491zm0 0" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-width="3.125"/></g></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -0,0 +1,51 @@
/**
*
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
*
* @license AGPL-3.0-or-later
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
OCA = OCA || {};
OCA.LDAP = _.extend(OC.LDAP || {}, {
onRenewPassword: function () {
$('#submit')
.removeClass('icon-confirm-white')
.addClass('icon-loading-small')
.attr('value', t('core', 'Renewing …'));
return true;
},
});
window.addEventListener('DOMContentLoaded', function() {
$('form[name=renewpassword]').submit(OCA.LDAP.onRenewPassword);
if($('#newPassword').length) {
$('#newPassword').showPassword().keyup();
}
$('#newPassword').strengthify({
zxcvbn: OC.linkTo('core','vendor/zxcvbn/dist/zxcvbn.js'),
titles: [
t('core', 'Very weak password'),
t('core', 'Weak password'),
t('core', 'So-so password'),
t('core', 'Good password'),
t('core', 'Strong password')
],
drawTitles: true,
$addAfter: $('input[name="newPassword-clone"]'),
});
});
@@ -0,0 +1,20 @@
Copyright (c) 2011 Eric Hynds
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,705 @@
/* jshint forin:true, noarg:true, noempty:true, eqeqeq:true, boss:true, undef:true, curly:true, browser:true, jquery:true */
/*
* jQuery MultiSelect UI Widget 1.13
* Copyright (c) 2012 Eric Hynds
*
* http://www.erichynds.com/jquery/jquery-ui-multiselect-widget/
*
* Depends:
* - jQuery 1.4.2+
* - jQuery UI 1.8 widget factory
*
* Optional:
* - jQuery UI effects
* - jQuery UI position utility
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
(function($, undefined){
var multiselectID = 0;
$.widget("ech.multiselect", {
// default options
options: {
header: true,
height: 175,
minWidth: 225,
classes: '',
checkAllText: 'Check all',
uncheckAllText: 'Uncheck all',
noneSelectedText: 'Select options',
selectedText: '# selected',
selectedList: 0,
show: null,
hide: null,
autoOpen: false,
multiple: true,
position: {}
},
_create: function(){
var el = this.element.hide(),
o = this.options;
this.speed = $.fx.speeds._default; // default speed for effects
this._isOpen = false; // assume no
var
button = (this.button = $('<button type="button"><span class="ui-icon ui-icon-triangle-2-n-s"></span></button>'))
.addClass('ui-multiselect ui-widget ui-state-default ui-corner-all')
.addClass( o.classes )
.attr({ 'title':el.attr('title'), 'aria-haspopup':true, 'tabIndex':el.attr('tabIndex') })
.insertAfter( el ),
buttonlabel = (this.buttonlabel = $('<span />'))
.html( o.noneSelectedText )
.appendTo( button ),
menu = (this.menu = $('<div />'))
.addClass('ui-multiselect-menu ui-widget ui-widget-content ui-corner-all')
.addClass( o.classes )
.appendTo( document.body ),
header = (this.header = $('<div />'))
.addClass('ui-widget-header ui-corner-all ui-multiselect-header ui-helper-clearfix')
.appendTo( menu ),
headerLinkContainer = (this.headerLinkContainer = $('<ul />'))
.addClass('ui-helper-reset')
.html(function(){
if( o.header === true ){
return '<li><a class="ui-multiselect-all" href="#"><span class="ui-icon ui-icon-check"></span><span>' + o.checkAllText + '</span></a></li><li><a class="ui-multiselect-none" href="#"><span class="ui-icon ui-icon-closethick"></span><span>' + o.uncheckAllText + '</span></a></li>';
} else if(typeof o.header === "string"){
return '<li>' + o.header + '</li>';
} else {
return '';
}
})
.append('<li class="ui-multiselect-close"><a href="#" class="ui-multiselect-close"><span class="ui-icon ui-icon-circle-close"></span></a></li>')
.appendTo( header ),
checkboxContainer = (this.checkboxContainer = $('<ul />'))
.addClass('ui-multiselect-checkboxes ui-helper-reset')
.appendTo( menu );
// perform event bindings
this._bindEvents();
// build menu
this.refresh( true );
// some addl. logic for single selects
if( !o.multiple ){
menu.addClass('ui-multiselect-single');
}
},
_init: function(){
if( this.options.header === false ){
this.header.hide();
}
if( !this.options.multiple ){
this.headerLinkContainer.find('.ui-multiselect-all, .ui-multiselect-none').hide();
}
if( this.options.autoOpen ){
this.open();
}
if( this.element.is(':disabled') ){
this.disable();
}
},
refresh: function( init ){
var el = this.element,
o = this.options,
menu = this.menu,
checkboxContainer = this.checkboxContainer,
optgroups = [],
html = "",
id = el.attr('id') || multiselectID++; // unique ID for the label & option tags
// build items
el.find('option').each(function( i ){
var $this = $(this),
parent = this.parentNode,
title = this.innerHTML,
description = this.title,
value = this.value,
inputID = 'ui-multiselect-' + (this.id || id + '-option-' + i),
isDisabled = this.disabled,
isSelected = this.selected,
labelClasses = [ 'ui-corner-all' ],
liClasses = (isDisabled ? 'ui-multiselect-disabled ' : ' ') + this.className,
optLabel;
// is this an optgroup?
if( parent.tagName === 'OPTGROUP' ){
optLabel = parent.getAttribute( 'label' );
// has this optgroup been added already?
if( $.inArray(optLabel, optgroups) === -1 ){
html += '<li class="ui-multiselect-optgroup-label ' + parent.className + '"><a href="#">' + optLabel + '</a></li>';
optgroups.push( optLabel );
}
}
if( isDisabled ){
labelClasses.push( 'ui-state-disabled' );
}
// browsers automatically select the first option
// by default with single selects
if( isSelected && !o.multiple ){
labelClasses.push( 'ui-state-active' );
}
html += '<li class="' + liClasses + '">';
// create the label
html += '<label for="' + inputID + '" title="' + description + '" class="' + labelClasses.join(' ') + '">';
html += '<input id="' + inputID + '" name="multiselect_' + id + '" type="' + (o.multiple ? "checkbox" : "radio") + '" value="' + value + '" title="' + title + '"';
// pre-selected?
if( isSelected ){
html += ' checked="checked"';
html += ' aria-selected="true"';
}
// disabled?
if( isDisabled ){
html += ' disabled="disabled"';
html += ' aria-disabled="true"';
}
// add the title and close everything off
html += ' /><span>' + title + '</span></label></li>';
});
// insert into the DOM
checkboxContainer.html( html );
// cache some moar useful elements
this.labels = menu.find('label');
this.inputs = this.labels.children('input');
// set widths
this._setButtonWidth();
this._setMenuWidth();
// remember default value
this.button[0].defaultValue = this.update();
// broadcast refresh event; useful for widgets
if( !init ){
this._trigger('refresh');
}
},
// updates the button text. call refresh() to rebuild
update: function(){
var o = this.options,
$inputs = this.inputs,
$checked = $inputs.filter(':checked'),
numChecked = $checked.length,
value;
if( numChecked === 0 ){
value = o.noneSelectedText;
} else {
if($.isFunction( o.selectedText )){
value = o.selectedText.call(this, numChecked, $inputs.length, $checked.get());
} else if( /\d/.test(o.selectedList) && o.selectedList > 0 && numChecked <= o.selectedList){
value = $checked.map(function(){ return $(this).next().html(); }).get().join(', ');
} else {
value = o.selectedText.replace('#', numChecked).replace('#', $inputs.length);
}
}
this.buttonlabel.html( value );
return value;
},
// binds events
_bindEvents: function(){
var self = this, button = this.button;
function clickHandler(){
self[ self._isOpen ? 'close' : 'open' ]();
return false;
}
// webkit doesn't like it when you click on the span :(
button
.find('span')
.bind('click.multiselect', clickHandler);
// button events
button.bind({
click: clickHandler,
keypress: function( e ){
switch(e.which){
case 27: // esc
case 38: // up
case 37: // left
self.close();
break;
case 39: // right
case 40: // down
self.open();
break;
}
},
mouseenter: function(){
if( !button.hasClass('ui-state-disabled') ){
$(this).addClass('ui-state-hover');
}
},
mouseleave: function(){
$(this).removeClass('ui-state-hover');
},
focus: function(){
if( !button.hasClass('ui-state-disabled') ){
$(this).addClass('ui-state-focus');
}
},
blur: function(){
$(this).removeClass('ui-state-focus');
}
});
// header links
this.header
.delegate('a', 'click.multiselect', function( e ){
// close link
if( $(this).hasClass('ui-multiselect-close') ){
self.close();
// check all / uncheck all
} else {
self[ $(this).hasClass('ui-multiselect-all') ? 'checkAll' : 'uncheckAll' ]();
}
e.preventDefault();
});
// optgroup label toggle support
this.menu
.delegate('li.ui-multiselect-optgroup-label a', 'click.multiselect', function( e ){
e.preventDefault();
var $this = $(this),
$inputs = $this.parent().nextUntil('li.ui-multiselect-optgroup-label').find('input:visible:not(:disabled)'),
nodes = $inputs.get(),
label = $this.parent().text();
// trigger event and bail if the return is false
if( self._trigger('beforeoptgrouptoggle', e, { inputs:nodes, label:label }) === false ){
return;
}
// toggle inputs
self._toggleChecked(
$inputs.filter(':checked').length !== $inputs.length,
$inputs
);
self._trigger('optgrouptoggle', e, {
inputs: nodes,
label: label,
checked: nodes[0].checked
});
})
.delegate('label', 'mouseenter.multiselect', function(){
if( !$(this).hasClass('ui-state-disabled') ){
self.labels.removeClass('ui-state-hover');
$(this).addClass('ui-state-hover').find('input').focus();
}
})
.delegate('label', 'keydown.multiselect', function( e ){
e.preventDefault();
switch(e.which){
case 9: // tab
case 27: // esc
self.close();
break;
case 38: // up
case 40: // down
case 37: // left
case 39: // right
self._traverse(e.which, this);
break;
case 13: // enter
$(this).find('input')[0].click();
break;
}
})
.delegate('input[type="checkbox"], input[type="radio"]', 'click.multiselect', function( e ){
var $this = $(this),
val = this.value,
checked = this.checked,
tags = self.element.find('option');
// bail if this input is disabled or the event is cancelled
if( this.disabled || self._trigger('click', e, { value: val, text: this.title, checked: checked }) === false ){
e.preventDefault();
return;
}
// make sure the input has focus. otherwise, the esc key
// won't close the menu after clicking an item.
$this.focus();
// toggle aria state
$this.attr('aria-selected', checked);
// change state on the original option tags
tags.each(function(){
if( this.value === val ){
this.selected = checked;
} else if( !self.options.multiple ){
this.selected = false;
}
});
// some additional single select-specific logic
if( !self.options.multiple ){
self.labels.removeClass('ui-state-active');
$this.closest('label').toggleClass('ui-state-active', checked );
// close menu
self.close();
}
// fire change on the select box
self.element.trigger("change");
// setTimeout is to fix multiselect issue #14 and #47. caused by jQuery issue #3827
// http://bugs.jquery.com/ticket/3827
setTimeout($.proxy(self.update, self), 10);
});
// close each widget when clicking on any other element/anywhere else on the page
$(document).bind('mousedown.multiselect', function( e ){
if(self._isOpen && !$.contains(self.menu[0], e.target) && !$.contains(self.button[0], e.target) && e.target !== self.button[0]){
self.close();
}
});
// deal with form resets. the problem here is that buttons aren't
// restored to their defaultValue prop on form reset, and the reset
// handler fires before the form is actually reset. delaying it a bit
// gives the form inputs time to clear.
$(this.element[0].form).bind('reset.multiselect', function(){
setTimeout($.proxy(self.refresh, self), 10);
});
},
// set button width
_setButtonWidth: function(){
var width = this.element.outerWidth(),
o = this.options;
if( /\d/.test(o.minWidth) && width < o.minWidth){
width = o.minWidth;
}
// set widths
this.button.width( width );
},
// set menu width
_setMenuWidth: function(){
var m = this.menu,
width = this.button.outerWidth()-
parseInt(m.css('padding-left'),10)-
parseInt(m.css('padding-right'),10)-
parseInt(m.css('border-right-width'),10)-
parseInt(m.css('border-left-width'),10);
m.width( width || this.button.outerWidth() );
},
// move up or down within the menu
_traverse: function( which, start ){
var $start = $(start),
moveToLast = which === 38 || which === 37,
// select the first li that isn't an optgroup label / disabled
$next = $start.parent()[moveToLast ? 'prevAll' : 'nextAll']('li:not(.ui-multiselect-disabled, .ui-multiselect-optgroup-label)')[ moveToLast ? 'last' : 'first']();
// if at the first/last element
if( !$next.length ){
var $container = this.menu.find('ul').last();
// move to the first/last
this.menu.find('label')[ moveToLast ? 'last' : 'first' ]().trigger('mouseover');
// set scroll position
$container.scrollTop( moveToLast ? $container.height() : 0 );
} else {
$next.find('label').trigger('mouseover');
}
},
// This is an internal function to toggle the checked property and
// other related attributes of a checkbox.
//
// The context of this function should be a checkbox; do not proxy it.
_toggleState: function( prop, flag ){
return function(){
if( !this.disabled ) {
this[ prop ] = flag;
}
if( flag ){
this.setAttribute('aria-selected', true);
} else {
this.removeAttribute('aria-selected');
}
};
},
_toggleChecked: function( flag, group ){
var $inputs = (group && group.length) ? group : this.inputs,
self = this;
// toggle state on inputs
$inputs.each(this._toggleState('checked', flag));
// give the first input focus
$inputs.eq(0).focus();
// update button text
this.update();
// gather an array of the values that actually changed
var values = $inputs.map(function(){
return this.value;
}).get();
// toggle state on original option tags
this.element
.find('option')
.each(function(){
if( !this.disabled && $.inArray(this.value, values) > -1 ){
self._toggleState('selected', flag).call( this );
}
});
// trigger the change event on the select
if( $inputs.length ) {
this.element.trigger("change");
}
},
_toggleDisabled: function( flag ){
this.button
.attr({ 'disabled':flag, 'aria-disabled':flag })[ flag ? 'addClass' : 'removeClass' ]('ui-state-disabled');
var inputs = this.menu.find('input');
var key = "ech-multiselect-disabled";
if(flag) {
// remember which elements this widget disabled (not pre-disabled)
// elements, so that they can be restored if the widget is re-enabled.
inputs = inputs.filter(':enabled')
.data(key, true)
} else {
inputs = inputs.filter(function() {
return $.data(this, key) === true;
}).removeData(key);
}
inputs
.attr({ 'disabled':flag, 'arial-disabled':flag })
.parent()[ flag ? 'addClass' : 'removeClass' ]('ui-state-disabled');
this.element
.attr({ 'disabled':flag, 'aria-disabled':flag });
},
// open the menu
open: function( e ){
var self = this,
button = this.button,
menu = this.menu,
speed = this.speed,
o = this.options,
args = [];
// bail if the multiselectopen event returns false, this widget is disabled, or is already open
if( this._trigger('beforeopen') === false || button.hasClass('ui-state-disabled') || this._isOpen ){
return;
}
var $container = menu.find('ul').last(),
effect = o.show,
pos = button.offset();
// figure out opening effects/speeds
if( $.isArray(o.show) ){
effect = o.show[0];
speed = o.show[1] || self.speed;
}
// if there's an effect, assume jQuery UI is in use
// build the arguments to pass to show()
if( effect ) {
args = [ effect, speed ];
}
// set the scroll of the checkbox container
$container.scrollTop(0).height(o.height);
// position and show menu
if( $.ui.position && !$.isEmptyObject(o.position) ){
o.position.of = o.position.of || button;
menu
.show()
.position( o.position )
.hide();
// if position utility is not available...
} else {
menu.css({
top: pos.top + button.outerHeight(),
left: pos.left
});
}
// show the menu, maybe with a speed/effect combo
$.fn.show.apply(menu, args);
// select the first option
// triggering both mouseover and mouseover because 1.4.2+ has a bug where triggering mouseover
// will actually trigger mouseenter. the mouseenter trigger is there for when it's eventually fixed
this.labels.eq(0).trigger('mouseover').trigger('mouseenter').find('input').trigger('focus');
button.addClass('ui-state-active');
this._isOpen = true;
this._trigger('open');
},
// close the menu
close: function(){
if(this._trigger('beforeclose') === false){
return;
}
var o = this.options,
effect = o.hide,
speed = this.speed,
args = [];
// figure out opening effects/speeds
if( $.isArray(o.hide) ){
effect = o.hide[0];
speed = o.hide[1] || this.speed;
}
if( effect ) {
args = [ effect, speed ];
}
$.fn.hide.apply(this.menu, args);
this.button.removeClass('ui-state-active').trigger('blur').trigger('mouseleave');
this._isOpen = false;
this._trigger('close');
},
enable: function(){
this._toggleDisabled(false);
},
disable: function(){
this._toggleDisabled(true);
},
checkAll: function( e ){
this._toggleChecked(true);
this._trigger('checkAll');
},
uncheckAll: function(){
this._toggleChecked(false);
this._trigger('uncheckAll');
},
getChecked: function(){
return this.menu.find('input').filter(':checked');
},
destroy: function(){
// remove classes + data
$.Widget.prototype.destroy.call( this );
this.button.remove();
this.menu.remove();
this.element.show();
return this;
},
isOpen: function(){
return this._isOpen;
},
widget: function(){
return this.menu;
},
getButton: function(){
return this.button;
},
// react to option changes after initialization
_setOption: function( key, value ){
var menu = this.menu;
switch(key){
case 'header':
menu.find('div.ui-multiselect-header')[ value ? 'show' : 'hide' ]();
break;
case 'checkAllText':
menu.find('a.ui-multiselect-all span').eq(-1).text(value);
break;
case 'uncheckAllText':
menu.find('a.ui-multiselect-none span').eq(-1).text(value);
break;
case 'height':
menu.find('ul').last().height( parseInt(value,10) );
break;
case 'minWidth':
this.options[ key ] = parseInt(value,10);
this._setButtonWidth();
this._setMenuWidth();
break;
case 'selectedText':
case 'selectedList':
case 'noneSelectedText':
this.options[key] = value; // these all needs to update immediately for the update() call
this.update();
break;
case 'classes':
menu.add(this.button).removeClass(this.options.classes).addClass(value);
break;
case 'multiple':
menu.toggleClass('ui-multiselect-single', !value);
this.options.multiple = value;
this.element[0].multiple = value;
this.refresh();
}
$.Widget.prototype._setOption.apply( this, arguments );
}
});
})(jQuery);
@@ -0,0 +1,606 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc this class represents a server configuration. It communicates
* with the Nextcloud server to ensure to always have the up to date LDAP
* configuration. It sends various events that views can listen to and
* provides methods so they can modify the configuration based upon user
* input. This model is also extended by so-called "detectors" who let the
* Nextcloud server try to auto-detect settings and manipulate the
* configuration as well.
*
* @constructor
*/
var ConfigModel = function() {};
ConfigModel.prototype = {
/** @constant {number} */
FILTER_MODE_ASSISTED: 0,
/** @constant {number} */
FILTER_MODE_RAW: 1,
/**
* initializes the instance. Always call it after creating the instance.
*
* @param {OCA.LDAP.Wizard.WizardDetectorQueue} detectorQueue
*/
init: function (detectorQueue) {
/** @type {object} holds the configuration in key-value-pairs */
this.configuration = {};
/** @type {object} holds the subscribers that listen to the events */
this.subscribers = {};
/** @type {Array} holds registered detectors */
this.detectors = [];
/** @type {boolean} whether a configuration is currently loading */
this.loadingConfig = false;
if(detectorQueue instanceof OCA.LDAP.Wizard.WizardDetectorQueue) {
/** @type {OCA.LDAP.Wizard.WizardDetectorQueue} */
this.detectorQueue = detectorQueue;
}
},
/**
* loads a specified configuration
*
* @param {string} [configID] - the configuration id (or prefix)
*/
load: function (configID) {
if(this.loadingConfig) {
return;
}
this._resetDetectorQueue();
this.configID = configID;
var url = OC.generateUrl('apps/user_ldap/ajax/getConfiguration.php');
var params = OC.buildQueryString({ldap_serverconfig_chooser: configID});
this.loadingConfig = true;
var model = this;
$.post(url, params, function (result) { model._processLoadConfig(model, result) });
},
/**
* creates a new LDAP configuration
*
* @param {boolean} [copyCurrent] - if true, the current configuration
* is copied, otherwise a blank one is created.
*/
newConfig: function(copyCurrent) {
this._resetDetectorQueue();
var url = OC.generateUrl('apps/user_ldap/ajax/getNewServerConfigPrefix.php');
var params = {};
if(copyCurrent === true) {
params['copyConfig'] = this.configID;
}
params = OC.buildQueryString(params);
var model = this;
copyCurrent = _.isUndefined(copyCurrent) ? false : copyCurrent;
$.post(url, params, function (result) { model._processNewConfigPrefix(model, result, copyCurrent) });
},
/**
* deletes the current configuration. This method will not ask for
* confirmation, if desired it needs to be ensured by the caller.
*
* @param {string} [configID] - the configuration id (or prefix)
*/
deleteConfig: function(configID) {
var url = OC.generateUrl('apps/user_ldap/ajax/deleteConfiguration.php');
var params = OC.buildQueryString({ldap_serverconfig_chooser: configID});
var model = this;
$.post(url, params, function (result) { model._processDeleteConfig(model, result, configID) });
},
/**
* @callback wizardCallBack
* @param {ConfigModel} [model]
* @param {OCA.LDAP.Wizard.WizardDetectorGeneric} [detector]
* @param {object} [result] - response from the ajax request
*/
/**
* calls an AJAX endpoint at Nextcloud. This method should be called by
* detectors only!
*
* @param {string} [params] - as return by OC.buildQueryString
* @param {wizardCallBack} [callback]
* @param {OCA.LDAP.Wizard.WizardDetectorGeneric} [detector]
* @returns {jqXHR}
*/
callWizard: function(params, callback, detector) {
return this.callAjax('wizard.php', params, callback, detector);
},
/**
* calls an AJAX endpoint at Nextcloud. This method should be called by
* detectors only!
*
* @param {string} destination - the desired end point
* @param {string} [params] - as return by OC.buildQueryString
* @param {wizardCallBack} [callback]
* @param {OCA.LDAP.Wizard.WizardDetectorGeneric} [detector]
* @returns {jqXHR}
*/
callAjax: function(destination, params, callback, detector) {
var url = OC.generateUrl('apps/user_ldap/ajax/' + destination);
var model = this;
return $.post(url, params, function (result) {
callback(model, detector,result);
});
},
/**
* setRequested Event
*
* @event ConfigModel#setRequested
* @type{object} - empty
*/
/**
* modifies a configuration key. If a provided configuration key does
* not exist or the provided value equals the current setting, false is
* returned. Otherwise Nextcloud server will be called to save the new
* value, an event will notify when this is done. True is returned when
* the request is sent, however it does not mean whether saving was
* successful or not.
*
* This method is supposed to be called by views, after the user did a
* change which needs to be saved.
*
* @param {string} [key]
* @param {string|number} [value]
* @returns {boolean}
* @fires {ConfigModel#setRequested}
*/
set: function(key, value) {
if(_.isUndefined(this.configuration[key])) {
console.warn('will not save undefined key: ' + key);
return false;
}
if(this.configuration[key] === value) {
return false;
}
this._broadcast('setRequested', {});
var url = OC.generateUrl('apps/user_ldap/ajax/wizard.php');
var objParams = {
ldap_serverconfig_chooser: this.configID,
action: 'save',
cfgkey: key,
cfgval: value
};
var strParams = OC.buildQueryString(objParams);
var model = this;
$.post(url, strParams, function(result) { model._processSetResult(model, result, objParams) });
return true;
},
/**
* configUpdated Event
*
* object property is a key-value-pair of the configuration key as index
* and its value.
*
* @event ConfigModel#configUpdated
* @type{object}
*/
/**
* updates the model's configuration data. This should be called only,
* when a new configuration value was received from the Nextcloud server.
* This is typically done by detectors, but never by views.
*
* Cancels with false if old and new values already match.
*
* @param {string} [key]
* @param {string} [value]
* @returns {boolean}
* @fires ConfigModel#configUpdated
*/
update: function(key, value) {
if(this.configuration[key] === value) {
return false;
}
if(!_.isUndefined(this.configuration[key])) {
// don't write e.g. count values to the configuration
// they don't go as feature, yet
this.configuration[key] = value;
}
var configPart = {};
configPart[key] = value;
this._broadcast('configUpdated', configPart);
},
/**
* @typedef {object} FeaturePayload
* @property {string} feature
* @property {Array} data
*/
/**
* informs about a detected LDAP "feature" (wider sense). For examples,
* the detected object classes for users or groups
*
* @param {FeaturePayload} payload
*/
inform: function(payload) {
this._broadcast('receivedLdapFeature', payload);
},
/**
* @typedef {object} ErrorPayload
* @property {string} message
* @property {string} relatedKey
*/
/**
* broadcasts an error message, if a wizard reply ended up in an error.
* To be called by detectors.
*
* @param {ErrorPayload} payload
*/
gotServerError: function(payload) {
this._broadcast('serverError', payload);
},
/**
* detectionStarted Event
*
* @event ConfigModel#detectionStarted
* @type{string} - the target configuration key that is being
* auto-detected
*/
/**
* lets the model broadcast the info that a detector starts to run
*
* supposed to be called by detectors only
*
* @param {string} [key]
* @fires ConfigModel#detectionStarted
*/
notifyAboutDetectionStart: function(key) {
this._broadcast('detectionStarted', key);
},
/**
* detectionCompleted Event
*
* @event ConfigModel#detectionCompleted
* @type{string} - the target configuration key that was
* auto-detected
*/
/**
* lets the model broadcast the info that a detector run was completed
*
* supposed to be called by detectors only
*
* @param {string} [key]
* @fires ConfigModel#detectionCompleted
*/
notifyAboutDetectionCompletion: function(key) {
this._broadcast('detectionCompleted', key);
},
/**
* @callback listenerCallback
* @param {OCA.LDAP.Wizard.WizardTabGeneric|OCA.LDAP.Wizard.WizardView} [view]
* @param {object} [params]
*/
/**
* registers a listener to an event
*
* the idea is that only views listen.
*
* @param {string} [name] - the event name
* @param {listenerCallback} [fn]
* @param {OCA.LDAP.Wizard.WizardTabGeneric|OCA.LDAP.Wizard.WizardView} [context]
*/
on: function(name, fn, context) {
if(_.isUndefined(this.subscribers[name])) {
this.subscribers[name] = [];
}
this.subscribers[name].push({fn: fn, context: context});
},
/**
* starts a configuration test on the Nextcloud server
*/
requestConfigurationTest: function() {
var url = OC.generateUrl('apps/user_ldap/ajax/testConfiguration.php');
var params = OC.buildQueryString({ldap_serverconfig_chooser: this.configID});
var model = this;
$.post(url, params, function(result) { model._processTestResult(model, result) });
//TODO: make sure only one test is running at a time
},
/**
* the view may request a call to the wizard, for instance to fetch
* object classes or groups
*
* @param {string} featureKey
* @param {Object} [additionalParams]
*/
requestWizard: function(featureKey, additionalParams) {
var model = this;
var detectorCount = this.detectors.length;
var found = false;
for(var i = 0; i < detectorCount; i++) {
if(this.detectors[i].runsOnFeatureRequest(featureKey)) {
found = true;
(function (detector) {
model.detectorQueue.add(function() {
return detector.run(model, model.configID, additionalParams);
});
})(model.detectors[i]);
}
}
if(!found) {
console.warn('No detector found for feature ' + featureKey);
}
},
/**
* resets the detector queue
*
* @private
*/
_resetDetectorQueue: function() {
if(!_.isUndefined(this.detectorQueue)) {
this.detectorQueue.reset();
}
},
/**
* detectors can be registered herewith
*
* @param {OCA.LDAP.Wizard.WizardDetectorGeneric} [detector]
*/
registerDetector: function(detector) {
if(detector instanceof OCA.LDAP.Wizard.WizardDetectorGeneric) {
this.detectors.push(detector);
}
},
/**
* emits an event
*
* @param {string} [name] - the event name
* @param {*} [params]
* @private
*/
_broadcast: function(name, params) {
if(_.isUndefined(this.subscribers[name])) {
return;
}
var subscribers = this.subscribers[name];
var subscriberCount = subscribers.length;
for(var i = 0; i < subscriberCount; i++) {
if(_.isUndefined(subscribers[i]['fn'])) {
console.warn('callback method is not defined. Event ' + name);
continue;
}
subscribers[i]['fn'](subscribers[i]['context'], params);
}
},
/**
* ConfigModel#configLoaded Event
*
* @event ConfigModel#configLoaded
* @type {object} - LDAP configuration as key-value-pairs
*/
/**
* @typedef {object} ConfigLoadResponse
* @property {string} [status]
* @property {object} [configuration] - only present if status equals 'success'
*/
/**
* processes the ajax response of a configuration load request
*
* @param {ConfigModel} [model]
* @param {ConfigLoadResponse} [result]
* @fires ConfigModel#configLoaded
* @private
*/
_processLoadConfig: function(model, result) {
model.configuration = {};
if(result['status'] === 'success') {
$.each(result['configuration'], function(key, value) {
model.configuration[key] = value;
});
}
model.loadingConfig = false;
model._broadcast('configLoaded', model.configuration);
},
/**
* @typedef {object} ConfigSetPayload
* @property {boolean} [isSuccess]
* @property {string} [key]
* @property {string} [value]
* @property {string} [errorMessage]
*/
/**
* ConfigModel#setCompleted Event
*
* @event ConfigModel#setCompleted
* @type {ConfigSetPayload}
*/
/**
* @typedef {object} ConfigSetResponse
* @property {string} [status]
* @property {object} [message] - might be present only in error cases
*/
/**
* processes the ajax response of a configuration key set request
*
* @param {ConfigModel} [model]
* @param {ConfigSetResponse} [result]
* @param {object} [params] - the original changeSet
* @fires ConfigModel#configLoaded
* @private
*/
_processSetResult: function(model, result, params) {
var isSuccess = (result['status'] === 'success');
if(isSuccess) {
model.configuration[params.cfgkey] = params.cfgval;
}
var payload = {
isSuccess: isSuccess,
key: params.cfgkey,
value: model.configuration[params.cfgkey],
errorMessage: _.isUndefined(result['message']) ? '' : result['message']
};
model._broadcast('setCompleted', payload);
// let detectors run
// NOTE: detector's changes will not result in new _processSetResult
// calls, … in case they interfere it is because of this ;)
if(_.isUndefined(model.detectorQueue)) {
console.warn("DetectorQueue was not set, detectors will not be fired");
return;
}
var detectorCount = model.detectors.length;
for(var i = 0; i < detectorCount; i++) {
if(model.detectors[i].triggersOn(params.cfgkey)) {
(function (detector) {
model.detectorQueue.add(function() {
return detector.run(model, model.configID);
});
})(model.detectors[i]);
}
}
},
/**
* @typedef {object} ConfigTestPayload
* @property {boolean} [isSuccess]
*/
/**
* ConfigModel#configurationTested Event
*
* @event ConfigModel#configurationTested
* @type {ConfigTestPayload}
*/
/**
* @typedef {object} StatusResponse
* @property {string} [status]
*/
/**
* processes the ajax response of a configuration test request
*
* @param {ConfigModel} [model]
* @param {StatusResponse} [result]
* @fires ConfigModel#configurationTested
* @private
*/
_processTestResult: function(model, result) {
var payload = {
isSuccess: (result['status'] === 'success')
};
model._broadcast('configurationTested', payload);
},
/**
* @typedef {object} BasicConfigPayload
* @property {boolean} [isSuccess]
* @property {string} [configPrefix] - the new config ID
* @property {string} [errorMessage]
*/
/**
* ConfigModel#newConfiguration Event
*
* @event ConfigModel#newConfiguration
* @type {BasicConfigPayload}
*/
/**
* @typedef {object} NewConfigResponse
* @property {string} [status]
* @property {string} [configPrefix]
* @property {object} [defaults] - default configuration values
* @property {string} [message] - might only appear with status being
* not 'success'
*/
/**
* processes the ajax response of a new configuration request
*
* @param {ConfigModel} [model]
* @param {NewConfigResponse} [result]
* @param {boolean} [copyCurrent]
* @fires ConfigModel#newConfiguration
* @fires ConfigModel#configLoaded
* @private
*/
_processNewConfigPrefix: function(model, result, copyCurrent) {
var isSuccess = (result['status'] === 'success');
var payload = {
isSuccess: isSuccess,
configPrefix: result['configPrefix'],
errorMessage: _.isUndefined(result['message']) ? '' : result['message']
};
model._broadcast('newConfiguration', payload);
if(isSuccess) {
this.configID = result['configPrefix'];
if(!copyCurrent) {
model.configuration = {};
$.each(result['defaults'], function(key, value) {
model.configuration[key] = value;
});
// view / tabs need to update with new blank config
model._broadcast('configLoaded', model.configuration);
}
}
},
/**
* ConfigModel#deleteConfiguration Event
*
* @event ConfigModel#deleteConfiguration
* @type {BasicConfigPayload}
*/
/**
* processes the ajax response of a delete configuration request
*
* @param {ConfigModel} [model]
* @param {StatusResponse} [result]
* @param {string} [configID]
* @fires ConfigModel#deleteConfiguration
* @private
*/
_processDeleteConfig: function(model, result, configID) {
var isSuccess = (result['status'] === 'success');
var payload = {
isSuccess: isSuccess,
configPrefix: configID,
errorMessage: _.isUndefined(result['message']) ? '' : result['message']
};
model._broadcast('deleteConfiguration', payload);
}
};
OCA.LDAP.Wizard.ConfigModel = ConfigModel;
})();
@@ -0,0 +1,56 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
OCA.LDAP = {};
OCA.LDAP.Wizard = {};
(function(){
/**
* @classdesc minimalistic controller that basically makes the view render
*
* @constructor
*/
var WizardController = function() {};
WizardController.prototype = {
/**
* initializes the instance. Always call it after creating the instance.
*/
init: function() {
this.view = false;
this.configModel = false;
},
/**
* sets the model instance
*
* @param {OCA.LDAP.Wizard.ConfigModel} [model]
*/
setModel: function(model) {
this.configModel = model;
},
/**
* sets the view instance
*
* @param {OCA.LDAP.Wizard.WizardView} [view]
*/
setView: function(view) {
this.view = view;
},
/**
* makes the view render i.e. ready to be used
*/
run: function() {
this.view.render();
}
};
OCA.LDAP.Wizard.Controller = WizardController;
})();
@@ -0,0 +1,470 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc main view class. It takes care of tab-unrelated control
* elements (status bar, control buttons) and does or requests configuration
* checks. It also manages the separate tab views.
*
* @constructor
*/
var WizardView = function() {};
WizardView.prototype = {
/** @constant {number} */
STATUS_ERROR: 0,
/** @constant {number} */
STATUS_INCOMPLETE: 1,
/** @constant {number} */
STATUS_SUCCESS: 2,
/** @constant {number} */
STATUS_UNTESTED: 3,
/**
* initializes the instance. Always call it after creating the instance.
*/
init: function () {
this.tabs = {};
this.tabs.server = new OCA.LDAP.Wizard.WizardTabElementary();
this.$settings = $('#ldapSettings');
this.$saveSpinners = $('.ldap_saving');
this.saveProcesses = 0;
_.bindAll(this, 'onTabChange', 'onTestButtonClick');
},
/**
* applies click events to the forward and backward buttons
*/
initControls: function() {
var view = this;
$('.ldap_action_continue').click(function(event) {
event.preventDefault();
view._controlContinue(view);
});
$('.ldap_action_back').click(function(event) {
event.preventDefault();
view._controlBack(view);
});
$('.ldap_action_test_connection').click(this.onTestButtonClick);
},
/**
* registers a tab
*
* @param {OCA.LDAP.Wizard.WizardTabGeneric} tabView
* @param {string} index
* @returns {boolean}
*/
registerTab: function(tabView, index) {
if( _.isUndefined(this.tabs[index])
&& tabView instanceof OCA.LDAP.Wizard.WizardTabGeneric
) {
this.tabs[index] = tabView;
this.tabs[index].setModel(this.configModel);
return true;
}
return false;
},
/**
* checks certain config values for completeness and depending on them
* enables or disables non-elementary tabs.
*/
basicStatusCheck: function(view) {
var host = view.configModel.configuration.ldap_host;
var port = view.configModel.configuration.ldap_port;
var base = view.configModel.configuration.ldap_base;
var agent = view.configModel.configuration.ldap_dn;
var pwd = view.configModel.configuration.ldap_agent_password;
if(((host && port && base) || (host && base && host.indexOf('ldapi://') > -1 ))
&& ((!agent && !pwd) || (agent && pwd))) {
view.enableTabs();
} else {
view.disableTabs();
}
},
/**
* if the configuration is sufficient the model is being request to
* perform a configuration test. Otherwise, the status indicator is
* being updated with the status "incomplete"
*/
functionalityCheck: function() {
// this method should be called only if necessary, because it may
// cause an LDAP request!
var host = this.configModel.configuration.ldap_host;
var port = this.configModel.configuration.ldap_port;
var base = this.configModel.configuration.ldap_base;
var userFilter = this.configModel.configuration.ldap_userlist_filter;
var loginFilter = this.configModel.configuration.ldap_login_filter;
if((host && port && base && userFilter && loginFilter) ||
(host && base && host.indexOf('ldapi://') > -1 && userFilter && loginFilter)) {
this.configModel.requestConfigurationTest();
} else {
this._updateStatusIndicator(this.STATUS_INCOMPLETE);
}
},
/**
* will request a functionality check if one of the related configuration
* settings was changed.
*
* @param {ConfigSetPayload|Object} [changeSet]
*/
considerFunctionalityCheck: function(changeSet) {
var testTriggers = [
'ldap_host', 'ldap_port', 'ldap_dn', 'ldap_agent_password',
'ldap_base', 'ldap_userlist_filter', 'ldap_login_filter'
];
for(var key in changeSet) {
if($.inArray(key, testTriggers) >= 0) {
this.functionalityCheck();
return;
}
}
},
/**
* keeps number of running save processes and shows a spinner if
* necessary
*
* @param {WizardView} [view]
* @listens ConfigModel#setRequested
*/
onSetRequested: function(view) {
view.saveProcesses += 1;
if(view.saveProcesses === 1) {
view.showSaveSpinner();
}
},
/**
* keeps number of running save processes and hides the spinner if
* necessary. Also triggers checks, to adjust tabs state and status bar.
*
* @param {WizardView} [view]
* @param {ConfigSetPayload} [result]
* @listens ConfigModel#setCompleted
*/
onSetRequestDone: function(view, result) {
if(view.saveProcesses > 0) {
view.saveProcesses -= 1;
if(view.saveProcesses === 0) {
view.hideSaveSpinner();
}
}
view.basicStatusCheck(view);
var param = {};
param[result.key] = 1;
view.considerFunctionalityCheck(param);
},
/**
* Base DN test results will arrive here
*
* @param {WizardTabElementary} view
* @param {FeaturePayload} payload
*/
onDetectionTestCompleted: function(view, payload) {
if(payload.feature === 'TestBaseDN') {
if(payload.data.status === 'success') {
var objectsFound = parseInt(payload.data.changes.ldap_test_base, 10);
if(objectsFound > 0) {
view._updateStatusIndicator(view.STATUS_SUCCESS);
return;
}
}
view._updateStatusIndicator(view.STATUS_ERROR);
OC.Notification.showTemporary(t('user_ldap', 'The Base DN appears to be wrong'));
}
},
/**
* updates the status indicator based on the configuration test result
*
* @param {WizardView} [view]
* @param {ConfigTestPayload} [result]
* @listens ConfigModel#configurationTested
*/
onTestCompleted: function(view, result) {
if(result.isSuccess) {
view.configModel.requestWizard('ldap_test_base');
} else {
view._updateStatusIndicator(view.STATUS_ERROR);
}
},
/**
* triggers initial checks upon configuration loading to update status
* controls
*
* @param {WizardView} [view]
* @listens ConfigModel#configLoaded
*/
onConfigLoaded: function(view) {
view._updateStatusIndicator(view.STATUS_UNTESTED);
view.basicStatusCheck(view);
view.functionalityCheck();
},
/**
* reacts on attempts to switch to a different tab
*
* @param {object} event
* @param {object} ui
* @returns {boolean}
*/
onTabChange: function(event, ui) {
if(this.saveProcesses > 0) {
return false;
}
var newTabID = ui.newTab[0].id;
if(newTabID === '#ldapWizard1') {
newTabID = 'server';
}
var oldTabID = ui.oldTab[0].id;
if(oldTabID === '#ldapWizard1') {
oldTabID = 'server';
}
if(!_.isUndefined(this.tabs[newTabID])) {
this.tabs[newTabID].isActive = true;
this.tabs[newTabID].onActivate();
} else {
console.warn('Unreferenced activated tab ' + newTabID);
}
if(!_.isUndefined(this.tabs[oldTabID])) {
this.tabs[oldTabID].isActive = false;
} else {
console.warn('Unreferenced left tab ' + oldTabID);
}
if(!_.isUndefined(this.tabs[newTabID])) {
this._controlUpdate(this.tabs[newTabID].tabIndex);
}
},
/**
* triggers checks upon configuration updates to keep status controls
* up to date
*
* @param {WizardView} [view]
* @param {object} [changeSet]
* @listens ConfigModel#configUpdated
*/
onConfigUpdated: function(view, changeSet) {
view.basicStatusCheck(view);
view.considerFunctionalityCheck(changeSet);
},
/**
* requests a configuration test
*/
onTestButtonClick: function() {
this.configModel.requestWizard('ldap_action_test_connection', {ldap_serverconfig_chooser: this.configModel.configID});
},
/**
* sets the model instance and registers event listeners
*
* @param {OCA.LDAP.Wizard.ConfigModel} [configModel]
*/
setModel: function(configModel) {
/** @type {OCA.LDAP.Wizard.ConfigModel} */
this.configModel = configModel;
for(var i in this.tabs) {
this.tabs[i].setModel(configModel);
}
// make sure this is definitely run after tabs did their work, order is important here
// for now this works, because tabs are supposed to register their listeners in their
// setModel() method.
// alternative: make Elementary Tab a Publisher as well.
this.configModel.on('configLoaded', this.onConfigLoaded, this);
this.configModel.on('configUpdated', this.onConfigUpdated, this);
this.configModel.on('setRequested', this.onSetRequested, this);
this.configModel.on('setCompleted', this.onSetRequestDone, this);
this.configModel.on('configurationTested', this.onTestCompleted, this);
this.configModel.on('receivedLdapFeature', this.onDetectionTestCompleted, this);
},
/**
* enables tab and navigation buttons
*/
enableTabs: function() {
//do not use this function directly, use basicStatusCheck instead.
if(this.saveProcesses === 0) {
$('.ldap_action_continue').removeAttr('disabled');
$('.ldap_action_back').removeAttr('disabled');
this.$settings.tabs('option', 'disabled', []);
}
},
/**
* disables tab and navigation buttons
*/
disableTabs: function() {
$('.ldap_action_continue').attr('disabled', 'disabled');
$('.ldap_action_back').attr('disabled', 'disabled');
this.$settings.tabs('option', 'disabled', [1, 2, 3, 4, 5]);
},
/**
* shows a save spinner
*/
showSaveSpinner: function() {
this.$saveSpinners.removeClass('hidden');
$('#ldap *').addClass('save-cursor');
},
/**
* hides the save spinner
*/
hideSaveSpinner: function() {
this.$saveSpinners.addClass('hidden');
$('#ldap *').removeClass('save-cursor');
},
/**
* performs a config load request to the model
*
* @param {string} [configID]
* @private
*/
_requestConfig: function(configID) {
this.configModel.load(configID);
},
/**
* bootstraps the visual appearance and event listeners, as well as the
* first config
*/
render: function () {
$('#ldapAdvancedAccordion').accordion({ heightStyle: 'content', animate: 'easeInOutCirc'});
this.$settings.tabs({});
$('#ldapSettings button:not(.icon-default-style):not(.ui-multiselect)').button();
$('#ldapSettings').tabs({ beforeActivate: this.onTabChange });
this.initControls();
this.disableTabs();
this._requestConfig(this.tabs.server.getConfigID());
},
/**
* updates the status indicator / bar
*
* @param {number} [state]
* @private
*/
_updateStatusIndicator: function(state) {
var $indicator = $('.ldap_config_state_indicator');
var $indicatorLight = $('.ldap_config_state_indicator_sign');
switch(state) {
case this.STATUS_UNTESTED:
$indicator.text(t('user_ldap',
'Testing configuration…'
));
$indicator.addClass('ldap_grey');
$indicatorLight.removeClass('error');
$indicatorLight.removeClass('success');
break;
case this.STATUS_ERROR:
$indicator.text(t('user_ldap',
'Configuration incorrect'
));
$indicator.removeClass('ldap_grey');
$indicatorLight.addClass('error');
$indicatorLight.removeClass('success');
break;
case this.STATUS_INCOMPLETE:
$indicator.text(t('user_ldap',
'Configuration incomplete'
));
$indicator.removeClass('ldap_grey');
$indicatorLight.removeClass('error');
$indicatorLight.removeClass('success');
break;
case this.STATUS_SUCCESS:
$indicator.text(t('user_ldap', 'Configuration OK'));
$indicator.addClass('ldap_grey');
$indicatorLight.removeClass('error');
$indicatorLight.addClass('success');
if(!this.tabs.server.isActive) {
this.configModel.set('ldap_configuration_active', 1);
}
break;
}
},
/**
* handles a click on the Back button
*
* @param {WizardView} [view]
* @private
*/
_controlBack: function(view) {
var curTabIndex = view.$settings.tabs('option', 'active');
if(curTabIndex == 0) {
return;
}
view.$settings.tabs('option', 'active', curTabIndex - 1);
view._controlUpdate(curTabIndex - 1);
},
/**
* handles a click on the Continue button
*
* @param {WizardView} [view]
* @private
*/
_controlContinue: function(view) {
var curTabIndex = view.$settings.tabs('option', 'active');
if(curTabIndex == 3) {
return;
}
view.$settings.tabs('option', 'active', 1 + curTabIndex);
view._controlUpdate(curTabIndex + 1);
},
/**
* updates the controls (navigation buttons)
*
* @param {number} [nextTabIndex] - index of the tab being switched to
* @private
*/
_controlUpdate: function(nextTabIndex) {
if(nextTabIndex == 0) {
$('.ldap_action_back').addClass('invisible');
$('.ldap_action_continue').removeClass('invisible');
} else
if(nextTabIndex == 1) {
$('.ldap_action_back').removeClass('invisible');
$('.ldap_action_continue').removeClass('invisible');
} else
if(nextTabIndex == 2) {
$('.ldap_action_continue').removeClass('invisible');
$('.ldap_action_back').removeClass('invisible');
} else
if(nextTabIndex == 3) {
$('.ldap_action_back').removeClass('invisible');
$('.ldap_action_continue').addClass('invisible');
}
}
};
OCA.LDAP.Wizard.WizardView = WizardView;
})();
@@ -0,0 +1,80 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
/**
* initializes the wizard and related components and kicks it off.
*/
(function() {
var Wizard = function() {
var detectorQueue = new OCA.LDAP.Wizard.WizardDetectorQueue();
detectorQueue.init();
var detectors = [];
detectors.push(new OCA.LDAP.Wizard.WizardDetectorPort());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorBaseDN());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorEmailAttribute());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorUserDisplayNameAttribute());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorUserGroupAssociation());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorUserObjectClasses());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorGroupObjectClasses());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorGroupsForUsers());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorGroupsForGroups());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorFilterUser());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorFilterLogin());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorFilterGroup());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorUserCount());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorGroupCount());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorAvailableAttributes());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorTestLoginName());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorTestBaseDN());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorTestConfiguration());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorClearUserMappings());
detectors.push(new OCA.LDAP.Wizard.WizardDetectorClearGroupMappings());
var model = new OCA.LDAP.Wizard.ConfigModel();
model.init(detectorQueue);
// NOTE: order of detectors may play a role
// for example, BaseDN detector needs the port. The port is typically found
// by the Port Detector. If BaseDN detector was run first, it will not have
// all necessary information. Only after Port Detector was executed…
for (var i = 0; i < detectors.length; i++) {
model.registerDetector(detectors[i]);
}
var filterOnTypeFactory = new OCA.LDAP.Wizard.FilterOnTypeFactory();
var tabs = [];
tabs.push(new OCA.LDAP.Wizard.WizardTabUserFilter(filterOnTypeFactory, 1));
tabs.push(new OCA.LDAP.Wizard.WizardTabLoginFilter(2));
tabs.push(new OCA.LDAP.Wizard.WizardTabGroupFilter(filterOnTypeFactory, 3));
tabs.push(new OCA.LDAP.Wizard.WizardTabAdvanced());
tabs.push(new OCA.LDAP.Wizard.WizardTabExpert());
var view = new OCA.LDAP.Wizard.WizardView(model);
view.init();
view.setModel(model);
for (var j = 0; j < tabs.length; j++) {
view.registerTab(tabs[j], '#ldapWizard' + (j + 2));
}
var controller = new OCA.LDAP.Wizard.Controller();
controller.init();
controller.setView(view);
controller.setModel(model);
controller.run();
};
OCA.LDAP.Wizard.Wizard = Wizard;
})();
window.addEventListener('DOMContentLoaded', function() {
new OCA.LDAP.Wizard.Wizard();
});
@@ -0,0 +1,59 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc an Attributes Detector. It executes the auto-detection of
* available attributes by the Nextcloud server, if requirements are met.
*
* @constructor
*/
var WizardDetectorAvailableAttributes = OCA.LDAP.Wizard.WizardDetectorGeneric.subClass({
/** @inheritdoc */
init: function() {
// given, it is not a configuration key
this.setTargetKey('ldap_loginfilter_attributes');
this.runsOnRequest = true;
},
/**
* runs the detector, if port is not set.
*
* @param {OCA.LDAP.Wizard.ConfigModel} model
* @param {string} configID - the configuration prefix
* @returns {boolean|jqXHR}
* @abstract
*/
run: function(model, configID) {
model.notifyAboutDetectionStart(this.getTargetKey());
var params = OC.buildQueryString({
action: 'determineAttributes',
ldap_serverconfig_chooser: configID
});
return model.callWizard(params, this.processResult, this);
},
/**
* @inheritdoc
*/
processResult: function(model, detector, result) {
if(result.status === 'success') {
var payload = {
feature: 'AvailableAttributes',
data: result.options[detector.getTargetKey()]
};
model.inform(payload);
}
this._super(model, detector, result);
}
});
OCA.LDAP.Wizard.WizardDetectorAvailableAttributes = WizardDetectorAvailableAttributes;
})();
@@ -0,0 +1,52 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc a Base DN Detector. It executes the auto-detection of the base
* DN by the Nextcloud server, if requirements are met.
*
* @constructor
*/
var WizardDetectorBaseDN = OCA.LDAP.Wizard.WizardDetectorGeneric.subClass({
/** @inheritdoc */
init: function() {
this.setTargetKey('ldap_base');
this.runsOnRequest = true;
},
/**
* runs the detector, if specified configuration settings are set and
* base DN is not set.
*
* @param {OCA.LDAP.Wizard.ConfigModel} model
* @param {string} configID - the configuration prefix
* @returns {boolean|jqXHR}
* @abstract
*/
run: function(model, configID) {
if( !model.configuration['ldap_host']
|| !model.configuration['ldap_port']
)
{
return false;
}
model.notifyAboutDetectionStart(this.getTargetKey());
var params = OC.buildQueryString({
action: 'guessBaseDN',
ldap_serverconfig_chooser: configID
});
return model.callWizard(params, this.processResult, this);
}
});
OCA.LDAP.Wizard.WizardDetectorBaseDN = WizardDetectorBaseDN;
})();
@@ -0,0 +1,30 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc requests clearing of user mappings
*
* @constructor
*/
var WizardDetectorClearGroupMappings = OCA.LDAP.Wizard.WizardDetectorTestAbstract.subClass({
/** @inheritdoc */
init: function() {
// given, it is not a configuration key
this.setTargetKey('ldap_action_clear_group_mappings');
this.testName = 'ClearMappings';
this.isLegacy = true;
this.legacyDestination = 'clearMappings.php';
this.runsOnRequest = true;
}
});
OCA.LDAP.Wizard.WizardDetectorClearGroupMappings = WizardDetectorClearGroupMappings;
})();
@@ -0,0 +1,30 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc requests clearing of user mappings
*
* @constructor
*/
var WizardDetectorClearUserMappings = OCA.LDAP.Wizard.WizardDetectorTestAbstract.subClass({
/** @inheritdoc */
init: function() {
// given, it is not a configuration key
this.setTargetKey('ldap_action_clear_user_mappings');
this.testName = 'ClearMappings';
this.isLegacy = true;
this.legacyDestination = 'clearMappings.php';
this.runsOnRequest = true;
}
});
OCA.LDAP.Wizard.WizardDetectorClearUserMappings = WizardDetectorClearUserMappings;
})();
@@ -0,0 +1,38 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc let's the wizard backend count the available users
*
* @constructor
*/
var WizardDetectorEmailAttribute = OCA.LDAP.Wizard.WizardDetectorFilterSimpleRequestAbstract.subClass({
init: function() {
this.setTargetKey('ldap_user_count');
this.wizardMethod = 'detectEmailAttribute';
this.runsOnRequest = true;
},
/**
* @inheritdoc
*/
run: function(model, configID) {
if(model.configuration.ldap_email_attr) {
// a value is already set. Don't overwrite and don't ask LDAP
// without reason.
return false;
}
this._super(model, configID);
}
});
OCA.LDAP.Wizard.WizardDetectorEmailAttribute = WizardDetectorEmailAttribute;
})();
@@ -0,0 +1,52 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc abstract detector for detecting groups and object classes
*
* @constructor
*/
var WizardDetectorFeatureAbstract = OCA.LDAP.Wizard.WizardDetectorGeneric.subClass({
/**
* runs the detector, if port is not set.
*
* @param {OCA.LDAP.Wizard.ConfigModel} model
* @param {string} configID - the configuration prefix
* @returns {boolean|jqXHR}
* @abstract
*/
run: function(model, configID) {
model.notifyAboutDetectionStart(this.getTargetKey());
var params = OC.buildQueryString({
action: this.wizardMethod,
ldap_serverconfig_chooser: configID
});
return model.callWizard(params, this.processResult, this);
},
/**
* @inheritdoc
*/
processResult: function(model, detector, result) {
if(result.status === 'success') {
var payload = {
feature: detector.featureName,
data: result.options[detector.getTargetKey()]
};
model.inform(payload);
}
this._super(model, detector, result);
}
});
OCA.LDAP.Wizard.WizardDetectorFeatureAbstract = WizardDetectorFeatureAbstract;
})();
@@ -0,0 +1,31 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc a Port Detector. It executes the auto-detection of the port
* by the Nextcloud server, if requirements are met.
*
* @constructor
*/
var WizardDetectorFilterGroup = OCA.LDAP.Wizard.WizardDetectorFilterSimpleRequestAbstract.subClass({
init: function() {
this.setTrigger([
'ldap_groupfilter_groups',
'ldap_groupfilter_objectclass'
]);
this.setTargetKey('ldap_group_filter');
this.wizardMethod = 'getGroupFilter';
}
});
OCA.LDAP.Wizard.WizardDetectorFilterGroup = WizardDetectorFilterGroup;
})();
@@ -0,0 +1,33 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc a Port Detector. It executes the auto-detection of the port
* by the Nextcloud server, if requirements are met.
*
* @constructor
*/
var WizardDetectorFilterLogin = OCA.LDAP.Wizard.WizardDetectorFilterSimpleRequestAbstract.subClass({
init: function() {
this.setTrigger([
'ldap_loginfilter_username',
'ldap_loginfilter_email',
'ldap_loginfilter_attributes'
]);
this.setTargetKey('ldap_login_filter');
this.runsOnRequest = true;
this.wizardMethod = 'getUserLoginFilter';
}
});
OCA.LDAP.Wizard.WizardDetectorFilterLogin = WizardDetectorFilterLogin;
})();
@@ -0,0 +1,32 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc a Port Detector. It executes the auto-detection of the port
* by the Nextcloud server, if requirements are met.
*
* @constructor
*/
var WizardDetectorFilterUser = OCA.LDAP.Wizard.WizardDetectorFilterSimpleRequestAbstract.subClass({
init: function() {
this.setTrigger([
'ldap_userfilter_groups',
'ldap_userfilter_objectclass'
]);
this.setTargetKey('ldap_userlist_filter');
this.runsOnRequest = true;
this.wizardMethod = 'getUserListFilter';
}
});
OCA.LDAP.Wizard.WizardDetectorFilterUser = WizardDetectorFilterUser;
})();
@@ -0,0 +1,117 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc a generic (abstract) Detector template. A Detector's task is
* to kick off server side detection of certain LDAP features. It is invoked
* when changes to specified configuration keys happen.
*
* @constructor
*/
var WizardDetectorGeneric = OCA.LDAP.Wizard.WizardObject.subClass({
/**
* initializes the instance. Always call it after creating the instance.
*/
init: function() {
this.setTrigger([]);
this.targetKey = '';
this.runsOnRequest = false;
},
/**
* sets the configuration keys the detector is listening on
*
* @param {string[]} triggers
*/
setTrigger: function(triggers) {
this.triggers = triggers;
},
/**
* tests whether the detector is triggered by the provided key
*
* @param {string} key
* @returns {boolean}
*/
triggersOn: function(key) {
return ($.inArray(key, this.triggers) >= 0);
},
/**
* whether the detector runs on explicit request
*
* @param {string} key
* @returns {boolean}
*/
runsOnFeatureRequest: function(key) {
return !!(this.runsOnRequest && this.targetKey === key);
},
/**
* sets the configuration key the detector is attempting to auto-detect
*
* @param {string} key
*/
setTargetKey: function(key) {
this.targetKey = key;
},
/**
* returns the configuration key the detector is attempting to
* auto-detect
*/
getTargetKey: function() {
return this.targetKey;
},
/**
* runs the detector. This method is supposed to be implemented by the
* concrete detector.
*
* Must return false if the detector decides not to run.
* Must return a jqXHR object otherwise, which is provided by the
* model's callWizard()
*
* @param {OCA.LDAP.Wizard.ConfigModel} model
* @param {string} configID - the configuration prefix
* @returns {boolean|jqXHR}
* @abstract
*/
run: function(model, configID) {
// to be implemented by subClass
return false;
},
/**
* processes the result of the Nextcloud server
*
* @param {OCA.LDAP.Wizard.ConfigModel} model
* @param {WizardDetectorGeneric} detector
* @param {object} result
*/
processResult: function(model, detector, result) {
model['notifyAboutDetectionCompletion'](detector.getTargetKey());
if(result.status === 'success') {
for (var id in result.changes) {
// update and not set method, as values are already stored
model['update'](id, result.changes[id]);
}
} else {
var payload = { relatedKey: detector.targetKey };
if(!_.isUndefined(result.message)) {
payload.message = result.message;
}
model.gotServerError(payload);
}
}
});
OCA.LDAP.Wizard.WizardDetectorGeneric = WizardDetectorGeneric;
})();
@@ -0,0 +1,27 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc a Port Detector. It executes the auto-detection of the port
* by the Nextcloud server, if requirements are met.
*
* @constructor
*/
var WizardDetectorGroupCount = OCA.LDAP.Wizard.WizardDetectorFilterSimpleRequestAbstract.subClass({
init: function() {
this.setTargetKey('ldap_group_count');
this.wizardMethod = 'countGroups';
this.runsOnRequest = true;
}
});
OCA.LDAP.Wizard.WizardDetectorGroupCount = WizardDetectorGroupCount;
})();
@@ -0,0 +1,29 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc discovers object classes for the groups tab
*
* @constructor
*/
var WizardDetectorGroupObjectClasses = OCA.LDAP.Wizard.WizardDetectorFeatureAbstract.subClass({
/** @inheritdoc */
init: function() {
// given, it is not a configuration key
this.setTargetKey('ldap_groupfilter_objectclass');
this.wizardMethod = 'determineGroupObjectClasses';
this.featureName = 'GroupObjectClasses';
this.runsOnRequest = true;
}
});
OCA.LDAP.Wizard.WizardDetectorGroupObjectClasses = WizardDetectorGroupObjectClasses;
})();
@@ -0,0 +1,29 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc detects groups for the groups tab
*
* @constructor
*/
var WizardDetectorGroupsForGroups = OCA.LDAP.Wizard.WizardDetectorFeatureAbstract.subClass({
/** @inheritdoc */
init: function() {
// given, it is not a configuration key
this.setTargetKey('ldap_groupfilter_groups');
this.wizardMethod = 'determineGroupsForGroups';
this.featureName = 'GroupsForGroups';
this.runsOnRequest = true;
}
});
OCA.LDAP.Wizard.WizardDetectorGroupsForGroups = WizardDetectorGroupsForGroups;
})();
@@ -0,0 +1,29 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc detects groups for the users tab
*
* @constructor
*/
var WizardDetectorGroupsForUsers = OCA.LDAP.Wizard.WizardDetectorFeatureAbstract.subClass({
/** @inheritdoc */
init: function() {
// given, it is not a configuration key
this.setTargetKey('ldap_userfilter_groups');
this.wizardMethod = 'determineGroupsForUsers';
this.featureName = 'GroupsForUsers';
this.runsOnRequest = true;
}
});
OCA.LDAP.Wizard.WizardDetectorGroupsForUsers = WizardDetectorGroupsForUsers;
})();
@@ -0,0 +1,44 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc a Port Detector. It executes the auto-detection of the port
* by the Nextcloud server, if requirements are met.
*
* @constructor
*/
var WizardDetectorPort = OCA.LDAP.Wizard.WizardDetectorGeneric.subClass({
/** @inheritdoc */
init: function() {
this.setTargetKey('ldap_port');
this.runsOnRequest = true;
},
/**
* runs the detector, if port is not set.
*
* @param {OCA.LDAP.Wizard.ConfigModel} model
* @param {string} configID - the configuration prefix
* @returns {boolean|jqXHR}
* @abstract
*/
run: function(model, configID) {
model.notifyAboutDetectionStart('ldap_port');
var params = OC.buildQueryString({
action: 'guessPortAndTLS',
ldap_serverconfig_chooser: configID
});
return model.callWizard(params, this.processResult, this);
}
});
OCA.LDAP.Wizard.WizardDetectorPort = WizardDetectorPort;
})();
@@ -0,0 +1,89 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc only run detector is allowed to run at a time. Basically
* because we cannot have parallel LDAP connections per session. This
* queue is takes care of running all the detectors one after the other.
*
* @constructor
*/
var WizardDetectorQueue = OCA.LDAP.Wizard.WizardObject.subClass({
/**
* initializes the instance. Always call it after creating the instance.
*/
init: function() {
this.queue = [];
this.isRunning = false;
},
/**
* empties the queue and cancels a possibly running request
*/
reset: function() {
this.queue = [];
if(!_.isUndefined(this.runningRequest)) {
this.runningRequest.abort();
delete this.runningRequest;
}
this.isRunning = false;
},
/**
* a parameter-free callback that eventually executes the run method of
* the detector.
*
* @callback detectorCallBack
* @see OCA.LDAP.Wizard.ConfigModel._processSetResult
*/
/**
* adds a detector to the queue and attempts to trigger to run the
* next job, because it might be the first.
*
* @param {detectorCallBack} callback
*/
add: function(callback) {
this.queue.push(callback);
this.next();
},
/**
* Executes the next detector if none is running. This method is also
* automatically invoked after a detector finished.
*/
next: function() {
if(this.isRunning === true || this.queue.length === 0) {
return;
}
this.isRunning = true;
var callback = this.queue.shift();
var request = callback();
// we receive either false or a jqXHR object
// false in case the detector decided against executing
if(request === false) {
this.isRunning = false;
this.next();
return;
}
this.runningRequest = request;
var detectorQueue = this;
$.when(request).then(function() {
detectorQueue.isRunning = false;
detectorQueue.next();
});
}
});
OCA.LDAP.Wizard.WizardDetectorQueue = WizardDetectorQueue;
})();
@@ -0,0 +1,44 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc a Port Detector. It executes the auto-detection of the port
* by the Nextcloud server, if requirements are met.
*
* @constructor
*/
var WizardDetectorFilterSimpleRequestAbstract = OCA.LDAP.Wizard.WizardDetectorGeneric.subClass({
runsOnRequest: true,
/**
* runs the detector, if port is not set.
*
* @param {OCA.LDAP.Wizard.ConfigModel} model
* @param {string} configID - the configuration prefix
* @returns {boolean|jqXHR}
* @abstract
*/
run: function(model, configID) {
if(_.isUndefined(this.wizardMethod)) {
console.warn('wizardMethod not set! ' + this.constructor);
return false;
}
model.notifyAboutDetectionStart(this.targetKey);
var params = OC.buildQueryString({
action: this.wizardMethod,
ldap_serverconfig_chooser: configID
});
return model.callWizard(params, this.processResult, this);
}
});
OCA.LDAP.Wizard.WizardDetectorFilterSimpleRequestAbstract = WizardDetectorFilterSimpleRequestAbstract;
})();
@@ -0,0 +1,63 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc a Port Detector. It executes the auto-detection of the port
* by the Nextcloud server, if requirements are met.
*
* @constructor
*/
var WizardDetectorTestAbstract = OCA.LDAP.Wizard.WizardDetectorGeneric.subClass({
isLegacy: false,
/**
* runs the test
*
* @param {OCA.LDAP.Wizard.ConfigModel} model
* @param {string} configID - the configuration prefix
* @param {Object} params - additional parameters needed to send to the
* wizard
* @returns {boolean|jqXHR}
* @abstract
*/
run: function(model, configID, params) {
if(_.isUndefined(this.wizardMethod) && !this.isLegacy) {
console.warn('wizardMethod not set! ' + this.constructor);
return false;
}
model.notifyAboutDetectionStart(this.getTargetKey());
params = params || {};
params = OC.buildQueryString($.extend({
action: this.wizardMethod,
ldap_serverconfig_chooser: configID
}, params));
if(!this.isLegacy) {
return model.callWizard(params, this.processResult, this);
} else {
return model.callAjax(this.legacyDestination, params, this.processResult, this);
}
},
/**
* @inheritdoc
*/
processResult: function(model, detector, result) {
model['notifyAboutDetectionCompletion'](detector.getTargetKey());
var payload = {
feature: detector.testName,
data: result
};
model.inform(payload);
}
});
OCA.LDAP.Wizard.WizardDetectorTestAbstract = WizardDetectorTestAbstract;
})();
@@ -0,0 +1,29 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc Tests, how many objects reside in the given base DN(s)
*
* @constructor
*/
var WizardDetectorTestBaseDN = OCA.LDAP.Wizard.WizardDetectorTestAbstract.subClass({
/** @inheritdoc */
init: function() {
// given, it is not a configuration key
this.setTargetKey('ldap_test_base');
this.testName = 'TestBaseDN';
this.wizardMethod = 'countInBaseDN';
this.runsOnRequest = true;
}
});
OCA.LDAP.Wizard.WizardDetectorTestBaseDN = WizardDetectorTestBaseDN;
})();
@@ -0,0 +1,31 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc a Port Detector. It executes the auto-detection of the port
* by the Nextcloud server, if requirements are met.
*
* @constructor
*/
var WizardDetectorTestConfiguration = OCA.LDAP.Wizard.WizardDetectorTestAbstract.subClass({
/** @inheritdoc */
init: function() {
// given, it is not a configuration key
this.setTargetKey('ldap_action_test_connection');
this.testName = 'TestConfiguration';
this.isLegacy = true;
this.legacyDestination = 'testConfiguration.php';
this.runsOnRequest = true;
}
});
OCA.LDAP.Wizard.WizardDetectorTestConfiguration = WizardDetectorTestConfiguration;
})();
@@ -0,0 +1,30 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc checks whether the provided log in name can be resolved into
* a DN using the current login filter
*
* @constructor
*/
var WizardDetectorTestLoginName = OCA.LDAP.Wizard.WizardDetectorTestAbstract.subClass({
/** @inheritdoc */
init: function() {
// given, it is not a configuration key
this.setTargetKey('ldap_test_loginname');
this.testName = 'TestLoginName';
this.wizardMethod = 'testLoginName';
this.runsOnRequest = true;
}
});
OCA.LDAP.Wizard.WizardDetectorTestLoginName = WizardDetectorTestLoginName;
})();
@@ -0,0 +1,26 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc let's the wizard backend count the available users
*
* @constructor
*/
var WizardDetectorUserCount = OCA.LDAP.Wizard.WizardDetectorFilterSimpleRequestAbstract.subClass({
init: function() {
this.setTargetKey('ldap_user_count');
this.wizardMethod = 'countUsers';
this.runsOnRequest = true;
}
});
OCA.LDAP.Wizard.WizardDetectorUserCount = WizardDetectorUserCount;
})();
@@ -0,0 +1,39 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc let's the wizard backend count the available users
*
* @constructor
*/
var WizardDetectorUserDisplayNameAttribute = OCA.LDAP.Wizard.WizardDetectorFilterSimpleRequestAbstract.subClass({
init: function() {
this.setTargetKey('ldap_user_count');
this.wizardMethod = 'detectUserDisplayNameAttribute';
this.runsOnRequest = true;
},
/**
* @inheritdoc
*/
run: function(model, configID) {
// default value has capital N. Detected values are always lowercase
if(model.configuration.ldap_display_name && model.configuration.ldap_display_name !== 'displayName') {
// a value is already set. Don't overwrite and don't ask LDAP
// without reason.
return false;
}
this._super(model, configID);
}
});
OCA.LDAP.Wizard.WizardDetectorUserDisplayNameAttribute = WizardDetectorUserDisplayNameAttribute;
})();
@@ -0,0 +1,40 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc let's the wizard backend count the available users
*
* @constructor
*/
var WizardDetectorUserGroupAssociation = OCA.LDAP.Wizard.WizardDetectorFilterSimpleRequestAbstract.subClass({
init: function() {
this.setTargetKey('ldap_group_count');
this.wizardMethod = 'determineGroupMemberAssoc';
this.runsOnRequest = true;
},
/**
* @inheritdoc
*/
run: function(model, configID) {
// TODO: might be better with configuration marker as uniqueMember
// is a valid value (although probably less common then member and memberUid).
if(model.configuration.ldap_group_member_assoc_attribute && model.configuration.ldap_group_member_assoc_attribute !== '') {
// a value is already set. Don't overwrite and don't ask LDAP
// without reason.
return false;
}
this._super(model, configID);
}
});
OCA.LDAP.Wizard.WizardDetectorUserGroupAssociation = WizardDetectorUserGroupAssociation;
})();
@@ -0,0 +1,29 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc discovers object classes for the users tab
*
* @constructor
*/
var WizardDetectorUserObjectClasses = OCA.LDAP.Wizard.WizardDetectorFeatureAbstract.subClass({
/** @inheritdoc */
init: function() {
// given, it is not a configuration key
this.setTargetKey('ldap_userfilter_objectclass');
this.wizardMethod = 'determineUserObjectClasses';
this.featureName = 'UserObjectClasses';
this.runsOnRequest = true;
}
});
OCA.LDAP.Wizard.WizardDetectorUserObjectClasses = WizardDetectorUserObjectClasses;
})();
@@ -0,0 +1,61 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc filters a select box when a text element is typed in
*/
var FilterOnType = OCA.LDAP.Wizard.WizardObject.subClass({
/**
* initializes a type filter on a text input for a select element
*
* @param {jQuery} $select
* @param {jQuery} $textInput
*/
init: function($select, $textInput) {
this.$select = $select;
this.$textInput = $textInput;
this.lastSearch = '';
var fity = this;
$textInput.bind('change keyup', function () {
if(fity.runID) {
window.clearTimeout(fity.runID);
}
fity.runID = window.setTimeout(function() {
fity.filter(fity);
}, 250);
});
},
/**
* the actual search or filter method
*
* @param {FilterOnType} fity
*/
filter: function(fity) {
var filterVal = fity.$textInput.val().toLowerCase();
if(filterVal === fity.lastSearch) {
return;
}
fity.lastSearch = filterVal;
fity.$select.find('option').each(function() {
if(!filterVal || $(this).val().toLowerCase().indexOf(filterVal) > -1) {
$(this).removeAttr('hidden')
} else {
$(this).attr('hidden', 'hidden');
}
});
delete(fity.runID);
}
});
OCA.LDAP.Wizard.FilterOnType = FilterOnType;
})();
@@ -0,0 +1,27 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc creates instances of OCA.LDAP.Wizard.FilterOnType upon request
*/
var FilterOnTypeFactory = OCA.LDAP.Wizard.WizardObject.subClass({
/**
* initializes a type filter on a text input for a select element
*
* @param {jQuery} $select
* @param {jQuery} $textInput
*/
get: function($select, $textInput) {
return new OCA.LDAP.Wizard.FilterOnType($select, $textInput);
}
});
OCA.LDAP.Wizard.FilterOnTypeFactory = FilterOnTypeFactory;
})();
@@ -0,0 +1,60 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
var initializing = false;
var superPattern = /xyz/.test(function() { xyz; }) ? /\b_super\b/ : /.*/;
/**
* @classdesc a base class that allows inheritance
*
* @abstrcact
* @constructor
*/
var WizardObject = function(){};
WizardObject.subClass = function(properties) {
var _super = this.prototype;
initializing = true;
var proto = new this();
initializing = false;
for (var name in properties) {
proto[name] =
typeof properties[name] === "function" &&
typeof _super[name] === 'function' &&
superPattern.test(properties[name]) ?
(function (name, fn) {
return function () {
var tmp = this._super;
this._super = _super[name];
var ret = fn.apply(this, arguments);
this._super = tmp;
return ret;
};
})(name, properties[name]) :
properties[name];
};
function Class() {
if(!initializing && this.init) {
this.init.apply(this, arguments);
}
}
Class.prototype = proto;
Class.constructor = Class;
Class.subClass = arguments.callee;
return Class;
};
WizardObject.constructor = WizardObject;
OCA.LDAP.Wizard.WizardObject = WizardObject;
})();
@@ -0,0 +1,384 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc This class represents the view belonging to the server tab
* in the LDAP wizard.
*/
var WizardTabAbstractFilter = OCA.LDAP.Wizard.WizardTabGeneric.subClass({
/**
* @property {number} number that needs to exceeded to use complex group
* selection element
*/
_groupElementSwitchThreshold: 40,
/**
* @property {boolean} - tells whether multiselect or complex element is
* used for selecting groups
*/
isComplexGroupChooser: false,
/** @property {string} */
tabID: '',
/**
* initializes the instance. Always call it after initialization.
* concrete view must set managed items first, and then call the parent
* init.
*
* @param {OCA.LDAP.Wizard.FilterOnTypeFactory} fotf
* @param {number} [tabIndex]
* @param {string} [tabID]
*/
init: function (fotf, tabIndex, tabID) {
this._super(tabIndex, tabID);
/** @type {OCA.LDAP.Wizard.FilterOnTypeFactory} */
this.foTFactory = fotf;
this._initMultiSelect(
this.getGroupsItem().$element,
t('user_ldap', 'Select groups')
);
this._initMultiSelect(
this.getObjectClassItem().$element,
t('user_ldap', 'Select object classes')
);
this.filterName = this.getFilterItem().keyName;
this._initFilterModeSwitcher(
this.getToggleItem().$element,
this.getRawFilterContainerItem().$element,
[ this.getObjectClassItem().$element ],
this.getFilterModeKey(),
{
status: 'disabled',
$element: this.getGroupsItem().$element
}
);
_.bindAll(this, 'onCountButtonClick', 'onSelectGroup', 'onDeselectGroup');
this.getCountItem().$relatedElements.click(this.onCountButtonClick);
if(this.manyGroupsSupport) {
var $selectBtn = $(this.tabID).find('.ldapGroupListSelect');
$selectBtn.click(this.onSelectGroup);
var $deselectBtn = $(this.tabID).find('.ldapGroupListDeselect');
$deselectBtn.click(this.onDeselectGroup);
}
},
/**
* returns managed item for the object class chooser. must be
* implemented by concrete view
*/
getObjectClassItem: function () {},
/**
* returns managed item for the group chooser. must be
* implemented by concrete view
*/
getGroupsItem: function () {},
/**
* returns managed item for the effective filter. must be
* implemented by concrete view
*/
getFilterItem: function () {},
/**
* returns managed item for the toggle element. must be
* implemented by concrete view
*/
getToggleItem: function () {},
/**
* returns managed item for the raw filter container. must be
* implemented by concrete view
*/
getRawFilterContainerItem: function () {},
/**
* returns managed item for the count control. must be
* implemented by concrete view
*/
getCountItem: function () {},
/**
* returns name of the filter mode key. must be implemented by concrete
* view
*/
getFilterModeKey: function () {},
/**
* Sets the config model for this view and subscribes to some events.
* Also binds the config chooser to the model
*
* @param {OCA.LDAP.Wizard.ConfigModel} configModel
*/
setModel: function(configModel) {
this._super(configModel);
this.configModel.on('configLoaded', this.onConfigSwitch, this);
this.configModel.on('receivedLdapFeature', this.onFeatureReceived, this);
},
/**
* @inheritdoc
*/
_setFilterModeAssisted: function () {
this._super();
if(this.isComplexGroupChooser) {
this.enableElement(this.getGroupsItem().$relatedElements);
}
},
/**
* @inheritdoc
*/
_setFilterModeRaw: function () {
this._super();
if(this.manyGroupsSupport) {
this.disableElement(this.getGroupsItem().$relatedElements);
}
},
/**
* sets the selected user object classes
*
* @param {Array} classes
*/
setObjectClass: function(classes) {
this.setElementValue(this.getObjectClassItem().$element, classes);
this.getObjectClassItem().$element.multiselect('refresh');
},
/**
* sets the selected groups
*
* @param {string} groups
*/
setGroups: function(groups) {
if(typeof groups === 'string') {
groups = groups.split("\n");
}
if(!this.isComplexGroupChooser) {
this.setElementValue(this.getGroupsItem().$element, groups);
this.getGroupsItem().$element.multiselect('refresh');
} else {
var $element = $(this.tabID).find('.ldapGroupListSelected');
this.equipMultiSelect($element, groups);
this.updateFilterOnType();
}
},
/**
* sets the filter
*
* @param {string} filter
*/
setFilter: function(filter) {
this.setElementValue(this.getFilterItem().$element, filter);
this.$filterModeRawContainer.siblings('.ldapReadOnlyFilterContainer').find('.ldapFilterReadOnlyElement').text(filter);
},
/**
* sets the user count string
*
* @param {string} countInfo
*/
setCount: function(countInfo) {
this.setElementValue(this.getCountItem().$element, countInfo);
},
/**
* @inheritdoc
*/
considerFeatureRequests: function() {
if(!this.isActive) {
return;
}
if(this.getObjectClassItem().$element.find('option').length === 0) {
this.disableElement(this.getObjectClassItem().$element);
this.disableElement(this.getGroupsItem().$element);
if(this.parsedFilterMode === this.configModel.FILTER_MODE_ASSISTED) {
this.configModel.requestWizard(this.getObjectClassItem().keyName);
this.configModel.requestWizard(this.getGroupsItem().keyName);
}
}
},
/**
* updates (creates, if necessary) filterOnType instances
*/
updateFilterOnType: function() {
if(_.isUndefined(this.filterOnType)) {
this.filterOnType = [];
var $availableGroups = $(this.tabID).find('.ldapGroupListAvailable');
this.filterOnType.push(this.foTFactory.get(
$availableGroups, $(this.tabID).find('.ldapManyGroupsSearch')
));
var $selectedGroups = $(this.tabID).find('.ldapGroupListSelected');
this.filterOnType.push(this.foTFactory.get(
$selectedGroups, $(this.tabID).find('.ldapManyGroupsSearch')
));
}
},
/**
* @inheritdoc
*/
onActivate: function() {
this._super();
this.considerFeatureRequests();
},
/**
* resets the view when a configuration switch happened.
*
* @param {WizardTabAbstractFilter} view
* @param {Object} configuration
*/
onConfigSwitch: function(view, configuration) {
view.getObjectClassItem().$element.find('option').remove();
view.getGroupsItem().$element.find('option').remove();
view.getCountItem().$element.text('');
$(view.tabID).find('.ldapGroupListAvailable').empty();
$(view.tabID).find('.ldapGroupListSelected').empty();
view.updateFilterOnType();
$(view.tabID).find('.ldapManyGroupsSearch').val('');
if(view.isComplexGroupChooser) {
view.isComplexGroupChooser = false;
view.getGroupsItem().$element.multiselect({classes: view.multiSelectPluginClass});
$(view.tabID).find(".ldapManyGroupsSupport").addClass('hidden');
}
view.onConfigLoaded(view, configuration);
},
/**
* @inheritdoc
*/
onConfigLoaded: function(view, configuration) {
for(var key in view.managedItems){
if(!_.isUndefined(configuration[key])) {
var value = configuration[key];
var methodName = view.managedItems[key].setMethod;
if(!_.isUndefined(view[methodName])) {
view[methodName](value);
// we reimplement it here to update the filter index
// for groups. Maybe we can isolate it?
if(methodName === 'setGroups') {
view.updateFilterOnType();
}
}
}
}
},
/**
* if UserObjectClasses are found, the corresponding element will be
* updated
*
* @param {WizardTabAbstractFilter} view
* @param {FeaturePayload} payload
*/
onFeatureReceived: function(view, payload) {
if(payload.feature === view.getObjectClassItem().featureName) {
view.equipMultiSelect(view.getObjectClassItem().$element, payload.data);
if( !view.getFilterItem().$element.val()
&& view.parsedFilterMode === view.configModel.FILTER_MODE_ASSISTED
) {
view.configModel.requestWizard(view.getFilterItem().keyName);
}
} else if (payload.feature === view.getGroupsItem().featureName) {
if(view.manyGroupsSupport && payload.data.length > view._groupElementSwitchThreshold) {
// we need to fill the left list box, excluding the values
// that are already selected
var $element = $(view.tabID).find('.ldapGroupListAvailable');
var selected = view.configModel.configuration[view.getGroupsItem().keyName];
var available = $(payload.data).not(selected).get();
view.equipMultiSelect($element, available);
$(view.tabID).find(".ldapManyGroupsSupport").removeClass('hidden');
view.getGroupsItem().$element.multiselect({classes: view.multiSelectPluginClass + ' forceHidden'});
view.isComplexGroupChooser = true;
} else {
view.isComplexGroupChooser = false;
view.equipMultiSelect(view.getGroupsItem().$element, payload.data);
view.getGroupsItem().$element.multiselect({classes: view.multiSelectPluginClass});
$(view.tabID).find(".ldapManyGroupsSupport").addClass('hidden');
}
}
},
/**
* request to count the users with the current filter
*
* @param {Event} event
*/
onCountButtonClick: function(event) {
event.preventDefault();
// let's clear the field
this.getCountItem().$element.text('');
this.configModel.requestWizard(this.getCountItem().keyName);
},
/**
* saves groups when using the complex UI
*
* @param {Array} groups
* @returns {boolean}
* @private
*/
_saveGroups: function(groups) {
var toSave = '';
$(groups).each(function() { toSave = toSave + "\n" + this; } );
this.configModel.set(this.getGroupsItem().keyName, $.trim(toSave));
},
/**
* acts on adding groups to the filter
*/
onSelectGroup: function() {
var $available = $(this.tabID).find('.ldapGroupListAvailable');
if(!$available.val()) {
return; // no selection nothing to do
}
var $selected = $(this.tabID).find('.ldapGroupListSelected');
var selected = $.map($selected.find('option'), function(e) { return e.value; });
let selectedGroups = [];
$available.find('option:selected:visible').each(function() {
selectedGroups.push($(this).val());
});
this._saveGroups(selected.concat(selectedGroups));
$available.find('option:selected:visible').prependTo($selected);
this.updateFilterOnType(); // selected groups are not updated yet
$available.find('option:selected').prop("selected", false);
},
/**
* acts on removing groups to the filter
*/
onDeselectGroup: function() {
var $available = $(this.tabID).find('.ldapGroupListAvailable');
var $selected = $(this.tabID).find('.ldapGroupListSelected');
var selected = $.map($selected.find('option:not(:selected:visible)'), function(e) { return e.value; });
this._saveGroups(selected);
$selected.find('option:selected:visible').appendTo($available);
this.updateFilterOnType(); // selected groups are not updated yet
$selected.find('option:selected').prop("selected", false);
}
});
OCA.LDAP.Wizard.WizardTabAbstractFilter = WizardTabAbstractFilter;
})();
@@ -0,0 +1,515 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc This class represents the view belonging to the advanced tab
* in the LDAP wizard.
*/
var WizardTabAdvanced = OCA.LDAP.Wizard.WizardTabGeneric.subClass({
/**
* initializes the instance. Always call it after initialization.
*
* @param {any} tabIndex -
* @param {any} tabID -
*/
init: function (tabIndex, tabID) {
this._super(tabIndex, tabID);
var items = {
// Connection settings
ldap_configuration_active: {
$element: $('#ldap_configuration_active'),
setMethod: 'setConfigurationState'
},
ldap_backup_host: {
$element: $('#ldap_backup_host'),
setMethod: 'setBackupHost'
},
ldap_backup_port: {
$element: $('#ldap_backup_port'),
setMethod: 'setBackupPort'
},
ldap_override_main_server: {
$element: $('#ldap_override_main_server'),
setMethod: 'setOverrideMainServerState'
},
ldap_turn_off_cert_check: {
$element: $('#ldap_turn_off_cert_check'),
setMethod: 'setCertCheckDisabled'
},
ldap_cache_ttl: {
$element: $('#ldap_cache_ttl'),
setMethod: 'setCacheTTL'
},
//Directory Settings
ldap_display_name: {
$element: $('#ldap_display_name'),
setMethod: 'setUserDisplayName'
},
ldap_user_display_name_2: {
$element: $('#ldap_user_display_name_2'),
setMethod: 'setUserDisplayName2'
},
ldap_base_users: {
$element: $('#ldap_base_users'),
setMethod: 'setBaseDNUsers'
},
ldap_attributes_for_user_search: {
$element: $('#ldap_attributes_for_user_search'),
setMethod: 'setSearchAttributesUsers'
},
ldap_mark_remnants_as_disabled: {
$element: $('#ldap_mark_remnants_as_disabled'),
setMethod: 'setMarkRemnantsAsDisabled'
},
ldap_group_display_name: {
$element: $('#ldap_group_display_name'),
setMethod: 'setGroupDisplayName'
},
ldap_base_groups: {
$element: $('#ldap_base_groups'),
setMethod: 'setBaseDNGroups'
},
ldap_attributes_for_group_search: {
$element: $('#ldap_attributes_for_group_search'),
setMethod: 'setSearchAttributesGroups'
},
ldap_group_member_assoc_attribute: {
$element: $('#ldap_group_member_assoc_attribute'),
setMethod: 'setGroupMemberAssociationAttribute'
},
ldap_dynamic_group_member_url: {
$element: $('#ldap_dynamic_group_member_url'),
setMethod: 'setDynamicGroupMemberURL'
},
ldap_nested_groups: {
$element: $('#ldap_nested_groups'),
setMethod: 'setUseNestedGroups'
},
ldap_paging_size: {
$element: $('#ldap_paging_size'),
setMethod: 'setPagingSize'
},
ldap_turn_on_pwd_change: {
$element: $('#ldap_turn_on_pwd_change'),
setMethod: 'setPasswordChangeEnabled'
},
ldap_default_ppolicy_dn: {
$element: $('#ldap_default_ppolicy_dn'),
setMethod: 'setDefaultPPolicyDN'
},
//Special Attributes
ldap_quota_attr: {
$element: $('#ldap_quota_attr'),
setMethod: 'setQuotaAttribute'
},
ldap_quota_def: {
$element: $('#ldap_quota_def'),
setMethod: 'setQuotaDefault'
},
ldap_email_attr: {
$element: $('#ldap_email_attr'),
setMethod: 'setEmailAttribute'
},
home_folder_naming_rule: {
$element: $('#home_folder_naming_rule'),
setMethod: 'setHomeFolderAttribute'
},
ldap_ext_storage_home_attribute: {
$element: $('#ldap_ext_storage_home_attribute'),
setMethod: 'setExternalStorageHomeAttribute'
},
//User Profile Attributes
ldap_attr_phone: {
$element: $('#ldap_attr_phone'),
setMethod: 'setPhoneAttribute'
},
ldap_attr_website: {
$element: $('#ldap_attr_website'),
setMethod: 'setWebsiteAttribute'
},
ldap_attr_address: {
$element: $('#ldap_attr_address'),
setMethod: 'setAddressAttribute'
},
ldap_attr_twitter: {
$element: $('#ldap_attr_twitter'),
setMethod: 'setTwitterAttribute'
},
ldap_attr_fediverse: {
$element: $('#ldap_attr_fediverse'),
setMethod: 'setFediverseAttribute'
},
ldap_attr_organisation: {
$element: $('#ldap_attr_organisation'),
setMethod: 'setOrganisationAttribute'
},
ldap_attr_role: {
$element: $('#ldap_attr_role'),
setMethod: 'setRoleAttribute'
},
ldap_attr_headline: {
$element: $('#ldap_attr_headline'),
setMethod: 'setHeadlineAttribute'
},
ldap_attr_biography: {
$element: $('#ldap_attr_biography'),
setMethod: 'setBiographyAttribute'
},
};
this.setManagedItems(items);
},
/**
* Sets the config model for this view and subscribes to some events.
* Also binds the config chooser to the model
*
* @param {OCA.LDAP.Wizard.ConfigModel} configModel
*/
setModel: function(configModel) {
this._super(configModel);
this.configModel.on('configLoaded', this.onConfigLoaded, this);
this.configModel.on('receivedLdapFeature', this.onResultReceived, this);
},
/**
* updates the experienced admin check box
*
* @param {string} isConfigActive contains an int
*/
setConfigurationState: function(isConfigActive) {
this.setElementValue(
this.managedItems.ldap_configuration_active.$element, isConfigActive
);
},
/**
* updates the backup host configuration text field
*
* @param {string} host
*/
setBackupHost: function(host) {
this.setElementValue(this.managedItems.ldap_backup_host.$element, host);
},
/**
* updates the backup port configuration text field
*
* @param {string} port
*/
setBackupPort: function(port) {
this.setElementValue(this.managedItems.ldap_backup_port.$element, port);
},
/**
* sets whether the main server should be overridden or not
*
* @param {string} doOverride contains an int
*/
setOverrideMainServerState: function(doOverride) {
this.setElementValue(
this.managedItems.ldap_override_main_server.$element, doOverride
);
},
/**
* sets whether the SSL/TLS certification check shout be disabled
*
* @param {string} doCertCheck contains an int
*/
setCertCheckDisabled: function(doCertCheck) {
this.setElementValue(
this.managedItems.ldap_turn_off_cert_check.$element, doCertCheck
);
},
/**
* sets the time-to-live of the LDAP cache (in seconds)
*
* @param {string} cacheTTL contains an int
*/
setCacheTTL: function(cacheTTL) {
this.setElementValue(this.managedItems.ldap_cache_ttl.$element, cacheTTL);
},
/**
* sets the user display name attribute
*
* @param {string} attribute
*/
setUserDisplayName: function(attribute) {
this.setElementValue(this.managedItems.ldap_display_name.$element, attribute);
},
/**
* sets the additional user display name attribute
*
* @param {string} attribute
*/
setUserDisplayName2: function(attribute) {
this.setElementValue(this.managedItems.ldap_user_display_name_2.$element, attribute);
},
/**
* sets the Base DN for users
*
* @param {string} base
*/
setBaseDNUsers: function(base) {
this.setElementValue(this.managedItems.ldap_base_users.$element, base);
},
/**
* sets the attributes for user searches
*
* @param {string} attributes
*/
setSearchAttributesUsers: function(attributes) {
this.setElementValue(this.managedItems.ldap_attributes_for_user_search.$element, attributes);
},
/**
* enables or disables marking remnants as disabled
*
* @param {string} markRemnantsAsDisabled contains an int
*/
setMarkRemnantsAsDisabled: function(markRemnantsAsDisabled) {
this.setElementValue(this.managedItems.ldap_mark_remnants_as_disabled.$element, markRemnantsAsDisabled);
},
/**
* sets the display name attribute for groups
*
* @param {string} attribute
*/
setGroupDisplayName: function(attribute) {
this.setElementValue(this.managedItems.ldap_group_display_name.$element, attribute);
},
/**
* sets the Base DN for groups
*
* @param {string} base
*/
setBaseDNGroups: function(base) {
this.setElementValue(this.managedItems.ldap_base_groups.$element, base);
},
/**
* sets the attributes for group search
*
* @param {string} attributes
*/
setSearchAttributesGroups: function(attributes) {
this.setElementValue(this.managedItems.ldap_attributes_for_group_search.$element, attributes);
},
/**
* sets the attribute for the association of users and groups
*
* @param {string} attribute
*/
setGroupMemberAssociationAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_group_member_assoc_attribute.$element, attribute);
},
/**
* sets the dynamic group member url attribute
*
* @param {string} attribute
*/
setDynamicGroupMemberURL: function(attribute) {
this.setElementValue(this.managedItems.ldap_dynamic_group_member_url.$element, attribute);
},
/**
* enabled or disables the use of nested groups (groups in groups in
* groups…)
*
* @param {string} useNestedGroups contains an int
*/
setUseNestedGroups: function(useNestedGroups) {
this.setElementValue(this.managedItems.ldap_nested_groups.$element, useNestedGroups);
},
/**
* sets the size of pages for paged search
*
* @param {string} size contains an int
*/
setPagingSize: function(size) {
this.setElementValue(this.managedItems.ldap_paging_size.$element, size);
},
/**
* sets whether the password changes per user should be enabled
*
* @param {string} doPasswordChange contains an int
*/
setPasswordChangeEnabled: function(doPasswordChange) {
this.setElementValue(
this.managedItems.ldap_turn_on_pwd_change.$element, doPasswordChange
);
},
/**
* sets the default ppolicy attribute
*
* @param {string} attribute
*/
setDefaultPPolicyDN: function(attribute) {
this.setElementValue(this.managedItems.ldap_default_ppolicy_dn.$element, attribute);
},
/**
* sets the email attribute
*
* @param {string} attribute
*/
setEmailAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_email_attr.$element, attribute);
},
/**
* sets the external storage home attribute
*
* @param {string} attribute
*/
setExternalStorageHomeAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_ext_storage_home_attribute.$element, attribute);
},
/**
* sets the quota attribute
*
* @param {string} attribute
*/
setQuotaAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_quota_attr.$element, attribute);
},
/**
* sets the default quota for LDAP users
*
* @param {string} quota contains an int
*/
setQuotaDefault: function(quota) {
this.setElementValue(this.managedItems.ldap_quota_def.$element, quota);
},
/**
* sets the attribute for the Nextcloud user specific home folder location
*
* @param {string} attribute
*/
setHomeFolderAttribute: function(attribute) {
this.setElementValue(this.managedItems.home_folder_naming_rule.$element, attribute);
},
/**
* sets the attribute for the Nextcloud user profile phone Number
*
* @param {string} attribute
*/
setPhoneAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_attr_phone.$element, attribute);
},
/**
* sets the attribute for the Nextcloud user profile website
*
* @param {string} attribute
*/
setWebsiteAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_attr_website.$element, attribute);
},
/**
* sets the attribute for the Nextcloud user profile postal address
*
* @param {string} attribute
*/
setAddressAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_attr_address.$element, attribute);
},
/**
* sets the attribute for the Nextcloud user profile twitter
*
* @param {string} attribute
*/
setTwitterAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_attr_twitter.$element, attribute);
},
/**
* sets the attribute for the Nextcloud user profile fediverse
*
* @param {string} attribute
*/
setFediverseAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_attr_fediverse.$element, attribute);
},
/**
* sets the attribute for the Nextcloud user profile organisation
*
* @param {string} attribute
*/
setOrganisationAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_attr_organisation.$element, attribute);
},
/**
* sets the attribute for the Nextcloud user profile role
*
* @param {string} attribute
*/
setRoleAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_attr_role.$element, attribute);
},
/**
* sets the attribute for the Nextcloud user profile headline
*
* @param {string} attribute
*/
setHeadlineAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_attr_headline.$element, attribute);
},
/**
* sets the attribute for the Nextcloud user profile biography
*
* @param {string} attribute
*/
setBiographyAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_attr_biography.$element, attribute);
},
/**
* deals with the result of the Test Connection test
*
* @param {WizardTabAdvanced} view
* @param {FeaturePayload} payload
*/
onResultReceived: function(view, payload) {
if(payload.feature === 'TestConfiguration') {
OC.Notification.showTemporary(payload.data.message);
}
}
});
OCA.LDAP.Wizard.WizardTabAdvanced = WizardTabAdvanced;
})();
@@ -0,0 +1,390 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc This class represents the view belonging to the server tab
* in the LDAP wizard.
*/
var WizardTabElementary = OCA.LDAP.Wizard.WizardTabGeneric.subClass({
/** @property {number} */
_configChooserNextServerNumber: 1,
baseDNTestTriggered: false,
/**
* initializes the instance. Always call it after initialization.
*
* @param {any} tabIndex -
* @param {any} tabID -
*/
init: function (tabIndex, tabID) {
tabIndex = 0;
this._super(tabIndex, tabID);
this.isActive = true;
this.$configChooser = $('#ldap_serverconfig_chooser');
var items = {
ldap_host: {
$element: $('#ldap_host'),
setMethod: 'setHost'
},
ldap_port: {
$element: $('#ldap_port'),
setMethod: 'setPort',
$relatedElements: $('.ldapDetectPort')
},
ldap_dn: {
$element: $('#ldap_dn'),
setMethod: 'setAgentDN',
preventAutoSave: true,
$saveButton: $('.ldapSaveAgentCredentials')
},
ldap_agent_password: {
$element: $('#ldap_agent_password'),
setMethod: 'setAgentPwd',
preventAutoSave: true,
$saveButton: $('.ldapSaveAgentCredentials')
},
ldap_base: {
$element: $('#ldap_base'),
setMethod: 'setBase',
$relatedElements: $('.ldapDetectBase, .ldapTestBase'),
$detectButton: $('.ldapDetectBase'),
$testButton: $('.ldapTestBase')
},
ldap_base_test: {
$element: $('#ldap_base')
},
ldap_experienced_admin: {
$element: $('#ldap_experienced_admin'),
setMethod: 'setExperiencedAdmin'
}
};
this.setManagedItems(items);
_.bindAll(this,
'onPortButtonClick',
'onBaseDNButtonClick',
'onBaseDNTestButtonClick'
);
this.managedItems.ldap_port.$relatedElements.click(this.onPortButtonClick);
this.managedItems.ldap_base.$detectButton.click(this.onBaseDNButtonClick);
this.managedItems.ldap_base.$testButton.click(this.onBaseDNTestButtonClick);
},
/**
* Sets the config model for this view and subscribes to some events.
* Also binds the config chooser to the model
*
* @param {OCA.LDAP.Wizard.ConfigModel} configModel
*/
setModel: function(configModel) {
this._super(configModel);
this.configModel.on('configLoaded', this.onConfigSwitch, this);
this.configModel.on('newConfiguration', this.onNewConfiguration, this);
this.configModel.on('deleteConfiguration', this.onDeleteConfiguration, this);
this.configModel.on('receivedLdapFeature', this.onTestResultReceived, this);
this._enableConfigChooser();
this._enableConfigButtons();
},
/**
* returns the currently selected configuration ID
*
* @returns {string}
*/
getConfigID: function() {
return this.$configChooser.val();
},
/**
* updates the host configuration text field
*
* @param {string} host
*/
setHost: function(host) {
this.setElementValue(this.managedItems.ldap_host.$element, host);
if(host) {
this.enableElement(this.managedItems.ldap_port.$relatedElements);
} else {
this.disableElement(this.managedItems.ldap_port.$relatedElements);
}
},
/**
* updates the port configuration text field
*
* @param {string} port
*/
setPort: function(port) {
this.setElementValue(this.managedItems.ldap_port.$element, port);
},
/**
* updates the user (agent) DN text field
*
* @param {string} agentDN
*/
setAgentDN: function(agentDN) {
this.setElementValue(this.managedItems.ldap_dn.$element, agentDN);
},
/**
* updates the user (agent) password field
*
* @param {string} agentPwd
*/
setAgentPwd: function(agentPwd) {
this.setElementValue(
this.managedItems.ldap_agent_password.$element, agentPwd
);
if (agentPwd && $('html').hasClass('lte9')) {
// make it a password field again (IE fix, placeholders bug)
this.managedItems.ldap_agent_password.$element.attr('type', 'password');
}
},
/**
* updates the base DN text area
*
* @param {string} bases
*/
setBase: function(bases) {
this.setElementValue(this.managedItems.ldap_base.$element, bases);
if(!bases) {
this.disableElement(this.managedItems.ldap_base.$testButton);
} else {
this.enableElement(this.managedItems.ldap_base.$testButton);
}
},
/**
* updates the experienced admin check box
*
* @param {string} xpAdminMode contains an int
*/
setExperiencedAdmin: function(xpAdminMode) {
this.setElementValue(
this.managedItems.ldap_experienced_admin.$element, xpAdminMode
);
},
/**
* @inheritdoc
*/
overrideErrorMessage: function(message, key) {
var original = message;
message = this._super(message, key);
if(original !== message) {
// we pass the parents change
return message;
}
switch(key) {
case 'ldap_port':
if (message === 'Invalid credentials') {
return t('user_ldap', 'Please check the credentials, they seem to be wrong.');
} else {
return t('user_ldap', 'Please specify the port, it could not be auto-detected.');
}
break;
case 'ldap_base':
if( message === 'Server is unwilling to perform'
|| message === 'Could not connect to LDAP'
) {
return t('user_ldap', 'Base DN could not be auto-detected, please revise credentials, host and port.');
}
return t('user_ldap', 'Could not detect Base DN, please enter it manually.');
break;
}
return message;
},
/**
* resets the view when a configuration switch happened.
*
* @param {WizardTabElementary} view
* @param {Object} configuration
*/
onConfigSwitch: function(view, configuration) {
this.baseDNTestTriggered = false;
view.disableElement(view.managedItems.ldap_port.$relatedElements);
view.managedItems.ldap_dn.$saveButton.removeClass('primary');
view.onConfigLoaded(view, configuration);
},
/**
* updates the configuration chooser when a new configuration was added
* which also means it is being switched to. The configuration fields
* are updated on a different step.
*
* @param {WizardTabElementary} view
* @param {Object} result
*/
onNewConfiguration: function(view, result) {
if(result.isSuccess === true) {
var nthServer = view._configChooserNextServerNumber;
view.$configChooser.find('option:selected').removeAttr('selected');
var html = '<option value="'+result.configPrefix+'" selected="selected">'+t('user_ldap','{nthServer}. Server', {nthServer: nthServer})+'</option>';
if(view.$configChooser.find('option:last').length > 0) {
view.$configChooser.find('option:last').after(html);
} else {
view.$configChooser.html(html);
}
view._configChooserNextServerNumber++;
}
},
/**
* updates the configuration chooser upon the deletion of a
* configuration and, if necessary, loads an existing one.
*
* @param {any} view -
* @param {any} result -
*/
onDeleteConfiguration: function(view, result) {
if(result.isSuccess === true) {
if(view.getConfigID() === result.configPrefix) {
// if the deleted value is still the selected one (99% of
// the cases), remove it from the list and load the topmost
view.$configChooser.find('option:selected').remove();
view.$configChooser.find('option:first').select();
if(view.$configChooser.find(' option').length < 1) {
view.configModel.newConfig(false);
} else {
view.configModel.load(view.getConfigID());
}
} else {
// otherwise just remove the entry
view.$configChooser.find('option[value=' + result.configPrefix + ']').remove();
}
} else {
OC.Notification.showTemporary(result.errorMessage);
}
},
/**
* Base DN test results will arrive here
*
* @param {WizardTabElementary} view
* @param {FeaturePayload} payload
*/
onTestResultReceived: function(view, payload) {
if(view.baseDNTestTriggered && payload.feature === 'TestBaseDN') {
view.enableElement(view.managedItems.ldap_base.$testButton);
var message;
if(payload.data.status === 'success') {
var objectsFound = parseInt(payload.data.changes.ldap_test_base, 10);
if(objectsFound < 1) {
message = t('user_ldap', 'No object found in the given Base DN. Please revise.');
} else if(objectsFound > 1000) {
message = t('user_ldap', 'More than 1,000 directory entries available.');
} else {
message = n(
'user_ldap',
'{objectsFound} entry available within the provided Base DN',
'{objectsFound} entries available within the provided Base DN',
objectsFound,
{
objectsFound: objectsFound
});
}
} else {
message = view.overrideErrorMessage(payload.data.message);
message = message || t('user_ldap', 'An error occurred. Please check the Base DN, as well as connection settings and credentials.');
if(payload.data.message) {
console.warn(payload.data.message);
}
}
OC.Notification.showTemporary(message);
}
},
/**
* request to count the users with the current filter
*
* @param {Event} event
*/
onPortButtonClick: function(event) {
event.preventDefault();
this.configModel.requestWizard('ldap_port');
},
/**
* request to count the users with the current filter
*
* @param {Event} event
*/
onBaseDNButtonClick: function(event) {
event.preventDefault();
this.configModel.requestWizard('ldap_base');
},
/**
* request to count the users with the current filter
*
* @param {Event} event
*/
onBaseDNTestButtonClick: function(event) {
event.preventDefault();
this.baseDNTestTriggered = true;
this.configModel.requestWizard('ldap_test_base');
this.disableElement(this.managedItems.ldap_base.$testButton);
},
/**
* registers the change event on the configuration chooser and makes
* the model load a newly selected configuration
*
* @private
*/
_enableConfigChooser: function() {
this._configChooserNextServerNumber = this.$configChooser.find(' option').length + 1;
var view = this;
this.$configChooser.change(function(){
var value = view.$configChooser.find(' option:selected:first').attr('value');
view.configModel.load(value);
});
},
/**
* adds actions to the action buttons for configuration management
*
* @private
*/
_enableConfigButtons: function() {
var view = this;
$('#ldap_action_delete_configuration').click(function(event) {
event.preventDefault();
OC.dialogs.confirm(
t('user_ldap', 'Do you really want to delete the current Server Configuration?'),
t('user_ldap', 'Confirm Deletion'),
function(doDelete) {
if(doDelete) {
view.configModel.deleteConfig(view.getConfigID());
}
},
false
);
});
$('#ldap_action_add_configuration').click(function(event) {
event.preventDefault();
view.configModel.newConfig(false);
});
$('#ldap_action_copy_configuration').click(function(event) {
event.preventDefault();
view.configModel.newConfig(true);
});
}
});
OCA.LDAP.Wizard.WizardTabElementary = WizardTabElementary;
})();
@@ -0,0 +1,130 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc This class represents the view belonging to the expert tab
* in the LDAP wizard.
*/
var WizardTabExpert = OCA.LDAP.Wizard.WizardTabGeneric.subClass({
/**
* initializes the instance. Always call it after initialization.
*
* @param {any} tabIndex -
* @param {any} tabID -
*/
init: function (tabIndex, tabID) {
this._super(tabIndex, tabID);
var items = {
ldap_expert_username_attr: {
$element: $('#ldap_expert_username_attr'),
setMethod: 'setUsernameAttribute'
},
ldap_expert_uuid_user_attr: {
$element: $('#ldap_expert_uuid_user_attr'),
setMethod: 'setUserUUIDAttribute'
},
ldap_expert_uuid_group_attr: {
$element: $('#ldap_expert_uuid_group_attr'),
setMethod: 'setGroupUUIDAttribute'
},
//Buttons
ldap_action_clear_user_mappings: {
$element: $('#ldap_action_clear_user_mappings')
},
ldap_action_clear_group_mappings: {
$element: $('#ldap_action_clear_group_mappings')
}
};
this.setManagedItems(items);
_.bindAll(this, 'onClearUserMappingsClick', 'onClearGroupMappingsClick');
this.managedItems.ldap_action_clear_user_mappings.$element.click(this.onClearUserMappingsClick);
this.managedItems.ldap_action_clear_group_mappings.$element.click(this.onClearGroupMappingsClick);
},
/**
* Sets the config model for this view and subscribes to some events.
* Also binds the config chooser to the model
*
* @param {OCA.LDAP.Wizard.ConfigModel} configModel
*/
setModel: function(configModel) {
this._super(configModel);
this.configModel.on('configLoaded', this.onConfigLoaded, this);
this.configModel.on('receivedLdapFeature', this.onResultReceived, this);
},
/**
* sets the attribute to be used to create an Nextcloud ID (username)
*
* @param {string} attribute
*/
setUsernameAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_expert_username_attr.$element, attribute);
},
/**
* sets the attribute that provides an unique identifier per LDAP user
* entry
*
* @param {string} attribute
*/
setUserUUIDAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_expert_uuid_user_attr.$element, attribute);
},
/**
* sets the attribute that provides an unique identifier per LDAP group
* entry
*
* @param {string} attribute
*/
setGroupUUIDAttribute: function(attribute) {
this.setElementValue(this.managedItems.ldap_expert_uuid_group_attr.$element, attribute);
},
/**
* requests clearing of all user mappings
*/
onClearUserMappingsClick: function() {
this.configModel.requestWizard('ldap_action_clear_user_mappings', {ldap_clear_mapping: 'user'});
},
/**
* requests clearing of all group mappings
*/
onClearGroupMappingsClick: function() {
this.configModel.requestWizard('ldap_action_clear_group_mappings', {ldap_clear_mapping: 'group'});
},
/**
* deals with the result of the Test Connection test
*
* @param {WizardTabAdvanced} view
* @param {FeaturePayload} payload
*/
onResultReceived: function(view, payload) {
if(payload.feature === 'ClearMappings') {
var message;
if(payload.data.status === 'success') {
message = t('user_ldap', 'Mappings cleared successfully!');
} else {
message = t('user_ldap', 'Error while clearing the mappings.');
}
OC.Notification.showTemporary(message);
}
}
});
OCA.LDAP.Wizard.WizardTabExpert = WizardTabExpert;
})();
@@ -0,0 +1,643 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc An abstract tab view
* @abstract
*/
var WizardTabGeneric = OCA.LDAP.Wizard.WizardObject.subClass({
isActive: false,
/**
* @property {string} - class that identifies a multiselect-plugin
* control.
*/
multiSelectPluginClass: 'multiSelectPlugin',
/**
* @property {string} - class that identifies a multiselect-plugin
* control.
*/
bjQuiButtonClass: 'ui-button',
/**
* @property {boolean} - indicates whether a filter mode toggle operation
* is still in progress
*/
isToggling: false,
/** @inheritdoc */
init: function(tabIndex, tabID) {
this.tabIndex = tabIndex;
this.tabID = tabID;
this.spinner = $('.ldapSpinner').first().clone().removeClass('hidden');
_.bindAll(this, '_toggleRawFilterMode', '_toggleRawFilterModeConfirmation');
},
/**
* sets the configuration items that are managed by that view.
*
* The parameter contains key-value pairs the key being the
* configuration keys and the value being its setter method.
*
* @param {object} managedItems
*/
setManagedItems: function(managedItems) {
this.managedItems = managedItems;
this._enableAutoSave();
this._enableSaveButton();
},
/**
* Sets the config model. The concrete view likely wants to subscribe
* to events as well.
*
* @param {OCA.LDAP.Wizard.ConfigModel} configModel
*/
setModel: function(configModel) {
this.configModel = configModel;
this.parsedFilterMode = this.configModel.FILTER_MODE_ASSISTED;
this.configModel.on('detectionStarted', this.onDetectionStarted, this);
this.configModel.on('detectionCompleted', this.onDetectionCompleted, this);
this.configModel.on('serverError', this.onServerError, this);
this.configModel.on('setCompleted', this.onItemSaved, this);
this.configModel.on('configUpdated', this.onConfigLoaded, this);
},
/**
* the method can be used to display a different error/information
* message than provided by the Nextcloud server response. The concrete
* Tab View may optionally implement it. Returning an empty string will
* avoid any notification.
*
* @param {string} message
* @param {string} key
* @returns {string}
*/
overrideErrorMessage: function(message, key) {
if(message === 'LDAP authentication method rejected'
&& !this.configModel.configuration.ldap_dn)
{
message = t('user_ldap', 'Anonymous bind is not allowed. Please provide a User DN and Password.');
} else if (message === 'LDAP Operations error'
&& !this.configModel.configuration.ldap_dn
&& !this.configModel.configuration.ldap_agent_password)
{
message = t('user_ldap', 'LDAP Operations error. Anonymous bind might not be allowed.');
}
return message;
},
/**
* this is called by the main view, if the tab is being switched to.
*/
onActivate: function() {
if(!_.isUndefined(this.filterModeKey)
&& this.configModel.configuration.ldap_experienced_admin === '1') {
this.setFilterMode(this.configModel.FILTER_MODE_RAW);
}
},
/**
* updates the tab when the model loaded a configuration and notified
* this view.
*
* @param {WizardTabGeneric} view - this instance
* @param {Object} configuration
*/
onConfigLoaded: function(view, configuration) {
for(var key in view.managedItems){
if(!_.isUndefined(configuration[key])) {
var value = configuration[key];
var methodName = view.managedItems[key].setMethod;
if(!_.isUndefined(view[methodName])) {
view[methodName](value);
}
}
}
},
/**
* reacts on a set action on the model and updates the tab with the
* valid value.
*
* @param {WizardTabGeneric} view
* @param {Object} result
*/
onItemSaved: function(view, result) {
if(!_.isUndefined(view.managedItems[result.key])) {
var methodName = view.managedItems[result.key].setMethod;
view[methodName](result.value);
if(!result.isSuccess) {
OC.Notification.showTemporary(t('user_ldap', 'Saving failed. Please make sure the database is in Operation. Reload before continuing.'));
console.warn(result.errorMessage);
}
}
},
/**
* displays server error messages.
*
* @param {any} view -
* @param {any} payload -
*/
onServerError: function(view, payload) {
if ( !_.isUndefined(view.managedItems[payload.relatedKey])) {
var message = view.overrideErrorMessage(payload.message, payload.relatedKey);
if(message) {
OC.Notification.showTemporary(message);
}
}
},
/**
* disables affected, managed fields if a detector is running against them
*
* @param {WizardTabGeneric} view
* @param {string} key
*/
onDetectionStarted: function(view, key) {
if(!_.isUndefined(view.managedItems[key])) {
view.disableElement(view.managedItems[key].$element);
if(!_.isUndefined(view.managedItems[key].$relatedElements)){
view.disableElement(view.managedItems[key].$relatedElements);
}
view.attachSpinner(view.managedItems[key].$element.attr('id'));
}
},
/**
* enables affected, managed fields after a detector was run against them
*
* @param {WizardTabGeneric} view
* @param {string} key
*/
onDetectionCompleted: function(view, key) {
if(!_.isUndefined(view.managedItems[key])) {
view.enableElement(view.managedItems[key].$element);
if(!_.isUndefined(view.managedItems[key].$relatedElements)){
view.enableElement(view.managedItems[key].$relatedElements);
}
view.removeSpinner(view.managedItems[key].$element.attr('id'));
}
},
/**
* sets the value to an HTML element. Checkboxes, text areas and (text)
* input fields are supported.
*
* @param {jQuery} $element - the target element
* @param {string|number|Array} value
*/
setElementValue: function($element, value) {
// deal with check box
if ($element.is('input[type=checkbox]')) {
this._setCheckBox($element, value);
return;
}
// special cases: deal with text area and multiselect
if ($element.is('textarea') && $.isArray(value)) {
value = value.join("\n");
} else if($element.hasClass(this.multiSelectPluginClass)) {
if(!_.isArray(value)) {
value = value.split("\n");
}
}
if ($element.is('span')) {
$element.text(value);
} else {
$element.val(value);
}
},
/**
* replaces options on a multiselect element
*
* @param {jQuery} $element - the multiselect element
* @param {Array} options
*/
equipMultiSelect: function($element, options) {
if($element.find('option').length === 0) {
$element.empty();
for (var i in options) {
var name = options[i];
$element.append($('<option>').val(name).text(name).attr('title', name));
}
}
if(!$element.hasClass('ldapGroupList')) {
$element.multiselect('refresh');
this.enableElement($element);
}
},
/**
* enables the specified HTML element
*
* @param {jQuery} $element
*/
enableElement: function($element) {
var isMS = $element.is('select[multiple]');
var hasOptions = isMS ? ($element.find('option').length > 0) : false;
if($element.hasClass(this.multiSelectPluginClass) && hasOptions) {
$element.multiselect("enable");
} else if ($element.hasClass(this.bjQuiButtonClass)) {
$element.button("enable");
}
else if(!isMS || (isMS && hasOptions)) {
$element.prop('disabled', false);
}
},
/**
* disables the specified HTML element
*
* @param {jQuery} $element
*/
disableElement: function($element) {
if($element.hasClass(this.multiSelectPluginClass)) {
$element.multiselect("disable");
} else if ($element.hasClass(this.bjQuiButtonClass)) {
$element.button("disable");
} else {
$element.prop('disabled', 'disabled');
}
},
/**
* attaches a spinner icon to the HTML element specified by ID
*
* @param {string} elementID
*/
attachSpinner: function(elementID) {
if($('#' + elementID + ' + .ldapSpinner').length == 0) {
var spinner = this.spinner.clone();
var $element = $('#' + elementID);
$(spinner).insertAfter($element);
// and special treatment for multiselects:
if ($element.is('select[multiple]')) {
$('#' + elementID + " + img + button").css('display', 'none');
}
}
},
/**
* removes the spinner icon from the HTML element specified by ID
*
* @param {string} elementID
*/
removeSpinner: function(elementID) {
$('#' + elementID+' + .ldapSpinner').remove();
// and special treatment for multiselects:
$('#' + elementID + " + button").css('display', 'inline');
},
/**
* whether the wizard works in experienced admin mode
*
* @returns {boolean}
*/
isExperiencedMode: function() {
return parseInt(this.configModel.configuration.ldap_experienced_admin, 10) === 1;
},
/**
* sets up auto-save functionality to the managed items
*
* @private
*/
_enableAutoSave: function() {
var view = this;
for(var id in this.managedItems) {
if(_.isUndefined(this.managedItems[id].$element)
|| _.isUndefined(this.managedItems[id].setMethod)
|| (!_.isUndefined(this.managedItems[id].preventAutoSave)
&& this.managedItems[id].preventAutoSave === true)
) {
continue;
}
var $element = this.managedItems[id].$element;
if (!$element.is('select[multiple]')) {
$element.change(function() {
view._requestSave($(this));
});
}
}
},
/**
* set's up save-button behavior (essentially used for agent dn and pwd)
*
* @private
*/
_enableSaveButton: function() {
var view = this;
// TODO: this is not nice, because it fires one request per change
// in the scenario this happens twice, causes detectors to run
// duplicated etc. To have this work properly, the wizard endpoint
// must accept setting multiple changes. Instead of messing around
// with old ajax/wizard.php use this opportunity and create a
// Controller
for(var id in this.managedItems) {
if(_.isUndefined(this.managedItems[id].$element)
|| _.isUndefined(this.managedItems[id].$saveButton)
) {
continue;
}
(function (item) {
item.$saveButton.click(function(event) {
event.preventDefault();
view._requestSave(item.$element);
item.$saveButton.removeClass('primary');
});
item.$element.change(function () {
item.$saveButton.addClass('primary');
});
})(this.managedItems[id]);
}
},
/**
* initializes a multiSelect element
*
* @param {jQuery} $element
* @param {string} caption
* @private
*/
_initMultiSelect: function($element, caption) {
var view = this;
$element.multiselect({
header: false,
selectedList: 9,
noneSelectedText: caption,
classes: this.multiSelectPluginClass,
close: function() {
view._requestSave($element);
}
});
},
/**
* @typedef {object} viewSaveInfo
* @property {Function} val
* @property {Function} attr
* @property {Function} is
*/
/**
* requests a save operation from the model for a given value
* represented by a HTML element and its ID.
*
* @param {jQuery|viewSaveInfo} $element
* @private
*/
_requestSave: function($element) {
var value = '';
if($element.is('input[type=checkbox]')
&& !$element.is(':checked')) {
value = 0;
} else if ($element.is('select[multiple]')) {
var entries = $element.multiselect("getChecked");
for(var i = 0; i < entries.length; i++) {
value = value + "\n" + entries[i].value;
}
value = $.trim(value);
} else {
value = $element.val();
}
this.configModel.set($element.attr('id'), value);
},
/**
* updates a checkbox element according to the provided value
*
* @param {jQuery} $element
* @param {string|number} value
* @private
*/
_setCheckBox: function($element, value) {
if(parseInt(value, 10) === 1) {
$element.prop('checked', 'checked');
} else {
$element.removeAttr('checked');
}
},
/**
* this is called when the filter mode is switched to assisted. The
* concrete tab view should implement this, to load LDAP features
* (e.g. object classes, groups, attributes…), if necessary.
*/
considerFeatureRequests: function() {},
/**
* this is called when the filter mode is switched to Assisted. The
* concrete tab view should request the compilation of the respective
* filter.
*/
requestCompileFilter: function() {
this.configModel.requestWizard(this.filterName);
},
/**
* sets the filter mode initially and resets the "isToggling" marker.
* This method is called after a save operation against the mode key.
*
* @param {any} mode -
*/
setFilterModeOnce: function(mode) {
this.isToggling = false;
if(!this.filterModeInitialized) {
this.filterModeInitialized = true;
this.setFilterMode(mode);
}
},
/**
* sets the filter mode according to the provided configuration value
*
* @param {string} mode
*/
setFilterMode: function(mode) {
if(parseInt(mode, 10) === this.configModel.FILTER_MODE_ASSISTED) {
this.parsedFilterMode = this.configModel.FILTER_MODE_ASSISTED;
this.considerFeatureRequests();
this._setFilterModeAssisted();
if(this.isActive) {
// filter compilation should happen only, if the mode was
// switched manually, but not when initiating the view
this.requestCompileFilter();
}
} else {
this._setFilterModeRaw();
this.parsedFilterMode = this.configModel.FILTER_MODE_RAW;
}
},
/**
* updates the UI so that it represents the assisted mode setting
*
* @private
*/
_setFilterModeAssisted: function() {
var view = this;
this.$filterModeRawContainer.addClass('invisible');
var filter = this.$filterModeRawContainer.find('.ldapFilterInputElement').val();
this.$filterModeRawContainer.siblings('.ldapReadOnlyFilterContainer').find('.ldapFilterReadOnlyElement').text(filter);
this.$filterModeRawContainer.siblings('.ldapReadOnlyFilterContainer').removeClass('hidden');
$.each(this.filterModeDisableableElements, function(i, $element) {
view.enableElement($element);
});
if(!_.isUndefined(this.filterModeStateElement)) {
if (this.filterModeStateElement.status === 'enabled') {
this.enableElement(this.filterModeStateElement.$element);
} else {
this.filterModeStateElement.status = 'disabled';
}
}
},
/**
* updates the UI so that it represents the raw mode setting
*
* @private
*/
_setFilterModeRaw: function() {
var view = this;
this.$filterModeRawContainer.removeClass('invisible');
this.$filterModeRawContainer.siblings('.ldapReadOnlyFilterContainer').addClass('hidden');
$.each(this.filterModeDisableableElements, function (i, $element) {
view.disableElement($element);
});
if(!_.isUndefined(this.filterModeStateElement)) {
if(this.filterModeStateElement.$element.multiselect().attr('disabled') === 'disabled') {
this.filterModeStateElement.status = 'disabled';
} else {
this.filterModeStateElement.status = 'enabled';
}
}
if(!_.isUndefined(this.filterModeStateElement)) {
this.disableElement(this.filterModeStateElement.$element);
}
},
/**
* @callback toggleConfirmCallback
* @param {boolean} isConfirmed
*/
/**
* shows a confirmation dialogue before switching from raw to assisted
* mode if experienced mode is enabled.
*
* @param {toggleConfirmCallback} toggleFnc
* @private
*/
_toggleRawFilterModeConfirmation: function(toggleFnc) {
if( !this.isExperiencedMode()
|| this.parsedFilterMode === this.configModel.FILTER_MODE_ASSISTED
) {
toggleFnc(true);
} else {
OC.dialogs.confirm(
t('user_ldap', 'Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?'),
t('user_ldap', 'Mode switch'),
toggleFnc
);
}
},
/**
* toggles the visibility of a raw filter container and so also the
* state of the multi-select controls. The model is requested to save
* the state.
*/
_toggleRawFilterMode: function() {
var view = this;
this._toggleRawFilterModeConfirmation(function(isConfirmed) {
if(!isConfirmed) {
return;
}
/** var {number} */
var mode;
if (view.parsedFilterMode === view.configModel.FILTER_MODE_ASSISTED) {
mode = view.configModel.FILTER_MODE_RAW;
} else {
mode = view.configModel.FILTER_MODE_ASSISTED;
}
view.setFilterMode(mode);
/** @var {viewSaveInfo} */
var saveInfo = {
val: function () {
return mode;
},
attr: function () {
return view.filterModeKey;
},
is: function () {
return false;
}
};
view._requestSave(saveInfo);
});
},
/**
* @typedef {object} filterModeStateElementObj
* @property {string} status - either "enabled" or "disabled"
* @property {jQuery} $element
*/
/**
* initializes a raw filter mode switcher
*
* @param {jQuery} $switcher - the element receiving the click
* @param {jQuery} $filterModeRawContainer - contains the raw filter
* input elements
* @param {jQuery[]} filterModeDisableableElements - an array of elements
* not belonging to the raw filter part that shall be en/disabled.
* @param {string} filterModeKey - the setting key that save the state
* of the mode
* @param {filterModeStateElementObj} [filterModeStateElement] - one element
* which status (enabled or not) is tracked by a setting
* @private
*/
_initFilterModeSwitcher: function(
$switcher,
$filterModeRawContainer,
filterModeDisableableElements,
filterModeKey,
filterModeStateElement
) {
this.$filterModeRawContainer = $filterModeRawContainer;
this.filterModeDisableableElements = filterModeDisableableElements;
this.filterModeStateElement = filterModeStateElement;
this.filterModeKey = filterModeKey;
var view = this;
$switcher.click(function() {
if(view.isToggling) {
return;
}
view.isToggling = true;
view._toggleRawFilterMode();
});
},
});
OCA.LDAP.Wizard.WizardTabGeneric = WizardTabGeneric;
})();
@@ -0,0 +1,124 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc This class represents the view belonging to the server tab
* in the LDAP wizard.
*/
var WizardTabGroupFilter = OCA.LDAP.Wizard.WizardTabAbstractFilter.subClass({
/**
* @inheritdoc
*/
init: function (fotf, tabIndex, tabID) {
tabID = '#ldapWizard4';
var items = {
ldap_groupfilter_objectclass: {
$element: $('#ldap_groupfilter_objectclass'),
setMethod: 'setObjectClass',
keyName: 'ldap_groupfilter_objectclass',
featureName: 'GroupObjectClasses'
},
ldap_group_filter_mode: {
setMethod: 'setFilterModeOnce'
},
ldap_groupfilter_groups: {
$element: $('#ldap_groupfilter_groups'),
setMethod: 'setGroups',
keyName: 'ldap_groupfilter_groups',
featureName: 'GroupsForGroups',
$relatedElements: $(
tabID + ' .ldapGroupListAvailable,' +
tabID + ' .ldapGroupListSelected,' +
tabID + ' .ldapManyGroupsSearch'
)
},
ldap_group_filter: {
$element: $('#ldap_group_filter'),
setMethod: 'setFilter',
keyName: 'ldap_group_filter'
},
groupFilterRawToggle: {
$element: $('#toggleRawGroupFilter')
},
groupFilterRawContainer: {
$element: $('#rawGroupFilterContainer')
},
ldap_group_count: {
$element: $('#ldap_group_count'),
$relatedElements: $('.ldapGetGroupCount'),
setMethod: 'setCount',
keyName: 'ldap_group_count'
}
};
this.setManagedItems(items);
this.manyGroupsSupport = true;
this._super(fotf, tabIndex, tabID);
},
/**
* @inheritdoc
* @returns {Object}
*/
getObjectClassItem: function () {
return this.managedItems.ldap_groupfilter_objectclass;
},
/**
* @inheritdoc
* @returns {Object}
*/
getGroupsItem: function () {
return this.managedItems.ldap_groupfilter_groups;
},
/**
* @inheritdoc
* @returns {Object}
*/
getFilterItem: function () {
return this.managedItems.ldap_group_filter;
},
/**
* @inheritdoc
* @returns {Object}
*/
getToggleItem: function () {
return this.managedItems.groupFilterRawToggle;
},
/**
* @inheritdoc
* @returns {Object}
*/
getRawFilterContainerItem: function () {
return this.managedItems.groupFilterRawContainer;
},
/**
* @inheritdoc
* @returns {Object}
*/
getCountItem: function () {
return this.managedItems.ldap_group_count;
},
/**
* @inheritdoc
* @returns {string}
*/
getFilterModeKey: function () {
return 'ldap_group_filter_mode';
}
});
OCA.LDAP.Wizard.WizardTabGroupFilter = WizardTabGroupFilter;
})();
@@ -0,0 +1,271 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc This class represents the view belonging to the login filter
* tab in the LDAP wizard.
*/
var WizardTabLoginFilter = OCA.LDAP.Wizard.WizardTabGeneric.subClass({
/**
* initializes the instance. Always call it after initialization.
*
* @param {any} tabIndex -
* @param {any} tabID -
*/
init: function (tabIndex, tabID) {
this._super(tabIndex, tabID);
var items = {
ldap_loginfilter_username: {
$element: $('#ldap_loginfilter_username'),
setMethod: 'setLoginAttributeUsername'
},
ldap_loginfilter_email: {
$element: $('#ldap_loginfilter_email'),
setMethod: 'setLoginAttributeEmail'
},
ldap_login_filter_mode: {
setMethod: 'setFilterModeOnce'
},
ldap_loginfilter_attributes: {
$element: $('#ldap_loginfilter_attributes'),
setMethod: 'setLoginAttributesOther'
},
ldap_login_filter: {
$element: $('#ldap_login_filter'),
setMethod: 'setLoginFilter'
},
loginFilterRawToggle: {
$element: $('#toggleRawLoginFilter')
},
loginFilterRawContainer: {
$element: $('#rawLoginFilterContainer')
},
ldap_test_loginname: {
$element: $('#ldap_test_loginname'),
$relatedElements: $('.ldapVerifyLoginName')
}
};
this.setManagedItems(items);
this.filterModeKey = 'ldapLoginFilterMode';
this._initMultiSelect(
this.managedItems.ldap_loginfilter_attributes.$element,
t('user_ldap', 'Select attributes')
);
this.filterName = 'ldap_login_filter';
this._initFilterModeSwitcher(
this.managedItems.loginFilterRawToggle.$element,
this.managedItems.loginFilterRawContainer.$element,
[
this.managedItems.ldap_loginfilter_username.$element,
this.managedItems.ldap_loginfilter_email.$element,
this.managedItems.ldap_loginfilter_attributes.$element
],
'ldap_login_filter_mode'
);
_.bindAll(this, 'onVerifyClick', 'onTestLoginnameChange');
this.managedItems.ldap_test_loginname.$element.keyup(this.onTestLoginnameChange);
this.managedItems.ldap_test_loginname.$relatedElements.click(this.onVerifyClick);
},
/**
* Sets the config model for this view and subscribes to some events.
* Also binds the config chooser to the model
*
* @param {OCA.LDAP.Wizard.ConfigModel} configModel
*/
setModel: function(configModel) {
this._super(configModel);
this.configModel.on('configLoaded', this.onConfigSwitch, this);
this.configModel.on('configUpdated', this.onConfigUpdated, this);
this.configModel.on('receivedLdapFeature', this.onFeatureReceived, this);
},
/**
* sets the selected attributes
*
* @param {Array} attributes
*/
setLoginAttributesOther: function(attributes) {
this.setElementValue(this.managedItems.ldap_loginfilter_attributes.$element, attributes);
this.managedItems.ldap_loginfilter_attributes.$element.multiselect('refresh');
},
/**
* sets the login list filter
*
* @param {string} filter
*/
setLoginFilter: function(filter) {
this.setElementValue(this.managedItems.ldap_login_filter.$element, filter);
this.$filterModeRawContainer.siblings('.ldapReadOnlyFilterContainer').find('.ldapFilterReadOnlyElement').text(filter);
},
/**
* updates the username attribute check box
*
* @param {string} useUsername contains an int
*/
setLoginAttributeUsername: function(useUsername) {
this.setElementValue(
this.managedItems.ldap_loginfilter_username.$element, useUsername
);
},
/**
* updates the email attribute check box
*
* @param {string} useEmail contains an int
*/
setLoginAttributeEmail: function(useEmail) {
this.setElementValue(
this.managedItems.ldap_loginfilter_email.$element, useEmail
);
},
/**
* presents the result of the login name test
*
* @param {any} result -
*/
handleLoginTestResult: function(result) {
var message;
var isHtml = false;
if(result.status === 'success') {
var usersFound = parseInt(result.changes.ldap_test_loginname, 10);
if(usersFound < 1) {
var filter = $('<p>').text(result.changes.ldap_test_effective_filter).html();
message = t('user_ldap', 'User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>' + filter);
console.warn(filter);
isHtml = true;
} else if(usersFound === 1) {
message = t('user_ldap', 'User found and settings verified.');
} else if(usersFound > 1) {
message = t('user_ldap', 'Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in.');
}
} else {
message = t('user_ldap', 'An unspecified error occurred. Please check log and settings.');
if(!_.isUndefined(result.message) && result.message) {
message = result.message;
}
if(message === 'Bad search filter') {
message = t('user_ldap', 'The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise.');
} else if(message === 'connection error') {
message = t('user_ldap', 'A connection error to LDAP/AD occurred. Please check host, port and credentials.');
} else if(message === 'missing placeholder') {
message = t('user_ldap', 'The "%uid" placeholder is missing. It will be replaced with the login name when querying LDAP/AD.');
}
}
OC.Notification.showTemporary(message, {isHTML: isHtml});
},
/**
* @inheritdoc
*/
considerFeatureRequests: function() {
if(!this.isActive) {
return;
}
if(this.managedItems.ldap_loginfilter_attributes.$element.find('option').length === 0) {
this.disableElement(this.managedItems.ldap_loginfilter_attributes.$element);
if(this.parsedFilterMode === this.configModel.FILTER_MODE_ASSISTED) {
this.configModel.requestWizard('ldap_loginfilter_attributes');
}
}
},
/**
* @inheritdoc
*/
onActivate: function() {
this._super();
this.considerFeatureRequests();
if(!this.managedItems.ldap_login_filter.$element.val()) {
this.configModel.requestWizard('ldap_login_filter');
}
},
/**
* resets the view when a configuration switch happened.
*
* @param {WizardTabLoginFilter} view
* @param {Object} configuration
*/
onConfigSwitch: function(view, configuration) {
view.managedItems.ldap_loginfilter_attributes.$element.find('option').remove();
view.onConfigLoaded(view, configuration);
},
/**
* @param {WizardTabLoginFilter} view
* @param {Object} configuration
*/
onConfigUpdated: function(view, configuration) {
// When the user list filter is updated in assisted mode, also
// update the login filter automatically.
if(
!_.isUndefined(configuration.ldap_userlist_filter)
&& view.parsedFilterMode === view.configModel.FILTER_MODE_ASSISTED
&& _.toArray(configuration).length === 1
) {
view.configModel.requestWizard('ldap_login_filter');
}
},
/**
* if UserObjectClasses are found, the corresponding element will be
* updated
*
* @param {WizardTabLoginFilter} view
* @param {FeaturePayload} payload
*/
onFeatureReceived: function(view, payload) {
if(payload.feature === 'AvailableAttributes') {
view.equipMultiSelect(view.managedItems.ldap_loginfilter_attributes.$element, payload.data);
} else if(payload.feature === 'TestLoginName') {
view.handleLoginTestResult(payload.data);
}
},
/**
* request to test the provided login name
*
* @param {Event} event
*/
onVerifyClick: function(event) {
event.preventDefault();
var testLogin = this.managedItems.ldap_test_loginname.$element.val();
if(!testLogin) {
OC.Notification.showTemporary(t('user_ldap', 'Please provide a login name to test against'), 3);
} else {
this.configModel.requestWizard('ldap_test_loginname', {ldap_test_loginname: testLogin});
}
},
/**
* enables/disables the "Verify Settings" button, depending whether
* the corresponding text input has a value or not
*/
onTestLoginnameChange: function() {
var loginName = this.managedItems.ldap_test_loginname.$element.val();
var beDisabled = !_.isString(loginName) || !loginName.trim();
if(beDisabled) {
this.disableElement(this.managedItems.ldap_test_loginname.$relatedElements);
} else {
this.enableElement(this.managedItems.ldap_test_loginname.$relatedElements);
}
}
});
OCA.LDAP.Wizard.WizardTabLoginFilter = WizardTabLoginFilter;
})();
@@ -0,0 +1,142 @@
/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc This class represents the view belonging to the server tab
* in the LDAP wizard.
*/
var WizardTabUserFilter = OCA.LDAP.Wizard.WizardTabAbstractFilter.subClass({
/**
* @inheritdoc
*/
init: function (fotf, tabIndex, tabID) {
tabID = '#ldapWizard2';
var items = {
ldap_userfilter_objectclass: {
$element: $('#ldap_userfilter_objectclass'),
setMethod: 'setObjectClass',
keyName: 'ldap_userfilter_objectclass',
featureName: 'UserObjectClasses'
},
ldap_user_filter_mode: {
setMethod: 'setFilterModeOnce'
},
ldap_userfilter_groups: {
$element: $('#ldap_userfilter_groups'),
setMethod: 'setGroups',
keyName: 'ldap_userfilter_groups',
featureName: 'GroupsForUsers',
$relatedElements: $(
tabID + ' .ldapGroupListAvailable,' +
tabID + ' .ldapGroupListSelected,' +
tabID + ' .ldapManyGroupsSearch'
)
},
ldap_userlist_filter: {
$element: $('#ldap_userlist_filter'),
setMethod: 'setFilter',
keyName: 'ldap_userlist_filter'
},
userFilterRawToggle: {
$element: $('#toggleRawUserFilter')
},
userFilterRawContainer: {
$element: $('#rawUserFilterContainer')
},
ldap_user_count: {
$element: $('#ldap_user_count'),
$relatedElements: $('.ldapGetUserCount'),
setMethod: 'setCount',
keyName: 'ldap_user_count'
}
};
this.setManagedItems(items);
this.manyGroupsSupport = true;
this._super(fotf, tabIndex, tabID);
},
/**
* @inheritdoc
* @returns {Object}
*/
getObjectClassItem: function () {
return this.managedItems.ldap_userfilter_objectclass;
},
/**
* @inheritdoc
* @returns {Object}
*/
getGroupsItem: function () {
return this.managedItems.ldap_userfilter_groups;
},
/**
* @inheritdoc
* @returns {Object}
*/
getFilterItem: function () {
return this.managedItems.ldap_userlist_filter;
},
/**
* @inheritdoc
* @returns {Object}
*/
getToggleItem: function () {
return this.managedItems.userFilterRawToggle;
},
/**
* @inheritdoc
* @returns {Object}
*/
getRawFilterContainerItem: function () {
return this.managedItems.userFilterRawContainer;
},
/**
* @inheritdoc
* @returns {Object}
*/
getCountItem: function () {
return this.managedItems.ldap_user_count;
},
/**
* @inheritdoc
* @returns {string}
*/
getFilterModeKey: function () {
return 'ldap_user_filter_mode';
},
/**
* @inheritdoc
*/
overrideErrorMessage: function(message, key) {
var original = message;
message = this._super(message, key);
if(original !== message) {
// we pass the parents change
return message;
}
if( key === 'ldap_userfilter_groups'
&& message === 'memberOf is not supported by the server'
) {
message = t('user_ldap', 'The group box was disabled, because the LDAP/AD server does not support memberOf.');
}
return message;
}
});
OCA.LDAP.Wizard.WizardTabUserFilter = WizardTabUserFilter;
})();
+7
View File
@@ -0,0 +1,7 @@
OC.L10N.register(
"user_ldap",
{
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""]
},
"nplurals=2; plural=(n > 1);");
@@ -0,0 +1,5 @@
{ "translations": {
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}
+7
View File
@@ -0,0 +1,7 @@
OC.L10N.register(
"user_ldap",
{
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
@@ -0,0 +1,5 @@
{ "translations": {
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+7
View File
@@ -0,0 +1,7 @@
OC.L10N.register(
"user_ldap",
{
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""]
},
"nplurals=2; plural=n > 1;");
+5
View File
@@ -0,0 +1,5 @@
{ "translations": {
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""]
},"pluralForm" :"nplurals=2; plural=n > 1;"
}
@@ -0,0 +1,7 @@
OC.L10N.register(
"user_ldap",
{
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
@@ -0,0 +1,5 @@
{ "translations": {
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+223
View File
@@ -0,0 +1,223 @@
OC.L10N.register(
"user_ldap",
{
"Failed to clear the mappings." : "فشل مسح الارتباطات mappings",
"Failed to delete the server configuration" : "تعذّر حذف ملف إعدادات الخادوم",
"Invalid configuration: Anonymous binding is not allowed." : "تكوين غير صالح: الربط المجهول Anonymous binding غير مسموح به.",
"Valid configuration, connection established!" : "تكوين صالح، تمّ تأسيس الاتصال!",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "تكوين صالح، لكن فشل الربط binding. يرجى التحقّق من إعدادات الخادوم و حيثيّات الدخول credentials.",
"Invalid configuration. Please have a look at the logs for further details." : "تكوين غير صحيح. يرجى الرجوع إلي سجلات الحركات logs لمزيد من التفاصيل.",
"No action specified" : "لم يتم تحديد أيّ إجراءٍ",
"No configuration specified" : "لم يتم تحديد أيّ إعداداتٍ",
"No data specified" : "لم يتم تحديد أيّ بياناتٍ",
"Invalid data specified" : "البيانات المُحدّدة غير صالحة",
" Could not set configuration %s" : "تعذّر تعيين الإعداد %s",
"Action does not exist" : "الإجراء غير موجود",
"Renewing …" : "التجديد جارٍ …",
"Very weak password" : "كلمة المرور ضعيفة جدا",
"Weak password" : "كلمة المرور ضعيفة",
"So-so password" : "كلمة المرور مقبولة نوعاً ما",
"Good password" : "كلمة المرور جيدة",
"Strong password" : "كلمة المرور قوية",
"The Base DN appears to be wrong" : "يبدو أن الاسم المميز الأساسي Base DN خاطئٌ",
"Testing configuration…" : "إختبار التهيئة...",
"Configuration incorrect" : "الإعدادات غير صحيحة",
"Configuration incomplete" : "الإعدادات غير مكتملة",
"Configuration OK" : "الإعدادات صحيحة",
"Select groups" : "إختر المجموعات",
"Select object classes" : "إختر أصناف الكائنات object classes",
"Please check the credentials, they seem to be wrong." : "يرجى التحقق من حيثيّات الدخول credentials، يبدو أنها خاطئة.",
"Please specify the port, it could not be auto-detected." : "يُرجى تحديد المنفذ port، حيث لا يمكن اكتشافه تلقائيا.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "تعذر اكتشاف الاسم المميز الأساسي Base DN تلقائيًا، يرجى مراجعة حيثيّات الدخول credentials، والمُضيف host، والمنفذ port.",
"Could not detect Base DN, please enter it manually." : "تعذّر اكتشاف الاسم المميز الأساسي Base DN، يُرجى إدخاله يدويًا.",
"{nthServer}. Server" : "{nthServer}. الخادوم",
"No object found in the given Base DN. Please revise." : "لم يتم العثور على أي كائن object في الاسم المميز الأساسي Base DN المحدد. يُرجي المُراجعة.",
"More than 1,000 directory entries available." : "يُوجد أكثر من 1,000 مُدخل في الدليل directory entries.",
"_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخل متاح من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم"],
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "حدث خطأ. يرجي التحقق من الاسم المميز الأساسي Base DN، وكذلك إعدادات الاتصال، و حيثيّات الدخول credentials.",
"Do you really want to delete the current Server Configuration?" : "هل ترغب فعلاً في حذف إعدادات الخادوم الحالي؟",
"Confirm Deletion" : "تأكيد الحذف",
"Mappings cleared successfully!" : "تم مسح الارتباطات mappings بنجاح!",
"Error while clearing the mappings." : "خطأ أثناء مسح الارتباطات mappings.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "الربط المجهول Anonymous bind غير مسموح به. يرجى إدخال الاسم المميز للمستخدم User DN، وكلمة المرور.",
"LDAP Operations error. Anonymous bind might not be allowed." : "خطأ في عمليات LDAP. قد لا يكون مسموحاُ بالربط المجهول Anonymous bind.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "فشل الحفظ. يرجى التأكد من أن قاعدة البيانات قيد التشغيل. أعد التحميل قبل المتابعة.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "تفعيل الوضع سوف ينتج عنه تمكين استعلامات بروتوكولLDAP التلقائية. وقد يستغرق الأمر بعض الوقت بناء على حجم LDAP خاصتك. هل ما زلت تريد تفعيل الوضع؟",
"Mode switch" : "تبديل النمط",
"Select attributes" : "اختر الخصائص",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "لم يتم العثور على المستخدم. يرجى التحقق من تحديدات تسجيل الدخول واسم المستخدم الخاصين بك. عامل التصفية الفعال (للنسخ واللصق للتحقق من صحة سطر الأوامر):<br/>",
"User found and settings verified." : "تم العثور على المستخدم وتم التحقق من الإعدادات.",
"Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "ضع في اعتبارك تضييق نطاق البحث، لأنه يشمل مستخدمين كُثْرٌ، ولن يتمكن سوى أول واحد منهم من تسجيل الدخول.",
"An unspecified error occurred. Please check log and settings." : "حدث خطأ غير محدد. يرجى التحقق من السجل والإعدادات.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "فلتر البحث غير صالح؛ ربما بسبب مشكلات في بناء الجملة مثل عدم تساوي عدد الأقواس المفتوحة والمغلقة. يرجي المراجعة.",
"A connection error to LDAP/AD occurred. Please check host, port and credentials." : "حدث خطأ في الاتصال بـ LDAP/AD. يرجى التحقق من المضيف host، والمنفذ port، و حيثيّات الدخول credentials.",
"The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "العنصر النائب placeholder ـ \"%u مُعرّف\". سيتم استبداله باسم دخول عند الاستعلام من LDAP/AD.",
"Please provide a login name to test against" : "يرجى تقديم اسم تسجيل الدخول لاختباره",
"The group box was disabled, because the LDAP/AD server does not support memberOf." : "تم تعطيل مربع المجموعة؛ لأن خادوم LDAP/AD لا يدعم خاصّيّة \"عضوٌ في\" memberOf.",
"Password change rejected. Hint: " : "تمّ رفض تغيير كلمة المرور. إرشادُ:",
"Please login with the new password" : "الرجاء تسجيل الدخول باستخدام كلمة المرور الجديدة",
"LDAP User backend" : "خلفية المستخدمين User backend من LDAP ",
"Your password will expire tomorrow." : "كلمة مرورك تنتهي صلاحيتها غداً.",
"Your password will expire today." : "كلمة مرورك تنتهي صلاحيتها اليوم.",
"_Your password will expire within %n day._::_Your password will expire within %n days._" : ["سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %n أيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nيوم.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام."],
"LDAP/AD integration" : "مُكاملة LDAP/AD ",
"Invalid LDAP UUIDs" : "مُعرِّفات UUID الخاصة بـ LDAP غير صحيحة",
"None found" : "لم يُمكن العثور على أي شيء",
"Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "تم العثور على مُعرِّفات UUID غير صالحة لحسابات أو مجموعات LDAP. الرجاء مراجعة الإعداد \"تجاوز اكتشاف UUID ـ Override UUID detection\" في الجزء الخبير من تكوين LDAP ثم اعطِ الأمر السطري: \"occ ldap:update-uuid\" لتحديثها",
"_%n group found_::_%n groups found_" : ["تم العثور على %n مجموعات","تم العثور على %n مجموعة","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات"],
"> 1000 groups found" : "> 1000 مجموعة موجودة",
"> 1000 users found" : "> 1000 مستخدِم موجود",
"_%n user found_::_%n users found_" : ["تم العثور على %n مستخدمين","تم العثور على %n مستخدم","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين"],
"Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "تعذر اكتشاف خاصّية الاسم المعروض للمستخدم user display name attribute. يرجى تحديدها بنفسك في الإعدادات المتقدمة لخادوم LDAP.",
"Could not find the desired feature" : "تعذر العثور على الميزة المطلوبة",
"Invalid Host" : "مُضيف غير صالح",
"LDAP user and group backend" : "خلفية المستخدمين و المجموعات من LDAP",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "يتيح هذا التطبيق للمشرفين توصيل نكست كلاود بدليل المستخدمين المستند إلى LDAP.",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "يتيح هذا التطبيق للمشرفين توصيل نكست كلاود بدليل المستخدمين المستنِد إلى LDAP للمصادقة و توفير المستخدمين users، والمجموعات groups، و سمات المستخدمين user attributes. \nيمكن للمشرفين تكوين هذا التطبيق للاتصال بدليل LDAP واحد أو أكثر عبر واجهة LDAP. \nيمكن سحب سماتٍ مثل حصة المستخدم التخزينية، و البريد الإلكتروني، و التجسيدات الرمزية avatar، وعضوية المجموعات و غيرها إلى نكست كلاود باستخدام الاستعلامات والمرشحات المناسبة. \nيقوم المستخدم بتسجيل الدخول إلى نكست كلاود باستخدام حيثيات دخوله من LDAP أو AD، ويتم منحه حق الوصول بناءً على طلب المصادقة الذي تتم معالجته بواسطة خادوم LDAP أو AD. \nلا يقوم نكست كلاود بتخزين كلمات مرور LDAP أو AD، بل يستخدم حيثيّات المستخدم هذه للمصادقة ثم يستخدم مُعرّف الجلسة session كمُعرّف للمستخدم. \n\nيتوفر المزيد من المعلومات في وثائق مستخدم LDAP و Group Backend.",
"Test Configuration" : "اختبر التكوين",
"Help" : "مساعدة",
"Groups meeting these criteria are available in %s:" : "المجموعات التي تلبي هذه المعايير متوفرة في %s:",
"Only these object classes:" : "فئات هذه الكائنات فقط:",
"Only from these groups:" : "فقط من هذه المجموعات:",
"Search groups" : "مجموعات البحث",
"Available groups" : "المجموعات المتاحة",
"Selected groups" : "المجموعات المُحدّدة",
"Edit LDAP Query" : "تحرير استعلام من خادوم LDAP",
"LDAP Filter:" : "فلتر LDAP:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "يحدد الفلتر أي مجموعات من LDAP سوف يكون لها حق الوصول إلى التطبيق %s.",
"Verify settings and count the groups" : "تحقق من الإعدادات و احصر عدد المجموعات",
"When logging in, %s will find the user based on the following attributes:" : "عند تسجيل الدخول، %sسوف تجد المستخدم بناءً على الخصائص التالية:",
"LDAP/AD Username:" : "اسم مستخدم LDAP/AD ـ : ",
"Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "يسمح بتسجيل الدخول مقابل اسم مستخدم LDAP / AD ، والذي يكون إما \"uid\" أو \"sAMAccountName\" وسيتم اكتشافه.",
"LDAP/AD Email Address:" : "عنوان البريد الالكتروني LDAP/AD ـ :",
"Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "يُسمح بتسجيل الدخول مقابل خاصّية البريد الإلكتروني. \"mail\" و \"mailPrimaryAddress\" مسموح بهما.",
"Other Attributes:" : "خصائص أخري:",
"Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "حدد الفلتر الذي سيتم تطبيقه، عند محاولة تسجيل الدخول. يحل \"%%uid\" محل اسم المستخدم في إجراء تسجيل الدخول. مثال: \"uid=%%uid\"",
"Test Loginname" : "اختبار اسم تسجيل الدخول",
"Attempts to receive a DN for the given loginname and the current login filter" : "محاولة تلقّي الاسم المميز DN لاسم تسجيل الدخول المحدد و فلتر تسجيل الدخول الحالي",
"Verify settings" : "التحقُّق من الإعدادات",
"%s. Server:" : "%s. خادوم:",
"Add a new configuration" : "إضافة تهيئة جديدة",
"Copy current configuration into new directory binding" : "نسخ التهيئة الحالية إلى دليل جديد مرتبط",
"Delete the current configuration" : "حذف التهيئة الحالية",
"Host" : "المضيف",
"You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "يمكنك التغاضي عن البروتوكول، ما لم يكن SSL لازماً. إذا كان الأمر كذلك، فابدأ بـ ldaps",
"Port" : "المنفذ",
"Detect Port" : "إكتشِف المنفذ",
"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. للوصول مجهول الهوية anonymous access، اترك خانتيْ الاسم المميز وكلمة المرور فارغتين.",
"Password" : "كلمة المرور",
"For anonymous access, leave DN and Password empty." : "للوصول المجهول anonymous access، اترك خانتيْ الاسم المميز وكلمة المرور فارغتين.",
"Save Credentials" : "حفظ حيثيّات الدخول credentials",
"One Base DN per line" : "اسم مميز واحد أساسي Base DN لكل سطر",
"You can specify Base DN for users and groups in the Advanced tab" : "يمكنك تحديد الاسم المميز الأساسي Base DN للمستخدمين والمجموعات من علامة تبويب الإعدادات المتقدمة",
"Detect Base DN" : "اكتشاف الاسم المميز الأساسي Base DN",
"Test Base DN" : "إختبر الاسم المميز الأساسي Base DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "يُلغي طلبات LDAP التلقائية. يُفضّل استعماله في حالة الخوادم التي تخدم أعداداً كبيرة، ولكنه يتطلب بعض المعرفة فيما يخص بروتوكول LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "الإدخال اليدوي لفلاتر بروتوكول LDAP (يُنصح به في حالة الأدلة الكبيرة)",
"Listing and searching for users is constrained by these criteria:" : "العرض والبحث عن المستخدمين مُقيّدٌ بهذه الشروط:",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "أكثر فئات الكائنات شيوعًا بالنسبة للمستخدمين هي: الشخص التنظيمي \"organizationalPerson\" والشخص \"person\" والمستخدم \"user\"وinetOrgPerson. إذا لم تكن متأكدًا من فئة الكائن التي تريد تحديدها، فيرجى استشارة مسئول الدليل الخاص بك.",
"The filter specifies which LDAP users shall have access to the %s instance." : "يُحدِّد الفلتر أيّ مستخدمي LDAP يمكنه الوصول إلى الخادوم %s.",
"Verify settings and count users" : "التّحقق من الإعدادات وعدد المستخدمين",
"Saving" : "الحفظ جارٍ ...",
"Back" : "رجوع",
"Continue" : "مُتابعة",
"Please renew your password." : "الرجاء تجديد كلمة مرورك.",
"An internal error occurred." : "حدث خطأ داخلي.",
"Please try again or contact your administrator." : "حاول مجددا أو تواصل مع مشرف النظام.",
"Current password" : "كلمة المرور الحالية",
"New password" : "كلمة المرور الجديدة",
"Renew password" : "تجديد كلمة المرور",
"Wrong password." : "كلمة مرور خاطئة.",
"Cancel" : "إلغاء",
"Server" : "خادوم",
"Users" : "المستخدمين",
"Login Attributes" : "خصائص تسجيل الدخول",
"Groups" : "مجموعات",
"Expert" : "خبير",
"Advanced" : "متقدمة",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>تحذير:</b> وِحدة PHP LDAP غير مُنصبّة؛ لذا فإن الخلفية لن تعمل. يرجى طلب تنصيبها من مُشرف النظام.",
"Connection Settings" : "إعدادات الربط",
"Configuration Active" : "الإعداد نشط",
"When unchecked, this configuration will be skipped." : "عندما لا يتم تحديده، سوف يتم تخطي هذه التهيئة.",
"Backup (Replica) Host" : "مضيف النسخ الاحتياطي (طِبقَ الأصل)",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "توفير مضيف احتياطي اختياري. يجب أن يكون نسخة طبق الأصل من خادوم LDAP/AC.",
"Backup (Replica) Port" : "منفذ النسخ الاحتياطي (طِبقَ الأصل)",
"Disable Main Server" : "تعطيل الخادوم الرئيسي",
"Only connect to the replica server." : "متصل فقط بالخادوم الاحتياطي.",
"Turn off SSL certificate validation." : "إيقاف تشغيل التحقق من صحة شهادة SSL.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "لا يوصي به، استخدمه للاختبار فقط! إذا كان الاتصال يعمل فقط مع هذا الخيار، فقم باستيراد شهادة SSL لخادوم LDAP في خادومك%s.",
"Cache Time-To-Live" : "مدة صلاحية ذاكرة التخزين المؤقت cache",
"in seconds. A change empties the cache." : "خلال ثوان. يؤدي التغيير إلى إفراغ ذاكرة التخزين المؤقت cache.",
"Directory Settings" : "إعدادات الدليل",
"User Display Name Field" : "حقل عرض اسم المستخدم",
"The LDAP attribute to use to generate the user's display name." : "تستخدم سمة بروتوكول LDAP لتوليد اسم عرض المستخدم.",
"2nd User Display Name Field" : "الحقل 2 لعرض اسم المستخدم ",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "اختياري. سمة LDAP سوف تُضاف إلى اسم العرض بين قوسين. و النتيجة ستكون كما في المثال: »John Doe (john.doe@example.org)«.",
"Base User Tree" : "شجرة المستخدم الأساسي Base User Tree",
"One User Base DN per line" : "اسم مميز أساسي User Base DN لمستخدم واحد لكل سطر",
"User Search Attributes" : "خصائص بحث المستخدم",
"Optional; one attribute per line" : "اختياري؛ سمة واحدة لكل سطر",
"Disable users missing from LDAP" : "إيقاف المستخدمين غير الموجودين على LDAP",
"When switched on, users imported from LDAP which are then missing will be disabled" : "عند التشغيل، سيتم تعطيل المستخدمين الذين تمّ استيرادهم من LDAP لكن تعذّر إيحادهم عندها",
"Group Display Name Field" : "حقل عرض اسم المجموعة",
"The LDAP attribute to use to generate the groups's display name." : "تستخدم خاصية بروتوكول LDAP لإنشاء اسماء عرض للمجموعات.",
"Base Group Tree" : "شجرة المجموعة الأساسية Base Group Tree",
"One Group Base DN per line" : "اسم مميز أساسي Group Base DN واحد للمجموعة لكل سطر",
"Group Search Attributes" : "خصائص بحث المجموعات",
"Group-Member association" : "ارتباط أعضاء المجموعة Group-Member association",
"Dynamic Group Member URL" : "محدد موقع URL الديناميكي لعضو المجموعة ",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "تحتوي خاصية بروتوكولLDAP الموجودة في كائنات المجموعة على عنوان بحث LDAP و الذي يحدد الكائنات التي تنتمي إلى المجموعة. (الإعداد الفارغ يتسبب في تعطيل وظيفة عضوية المجموعة الديناميكية.)",
"Nested Groups" : "المجموعات المتداخلة",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "عند التشغيل، يتم دعم المجموعات التي تحتوي على مجموعات. (تعمل فقط إذا كان تحديد عضو المجموعة يحتوي على اسم مميز DN).",
"Paging chunksize" : "حجم رزم الصفحات Paging chunksize",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "يتم استخدام حجم الرِّزمَة لعمليات البحث المقسمة إلى صفحات في LDAP؛ والتي قد تعطي نتائج ضخمة تبعاً لعدد المستخدمين و المجموعات. (الضبط علي 0 يؤدي إلى تعطيل هذا الأسلوب من البحث في تلك الحالات.)",
"Enable LDAP password changes per user" : "تمكين تغيير كلمة المرور لكل مستخدم علي خادوم LDAP ",
"Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "يتيح خادوم بروتوكول LDAP للمستخدمين تغيير كلمة المرور الخاصة بهم والسماح للمشرفين المتميزين super admin ومسؤولي المجموعات بتغيير كلمة مرور مستخدمي خادومهم. وتعمل هذه الخاصية عندما يتم تهيئة وضبط سياسات التحكم في الوصول على خادوم LDAP وفقًا لذلك. وحيث أن كلمات المرور يتم إرسالها فى صورة نصٍّ عادي إلى خادوم LDAP، فيجب استخدام تشفير النقل وضبط تجزئة كلمة المرور على خادوم LDAP.",
"(New password is sent as plain text to LDAP)" : "(يتم إرسال كلمة المرور الجديدة كنص عادي إلى خادوم LDAP )",
"Default password policy DN" : "سياسة الاسم المميز لكلمة المرورالافتراضية",
"The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "سياسة الاسم المميز DN لكلمة المرورالافتراضية التي سيتم استخدامها لمعالجة انتهاء صلاحية كلمة المرور تعمل فقط عندما يتم تمكين تغيير كلمة مرور خادوم LDAP لكل مستخدم ويكون مدعومًا فقط بواسطة OpenLDAP. H. أترُكه فارغًا لتعطيل معالجة انتهاء صلاحية كلمة المرور.",
"Special Attributes" : "خصائص خاصة",
"Quota Field" : "حقل الحِّصّة التخزينية",
"Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "اتركه فارغًا للحصة التخزينية الافتراضية للمستخدم. خلاف ذلك، حدد خاصّية خادوم LDAP/AD.",
"Quota Default" : "الحصة الافتراضية",
"Override default quota for LDAP users who do not have a quota set in the Quota Field." : "تخطِّي الحصة الافتراضية لمستخدمي خادوم LDAP الذين ليس لديهم حصة محددة في حقل الحصة.",
"Email Field" : "خانة البريد الإلكتروني",
"Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "قُم بتعيين البريد الإلكتروني للمستخدمين من خاصّية خادوم LDAP الخاصة بهم. اتركه فارغًا للتصرُّف الافتراضي.",
"User Home Folder Naming Rule" : "قاعدة تسمية المجلد الرئيسي للمستخدم User home folder",
"Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "أترُكه فارغًا لاسم المستخدم (افتراضي). خلاف ذلك، حدِّد خاصّية LDAP/AD.",
"\"$home\" Placeholder Field" : "حقل العنصر النائب \"$home\"",
"$home in an external storage configuration will be replaced with the value of the specified attribute" : "سيتم استبدال $home في تكوين وحدة التخزين الخارجية بقيمة الخاصّية المحددة",
"User Profile Attributes" : "خصائص الملف الشخصي للمستخدِم",
"Phone Field" : "خانة الهاتف",
"User profile Phone will be set from the specified attribute" : "خانة الهاتف في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Website Field" : "خانة موقع الوب",
"User profile Website will be set from the specified attribute" : "خانة موقع الوب في الملف الشخصي للمستخدِم سيتم تعيينها من الخاصّية المُحدّدة",
"Address Field" : "خانة العنوان",
"User profile Address will be set from the specified attribute" : "خانة العنوان في الملف الشخصي للمستخدم سيتم تعيينها من الخاصّية المُحدّدة",
"Twitter Field" : "خانة حساب تويتر",
"User profile Twitter will be set from the specified attribute" : "خانة حساب تويتر في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Fediverse Field" : "خانة حساب الـ\"فيدي فيرس\" Fediverse",
"User profile Fediverse will be set from the specified attribute" : "خانة حساب الـ\"فيدي فيرس\" Fediverse في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Organisation Field" : "خانة المؤسسة organization",
"User profile Organisation will be set from the specified attribute" : "خانة المنظمة organization في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Role Field" : "خانة الوظيفة role",
"User profile Role will be set from the specified attribute" : "خانة الوظيفة role في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Headline Field" : "حقل الترويسة headline",
"User profile Headline will be set from the specified attribute" : "خانة الترويسة headline في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Biography Field" : "خانة السيرة الذاتية biography",
"User profile Biography will be set from the specified attribute" : "خانة السيرة الذاتية biography في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Internal Username" : "اسم المستخدم الداخلي",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "بشكل افتراضي، سيتم إنشاء اسم المستخدم الداخلي internal username من خاصّية المُغرّف المُميّز الشامل UUID. هذا يضمن أن اسم المستخدم فريدٌ ولا يلزمه أي تحويل في الأحرف. اسم المستخدم الداخلي مُقيّدٌ باستخدام هذه الأحرف فقط: [a-zA-Z0-9 _. @ -]. غير هذه الأحرف يقع استبدالها بما يقابلها من أحرف الآسكي ASCII أو - ببساطة - يقع حذفها. في حالة وقوع تضاربٍِ، سيتم إلحاق عدد بالاسم. \n\nيُستخدم هذا الاسم الداخلي لتعريف المستخدم داخليًا. وهو أيضًا الاسم الافتراضي للمجلد الرئيسي للمستخدم. و هو أيضًا جزء من عناوين remote URL القَصِيّة كما في خدمات DAV على سبيل المثال. باستخدام هذا الإعداد ، يمكن تجاوز السلوك الافتراضي. سيكون للتغييرات تأثير فقط على مستخدمي LDAP المُعيّنين حديثًا (المُضافين). أترُكه فارغًا للسلوك الافتراضي.",
"Internal Username Attribute:" : "خاصّية اسم المستخدم الداخلي:",
"Override UUID detection" : "تجاوُز اكتشاف المعرف الفريد الشامل UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "بشكل افتراضي، يتم اكتشاف خاصية المعرف الفريد الشامل UUID تلقائيًا. ويتم استخدام هذه الخاصّية لتحديد مستخدمي ومجموعات LDAP علي نحو موثوق. أيضًا، سيتم إنشاء اسم المستخدم الداخلي بناءً على المعرف الفريد الشامل UUID إذا لم يتم تحديده أعلاه. يمكنك تجاوز الإعداد وتجاوز الخاصية حسب اختيارك. يجب عليك التأكد من إمكانية الوصول إلي الخاصية التي قمت باختيارها من قبل كل من المستخدمين والمجموعات وأنها فريدة. أترُكه فارغًا للوضع الافتراضي. تصبح التغييرات نافذة فقط على مستخدمي ومجموعات بروتوكول LDAP المُعيّنين حديثًا (المُضافين).",
"UUID Attribute for Users:" : "خاصية المعرف الفريد الشامل للمستخدمين UUID:",
"UUID Attribute for Groups:" : "خاصية المعرف الفريد الشامل للمجموعات UUID:",
"Username-LDAP User Mapping" : "الربط بين اسم المستخدم في LDAP و المستخدم",
"Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "تُستخدم أسماء المستخدمين لتخزين وتخصيص البيانات التعريف الوصفية. من أجل تحديد المستخدمين والتعرف عليهم بدقة، سيكون لكل مستخدم على خادوم LDAP اسم مستخدم داخلي. يتطلب هذا ربطاً mapping بين اسم المستخدم و مستخدم خادوم LDAP. يتم تعيين اسم المستخدم الذي تم إنشاؤه إلى المعرف الفريد الشامل \"UUID\" لمستخدم LDAP. بالإضافة إلى ذلك، يتم تخزين الاسم المميز DN مؤقتًا أيضًا لتقليل تفاعل LDAP، ولكنه لا يستخدم لتحديد الهوية. وعند تغير الاسم المميز يتم العثور على التغييرات. ويتم استخدام اسم المستخدم الداخلي في كل مكان. إلغاء الربط سيكون له آثار متبقية في كل مكان. إلغاء الربط يؤثر على جميع تكوينات LDAP! لا تقم مطلقًا بإلغاء الربط في بيئة الإنتاج. فقط في مرحلة الاختبار أو المرحلة التجريبية.",
"Clear Username-LDAP User Mapping" : "إلغاء الربط بين اسم المستخدم في LDAP و المستخدم",
"Clear Groupname-LDAP Group Mapping" : "إلغاء الربط بين اسم المجموعة في LDAP و المجموعة",
"Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "المُعرّف الفريد الشامل UUID لمستخدمي و مجموعات LDAP الموجود غير صحيح. الرجاء مراجعة إعدادات \"تجاوز اكتشاف UUID\"ـ Override UUID detection في القسم المتقدم Expert part من تكوين LDAP واستخدم \"occ ldap: update-uuid\" لتحديثها."
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
+221
View File
@@ -0,0 +1,221 @@
{ "translations": {
"Failed to clear the mappings." : "فشل مسح الارتباطات mappings",
"Failed to delete the server configuration" : "تعذّر حذف ملف إعدادات الخادوم",
"Invalid configuration: Anonymous binding is not allowed." : "تكوين غير صالح: الربط المجهول Anonymous binding غير مسموح به.",
"Valid configuration, connection established!" : "تكوين صالح، تمّ تأسيس الاتصال!",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "تكوين صالح، لكن فشل الربط binding. يرجى التحقّق من إعدادات الخادوم و حيثيّات الدخول credentials.",
"Invalid configuration. Please have a look at the logs for further details." : "تكوين غير صحيح. يرجى الرجوع إلي سجلات الحركات logs لمزيد من التفاصيل.",
"No action specified" : "لم يتم تحديد أيّ إجراءٍ",
"No configuration specified" : "لم يتم تحديد أيّ إعداداتٍ",
"No data specified" : "لم يتم تحديد أيّ بياناتٍ",
"Invalid data specified" : "البيانات المُحدّدة غير صالحة",
" Could not set configuration %s" : "تعذّر تعيين الإعداد %s",
"Action does not exist" : "الإجراء غير موجود",
"Renewing …" : "التجديد جارٍ …",
"Very weak password" : "كلمة المرور ضعيفة جدا",
"Weak password" : "كلمة المرور ضعيفة",
"So-so password" : "كلمة المرور مقبولة نوعاً ما",
"Good password" : "كلمة المرور جيدة",
"Strong password" : "كلمة المرور قوية",
"The Base DN appears to be wrong" : "يبدو أن الاسم المميز الأساسي Base DN خاطئٌ",
"Testing configuration…" : "إختبار التهيئة...",
"Configuration incorrect" : "الإعدادات غير صحيحة",
"Configuration incomplete" : "الإعدادات غير مكتملة",
"Configuration OK" : "الإعدادات صحيحة",
"Select groups" : "إختر المجموعات",
"Select object classes" : "إختر أصناف الكائنات object classes",
"Please check the credentials, they seem to be wrong." : "يرجى التحقق من حيثيّات الدخول credentials، يبدو أنها خاطئة.",
"Please specify the port, it could not be auto-detected." : "يُرجى تحديد المنفذ port، حيث لا يمكن اكتشافه تلقائيا.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "تعذر اكتشاف الاسم المميز الأساسي Base DN تلقائيًا، يرجى مراجعة حيثيّات الدخول credentials، والمُضيف host، والمنفذ port.",
"Could not detect Base DN, please enter it manually." : "تعذّر اكتشاف الاسم المميز الأساسي Base DN، يُرجى إدخاله يدويًا.",
"{nthServer}. Server" : "{nthServer}. الخادوم",
"No object found in the given Base DN. Please revise." : "لم يتم العثور على أي كائن object في الاسم المميز الأساسي Base DN المحدد. يُرجي المُراجعة.",
"More than 1,000 directory entries available." : "يُوجد أكثر من 1,000 مُدخل في الدليل directory entries.",
"_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخل متاح من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم"],
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "حدث خطأ. يرجي التحقق من الاسم المميز الأساسي Base DN، وكذلك إعدادات الاتصال، و حيثيّات الدخول credentials.",
"Do you really want to delete the current Server Configuration?" : "هل ترغب فعلاً في حذف إعدادات الخادوم الحالي؟",
"Confirm Deletion" : "تأكيد الحذف",
"Mappings cleared successfully!" : "تم مسح الارتباطات mappings بنجاح!",
"Error while clearing the mappings." : "خطأ أثناء مسح الارتباطات mappings.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "الربط المجهول Anonymous bind غير مسموح به. يرجى إدخال الاسم المميز للمستخدم User DN، وكلمة المرور.",
"LDAP Operations error. Anonymous bind might not be allowed." : "خطأ في عمليات LDAP. قد لا يكون مسموحاُ بالربط المجهول Anonymous bind.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "فشل الحفظ. يرجى التأكد من أن قاعدة البيانات قيد التشغيل. أعد التحميل قبل المتابعة.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "تفعيل الوضع سوف ينتج عنه تمكين استعلامات بروتوكولLDAP التلقائية. وقد يستغرق الأمر بعض الوقت بناء على حجم LDAP خاصتك. هل ما زلت تريد تفعيل الوضع؟",
"Mode switch" : "تبديل النمط",
"Select attributes" : "اختر الخصائص",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "لم يتم العثور على المستخدم. يرجى التحقق من تحديدات تسجيل الدخول واسم المستخدم الخاصين بك. عامل التصفية الفعال (للنسخ واللصق للتحقق من صحة سطر الأوامر):<br/>",
"User found and settings verified." : "تم العثور على المستخدم وتم التحقق من الإعدادات.",
"Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "ضع في اعتبارك تضييق نطاق البحث، لأنه يشمل مستخدمين كُثْرٌ، ولن يتمكن سوى أول واحد منهم من تسجيل الدخول.",
"An unspecified error occurred. Please check log and settings." : "حدث خطأ غير محدد. يرجى التحقق من السجل والإعدادات.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "فلتر البحث غير صالح؛ ربما بسبب مشكلات في بناء الجملة مثل عدم تساوي عدد الأقواس المفتوحة والمغلقة. يرجي المراجعة.",
"A connection error to LDAP/AD occurred. Please check host, port and credentials." : "حدث خطأ في الاتصال بـ LDAP/AD. يرجى التحقق من المضيف host، والمنفذ port، و حيثيّات الدخول credentials.",
"The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "العنصر النائب placeholder ـ \"%u مُعرّف\". سيتم استبداله باسم دخول عند الاستعلام من LDAP/AD.",
"Please provide a login name to test against" : "يرجى تقديم اسم تسجيل الدخول لاختباره",
"The group box was disabled, because the LDAP/AD server does not support memberOf." : "تم تعطيل مربع المجموعة؛ لأن خادوم LDAP/AD لا يدعم خاصّيّة \"عضوٌ في\" memberOf.",
"Password change rejected. Hint: " : "تمّ رفض تغيير كلمة المرور. إرشادُ:",
"Please login with the new password" : "الرجاء تسجيل الدخول باستخدام كلمة المرور الجديدة",
"LDAP User backend" : "خلفية المستخدمين User backend من LDAP ",
"Your password will expire tomorrow." : "كلمة مرورك تنتهي صلاحيتها غداً.",
"Your password will expire today." : "كلمة مرورك تنتهي صلاحيتها اليوم.",
"_Your password will expire within %n day._::_Your password will expire within %n days._" : ["سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %n أيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nيوم.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام."],
"LDAP/AD integration" : "مُكاملة LDAP/AD ",
"Invalid LDAP UUIDs" : "مُعرِّفات UUID الخاصة بـ LDAP غير صحيحة",
"None found" : "لم يُمكن العثور على أي شيء",
"Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "تم العثور على مُعرِّفات UUID غير صالحة لحسابات أو مجموعات LDAP. الرجاء مراجعة الإعداد \"تجاوز اكتشاف UUID ـ Override UUID detection\" في الجزء الخبير من تكوين LDAP ثم اعطِ الأمر السطري: \"occ ldap:update-uuid\" لتحديثها",
"_%n group found_::_%n groups found_" : ["تم العثور على %n مجموعات","تم العثور على %n مجموعة","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات"],
"> 1000 groups found" : "> 1000 مجموعة موجودة",
"> 1000 users found" : "> 1000 مستخدِم موجود",
"_%n user found_::_%n users found_" : ["تم العثور على %n مستخدمين","تم العثور على %n مستخدم","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين"],
"Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "تعذر اكتشاف خاصّية الاسم المعروض للمستخدم user display name attribute. يرجى تحديدها بنفسك في الإعدادات المتقدمة لخادوم LDAP.",
"Could not find the desired feature" : "تعذر العثور على الميزة المطلوبة",
"Invalid Host" : "مُضيف غير صالح",
"LDAP user and group backend" : "خلفية المستخدمين و المجموعات من LDAP",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "يتيح هذا التطبيق للمشرفين توصيل نكست كلاود بدليل المستخدمين المستند إلى LDAP.",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "يتيح هذا التطبيق للمشرفين توصيل نكست كلاود بدليل المستخدمين المستنِد إلى LDAP للمصادقة و توفير المستخدمين users، والمجموعات groups، و سمات المستخدمين user attributes. \nيمكن للمشرفين تكوين هذا التطبيق للاتصال بدليل LDAP واحد أو أكثر عبر واجهة LDAP. \nيمكن سحب سماتٍ مثل حصة المستخدم التخزينية، و البريد الإلكتروني، و التجسيدات الرمزية avatar، وعضوية المجموعات و غيرها إلى نكست كلاود باستخدام الاستعلامات والمرشحات المناسبة. \nيقوم المستخدم بتسجيل الدخول إلى نكست كلاود باستخدام حيثيات دخوله من LDAP أو AD، ويتم منحه حق الوصول بناءً على طلب المصادقة الذي تتم معالجته بواسطة خادوم LDAP أو AD. \nلا يقوم نكست كلاود بتخزين كلمات مرور LDAP أو AD، بل يستخدم حيثيّات المستخدم هذه للمصادقة ثم يستخدم مُعرّف الجلسة session كمُعرّف للمستخدم. \n\nيتوفر المزيد من المعلومات في وثائق مستخدم LDAP و Group Backend.",
"Test Configuration" : "اختبر التكوين",
"Help" : "مساعدة",
"Groups meeting these criteria are available in %s:" : "المجموعات التي تلبي هذه المعايير متوفرة في %s:",
"Only these object classes:" : "فئات هذه الكائنات فقط:",
"Only from these groups:" : "فقط من هذه المجموعات:",
"Search groups" : "مجموعات البحث",
"Available groups" : "المجموعات المتاحة",
"Selected groups" : "المجموعات المُحدّدة",
"Edit LDAP Query" : "تحرير استعلام من خادوم LDAP",
"LDAP Filter:" : "فلتر LDAP:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "يحدد الفلتر أي مجموعات من LDAP سوف يكون لها حق الوصول إلى التطبيق %s.",
"Verify settings and count the groups" : "تحقق من الإعدادات و احصر عدد المجموعات",
"When logging in, %s will find the user based on the following attributes:" : "عند تسجيل الدخول، %sسوف تجد المستخدم بناءً على الخصائص التالية:",
"LDAP/AD Username:" : "اسم مستخدم LDAP/AD ـ : ",
"Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "يسمح بتسجيل الدخول مقابل اسم مستخدم LDAP / AD ، والذي يكون إما \"uid\" أو \"sAMAccountName\" وسيتم اكتشافه.",
"LDAP/AD Email Address:" : "عنوان البريد الالكتروني LDAP/AD ـ :",
"Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "يُسمح بتسجيل الدخول مقابل خاصّية البريد الإلكتروني. \"mail\" و \"mailPrimaryAddress\" مسموح بهما.",
"Other Attributes:" : "خصائص أخري:",
"Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "حدد الفلتر الذي سيتم تطبيقه، عند محاولة تسجيل الدخول. يحل \"%%uid\" محل اسم المستخدم في إجراء تسجيل الدخول. مثال: \"uid=%%uid\"",
"Test Loginname" : "اختبار اسم تسجيل الدخول",
"Attempts to receive a DN for the given loginname and the current login filter" : "محاولة تلقّي الاسم المميز DN لاسم تسجيل الدخول المحدد و فلتر تسجيل الدخول الحالي",
"Verify settings" : "التحقُّق من الإعدادات",
"%s. Server:" : "%s. خادوم:",
"Add a new configuration" : "إضافة تهيئة جديدة",
"Copy current configuration into new directory binding" : "نسخ التهيئة الحالية إلى دليل جديد مرتبط",
"Delete the current configuration" : "حذف التهيئة الحالية",
"Host" : "المضيف",
"You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "يمكنك التغاضي عن البروتوكول، ما لم يكن SSL لازماً. إذا كان الأمر كذلك، فابدأ بـ ldaps",
"Port" : "المنفذ",
"Detect Port" : "إكتشِف المنفذ",
"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. للوصول مجهول الهوية anonymous access، اترك خانتيْ الاسم المميز وكلمة المرور فارغتين.",
"Password" : "كلمة المرور",
"For anonymous access, leave DN and Password empty." : "للوصول المجهول anonymous access، اترك خانتيْ الاسم المميز وكلمة المرور فارغتين.",
"Save Credentials" : "حفظ حيثيّات الدخول credentials",
"One Base DN per line" : "اسم مميز واحد أساسي Base DN لكل سطر",
"You can specify Base DN for users and groups in the Advanced tab" : "يمكنك تحديد الاسم المميز الأساسي Base DN للمستخدمين والمجموعات من علامة تبويب الإعدادات المتقدمة",
"Detect Base DN" : "اكتشاف الاسم المميز الأساسي Base DN",
"Test Base DN" : "إختبر الاسم المميز الأساسي Base DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "يُلغي طلبات LDAP التلقائية. يُفضّل استعماله في حالة الخوادم التي تخدم أعداداً كبيرة، ولكنه يتطلب بعض المعرفة فيما يخص بروتوكول LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "الإدخال اليدوي لفلاتر بروتوكول LDAP (يُنصح به في حالة الأدلة الكبيرة)",
"Listing and searching for users is constrained by these criteria:" : "العرض والبحث عن المستخدمين مُقيّدٌ بهذه الشروط:",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "أكثر فئات الكائنات شيوعًا بالنسبة للمستخدمين هي: الشخص التنظيمي \"organizationalPerson\" والشخص \"person\" والمستخدم \"user\"وinetOrgPerson. إذا لم تكن متأكدًا من فئة الكائن التي تريد تحديدها، فيرجى استشارة مسئول الدليل الخاص بك.",
"The filter specifies which LDAP users shall have access to the %s instance." : "يُحدِّد الفلتر أيّ مستخدمي LDAP يمكنه الوصول إلى الخادوم %s.",
"Verify settings and count users" : "التّحقق من الإعدادات وعدد المستخدمين",
"Saving" : "الحفظ جارٍ ...",
"Back" : "رجوع",
"Continue" : "مُتابعة",
"Please renew your password." : "الرجاء تجديد كلمة مرورك.",
"An internal error occurred." : "حدث خطأ داخلي.",
"Please try again or contact your administrator." : "حاول مجددا أو تواصل مع مشرف النظام.",
"Current password" : "كلمة المرور الحالية",
"New password" : "كلمة المرور الجديدة",
"Renew password" : "تجديد كلمة المرور",
"Wrong password." : "كلمة مرور خاطئة.",
"Cancel" : "إلغاء",
"Server" : "خادوم",
"Users" : "المستخدمين",
"Login Attributes" : "خصائص تسجيل الدخول",
"Groups" : "مجموعات",
"Expert" : "خبير",
"Advanced" : "متقدمة",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>تحذير:</b> وِحدة PHP LDAP غير مُنصبّة؛ لذا فإن الخلفية لن تعمل. يرجى طلب تنصيبها من مُشرف النظام.",
"Connection Settings" : "إعدادات الربط",
"Configuration Active" : "الإعداد نشط",
"When unchecked, this configuration will be skipped." : "عندما لا يتم تحديده، سوف يتم تخطي هذه التهيئة.",
"Backup (Replica) Host" : "مضيف النسخ الاحتياطي (طِبقَ الأصل)",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "توفير مضيف احتياطي اختياري. يجب أن يكون نسخة طبق الأصل من خادوم LDAP/AC.",
"Backup (Replica) Port" : "منفذ النسخ الاحتياطي (طِبقَ الأصل)",
"Disable Main Server" : "تعطيل الخادوم الرئيسي",
"Only connect to the replica server." : "متصل فقط بالخادوم الاحتياطي.",
"Turn off SSL certificate validation." : "إيقاف تشغيل التحقق من صحة شهادة SSL.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "لا يوصي به، استخدمه للاختبار فقط! إذا كان الاتصال يعمل فقط مع هذا الخيار، فقم باستيراد شهادة SSL لخادوم LDAP في خادومك%s.",
"Cache Time-To-Live" : "مدة صلاحية ذاكرة التخزين المؤقت cache",
"in seconds. A change empties the cache." : "خلال ثوان. يؤدي التغيير إلى إفراغ ذاكرة التخزين المؤقت cache.",
"Directory Settings" : "إعدادات الدليل",
"User Display Name Field" : "حقل عرض اسم المستخدم",
"The LDAP attribute to use to generate the user's display name." : "تستخدم سمة بروتوكول LDAP لتوليد اسم عرض المستخدم.",
"2nd User Display Name Field" : "الحقل 2 لعرض اسم المستخدم ",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "اختياري. سمة LDAP سوف تُضاف إلى اسم العرض بين قوسين. و النتيجة ستكون كما في المثال: »John Doe (john.doe@example.org)«.",
"Base User Tree" : "شجرة المستخدم الأساسي Base User Tree",
"One User Base DN per line" : "اسم مميز أساسي User Base DN لمستخدم واحد لكل سطر",
"User Search Attributes" : "خصائص بحث المستخدم",
"Optional; one attribute per line" : "اختياري؛ سمة واحدة لكل سطر",
"Disable users missing from LDAP" : "إيقاف المستخدمين غير الموجودين على LDAP",
"When switched on, users imported from LDAP which are then missing will be disabled" : "عند التشغيل، سيتم تعطيل المستخدمين الذين تمّ استيرادهم من LDAP لكن تعذّر إيحادهم عندها",
"Group Display Name Field" : "حقل عرض اسم المجموعة",
"The LDAP attribute to use to generate the groups's display name." : "تستخدم خاصية بروتوكول LDAP لإنشاء اسماء عرض للمجموعات.",
"Base Group Tree" : "شجرة المجموعة الأساسية Base Group Tree",
"One Group Base DN per line" : "اسم مميز أساسي Group Base DN واحد للمجموعة لكل سطر",
"Group Search Attributes" : "خصائص بحث المجموعات",
"Group-Member association" : "ارتباط أعضاء المجموعة Group-Member association",
"Dynamic Group Member URL" : "محدد موقع URL الديناميكي لعضو المجموعة ",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "تحتوي خاصية بروتوكولLDAP الموجودة في كائنات المجموعة على عنوان بحث LDAP و الذي يحدد الكائنات التي تنتمي إلى المجموعة. (الإعداد الفارغ يتسبب في تعطيل وظيفة عضوية المجموعة الديناميكية.)",
"Nested Groups" : "المجموعات المتداخلة",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "عند التشغيل، يتم دعم المجموعات التي تحتوي على مجموعات. (تعمل فقط إذا كان تحديد عضو المجموعة يحتوي على اسم مميز DN).",
"Paging chunksize" : "حجم رزم الصفحات Paging chunksize",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "يتم استخدام حجم الرِّزمَة لعمليات البحث المقسمة إلى صفحات في LDAP؛ والتي قد تعطي نتائج ضخمة تبعاً لعدد المستخدمين و المجموعات. (الضبط علي 0 يؤدي إلى تعطيل هذا الأسلوب من البحث في تلك الحالات.)",
"Enable LDAP password changes per user" : "تمكين تغيير كلمة المرور لكل مستخدم علي خادوم LDAP ",
"Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "يتيح خادوم بروتوكول LDAP للمستخدمين تغيير كلمة المرور الخاصة بهم والسماح للمشرفين المتميزين super admin ومسؤولي المجموعات بتغيير كلمة مرور مستخدمي خادومهم. وتعمل هذه الخاصية عندما يتم تهيئة وضبط سياسات التحكم في الوصول على خادوم LDAP وفقًا لذلك. وحيث أن كلمات المرور يتم إرسالها فى صورة نصٍّ عادي إلى خادوم LDAP، فيجب استخدام تشفير النقل وضبط تجزئة كلمة المرور على خادوم LDAP.",
"(New password is sent as plain text to LDAP)" : "(يتم إرسال كلمة المرور الجديدة كنص عادي إلى خادوم LDAP )",
"Default password policy DN" : "سياسة الاسم المميز لكلمة المرورالافتراضية",
"The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "سياسة الاسم المميز DN لكلمة المرورالافتراضية التي سيتم استخدامها لمعالجة انتهاء صلاحية كلمة المرور تعمل فقط عندما يتم تمكين تغيير كلمة مرور خادوم LDAP لكل مستخدم ويكون مدعومًا فقط بواسطة OpenLDAP. H. أترُكه فارغًا لتعطيل معالجة انتهاء صلاحية كلمة المرور.",
"Special Attributes" : "خصائص خاصة",
"Quota Field" : "حقل الحِّصّة التخزينية",
"Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "اتركه فارغًا للحصة التخزينية الافتراضية للمستخدم. خلاف ذلك، حدد خاصّية خادوم LDAP/AD.",
"Quota Default" : "الحصة الافتراضية",
"Override default quota for LDAP users who do not have a quota set in the Quota Field." : "تخطِّي الحصة الافتراضية لمستخدمي خادوم LDAP الذين ليس لديهم حصة محددة في حقل الحصة.",
"Email Field" : "خانة البريد الإلكتروني",
"Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "قُم بتعيين البريد الإلكتروني للمستخدمين من خاصّية خادوم LDAP الخاصة بهم. اتركه فارغًا للتصرُّف الافتراضي.",
"User Home Folder Naming Rule" : "قاعدة تسمية المجلد الرئيسي للمستخدم User home folder",
"Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "أترُكه فارغًا لاسم المستخدم (افتراضي). خلاف ذلك، حدِّد خاصّية LDAP/AD.",
"\"$home\" Placeholder Field" : "حقل العنصر النائب \"$home\"",
"$home in an external storage configuration will be replaced with the value of the specified attribute" : "سيتم استبدال $home في تكوين وحدة التخزين الخارجية بقيمة الخاصّية المحددة",
"User Profile Attributes" : "خصائص الملف الشخصي للمستخدِم",
"Phone Field" : "خانة الهاتف",
"User profile Phone will be set from the specified attribute" : "خانة الهاتف في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Website Field" : "خانة موقع الوب",
"User profile Website will be set from the specified attribute" : "خانة موقع الوب في الملف الشخصي للمستخدِم سيتم تعيينها من الخاصّية المُحدّدة",
"Address Field" : "خانة العنوان",
"User profile Address will be set from the specified attribute" : "خانة العنوان في الملف الشخصي للمستخدم سيتم تعيينها من الخاصّية المُحدّدة",
"Twitter Field" : "خانة حساب تويتر",
"User profile Twitter will be set from the specified attribute" : "خانة حساب تويتر في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Fediverse Field" : "خانة حساب الـ\"فيدي فيرس\" Fediverse",
"User profile Fediverse will be set from the specified attribute" : "خانة حساب الـ\"فيدي فيرس\" Fediverse في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Organisation Field" : "خانة المؤسسة organization",
"User profile Organisation will be set from the specified attribute" : "خانة المنظمة organization في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Role Field" : "خانة الوظيفة role",
"User profile Role will be set from the specified attribute" : "خانة الوظيفة role في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Headline Field" : "حقل الترويسة headline",
"User profile Headline will be set from the specified attribute" : "خانة الترويسة headline في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Biography Field" : "خانة السيرة الذاتية biography",
"User profile Biography will be set from the specified attribute" : "خانة السيرة الذاتية biography في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Internal Username" : "اسم المستخدم الداخلي",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "بشكل افتراضي، سيتم إنشاء اسم المستخدم الداخلي internal username من خاصّية المُغرّف المُميّز الشامل UUID. هذا يضمن أن اسم المستخدم فريدٌ ولا يلزمه أي تحويل في الأحرف. اسم المستخدم الداخلي مُقيّدٌ باستخدام هذه الأحرف فقط: [a-zA-Z0-9 _. @ -]. غير هذه الأحرف يقع استبدالها بما يقابلها من أحرف الآسكي ASCII أو - ببساطة - يقع حذفها. في حالة وقوع تضاربٍِ، سيتم إلحاق عدد بالاسم. \n\nيُستخدم هذا الاسم الداخلي لتعريف المستخدم داخليًا. وهو أيضًا الاسم الافتراضي للمجلد الرئيسي للمستخدم. و هو أيضًا جزء من عناوين remote URL القَصِيّة كما في خدمات DAV على سبيل المثال. باستخدام هذا الإعداد ، يمكن تجاوز السلوك الافتراضي. سيكون للتغييرات تأثير فقط على مستخدمي LDAP المُعيّنين حديثًا (المُضافين). أترُكه فارغًا للسلوك الافتراضي.",
"Internal Username Attribute:" : "خاصّية اسم المستخدم الداخلي:",
"Override UUID detection" : "تجاوُز اكتشاف المعرف الفريد الشامل UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "بشكل افتراضي، يتم اكتشاف خاصية المعرف الفريد الشامل UUID تلقائيًا. ويتم استخدام هذه الخاصّية لتحديد مستخدمي ومجموعات LDAP علي نحو موثوق. أيضًا، سيتم إنشاء اسم المستخدم الداخلي بناءً على المعرف الفريد الشامل UUID إذا لم يتم تحديده أعلاه. يمكنك تجاوز الإعداد وتجاوز الخاصية حسب اختيارك. يجب عليك التأكد من إمكانية الوصول إلي الخاصية التي قمت باختيارها من قبل كل من المستخدمين والمجموعات وأنها فريدة. أترُكه فارغًا للوضع الافتراضي. تصبح التغييرات نافذة فقط على مستخدمي ومجموعات بروتوكول LDAP المُعيّنين حديثًا (المُضافين).",
"UUID Attribute for Users:" : "خاصية المعرف الفريد الشامل للمستخدمين UUID:",
"UUID Attribute for Groups:" : "خاصية المعرف الفريد الشامل للمجموعات UUID:",
"Username-LDAP User Mapping" : "الربط بين اسم المستخدم في LDAP و المستخدم",
"Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "تُستخدم أسماء المستخدمين لتخزين وتخصيص البيانات التعريف الوصفية. من أجل تحديد المستخدمين والتعرف عليهم بدقة، سيكون لكل مستخدم على خادوم LDAP اسم مستخدم داخلي. يتطلب هذا ربطاً mapping بين اسم المستخدم و مستخدم خادوم LDAP. يتم تعيين اسم المستخدم الذي تم إنشاؤه إلى المعرف الفريد الشامل \"UUID\" لمستخدم LDAP. بالإضافة إلى ذلك، يتم تخزين الاسم المميز DN مؤقتًا أيضًا لتقليل تفاعل LDAP، ولكنه لا يستخدم لتحديد الهوية. وعند تغير الاسم المميز يتم العثور على التغييرات. ويتم استخدام اسم المستخدم الداخلي في كل مكان. إلغاء الربط سيكون له آثار متبقية في كل مكان. إلغاء الربط يؤثر على جميع تكوينات LDAP! لا تقم مطلقًا بإلغاء الربط في بيئة الإنتاج. فقط في مرحلة الاختبار أو المرحلة التجريبية.",
"Clear Username-LDAP User Mapping" : "إلغاء الربط بين اسم المستخدم في LDAP و المستخدم",
"Clear Groupname-LDAP Group Mapping" : "إلغاء الربط بين اسم المجموعة في LDAP و المجموعة",
"Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "المُعرّف الفريد الشامل UUID لمستخدمي و مجموعات LDAP الموجود غير صحيح. الرجاء مراجعة إعدادات \"تجاوز اكتشاف UUID\"ـ Override UUID detection في القسم المتقدم Expert part من تكوين LDAP واستخدم \"occ ldap: update-uuid\" لتحديثها."
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
}
+152
View File
@@ -0,0 +1,152 @@
OC.L10N.register(
"user_ldap",
{
"Failed to clear the mappings." : "Fallu al llimpiar los mapeos.",
"Failed to delete the server configuration" : "Fallu al desaniciar la configuración del sirvidor",
"Valid configuration, connection established!" : "¡Configuración válida, afitóse la conexón!",
"Invalid configuration. Please have a look at the logs for further details." : "Configuración non válida. Écha-yos un güeyu a los rexistros pa más detalles, por favor.",
"No action specified" : "Nun s'especificó l'aición",
"No configuration specified" : "Nun s'especificó la configuración",
"No data specified" : "Nun s'especificaron los datos",
" Could not set configuration %s" : "Nun pudo afitase la configuración %s",
"Action does not exist" : "L'acción nun esiste",
"Renewing …" : "Renovando...",
"Very weak password" : "Contraseña perfeble",
"Weak password" : "Contraseña feble",
"So-so password" : "Contraseña normalina",
"Good password" : "Contraseña bona",
"Strong password" : "Contraseña fuerte",
"The Base DN appears to be wrong" : "La base DN paez tar mal",
"Testing configuration…" : "Probando configuración...",
"Configuration incorrect" : "Configuración incorreuta",
"Configuration incomplete" : "Configuración incompleta",
"Configuration OK" : "Configuración correuta",
"Select groups" : "Esbillar grupos",
"Select object classes" : "Esbillar les clases d'oxetu",
"Please check the credentials, they seem to be wrong." : "Por favor, compruebe les credenciales, que paecen tar mal.",
"Please specify the port, it could not be auto-detected." : "Por favor especifica'l puertu, nun puede ser detectáu automáticamente .",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN nun puede ser detectada automáticamente, por favor revisa les credenciales, host yá'l puertu.",
"Could not detect Base DN, please enter it manually." : "Nun se detectó base DN, por favor introduzla manualmente .",
"{nthServer}. Server" : "{nthServer}. Sirvidor",
"No object found in the given Base DN. Please revise." : "Nun s'atopó nengún oxetu na Base DN dada. Por favor, revísalo.",
"More than 1,000 directory entries available." : "Más de 1.000 entraes de directoriu disponibles.",
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Asocedió un erru. Por favor, compruebe la Base DN , amás de la configuración de conexón y les credenciales.",
"Do you really want to delete the current Server Configuration?" : "¿Daveres que quies desaniciar la configuración actual del sirvidor?",
"Confirm Deletion" : "Confirmar desaniciu",
"Mappings cleared successfully!" : "¡Asignaciones borraes correutamente!",
"Error while clearing the mappings." : "Fallu mientres desaniciaben les asignaciones.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Nun s'almite l'enllaz anónimu. Por favor apurre un usuariu DN y contraseña.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Erru d'operaciones LDAP . Enllaz anónimu nun s'almite.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Nun pudo guardase. Por favor asegúrate que la base de datos ta en funcionamientu. Actualiza enantes de siguir.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar el mou va habilitar les consultes LDAP automátiques . Dependiendo del to tamañu de LDAP puede llevar un tiempu. ¿Inda deseya camudar el mou?",
"Select attributes" : "Esbillar atributos",
"User found and settings verified." : "Usuariu atopáu y la configuración verificada.",
"An unspecified error occurred. Please check log and settings." : "Asocedió un fallu non especificáu. Comprueba'l rexistru y los axustes, por favor.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtru de busca nun ye válidu , probablemente por cuenta de problemes de sintaxis como'l númberu impar de soportes abiertos y zarraos. Por favor revisalo.",
"Please provide a login name to test against" : "Por favor, proporcione un nombre de inicio de sesión para comprobar en contra",
"Your password will expire today." : "Güei caduca la to contraseña.",
"Could not find the desired feature" : "Nun pudo alcontrase la carauterística deseyada",
"Invalid Host" : "Agospiu non válidu",
"Test Configuration" : "Configuración de prueba",
"Help" : "Ayuda",
"Groups meeting these criteria are available in %s:" : "Los grupos que cumplen estos criterios tán disponibles en %s:",
"Only these object classes:" : "Namái d'estes clases d'oxetu:",
"Only from these groups:" : "Namái d'estos grupos:",
"Search groups" : "Esbillar grupos",
"Available groups" : "Grupos disponibles",
"Selected groups" : "Grupos seleicionaos",
"Edit LDAP Query" : "Editar consulta LDAP",
"LDAP Filter:" : "Filtru LDAP:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "El filtru especifica qué grupos LDAP van tener accesu a %s.",
"Verify settings and count the groups" : "Verificar axustes y contar los grupos",
"When logging in, %s will find the user based on the following attributes:" : "Al empecipiar sesión, %s atópase l'usuariu en función de los siguientes atributos :",
"Other Attributes:" : "Otros atributos:",
"Test Loginname" : "Preba de Nome d'Aniciu de Sesión",
"Verify settings" : "Comprobar los axustes",
"%s. Server:" : "%s. Sirvidor:",
"Copy current configuration into new directory binding" : "Copiar configuración actual nel nuevu directoriu obligatoriu",
"Delete the current configuration" : "Desaniciar la configuración actual",
"Host" : "Equipu",
"Port" : "Puertu",
"Detect Port" : "Detectar Puertu",
"User DN" : "DN usuariu",
"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." : "El DN del usuariu veceru col que va facese l'asociación, p.ex. uid=axente,dc=exemplu,dc=com. P'accesu anónimu, dexa DN y contraseña baleros.",
"Password" : "Contraseña",
"For anonymous access, leave DN and Password empty." : "Pa un accesu anónimu, dexar el DN y la contraseña baleros.",
"One Base DN per line" : "Un DN Base por llinia",
"You can specify Base DN for users and groups in the Advanced tab" : "Pues especificar el DN base pa usuarios y grupos na llingüeta Avanzáu",
"Detect Base DN" : "Detectar Base DN",
"Test Base DN" : "Probar Base DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automátiques de LDAP. Meyor pa grandes configuraciones, pero rique mayor conocimientu de LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Inxerta manualmente los filtros de LDAP (recomendáu pa direutorios llargos)",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Les clases d'oxetos más comunes pa los usuarios d'Internet son organizationalPerson, persona, usuariu y inetOrgPerson . Si nun ta seguro de qué clase d'oxetu escoyer, por favor consulte al so alministrador de directorios.",
"The filter specifies which LDAP users shall have access to the %s instance." : "El filtru especifica qué usuarios LDAP puen tener accesu a %s.",
"Verify settings and count users" : "Comprobar la configuración y usuarios de recuentu",
"Saving" : "Guardando",
"Back" : "Atrás",
"Continue" : "Continuar",
"Please renew your password." : "Renueva la to contraseña, por favor.",
"An internal error occurred." : "Asocedió un fallu internu.",
"Please try again or contact your administrator." : "Volvi tentalo o contauta col to alministrador, por favor.",
"Current password" : "Contraseña actual",
"New password" : "Contraseña nueva",
"Renew password" : "Renovar contraseña",
"Wrong password." : "Contraseña incorreuta.",
"Cancel" : "Encaboxar",
"Server" : "Sirvidor",
"Users" : "Usuarios",
"Login Attributes" : "Los atributos d'aniciu de sesión",
"Groups" : "Grupos",
"Expert" : "Espertu",
"Advanced" : "Avanzáu",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Avisu:</b> El módulu LDAP de PHP nun ta instaláu, el sistema nun va funcionar. Por favor consulta al alministrador del sistema pa instalalu.",
"Connection Settings" : "Axustes de conexón",
"Configuration Active" : "Configuración activa",
"When unchecked, this configuration will be skipped." : "Cuando nun tea conseñáu, saltaráse esta configuración.",
"Backup (Replica) Host" : "Sirvidor de copia de seguranza (Réplica)",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Dar un sirvidor de copia de seguranza opcional. Tien de ser una réplica del sirvidor principal LDAP / AD.",
"Backup (Replica) Port" : "Puertu pa copies de seguranza (Réplica)",
"Disable Main Server" : "Deshabilitar sirvidor principal",
"Only connect to the replica server." : "Coneutar namái col sirvidor de réplica.",
"Turn off SSL certificate validation." : "Apagar la validación del certificáu SSL.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Nun se recomienda, ¡úsalu namái pa pruebes! Si la conexón namái funciona con esta opción, importa'l certificáu SSL del sirvidor LDAP nel to sirvidor %s.",
"Cache Time-To-Live" : "Cache Time-To-Live",
"in seconds. A change empties the cache." : "en segundos. Un cambéu vacia la caché.",
"Directory Settings" : "Axustes del direutoriu",
"User Display Name Field" : "Campu de nome d'usuariu a amosar",
"The LDAP attribute to use to generate the user's display name." : "El campu LDAP a usar pa xenerar el nome p'amosar del usuariu.",
"2nd User Display Name Field" : "2ª usuariu amuesa Nome del campu",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributu LDAP que s'amesta al nome de visualización ente paréntesis. Los resultaos en, por exemplu, »John Doe (john.doe@example.org)«.",
"Base User Tree" : "Árbol base d'usuariu",
"One User Base DN per line" : "Un DN Base d'Usuariu por llinia",
"User Search Attributes" : "Atributos de la gueta d'usuariu",
"Optional; one attribute per line" : "Opcional; un atributu por llinia",
"Group Display Name Field" : "Campu de nome de grupu a amosar",
"The LDAP attribute to use to generate the groups's display name." : "El campu LDAP a usar pa xenerar el nome p'amosar del grupu.",
"Base Group Tree" : "Árbol base de grupu",
"One Group Base DN per line" : "Un DN Base de Grupu por llinia",
"Group Search Attributes" : "Atributos de gueta de grupu",
"Group-Member association" : "Asociación Grupu-Miembru",
"Dynamic Group Member URL" : "URL Dinámica de Grupu d'Usuarios",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atributu LDAP que nos oxetos de grupu contien una gueta de URLs de LDAP que determina qué oxetos pertenecen al grupu. (Un axuste vacíu desanicia la funcionalidá dinámica de pertenencia al grupu.)",
"Nested Groups" : "Grupos añeraos",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando s'active, van permitise grupos que contengan otros grupos (namái funciona si l'atributu de miembru de grupu contién DNs).",
"Paging chunksize" : "Tamañu de los fragmentos de paxinación",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamañu de los fragmentos usáu pa busques LDAP paxinaes que puen devolver resultaos voluminosos, como enubmeración d'usuarios o de grupos. (Si s'afita en 0, van deshabilitase les busques LDAP paxinaes neses situaciones.)",
"(New password is sent as plain text to LDAP)" : "(La contraseña únviase como testu planu a LDAP)",
"Special Attributes" : "Atributos especiales",
"Quota Field" : "Cuota",
"Quota Default" : "Cuota por defeutu",
"Email Field" : "E-mail",
"User Home Folder Naming Rule" : "Regla pa la carpeta Home d'usuariu",
"Internal Username" : "Nome d'usuariu internu",
"Internal Username Attribute:" : "Atributu Nome d'usuariu Internu:",
"Override UUID detection" : "Sobrescribir la deteición UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por defeutu, l'atributu UUID autodetéutase. Esti atributu úsase pa identificar induldablemente usuarios y grupos LDAP. Arriendes, el nome d'usuariu internu va crease en bas al UUID, si nun s'especificó otru comportamientu arriba. Pues sobrescribir la configuración y pasar un atributu de la to eleición. Tienes d'asegurate de que l'atributu de la to eleición seya accesible polos usuarios y grupos y ser únicu. Déxalu en blanco pa usar el comportamientu por defeutu. Los cambeos van tener efeutu namái nos usuarios y grupos de LDAP mapeaos (amestaos) recién.",
"UUID Attribute for Users:" : "Atributu UUID pa usuarios:",
"UUID Attribute for Groups:" : "Atributu UUID pa Grupos:",
"Username-LDAP User Mapping" : "Asignación del Nome d'usuariu LDAP",
"Clear Username-LDAP User Mapping" : "Llimpiar l'asignación de los Nomes d'usuariu de los usuarios LDAP",
"Clear Groupname-LDAP Group Mapping" : "Llimpiar l'asignación de los Nomes de grupu de los grupos de LDAP"
},
"nplurals=2; plural=(n != 1);");
+150
View File
@@ -0,0 +1,150 @@
{ "translations": {
"Failed to clear the mappings." : "Fallu al llimpiar los mapeos.",
"Failed to delete the server configuration" : "Fallu al desaniciar la configuración del sirvidor",
"Valid configuration, connection established!" : "¡Configuración válida, afitóse la conexón!",
"Invalid configuration. Please have a look at the logs for further details." : "Configuración non válida. Écha-yos un güeyu a los rexistros pa más detalles, por favor.",
"No action specified" : "Nun s'especificó l'aición",
"No configuration specified" : "Nun s'especificó la configuración",
"No data specified" : "Nun s'especificaron los datos",
" Could not set configuration %s" : "Nun pudo afitase la configuración %s",
"Action does not exist" : "L'acción nun esiste",
"Renewing …" : "Renovando...",
"Very weak password" : "Contraseña perfeble",
"Weak password" : "Contraseña feble",
"So-so password" : "Contraseña normalina",
"Good password" : "Contraseña bona",
"Strong password" : "Contraseña fuerte",
"The Base DN appears to be wrong" : "La base DN paez tar mal",
"Testing configuration…" : "Probando configuración...",
"Configuration incorrect" : "Configuración incorreuta",
"Configuration incomplete" : "Configuración incompleta",
"Configuration OK" : "Configuración correuta",
"Select groups" : "Esbillar grupos",
"Select object classes" : "Esbillar les clases d'oxetu",
"Please check the credentials, they seem to be wrong." : "Por favor, compruebe les credenciales, que paecen tar mal.",
"Please specify the port, it could not be auto-detected." : "Por favor especifica'l puertu, nun puede ser detectáu automáticamente .",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN nun puede ser detectada automáticamente, por favor revisa les credenciales, host yá'l puertu.",
"Could not detect Base DN, please enter it manually." : "Nun se detectó base DN, por favor introduzla manualmente .",
"{nthServer}. Server" : "{nthServer}. Sirvidor",
"No object found in the given Base DN. Please revise." : "Nun s'atopó nengún oxetu na Base DN dada. Por favor, revísalo.",
"More than 1,000 directory entries available." : "Más de 1.000 entraes de directoriu disponibles.",
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Asocedió un erru. Por favor, compruebe la Base DN , amás de la configuración de conexón y les credenciales.",
"Do you really want to delete the current Server Configuration?" : "¿Daveres que quies desaniciar la configuración actual del sirvidor?",
"Confirm Deletion" : "Confirmar desaniciu",
"Mappings cleared successfully!" : "¡Asignaciones borraes correutamente!",
"Error while clearing the mappings." : "Fallu mientres desaniciaben les asignaciones.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Nun s'almite l'enllaz anónimu. Por favor apurre un usuariu DN y contraseña.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Erru d'operaciones LDAP . Enllaz anónimu nun s'almite.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Nun pudo guardase. Por favor asegúrate que la base de datos ta en funcionamientu. Actualiza enantes de siguir.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar el mou va habilitar les consultes LDAP automátiques . Dependiendo del to tamañu de LDAP puede llevar un tiempu. ¿Inda deseya camudar el mou?",
"Select attributes" : "Esbillar atributos",
"User found and settings verified." : "Usuariu atopáu y la configuración verificada.",
"An unspecified error occurred. Please check log and settings." : "Asocedió un fallu non especificáu. Comprueba'l rexistru y los axustes, por favor.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtru de busca nun ye válidu , probablemente por cuenta de problemes de sintaxis como'l númberu impar de soportes abiertos y zarraos. Por favor revisalo.",
"Please provide a login name to test against" : "Por favor, proporcione un nombre de inicio de sesión para comprobar en contra",
"Your password will expire today." : "Güei caduca la to contraseña.",
"Could not find the desired feature" : "Nun pudo alcontrase la carauterística deseyada",
"Invalid Host" : "Agospiu non válidu",
"Test Configuration" : "Configuración de prueba",
"Help" : "Ayuda",
"Groups meeting these criteria are available in %s:" : "Los grupos que cumplen estos criterios tán disponibles en %s:",
"Only these object classes:" : "Namái d'estes clases d'oxetu:",
"Only from these groups:" : "Namái d'estos grupos:",
"Search groups" : "Esbillar grupos",
"Available groups" : "Grupos disponibles",
"Selected groups" : "Grupos seleicionaos",
"Edit LDAP Query" : "Editar consulta LDAP",
"LDAP Filter:" : "Filtru LDAP:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "El filtru especifica qué grupos LDAP van tener accesu a %s.",
"Verify settings and count the groups" : "Verificar axustes y contar los grupos",
"When logging in, %s will find the user based on the following attributes:" : "Al empecipiar sesión, %s atópase l'usuariu en función de los siguientes atributos :",
"Other Attributes:" : "Otros atributos:",
"Test Loginname" : "Preba de Nome d'Aniciu de Sesión",
"Verify settings" : "Comprobar los axustes",
"%s. Server:" : "%s. Sirvidor:",
"Copy current configuration into new directory binding" : "Copiar configuración actual nel nuevu directoriu obligatoriu",
"Delete the current configuration" : "Desaniciar la configuración actual",
"Host" : "Equipu",
"Port" : "Puertu",
"Detect Port" : "Detectar Puertu",
"User DN" : "DN usuariu",
"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." : "El DN del usuariu veceru col que va facese l'asociación, p.ex. uid=axente,dc=exemplu,dc=com. P'accesu anónimu, dexa DN y contraseña baleros.",
"Password" : "Contraseña",
"For anonymous access, leave DN and Password empty." : "Pa un accesu anónimu, dexar el DN y la contraseña baleros.",
"One Base DN per line" : "Un DN Base por llinia",
"You can specify Base DN for users and groups in the Advanced tab" : "Pues especificar el DN base pa usuarios y grupos na llingüeta Avanzáu",
"Detect Base DN" : "Detectar Base DN",
"Test Base DN" : "Probar Base DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automátiques de LDAP. Meyor pa grandes configuraciones, pero rique mayor conocimientu de LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Inxerta manualmente los filtros de LDAP (recomendáu pa direutorios llargos)",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Les clases d'oxetos más comunes pa los usuarios d'Internet son organizationalPerson, persona, usuariu y inetOrgPerson . Si nun ta seguro de qué clase d'oxetu escoyer, por favor consulte al so alministrador de directorios.",
"The filter specifies which LDAP users shall have access to the %s instance." : "El filtru especifica qué usuarios LDAP puen tener accesu a %s.",
"Verify settings and count users" : "Comprobar la configuración y usuarios de recuentu",
"Saving" : "Guardando",
"Back" : "Atrás",
"Continue" : "Continuar",
"Please renew your password." : "Renueva la to contraseña, por favor.",
"An internal error occurred." : "Asocedió un fallu internu.",
"Please try again or contact your administrator." : "Volvi tentalo o contauta col to alministrador, por favor.",
"Current password" : "Contraseña actual",
"New password" : "Contraseña nueva",
"Renew password" : "Renovar contraseña",
"Wrong password." : "Contraseña incorreuta.",
"Cancel" : "Encaboxar",
"Server" : "Sirvidor",
"Users" : "Usuarios",
"Login Attributes" : "Los atributos d'aniciu de sesión",
"Groups" : "Grupos",
"Expert" : "Espertu",
"Advanced" : "Avanzáu",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Avisu:</b> El módulu LDAP de PHP nun ta instaláu, el sistema nun va funcionar. Por favor consulta al alministrador del sistema pa instalalu.",
"Connection Settings" : "Axustes de conexón",
"Configuration Active" : "Configuración activa",
"When unchecked, this configuration will be skipped." : "Cuando nun tea conseñáu, saltaráse esta configuración.",
"Backup (Replica) Host" : "Sirvidor de copia de seguranza (Réplica)",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Dar un sirvidor de copia de seguranza opcional. Tien de ser una réplica del sirvidor principal LDAP / AD.",
"Backup (Replica) Port" : "Puertu pa copies de seguranza (Réplica)",
"Disable Main Server" : "Deshabilitar sirvidor principal",
"Only connect to the replica server." : "Coneutar namái col sirvidor de réplica.",
"Turn off SSL certificate validation." : "Apagar la validación del certificáu SSL.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Nun se recomienda, ¡úsalu namái pa pruebes! Si la conexón namái funciona con esta opción, importa'l certificáu SSL del sirvidor LDAP nel to sirvidor %s.",
"Cache Time-To-Live" : "Cache Time-To-Live",
"in seconds. A change empties the cache." : "en segundos. Un cambéu vacia la caché.",
"Directory Settings" : "Axustes del direutoriu",
"User Display Name Field" : "Campu de nome d'usuariu a amosar",
"The LDAP attribute to use to generate the user's display name." : "El campu LDAP a usar pa xenerar el nome p'amosar del usuariu.",
"2nd User Display Name Field" : "2ª usuariu amuesa Nome del campu",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributu LDAP que s'amesta al nome de visualización ente paréntesis. Los resultaos en, por exemplu, »John Doe (john.doe@example.org)«.",
"Base User Tree" : "Árbol base d'usuariu",
"One User Base DN per line" : "Un DN Base d'Usuariu por llinia",
"User Search Attributes" : "Atributos de la gueta d'usuariu",
"Optional; one attribute per line" : "Opcional; un atributu por llinia",
"Group Display Name Field" : "Campu de nome de grupu a amosar",
"The LDAP attribute to use to generate the groups's display name." : "El campu LDAP a usar pa xenerar el nome p'amosar del grupu.",
"Base Group Tree" : "Árbol base de grupu",
"One Group Base DN per line" : "Un DN Base de Grupu por llinia",
"Group Search Attributes" : "Atributos de gueta de grupu",
"Group-Member association" : "Asociación Grupu-Miembru",
"Dynamic Group Member URL" : "URL Dinámica de Grupu d'Usuarios",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atributu LDAP que nos oxetos de grupu contien una gueta de URLs de LDAP que determina qué oxetos pertenecen al grupu. (Un axuste vacíu desanicia la funcionalidá dinámica de pertenencia al grupu.)",
"Nested Groups" : "Grupos añeraos",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando s'active, van permitise grupos que contengan otros grupos (namái funciona si l'atributu de miembru de grupu contién DNs).",
"Paging chunksize" : "Tamañu de los fragmentos de paxinación",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamañu de los fragmentos usáu pa busques LDAP paxinaes que puen devolver resultaos voluminosos, como enubmeración d'usuarios o de grupos. (Si s'afita en 0, van deshabilitase les busques LDAP paxinaes neses situaciones.)",
"(New password is sent as plain text to LDAP)" : "(La contraseña únviase como testu planu a LDAP)",
"Special Attributes" : "Atributos especiales",
"Quota Field" : "Cuota",
"Quota Default" : "Cuota por defeutu",
"Email Field" : "E-mail",
"User Home Folder Naming Rule" : "Regla pa la carpeta Home d'usuariu",
"Internal Username" : "Nome d'usuariu internu",
"Internal Username Attribute:" : "Atributu Nome d'usuariu Internu:",
"Override UUID detection" : "Sobrescribir la deteición UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por defeutu, l'atributu UUID autodetéutase. Esti atributu úsase pa identificar induldablemente usuarios y grupos LDAP. Arriendes, el nome d'usuariu internu va crease en bas al UUID, si nun s'especificó otru comportamientu arriba. Pues sobrescribir la configuración y pasar un atributu de la to eleición. Tienes d'asegurate de que l'atributu de la to eleición seya accesible polos usuarios y grupos y ser únicu. Déxalu en blanco pa usar el comportamientu por defeutu. Los cambeos van tener efeutu namái nos usuarios y grupos de LDAP mapeaos (amestaos) recién.",
"UUID Attribute for Users:" : "Atributu UUID pa usuarios:",
"UUID Attribute for Groups:" : "Atributu UUID pa Grupos:",
"Username-LDAP User Mapping" : "Asignación del Nome d'usuariu LDAP",
"Clear Username-LDAP User Mapping" : "Llimpiar l'asignación de los Nomes d'usuariu de los usuarios LDAP",
"Clear Groupname-LDAP Group Mapping" : "Llimpiar l'asignación de los Nomes de grupu de los grupos de LDAP"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+37
View File
@@ -0,0 +1,37 @@
OC.L10N.register(
"user_ldap",
{
"Failed to clear the mappings." : "Xəritələnməni silmək mümkün olmadı",
"Failed to delete the server configuration" : "Server configini silmək mümkün olmadı",
"The configuration is valid and the connection could be established!" : "Configurasiya doğrudur və qoşulmaq mümkündür!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Configurasiya doğrudur yalnız, birləşmədə səhv oldu. Xahiş olunur server quraşdırmalarını və daxil etdiyiniz verilənlərin düzgünlüyünü yoxlayasınız.",
"The configuration is invalid. Please have a look at the logs for further details." : "Configurasiya dügün deyil. Əlavə detallar üçün xahiş edirik jurnal faylına baxasınız.",
"No action specified" : "Heç bir iş təyin edilməyib",
"No configuration specified" : "Təyin edilmiş konfiqurasiya yoxdur",
"No data specified" : "Təyin edilmiş data yoxdur",
" Could not set configuration %s" : "%s configi təyin etmək mümkün olmadı",
"Configuration incorrect" : "Konfiqurasiya düzgün deyil",
"Configuration incomplete" : "Konfiqruasiya bitmiş deyil",
"Configuration OK" : "Konfiqurasiya OK-dir",
"Select groups" : "Qrupları seç",
"Select object classes" : "object class-larını seç",
"{nthServer}. Server" : "{nthServer}. Server",
"Do you really want to delete the current Server Configuration?" : "Siz hal-hazırki server konfiqini silmək istədiyinizdən həqiqətən əminsinizmi?",
"Confirm Deletion" : "Silinmənin təsdiqi",
"Select attributes" : "Atributları seç",
"_%s group found_::_%s groups found_" : ["%s qruplar tapıldı","%s qruplar tapıldı"],
"_%s user found_::_%s users found_" : ["%s istifadəçilər tapıldı","%s istifadəçilər tapıldı"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "İstifadəçinin ekran atributu adını təyin etmək mümkün deyil. Xahiş olunur sizin özünüz onu əllə ldap konfiqində təyin edəsiniz.",
"Could not find the desired feature" : "Arzulanılan imkanı tapmaq mümkün deyil",
"Invalid Host" : "Yalnış Host",
"Server" : "Server",
"Users" : "İstifadəçilər",
"Groups" : "Qruplar",
"Test Configuration" : "Konfiqurasiya testi",
"Help" : "Kömək",
"Host" : "Şəbəkədə ünvan",
"Port" : "Port",
"Password" : "Şifrə",
"Advanced" : "İrəliləmiş"
},
"nplurals=2; plural=(n != 1);");
+35
View File
@@ -0,0 +1,35 @@
{ "translations": {
"Failed to clear the mappings." : "Xəritələnməni silmək mümkün olmadı",
"Failed to delete the server configuration" : "Server configini silmək mümkün olmadı",
"The configuration is valid and the connection could be established!" : "Configurasiya doğrudur və qoşulmaq mümkündür!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Configurasiya doğrudur yalnız, birləşmədə səhv oldu. Xahiş olunur server quraşdırmalarını və daxil etdiyiniz verilənlərin düzgünlüyünü yoxlayasınız.",
"The configuration is invalid. Please have a look at the logs for further details." : "Configurasiya dügün deyil. Əlavə detallar üçün xahiş edirik jurnal faylına baxasınız.",
"No action specified" : "Heç bir iş təyin edilməyib",
"No configuration specified" : "Təyin edilmiş konfiqurasiya yoxdur",
"No data specified" : "Təyin edilmiş data yoxdur",
" Could not set configuration %s" : "%s configi təyin etmək mümkün olmadı",
"Configuration incorrect" : "Konfiqurasiya düzgün deyil",
"Configuration incomplete" : "Konfiqruasiya bitmiş deyil",
"Configuration OK" : "Konfiqurasiya OK-dir",
"Select groups" : "Qrupları seç",
"Select object classes" : "object class-larını seç",
"{nthServer}. Server" : "{nthServer}. Server",
"Do you really want to delete the current Server Configuration?" : "Siz hal-hazırki server konfiqini silmək istədiyinizdən həqiqətən əminsinizmi?",
"Confirm Deletion" : "Silinmənin təsdiqi",
"Select attributes" : "Atributları seç",
"_%s group found_::_%s groups found_" : ["%s qruplar tapıldı","%s qruplar tapıldı"],
"_%s user found_::_%s users found_" : ["%s istifadəçilər tapıldı","%s istifadəçilər tapıldı"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "İstifadəçinin ekran atributu adını təyin etmək mümkün deyil. Xahiş olunur sizin özünüz onu əllə ldap konfiqində təyin edəsiniz.",
"Could not find the desired feature" : "Arzulanılan imkanı tapmaq mümkün deyil",
"Invalid Host" : "Yalnış Host",
"Server" : "Server",
"Users" : "İstifadəçilər",
"Groups" : "Qruplar",
"Test Configuration" : "Konfiqurasiya testi",
"Help" : "Kömək",
"Host" : "Şəbəkədə ünvan",
"Port" : "Port",
"Password" : "Şifrə",
"Advanced" : "İrəliləmiş"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+6
View File
@@ -0,0 +1,6 @@
OC.L10N.register(
"user_ldap",
{
"Advanced" : "Дасведчаны"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
+4
View File
@@ -0,0 +1,4 @@
{ "translations": {
"Advanced" : "Дасведчаны"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
}
+218
View File
@@ -0,0 +1,218 @@
OC.L10N.register(
"user_ldap",
{
"Failed to clear the mappings." : "Неуспешно изчистване на mapping-ите.",
"Failed to delete the server configuration" : "Неуспешен опит за изтриване на сървърната конфигурация.",
"Invalid configuration: Anonymous binding is not allowed." : "Невалидна конфигурация: Анонимното обвързване не е разрешено.",
"Valid configuration, connection established!" : "Валидна конфигурация, връзката е установена!",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "Валидна конфигурация, но обвързването не бе успешно. Моля, проверете настройките и идентификационните данни на сървъра.",
"Invalid configuration. Please have a look at the logs for further details." : "Невалидна конфигурация. Моля, разгледайте журналите за повече подробности.",
"No action specified" : "Не е посочено действие",
"No configuration specified" : "Не е посочена конфигурация",
"No data specified" : "Не са посочени данни",
"Invalid data specified" : "Посочени са невалидни данни",
" Could not set configuration %s" : "Неуспешно задаване на конфигруацията %s",
"Action does not exist" : "Действието не съществува",
"Renewing …" : "Подновяване …",
"Very weak password" : "Много проста парола",
"Weak password" : "Проста парола",
"So-so password" : "Не особено добра парола",
"Good password" : "Добра парола",
"Strong password" : "Сложна парола",
"The Base DN appears to be wrong" : "Базовото DN изглежда е грешно",
"Testing configuration…" : "Изпробване на конфигурацията...",
"Configuration incorrect" : "Конфигурацията е грешна",
"Configuration incomplete" : "Конфигурацията не е завършена",
"Configuration OK" : "Конфигурацията е ОК",
"Select groups" : "Избери Групи",
"Select object classes" : "Избери типове обекти",
"Please check the credentials, they seem to be wrong." : "Моля, проверете идентификационните данни, изглежда че са неправилни.",
"Please specify the port, it could not be auto-detected." : "Моля, посочете порт, той не може да бъде автоматично определен.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Базовото DN не може да бъде открито автоматично, моля, ревизирайте идентификационните данни, хоста и порта.",
"Could not detect Base DN, please enter it manually." : "Базовото DN не можа да бъде открито, моля, въведете го ръчно.",
"{nthServer}. Server" : "{nthServer}. Сървър",
"No object found in the given Base DN. Please revise." : "Няма намерен обект в даденото базово DN. Моля, ревизирайте.",
"More than 1,000 directory entries available." : "Налични са повече от 1000 записа в директорията.",
"_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} записи, налични в рамките на предоставеното базово DN","{objectsFound} записи, налични в рамките на предоставеното базово DN"],
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Възникна грешка. Моля, проверете базовото DN, както и настройките за връзка и идентификационни данни.",
"Do you really want to delete the current Server Configuration?" : "Наистина ли желаете текущата сървърна конфигурация да бъде изтрита?",
"Confirm Deletion" : "Потвърди Изтриването",
"Mappings cleared successfully!" : "Съпоставянията са изчистени успешно!",
"Error while clearing the mappings." : "Грешка при изчистването на съпоставянията.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Не е позволено анонимно обвързване. Моля, посочете потребителско DN и парола.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Грешка при LDAP операции. Анонимното обвързване може да не е разрешено.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Записването не беше успешно. Моля, уверете се, че базата данни е в експлоатация. Презаредете, преди да продължите.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Превключването на режима ще активира автоматичните LDAP заявки. В зависимост от размера на вашия LDAP може да отнеме известно време. Все още ли искате да превключите режима?",
"Mode switch" : "Превключване на режим",
"Select attributes" : "Избери атрибути",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Потребителят не е намерен. Моля, проверете вашите атрибути за вход и име на потребител. Ефективен филтър (за копиране и поставяне за проверка от командния ред):",
"User found and settings verified." : "Намерен е потребител и настройките са проверени.",
"Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Помислете за стесняване на търсенето, тъй като то обхваща много потребители, само първият от които ще може да влезе.",
"An unspecified error occurred. Please check log and settings." : "Възникна неуточнена грешка. Моля, проверете журнала и настройките.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Невалиден филтър за търсене, вероятно поради проблеми със синтаксиса като нечетен брой отворени и затворени скоби. Моля, проверете.",
"A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Възникна грешка при свързване към LDAP/AD. Моля, проверете хост сървър, порт и идентификационни данни.",
"The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заместителят „ %u“ липсва. Той ще бъде заменен с името за вход при запитване към LDAP/AD.",
"Please provide a login name to test against" : "Моля, посочете име за вход, срещу което да тествате",
"The group box was disabled, because the LDAP/AD server does not support memberOf." : "Груповата кутия е деактивирана, тъй като LDAP/AD сървърът не поддържа memberOf.",
"Password change rejected. Hint: " : "Смяната на паролата е отхвърлена. Подсказка:",
"Please login with the new password" : "Моля, влезте с новата парола",
"LDAP User backend" : "LDAP потребителски сървър",
"Your password will expire tomorrow." : "Вашата парола ще изтече утре.",
"Your password will expire today." : "Вашата парола ще изтече днес.",
"_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Вашата парола ще изтече в рамките на %n дни.","Вашата парола ще изтече в рамките на %n дни."],
"LDAP/AD integration" : "LDAP/AD интеграция",
"_%n group found_::_%n groups found_" : ["%n открити групи","%n открити групи"],
"> 1000 groups found" : "> 1000 открити групи",
"> 1000 users found" : "> 1000 намерени потребители",
"_%n user found_::_%n users found_" : ["%n намерени потребители","%n намерени потребители"],
"Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не можа да се открие атрибут за показвано име на потребителя. Моля, посочете го сами в разширените настройки на LDAP.",
"Could not find the desired feature" : "Не е открита желанта функция",
"Invalid Host" : "Невалиден хост",
"LDAP user and group backend" : "Потребителски и групов LDAP сървър",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Това приложение позволява на администраторите да свържат Nextcloud към потребителска директория, базирана на LDAP. ",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Това приложение позволява на администраторите да свържат Nextcloud към LDAP-базирана потребителска директория за удостоверяване и предоставяне на потребители, групи и потребителски атрибути. Администраторите могат да конфигурират това приложение да се свързва с една или повече LDAP директории или Active Directories/активни директории/, чрез LDAP интерфейс. Атрибути, като потребителска квота, имейл, снимки на аватар, членство в групи и други могат да бъдат изтеглени в Nextcloud от директория със съответните заявки и филтри.\n\nПотребителя влиза в Nextcloud със своите LDAP или AD идентификационни данни и му се предоставя достъп въз основа на заявка за удостоверяване, обработвана от LDAP или AD сървъра. Nextcloud не съхранява LDAP или AD пароли, а тези идентификационни данни се използват за удостоверяване на потребител и след това Nextcloud използва сесия за потребителския идентификатор. Повече информация е налична в документацията на LDAP потребител и групов сървър.",
"Test Configuration" : "Изпробване на конфигурацията",
"Help" : "Помощ",
"Groups meeting these criteria are available in %s:" : "Групи спазващи тези критерии са разположени в %s:",
"Only these object classes:" : "Само тези класове обекти:",
"Only from these groups:" : "Само от тези групи:",
"Search groups" : "Търсене на групи",
"Available groups" : "Налични групи",
"Selected groups" : "Избрани групи",
"Edit LDAP Query" : "Редактиране на LDAP заявка",
"LDAP Filter:" : "LDAP филтър:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Филтърът посочва кои LDAP групи ще имат достъп до %s инсталацията.",
"Verify settings and count the groups" : "Проверете настройките и пребройте групите",
"When logging in, %s will find the user based on the following attributes:" : "Когато влезе, %s ще намери потребител въз основа на следните атрибути:",
"LDAP/AD Username:" : "LDAP / AD Потребител:",
"Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Позволява влизане с име на потребител на LDAP/AD, което е или „uid“ или „sAMAccountName“ и ще бъде открито.",
"LDAP/AD Email Address:" : "LDAP / AD имейл адрес:",
"Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Позволява влизане срещу имейл атрибут. Разрешени са „mail “ и „mailPrimaryAddress“.",
"Other Attributes:" : "Други атрибути:",
"Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Определя филтър, който да се приложи при опит за влизане. „%%“ замества името на потребител в действието за влизане. Пример: „uid=%%uid “",
"Test Loginname" : "Проверка на Потребителско име",
"Attempts to receive a DN for the given loginname and the current login filter" : "Опити за получаване на DN за даденото име за влизане и текущия филтър за вход",
"Verify settings" : "Потвърди настройките",
"%s. Server:" : "%s. Сървър:",
"Add a new configuration" : "Добавяне на нова конфигурация",
"Copy current configuration into new directory binding" : "Копиране на текущата конфигурация в ново обвързване на директория",
"Delete the current configuration" : "Изтриване на текущата конфигурация",
"Host" : "Хост",
"You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Можете да пропуснете протокола, освен ако не изисквате SSL. Ако е така, започнете с ldaps://",
"Port" : "Порт",
"Detect Port" : "Открит Port",
"User DN" : "User 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 и Парола празни.",
"Save Credentials" : "Запиши идентификационни данни",
"One Base DN per line" : "По един Base DN на ред",
"You can specify Base DN for users and groups in the Advanced tab" : "Можете да настроите Base DN за отделни потребители/групи в раздела \"Допълнителни\"",
"Detect Base DN" : "Откриване на базов DN",
"Test Base DN" : " Тестване на базов DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избягва автоматични LDAP заявки. По-добра опция за големи инсталации, но изисква LDAP познания.",
"Manually enter LDAP filters (recommended for large directories)" : "Ръчно въвеждана на LDAP филтри(препоръчано за по-големи папки)",
"Listing and searching for users is constrained by these criteria:" : "Записването в списък и търсенето на потребители е ограничено от следните критерии:",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Най-често срещаните обектни класове за потребителите са OrganizationalPerson, person, user и inetOrgPerson. Ако не сте сигурни кой обектен клас да изберете, моля, консултирайте се с администратора на директорията.",
"The filter specifies which LDAP users shall have access to the %s instance." : "Филтърът посочва кои LDAP потребители ще имат достъп до %s инсталацията.",
"Verify settings and count users" : "Проверете настройките и пребройте потребителите",
"Saving" : "Записване",
"Back" : "Назад",
"Continue" : "Продължи",
"Please renew your password." : "Моля, обновете вашата парола.",
"An internal error occurred." : "Възникна вътрешно сървърна грешка.",
"Please try again or contact your administrator." : "Опитайте отново или се свържете с администраотра.",
"Current password" : "Текуща парола",
"New password" : "Нова парола",
"Renew password" : "Обновете парола",
"Wrong password." : "Грешна парола.",
"Cancel" : "Отказ",
"Server" : "Сървър",
"Users" : "Потребители",
"Login Attributes" : "Атрибути за влизане",
"Groups" : "Групи",
"Expert" : "Експерт",
"Advanced" : "Допълнителни",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Предупреждение:</b> PHP LDAP модулът не е инсталиран, сървърът няма да работи. Моля, поискай системният админстратор да го инсталира.",
"Connection Settings" : "Настройки на Връзката",
"Configuration Active" : "Конфигурацията е Активна",
"When unchecked, this configuration will be skipped." : "Когато не е отметнато, тази конфигурация ще бъде прескочена.",
"Backup (Replica) Host" : "Резервен (Реплика) Хост сървър",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Задай незадължителен резервен сървър. Трябва да бъде реплика на главния LDAP/AD сървър.",
"Backup (Replica) Port" : "Резервен (Реплика) Порт",
"Disable Main Server" : "Изключи Главиния Сървър",
"Only connect to the replica server." : "Свържи се само с репликирания сървър.",
"Turn off SSL certificate validation." : "Изключи валидацията на SSL сертификата.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Не е препоръчително! Ползвайте само за тестване. Ако връзката работи само с тази опция, внесете SSL сертификата на LDAP сървъра във вашия %s сървър.",
"Cache Time-To-Live" : "Кеширай Time-To-Live",
"in seconds. A change empties the cache." : "в секунди. Всяка промяна изтрива кеша.",
"Directory Settings" : "Настройки на Директорията",
"User Display Name Field" : "Поле на име за визуализация на потребител",
"The LDAP attribute to use to generate the user's display name." : "LDAP атрибутът, който да бъде използван за генериране на видимото име на потребителя.",
"2nd User Display Name Field" : "2-ро поле на име за визуализация на потребител",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "По избор. LDAP атрибут, който да се добави към екранното име в скоби. Резултати напр. »Джон Доу (john.doe@example.org)«.",
"Base User Tree" : "Base User Tree",
"One User Base DN per line" : "По един User Base DN на ред",
"User Search Attributes" : "Атрибути на Потребителско Търсене",
"Optional; one attribute per line" : "По желание; един атрибут на ред",
"Group Display Name Field" : "Поле на име за визуализация на група",
"The LDAP attribute to use to generate the groups's display name." : "LDAP атрибутът, който да бъде използван за генерирането на видмото име на групата.",
"Base Group Tree" : "Base Group Tree",
"One Group Base DN per line" : "По един Group Base DN на ред",
"Group Search Attributes" : "Атрибути на Групово Търсене",
"Group-Member association" : "Group-Member асоциация",
"Dynamic Group Member URL" : "URL адрес на член на динамичната група",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP е атрибутът, който на групови обекти съдържа URL адрес за търсене на LDAP, който определя, кои обекти принадлежат към групата. (Празна настройка деактивира функционалността за динамично членство в група.)",
"Nested Groups" : "Вложени Групи",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Когато е включени, се подържат групи в групи. (Работи единствено ако членът на групата притежава атрибута DNs).",
"Paging chunksize" : "Размер на paging-а",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Размерът използван за връщането на големи резултати от LDAP търсения като изброяване на потребители или групи. (Стойност 0 изключва paged LDAP търсения в тези ситуации).",
"Enable LDAP password changes per user" : "Активиране на промените на LDAP паролата на потребител",
"Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Позволете на потребителите на LDAP да променят паролата си и позволете на супер администраторите и груповите администратори да променят паролата на своите потребители на LDAP. Работи само когато политиките за контрол на достъпа са конфигурирани в съответствие на LDAP сървъра. Тъй като пароли се изпращат в обикновен текст към LDAP сървъра, трябва да се използва транспортно криптиране и да се конфигурира хеширането на паролата на LDAP сървъра.",
"(New password is sent as plain text to LDAP)" : "(Новата парола се изпраща като обикновен текст до LDAP)",
"Default password policy DN" : "Политика за парола по подразбиране на DN",
"The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN на политика за парола по подразбиране, която ще се използва за обработка на изтичане на паролата. Работи само когато промените на LDAP паролата на потребител са разрешени и се поддържа само от OpenLDAP. Оставете празно, за да деактивирате обработката на изтичане на паролата.",
"Special Attributes" : "Специални атрибути",
"Quota Field" : "Поле за Квота",
"Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Оставете празно за квота по подразбиране на потребителя. В противен случай посочете LDAP/AD атрибут.",
"Quota Default" : "Детайли на квотата",
"Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Отмяна на квотата по подразбиране за потребители на LDAP, които нямат зададена квота в полето за квота.",
"Email Field" : "Поле за имейл",
"Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Задайте имейла на потребителя от неговия LDAP атрибут. Оставете го празно за поведение по подразбиране.",
"User Home Folder Naming Rule" : "Правило за наименуване на домашна папка на потребителя",
"Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Оставете празно за име на потребител (по пдразбиране). Или посочете LDAP/AD атрибут.",
"\"$home\" Placeholder Field" : "„$home“ Заместващо поле",
"$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home в конфигурация за външно хранилище ще бъде заменен със стойността на посочения атрибут",
"User Profile Attributes" : "Атрибути на Потребителски Профил",
"Phone Field" : "Поле за Телефонен номер",
"User profile Phone will be set from the specified attribute" : "Телефонът на потребителския профил ще бъде зададен от определения атрибут",
"Website Field" : "Поле за Уеб сайт",
"User profile Website will be set from the specified attribute" : "Уеб сайтът на потребителския профил ще бъде зададен от определения атрибут",
"Address Field" : "Поле за Адрес",
"User profile Address will be set from the specified attribute" : "Адресът на потребителския профил ще бъде зададен от определения атрибут",
"Twitter Field" : "Twitter Поле",
"User profile Twitter will be set from the specified attribute" : "Потребителският профил вTwitter ще бъде зададен от определения атрибут",
"Fediverse Field" : "Fediverse Поле",
"User profile Fediverse will be set from the specified attribute" : "Потребителският профил във Fediverse ще бъде зададен от определения атрибут",
"Organisation Field" : "Поле за име на Организация",
"User profile Organisation will be set from the specified attribute" : "Организацията на потребителския профил ще бъде зададена от определения атрибут",
"Role Field" : "Поле за Роля",
"User profile Role will be set from the specified attribute" : "Ролята на потребителския профил ще бъде зададена от определения атрибут",
"Headline Field" : "Поле за Заглавие",
"User profile Headline will be set from the specified attribute" : "Заглавието на потребителския профил ще бъде зададено от определения атрибут",
"Biography Field" : "Поле за Биография",
"User profile Biography will be set from the specified attribute" : "Биографията на потребителския профил ще бъде зададена от определения атрибут",
"Internal Username" : "Вътрешно потребителско име",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "По подразбиране вътрешното име на потребител ще бъде създадено от атрибута UUID. Той гарантира, че името на потребител е уникално и знаците не трябва да се преобразуват. Вътрешното име на потребител има ограничението, че са позволени само тези знаци: [a-zA-Z0-9_.@-]. Други знаци се заменят с тяхното ASCII съответствие или просто се пропускат. При сблъсъци числото ще бъде добавено/увеличено. Вътрешното име на потребител се използва за вътрешно идентифициране на потребител. Това също е името по подразбиране за домашната папка на потребителя. Той също така е част от отдалечени URL адреси, например за всички *DAV услуги. С тази настройка поведението по подразбиране може да бъде отменено. Промените ще имат ефект само върху ново съпоставени (добавени) потребители на LDAP. Оставете го празно за поведение по подразбиране. ",
"Internal Username Attribute:" : "Атрибут на вътрешното потребителско име:",
"Override UUID detection" : "Промени UUID откриването",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Обикновено UUID атрибутът ще бъде намерен автоматично. UUID атрибута се използва, за да се идентифицират еднозначно LDAP потребители и групи. Освен това ще бъде генерирано вътрешното име базирано на UUID-то, ако такова не е посочено по-горе. Можете да промените настройката и да използвате атрибут по свой избор. Наложително е атрибутът да бъде уникален както за потребителите така и за групите. Промените ще се отразят само за новодобавени (map-нати) LDAP потребители.",
"UUID Attribute for Users:" : "UUID атрибут за потребителите:",
"UUID Attribute for Groups:" : "UUID атрибут за групите:",
"Username-LDAP User Mapping" : "Име на потребител-LDAP Потребителско съпоставяне ",
"Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Потребителските имена се използват за съхраняване и присвояване на метаданни. С цел точно идентифициране и разпознаване на потребителите, всеки потребител на LDAP ще има вътрешно име на потребител. Това изисква съпоставяне от име на потребител към потребител на LDAP. Създаденото име на потребител се съпоставя с UUID на потребителя на LDAP. Освен това DN се кешира, за да се намали взаимодействието с LDAP, но не се използва за идентификация. Ако DN се промени, промените ще бъдат намерени. Вътрешното име на потребител се използва навсякъде. Изчистването на съпоставянията ще има остатъци навсякъде. Изчистването на съпоставянията не е чувствително към конфигурацията, засяга всички LDAP конфигурации! Никога не изчиствайте съпоставянията в производствена среда, само в тестов или експериментален етап.",
"Clear Username-LDAP User Mapping" : "Изчистване на име на потребител-LDAP Потребителско съпоставяне ",
"Clear Groupname-LDAP Group Mapping" : "Изчистване на име на група-LDAP Потребителско съпоставяне ",
"Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Открит е невалиден UUID на потребители или групи на LDAP. Моля, прегледайте настройките си за \"Override UUID detection\"/ откриване на отмяна на UUID/, в експертната част на LDAP конфигурацията и използвайте \"occ ldap:update-uuid\", за да ги актуализирате."
},
"nplurals=2; plural=(n != 1);");
+216
View File
@@ -0,0 +1,216 @@
{ "translations": {
"Failed to clear the mappings." : "Неуспешно изчистване на mapping-ите.",
"Failed to delete the server configuration" : "Неуспешен опит за изтриване на сървърната конфигурация.",
"Invalid configuration: Anonymous binding is not allowed." : "Невалидна конфигурация: Анонимното обвързване не е разрешено.",
"Valid configuration, connection established!" : "Валидна конфигурация, връзката е установена!",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "Валидна конфигурация, но обвързването не бе успешно. Моля, проверете настройките и идентификационните данни на сървъра.",
"Invalid configuration. Please have a look at the logs for further details." : "Невалидна конфигурация. Моля, разгледайте журналите за повече подробности.",
"No action specified" : "Не е посочено действие",
"No configuration specified" : "Не е посочена конфигурация",
"No data specified" : "Не са посочени данни",
"Invalid data specified" : "Посочени са невалидни данни",
" Could not set configuration %s" : "Неуспешно задаване на конфигруацията %s",
"Action does not exist" : "Действието не съществува",
"Renewing …" : "Подновяване …",
"Very weak password" : "Много проста парола",
"Weak password" : "Проста парола",
"So-so password" : "Не особено добра парола",
"Good password" : "Добра парола",
"Strong password" : "Сложна парола",
"The Base DN appears to be wrong" : "Базовото DN изглежда е грешно",
"Testing configuration…" : "Изпробване на конфигурацията...",
"Configuration incorrect" : "Конфигурацията е грешна",
"Configuration incomplete" : "Конфигурацията не е завършена",
"Configuration OK" : "Конфигурацията е ОК",
"Select groups" : "Избери Групи",
"Select object classes" : "Избери типове обекти",
"Please check the credentials, they seem to be wrong." : "Моля, проверете идентификационните данни, изглежда че са неправилни.",
"Please specify the port, it could not be auto-detected." : "Моля, посочете порт, той не може да бъде автоматично определен.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Базовото DN не може да бъде открито автоматично, моля, ревизирайте идентификационните данни, хоста и порта.",
"Could not detect Base DN, please enter it manually." : "Базовото DN не можа да бъде открито, моля, въведете го ръчно.",
"{nthServer}. Server" : "{nthServer}. Сървър",
"No object found in the given Base DN. Please revise." : "Няма намерен обект в даденото базово DN. Моля, ревизирайте.",
"More than 1,000 directory entries available." : "Налични са повече от 1000 записа в директорията.",
"_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} записи, налични в рамките на предоставеното базово DN","{objectsFound} записи, налични в рамките на предоставеното базово DN"],
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Възникна грешка. Моля, проверете базовото DN, както и настройките за връзка и идентификационни данни.",
"Do you really want to delete the current Server Configuration?" : "Наистина ли желаете текущата сървърна конфигурация да бъде изтрита?",
"Confirm Deletion" : "Потвърди Изтриването",
"Mappings cleared successfully!" : "Съпоставянията са изчистени успешно!",
"Error while clearing the mappings." : "Грешка при изчистването на съпоставянията.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Не е позволено анонимно обвързване. Моля, посочете потребителско DN и парола.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Грешка при LDAP операции. Анонимното обвързване може да не е разрешено.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Записването не беше успешно. Моля, уверете се, че базата данни е в експлоатация. Презаредете, преди да продължите.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Превключването на режима ще активира автоматичните LDAP заявки. В зависимост от размера на вашия LDAP може да отнеме известно време. Все още ли искате да превключите режима?",
"Mode switch" : "Превключване на режим",
"Select attributes" : "Избери атрибути",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Потребителят не е намерен. Моля, проверете вашите атрибути за вход и име на потребител. Ефективен филтър (за копиране и поставяне за проверка от командния ред):",
"User found and settings verified." : "Намерен е потребител и настройките са проверени.",
"Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Помислете за стесняване на търсенето, тъй като то обхваща много потребители, само първият от които ще може да влезе.",
"An unspecified error occurred. Please check log and settings." : "Възникна неуточнена грешка. Моля, проверете журнала и настройките.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Невалиден филтър за търсене, вероятно поради проблеми със синтаксиса като нечетен брой отворени и затворени скоби. Моля, проверете.",
"A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Възникна грешка при свързване към LDAP/AD. Моля, проверете хост сървър, порт и идентификационни данни.",
"The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заместителят „ %u“ липсва. Той ще бъде заменен с името за вход при запитване към LDAP/AD.",
"Please provide a login name to test against" : "Моля, посочете име за вход, срещу което да тествате",
"The group box was disabled, because the LDAP/AD server does not support memberOf." : "Груповата кутия е деактивирана, тъй като LDAP/AD сървърът не поддържа memberOf.",
"Password change rejected. Hint: " : "Смяната на паролата е отхвърлена. Подсказка:",
"Please login with the new password" : "Моля, влезте с новата парола",
"LDAP User backend" : "LDAP потребителски сървър",
"Your password will expire tomorrow." : "Вашата парола ще изтече утре.",
"Your password will expire today." : "Вашата парола ще изтече днес.",
"_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Вашата парола ще изтече в рамките на %n дни.","Вашата парола ще изтече в рамките на %n дни."],
"LDAP/AD integration" : "LDAP/AD интеграция",
"_%n group found_::_%n groups found_" : ["%n открити групи","%n открити групи"],
"> 1000 groups found" : "> 1000 открити групи",
"> 1000 users found" : "> 1000 намерени потребители",
"_%n user found_::_%n users found_" : ["%n намерени потребители","%n намерени потребители"],
"Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не можа да се открие атрибут за показвано име на потребителя. Моля, посочете го сами в разширените настройки на LDAP.",
"Could not find the desired feature" : "Не е открита желанта функция",
"Invalid Host" : "Невалиден хост",
"LDAP user and group backend" : "Потребителски и групов LDAP сървър",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Това приложение позволява на администраторите да свържат Nextcloud към потребителска директория, базирана на LDAP. ",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Това приложение позволява на администраторите да свържат Nextcloud към LDAP-базирана потребителска директория за удостоверяване и предоставяне на потребители, групи и потребителски атрибути. Администраторите могат да конфигурират това приложение да се свързва с една или повече LDAP директории или Active Directories/активни директории/, чрез LDAP интерфейс. Атрибути, като потребителска квота, имейл, снимки на аватар, членство в групи и други могат да бъдат изтеглени в Nextcloud от директория със съответните заявки и филтри.\n\nПотребителя влиза в Nextcloud със своите LDAP или AD идентификационни данни и му се предоставя достъп въз основа на заявка за удостоверяване, обработвана от LDAP или AD сървъра. Nextcloud не съхранява LDAP или AD пароли, а тези идентификационни данни се използват за удостоверяване на потребител и след това Nextcloud използва сесия за потребителския идентификатор. Повече информация е налична в документацията на LDAP потребител и групов сървър.",
"Test Configuration" : "Изпробване на конфигурацията",
"Help" : "Помощ",
"Groups meeting these criteria are available in %s:" : "Групи спазващи тези критерии са разположени в %s:",
"Only these object classes:" : "Само тези класове обекти:",
"Only from these groups:" : "Само от тези групи:",
"Search groups" : "Търсене на групи",
"Available groups" : "Налични групи",
"Selected groups" : "Избрани групи",
"Edit LDAP Query" : "Редактиране на LDAP заявка",
"LDAP Filter:" : "LDAP филтър:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Филтърът посочва кои LDAP групи ще имат достъп до %s инсталацията.",
"Verify settings and count the groups" : "Проверете настройките и пребройте групите",
"When logging in, %s will find the user based on the following attributes:" : "Когато влезе, %s ще намери потребител въз основа на следните атрибути:",
"LDAP/AD Username:" : "LDAP / AD Потребител:",
"Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Позволява влизане с име на потребител на LDAP/AD, което е или „uid“ или „sAMAccountName“ и ще бъде открито.",
"LDAP/AD Email Address:" : "LDAP / AD имейл адрес:",
"Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Позволява влизане срещу имейл атрибут. Разрешени са „mail “ и „mailPrimaryAddress“.",
"Other Attributes:" : "Други атрибути:",
"Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Определя филтър, който да се приложи при опит за влизане. „%%“ замества името на потребител в действието за влизане. Пример: „uid=%%uid “",
"Test Loginname" : "Проверка на Потребителско име",
"Attempts to receive a DN for the given loginname and the current login filter" : "Опити за получаване на DN за даденото име за влизане и текущия филтър за вход",
"Verify settings" : "Потвърди настройките",
"%s. Server:" : "%s. Сървър:",
"Add a new configuration" : "Добавяне на нова конфигурация",
"Copy current configuration into new directory binding" : "Копиране на текущата конфигурация в ново обвързване на директория",
"Delete the current configuration" : "Изтриване на текущата конфигурация",
"Host" : "Хост",
"You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Можете да пропуснете протокола, освен ако не изисквате SSL. Ако е така, започнете с ldaps://",
"Port" : "Порт",
"Detect Port" : "Открит Port",
"User DN" : "User 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 и Парола празни.",
"Save Credentials" : "Запиши идентификационни данни",
"One Base DN per line" : "По един Base DN на ред",
"You can specify Base DN for users and groups in the Advanced tab" : "Можете да настроите Base DN за отделни потребители/групи в раздела \"Допълнителни\"",
"Detect Base DN" : "Откриване на базов DN",
"Test Base DN" : " Тестване на базов DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избягва автоматични LDAP заявки. По-добра опция за големи инсталации, но изисква LDAP познания.",
"Manually enter LDAP filters (recommended for large directories)" : "Ръчно въвеждана на LDAP филтри(препоръчано за по-големи папки)",
"Listing and searching for users is constrained by these criteria:" : "Записването в списък и търсенето на потребители е ограничено от следните критерии:",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Най-често срещаните обектни класове за потребителите са OrganizationalPerson, person, user и inetOrgPerson. Ако не сте сигурни кой обектен клас да изберете, моля, консултирайте се с администратора на директорията.",
"The filter specifies which LDAP users shall have access to the %s instance." : "Филтърът посочва кои LDAP потребители ще имат достъп до %s инсталацията.",
"Verify settings and count users" : "Проверете настройките и пребройте потребителите",
"Saving" : "Записване",
"Back" : "Назад",
"Continue" : "Продължи",
"Please renew your password." : "Моля, обновете вашата парола.",
"An internal error occurred." : "Възникна вътрешно сървърна грешка.",
"Please try again or contact your administrator." : "Опитайте отново или се свържете с администраотра.",
"Current password" : "Текуща парола",
"New password" : "Нова парола",
"Renew password" : "Обновете парола",
"Wrong password." : "Грешна парола.",
"Cancel" : "Отказ",
"Server" : "Сървър",
"Users" : "Потребители",
"Login Attributes" : "Атрибути за влизане",
"Groups" : "Групи",
"Expert" : "Експерт",
"Advanced" : "Допълнителни",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Предупреждение:</b> PHP LDAP модулът не е инсталиран, сървърът няма да работи. Моля, поискай системният админстратор да го инсталира.",
"Connection Settings" : "Настройки на Връзката",
"Configuration Active" : "Конфигурацията е Активна",
"When unchecked, this configuration will be skipped." : "Когато не е отметнато, тази конфигурация ще бъде прескочена.",
"Backup (Replica) Host" : "Резервен (Реплика) Хост сървър",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Задай незадължителен резервен сървър. Трябва да бъде реплика на главния LDAP/AD сървър.",
"Backup (Replica) Port" : "Резервен (Реплика) Порт",
"Disable Main Server" : "Изключи Главиния Сървър",
"Only connect to the replica server." : "Свържи се само с репликирания сървър.",
"Turn off SSL certificate validation." : "Изключи валидацията на SSL сертификата.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Не е препоръчително! Ползвайте само за тестване. Ако връзката работи само с тази опция, внесете SSL сертификата на LDAP сървъра във вашия %s сървър.",
"Cache Time-To-Live" : "Кеширай Time-To-Live",
"in seconds. A change empties the cache." : "в секунди. Всяка промяна изтрива кеша.",
"Directory Settings" : "Настройки на Директорията",
"User Display Name Field" : "Поле на име за визуализация на потребител",
"The LDAP attribute to use to generate the user's display name." : "LDAP атрибутът, който да бъде използван за генериране на видимото име на потребителя.",
"2nd User Display Name Field" : "2-ро поле на име за визуализация на потребител",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "По избор. LDAP атрибут, който да се добави към екранното име в скоби. Резултати напр. »Джон Доу (john.doe@example.org)«.",
"Base User Tree" : "Base User Tree",
"One User Base DN per line" : "По един User Base DN на ред",
"User Search Attributes" : "Атрибути на Потребителско Търсене",
"Optional; one attribute per line" : "По желание; един атрибут на ред",
"Group Display Name Field" : "Поле на име за визуализация на група",
"The LDAP attribute to use to generate the groups's display name." : "LDAP атрибутът, който да бъде използван за генерирането на видмото име на групата.",
"Base Group Tree" : "Base Group Tree",
"One Group Base DN per line" : "По един Group Base DN на ред",
"Group Search Attributes" : "Атрибути на Групово Търсене",
"Group-Member association" : "Group-Member асоциация",
"Dynamic Group Member URL" : "URL адрес на член на динамичната група",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP е атрибутът, който на групови обекти съдържа URL адрес за търсене на LDAP, който определя, кои обекти принадлежат към групата. (Празна настройка деактивира функционалността за динамично членство в група.)",
"Nested Groups" : "Вложени Групи",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Когато е включени, се подържат групи в групи. (Работи единствено ако членът на групата притежава атрибута DNs).",
"Paging chunksize" : "Размер на paging-а",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Размерът използван за връщането на големи резултати от LDAP търсения като изброяване на потребители или групи. (Стойност 0 изключва paged LDAP търсения в тези ситуации).",
"Enable LDAP password changes per user" : "Активиране на промените на LDAP паролата на потребител",
"Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Позволете на потребителите на LDAP да променят паролата си и позволете на супер администраторите и груповите администратори да променят паролата на своите потребители на LDAP. Работи само когато политиките за контрол на достъпа са конфигурирани в съответствие на LDAP сървъра. Тъй като пароли се изпращат в обикновен текст към LDAP сървъра, трябва да се използва транспортно криптиране и да се конфигурира хеширането на паролата на LDAP сървъра.",
"(New password is sent as plain text to LDAP)" : "(Новата парола се изпраща като обикновен текст до LDAP)",
"Default password policy DN" : "Политика за парола по подразбиране на DN",
"The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN на политика за парола по подразбиране, която ще се използва за обработка на изтичане на паролата. Работи само когато промените на LDAP паролата на потребител са разрешени и се поддържа само от OpenLDAP. Оставете празно, за да деактивирате обработката на изтичане на паролата.",
"Special Attributes" : "Специални атрибути",
"Quota Field" : "Поле за Квота",
"Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Оставете празно за квота по подразбиране на потребителя. В противен случай посочете LDAP/AD атрибут.",
"Quota Default" : "Детайли на квотата",
"Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Отмяна на квотата по подразбиране за потребители на LDAP, които нямат зададена квота в полето за квота.",
"Email Field" : "Поле за имейл",
"Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Задайте имейла на потребителя от неговия LDAP атрибут. Оставете го празно за поведение по подразбиране.",
"User Home Folder Naming Rule" : "Правило за наименуване на домашна папка на потребителя",
"Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Оставете празно за име на потребител (по пдразбиране). Или посочете LDAP/AD атрибут.",
"\"$home\" Placeholder Field" : "„$home“ Заместващо поле",
"$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home в конфигурация за външно хранилище ще бъде заменен със стойността на посочения атрибут",
"User Profile Attributes" : "Атрибути на Потребителски Профил",
"Phone Field" : "Поле за Телефонен номер",
"User profile Phone will be set from the specified attribute" : "Телефонът на потребителския профил ще бъде зададен от определения атрибут",
"Website Field" : "Поле за Уеб сайт",
"User profile Website will be set from the specified attribute" : "Уеб сайтът на потребителския профил ще бъде зададен от определения атрибут",
"Address Field" : "Поле за Адрес",
"User profile Address will be set from the specified attribute" : "Адресът на потребителския профил ще бъде зададен от определения атрибут",
"Twitter Field" : "Twitter Поле",
"User profile Twitter will be set from the specified attribute" : "Потребителският профил вTwitter ще бъде зададен от определения атрибут",
"Fediverse Field" : "Fediverse Поле",
"User profile Fediverse will be set from the specified attribute" : "Потребителският профил във Fediverse ще бъде зададен от определения атрибут",
"Organisation Field" : "Поле за име на Организация",
"User profile Organisation will be set from the specified attribute" : "Организацията на потребителския профил ще бъде зададена от определения атрибут",
"Role Field" : "Поле за Роля",
"User profile Role will be set from the specified attribute" : "Ролята на потребителския профил ще бъде зададена от определения атрибут",
"Headline Field" : "Поле за Заглавие",
"User profile Headline will be set from the specified attribute" : "Заглавието на потребителския профил ще бъде зададено от определения атрибут",
"Biography Field" : "Поле за Биография",
"User profile Biography will be set from the specified attribute" : "Биографията на потребителския профил ще бъде зададена от определения атрибут",
"Internal Username" : "Вътрешно потребителско име",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "По подразбиране вътрешното име на потребител ще бъде създадено от атрибута UUID. Той гарантира, че името на потребител е уникално и знаците не трябва да се преобразуват. Вътрешното име на потребител има ограничението, че са позволени само тези знаци: [a-zA-Z0-9_.@-]. Други знаци се заменят с тяхното ASCII съответствие или просто се пропускат. При сблъсъци числото ще бъде добавено/увеличено. Вътрешното име на потребител се използва за вътрешно идентифициране на потребител. Това също е името по подразбиране за домашната папка на потребителя. Той също така е част от отдалечени URL адреси, например за всички *DAV услуги. С тази настройка поведението по подразбиране може да бъде отменено. Промените ще имат ефект само върху ново съпоставени (добавени) потребители на LDAP. Оставете го празно за поведение по подразбиране. ",
"Internal Username Attribute:" : "Атрибут на вътрешното потребителско име:",
"Override UUID detection" : "Промени UUID откриването",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Обикновено UUID атрибутът ще бъде намерен автоматично. UUID атрибута се използва, за да се идентифицират еднозначно LDAP потребители и групи. Освен това ще бъде генерирано вътрешното име базирано на UUID-то, ако такова не е посочено по-горе. Можете да промените настройката и да използвате атрибут по свой избор. Наложително е атрибутът да бъде уникален както за потребителите така и за групите. Промените ще се отразят само за новодобавени (map-нати) LDAP потребители.",
"UUID Attribute for Users:" : "UUID атрибут за потребителите:",
"UUID Attribute for Groups:" : "UUID атрибут за групите:",
"Username-LDAP User Mapping" : "Име на потребител-LDAP Потребителско съпоставяне ",
"Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Потребителските имена се използват за съхраняване и присвояване на метаданни. С цел точно идентифициране и разпознаване на потребителите, всеки потребител на LDAP ще има вътрешно име на потребител. Това изисква съпоставяне от име на потребител към потребител на LDAP. Създаденото име на потребител се съпоставя с UUID на потребителя на LDAP. Освен това DN се кешира, за да се намали взаимодействието с LDAP, но не се използва за идентификация. Ако DN се промени, промените ще бъдат намерени. Вътрешното име на потребител се използва навсякъде. Изчистването на съпоставянията ще има остатъци навсякъде. Изчистването на съпоставянията не е чувствително към конфигурацията, засяга всички LDAP конфигурации! Никога не изчиствайте съпоставянията в производствена среда, само в тестов или експериментален етап.",
"Clear Username-LDAP User Mapping" : "Изчистване на име на потребител-LDAP Потребителско съпоставяне ",
"Clear Groupname-LDAP Group Mapping" : "Изчистване на име на група-LDAP Потребителско съпоставяне ",
"Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Открит е невалиден UUID на потребители или групи на LDAP. Моля, прегледайте настройките си за \"Override UUID detection\"/ откриване на отмяна на UUID/, в експертната част на LDAP конфигурацията и използвайте \"occ ldap:update-uuid\", за да ги актуализирате."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+80
View File
@@ -0,0 +1,80 @@
OC.L10N.register(
"user_ldap",
{
"Failed to clear the mappings." : "মানচিত্রায়ন মুছতে ব্যার্থ হলো।",
"Failed to delete the server configuration" : "সার্ভার কনফিগারেশন মোছা ব্যার্থ হলো",
"The configuration is valid and the connection could be established!" : "কনফিগারেশনটি বৈধ এবং যোগাযোগ প্রতিষ্ঠা করা যায়!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "কনফিগারেশনটি বৈধ তবে Bind ব্যার্থ। দয়া করে সার্ভার নিয়ামকসমূহ এবং ব্যবহারকারী পরীক্ষা করুন।",
"The configuration is invalid. Please have a look at the logs for further details." : "কনফিহারেশনটি অবৈধ। বিস্তারিত জানতে দয়া করে লগ দেখুন।",
"No action specified" : "কোন কার্যাদেশ সুনির্দিষ্ট নয়",
"No configuration specified" : " কোন কনফিগারেসন সুনির্দিষ্ট নয়",
"No data specified" : "কোন ডাটা সুনির্দিষ্ট নয়",
" Could not set configuration %s" : "%s কনফিগারেসন ঠিক করা গেল না",
"Configuration incorrect" : "ভুল কনফিগারেসন",
"Configuration incomplete" : "অসম্পূর্ণ কনফিগারেসন",
"Configuration OK" : "কনফিগারেসন ঠিক আছে",
"Select groups" : "গ্রুপ নির্ধারণ",
"Select object classes" : "অবজেক্ট ক্লাস নির্ধারণ",
"{nthServer}. Server" : "{nthServer}. সার্ভার",
"Do you really want to delete the current Server Configuration?" : "আপনি কি সত্যিই চলতি সার্ভার কনফিগারেসন মুছতে চান?",
"Confirm Deletion" : "মোছার আদেশ নিশ্চিত করুন",
"Select attributes" : "বৈশিষ্ট্য নির্ধারণ",
"_%s group found_::_%s groups found_" : ["%s গ্রুপ পাওয়া গেছে","%s গ্রুপ পাওয়া গেছে"],
"_%s user found_::_%s users found_" : ["%s ব্যাবহারকারী পাওয়া গেছে","%s ব্যাবহারকারী পাওয়া গেছে"],
"Could not find the desired feature" : "চাহিদামাফিক ফিচারটি পাওয়া গেলনা",
"Invalid Host" : "অবৈধ হোস্ট",
"Server" : "সার্ভার",
"Users" : "ব্যবহারকারী",
"Groups" : "গোষ্ঠীসমূহ",
"Test Configuration" : "পরীক্ষামূলক কনফিগারেসন",
"Help" : "সহায়িকা",
"Groups meeting these criteria are available in %s:" : "প্রদত্ত বৈশিষ্ট্য অনুযায়ী %s এ প্রাপ্তব্য গ্রুপসমূহ:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "ফিল্টারটি %s সার্ভারে কোন কোন LDAP গ্রুপ প্রবেশাধিকার পাবে তা নির্ধারণ করে।",
"Other Attributes:" : "অন্যান্য বৈশিষ্ট্য:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "প্রবেশ প্রচেষ্টা নিলে প্রযোজ্য ফিল্টার নির্ধারণ করে। প্রবেশকালে %%uid ব্যাবহারকারীর নামকে প্রতিস্থাপন করে। ঊদাহরণ: \"uid=%%uid\"",
"1. Server" : "1. সার্ভার",
"%s. Server:" : "%s. সার্ভার:",
"Host" : "হোস্ট",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "SSL আবশ্যক না হলে আপনি এই প্রটোকলটি মুছে ফেলতে পারেন । এরপর শুরু করুন এটা দিয়ে ldaps://",
"Port" : "পোর্ট",
"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." : "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. পরিচয় গোপন রেখে অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।",
"Password" : "কূটশব্দ",
"For anonymous access, leave DN and Password empty." : "অজ্ঞাতকুলশীল অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।",
"One Base DN per line" : "লাইনপ্রতি একটি Base DN",
"You can specify Base DN for users and groups in the Advanced tab" : "সুচারু ট্যঅবে গিয়ে আপনি ব্যবহারকারি এবং গোষ্ঠীসমূহের জন্য ভিত্তি DN নির্ধারণ করতে পারেন।",
"The filter specifies which LDAP users shall have access to the %s instance." : "এই ফিল্টারটি কোন কোন LDAP ব্যবহারকারী %s সার্ভারে প্রবেশ করবেন তা বাছাই করে।",
"Back" : "পেছনে যাও",
"Continue" : "চালিয়ে যাও",
"Expert" : "দক্ষ",
"Advanced" : "সুচারু",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Warning:</b> Apps user_ldap and user_webdavauth কম্প্যাটিবল নয়। আপনি অবান্ছিত জটিলতার মুখোমুখি হতে পারেন। সিস্টেম প্রশাসককে যেকোন একটি অকার্যকর করে দিতে বলুন।",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warning:</b> PHP LDAP মডিউল ইনস্টল করা নেই, ব্যাকএন্ড কাজ করবেনা। সিস্টেম প্রশাসককে এটি ইনস্টল করতে বলুন।",
"Connection Settings" : "সংযোগ নিয়ামকসমূহ",
"Configuration Active" : "কনফিগারেসন সক্রিয়",
"When unchecked, this configuration will be skipped." : "চেকমার্ক তুলে দিলে কনফিগারেসন এড়িয়ে যাবে।",
"Backup (Replica) Host" : "ব্যাকআপ (নকল) হোস্ট",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "একটি ঐচ্ছিক ব্যাকআপ হোস্ট দিন। এটি মূল LDAP/AD সার্ভারের নকল হবে।",
"Backup (Replica) Port" : "ব্যাকআপ (নকল) পোর্ট",
"Disable Main Server" : "মূল সার্ভারকে অকার্যকর কর",
"Only connect to the replica server." : "শুধুমাত্র নকল সার্ভারে সংযোগ দাও।",
"Turn off SSL certificate validation." : "SSL সনদপত্র যাচাইকরণ বন্ধ রাক।",
"Cache Time-To-Live" : "ক্যাশে টাইম-টু-লিভ",
"in seconds. A change empties the cache." : "সেকেন্ডে। কোন পরিবর্তন ক্যাসে খালি করবে।",
"Directory Settings" : "ডিরেক্টরি নিয়ামকসমূহ",
"User Display Name Field" : "ব্যবহারকারীর প্রদর্শিতব্য নামের ক্ষেত্র",
"The LDAP attribute to use to generate the user's display name." : "ব্যবহারকারীর প্রদর্শনীয় নাম তৈরি করার জন্য ব্যবহৃত LDAP বৈশিষ্ট্য।",
"Base User Tree" : "ভিত্তি ব্যবহারকারি বৃক্ষাকারে",
"Group Display Name Field" : "গোষ্ঠীর প্রদর্শিতব্য নামের ক্ষেত্র",
"Base Group Tree" : "ভিত্তি গোষ্ঠী বৃক্ষাকারে",
"Group Search Attributes" : "গ্রুপ খোঁজার বৈশিষ্ট্য",
"Group-Member association" : "গোষ্ঠী-সদস্য সংস্থাপন",
"Nested Groups" : "একতাবদ্ধ গোষ্ঠিসমূহ",
"Special Attributes" : "বিশেষ বৈশিষ্ট্যসমূহ",
"Quota Field" : "কোটা",
"Quota Default" : "পূর্বনির্ধারিত কোটা",
"in bytes" : "বাইটে",
"Email Field" : "ইমেইল ক্ষেত্র",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "ব্যবহারকারী নামের জন্য ফাঁকা রাখুন (পূর্বনির্ধারিত)। অন্যথায়, LDAP/AD বৈশিষ্ট্য নির্ধারণ করুন।"
},
"nplurals=2; plural=(n != 1);");
@@ -0,0 +1,78 @@
{ "translations": {
"Failed to clear the mappings." : "মানচিত্রায়ন মুছতে ব্যার্থ হলো।",
"Failed to delete the server configuration" : "সার্ভার কনফিগারেশন মোছা ব্যার্থ হলো",
"The configuration is valid and the connection could be established!" : "কনফিগারেশনটি বৈধ এবং যোগাযোগ প্রতিষ্ঠা করা যায়!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "কনফিগারেশনটি বৈধ তবে Bind ব্যার্থ। দয়া করে সার্ভার নিয়ামকসমূহ এবং ব্যবহারকারী পরীক্ষা করুন।",
"The configuration is invalid. Please have a look at the logs for further details." : "কনফিহারেশনটি অবৈধ। বিস্তারিত জানতে দয়া করে লগ দেখুন।",
"No action specified" : "কোন কার্যাদেশ সুনির্দিষ্ট নয়",
"No configuration specified" : " কোন কনফিগারেসন সুনির্দিষ্ট নয়",
"No data specified" : "কোন ডাটা সুনির্দিষ্ট নয়",
" Could not set configuration %s" : "%s কনফিগারেসন ঠিক করা গেল না",
"Configuration incorrect" : "ভুল কনফিগারেসন",
"Configuration incomplete" : "অসম্পূর্ণ কনফিগারেসন",
"Configuration OK" : "কনফিগারেসন ঠিক আছে",
"Select groups" : "গ্রুপ নির্ধারণ",
"Select object classes" : "অবজেক্ট ক্লাস নির্ধারণ",
"{nthServer}. Server" : "{nthServer}. সার্ভার",
"Do you really want to delete the current Server Configuration?" : "আপনি কি সত্যিই চলতি সার্ভার কনফিগারেসন মুছতে চান?",
"Confirm Deletion" : "মোছার আদেশ নিশ্চিত করুন",
"Select attributes" : "বৈশিষ্ট্য নির্ধারণ",
"_%s group found_::_%s groups found_" : ["%s গ্রুপ পাওয়া গেছে","%s গ্রুপ পাওয়া গেছে"],
"_%s user found_::_%s users found_" : ["%s ব্যাবহারকারী পাওয়া গেছে","%s ব্যাবহারকারী পাওয়া গেছে"],
"Could not find the desired feature" : "চাহিদামাফিক ফিচারটি পাওয়া গেলনা",
"Invalid Host" : "অবৈধ হোস্ট",
"Server" : "সার্ভার",
"Users" : "ব্যবহারকারী",
"Groups" : "গোষ্ঠীসমূহ",
"Test Configuration" : "পরীক্ষামূলক কনফিগারেসন",
"Help" : "সহায়িকা",
"Groups meeting these criteria are available in %s:" : "প্রদত্ত বৈশিষ্ট্য অনুযায়ী %s এ প্রাপ্তব্য গ্রুপসমূহ:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "ফিল্টারটি %s সার্ভারে কোন কোন LDAP গ্রুপ প্রবেশাধিকার পাবে তা নির্ধারণ করে।",
"Other Attributes:" : "অন্যান্য বৈশিষ্ট্য:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "প্রবেশ প্রচেষ্টা নিলে প্রযোজ্য ফিল্টার নির্ধারণ করে। প্রবেশকালে %%uid ব্যাবহারকারীর নামকে প্রতিস্থাপন করে। ঊদাহরণ: \"uid=%%uid\"",
"1. Server" : "1. সার্ভার",
"%s. Server:" : "%s. সার্ভার:",
"Host" : "হোস্ট",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "SSL আবশ্যক না হলে আপনি এই প্রটোকলটি মুছে ফেলতে পারেন । এরপর শুরু করুন এটা দিয়ে ldaps://",
"Port" : "পোর্ট",
"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." : "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. পরিচয় গোপন রেখে অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।",
"Password" : "কূটশব্দ",
"For anonymous access, leave DN and Password empty." : "অজ্ঞাতকুলশীল অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।",
"One Base DN per line" : "লাইনপ্রতি একটি Base DN",
"You can specify Base DN for users and groups in the Advanced tab" : "সুচারু ট্যঅবে গিয়ে আপনি ব্যবহারকারি এবং গোষ্ঠীসমূহের জন্য ভিত্তি DN নির্ধারণ করতে পারেন।",
"The filter specifies which LDAP users shall have access to the %s instance." : "এই ফিল্টারটি কোন কোন LDAP ব্যবহারকারী %s সার্ভারে প্রবেশ করবেন তা বাছাই করে।",
"Back" : "পেছনে যাও",
"Continue" : "চালিয়ে যাও",
"Expert" : "দক্ষ",
"Advanced" : "সুচারু",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Warning:</b> Apps user_ldap and user_webdavauth কম্প্যাটিবল নয়। আপনি অবান্ছিত জটিলতার মুখোমুখি হতে পারেন। সিস্টেম প্রশাসককে যেকোন একটি অকার্যকর করে দিতে বলুন।",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warning:</b> PHP LDAP মডিউল ইনস্টল করা নেই, ব্যাকএন্ড কাজ করবেনা। সিস্টেম প্রশাসককে এটি ইনস্টল করতে বলুন।",
"Connection Settings" : "সংযোগ নিয়ামকসমূহ",
"Configuration Active" : "কনফিগারেসন সক্রিয়",
"When unchecked, this configuration will be skipped." : "চেকমার্ক তুলে দিলে কনফিগারেসন এড়িয়ে যাবে।",
"Backup (Replica) Host" : "ব্যাকআপ (নকল) হোস্ট",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "একটি ঐচ্ছিক ব্যাকআপ হোস্ট দিন। এটি মূল LDAP/AD সার্ভারের নকল হবে।",
"Backup (Replica) Port" : "ব্যাকআপ (নকল) পোর্ট",
"Disable Main Server" : "মূল সার্ভারকে অকার্যকর কর",
"Only connect to the replica server." : "শুধুমাত্র নকল সার্ভারে সংযোগ দাও।",
"Turn off SSL certificate validation." : "SSL সনদপত্র যাচাইকরণ বন্ধ রাক।",
"Cache Time-To-Live" : "ক্যাশে টাইম-টু-লিভ",
"in seconds. A change empties the cache." : "সেকেন্ডে। কোন পরিবর্তন ক্যাসে খালি করবে।",
"Directory Settings" : "ডিরেক্টরি নিয়ামকসমূহ",
"User Display Name Field" : "ব্যবহারকারীর প্রদর্শিতব্য নামের ক্ষেত্র",
"The LDAP attribute to use to generate the user's display name." : "ব্যবহারকারীর প্রদর্শনীয় নাম তৈরি করার জন্য ব্যবহৃত LDAP বৈশিষ্ট্য।",
"Base User Tree" : "ভিত্তি ব্যবহারকারি বৃক্ষাকারে",
"Group Display Name Field" : "গোষ্ঠীর প্রদর্শিতব্য নামের ক্ষেত্র",
"Base Group Tree" : "ভিত্তি গোষ্ঠী বৃক্ষাকারে",
"Group Search Attributes" : "গ্রুপ খোঁজার বৈশিষ্ট্য",
"Group-Member association" : "গোষ্ঠী-সদস্য সংস্থাপন",
"Nested Groups" : "একতাবদ্ধ গোষ্ঠিসমূহ",
"Special Attributes" : "বিশেষ বৈশিষ্ট্যসমূহ",
"Quota Field" : "কোটা",
"Quota Default" : "পূর্বনির্ধারিত কোটা",
"in bytes" : "বাইটে",
"Email Field" : "ইমেইল ক্ষেত্র",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "ব্যবহারকারী নামের জন্য ফাঁকা রাখুন (পূর্বনির্ধারিত)। অন্যথায়, LDAP/AD বৈশিষ্ট্য নির্ধারণ করুন।"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+12
View File
@@ -0,0 +1,12 @@
OC.L10N.register(
"user_ldap",
{
"Users" : "Korisnici",
"Groups" : "Grupe",
"Help" : "Pomoć",
"Port" : "Priključak",
"Password" : "Lozinka",
"Continue" : "Nastavi",
"Advanced" : "Napredno"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
+10
View File
@@ -0,0 +1,10 @@
{ "translations": {
"Users" : "Korisnici",
"Groups" : "Grupe",
"Help" : "Pomoć",
"Port" : "Priključak",
"Password" : "Lozinka",
"Continue" : "Nastavi",
"Advanced" : "Napredno"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
}
+222
View File
@@ -0,0 +1,222 @@
OC.L10N.register(
"user_ldap",
{
"Failed to clear the mappings." : "No shan pogut netejar les assignacions.",
"Failed to delete the server configuration" : "No s'han pogut suprimir la configuració del servidor",
"Invalid configuration: Anonymous binding is not allowed." : "Configuració no vàlida: no es permet l'enllaç anònim.",
"Valid configuration, connection established!" : "Configuració vàlida, connexió establerta!",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuració vàlida, però no s'ha pogut enllaçar. Comproveu els paràmetres del servidor i les credencials.",
"Invalid configuration. Please have a look at the logs for further details." : "Configuració no vàlida. Feu un cop d'ull als registres per obtenir més informació.",
"No action specified" : "No heu especificat cap acció",
"No configuration specified" : "No heu especificat cap configuració",
"No data specified" : "No heu especificat cap dada",
"Invalid data specified" : "Les dades especificades no són vàlides",
" Could not set configuration %s" : " No s'ha pogut establir la configuració %s",
"Action does not exist" : "L'acció no existeix",
"Renewing …" : "Renovant …",
"Very weak password" : "Contrasenya massa feble",
"Weak password" : "Contrasenya feble",
"So-so password" : "Contrasenya passable",
"Good password" : "Contrasenya bona",
"Strong password" : "Contrasenya forta",
"The Base DN appears to be wrong" : "El DN de base sembla estar equivocat",
"Testing configuration…" : "Probant configuració…",
"Configuration incorrect" : "Configuració incorrecte",
"Configuration incomplete" : "Configuració incompleta",
"Configuration OK" : "Configuració correcte",
"Select groups" : "Selecciona els grups",
"Select object classes" : "Seleccioneu les classes dels objectes",
"Please check the credentials, they seem to be wrong." : "Comproveu les credencials, semblen estar equivocades.",
"Please specify the port, it could not be auto-detected." : "Especifiqueu el port, no s'ha pogut detectar automàticament.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN no es pot detectar automàticament, reviseu les credencials, el servidor i el port.",
"Could not detect Base DN, please enter it manually." : "No s'ha pogut detectar Base DN, introduïu-lo manualment.",
"{nthServer}. Server" : "{nthServer}. Servidor",
"No object found in the given Base DN. Please revise." : "No s'ha trobat cap objecte a la Base DN donada. Reviseu.",
"More than 1,000 directory entries available." : "Hi ha més de 1.000 entrades de directori disponibles.",
"_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["Hi ha {objectsFound} entrades disponibles al DN de base proporcionat","Hi ha {objectsFound} entrades disponibles al DN de base proporcionat"],
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hi ha hagut un error. Comproveu la base DN, així com la paràmetres de connexió i les credencials.",
"Do you really want to delete the current Server Configuration?" : "Segur que voleu suprimir la Configuració actual del Servidor?",
"Confirm Deletion" : "Confirma l'eliminació",
"Mappings cleared successfully!" : "S'han netejat les assignacions amb èxit!",
"Error while clearing the mappings." : "S'ha produït un error en eliminar les assignacions.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "L'enllaç anònim no està permès. Proporcioneu un DN d'usuari i contrasenya.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Error d'operacions LDAP. L'enllaç anònim no es pot permetre.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "S'ha produït un error en desar. Assegureu-vos que la base de dades està en Operació. Torneu a carregar abans de continuar.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Si canvieu el mode, habilitareu les consultes LDAP automàtiques. Depenent de la vostra mida LDAP, poden trigar una estona. Voleu canviar el mode?",
"Mode switch" : "Canvia el mode",
"Select attributes" : "Seleccioneu els atributs",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuari no trobat. Comproveu els vostres atributs d'inici de sessió i el vostre nom d'usuari. Filtre eficaç (per copiar i enganxar per a la validació de la línia de comandaments):<br/>",
"User found and settings verified." : "S'ha trobat l'usuari i s'han verificat els paràmetres.",
"Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Penseu a reduir la vostra cerca, ja que ha inclòs molts usuaris, només el primer dels quals podrà iniciar sessió.",
"An unspecified error occurred. Please check log and settings." : "S'ha produït un error no especificat. Verifiqueu el registre i els paràmetres.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtre de cerca no és vàlid, probablement a causa de problemes de sintaxi com el nombre impar de parèntesis oberts i tancats. Reviseu.",
"A connection error to LDAP/AD occurred. Please check host, port and credentials." : "S'ha produït un error de connexió a LDAP/AD. Comproveu el servidor, el port i les credencials.",
"The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posició \"%uid\". Se substituirà pel nom d'inici de sessió en consultar LDAP/AD.",
"Please provide a login name to test against" : "Proporcioneu un nom d'inici de sessió per provar-ho",
"The group box was disabled, because the LDAP/AD server does not support memberOf." : "El quadre de grup s'ha desactivat perquè el servidor LDAP/AD no admet memberOf.",
"Password change rejected. Hint: " : "El canvi de contrasenya s'ha rebutjat. Pista: ",
"Please login with the new password" : "Inicieu sessió amb la nova contrasenya",
"LDAP User backend" : "Rerefons d'usuari LDAP",
"Your password will expire tomorrow." : "La contrasenya caducarà demà.",
"Your password will expire today." : "La contrasenya caducarà avui.",
"_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La vostra contrasenya expirarà en %n dies.","La vostra contrasenya caducarà d'aquí %n dies."],
"LDAP/AD integration" : "Integració LDAP/AD",
"Invalid LDAP UUIDs" : "UUID no vàlid",
"None found" : "No s'ha trobat cap",
"_%n group found_::_%n groups found_" : ["S'ha trobat %n grup","Shan trobat %n grups"],
"> 1000 groups found" : "> 1000 grups trobats",
"> 1000 users found" : "> 1000 usuaris trobats",
"_%n user found_::_%n users found_" : ["S'ha trobat %n usuari","Shan trobat %n usuaris"],
"Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No s'ha pogut detectar l'atribut del nom de visualització de l'usuari. Si us plau, especifiqueu-vos als paràmetres de LDAP avançats.",
"Could not find the desired feature" : "La característica desitjada no s'ha trobat",
"Invalid Host" : "Servidor no vàlid",
"LDAP user and group backend" : "Usuari LDAP i grup de rerefons",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Aquesta aplicació permet als administradors connectar Nextcloud a un directori d'usuari basat en LDAP.",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aquest aplicació permet als administradors connectar Nextcloud a un directori LDAP per autenticació i subministrament d'usuaris, grups i atributs d'usuari. Els administradors poden configurar aquesta aplicació per connectar a un o més directoris LDAP o ActiveDirectories (AD) a través de la interfície LDAP. Amb les consultes i filtres adequats es poden extreure i importar a Nextcloud atributs d'usuari com la quota, adreça de correu, avatar, pertinença a grups i més.\n\nUn usuari accedeix a Nextcloud amb les seves credencials LDAP o AD, i rep accés gràcies a l'autenticació gestionada pel servidor LDAP / AD. Nextcloud en cap moment emmagatzema la contrasenya LDAP o AD, ans al contrari, un cop l'usuari s'ha identificat correctament Nextcloud emprarà variables de sessió per desar només el ID de l'usuari. Podeu trobar més informació a la documentació sobre gestió d'usuaris i grups LDAP.",
"Test Configuration" : "Comprovació de la configuració",
"Help" : "Ajuda",
"Groups meeting these criteria are available in %s:" : "Els grups que compleixen aquests criteris estan disponibles a %s:",
"Only these object classes:" : "Només aquestes classes d'objectes:",
"Only from these groups:" : "Només d'aquests grups:",
"Search groups" : "Buscar grups",
"Available groups" : "Grups disponibles",
"Selected groups" : "Grups seleccionats",
"Edit LDAP Query" : "Edició de la consulta LDAP",
"LDAP Filter:" : "Filtre LDAP:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "El filtre especifica quins grups LDAP haurien de tenir accés a la instància %s.",
"Verify settings and count the groups" : "Comprova els paràmetres i compta els grups",
"When logging in, %s will find the user based on the following attributes:" : "Quan s'accedeixi, %s trobarà l'usuari segons aquests atributs:",
"LDAP/AD Username:" : "Nom d'usuari LDAP/AD:",
"Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permet inici de sessió amb el nom d'usuari LDAP/AD, que és \"uid\" o \"sAMAccountName\" i es detectarà.",
"LDAP/AD Email Address:" : "Adreça de correu electrònic LDAP/AD:",
"Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permet l'inici de sessió emprant l'atribut adreça de correu. S'accepten \"mail\" i \"mailPrimaryAddress\" .",
"Other Attributes:" : "Altres atributs:",
"Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Defineix el filtre a aplicar quan s'inicia sessió. \"%%uid\" reemplaça el nom d'usuari en l'acció d'identificar-se. Exemple \"uid=%%uid\"",
"Test Loginname" : "Nom d'usuari de prova",
"Attempts to receive a DN for the given loginname and the current login filter" : "Intenta rebre un DN per al nom d'inici de sessió donat i el filtre d'inici de sessió actual",
"Verify settings" : "Comprova els paràmetres",
"%s. Server:" : "%s. Servidor:",
"Add a new configuration" : "Afegeix una nova configuració",
"Copy current configuration into new directory binding" : "Copia l'actual configuració en la nova connexió al directori",
"Delete the current configuration" : "Suprimeix la configuració actual",
"Host" : "Servidor",
"You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Podeu ometre el protocol, si no requeriu SSL. Si ho requeriu llavors comenceu amb ldaps://",
"Port" : "Port",
"Detect Port" : "Detecta port",
"User DN" : "DN Usuari",
"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." : "La DN de l'usuari client amb la que s'haurà de fer, per exemple uid=agent,dc=exemple,dc=com. Per un accés anònim, deixeu la DN i la contrasenya en blanc.",
"Password" : "Contrasenya",
"For anonymous access, leave DN and Password empty." : "Per un accés anònim, deixeu la DN i la contrasenya en blanc.",
"Save Credentials" : "Desa credencials",
"One Base DN per line" : "Una DN Base per línia",
"You can specify Base DN for users and groups in the Advanced tab" : "Podeu especificar DN Base per usuaris i grups a la pestanya Avançat",
"Detect Base DN" : "Detecta el DN de base",
"Test Base DN" : "Prova el DN de base",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticions LDAP automàtiques. És millor per configuracions grans, però requereix tenir certs coneixements de LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Introducció manual de filtres LDAP (recomanat per a directoris grans)",
"Listing and searching for users is constrained by these criteria:" : "Llistat i cerca per part dels usuaris és restringida pels següents criteris:",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Las classes d'objectes més comunes pels usuaris són organizationalPerson, person, user, i inetOrgPerson. Si no esteu segurs de quina classe d'objecte escollir llavors consulteu el vostre administrador de directori.",
"The filter specifies which LDAP users shall have access to the %s instance." : "El filtre especifica quins usuaris LDAP haurien de tenir accés a la instància %s.",
"Verify settings and count users" : "Verifica paràmetres i compta usuaris",
"Saving" : "S'està desant",
"Back" : "Enrere",
"Continue" : "Continua",
"Please renew your password." : "Heu de renovar la vostra contrasenya.",
"An internal error occurred." : "Hi ha hagut un error intern inesperat.",
"Please try again or contact your administrator." : "Torneu-ho a provar o contacteu al vostre administrador.",
"Current password" : "Contrasenya actual",
"New password" : "Nova contrasenya",
"Renew password" : "Renova la contrasenya",
"Wrong password." : "Contrasenya incorrecta.",
"Cancel" : "Cancel·la",
"Server" : "Servidor",
"Users" : "Usuaris",
"Login Attributes" : "Atributs d'inici de sessió",
"Groups" : "Grups",
"Expert" : "Expert",
"Advanced" : "Avançat",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Avís:</b> El mòdul PHP LDAP no està instal·lat, el rerefons no funcionarà. Demaneu a l'administrador del sistema que l'instal·li.",
"Connection Settings" : "Paràmetres de connexió",
"Configuration Active" : "Configuració activa",
"When unchecked, this configuration will be skipped." : "Si està desmarcat, aquesta configuració s'ometrà.",
"Backup (Replica) Host" : "Servidor de còpia de seguretat (rèplica)",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Afegiu una màquina de còpia de seguretat opcional. Ha de ser una rèplica del servidor LDAP/AD principal.",
"Backup (Replica) Port" : "Port de la còpia de seguretat (rèplica)",
"Disable Main Server" : "Inhabilita el servidor principal",
"Only connect to the replica server." : "Connecta només al servidor rèplica.",
"Turn off SSL certificate validation." : "Desactiva la validació de certificat SSL.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "No es recomana, useu-ho només com a prova! Importeu el certificat SSL del servidor LDAP al servidor %s només si la connexió funciona amb aquesta opció.",
"Cache Time-To-Live" : "Memòria cau Time-To-Live",
"in seconds. A change empties the cache." : "en segons. Un canvi buidarà la memòria cau.",
"Directory Settings" : "Paràmetres de carpetes",
"User Display Name Field" : "Camp per mostrar el nom d'usuari",
"The LDAP attribute to use to generate the user's display name." : "Atribut LDAP a usar per generar el nom a mostrar de l'usuari.",
"2nd User Display Name Field" : "Camp del 2n nom d'usuari a mostrar",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atribut LDAP per ser afegit al nom a mostrar entre parèntesis. Esdevé en quelcom així: »Oriol Mas (oriol.mas@exemple.cat)«.",
"Base User Tree" : "Arbre base d'usuaris",
"One User Base DN per line" : "Una DN Base d'Usuari per línia",
"User Search Attributes" : "Atributs de cerca d'usuari",
"Optional; one attribute per line" : "Opcional; Un atribut per línia",
"Disable users missing from LDAP" : "Inhabilita els usuaris que falten a LDAP",
"When switched on, users imported from LDAP which are then missing will be disabled" : "Quan estigui activat, es desactivaran els usuaris importats des de LDAP que després faltin",
"Group Display Name Field" : "Camp per mostrar el nom del grup",
"The LDAP attribute to use to generate the groups's display name." : "Atribut LDAP a usar per generar el nom a mostrar del grup.",
"Base Group Tree" : "Arbre base de grups",
"One Group Base DN per line" : "Una DN Base de Grup per línia",
"Group Search Attributes" : "Atributs de cerca de grup",
"Group-Member association" : "Associació membres-grup",
"Dynamic Group Member URL" : "URL del Membre de Grup Dinàmic",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atribut LDAP que en objectes de Grup conté un URL de cerca LDAP que determina quins objectes pertanyen al grup. (Si es deixa el paràmetre en blanc es desactiva la funcionalitat de pertinença dinàmica a grups)",
"Nested Groups" : "Grups imbricats",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Quan està activat, els grups que contenen grups estan permesos. (Només funciona si l'atribut del grup membre conté DNs.)",
"Paging chunksize" : "Mida de la pàgina",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Mida usada per cerques LDAP paginades que podrien retornar respostes de volcat com enumeració d'usuari o grup. (Establint-ho a 0 desactiva les cerques LDAP paginades en aquestes situacions.)",
"Enable LDAP password changes per user" : "Habilita el canvi de contrasenya LDAP pels usuaris",
"Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permet als usuaris LDAP canviar la seva contrasenya i permet als Súper administradors i Administradors de grup canviar les contrasenyes dels seus usuaris LDAP. Només funciona quan les polítiques del control d'accés es configuren de igual manera al servidor LDAP. Com les contrasenyes s'envien en text pla (no xifrat) al servidor LDAP, s'ha d'usar transport xifrat i s'hauria de configurar el servidor LDAP per usar resum de contrasenyes (\"hashing\").",
"(New password is sent as plain text to LDAP)" : "(La nova contrasenya s'envia com a text pla al servidor LDAP)",
"Default password policy DN" : "DN de la política de contrasenya per defecte",
"The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN d'una política de contrasenya predeterminada que serà emprada per a la gestió de la caducitat de contrasenyes. Només funciona quan està habilitat el canvi de contrasenyes per part dels usuaris i només és compatible amb OpenLDAP. Deixeu buit aquest camp per desactivar aquesta gestió de contrasenyes caducades.",
"Special Attributes" : "Atributs especials",
"Quota Field" : "Camp de quota",
"Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixeu buit per usar la quota per defecte pels usuaris, O si no, indiqueu un atribut LDAP/AD.",
"Quota Default" : "Quota per defecte",
"Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobreescriu la quota per defecte pels usuaris LDAP que no tenen una quota establerta en el camp Quota.",
"Email Field" : "Camp de correu electrònic",
"Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Estableix l'adreça de correu a partir del seu atribut LDAP. Deixeu buit pel comportament predeterminat.",
"User Home Folder Naming Rule" : "Norma per anomenar la carpeta arrel d'usuari",
"Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixar buit pel nom d'usuari (per defecte). Altrament, especificar un atribut LDAP/AD.",
"\"$home\" Placeholder Field" : "Camp de marcador de posició \"$home\"",
"$home in an external storage configuration will be replaced with the value of the specified attribute" : "En la configuració d'un emmagatzematge extern es reemplaçarà $home amb el valor de l'atribut especificat",
"User Profile Attributes" : "Atributs del perfil d'usuari",
"Phone Field" : "Camp de telèfon",
"User profile Phone will be set from the specified attribute" : "Perfil d'usuari El telèfon s'establirà a partir de l'atribut especificat",
"Website Field" : "Camp del lloc web",
"User profile Website will be set from the specified attribute" : "Perfil d'usuari Lloc web s'establirà a partir de l'atribut especificat",
"Address Field" : "Camp dadreça",
"User profile Address will be set from the specified attribute" : "Perfil d'usuari L'adreça s'establirà a partir de l'atribut especificat",
"Twitter Field" : "Camp de Twitter",
"User profile Twitter will be set from the specified attribute" : "El perfil d'usuari de Twitter s'establirà a partir de l'atribut especificat",
"Fediverse Field" : "Camp Fediverse",
"User profile Fediverse will be set from the specified attribute" : "El perfil d'usuari Fediverse s'establirà a partir de l'atribut especificat",
"Organisation Field" : "Camp de l'organització",
"User profile Organisation will be set from the specified attribute" : "Organització del Perfil d'usuari s'establirà a partir de l'atribut especificat",
"Role Field" : "Camp de rol",
"User profile Role will be set from the specified attribute" : "El rol del perfil d'usuari s'establirà a partir de l'atribut especificat",
"Headline Field" : "Camp de titular",
"User profile Headline will be set from the specified attribute" : "El títol del perfil d'usuari s'establirà a partir de l'atribut especificat",
"Biography Field" : "Camp de Biografia",
"User profile Biography will be set from the specified attribute" : "La biografia del perfil d'usuari s'establirà a partir de l'atribut especificat",
"Internal Username" : "Nom d'usuari intern",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Per defecte, el nom d'usuari intern es crearà a partir de l'atribut UUID. S'assegura que el nom d'usuari és únic i que els caràcters no s'han de convertir. El nom d'usuari intern té la restricció que només es permeten aquests caràcters: [a-zA-Z0-9_.@-]. Altres caràcters es substitueixen per la seva correspondència ASCII o simplement s'ometen. En les col·lisions, s'afegirà/augmentarà un nombre. El nom d'usuari intern s'utilitza per identificar un usuari internament. També és el nom per defecte de la carpeta d'inici de l'usuari. També forma part dels URL remots, per exemple, per a tots els serveis DAV. Amb aquest paràmetre, es pot anul·lar el comportament per defecte. Els canvis només tindran efecte en els usuaris LDAP (afegits) recentment assignats. Deixeu-lo buit per al comportament per defecte.",
"Internal Username Attribute:" : "Atribut nom d'usuari intern:",
"Override UUID detection" : "Sobrescriu la detecció UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Per defecte, owncloud autodetecta l'atribut UUID. L'atribut UUID s'utilitza per identificar usuaris i grups automàticament. També el nom d'usuari intern es crearà en base a la UUID, si no heu especificat res diferent a dalt. Podeu sobreescriure el paràmetre i passar l'atribut que desitgeu. Heu d'assegurar-vos que l'atribut que escolliu pot ser recollit tant pels usuaris com pels grups i que és únic. Deixeu-ho en blanc si preferiu el comportament per defecte. els canvis s'aplicaran als usuaris i grups LDAP mapats de nou (afegits).",
"UUID Attribute for Users:" : "Atribut UUID per Usuaris:",
"UUID Attribute for Groups:" : "Atribut UUID per Grups:",
"Username-LDAP User Mapping" : "Mapatge d'usuari Nom d'usuari-LDAP",
"Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Els noms d'usuari son emprats per emmagatzemar i assignar metadades. Per tal d'identificar i reconèixer amb precisió als usuaris, cada usuari LDAP té un nom d'usuari intern. Això requereix una assignació de noms d'usuari interns per a cada un dels usuaris LDAP. Al nom d'usuari creat s'assigna el UUID de l'usuari LDAP. A més el DN es guarda en memòria cau per a reduir la interacció amb LDAP, però no s'utilitza per a identificació. Si el DN canvia, es trobaran els canvis. El nom d'usuari intern s'utilitza arreu. Netejar el mapa d'assignacions deixaria restes per totes bandes. Netejar el mapa d'assignacions no és que sigui sensible a la configuració, sinó que afecta a totes les configuracions LDAP! Mai netegeu el mapa d'assignacions en un entorn de producció, només en escenaris de proves o experimentals.",
"Clear Username-LDAP User Mapping" : "Elimina el mapatge d'usuari Nom d'usuari-LDAP",
"Clear Groupname-LDAP Group Mapping" : "Suprimeix el mapatge de grup Nom de grup-LDAP",
"Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "S'han trobat UUID no vàlids d'usuaris o grups LDAP. Reviseu els paràmetres de l'\"Anul·lació de detecció d'UUID\" a la part Experta de la configuració LDAP i utilitzeu \"occ ldap:update-uuid\" per actualitzar-los."
},
"nplurals=2; plural=(n != 1);");
+220
View File
@@ -0,0 +1,220 @@
{ "translations": {
"Failed to clear the mappings." : "No shan pogut netejar les assignacions.",
"Failed to delete the server configuration" : "No s'han pogut suprimir la configuració del servidor",
"Invalid configuration: Anonymous binding is not allowed." : "Configuració no vàlida: no es permet l'enllaç anònim.",
"Valid configuration, connection established!" : "Configuració vàlida, connexió establerta!",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuració vàlida, però no s'ha pogut enllaçar. Comproveu els paràmetres del servidor i les credencials.",
"Invalid configuration. Please have a look at the logs for further details." : "Configuració no vàlida. Feu un cop d'ull als registres per obtenir més informació.",
"No action specified" : "No heu especificat cap acció",
"No configuration specified" : "No heu especificat cap configuració",
"No data specified" : "No heu especificat cap dada",
"Invalid data specified" : "Les dades especificades no són vàlides",
" Could not set configuration %s" : " No s'ha pogut establir la configuració %s",
"Action does not exist" : "L'acció no existeix",
"Renewing …" : "Renovant …",
"Very weak password" : "Contrasenya massa feble",
"Weak password" : "Contrasenya feble",
"So-so password" : "Contrasenya passable",
"Good password" : "Contrasenya bona",
"Strong password" : "Contrasenya forta",
"The Base DN appears to be wrong" : "El DN de base sembla estar equivocat",
"Testing configuration…" : "Probant configuració…",
"Configuration incorrect" : "Configuració incorrecte",
"Configuration incomplete" : "Configuració incompleta",
"Configuration OK" : "Configuració correcte",
"Select groups" : "Selecciona els grups",
"Select object classes" : "Seleccioneu les classes dels objectes",
"Please check the credentials, they seem to be wrong." : "Comproveu les credencials, semblen estar equivocades.",
"Please specify the port, it could not be auto-detected." : "Especifiqueu el port, no s'ha pogut detectar automàticament.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN no es pot detectar automàticament, reviseu les credencials, el servidor i el port.",
"Could not detect Base DN, please enter it manually." : "No s'ha pogut detectar Base DN, introduïu-lo manualment.",
"{nthServer}. Server" : "{nthServer}. Servidor",
"No object found in the given Base DN. Please revise." : "No s'ha trobat cap objecte a la Base DN donada. Reviseu.",
"More than 1,000 directory entries available." : "Hi ha més de 1.000 entrades de directori disponibles.",
"_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["Hi ha {objectsFound} entrades disponibles al DN de base proporcionat","Hi ha {objectsFound} entrades disponibles al DN de base proporcionat"],
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hi ha hagut un error. Comproveu la base DN, així com la paràmetres de connexió i les credencials.",
"Do you really want to delete the current Server Configuration?" : "Segur que voleu suprimir la Configuració actual del Servidor?",
"Confirm Deletion" : "Confirma l'eliminació",
"Mappings cleared successfully!" : "S'han netejat les assignacions amb èxit!",
"Error while clearing the mappings." : "S'ha produït un error en eliminar les assignacions.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "L'enllaç anònim no està permès. Proporcioneu un DN d'usuari i contrasenya.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Error d'operacions LDAP. L'enllaç anònim no es pot permetre.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "S'ha produït un error en desar. Assegureu-vos que la base de dades està en Operació. Torneu a carregar abans de continuar.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Si canvieu el mode, habilitareu les consultes LDAP automàtiques. Depenent de la vostra mida LDAP, poden trigar una estona. Voleu canviar el mode?",
"Mode switch" : "Canvia el mode",
"Select attributes" : "Seleccioneu els atributs",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuari no trobat. Comproveu els vostres atributs d'inici de sessió i el vostre nom d'usuari. Filtre eficaç (per copiar i enganxar per a la validació de la línia de comandaments):<br/>",
"User found and settings verified." : "S'ha trobat l'usuari i s'han verificat els paràmetres.",
"Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Penseu a reduir la vostra cerca, ja que ha inclòs molts usuaris, només el primer dels quals podrà iniciar sessió.",
"An unspecified error occurred. Please check log and settings." : "S'ha produït un error no especificat. Verifiqueu el registre i els paràmetres.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtre de cerca no és vàlid, probablement a causa de problemes de sintaxi com el nombre impar de parèntesis oberts i tancats. Reviseu.",
"A connection error to LDAP/AD occurred. Please check host, port and credentials." : "S'ha produït un error de connexió a LDAP/AD. Comproveu el servidor, el port i les credencials.",
"The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posició \"%uid\". Se substituirà pel nom d'inici de sessió en consultar LDAP/AD.",
"Please provide a login name to test against" : "Proporcioneu un nom d'inici de sessió per provar-ho",
"The group box was disabled, because the LDAP/AD server does not support memberOf." : "El quadre de grup s'ha desactivat perquè el servidor LDAP/AD no admet memberOf.",
"Password change rejected. Hint: " : "El canvi de contrasenya s'ha rebutjat. Pista: ",
"Please login with the new password" : "Inicieu sessió amb la nova contrasenya",
"LDAP User backend" : "Rerefons d'usuari LDAP",
"Your password will expire tomorrow." : "La contrasenya caducarà demà.",
"Your password will expire today." : "La contrasenya caducarà avui.",
"_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La vostra contrasenya expirarà en %n dies.","La vostra contrasenya caducarà d'aquí %n dies."],
"LDAP/AD integration" : "Integració LDAP/AD",
"Invalid LDAP UUIDs" : "UUID no vàlid",
"None found" : "No s'ha trobat cap",
"_%n group found_::_%n groups found_" : ["S'ha trobat %n grup","Shan trobat %n grups"],
"> 1000 groups found" : "> 1000 grups trobats",
"> 1000 users found" : "> 1000 usuaris trobats",
"_%n user found_::_%n users found_" : ["S'ha trobat %n usuari","Shan trobat %n usuaris"],
"Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No s'ha pogut detectar l'atribut del nom de visualització de l'usuari. Si us plau, especifiqueu-vos als paràmetres de LDAP avançats.",
"Could not find the desired feature" : "La característica desitjada no s'ha trobat",
"Invalid Host" : "Servidor no vàlid",
"LDAP user and group backend" : "Usuari LDAP i grup de rerefons",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Aquesta aplicació permet als administradors connectar Nextcloud a un directori d'usuari basat en LDAP.",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aquest aplicació permet als administradors connectar Nextcloud a un directori LDAP per autenticació i subministrament d'usuaris, grups i atributs d'usuari. Els administradors poden configurar aquesta aplicació per connectar a un o més directoris LDAP o ActiveDirectories (AD) a través de la interfície LDAP. Amb les consultes i filtres adequats es poden extreure i importar a Nextcloud atributs d'usuari com la quota, adreça de correu, avatar, pertinença a grups i més.\n\nUn usuari accedeix a Nextcloud amb les seves credencials LDAP o AD, i rep accés gràcies a l'autenticació gestionada pel servidor LDAP / AD. Nextcloud en cap moment emmagatzema la contrasenya LDAP o AD, ans al contrari, un cop l'usuari s'ha identificat correctament Nextcloud emprarà variables de sessió per desar només el ID de l'usuari. Podeu trobar més informació a la documentació sobre gestió d'usuaris i grups LDAP.",
"Test Configuration" : "Comprovació de la configuració",
"Help" : "Ajuda",
"Groups meeting these criteria are available in %s:" : "Els grups que compleixen aquests criteris estan disponibles a %s:",
"Only these object classes:" : "Només aquestes classes d'objectes:",
"Only from these groups:" : "Només d'aquests grups:",
"Search groups" : "Buscar grups",
"Available groups" : "Grups disponibles",
"Selected groups" : "Grups seleccionats",
"Edit LDAP Query" : "Edició de la consulta LDAP",
"LDAP Filter:" : "Filtre LDAP:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "El filtre especifica quins grups LDAP haurien de tenir accés a la instància %s.",
"Verify settings and count the groups" : "Comprova els paràmetres i compta els grups",
"When logging in, %s will find the user based on the following attributes:" : "Quan s'accedeixi, %s trobarà l'usuari segons aquests atributs:",
"LDAP/AD Username:" : "Nom d'usuari LDAP/AD:",
"Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permet inici de sessió amb el nom d'usuari LDAP/AD, que és \"uid\" o \"sAMAccountName\" i es detectarà.",
"LDAP/AD Email Address:" : "Adreça de correu electrònic LDAP/AD:",
"Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permet l'inici de sessió emprant l'atribut adreça de correu. S'accepten \"mail\" i \"mailPrimaryAddress\" .",
"Other Attributes:" : "Altres atributs:",
"Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Defineix el filtre a aplicar quan s'inicia sessió. \"%%uid\" reemplaça el nom d'usuari en l'acció d'identificar-se. Exemple \"uid=%%uid\"",
"Test Loginname" : "Nom d'usuari de prova",
"Attempts to receive a DN for the given loginname and the current login filter" : "Intenta rebre un DN per al nom d'inici de sessió donat i el filtre d'inici de sessió actual",
"Verify settings" : "Comprova els paràmetres",
"%s. Server:" : "%s. Servidor:",
"Add a new configuration" : "Afegeix una nova configuració",
"Copy current configuration into new directory binding" : "Copia l'actual configuració en la nova connexió al directori",
"Delete the current configuration" : "Suprimeix la configuració actual",
"Host" : "Servidor",
"You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Podeu ometre el protocol, si no requeriu SSL. Si ho requeriu llavors comenceu amb ldaps://",
"Port" : "Port",
"Detect Port" : "Detecta port",
"User DN" : "DN Usuari",
"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." : "La DN de l'usuari client amb la que s'haurà de fer, per exemple uid=agent,dc=exemple,dc=com. Per un accés anònim, deixeu la DN i la contrasenya en blanc.",
"Password" : "Contrasenya",
"For anonymous access, leave DN and Password empty." : "Per un accés anònim, deixeu la DN i la contrasenya en blanc.",
"Save Credentials" : "Desa credencials",
"One Base DN per line" : "Una DN Base per línia",
"You can specify Base DN for users and groups in the Advanced tab" : "Podeu especificar DN Base per usuaris i grups a la pestanya Avançat",
"Detect Base DN" : "Detecta el DN de base",
"Test Base DN" : "Prova el DN de base",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticions LDAP automàtiques. És millor per configuracions grans, però requereix tenir certs coneixements de LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Introducció manual de filtres LDAP (recomanat per a directoris grans)",
"Listing and searching for users is constrained by these criteria:" : "Llistat i cerca per part dels usuaris és restringida pels següents criteris:",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Las classes d'objectes més comunes pels usuaris són organizationalPerson, person, user, i inetOrgPerson. Si no esteu segurs de quina classe d'objecte escollir llavors consulteu el vostre administrador de directori.",
"The filter specifies which LDAP users shall have access to the %s instance." : "El filtre especifica quins usuaris LDAP haurien de tenir accés a la instància %s.",
"Verify settings and count users" : "Verifica paràmetres i compta usuaris",
"Saving" : "S'està desant",
"Back" : "Enrere",
"Continue" : "Continua",
"Please renew your password." : "Heu de renovar la vostra contrasenya.",
"An internal error occurred." : "Hi ha hagut un error intern inesperat.",
"Please try again or contact your administrator." : "Torneu-ho a provar o contacteu al vostre administrador.",
"Current password" : "Contrasenya actual",
"New password" : "Nova contrasenya",
"Renew password" : "Renova la contrasenya",
"Wrong password." : "Contrasenya incorrecta.",
"Cancel" : "Cancel·la",
"Server" : "Servidor",
"Users" : "Usuaris",
"Login Attributes" : "Atributs d'inici de sessió",
"Groups" : "Grups",
"Expert" : "Expert",
"Advanced" : "Avançat",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Avís:</b> El mòdul PHP LDAP no està instal·lat, el rerefons no funcionarà. Demaneu a l'administrador del sistema que l'instal·li.",
"Connection Settings" : "Paràmetres de connexió",
"Configuration Active" : "Configuració activa",
"When unchecked, this configuration will be skipped." : "Si està desmarcat, aquesta configuració s'ometrà.",
"Backup (Replica) Host" : "Servidor de còpia de seguretat (rèplica)",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Afegiu una màquina de còpia de seguretat opcional. Ha de ser una rèplica del servidor LDAP/AD principal.",
"Backup (Replica) Port" : "Port de la còpia de seguretat (rèplica)",
"Disable Main Server" : "Inhabilita el servidor principal",
"Only connect to the replica server." : "Connecta només al servidor rèplica.",
"Turn off SSL certificate validation." : "Desactiva la validació de certificat SSL.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "No es recomana, useu-ho només com a prova! Importeu el certificat SSL del servidor LDAP al servidor %s només si la connexió funciona amb aquesta opció.",
"Cache Time-To-Live" : "Memòria cau Time-To-Live",
"in seconds. A change empties the cache." : "en segons. Un canvi buidarà la memòria cau.",
"Directory Settings" : "Paràmetres de carpetes",
"User Display Name Field" : "Camp per mostrar el nom d'usuari",
"The LDAP attribute to use to generate the user's display name." : "Atribut LDAP a usar per generar el nom a mostrar de l'usuari.",
"2nd User Display Name Field" : "Camp del 2n nom d'usuari a mostrar",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atribut LDAP per ser afegit al nom a mostrar entre parèntesis. Esdevé en quelcom així: »Oriol Mas (oriol.mas@exemple.cat)«.",
"Base User Tree" : "Arbre base d'usuaris",
"One User Base DN per line" : "Una DN Base d'Usuari per línia",
"User Search Attributes" : "Atributs de cerca d'usuari",
"Optional; one attribute per line" : "Opcional; Un atribut per línia",
"Disable users missing from LDAP" : "Inhabilita els usuaris que falten a LDAP",
"When switched on, users imported from LDAP which are then missing will be disabled" : "Quan estigui activat, es desactivaran els usuaris importats des de LDAP que després faltin",
"Group Display Name Field" : "Camp per mostrar el nom del grup",
"The LDAP attribute to use to generate the groups's display name." : "Atribut LDAP a usar per generar el nom a mostrar del grup.",
"Base Group Tree" : "Arbre base de grups",
"One Group Base DN per line" : "Una DN Base de Grup per línia",
"Group Search Attributes" : "Atributs de cerca de grup",
"Group-Member association" : "Associació membres-grup",
"Dynamic Group Member URL" : "URL del Membre de Grup Dinàmic",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atribut LDAP que en objectes de Grup conté un URL de cerca LDAP que determina quins objectes pertanyen al grup. (Si es deixa el paràmetre en blanc es desactiva la funcionalitat de pertinença dinàmica a grups)",
"Nested Groups" : "Grups imbricats",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Quan està activat, els grups que contenen grups estan permesos. (Només funciona si l'atribut del grup membre conté DNs.)",
"Paging chunksize" : "Mida de la pàgina",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Mida usada per cerques LDAP paginades que podrien retornar respostes de volcat com enumeració d'usuari o grup. (Establint-ho a 0 desactiva les cerques LDAP paginades en aquestes situacions.)",
"Enable LDAP password changes per user" : "Habilita el canvi de contrasenya LDAP pels usuaris",
"Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permet als usuaris LDAP canviar la seva contrasenya i permet als Súper administradors i Administradors de grup canviar les contrasenyes dels seus usuaris LDAP. Només funciona quan les polítiques del control d'accés es configuren de igual manera al servidor LDAP. Com les contrasenyes s'envien en text pla (no xifrat) al servidor LDAP, s'ha d'usar transport xifrat i s'hauria de configurar el servidor LDAP per usar resum de contrasenyes (\"hashing\").",
"(New password is sent as plain text to LDAP)" : "(La nova contrasenya s'envia com a text pla al servidor LDAP)",
"Default password policy DN" : "DN de la política de contrasenya per defecte",
"The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN d'una política de contrasenya predeterminada que serà emprada per a la gestió de la caducitat de contrasenyes. Només funciona quan està habilitat el canvi de contrasenyes per part dels usuaris i només és compatible amb OpenLDAP. Deixeu buit aquest camp per desactivar aquesta gestió de contrasenyes caducades.",
"Special Attributes" : "Atributs especials",
"Quota Field" : "Camp de quota",
"Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixeu buit per usar la quota per defecte pels usuaris, O si no, indiqueu un atribut LDAP/AD.",
"Quota Default" : "Quota per defecte",
"Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobreescriu la quota per defecte pels usuaris LDAP que no tenen una quota establerta en el camp Quota.",
"Email Field" : "Camp de correu electrònic",
"Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Estableix l'adreça de correu a partir del seu atribut LDAP. Deixeu buit pel comportament predeterminat.",
"User Home Folder Naming Rule" : "Norma per anomenar la carpeta arrel d'usuari",
"Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixar buit pel nom d'usuari (per defecte). Altrament, especificar un atribut LDAP/AD.",
"\"$home\" Placeholder Field" : "Camp de marcador de posició \"$home\"",
"$home in an external storage configuration will be replaced with the value of the specified attribute" : "En la configuració d'un emmagatzematge extern es reemplaçarà $home amb el valor de l'atribut especificat",
"User Profile Attributes" : "Atributs del perfil d'usuari",
"Phone Field" : "Camp de telèfon",
"User profile Phone will be set from the specified attribute" : "Perfil d'usuari El telèfon s'establirà a partir de l'atribut especificat",
"Website Field" : "Camp del lloc web",
"User profile Website will be set from the specified attribute" : "Perfil d'usuari Lloc web s'establirà a partir de l'atribut especificat",
"Address Field" : "Camp dadreça",
"User profile Address will be set from the specified attribute" : "Perfil d'usuari L'adreça s'establirà a partir de l'atribut especificat",
"Twitter Field" : "Camp de Twitter",
"User profile Twitter will be set from the specified attribute" : "El perfil d'usuari de Twitter s'establirà a partir de l'atribut especificat",
"Fediverse Field" : "Camp Fediverse",
"User profile Fediverse will be set from the specified attribute" : "El perfil d'usuari Fediverse s'establirà a partir de l'atribut especificat",
"Organisation Field" : "Camp de l'organització",
"User profile Organisation will be set from the specified attribute" : "Organització del Perfil d'usuari s'establirà a partir de l'atribut especificat",
"Role Field" : "Camp de rol",
"User profile Role will be set from the specified attribute" : "El rol del perfil d'usuari s'establirà a partir de l'atribut especificat",
"Headline Field" : "Camp de titular",
"User profile Headline will be set from the specified attribute" : "El títol del perfil d'usuari s'establirà a partir de l'atribut especificat",
"Biography Field" : "Camp de Biografia",
"User profile Biography will be set from the specified attribute" : "La biografia del perfil d'usuari s'establirà a partir de l'atribut especificat",
"Internal Username" : "Nom d'usuari intern",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Per defecte, el nom d'usuari intern es crearà a partir de l'atribut UUID. S'assegura que el nom d'usuari és únic i que els caràcters no s'han de convertir. El nom d'usuari intern té la restricció que només es permeten aquests caràcters: [a-zA-Z0-9_.@-]. Altres caràcters es substitueixen per la seva correspondència ASCII o simplement s'ometen. En les col·lisions, s'afegirà/augmentarà un nombre. El nom d'usuari intern s'utilitza per identificar un usuari internament. També és el nom per defecte de la carpeta d'inici de l'usuari. També forma part dels URL remots, per exemple, per a tots els serveis DAV. Amb aquest paràmetre, es pot anul·lar el comportament per defecte. Els canvis només tindran efecte en els usuaris LDAP (afegits) recentment assignats. Deixeu-lo buit per al comportament per defecte.",
"Internal Username Attribute:" : "Atribut nom d'usuari intern:",
"Override UUID detection" : "Sobrescriu la detecció UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Per defecte, owncloud autodetecta l'atribut UUID. L'atribut UUID s'utilitza per identificar usuaris i grups automàticament. També el nom d'usuari intern es crearà en base a la UUID, si no heu especificat res diferent a dalt. Podeu sobreescriure el paràmetre i passar l'atribut que desitgeu. Heu d'assegurar-vos que l'atribut que escolliu pot ser recollit tant pels usuaris com pels grups i que és únic. Deixeu-ho en blanc si preferiu el comportament per defecte. els canvis s'aplicaran als usuaris i grups LDAP mapats de nou (afegits).",
"UUID Attribute for Users:" : "Atribut UUID per Usuaris:",
"UUID Attribute for Groups:" : "Atribut UUID per Grups:",
"Username-LDAP User Mapping" : "Mapatge d'usuari Nom d'usuari-LDAP",
"Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Els noms d'usuari son emprats per emmagatzemar i assignar metadades. Per tal d'identificar i reconèixer amb precisió als usuaris, cada usuari LDAP té un nom d'usuari intern. Això requereix una assignació de noms d'usuari interns per a cada un dels usuaris LDAP. Al nom d'usuari creat s'assigna el UUID de l'usuari LDAP. A més el DN es guarda en memòria cau per a reduir la interacció amb LDAP, però no s'utilitza per a identificació. Si el DN canvia, es trobaran els canvis. El nom d'usuari intern s'utilitza arreu. Netejar el mapa d'assignacions deixaria restes per totes bandes. Netejar el mapa d'assignacions no és que sigui sensible a la configuració, sinó que afecta a totes les configuracions LDAP! Mai netegeu el mapa d'assignacions en un entorn de producció, només en escenaris de proves o experimentals.",
"Clear Username-LDAP User Mapping" : "Elimina el mapatge d'usuari Nom d'usuari-LDAP",
"Clear Groupname-LDAP Group Mapping" : "Suprimeix el mapatge de grup Nom de grup-LDAP",
"Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "S'han trobat UUID no vàlids d'usuaris o grups LDAP. Reviseu els paràmetres de l'\"Anul·lació de detecció d'UUID\" a la part Experta de la configuració LDAP i utilitzeu \"occ ldap:update-uuid\" per actualitzar-los."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+222
View File
@@ -0,0 +1,222 @@
OC.L10N.register(
"user_ldap",
{
"Failed to clear the mappings." : "Mapování se nepodařilo zrušit.",
"Failed to delete the server configuration" : "Nastavení pro server se nepodařilo smazat",
"Invalid configuration: Anonymous binding is not allowed." : "Neplatné nastavení: Anonymní navázání není umožněno.",
"Valid configuration, connection established!" : "Nastavení je v pořádku a spojení bylo navázáno.",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "Nastavení je v pořádku, ale spojení se nezdařilo. Zkontrolujte nastavení serveru a přihlašovací údaje.",
"Invalid configuration. Please have a look at the logs for further details." : "Neplatné nastavení. Podrobnosti naleznete v záznamu událostí.",
"No action specified" : "Neurčena žádná akce",
"No configuration specified" : "Neurčeno žádné nastavení",
"No data specified" : "Neurčena žádná data",
"Invalid data specified" : "Zadána neplatná data",
" Could not set configuration %s" : "Nelze nastavit konfiguraci %s",
"Action does not exist" : "Tato akce neexistuje",
"Renewing …" : "Obnovování…",
"Very weak password" : "Velmi snadno prolomitelné heslo",
"Weak password" : "Snadno prolomitelné heslo",
"So-so password" : "Ještě použitelné heslo",
"Good password" : "Dobré heslo",
"Strong password" : "Odolné heslo",
"The Base DN appears to be wrong" : "Base DN se nezdá být pořádku",
"Testing configuration…" : "Zkoušení nastavení…",
"Configuration incorrect" : "Nesprávná nastavení",
"Configuration incomplete" : "Nastavení není dokončené",
"Configuration OK" : "Nastavení v pořádku",
"Select groups" : "Vyberte skupiny",
"Select object classes" : "Vyberte třídy objektů",
"Please check the credentials, they seem to be wrong." : "Ověřte své přihlašovací údaje, zdají se být neplatné.",
"Please specify the port, it could not be auto-detected." : "Zadejte port, nepodařilo se ho zjistit automaticky.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Základ DN se nepodařilo automaticky zjistit ověřte zadání přihlašovacích údajů, hostitele a portu.",
"Could not detect Base DN, please enter it manually." : "Nedaří se automaticky zjistit Base DN zadejte ho ručně.",
"{nthServer}. Server" : "{nthServer}. Server",
"No object found in the given Base DN. Please revise." : "V zadaném základu DN nebyl objekt nalezen. Ověřte to.",
"More than 1,000 directory entries available." : "Je dostupných více než 1000 položek adresáře kontaktů.",
"_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} položka k dispozici v rámci poskytnuté Base DN","{objectsFound} položky k dispozici v rámci poskytnuté Base DN","{objectsFound} položek k dispozici v rámci poskytnuté Base DN","{objectsFound} položky k dispozici v rámci poskytnuté Base DN"],
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Došlo k chybě. Ověřte základ DN, stejně tak nastavení připojení a přihlašovací údaje.",
"Do you really want to delete the current Server Configuration?" : "Opravdu chcete stávající nastavení pro server smazat?",
"Confirm Deletion" : "Potvrdit smazání",
"Mappings cleared successfully!" : "Mapování úspěšně vyčištěna!",
"Error while clearing the mappings." : "Chyba při čištění mapování.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymní bind není povolen. Zadejte User DN a Heslo.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operace. Anonymní navázání (bind) nejspíše není povoleno.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukládání se nezdařilo. Ujistěte se, že databáze funguje. Načtěte znovu, než budete pokračovat.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Přepnutí režimu povolí automatické LDAP dotazy. V závislosti na velikosti vašeho LDAP může vyhledávání chvíli trvat. Opravdu si přejete přepnout mód?",
"Mode switch" : "Přepnutí režimu",
"Select attributes" : "Vyberte atributy",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a uživatelské jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>",
"User found and settings verified." : "Uživatel nalezen a nastavení ověřena.",
"Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Zvažte zúžení vyhledávání, protože to stávající zahrnuje mnoho uživatelů, ze kterých se bude schopen přihlásit pouze první.",
"An unspecified error occurred. Please check log and settings." : "Došlo k nespecifikované chybě. Zkontrolujte nastavení a soubor se záznamem událostí.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání není platný, pravděpodobně z důvodu chybné syntaxe, jako třeba neuzavřené závorky. Ověřte to.",
"A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Došlo k chybě připojení k LDAP/AD, zkontrolujte prosím host, port a přihlašovací údaje.",
"The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Zástupný symbol „%uid“ chybí. Při dotatzu na LDAP/AD bude nahrazen přihlašovacím jménem.",
"Please provide a login name to test against" : "Zadejte přihlašovací jméno, vůči kterému vyzkoušet",
"The group box was disabled, because the LDAP/AD server does not support memberOf." : "Skupinová kolonka bylo vypnuta, protože LDAP/AD server nepodporuje memberOf.",
"Password change rejected. Hint: " : "Změna hesla zamítnuta. Nápověda: ",
"Please login with the new password" : "Přihlaste se pomocí nového hesla",
"LDAP User backend" : "Podpůrná vrstva pro uživatele z LDAP",
"Your password will expire tomorrow." : "Platnost hesla zítra skončí.",
"Your password will expire today." : "Platnost hesla dnes končí.",
"_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Platnost hesla skončí za %n den.","Platnost hesla skončí za %n dny.","Platnost hesla skončí za %n dnů.","Platnost hesla skončí za %n dny."],
"LDAP/AD integration" : "Napojení na LDAP/AD",
"Invalid LDAP UUIDs" : "Neplatné LDAP UUID identif.",
"None found" : "Žádné nenalezeno",
"_%n group found_::_%n groups found_" : ["nalezena %n skupina","nalezeny %n skupiny","nalezeno %n skupin","nalezeny %n skupiny"],
"> 1000 groups found" : "nalezeno více než 1 000 skupin",
"> 1000 users found" : "nalezeno více než 1 000 uživatelů",
"_%n user found_::_%n users found_" : ["nalezen %n uživatel","nalezeni %n uživatelé","nalezeno %n uživatelů","nalezeni %n uživatelé"],
"Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nedaří se zjistit atribut pro zobrazení jména uživatele. Upřesněte ho sami v rozšířeném nastavení LDAP.",
"Could not find the desired feature" : "Požadovanou vlastnost se nepodařilo nalézt",
"Invalid Host" : "Neplatný hostitel",
"LDAP user and group backend" : "Podpůrná vrstva pro uživatele a skupiny z LDAP",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Tato aplikace umožňuje správcům připojit Nextcloud na adresář uživatelů založený na LDAP.",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Tato aplikace umožní správcům propojit Nextcloud s adresářem uživatelů, založeném na LDAP pro ověřování a zprovozňování uživatelů, skupin a atributů uživatelů. Správci mohou tuto aplikaci nastavit pro propojení s jedním či více LDAP adresáři nebo Active Directory prostřednictvím LDAP rozhraní. Atributy jako například kvóta uživatele, e-mail, fotografie, členství ve skupinách a další mohou být vytažené do Nextcloud z adresáře pomocí příslušných dotazů a filtrů.\n\nUživatel se do Nextcloud přihlásí pomocí svých LDAP nebo AD přihlašovacích údajů a je mu udělen přístup na základě požadavku na ověření obslouženém LDAP nebo AD serverem. Nextcloud neukládá LDAP nebo AD hesla, namísto toho jsou tyto přihlašovací údaje použity pro ověření uživatele a Nextcloud používá relaci pro identifikátor uživatele. Více informací je k dispozici v dokumentaci k podpůrné vrstvě LDAP uživatel a skupina.",
"Test Configuration" : "Vyzkoušet nastavení",
"Help" : "Nápověda",
"Groups meeting these criteria are available in %s:" : "Skupiny splňující tyto podmínky jsou k dispozici v %s:",
"Only these object classes:" : "Pouze tyto třídy objektů:",
"Only from these groups:" : "Pouze z těchto skupin:",
"Search groups" : "Prohledat skupiny",
"Available groups" : "Dostupné skupiny",
"Selected groups" : "Vybrané skupiny",
"Edit LDAP Query" : "Upravit LDAP požadavek",
"LDAP Filter:" : "LDAP filtr:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.",
"Verify settings and count the groups" : "Ověřit nastavení a spočítat skupiny",
"When logging in, %s will find the user based on the following attributes:" : "Při přihlašování, bude %s hledat uživatele na základě následujících atributů:",
"LDAP/AD Username:" : "LDAP/AD uživatelské jméno:",
"Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umožňuje přihlašování pomocí LDAP/AD uživatelského jména, což je buď „uid“ nebo „sAMAccountName“ a bude zjištěno.",
"LDAP/AD Email Address:" : "E-mailová adresa z LDAP/AD:",
"Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Umožňuje přihlašování pomocí atributu e-mail. Je možné použít „mail“ a „mailPrimaryAddress“.",
"Other Attributes:" : "Další atributy:",
"Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definuje filtr který použít při pokusu o přihlášení. „%%uid“ je nahrazeno uživatelským jménem z přihlašovací akce. Příklad: „uid=%%uid“",
"Test Loginname" : "Vyzkoušet přihlašovací jméno",
"Attempts to receive a DN for the given loginname and the current login filter" : "Pokusy získat rozlišené jméno (DN) pro dané přihlašovací jméno a stávající filtr přihlášení",
"Verify settings" : "Ověřit nastavení",
"%s. Server:" : "%s. Server:",
"Add a new configuration" : "Přidat nové nastavení",
"Copy current configuration into new directory binding" : "Zkopírovat stávající nastavení do nového adresářového propojení",
"Delete the current configuration" : "Smazat stávající nastavení",
"Host" : "Hostitel",
"You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Pokud nevyžadujete SSL, můžete protokol vynechat. Pokud ano, začněte ldaps://",
"Port" : "Port",
"Detect Port" : "Zjistit port",
"User DN" : "Uživatelské 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 klientského uživatele, ke kterému má být vytvořena vazba, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte DN a heslo prázdné.",
"Password" : "Heslo",
"For anonymous access, leave DN and Password empty." : "Pro anonymní přístup ponechte údaje DN and heslo prázdné.",
"Save Credentials" : "Uložit přihlašovací údaje",
"One Base DN per line" : "Každé základní DN na samostatném řádku",
"You can specify Base DN for users and groups in the Advanced tab" : "Základ DN pro uživatele a skupiny je možné zadat v panelu Pokročilé",
"Detect Base DN" : "Zjistitit Base DN",
"Test Base DN" : "Vyzkoušet základ DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro velká nasazení, ale vyžaduje znalosti o LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře kontaktů)",
"Listing and searching for users is constrained by these criteria:" : "Získávání a vyhledávání uživatelů je omezeno následujícími kritérii:",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Nejčastější třídy objektů pro uživatele jsou organizationalPerson, person, user a inetOrgPerson. Pokud si nejste jisti které třídy objektů zvolit, obraťte se na správce svého adresáře kontaktů.",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé z LDAP mají mít přístup k instanci %s.",
"Verify settings and count users" : "Ověřit nastavení a spočítat uživatele",
"Saving" : "Ukládá se",
"Back" : "Zpět",
"Continue" : "Pokračovat",
"Please renew your password." : "Obnovte své heslo.",
"An internal error occurred." : "Došlo k vnitřní chybě.",
"Please try again or contact your administrator." : "Zkuste to znovu, nebo se obraťte na svého správce.",
"Current password" : "Dosavadní heslo",
"New password" : "Nové heslo",
"Renew password" : "Obnovit heslo",
"Wrong password." : "Nesprávné heslo.",
"Cancel" : "Storno",
"Server" : "Server",
"Users" : "Uživatelé",
"Login Attributes" : "Přihlašovací atributy",
"Groups" : "Skupiny",
"Expert" : "Expertní",
"Advanced" : "Pokročilé",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte správce systému, aby ho nainstaloval.",
"Connection Settings" : "Nastavení spojení",
"Configuration Active" : "Nastavení aktivní",
"When unchecked, this configuration will be skipped." : "Pokud není zaškrtnuto, bude toto nastavení přeskočeno.",
"Backup (Replica) Host" : "Hostitel zálohy (repliky)",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Zadejte volitelného záložního hostitele. Je třeba, aby byla kopie hlavního LDAP/AD serveru.",
"Backup (Replica) Port" : "Port na záloze (replika)",
"Disable Main Server" : "Zakázat hlavní server",
"Only connect to the replica server." : "Připojit jen k záložnímu serveru.",
"Turn off SSL certificate validation." : "Vypnout ověřování SSL certifikátu.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Nedoporučuje se, určeno pouze k použití pro testy! Pokud spojení funguje pouze s touto volbou, naimportujte SSL certifikát vašeho LDAP serveru na %s server.",
"Cache Time-To-Live" : "Doba platnosti mezipaměti",
"in seconds. A change empties the cache." : "v sekundách. Změna vyprázdní mezipaměť.",
"Directory Settings" : "Nastavení adresáře",
"User Display Name Field" : "Kolonka zobrazovaného jména uživatele",
"The LDAP attribute to use to generate the user's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména uživatele.",
"2nd User Display Name Field" : "Druhá kolonka zobrazovaného jména uživatele",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Volitelné. Přidání LDAP atributu v závorkách k zobrazovanému jménu. Vypadá např. jako „John Doe (john.doe@example.org)“",
"Base User Tree" : "Základ stromu uživatelů",
"One User Base DN per line" : "Jedna uživatelská základní DN na řádku",
"User Search Attributes" : "Atributy vyhledávání uživatelů",
"Optional; one attribute per line" : "Volitelné, každý atribut na zvlášť řádek",
"Disable users missing from LDAP" : "Znepřístupnit uživatelské účty, které se nenachází v LDAP",
"When switched on, users imported from LDAP which are then missing will be disabled" : "Pokud zapnuto, uživatelské účty naimportovaní z LDAP, kteří pak budou chybět, budou znepřístupněny.",
"Group Display Name Field" : "Kolonka zobrazovaného názvu skupiny",
"The LDAP attribute to use to generate the groups's display name." : "LDAP atribut, který použít k vytvoření zobrazovaného názvu skupiny.",
"Base Group Tree" : "Základ stromu skupin",
"One Group Base DN per line" : "Jedna skupinová základní DN na řádku",
"Group Search Attributes" : "Atributy vyhledávání skupin",
"Group-Member association" : "Přiřazení člena skupiny",
"Dynamic Group Member URL" : "URL člena dynamické skupiny",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP atribut, který obsahuje pro skupinu objektů vyhledávací LDAP URL, která určuje které objekty patří do skupiny. (Prázdné nastavení vypne funkci člena dynamické skupiny.)",
"Nested Groups" : "Vnořené skupiny",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které samy obsahují další skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN názvy.)",
"Paging chunksize" : "Velikost bloku stránkování",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, která mohou vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)",
"Enable LDAP password changes per user" : "Povolit změny LDAP hesla pro jednotlivé uživatele",
"Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Povolit LDAP uživatelům změnu jejich hesla a povolit Super správcům a správcům skupin měnit hesla jejich LDAP uživatelům. Funguje pouze, pokud jsou na LDAP serveru příslušně nastaveny zásady řízení přístupu. Protože hesla jsou LDAP serveru zasílána v čitelné podobě, je třeba pro pro transport použít šifrování a na LDAP serveru by mělo být nastaveno ukládání hesel v podobě jejich otisků (hash).",
"(New password is sent as plain text to LDAP)" : "(Nové heslo je do LDAP zasláno jako čitelný text)",
"Default password policy DN" : "DN výchozí politiky hesel",
"The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN výchozí politiky hesel, která bude použita ke zpracování konce platnosti hesel. Funguje pouze pokud jsou povoleny změny hesla uživatelem a používá se OpenLDAP. Ponechte prázdné pro výchozí zpracování konce platnost hesel.",
"Special Attributes" : "Speciální atributy",
"Quota Field" : "Kolonka kvóty",
"Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Pro výchozí kvótu uživatele nevyplňujte. Jinak uveďte příslušný LDAP / AD atribut.",
"Quota Default" : "Výchozí kvóta",
"Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Přepsat výchozí kvótu pro LDAP uživatele, kteří nemají kvótu nastavenou v kolonce kvóty.",
"Email Field" : "Kolonka e-mail",
"Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Nastavit e-mail uživatele na základě LDAP atributu. Ponechte prázdné pro výchozí chování.",
"User Home Folder Naming Rule" : "Pravidlo pojmenování domovské složky uživatele",
"Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Pokud chcete použít uživatelské jméno (výchozí), nevyplňujte. Jinak zadejte LDAP/AD atribut.",
"\"$home\" Placeholder Field" : "Výplňová kolonka „$home“",
"$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home bude v nastavení externího úložiště nahrazeno hodnotou zadaného atributu",
"User Profile Attributes" : "Atributy uživatelského profilu",
"Phone Field" : "Kolonka s telefonním číslem",
"User profile Phone will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Telefon u uživatelského profilu",
"Website Field" : "Kolonka webové stránky",
"User profile Website will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa Webových stránek u uživatelského profilu",
"Address Field" : "Kolonka adresa",
"User profile Address will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Adresa u uživatelského profilu",
"Twitter Field" : "Kolonka Twitter",
"User profile Twitter will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa na Twitteru u uživatelského profilu",
"Fediverse Field" : "Kolonka Fediverse",
"User profile Fediverse will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa v rámci Fediverse u uživatelského profilu",
"Organisation Field" : "Kolonka organizace",
"User profile Organisation will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Organizace u uživatelského profilu",
"Role Field" : "Kolonka role",
"User profile Role will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Role u uživatelského profilu",
"Headline Field" : "Kolonka nadpis",
"User profile Headline will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Nadpis u uživatelského profilu",
"Biography Field" : "Kolonka životopis",
"User profile Biography will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Životopis u uživatelského profilu",
"Internal Username" : "Interní uživatelské jméno",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP. Ponechte ho prázdné, pokud chcete zachovat výchozí nastavení. ",
"Internal Username Attribute:" : "Atribut interního uživatelského jména:",
"Override UUID detection" : "Nastavit UUID atribut ručně",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Ve výchozím nastavení je UUID atribut nalezen automaticky. UUID atribut je používán pro nezpochybnitelnou identifikaci uživatelů a skupin z LDAP. Navíc je na základě UUID tvořeno také interní uživatelské jméno, pokud není nastaveno jinak. Můžete výchozí nastavení přepsat a použít atribut, který sami zvolíte. Musíte se ale ujistit, že atribut, který vyberete, bude uveden jak u uživatelů, tak i u skupin a je unikátní. Ponechte prázdné pro výchozí chování. Změna bude mít vliv jen na nově namapované (přidané) uživatele a skupiny z LDAP.",
"UUID Attribute for Users:" : "UUID atribut pro uživatele:",
"UUID Attribute for Groups:" : "UUID atribut pro skupiny:",
"Username-LDAP User Mapping" : "Mapování uživatelských jmen z LDAP",
"Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uživatelská jména slouží k ukládání a přiřazování metadat. Pro přesnou identifikaci a rozpoznávání uživatelů, každý LDAP uživatel má vnitřní uživatelské jméno. Toto vyžaduje mapování uživatelského jména na LDAP uživatele. Krom toho je uložen do mezipaměti rozlišený název aby se omezila interakce s LDAP, ale není používáno pro identifikaci. Pokud se DN změní, změny budou nalezeny. Vnitřní uživatelské jméno bude použito nade všechno. Čištění mapování bude mít pozůstatky všude. Čištění mapování není citlivé na nastavení, postihuje všechny LDAP nastavení. Nikdy nečistěte mapování v produkčním prostředí, pouze v testovací nebo experimentální fázi.",
"Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen v LDAP",
"Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin na LDAP",
"Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Nalezeny neplatné UUID identifikátory uživatelů nebo skupin. Zkontrolujte svá nastavení „Přebít zjišťování UUID identifikátorů“ v části pro odborníky nastavení pro LDAP a identifikátory pak zaktualizujte příkazem „ldap:update-uuid“."
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
+220
View File
@@ -0,0 +1,220 @@
{ "translations": {
"Failed to clear the mappings." : "Mapování se nepodařilo zrušit.",
"Failed to delete the server configuration" : "Nastavení pro server se nepodařilo smazat",
"Invalid configuration: Anonymous binding is not allowed." : "Neplatné nastavení: Anonymní navázání není umožněno.",
"Valid configuration, connection established!" : "Nastavení je v pořádku a spojení bylo navázáno.",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "Nastavení je v pořádku, ale spojení se nezdařilo. Zkontrolujte nastavení serveru a přihlašovací údaje.",
"Invalid configuration. Please have a look at the logs for further details." : "Neplatné nastavení. Podrobnosti naleznete v záznamu událostí.",
"No action specified" : "Neurčena žádná akce",
"No configuration specified" : "Neurčeno žádné nastavení",
"No data specified" : "Neurčena žádná data",
"Invalid data specified" : "Zadána neplatná data",
" Could not set configuration %s" : "Nelze nastavit konfiguraci %s",
"Action does not exist" : "Tato akce neexistuje",
"Renewing …" : "Obnovování…",
"Very weak password" : "Velmi snadno prolomitelné heslo",
"Weak password" : "Snadno prolomitelné heslo",
"So-so password" : "Ještě použitelné heslo",
"Good password" : "Dobré heslo",
"Strong password" : "Odolné heslo",
"The Base DN appears to be wrong" : "Base DN se nezdá být pořádku",
"Testing configuration…" : "Zkoušení nastavení…",
"Configuration incorrect" : "Nesprávná nastavení",
"Configuration incomplete" : "Nastavení není dokončené",
"Configuration OK" : "Nastavení v pořádku",
"Select groups" : "Vyberte skupiny",
"Select object classes" : "Vyberte třídy objektů",
"Please check the credentials, they seem to be wrong." : "Ověřte své přihlašovací údaje, zdají se být neplatné.",
"Please specify the port, it could not be auto-detected." : "Zadejte port, nepodařilo se ho zjistit automaticky.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Základ DN se nepodařilo automaticky zjistit ověřte zadání přihlašovacích údajů, hostitele a portu.",
"Could not detect Base DN, please enter it manually." : "Nedaří se automaticky zjistit Base DN zadejte ho ručně.",
"{nthServer}. Server" : "{nthServer}. Server",
"No object found in the given Base DN. Please revise." : "V zadaném základu DN nebyl objekt nalezen. Ověřte to.",
"More than 1,000 directory entries available." : "Je dostupných více než 1000 položek adresáře kontaktů.",
"_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} položka k dispozici v rámci poskytnuté Base DN","{objectsFound} položky k dispozici v rámci poskytnuté Base DN","{objectsFound} položek k dispozici v rámci poskytnuté Base DN","{objectsFound} položky k dispozici v rámci poskytnuté Base DN"],
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Došlo k chybě. Ověřte základ DN, stejně tak nastavení připojení a přihlašovací údaje.",
"Do you really want to delete the current Server Configuration?" : "Opravdu chcete stávající nastavení pro server smazat?",
"Confirm Deletion" : "Potvrdit smazání",
"Mappings cleared successfully!" : "Mapování úspěšně vyčištěna!",
"Error while clearing the mappings." : "Chyba při čištění mapování.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymní bind není povolen. Zadejte User DN a Heslo.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operace. Anonymní navázání (bind) nejspíše není povoleno.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukládání se nezdařilo. Ujistěte se, že databáze funguje. Načtěte znovu, než budete pokračovat.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Přepnutí režimu povolí automatické LDAP dotazy. V závislosti na velikosti vašeho LDAP může vyhledávání chvíli trvat. Opravdu si přejete přepnout mód?",
"Mode switch" : "Přepnutí režimu",
"Select attributes" : "Vyberte atributy",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a uživatelské jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>",
"User found and settings verified." : "Uživatel nalezen a nastavení ověřena.",
"Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Zvažte zúžení vyhledávání, protože to stávající zahrnuje mnoho uživatelů, ze kterých se bude schopen přihlásit pouze první.",
"An unspecified error occurred. Please check log and settings." : "Došlo k nespecifikované chybě. Zkontrolujte nastavení a soubor se záznamem událostí.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání není platný, pravděpodobně z důvodu chybné syntaxe, jako třeba neuzavřené závorky. Ověřte to.",
"A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Došlo k chybě připojení k LDAP/AD, zkontrolujte prosím host, port a přihlašovací údaje.",
"The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Zástupný symbol „%uid“ chybí. Při dotatzu na LDAP/AD bude nahrazen přihlašovacím jménem.",
"Please provide a login name to test against" : "Zadejte přihlašovací jméno, vůči kterému vyzkoušet",
"The group box was disabled, because the LDAP/AD server does not support memberOf." : "Skupinová kolonka bylo vypnuta, protože LDAP/AD server nepodporuje memberOf.",
"Password change rejected. Hint: " : "Změna hesla zamítnuta. Nápověda: ",
"Please login with the new password" : "Přihlaste se pomocí nového hesla",
"LDAP User backend" : "Podpůrná vrstva pro uživatele z LDAP",
"Your password will expire tomorrow." : "Platnost hesla zítra skončí.",
"Your password will expire today." : "Platnost hesla dnes končí.",
"_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Platnost hesla skončí za %n den.","Platnost hesla skončí za %n dny.","Platnost hesla skončí za %n dnů.","Platnost hesla skončí za %n dny."],
"LDAP/AD integration" : "Napojení na LDAP/AD",
"Invalid LDAP UUIDs" : "Neplatné LDAP UUID identif.",
"None found" : "Žádné nenalezeno",
"_%n group found_::_%n groups found_" : ["nalezena %n skupina","nalezeny %n skupiny","nalezeno %n skupin","nalezeny %n skupiny"],
"> 1000 groups found" : "nalezeno více než 1 000 skupin",
"> 1000 users found" : "nalezeno více než 1 000 uživatelů",
"_%n user found_::_%n users found_" : ["nalezen %n uživatel","nalezeni %n uživatelé","nalezeno %n uživatelů","nalezeni %n uživatelé"],
"Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nedaří se zjistit atribut pro zobrazení jména uživatele. Upřesněte ho sami v rozšířeném nastavení LDAP.",
"Could not find the desired feature" : "Požadovanou vlastnost se nepodařilo nalézt",
"Invalid Host" : "Neplatný hostitel",
"LDAP user and group backend" : "Podpůrná vrstva pro uživatele a skupiny z LDAP",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Tato aplikace umožňuje správcům připojit Nextcloud na adresář uživatelů založený na LDAP.",
"This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Tato aplikace umožní správcům propojit Nextcloud s adresářem uživatelů, založeném na LDAP pro ověřování a zprovozňování uživatelů, skupin a atributů uživatelů. Správci mohou tuto aplikaci nastavit pro propojení s jedním či více LDAP adresáři nebo Active Directory prostřednictvím LDAP rozhraní. Atributy jako například kvóta uživatele, e-mail, fotografie, členství ve skupinách a další mohou být vytažené do Nextcloud z adresáře pomocí příslušných dotazů a filtrů.\n\nUživatel se do Nextcloud přihlásí pomocí svých LDAP nebo AD přihlašovacích údajů a je mu udělen přístup na základě požadavku na ověření obslouženém LDAP nebo AD serverem. Nextcloud neukládá LDAP nebo AD hesla, namísto toho jsou tyto přihlašovací údaje použity pro ověření uživatele a Nextcloud používá relaci pro identifikátor uživatele. Více informací je k dispozici v dokumentaci k podpůrné vrstvě LDAP uživatel a skupina.",
"Test Configuration" : "Vyzkoušet nastavení",
"Help" : "Nápověda",
"Groups meeting these criteria are available in %s:" : "Skupiny splňující tyto podmínky jsou k dispozici v %s:",
"Only these object classes:" : "Pouze tyto třídy objektů:",
"Only from these groups:" : "Pouze z těchto skupin:",
"Search groups" : "Prohledat skupiny",
"Available groups" : "Dostupné skupiny",
"Selected groups" : "Vybrané skupiny",
"Edit LDAP Query" : "Upravit LDAP požadavek",
"LDAP Filter:" : "LDAP filtr:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.",
"Verify settings and count the groups" : "Ověřit nastavení a spočítat skupiny",
"When logging in, %s will find the user based on the following attributes:" : "Při přihlašování, bude %s hledat uživatele na základě následujících atributů:",
"LDAP/AD Username:" : "LDAP/AD uživatelské jméno:",
"Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umožňuje přihlašování pomocí LDAP/AD uživatelského jména, což je buď „uid“ nebo „sAMAccountName“ a bude zjištěno.",
"LDAP/AD Email Address:" : "E-mailová adresa z LDAP/AD:",
"Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Umožňuje přihlašování pomocí atributu e-mail. Je možné použít „mail“ a „mailPrimaryAddress“.",
"Other Attributes:" : "Další atributy:",
"Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definuje filtr který použít při pokusu o přihlášení. „%%uid“ je nahrazeno uživatelským jménem z přihlašovací akce. Příklad: „uid=%%uid“",
"Test Loginname" : "Vyzkoušet přihlašovací jméno",
"Attempts to receive a DN for the given loginname and the current login filter" : "Pokusy získat rozlišené jméno (DN) pro dané přihlašovací jméno a stávající filtr přihlášení",
"Verify settings" : "Ověřit nastavení",
"%s. Server:" : "%s. Server:",
"Add a new configuration" : "Přidat nové nastavení",
"Copy current configuration into new directory binding" : "Zkopírovat stávající nastavení do nového adresářového propojení",
"Delete the current configuration" : "Smazat stávající nastavení",
"Host" : "Hostitel",
"You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Pokud nevyžadujete SSL, můžete protokol vynechat. Pokud ano, začněte ldaps://",
"Port" : "Port",
"Detect Port" : "Zjistit port",
"User DN" : "Uživatelské 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 klientského uživatele, ke kterému má být vytvořena vazba, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte DN a heslo prázdné.",
"Password" : "Heslo",
"For anonymous access, leave DN and Password empty." : "Pro anonymní přístup ponechte údaje DN and heslo prázdné.",
"Save Credentials" : "Uložit přihlašovací údaje",
"One Base DN per line" : "Každé základní DN na samostatném řádku",
"You can specify Base DN for users and groups in the Advanced tab" : "Základ DN pro uživatele a skupiny je možné zadat v panelu Pokročilé",
"Detect Base DN" : "Zjistitit Base DN",
"Test Base DN" : "Vyzkoušet základ DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro velká nasazení, ale vyžaduje znalosti o LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře kontaktů)",
"Listing and searching for users is constrained by these criteria:" : "Získávání a vyhledávání uživatelů je omezeno následujícími kritérii:",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Nejčastější třídy objektů pro uživatele jsou organizationalPerson, person, user a inetOrgPerson. Pokud si nejste jisti které třídy objektů zvolit, obraťte se na správce svého adresáře kontaktů.",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé z LDAP mají mít přístup k instanci %s.",
"Verify settings and count users" : "Ověřit nastavení a spočítat uživatele",
"Saving" : "Ukládá se",
"Back" : "Zpět",
"Continue" : "Pokračovat",
"Please renew your password." : "Obnovte své heslo.",
"An internal error occurred." : "Došlo k vnitřní chybě.",
"Please try again or contact your administrator." : "Zkuste to znovu, nebo se obraťte na svého správce.",
"Current password" : "Dosavadní heslo",
"New password" : "Nové heslo",
"Renew password" : "Obnovit heslo",
"Wrong password." : "Nesprávné heslo.",
"Cancel" : "Storno",
"Server" : "Server",
"Users" : "Uživatelé",
"Login Attributes" : "Přihlašovací atributy",
"Groups" : "Skupiny",
"Expert" : "Expertní",
"Advanced" : "Pokročilé",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte správce systému, aby ho nainstaloval.",
"Connection Settings" : "Nastavení spojení",
"Configuration Active" : "Nastavení aktivní",
"When unchecked, this configuration will be skipped." : "Pokud není zaškrtnuto, bude toto nastavení přeskočeno.",
"Backup (Replica) Host" : "Hostitel zálohy (repliky)",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Zadejte volitelného záložního hostitele. Je třeba, aby byla kopie hlavního LDAP/AD serveru.",
"Backup (Replica) Port" : "Port na záloze (replika)",
"Disable Main Server" : "Zakázat hlavní server",
"Only connect to the replica server." : "Připojit jen k záložnímu serveru.",
"Turn off SSL certificate validation." : "Vypnout ověřování SSL certifikátu.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Nedoporučuje se, určeno pouze k použití pro testy! Pokud spojení funguje pouze s touto volbou, naimportujte SSL certifikát vašeho LDAP serveru na %s server.",
"Cache Time-To-Live" : "Doba platnosti mezipaměti",
"in seconds. A change empties the cache." : "v sekundách. Změna vyprázdní mezipaměť.",
"Directory Settings" : "Nastavení adresáře",
"User Display Name Field" : "Kolonka zobrazovaného jména uživatele",
"The LDAP attribute to use to generate the user's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména uživatele.",
"2nd User Display Name Field" : "Druhá kolonka zobrazovaného jména uživatele",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Volitelné. Přidání LDAP atributu v závorkách k zobrazovanému jménu. Vypadá např. jako „John Doe (john.doe@example.org)“",
"Base User Tree" : "Základ stromu uživatelů",
"One User Base DN per line" : "Jedna uživatelská základní DN na řádku",
"User Search Attributes" : "Atributy vyhledávání uživatelů",
"Optional; one attribute per line" : "Volitelné, každý atribut na zvlášť řádek",
"Disable users missing from LDAP" : "Znepřístupnit uživatelské účty, které se nenachází v LDAP",
"When switched on, users imported from LDAP which are then missing will be disabled" : "Pokud zapnuto, uživatelské účty naimportovaní z LDAP, kteří pak budou chybět, budou znepřístupněny.",
"Group Display Name Field" : "Kolonka zobrazovaného názvu skupiny",
"The LDAP attribute to use to generate the groups's display name." : "LDAP atribut, který použít k vytvoření zobrazovaného názvu skupiny.",
"Base Group Tree" : "Základ stromu skupin",
"One Group Base DN per line" : "Jedna skupinová základní DN na řádku",
"Group Search Attributes" : "Atributy vyhledávání skupin",
"Group-Member association" : "Přiřazení člena skupiny",
"Dynamic Group Member URL" : "URL člena dynamické skupiny",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP atribut, který obsahuje pro skupinu objektů vyhledávací LDAP URL, která určuje které objekty patří do skupiny. (Prázdné nastavení vypne funkci člena dynamické skupiny.)",
"Nested Groups" : "Vnořené skupiny",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které samy obsahují další skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN názvy.)",
"Paging chunksize" : "Velikost bloku stránkování",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, která mohou vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)",
"Enable LDAP password changes per user" : "Povolit změny LDAP hesla pro jednotlivé uživatele",
"Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Povolit LDAP uživatelům změnu jejich hesla a povolit Super správcům a správcům skupin měnit hesla jejich LDAP uživatelům. Funguje pouze, pokud jsou na LDAP serveru příslušně nastaveny zásady řízení přístupu. Protože hesla jsou LDAP serveru zasílána v čitelné podobě, je třeba pro pro transport použít šifrování a na LDAP serveru by mělo být nastaveno ukládání hesel v podobě jejich otisků (hash).",
"(New password is sent as plain text to LDAP)" : "(Nové heslo je do LDAP zasláno jako čitelný text)",
"Default password policy DN" : "DN výchozí politiky hesel",
"The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN výchozí politiky hesel, která bude použita ke zpracování konce platnosti hesel. Funguje pouze pokud jsou povoleny změny hesla uživatelem a používá se OpenLDAP. Ponechte prázdné pro výchozí zpracování konce platnost hesel.",
"Special Attributes" : "Speciální atributy",
"Quota Field" : "Kolonka kvóty",
"Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Pro výchozí kvótu uživatele nevyplňujte. Jinak uveďte příslušný LDAP / AD atribut.",
"Quota Default" : "Výchozí kvóta",
"Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Přepsat výchozí kvótu pro LDAP uživatele, kteří nemají kvótu nastavenou v kolonce kvóty.",
"Email Field" : "Kolonka e-mail",
"Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Nastavit e-mail uživatele na základě LDAP atributu. Ponechte prázdné pro výchozí chování.",
"User Home Folder Naming Rule" : "Pravidlo pojmenování domovské složky uživatele",
"Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Pokud chcete použít uživatelské jméno (výchozí), nevyplňujte. Jinak zadejte LDAP/AD atribut.",
"\"$home\" Placeholder Field" : "Výplňová kolonka „$home“",
"$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home bude v nastavení externího úložiště nahrazeno hodnotou zadaného atributu",
"User Profile Attributes" : "Atributy uživatelského profilu",
"Phone Field" : "Kolonka s telefonním číslem",
"User profile Phone will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Telefon u uživatelského profilu",
"Website Field" : "Kolonka webové stránky",
"User profile Website will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa Webových stránek u uživatelského profilu",
"Address Field" : "Kolonka adresa",
"User profile Address will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Adresa u uživatelského profilu",
"Twitter Field" : "Kolonka Twitter",
"User profile Twitter will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa na Twitteru u uživatelského profilu",
"Fediverse Field" : "Kolonka Fediverse",
"User profile Fediverse will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa v rámci Fediverse u uživatelského profilu",
"Organisation Field" : "Kolonka organizace",
"User profile Organisation will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Organizace u uživatelského profilu",
"Role Field" : "Kolonka role",
"User profile Role will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Role u uživatelského profilu",
"Headline Field" : "Kolonka nadpis",
"User profile Headline will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Nadpis u uživatelského profilu",
"Biography Field" : "Kolonka životopis",
"User profile Biography will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Životopis u uživatelského profilu",
"Internal Username" : "Interní uživatelské jméno",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP. Ponechte ho prázdné, pokud chcete zachovat výchozí nastavení. ",
"Internal Username Attribute:" : "Atribut interního uživatelského jména:",
"Override UUID detection" : "Nastavit UUID atribut ručně",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Ve výchozím nastavení je UUID atribut nalezen automaticky. UUID atribut je používán pro nezpochybnitelnou identifikaci uživatelů a skupin z LDAP. Navíc je na základě UUID tvořeno také interní uživatelské jméno, pokud není nastaveno jinak. Můžete výchozí nastavení přepsat a použít atribut, který sami zvolíte. Musíte se ale ujistit, že atribut, který vyberete, bude uveden jak u uživatelů, tak i u skupin a je unikátní. Ponechte prázdné pro výchozí chování. Změna bude mít vliv jen na nově namapované (přidané) uživatele a skupiny z LDAP.",
"UUID Attribute for Users:" : "UUID atribut pro uživatele:",
"UUID Attribute for Groups:" : "UUID atribut pro skupiny:",
"Username-LDAP User Mapping" : "Mapování uživatelských jmen z LDAP",
"Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uživatelská jména slouží k ukládání a přiřazování metadat. Pro přesnou identifikaci a rozpoznávání uživatelů, každý LDAP uživatel má vnitřní uživatelské jméno. Toto vyžaduje mapování uživatelského jména na LDAP uživatele. Krom toho je uložen do mezipaměti rozlišený název aby se omezila interakce s LDAP, ale není používáno pro identifikaci. Pokud se DN změní, změny budou nalezeny. Vnitřní uživatelské jméno bude použito nade všechno. Čištění mapování bude mít pozůstatky všude. Čištění mapování není citlivé na nastavení, postihuje všechny LDAP nastavení. Nikdy nečistěte mapování v produkčním prostředí, pouze v testovací nebo experimentální fázi.",
"Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen v LDAP",
"Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin na LDAP",
"Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Nalezeny neplatné UUID identifikátory uživatelů nebo skupin. Zkontrolujte svá nastavení „Přebít zjišťování UUID identifikátorů“ v části pro odborníky nastavení pro LDAP a identifikátory pak zaktualizujte příkazem „ldap:update-uuid“."
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}
+10
View File
@@ -0,0 +1,10 @@
OC.L10N.register(
"user_ldap",
{
"Users" : "Defnyddwyr",
"Groups" : "Grwpiau",
"Help" : "Cymorth",
"Password" : "Cyfrinair",
"Advanced" : "Uwch"
},
"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;");

Some files were not shown because too many files have changed in this diff Show More