diff options
Diffstat (limited to 'apps/user_ldap')
59 files changed, 1451 insertions, 379 deletions
diff --git a/apps/user_ldap/composer/composer/ClassLoader.php b/apps/user_ldap/composer/composer/ClassLoader.php index a72151c77c8..7824d8f7eaf 100644 --- a/apps/user_ldap/composer/composer/ClassLoader.php +++ b/apps/user_ldap/composer/composer/ClassLoader.php @@ -45,35 +45,34 @@ class ClassLoader /** @var \Closure(string):void */ private static $includeFile; - /** @var ?string */ + /** @var string|null */ private $vendorDir; // PSR-4 /** - * @var array[] - * @psalm-var array<string, array<string, int>> + * @var array<string, array<string, int>> */ private $prefixLengthsPsr4 = array(); /** - * @var array[] - * @psalm-var array<string, array<int, string>> + * @var array<string, list<string>> */ private $prefixDirsPsr4 = array(); /** - * @var array[] - * @psalm-var array<string, string> + * @var list<string> */ private $fallbackDirsPsr4 = array(); // PSR-0 /** - * @var array[] - * @psalm-var array<string, array<string, string[]>> + * 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 array[] - * @psalm-var array<string, string> + * @var list<string> */ private $fallbackDirsPsr0 = array(); @@ -81,8 +80,7 @@ class ClassLoader private $useIncludePath = false; /** - * @var string[] - * @psalm-var array<string, string> + * @var array<string, string> */ private $classMap = array(); @@ -90,21 +88,20 @@ class ClassLoader private $classMapAuthoritative = false; /** - * @var bool[] - * @psalm-var array<string, bool> + * @var array<string, bool> */ private $missingClasses = array(); - /** @var ?string */ + /** @var string|null */ private $apcuPrefix; /** - * @var self[] + * @var array<string, self> */ private static $registeredLoaders = array(); /** - * @param ?string $vendorDir + * @param string|null $vendorDir */ public function __construct($vendorDir = null) { @@ -113,7 +110,7 @@ class ClassLoader } /** - * @return string[] + * @return array<string, list<string>> */ public function getPrefixes() { @@ -125,8 +122,7 @@ class ClassLoader } /** - * @return array[] - * @psalm-return array<string, array<int, string>> + * @return array<string, list<string>> */ public function getPrefixesPsr4() { @@ -134,8 +130,7 @@ class ClassLoader } /** - * @return array[] - * @psalm-return array<string, string> + * @return list<string> */ public function getFallbackDirs() { @@ -143,8 +138,7 @@ class ClassLoader } /** - * @return array[] - * @psalm-return array<string, string> + * @return list<string> */ public function getFallbackDirsPsr4() { @@ -152,8 +146,7 @@ class ClassLoader } /** - * @return string[] Array of classname => path - * @psalm-return array<string, string> + * @return array<string, string> Array of classname => path */ public function getClassMap() { @@ -161,8 +154,7 @@ class ClassLoader } /** - * @param string[] $classMap Class to filename map - * @psalm-param array<string, string> $classMap + * @param array<string, string> $classMap Class to filename map * * @return void */ @@ -179,24 +171,25 @@ class ClassLoader * 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 string[]|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories + * @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( - (array) $paths, + $paths, $this->fallbackDirsPsr0 ); } else { $this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0, - (array) $paths + $paths ); } @@ -205,19 +198,19 @@ class ClassLoader $first = $prefix[0]; if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; + $this->prefixesPsr0[$first][$prefix] = $paths; return; } if ($prepend) { $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixesPsr0[$first][$prefix] ); } else { $this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix], - (array) $paths + $paths ); } } @@ -226,9 +219,9 @@ class ClassLoader * 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 string[]|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories + * @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 * @@ -236,17 +229,18 @@ class ClassLoader */ public function addPsr4($prefix, $paths, $prepend = false) { + $paths = (array) $paths; if (!$prefix) { // Register directories for the root namespace. if ($prepend) { $this->fallbackDirsPsr4 = array_merge( - (array) $paths, + $paths, $this->fallbackDirsPsr4 ); } else { $this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4, - (array) $paths + $paths ); } } elseif (!isset($this->prefixDirsPsr4[$prefix])) { @@ -256,18 +250,18 @@ class ClassLoader 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; + $this->prefixDirsPsr4[$prefix] = $paths; } elseif ($prepend) { // Prepend directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixDirsPsr4[$prefix] ); } else { // Append directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix], - (array) $paths + $paths ); } } @@ -276,8 +270,8 @@ class ClassLoader * 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 string[]|string $paths The PSR-0 base directories + * @param string $prefix The prefix + * @param list<string>|string $paths The PSR-0 base directories * * @return void */ @@ -294,8 +288,8 @@ class ClassLoader * 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 string[]|string $paths The PSR-4 base directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list<string>|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException * @@ -481,9 +475,9 @@ class ClassLoader } /** - * Returns the currently registered loaders indexed by their corresponding vendor directories. + * Returns the currently registered loaders keyed by their corresponding vendor directories. * - * @return self[] + * @return array<string, self> */ public static function getRegisteredLoaders() { diff --git a/apps/user_ldap/composer/composer/installed.php b/apps/user_ldap/composer/composer/installed.php index 1426826287d..1a66c7f2416 100644 --- a/apps/user_ldap/composer/composer/installed.php +++ b/apps/user_ldap/composer/composer/installed.php @@ -3,7 +3,7 @@ 'name' => '__root__', 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'dd3d689e04a5e1d558da937ca72980e0e2c7c404', + 'reference' => 'b1797842784b250fb01ed5e3bf130705eb94751b', 'type' => 'library', 'install_path' => __DIR__ . '/../', 'aliases' => array(), @@ -13,7 +13,7 @@ '__root__' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'dd3d689e04a5e1d558da937ca72980e0e2c7c404', + 'reference' => 'b1797842784b250fb01ed5e3bf130705eb94751b', 'type' => 'library', 'install_path' => __DIR__ . '/../', 'aliases' => array(), diff --git a/apps/user_ldap/js/wizard/wizardTabAdvanced.js b/apps/user_ldap/js/wizard/wizardTabAdvanced.js index a438b847401..3b251897968 100644 --- a/apps/user_ldap/js/wizard/wizardTabAdvanced.js +++ b/apps/user_ldap/js/wizard/wizardTabAdvanced.js @@ -67,6 +67,10 @@ OCA = OCA || {}; $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' @@ -276,6 +280,15 @@ OCA = OCA || {}; }, /** + * 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 diff --git a/apps/user_ldap/l10n/ar.js b/apps/user_ldap/l10n/ar.js index b940b69a1a7..ea55a3289ee 100644 --- a/apps/user_ldap/l10n/ar.js +++ b/apps/user_ldap/l10n/ar.js @@ -1,35 +1,219 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "فشل مسح الارتباطات (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." : "الإعدادات صحيحة، لكن لم ينجح الارتباط. يرجى التأكد من إعدادات الخادم وبيانات التحقق من الدخول.", - "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", + "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" : "اختر أصناف المكونات", - "{nthServer}. Server" : "الخادم {nthServer}.", - "Do you really want to delete the current Server Configuration?" : "هل ترغب فعلاً في حذف إعدادات الخادم الحالي؟", + "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" : "اختر الخصائص", - "_%s group found_::_%s groups found_" : ["لا توجد مجموعات: %s","تم إيجاد %s مجموعة واحدة","تم إيجاد %s مجموعتين","تم إيجاد %s مجموعات","تم إيجاد %s مجموعة","تم إيجاد %s مجموعة/مجموعات"], - "Server" : "خادم", - "Users" : "المستخدمين", - "Groups" : "مجموعات", - "Help" : "المساعدة", + "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 ", + "_%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" : "المتابعة", - "Advanced" : "تعديلات متقدمه", - "Email Field" : "خانة البريد الإلكتروني" + "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 و المجموعة" }, "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;"); diff --git a/apps/user_ldap/l10n/ar.json b/apps/user_ldap/l10n/ar.json index 20ba16d1481..3ba6966c9a1 100644 --- a/apps/user_ldap/l10n/ar.json +++ b/apps/user_ldap/l10n/ar.json @@ -1,33 +1,217 @@ { "translations": { - "Failed to clear the mappings." : "فشل مسح الارتباطات (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." : "الإعدادات صحيحة، لكن لم ينجح الارتباط. يرجى التأكد من إعدادات الخادم وبيانات التحقق من الدخول.", - "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", + "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" : "اختر أصناف المكونات", - "{nthServer}. Server" : "الخادم {nthServer}.", - "Do you really want to delete the current Server Configuration?" : "هل ترغب فعلاً في حذف إعدادات الخادم الحالي؟", + "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" : "اختر الخصائص", - "_%s group found_::_%s groups found_" : ["لا توجد مجموعات: %s","تم إيجاد %s مجموعة واحدة","تم إيجاد %s مجموعتين","تم إيجاد %s مجموعات","تم إيجاد %s مجموعة","تم إيجاد %s مجموعة/مجموعات"], - "Server" : "خادم", - "Users" : "المستخدمين", - "Groups" : "مجموعات", - "Help" : "المساعدة", + "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 ", + "_%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" : "المتابعة", - "Advanced" : "تعديلات متقدمه", - "Email Field" : "خانة البريد الإلكتروني" + "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 و المجموعة" },"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;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/cs.js b/apps/user_ldap/l10n/cs.js index 779e3a42e13..59cb5060ab0 100644 --- a/apps/user_ldap/l10n/cs.js +++ b/apps/user_ldap/l10n/cs.js @@ -155,6 +155,8 @@ OC.L10N.register( "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 použitý k vytvoření zobrazovaného jména skupiny.", "Base Group Tree" : "Základ stromu skupin", diff --git a/apps/user_ldap/l10n/cs.json b/apps/user_ldap/l10n/cs.json index a848b0fdeea..74a28baf237 100644 --- a/apps/user_ldap/l10n/cs.json +++ b/apps/user_ldap/l10n/cs.json @@ -153,6 +153,8 @@ "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 použitý k vytvoření zobrazovaného jména skupiny.", "Base Group Tree" : "Základ stromu skupin", diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js index 9e6d329fb75..db789abe9dd 100644 --- a/apps/user_ldap/l10n/de_DE.js +++ b/apps/user_ldap/l10n/de_DE.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Ein Benutzer Basis-DN pro Zeile", "User Search Attributes" : "Benutzersucheigenschaften", "Optional; one attribute per line" : "Optional; ein Attribut pro Zeile", + "Disable users missing from LDAP" : "Benutzer deaktivieren, die in LDAP fehlen", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Beim Einschalten werden aus LDAP importierte und dann hier fehlende Benutzer deaktiviert", "Group Display Name Field" : "Feld für den Anzeigenamen der Gruppe", "The LDAP attribute to use to generate the groups's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens der Gruppen.", "Base Group Tree" : "Basis-Gruppenbaum", diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json index 351f1a0ddd7..a284df0afb8 100644 --- a/apps/user_ldap/l10n/de_DE.json +++ b/apps/user_ldap/l10n/de_DE.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Ein Benutzer Basis-DN pro Zeile", "User Search Attributes" : "Benutzersucheigenschaften", "Optional; one attribute per line" : "Optional; ein Attribut pro Zeile", + "Disable users missing from LDAP" : "Benutzer deaktivieren, die in LDAP fehlen", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Beim Einschalten werden aus LDAP importierte und dann hier fehlende Benutzer deaktiviert", "Group Display Name Field" : "Feld für den Anzeigenamen der Gruppe", "The LDAP attribute to use to generate the groups's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens der Gruppen.", "Base Group Tree" : "Basis-Gruppenbaum", diff --git a/apps/user_ldap/l10n/en_GB.js b/apps/user_ldap/l10n/en_GB.js index c0a638cf50b..95af6d42a27 100644 --- a/apps/user_ldap/l10n/en_GB.js +++ b/apps/user_ldap/l10n/en_GB.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "One User Base DN per line", "User Search Attributes" : "User Search Attributes", "Optional; one attribute per line" : "Optional; one attribute per line", + "Disable users missing from LDAP" : "Disable users missing from LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "When switched on, users imported from LDAP which are then missing will be disabled", "Group Display Name Field" : "Group Display Name Field", "The LDAP attribute to use to generate the groups's display name." : "The LDAP attribute to use to generate the group's display name.", "Base Group Tree" : "Base Group Tree", diff --git a/apps/user_ldap/l10n/en_GB.json b/apps/user_ldap/l10n/en_GB.json index c974665c560..29aa75db02d 100644 --- a/apps/user_ldap/l10n/en_GB.json +++ b/apps/user_ldap/l10n/en_GB.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "One User Base DN per line", "User Search Attributes" : "User Search Attributes", "Optional; one attribute per line" : "Optional; one attribute per line", + "Disable users missing from LDAP" : "Disable users missing from LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "When switched on, users imported from LDAP which are then missing will be disabled", "Group Display Name Field" : "Group Display Name Field", "The LDAP attribute to use to generate the groups's display name." : "The LDAP attribute to use to generate the group's display name.", "Base Group Tree" : "Base Group Tree", diff --git a/apps/user_ldap/l10n/es.js b/apps/user_ldap/l10n/es.js index 269e39b4ff2..4e8a85fde06 100644 --- a/apps/user_ldap/l10n/es.js +++ b/apps/user_ldap/l10n/es.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Un DN Base de Usuario por línea", "User Search Attributes" : "Atributos de la busqueda de usuario", "Optional; one attribute per line" : "Opcional; un atributo por linea", + "Disable users missing from LDAP" : "Desactivar los usuarios que faltan en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Si se activa, los usuarios importados de LDAP que falten se desactivarán.", "Group Display Name Field" : "Campo de nombre de grupo a mostrar", "The LDAP attribute to use to generate the groups's display name." : "El campo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", diff --git a/apps/user_ldap/l10n/es.json b/apps/user_ldap/l10n/es.json index 5e9be52afec..2979e0e0343 100644 --- a/apps/user_ldap/l10n/es.json +++ b/apps/user_ldap/l10n/es.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Un DN Base de Usuario por línea", "User Search Attributes" : "Atributos de la busqueda de usuario", "Optional; one attribute per line" : "Opcional; un atributo por linea", + "Disable users missing from LDAP" : "Desactivar los usuarios que faltan en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Si se activa, los usuarios importados de LDAP que falten se desactivarán.", "Group Display Name Field" : "Campo de nombre de grupo a mostrar", "The LDAP attribute to use to generate the groups's display name." : "El campo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", diff --git a/apps/user_ldap/l10n/es_EC.js b/apps/user_ldap/l10n/es_EC.js index 4145049c1db..460ef4be76d 100644 --- a/apps/user_ldap/l10n/es_EC.js +++ b/apps/user_ldap/l10n/es_EC.js @@ -10,6 +10,7 @@ OC.L10N.register( "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", + "Invalid data specified" : "Datos especificados no válidos", " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", @@ -49,16 +50,27 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Se produjo un error de conexión con LDAP/AD. Por favor, verifica el host, el puerto y las credenciales.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posición \"%uid\". Se reemplazará con el nombre de inicio de sesión al consultar LDAP/AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "El cuadro de grupo está deshabilitado porque el servidor LDAP/AD no admite memberOf.", "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", + "LDAP User backend" : "Backend de usuario LDAP", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], + "LDAP/AD integration" : "Integración LDAP/AD", + "_%n group found_::_%n groups found_" : ["%n grupo encontrado","%n grupos encontrados","%n grupos encontrados"], + "> 1000 groups found" : "Se encontraron más de 1000 grupos", + "> 1000 users found" : "Se encontraron más de 1000 usuarios", + "_%n user found_::_%n users found_" : ["%n usuario encontrado","%n usuarios encontrados","%n usuarios encontrados"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", "LDAP user and group backend" : "Backend de LDAP para usuario y grupo", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Esta aplicación permite a los administradores conectar Nextcloud a un directorio de usuarios basado 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." : "Esta aplicación permite a los administradores conectar Nextcloud a un directorio de usuarios basado en LDAP para autenticación y provisión de usuarios, grupos y atributos de usuarios. Los administradores pueden configurar esta aplicación para conectarse a uno o más directorios LDAP o Active Directory a través de una interfaz LDAP. Atributos como la cuota de usuario, el correo electrónico, las imágenes de avatar, las membresías de grupo y más se pueden extraer en Nextcloud desde un directorio con las consultas y filtros adecuados.\n \n Un usuario inicia sesión en Nextcloud con sus credenciales de LDAP o AD y se le concede acceso en función de una solicitud de autenticación gestionada por el servidor LDAP o AD. Nextcloud no almacena contraseñas de LDAP o AD, en su lugar, estas credenciales se utilizan para autenticar a un usuario y luego Nextcloud utiliza una sesión para el ID de usuario. Obtén más información en la documentación de Backend de Usuarios y Grupos LDAP.", "Test Configuration" : "Probar configuración", "Help" : "Ayuda", "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen con los siguientes criterios están disponibles en %s:", @@ -72,10 +84,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", + "LDAP/AD Username:" : "Usuario LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión con el nombre de usuario LDAP/AD, que es \"uid\" o \"sAMAccountName\" y se detectará automáticamente.", + "LDAP/AD Email Address:" : "Dirección de correo electrónico LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", "Test Loginname" : "Probar nombre de usuario", + "Attempts to receive a DN for the given loginname and the current login filter" : "Intenta obtener un DN para el nombre de inicio de sesión y el filtro de inicio de sesión actual", "Verify settings" : "Verificar configuraciones ", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Agregar una nueva configuración", @@ -139,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Un Usuario Base de DN por línea", "User Search Attributes" : "Atributos de búsqueda de usuario", "Optional; one attribute per line" : "Opcional; un atributo por línea", + "Disable users missing from LDAP" : "Deshabilitar usuarios ausentes en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Cuando está activado, los usuarios importados de LDAP que luego estén ausentes se desactivarán", "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar", "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", @@ -164,7 +182,30 @@ OC.L10N.register( "Email Field" : "Campo de correo electrónico", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Déjalo vacío para el nombre de usuario (predeterminado). De lo contrario, especifica un atributo LDAP/AD.", + "\"$home\" Placeholder Field" : "Campo de marcador de posición \"$home\"", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home en una configuración de almacenamiento externo se reemplazará con el valor del atributo especificado", + "User Profile Attributes" : "Atributos del perfil de usuario", + "Phone Field" : "Campo de teléfono", + "User profile Phone will be set from the specified attribute" : "El perfil de usuario Teléfono se establecerá a partir del atributo especificado", + "Website Field" : "Campo de sitio web", + "User profile Website will be set from the specified attribute" : "El perfil de usuario Sitio web se establecerá a partir del atributo especificado", + "Address Field" : "Campo de dirección", + "User profile Address will be set from the specified attribute" : "El perfil de usuario Dirección se establecerá a partir del atributo especificado", + "Twitter Field" : "Campo de Twitter", + "User profile Twitter will be set from the specified attribute" : "El perfil de usuario Twitter se establecerá a partir del atributo especificado", + "Fediverse Field" : "Campo de Fediverse", + "User profile Fediverse will be set from the specified attribute" : "El perfil de usuario Fediverse se establecerá a partir del atributo especificado", + "Organisation Field" : "Campo de organización", + "User profile Organisation will be set from the specified attribute" : "El perfil de usuario Organización se establecerá a partir del atributo especificado", + "Role Field" : "Campo de rol", + "User profile Role will be set from the specified attribute" : "El perfil de usuario Rol se establecerá a partir del atributo especificado", + "Headline Field" : "Campo de titular", + "User profile Headline will be set from the specified attribute" : "El perfil de usuario Titular se establecerá a partir del atributo especificado", + "Biography Field" : "Campo de biografía", + "User profile Biography will be set from the specified attribute" : "El perfil de usuario Biografía se establecerá a partir del atributo especificado", "Internal Username" : "Usuario interno", + "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." : "De forma predeterminada, el nombre de usuario interno se creará a partir del atributo UUID. Se asegura de que el nombre de usuario sea único y no se necesite convertir caracteres. El nombre de usuario interno tiene la restricción de que solo se permiten estos caracteres: [a-zA-Z0-9_.@-]. Otros caracteres se reemplazan por su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/aumentará un número. El nombre de usuario interno se utiliza para identificar a un usuario internamente. También es el nombre predeterminado para la carpeta de inicio de usuario. También es parte de las URL remotas, por ejemplo, para todos los servicios DAV. Con esta configuración, se puede anular el comportamiento predeterminado. Los cambios solo tendrán efecto en los usuarios LDAP mapeados (añadidos) recientemente. Déjalo vacío para el comportamiento predeterminado.", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detecció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 defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", diff --git a/apps/user_ldap/l10n/es_EC.json b/apps/user_ldap/l10n/es_EC.json index 6c3a8ce3d41..85228579461 100644 --- a/apps/user_ldap/l10n/es_EC.json +++ b/apps/user_ldap/l10n/es_EC.json @@ -8,6 +8,7 @@ "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", + "Invalid data specified" : "Datos especificados no válidos", " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", @@ -47,16 +48,27 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Se produjo un error de conexión con LDAP/AD. Por favor, verifica el host, el puerto y las credenciales.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posición \"%uid\". Se reemplazará con el nombre de inicio de sesión al consultar LDAP/AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "El cuadro de grupo está deshabilitado porque el servidor LDAP/AD no admite memberOf.", "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", + "LDAP User backend" : "Backend de usuario LDAP", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], + "LDAP/AD integration" : "Integración LDAP/AD", + "_%n group found_::_%n groups found_" : ["%n grupo encontrado","%n grupos encontrados","%n grupos encontrados"], + "> 1000 groups found" : "Se encontraron más de 1000 grupos", + "> 1000 users found" : "Se encontraron más de 1000 usuarios", + "_%n user found_::_%n users found_" : ["%n usuario encontrado","%n usuarios encontrados","%n usuarios encontrados"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", "LDAP user and group backend" : "Backend de LDAP para usuario y grupo", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Esta aplicación permite a los administradores conectar Nextcloud a un directorio de usuarios basado 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." : "Esta aplicación permite a los administradores conectar Nextcloud a un directorio de usuarios basado en LDAP para autenticación y provisión de usuarios, grupos y atributos de usuarios. Los administradores pueden configurar esta aplicación para conectarse a uno o más directorios LDAP o Active Directory a través de una interfaz LDAP. Atributos como la cuota de usuario, el correo electrónico, las imágenes de avatar, las membresías de grupo y más se pueden extraer en Nextcloud desde un directorio con las consultas y filtros adecuados.\n \n Un usuario inicia sesión en Nextcloud con sus credenciales de LDAP o AD y se le concede acceso en función de una solicitud de autenticación gestionada por el servidor LDAP o AD. Nextcloud no almacena contraseñas de LDAP o AD, en su lugar, estas credenciales se utilizan para autenticar a un usuario y luego Nextcloud utiliza una sesión para el ID de usuario. Obtén más información en la documentación de Backend de Usuarios y Grupos LDAP.", "Test Configuration" : "Probar configuración", "Help" : "Ayuda", "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen con los siguientes criterios están disponibles en %s:", @@ -70,10 +82,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", + "LDAP/AD Username:" : "Usuario LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión con el nombre de usuario LDAP/AD, que es \"uid\" o \"sAMAccountName\" y se detectará automáticamente.", + "LDAP/AD Email Address:" : "Dirección de correo electrónico LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", "Test Loginname" : "Probar nombre de usuario", + "Attempts to receive a DN for the given loginname and the current login filter" : "Intenta obtener un DN para el nombre de inicio de sesión y el filtro de inicio de sesión actual", "Verify settings" : "Verificar configuraciones ", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Agregar una nueva configuración", @@ -137,6 +153,8 @@ "One User Base DN per line" : "Un Usuario Base de DN por línea", "User Search Attributes" : "Atributos de búsqueda de usuario", "Optional; one attribute per line" : "Opcional; un atributo por línea", + "Disable users missing from LDAP" : "Deshabilitar usuarios ausentes en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Cuando está activado, los usuarios importados de LDAP que luego estén ausentes se desactivarán", "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar", "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", @@ -162,7 +180,30 @@ "Email Field" : "Campo de correo electrónico", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Déjalo vacío para el nombre de usuario (predeterminado). De lo contrario, especifica un atributo LDAP/AD.", + "\"$home\" Placeholder Field" : "Campo de marcador de posición \"$home\"", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home en una configuración de almacenamiento externo se reemplazará con el valor del atributo especificado", + "User Profile Attributes" : "Atributos del perfil de usuario", + "Phone Field" : "Campo de teléfono", + "User profile Phone will be set from the specified attribute" : "El perfil de usuario Teléfono se establecerá a partir del atributo especificado", + "Website Field" : "Campo de sitio web", + "User profile Website will be set from the specified attribute" : "El perfil de usuario Sitio web se establecerá a partir del atributo especificado", + "Address Field" : "Campo de dirección", + "User profile Address will be set from the specified attribute" : "El perfil de usuario Dirección se establecerá a partir del atributo especificado", + "Twitter Field" : "Campo de Twitter", + "User profile Twitter will be set from the specified attribute" : "El perfil de usuario Twitter se establecerá a partir del atributo especificado", + "Fediverse Field" : "Campo de Fediverse", + "User profile Fediverse will be set from the specified attribute" : "El perfil de usuario Fediverse se establecerá a partir del atributo especificado", + "Organisation Field" : "Campo de organización", + "User profile Organisation will be set from the specified attribute" : "El perfil de usuario Organización se establecerá a partir del atributo especificado", + "Role Field" : "Campo de rol", + "User profile Role will be set from the specified attribute" : "El perfil de usuario Rol se establecerá a partir del atributo especificado", + "Headline Field" : "Campo de titular", + "User profile Headline will be set from the specified attribute" : "El perfil de usuario Titular se establecerá a partir del atributo especificado", + "Biography Field" : "Campo de biografía", + "User profile Biography will be set from the specified attribute" : "El perfil de usuario Biografía se establecerá a partir del atributo especificado", "Internal Username" : "Usuario interno", + "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." : "De forma predeterminada, el nombre de usuario interno se creará a partir del atributo UUID. Se asegura de que el nombre de usuario sea único y no se necesite convertir caracteres. El nombre de usuario interno tiene la restricción de que solo se permiten estos caracteres: [a-zA-Z0-9_.@-]. Otros caracteres se reemplazan por su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/aumentará un número. El nombre de usuario interno se utiliza para identificar a un usuario internamente. También es el nombre predeterminado para la carpeta de inicio de usuario. También es parte de las URL remotas, por ejemplo, para todos los servicios DAV. Con esta configuración, se puede anular el comportamiento predeterminado. Los cambios solo tendrán efecto en los usuarios LDAP mapeados (añadidos) recientemente. Déjalo vacío para el comportamiento predeterminado.", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detecció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 defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", diff --git a/apps/user_ldap/l10n/eu.js b/apps/user_ldap/l10n/eu.js index 0c98fb522f3..e05622aedbb 100644 --- a/apps/user_ldap/l10n/eu.js +++ b/apps/user_ldap/l10n/eu.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Erabiltzaile DN oinarri bat lerroko", "User Search Attributes" : "Erabili Bilaketa Atributuak ", "Optional; one attribute per line" : "Aukerakoa; atributu bat lerro bakoitzeko", + "Disable users missing from LDAP" : "Desgaitu LDAPean ez dauden erabiltzaileak", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Gaitzean, ez dauden LDAPetik inportatutako erabiltzaileak desgaituko dira", "Group Display Name Field" : "Taldeen bistaratzeko izena duen eremua", "The LDAP attribute to use to generate the groups's display name." : "Taldearen bistaratze izena sortzeko erabiliko den LDAP atributua.", "Base Group Tree" : "Oinarrizko talde-zuhaitza", @@ -183,12 +185,25 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Utzi hutsik erabiltzaile izenarako (lehentsia). Bestela zehaztu LDAP/AD atributua.", "\"$home\" Placeholder Field" : "\"$home\" Leku-markaren eremua", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home kanpoko biltegiratze konfigurazio batean zehaztutako atributuaren balioarekin ordezkatuko da", + "User Profile Attributes" : "Erabiltzaile-profilaren ezaugarriak", "Phone Field" : "Telefono eremua", + "User profile Phone will be set from the specified attribute" : "Erabiltzailearen profilaren Telefonoa zehaztutako ezaugarritik ezarriko da", "Website Field" : "Webgune eremua", + "User profile Website will be set from the specified attribute" : "Erabiltzailearen profilaren Webgunea zehaztutako ezaugarritik ezarriko da", "Address Field" : "Helbide eremua", + "User profile Address will be set from the specified attribute" : "Erabiltzailearen profilaren Helbidea zehaztutako ezaugarritik ezarriko da", "Twitter Field" : "Twitter eremua", + "User profile Twitter will be set from the specified attribute" : "Erabiltzailearen profilaren Twitter-a zehaztutako ezaugarritik ezarriko da", "Fediverse Field" : "Fedibertso eremua", + "User profile Fediverse will be set from the specified attribute" : "Erabiltzailearen profilaren Fedibertsoa zehaztutako ezaugarritik ezarriko da", "Organisation Field" : "Erakunde eremua", + "User profile Organisation will be set from the specified attribute" : "Erabiltzailearen profilaren Erakundea zehaztutako ezaugarritik ezarriko da", + "Role Field" : "Rol eremua", + "User profile Role will be set from the specified attribute" : "Erabiltzailearen profilaren Rola zehaztutako ezaugarritik ezarriko da", + "Headline Field" : "Titulu-eremua", + "User profile Headline will be set from the specified attribute" : "Erabiltzailearen profilaren Titulua zehaztutako ezaugarritik ezarriko da", + "Biography Field" : "Biografia-eremua", + "User profile Biography will be set from the specified attribute" : "Erabiltzailearen profilaren Biografia zehaztutako ezaugarritik ezarriko da", "Internal Username" : "Barneko erabiltzaile izena", "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." : "Modu lehenetsian barneko erabiltzaile-izena UUID atribututik sortuko da. Honek erabiltzaile-izena bakarra dela eta karaktereak bihurtu behar ez direla ziurtatzen du. Barneko erabiltzaile-izenak karaktere hauek soilik izan ditzake: [ a-zA-Z0-9_.@- ]. Beste karaktereak haien ASCII karaktereekin bihurtu edo guztiz kentzen dira. Kolisioa gertatzen den kasuetan zenbaki bat gehitu edo handituko da. Barneko erabiltzaile-izena erabiltzaile bat barnean identifikatzeko erabiltzen da. Erabiltzailearen etxeko karpetaren izen lehenetsia ere da. Kanpoko URLen parte ere da, adibidez DAV zerbitzu guztientzako. Ezarpen honekin, lehenetsitako portaera aldatu daiteke. Aldaketek mapatutako (gehitutako) LDAP erabiltzaile berriengan soilik izango du efektua. Utzi hutsik lehenetsitako portaerarako.", "Internal Username Attribute:" : "Baliogabeko Erabiltzaile Izen atributua", diff --git a/apps/user_ldap/l10n/eu.json b/apps/user_ldap/l10n/eu.json index 9e83a667301..5bc48300c39 100644 --- a/apps/user_ldap/l10n/eu.json +++ b/apps/user_ldap/l10n/eu.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Erabiltzaile DN oinarri bat lerroko", "User Search Attributes" : "Erabili Bilaketa Atributuak ", "Optional; one attribute per line" : "Aukerakoa; atributu bat lerro bakoitzeko", + "Disable users missing from LDAP" : "Desgaitu LDAPean ez dauden erabiltzaileak", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Gaitzean, ez dauden LDAPetik inportatutako erabiltzaileak desgaituko dira", "Group Display Name Field" : "Taldeen bistaratzeko izena duen eremua", "The LDAP attribute to use to generate the groups's display name." : "Taldearen bistaratze izena sortzeko erabiliko den LDAP atributua.", "Base Group Tree" : "Oinarrizko talde-zuhaitza", @@ -181,12 +183,25 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Utzi hutsik erabiltzaile izenarako (lehentsia). Bestela zehaztu LDAP/AD atributua.", "\"$home\" Placeholder Field" : "\"$home\" Leku-markaren eremua", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home kanpoko biltegiratze konfigurazio batean zehaztutako atributuaren balioarekin ordezkatuko da", + "User Profile Attributes" : "Erabiltzaile-profilaren ezaugarriak", "Phone Field" : "Telefono eremua", + "User profile Phone will be set from the specified attribute" : "Erabiltzailearen profilaren Telefonoa zehaztutako ezaugarritik ezarriko da", "Website Field" : "Webgune eremua", + "User profile Website will be set from the specified attribute" : "Erabiltzailearen profilaren Webgunea zehaztutako ezaugarritik ezarriko da", "Address Field" : "Helbide eremua", + "User profile Address will be set from the specified attribute" : "Erabiltzailearen profilaren Helbidea zehaztutako ezaugarritik ezarriko da", "Twitter Field" : "Twitter eremua", + "User profile Twitter will be set from the specified attribute" : "Erabiltzailearen profilaren Twitter-a zehaztutako ezaugarritik ezarriko da", "Fediverse Field" : "Fedibertso eremua", + "User profile Fediverse will be set from the specified attribute" : "Erabiltzailearen profilaren Fedibertsoa zehaztutako ezaugarritik ezarriko da", "Organisation Field" : "Erakunde eremua", + "User profile Organisation will be set from the specified attribute" : "Erabiltzailearen profilaren Erakundea zehaztutako ezaugarritik ezarriko da", + "Role Field" : "Rol eremua", + "User profile Role will be set from the specified attribute" : "Erabiltzailearen profilaren Rola zehaztutako ezaugarritik ezarriko da", + "Headline Field" : "Titulu-eremua", + "User profile Headline will be set from the specified attribute" : "Erabiltzailearen profilaren Titulua zehaztutako ezaugarritik ezarriko da", + "Biography Field" : "Biografia-eremua", + "User profile Biography will be set from the specified attribute" : "Erabiltzailearen profilaren Biografia zehaztutako ezaugarritik ezarriko da", "Internal Username" : "Barneko erabiltzaile izena", "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." : "Modu lehenetsian barneko erabiltzaile-izena UUID atribututik sortuko da. Honek erabiltzaile-izena bakarra dela eta karaktereak bihurtu behar ez direla ziurtatzen du. Barneko erabiltzaile-izenak karaktere hauek soilik izan ditzake: [ a-zA-Z0-9_.@- ]. Beste karaktereak haien ASCII karaktereekin bihurtu edo guztiz kentzen dira. Kolisioa gertatzen den kasuetan zenbaki bat gehitu edo handituko da. Barneko erabiltzaile-izena erabiltzaile bat barnean identifikatzeko erabiltzen da. Erabiltzailearen etxeko karpetaren izen lehenetsia ere da. Kanpoko URLen parte ere da, adibidez DAV zerbitzu guztientzako. Ezarpen honekin, lehenetsitako portaera aldatu daiteke. Aldaketek mapatutako (gehitutako) LDAP erabiltzaile berriengan soilik izango du efektua. Utzi hutsik lehenetsitako portaerarako.", "Internal Username Attribute:" : "Baliogabeko Erabiltzaile Izen atributua", diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js index 3747d2e5f92..48bf00c1730 100644 --- a/apps/user_ldap/l10n/gl.js +++ b/apps/user_ldap/l10n/gl.js @@ -47,7 +47,7 @@ OC.L10N.register( "Select attributes" : "Seleccione os atributos", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Non se atopou o usuario. Recomendase consultar os atributos de acceso e o nome de usuario. Filtro eficaz (copiar e pegar para a validación en liña de ordes): <br/>", "User found and settings verified." : "Atopouse o usuario e verificáronse os axustes.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restrinxir a súa busca, pois abrange moitos usuarios, apenas o primeiro deles poderá acceder.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restrinxir a súa busca, pois abrangue moitos usuarios, apenas o primeiro deles poderá acceder.", "An unspecified error occurred. Please check log and settings." : "Produciuse un erro non especificado. Comprobe o rexistro e os axustes.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de busca é incorrecto, probabelmente por mor de erros de sintaxe como un número impar de chaves de apertura/peche. Revíseo.", "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Produciuse un erro de conexión a LDAP/AD. Verifique a máquina, o porto e as credenciais.", @@ -60,12 +60,12 @@ OC.L10N.register( "Your password will expire tomorrow." : "O seu contrasinal caduca mañá.", "Your password will expire today." : "O seu contrasinal caducará hoxe.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["O seu contrasinal caducará en %n día.","O seu contrasinal caducará en %n días."], - "LDAP/AD integration" : "Integración LDAP/AD", + "LDAP/AD integration" : "Integración de LDAP/AD", "_%n group found_::_%n groups found_" : ["Atopouse %n grupo","Atopáronse %n grupos"], "> 1000 groups found" : "> 1000 grupos atopados", "> 1000 users found" : "> 1000 usuarios atopados", "_%n user found_::_%n users found_" : ["%n usuario atopado","%n usuarios atopados"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo vostede mesmo nos axustes avanzados de LDAP. ", + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo Vde. mesmo nos axustes avanzados de LDAP. ", "Could not find the desired feature" : "Non foi posíbel atopar a función desexada", "Invalid Host" : "Máquina incorrecta", "LDAP user and group backend" : "Infraestrutura de usuarios e grupos LDAP", @@ -110,7 +110,7 @@ OC.L10N.register( "You can specify Base DN for users and groups in the Advanced tab" : "Pode especificar o DN base para usuarios e grupos na lapela de «Avanzado»", "Detect Base DN" : "Detectar o DN base", "Test Base DN" : "Probar o DN base", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as solicitudes LDAP automáticas. E o mellor para as configuracións máis grandes, mais require algúns coñecementos de LDAP.", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as solicitudes LDAP automáticas. E o mellor para as configuracións máis grandes, mais precisa algúns coñecementos de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Introduza manualmente os filtros LDAP (recomendado para directorios grandes)", "Listing and searching for users is constrained by these criteria:" : "A listaxe e a busca de usuarios están restrinxidos por estes criterios:", "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." : "As clases de obxecto máis comúns para os usuarios son «organizationalPerson», «person», «user» e «inetOrgPerson». Se non está seguro de que clase de obxecto ten que seleccionar, consulte co administrador de directorios.", @@ -121,7 +121,7 @@ OC.L10N.register( "Continue" : "Continuar", "Please renew your password." : "Renove o seu contrasinal.", "An internal error occurred." : "Produciuse un erro interno.", - "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto co administrador.", + "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto coa administración desta instancia.", "Current password" : "Contrasinal actual", "New password" : "Contrasinal novo", "Renew password" : "Renovar o contrasinal", @@ -133,7 +133,7 @@ OC.L10N.register( "Groups" : "Grupos", "Expert" : "Experto", "Advanced" : "Avanzado", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> O módulo PHP LDAP non está instalado, o servidor non funcionará. Consulte co administrador do sistema para instalalo.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> O módulo PHP LDAP non está instalado, o servidor non funcionará. Consulte coa administración do sistema para instalalo.", "Connection Settings" : "Axustes da conexión", "Configuration Active" : "Configuración activa", "When unchecked, this configuration will be skipped." : "Se está sen marcar, omítese esta configuración.", @@ -150,11 +150,13 @@ OC.L10N.register( "User Display Name Field" : "Campo de nome de usuario para amosar", "The LDAP attribute to use to generate the user's display name." : "O atributo LDAP a empregar para xerar o nome de usuario para amosar.", "2nd User Display Name Field" : "2º campo de nome de usuario para amosar", - "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 atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p.ex. «Xan Carallás (xan.carallas@exemple.org)».", + "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 atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p.ex. «Xan Carallás (xan.carallas@exemplo.org)».", "Base User Tree" : "Base da árbore de usuarios", "One User Base DN per line" : "Un DN base de usuario por liña", "User Search Attributes" : "Atributos de busca do usuario", "Optional; one attribute per line" : "Opcional; un atributo por liña", + "Disable users missing from LDAP" : "Desactivar usuarios que faltan en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Cando estea activado, desactivaranse os usuarios importados de LDAP e que logo faltan", "Group Display Name Field" : "Campo de nome de grupo para amosar", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP úsase para xerar os nomes dos grupos que amosar.", "Base Group Tree" : "Base da árbore de grupo", @@ -166,9 +168,9 @@ OC.L10N.register( "Nested Groups" : "Grupos aniñados", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Se está activado, admítense grupos que conteñen grupos. (Só funciona se o atributo de membros do grupo contén os DN.)", "Paging chunksize" : "Tamaño dos fragmentos paxinados", - "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ño dos fragmentos utilizados para as buscas LDAP paxinadas, que poden devolver resultados voluminosos como usuario ou enumeración de grupo. (Se se estabelece a 0, desactívanse as buscas LDAP paxinadas nesas situacións.)", + "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ño dos fragmentos utilizados para as buscas LDAP paxinadas, que poden devolver resultados voluminosos como usuario ou enumeración de grupo. (Se se axusta a 0, desactívanse as buscas LDAP paxinadas nesas situacións.)", "Enable LDAP password changes per user" : "Activar os cambios no contrasinal LDAP polo usuario", - "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." : "Permítelle aos usuarios LDAP cambiar o seu contrasinal e permite que os administradores e administradores de grupos, cambiar o contrasinal dos seus usuarios LDAP. Só funciona cando as directivas de control de acceso están configuradas conforme coas do servidor LDAP. Xa que os contrasinais son enviados en texto simple ao servidor, LDAP, debe empregarse o cifrado no transporte e o «hash» dos contrasinais debe ser configurado no servidor 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." : "Permítelle aos usuarios LDAP cambiar o seu contrasinal e permite que os administradores e administradores de grupos, cambiar o contrasinal dos seus usuarios LDAP. Só funciona cando as directivas de control de acceso están configuradas conforme coas do servidor LDAP. Xa que os contrasinais son enviados en texto simple ao servidor, LDAP, debe empregarse o cifrado no transporte e o «resumo criptográfico dos contrasinais debe ser configurado no servidor LDAP.", "(New password is sent as plain text to LDAP)" : "(O novo contrasinal envíase como un texto simple para LDAP)", "Default password policy DN" : "DN da directiva de contrasinal predeterminado", "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." : "O DN dunha directiva de contrasinais predeterminados que será usado para o control da caducidade dos contrasinais. Só funciona cando está activado o cambio do contrasinal LDAP polos usuarios e só está aceptado por OpenLDAP. Déixea baleira para desactivar o control da caducidade dos contrasinais.", @@ -176,9 +178,9 @@ OC.L10N.register( "Quota Field" : "Campo de cota", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixar baleiro para a cota predeterminada do usuario. Noutro caso, especifique un atributo LDAP/AD.", "Quota Default" : "Cota predeterminada", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Substituír a cota predeterminada para usuarios LDAP que non teñen unha cota configurada no campo Cota.", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Substituír a cota predeterminada para usuarios LDAP que non teñen unha cota estabelecida no campo Cota.", "Email Field" : "Campo do correo", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Axustar o correo do usuario dende un atributo LDAP. Déixeo baleiro para un comportamento predeterminado.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Estabelecer o correo do usuario dende un atributo LDAP. Déixeo baleiro para un comportamento predeterminado.", "User Home Folder Naming Rule" : "Regra de nomeado do cartafol do usuario", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixar baleiro para o nome de usuario (predeterminado). Noutro caso, especifique un atributo LDAP/AD.", "\"$home\" Placeholder Field" : "Campo de marcador de posición «$home»", @@ -206,11 +208,11 @@ OC.L10N.register( "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." : "De xeito predeterminado, o nome de usuario interno crearase a partir do atributo UUID. Isto asegura que o nome de usuario é único e que non é necesario converter os caracteres. O nome de usuario interno ten a restrición de que só se permiten estes caracteres: [a-zA-Z0-9_.@-]. Outros caracteres substitúense pola súa correspondencia ASCII ou simplemente omítense. Nos casos de colisións engadirase/aumentarase un número. O nome de usuario interno úsase para identificar un usuario internamente. Tamén é o nome predeterminado para o cartafol de inicio do usuario. Tamén forma parte dos URL remotos, por exemplo para todos os servizos DAV. Con esta configuración, pódese anular o comportamento predeterminado. Os cambios só terán efecto nos usuarios LDAP recén asignados (engadidos). Déixeo baleiro para o comportamento predeterminado.", "Internal Username Attribute:" : "Atributo do nome interno de usuario:", "Override UUID detection" : "Ignorar a detección do 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 omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular a configuración e pasar un atributo da súa escolla. Vostede debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", + "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 omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular o axuste e pasar un atributo da súa escolla. Vde. debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", "UUID Attribute for Users:" : "Atributo do UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo do UUID para grupos:", "Username-LDAP User Mapping" : "Asignación do usuario ao «nome de usuario 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." : "Os nomes de usuario empréganse para almacenar e asignar metadatos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome interno de usuario. Isto require unha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun contorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", + "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." : "Os nomes de usuario empréganse para almacenar e asignar metadatos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome interno de usuario. Isto precisa dunha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun contorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", "Clear Username-LDAP User Mapping" : "Limpar a asignación do usuario ao «nome de usuario LDAP»", "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»" }, diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json index 0f4eeb1e7dc..a558c8ae715 100644 --- a/apps/user_ldap/l10n/gl.json +++ b/apps/user_ldap/l10n/gl.json @@ -45,7 +45,7 @@ "Select attributes" : "Seleccione os atributos", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Non se atopou o usuario. Recomendase consultar os atributos de acceso e o nome de usuario. Filtro eficaz (copiar e pegar para a validación en liña de ordes): <br/>", "User found and settings verified." : "Atopouse o usuario e verificáronse os axustes.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restrinxir a súa busca, pois abrange moitos usuarios, apenas o primeiro deles poderá acceder.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restrinxir a súa busca, pois abrangue moitos usuarios, apenas o primeiro deles poderá acceder.", "An unspecified error occurred. Please check log and settings." : "Produciuse un erro non especificado. Comprobe o rexistro e os axustes.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de busca é incorrecto, probabelmente por mor de erros de sintaxe como un número impar de chaves de apertura/peche. Revíseo.", "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Produciuse un erro de conexión a LDAP/AD. Verifique a máquina, o porto e as credenciais.", @@ -58,12 +58,12 @@ "Your password will expire tomorrow." : "O seu contrasinal caduca mañá.", "Your password will expire today." : "O seu contrasinal caducará hoxe.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["O seu contrasinal caducará en %n día.","O seu contrasinal caducará en %n días."], - "LDAP/AD integration" : "Integración LDAP/AD", + "LDAP/AD integration" : "Integración de LDAP/AD", "_%n group found_::_%n groups found_" : ["Atopouse %n grupo","Atopáronse %n grupos"], "> 1000 groups found" : "> 1000 grupos atopados", "> 1000 users found" : "> 1000 usuarios atopados", "_%n user found_::_%n users found_" : ["%n usuario atopado","%n usuarios atopados"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo vostede mesmo nos axustes avanzados de LDAP. ", + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo Vde. mesmo nos axustes avanzados de LDAP. ", "Could not find the desired feature" : "Non foi posíbel atopar a función desexada", "Invalid Host" : "Máquina incorrecta", "LDAP user and group backend" : "Infraestrutura de usuarios e grupos LDAP", @@ -108,7 +108,7 @@ "You can specify Base DN for users and groups in the Advanced tab" : "Pode especificar o DN base para usuarios e grupos na lapela de «Avanzado»", "Detect Base DN" : "Detectar o DN base", "Test Base DN" : "Probar o DN base", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as solicitudes LDAP automáticas. E o mellor para as configuracións máis grandes, mais require algúns coñecementos de LDAP.", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as solicitudes LDAP automáticas. E o mellor para as configuracións máis grandes, mais precisa algúns coñecementos de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Introduza manualmente os filtros LDAP (recomendado para directorios grandes)", "Listing and searching for users is constrained by these criteria:" : "A listaxe e a busca de usuarios están restrinxidos por estes criterios:", "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." : "As clases de obxecto máis comúns para os usuarios son «organizationalPerson», «person», «user» e «inetOrgPerson». Se non está seguro de que clase de obxecto ten que seleccionar, consulte co administrador de directorios.", @@ -119,7 +119,7 @@ "Continue" : "Continuar", "Please renew your password." : "Renove o seu contrasinal.", "An internal error occurred." : "Produciuse un erro interno.", - "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto co administrador.", + "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto coa administración desta instancia.", "Current password" : "Contrasinal actual", "New password" : "Contrasinal novo", "Renew password" : "Renovar o contrasinal", @@ -131,7 +131,7 @@ "Groups" : "Grupos", "Expert" : "Experto", "Advanced" : "Avanzado", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> O módulo PHP LDAP non está instalado, o servidor non funcionará. Consulte co administrador do sistema para instalalo.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> O módulo PHP LDAP non está instalado, o servidor non funcionará. Consulte coa administración do sistema para instalalo.", "Connection Settings" : "Axustes da conexión", "Configuration Active" : "Configuración activa", "When unchecked, this configuration will be skipped." : "Se está sen marcar, omítese esta configuración.", @@ -148,11 +148,13 @@ "User Display Name Field" : "Campo de nome de usuario para amosar", "The LDAP attribute to use to generate the user's display name." : "O atributo LDAP a empregar para xerar o nome de usuario para amosar.", "2nd User Display Name Field" : "2º campo de nome de usuario para amosar", - "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 atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p.ex. «Xan Carallás (xan.carallas@exemple.org)».", + "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 atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p.ex. «Xan Carallás (xan.carallas@exemplo.org)».", "Base User Tree" : "Base da árbore de usuarios", "One User Base DN per line" : "Un DN base de usuario por liña", "User Search Attributes" : "Atributos de busca do usuario", "Optional; one attribute per line" : "Opcional; un atributo por liña", + "Disable users missing from LDAP" : "Desactivar usuarios que faltan en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Cando estea activado, desactivaranse os usuarios importados de LDAP e que logo faltan", "Group Display Name Field" : "Campo de nome de grupo para amosar", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP úsase para xerar os nomes dos grupos que amosar.", "Base Group Tree" : "Base da árbore de grupo", @@ -164,9 +166,9 @@ "Nested Groups" : "Grupos aniñados", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Se está activado, admítense grupos que conteñen grupos. (Só funciona se o atributo de membros do grupo contén os DN.)", "Paging chunksize" : "Tamaño dos fragmentos paxinados", - "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ño dos fragmentos utilizados para as buscas LDAP paxinadas, que poden devolver resultados voluminosos como usuario ou enumeración de grupo. (Se se estabelece a 0, desactívanse as buscas LDAP paxinadas nesas situacións.)", + "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ño dos fragmentos utilizados para as buscas LDAP paxinadas, que poden devolver resultados voluminosos como usuario ou enumeración de grupo. (Se se axusta a 0, desactívanse as buscas LDAP paxinadas nesas situacións.)", "Enable LDAP password changes per user" : "Activar os cambios no contrasinal LDAP polo usuario", - "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." : "Permítelle aos usuarios LDAP cambiar o seu contrasinal e permite que os administradores e administradores de grupos, cambiar o contrasinal dos seus usuarios LDAP. Só funciona cando as directivas de control de acceso están configuradas conforme coas do servidor LDAP. Xa que os contrasinais son enviados en texto simple ao servidor, LDAP, debe empregarse o cifrado no transporte e o «hash» dos contrasinais debe ser configurado no servidor 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." : "Permítelle aos usuarios LDAP cambiar o seu contrasinal e permite que os administradores e administradores de grupos, cambiar o contrasinal dos seus usuarios LDAP. Só funciona cando as directivas de control de acceso están configuradas conforme coas do servidor LDAP. Xa que os contrasinais son enviados en texto simple ao servidor, LDAP, debe empregarse o cifrado no transporte e o «resumo criptográfico dos contrasinais debe ser configurado no servidor LDAP.", "(New password is sent as plain text to LDAP)" : "(O novo contrasinal envíase como un texto simple para LDAP)", "Default password policy DN" : "DN da directiva de contrasinal predeterminado", "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." : "O DN dunha directiva de contrasinais predeterminados que será usado para o control da caducidade dos contrasinais. Só funciona cando está activado o cambio do contrasinal LDAP polos usuarios e só está aceptado por OpenLDAP. Déixea baleira para desactivar o control da caducidade dos contrasinais.", @@ -174,9 +176,9 @@ "Quota Field" : "Campo de cota", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixar baleiro para a cota predeterminada do usuario. Noutro caso, especifique un atributo LDAP/AD.", "Quota Default" : "Cota predeterminada", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Substituír a cota predeterminada para usuarios LDAP que non teñen unha cota configurada no campo Cota.", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Substituír a cota predeterminada para usuarios LDAP que non teñen unha cota estabelecida no campo Cota.", "Email Field" : "Campo do correo", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Axustar o correo do usuario dende un atributo LDAP. Déixeo baleiro para un comportamento predeterminado.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Estabelecer o correo do usuario dende un atributo LDAP. Déixeo baleiro para un comportamento predeterminado.", "User Home Folder Naming Rule" : "Regra de nomeado do cartafol do usuario", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixar baleiro para o nome de usuario (predeterminado). Noutro caso, especifique un atributo LDAP/AD.", "\"$home\" Placeholder Field" : "Campo de marcador de posición «$home»", @@ -204,11 +206,11 @@ "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." : "De xeito predeterminado, o nome de usuario interno crearase a partir do atributo UUID. Isto asegura que o nome de usuario é único e que non é necesario converter os caracteres. O nome de usuario interno ten a restrición de que só se permiten estes caracteres: [a-zA-Z0-9_.@-]. Outros caracteres substitúense pola súa correspondencia ASCII ou simplemente omítense. Nos casos de colisións engadirase/aumentarase un número. O nome de usuario interno úsase para identificar un usuario internamente. Tamén é o nome predeterminado para o cartafol de inicio do usuario. Tamén forma parte dos URL remotos, por exemplo para todos os servizos DAV. Con esta configuración, pódese anular o comportamento predeterminado. Os cambios só terán efecto nos usuarios LDAP recén asignados (engadidos). Déixeo baleiro para o comportamento predeterminado.", "Internal Username Attribute:" : "Atributo do nome interno de usuario:", "Override UUID detection" : "Ignorar a detección do 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 omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular a configuración e pasar un atributo da súa escolla. Vostede debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", + "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 omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular o axuste e pasar un atributo da súa escolla. Vde. debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", "UUID Attribute for Users:" : "Atributo do UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo do UUID para grupos:", "Username-LDAP User Mapping" : "Asignación do usuario ao «nome de usuario 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." : "Os nomes de usuario empréganse para almacenar e asignar metadatos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome interno de usuario. Isto require unha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun contorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", + "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." : "Os nomes de usuario empréganse para almacenar e asignar metadatos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome interno de usuario. Isto precisa dunha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun contorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", "Clear Username-LDAP User Mapping" : "Limpar a asignación do usuario ao «nome de usuario LDAP»", "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js index 8df55443cd0..eb7a6c2e1d0 100644 --- a/apps/user_ldap/l10n/it.js +++ b/apps/user_ldap/l10n/it.js @@ -10,6 +10,7 @@ OC.L10N.register( "No action specified" : "Nessuna azione specificata", "No configuration specified" : "Nessuna configurazione specificata", "No data specified" : "Nessun dato specificato", + "Invalid data specified" : "Dati specificati non validi", " Could not set configuration %s" : "Impossibile impostare la configurazione %s", "Action does not exist" : "L'azione non esiste", "Renewing …" : "Rinnovo...", @@ -60,6 +61,10 @@ OC.L10N.register( "Your password will expire today." : "La tua password scadrà oggi.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La tua password scadrà tra %n giorno.","La tua password scadrà oggi tra %n giorni.","La tua password scadrà oggi tra %n giorni."], "LDAP/AD integration" : "Integrazione LDAP/AD", + "_%n group found_::_%n groups found_" : ["%n gruppo trovato","%n gruppi trovati","%n gruppi trovati"], + "> 1000 groups found" : "> 1000 gruppi trovati", + "> 1000 users found" : "> 1000 utenti trovati", + "_%n user found_::_%n users found_" : ["%n utente trovato","%n utenti trovati","%n utenti trovati"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di LDAP.", "Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata", "Invalid Host" : "Host non valido", @@ -86,6 +91,7 @@ OC.L10N.register( "Other Attributes:" : "Altri attributi:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definisce i filtri da applicare quando viene eseguito il tentativo di accesso. \"%%uid\" rimpiazza il nome utente nell'azione di accesso. Esempio: \"uid=%%uid\"", "Test Loginname" : "Prova nome di accesso", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tenta di ricevere un nome di dominio per il nome di login dato e l'attuale filtro di login", "Verify settings" : "Verifica impostazioni", "%s. Server:" : "%s. server:", "Add a new configuration" : "Aggiungi una nuova configurazione", @@ -149,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Un DN base utente per riga", "User Search Attributes" : "Attributi di ricerca utente", "Optional; one attribute per line" : "Opzionale; un attributo per riga", + "Disable users missing from LDAP" : "Disattiva utenti mancanti da LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quando attivo, gli utenti importati da LDAP che poi mancano, saranno disattivati", "Group Display Name Field" : "Campo per la visualizzazione del nome del gruppo", "The LDAP attribute to use to generate the groups's display name." : "L'attributo LDAP da usare per generare il nome visualizzato del gruppo.", "Base Group Tree" : "Struttura base del gruppo", @@ -177,7 +185,27 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Lascia vuoto il nome utente (predefinito). Altrimenti, specifica un attributo LDAP/AD.", "\"$home\" Placeholder Field" : "Segnaposto \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home nella configurazione di un'archiviazione esterna sarà sostituita con il valore dell'attributo specificato", + "User Profile Attributes" : "Attributi profilo utente", + "Phone Field" : "Campo telefono", + "User profile Phone will be set from the specified attribute" : "Il telefono del profilo utente verrà impostato dall'attributo specificato", + "Website Field" : "Campo sito web", + "User profile Website will be set from the specified attribute" : "Il sito web del profilo utente verrà impostato dall'attributo specificato", + "Address Field" : "Campo indirizzo", + "User profile Address will be set from the specified attribute" : "L'indirizzo del profilo utente verrà impostato dall'attributo specificato", + "Twitter Field" : "Campo Twitter", + "User profile Twitter will be set from the specified attribute" : "Il Twitter del profilo utente verrà impostato dall'attributo specificato", + "Fediverse Field" : "Campo fediverso", + "User profile Fediverse will be set from the specified attribute" : "Il fediverso del profilo utente verrà impostato dall'attributo specificato", + "Organisation Field" : "Campo organizzazione", + "User profile Organisation will be set from the specified attribute" : "L'organizzazione del profilo utente verrà impostata dall'attributo specificato", + "Role Field" : "Campo ruolo", + "User profile Role will be set from the specified attribute" : "Il ruolo del profilo utente verrà impostato dall'attributo specificato", + "Headline Field" : "Campo titolo", + "User profile Headline will be set from the specified attribute" : "Il titolo del profilo utente verrà impostato dall'attributo specificato", + "Biography Field" : "Campo biografia", + "User profile Biography will be set from the specified attribute" : "La biografia del profilo utente verrà impostata dall'attributo specificato", "Internal Username" : "Nome utente interno", + "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." : "In modo predefinito, il nome utente interno sarà creato dall'attributo UUID. Ciò assicura che il nome utente sia univoco e che non sia necessario convertire i caratteri. Il nome utente interno consente l'uso solo di determinati caratteri: [ a-zA-Z0-9_.@- ]. Altri caratteri sono sostituiti con il corrispondente ASCII o semplicemente omessi. In caso di conflitto, sarà aggiunto/incrementato un numero. Il nome utente interno è usato per identificare un utente internamente. È anche il nome predefinito per la cartella home dell'utente. Costituisce anche una parte di URL remoti, ad esempio per tutti i servizi DAV. Con questa impostazione, il comportamento predefinito può essere scavalcato. Le modifiche avranno effetto solo sui nuovo utenti LDAP associati (aggiunti). Lascialo vuoto per ottenere il comportamento predefinito.", "Internal Username Attribute:" : "Attributo nome utente interno:", "Override UUID detection" : "Ignora rilevamento 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." : "In modo predefinito, l'attributo UUID viene rilevato automaticamente. L'attributo UUID è utilizzato per identificare senza alcun dubbio gli utenti e i gruppi LDAP. Inoltre, il nome utente interno sarà creato sulla base dell'UUID, se non è specificato in precedenza. Puoi ignorare l'impostazione e fornire un attributo di tua scelta. Assicurati che l'attributo scelto possa essere ottenuto sia per gli utenti che per i gruppi e che sia univoco. Lascialo vuoto per ottenere il comportamento predefinito. Le modifiche avranno effetto solo sui nuovi utenti e gruppi LDAP associati (aggiunti).", diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json index 3523be2ca02..f1031636b1b 100644 --- a/apps/user_ldap/l10n/it.json +++ b/apps/user_ldap/l10n/it.json @@ -8,6 +8,7 @@ "No action specified" : "Nessuna azione specificata", "No configuration specified" : "Nessuna configurazione specificata", "No data specified" : "Nessun dato specificato", + "Invalid data specified" : "Dati specificati non validi", " Could not set configuration %s" : "Impossibile impostare la configurazione %s", "Action does not exist" : "L'azione non esiste", "Renewing …" : "Rinnovo...", @@ -58,6 +59,10 @@ "Your password will expire today." : "La tua password scadrà oggi.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La tua password scadrà tra %n giorno.","La tua password scadrà oggi tra %n giorni.","La tua password scadrà oggi tra %n giorni."], "LDAP/AD integration" : "Integrazione LDAP/AD", + "_%n group found_::_%n groups found_" : ["%n gruppo trovato","%n gruppi trovati","%n gruppi trovati"], + "> 1000 groups found" : "> 1000 gruppi trovati", + "> 1000 users found" : "> 1000 utenti trovati", + "_%n user found_::_%n users found_" : ["%n utente trovato","%n utenti trovati","%n utenti trovati"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di LDAP.", "Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata", "Invalid Host" : "Host non valido", @@ -84,6 +89,7 @@ "Other Attributes:" : "Altri attributi:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definisce i filtri da applicare quando viene eseguito il tentativo di accesso. \"%%uid\" rimpiazza il nome utente nell'azione di accesso. Esempio: \"uid=%%uid\"", "Test Loginname" : "Prova nome di accesso", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tenta di ricevere un nome di dominio per il nome di login dato e l'attuale filtro di login", "Verify settings" : "Verifica impostazioni", "%s. Server:" : "%s. server:", "Add a new configuration" : "Aggiungi una nuova configurazione", @@ -147,6 +153,8 @@ "One User Base DN per line" : "Un DN base utente per riga", "User Search Attributes" : "Attributi di ricerca utente", "Optional; one attribute per line" : "Opzionale; un attributo per riga", + "Disable users missing from LDAP" : "Disattiva utenti mancanti da LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quando attivo, gli utenti importati da LDAP che poi mancano, saranno disattivati", "Group Display Name Field" : "Campo per la visualizzazione del nome del gruppo", "The LDAP attribute to use to generate the groups's display name." : "L'attributo LDAP da usare per generare il nome visualizzato del gruppo.", "Base Group Tree" : "Struttura base del gruppo", @@ -175,7 +183,27 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Lascia vuoto il nome utente (predefinito). Altrimenti, specifica un attributo LDAP/AD.", "\"$home\" Placeholder Field" : "Segnaposto \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home nella configurazione di un'archiviazione esterna sarà sostituita con il valore dell'attributo specificato", + "User Profile Attributes" : "Attributi profilo utente", + "Phone Field" : "Campo telefono", + "User profile Phone will be set from the specified attribute" : "Il telefono del profilo utente verrà impostato dall'attributo specificato", + "Website Field" : "Campo sito web", + "User profile Website will be set from the specified attribute" : "Il sito web del profilo utente verrà impostato dall'attributo specificato", + "Address Field" : "Campo indirizzo", + "User profile Address will be set from the specified attribute" : "L'indirizzo del profilo utente verrà impostato dall'attributo specificato", + "Twitter Field" : "Campo Twitter", + "User profile Twitter will be set from the specified attribute" : "Il Twitter del profilo utente verrà impostato dall'attributo specificato", + "Fediverse Field" : "Campo fediverso", + "User profile Fediverse will be set from the specified attribute" : "Il fediverso del profilo utente verrà impostato dall'attributo specificato", + "Organisation Field" : "Campo organizzazione", + "User profile Organisation will be set from the specified attribute" : "L'organizzazione del profilo utente verrà impostata dall'attributo specificato", + "Role Field" : "Campo ruolo", + "User profile Role will be set from the specified attribute" : "Il ruolo del profilo utente verrà impostato dall'attributo specificato", + "Headline Field" : "Campo titolo", + "User profile Headline will be set from the specified attribute" : "Il titolo del profilo utente verrà impostato dall'attributo specificato", + "Biography Field" : "Campo biografia", + "User profile Biography will be set from the specified attribute" : "La biografia del profilo utente verrà impostata dall'attributo specificato", "Internal Username" : "Nome utente interno", + "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." : "In modo predefinito, il nome utente interno sarà creato dall'attributo UUID. Ciò assicura che il nome utente sia univoco e che non sia necessario convertire i caratteri. Il nome utente interno consente l'uso solo di determinati caratteri: [ a-zA-Z0-9_.@- ]. Altri caratteri sono sostituiti con il corrispondente ASCII o semplicemente omessi. In caso di conflitto, sarà aggiunto/incrementato un numero. Il nome utente interno è usato per identificare un utente internamente. È anche il nome predefinito per la cartella home dell'utente. Costituisce anche una parte di URL remoti, ad esempio per tutti i servizi DAV. Con questa impostazione, il comportamento predefinito può essere scavalcato. Le modifiche avranno effetto solo sui nuovo utenti LDAP associati (aggiunti). Lascialo vuoto per ottenere il comportamento predefinito.", "Internal Username Attribute:" : "Attributo nome utente interno:", "Override UUID detection" : "Ignora rilevamento 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." : "In modo predefinito, l'attributo UUID viene rilevato automaticamente. L'attributo UUID è utilizzato per identificare senza alcun dubbio gli utenti e i gruppi LDAP. Inoltre, il nome utente interno sarà creato sulla base dell'UUID, se non è specificato in precedenza. Puoi ignorare l'impostazione e fornire un attributo di tua scelta. Assicurati che l'attributo scelto possa essere ottenuto sia per gli utenti che per i gruppi e che sia univoco. Lascialo vuoto per ottenere il comportamento predefinito. Le modifiche avranno effetto solo sui nuovi utenti e gruppi LDAP associati (aggiunti).", diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js index 31556eb272e..a5220e5b5f0 100644 --- a/apps/user_ldap/l10n/pt_BR.js +++ b/apps/user_ldap/l10n/pt_BR.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Um usuário de Base DN por linha", "User Search Attributes" : "Atributos de Busca de Usuário", "Optional; one attribute per line" : "Opcional; um atributo por linha", + "Disable users missing from LDAP" : "Desabilitar usuários ausentes do LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quando ativado, os usuários importados do LDAP que estiverem ausentes serão desativados", "Group Display Name Field" : "Campo de nome de exibição do Grupo", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP a usar para gerar o nome de apresentação do grupo.", "Base Group Tree" : "Árvore de Grupo Base", diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json index 50def2eec46..3e55a77a531 100644 --- a/apps/user_ldap/l10n/pt_BR.json +++ b/apps/user_ldap/l10n/pt_BR.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Um usuário de Base DN por linha", "User Search Attributes" : "Atributos de Busca de Usuário", "Optional; one attribute per line" : "Opcional; um atributo por linha", + "Disable users missing from LDAP" : "Desabilitar usuários ausentes do LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quando ativado, os usuários importados do LDAP que estiverem ausentes serão desativados", "Group Display Name Field" : "Campo de nome de exibição do Grupo", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP a usar para gerar o nome de apresentação do grupo.", "Base Group Tree" : "Árvore de Grupo Base", diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js index 56747ba155c..c675878b3be 100644 --- a/apps/user_ldap/l10n/ru.js +++ b/apps/user_ldap/l10n/ru.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "По одной базовому 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" : "База дерева групп", diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json index f97a17a182a..bdd69e53d8d 100644 --- a/apps/user_ldap/l10n/ru.json +++ b/apps/user_ldap/l10n/ru.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "По одной базовому 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" : "База дерева групп", diff --git a/apps/user_ldap/l10n/sl.js b/apps/user_ldap/l10n/sl.js index c7851807a5e..d035c08d14e 100644 --- a/apps/user_ldap/l10n/sl.js +++ b/apps/user_ldap/l10n/sl.js @@ -10,6 +10,7 @@ OC.L10N.register( "No action specified" : "Ni določenega dejanja", "No configuration specified" : "Ni določenih nastavitev", "No data specified" : "Ni navedenih podatkov", + "Invalid data specified" : "Določeni so neveljavni podatki", " Could not set configuration %s" : "Ni mogoče uveljaviti nastavitev %s", "Action does not exist" : "Dejanje ne obstaja", "Renewing …" : "Poteka ponastavljanje ...", @@ -60,6 +61,10 @@ OC.L10N.register( "Your password will expire today." : "Geslo vam poteče danes!", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Geslo bo poteklo čez %n dan.","Geslo bo poteklo čez %n dneva","Geslo bo poteklo čez %n dni.","Geslo bo poteklo čez %n dni."], "LDAP/AD integration" : "Združevalnik za LDAP / AD", + "_%n group found_::_%n groups found_" : ["%s najdena skupina","%s najdeni skupini","%s najdene skupine","%s najdenih skupin"], + "> 1000 groups found" : "> 1000 najdenih skupin", + "> 1000 users found" : "> 1000 najdenih uporabnikov", + "_%n user found_::_%n users found_" : ["%s najden uporabnik","%s najdena uporabnika","%s najdeni uporabniki","%s najdenih uporabnikov"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Ni mogoče zaznati atributa prikaznega imena. Določiti ga je treba ročno med nastavitvami LDAP.", "Could not find the desired feature" : "Želene zmožnosti ni mogoče najti", "Invalid Host" : "Neveljaven gostitelj", @@ -177,7 +182,10 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Pustite prazno za uporabniško ime (privzeto), sicer navedite atribut LDAP/AD.", "\"$home\" Placeholder Field" : "Polje vsebnika »$home«", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Vrednost »$home« bo znotraj nastavitev zunanje shrambe zamenjaj z vrednostjo določenega atributa.", + "User Profile Attributes" : "Atributi profila uporabnika", + "Phone Field" : "Polje številke telefona", "Internal Username" : "Programsko uporabniško ime", + "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." : "Privzeto je notranje uporabniško ime ustvarjeno po atributu UUID. To zagotavlja, da je uporabniško ime enkratno in da znakov ni treba posebej pretvarjati. Notranje uporabniško ime ima določeno omejitev uporabe izključno znakov [a-zA-Z0-9_.@- ]. Vsi drugi znaki so zamenjani z ustreznimi ASCII zamenjavami, ali pa so enostavno izpuščeni. V primeru spora je k imenu dodana še številka. Notranje uporabniško ime je namenjeno določitvi istovetnosti in je hkrati tudi privzeto ime uporabnikove osebne mape. Je tudi del oddaljenega naslova URL, na primer za vse storitve *DAV. Ta možnost nastavitve privzetega sistema prepiše, spremembe pa se uveljavijo le za na novo dodane (preslikane) uporabnike LDAP. Za privzeto delovanje mora biti polje prazno.", "Internal Username Attribute:" : "Programski atribut uporabniškega imena:", "Override UUID detection" : "Prezri zaznavo 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." : "Privzeto je atribut UUID samodejno zaznan. Uporabljen je za določevanje uporabnikov LDAP in skupin. Notranje uporabniško ime je določeno prav na atributu UUID, če ni določeno drugače. To nastavitev je mogoče prepisati in poslati poljuben atribut. Zagotoviti je treba le, da je ta pridobljen kot enolični podatek za uporabnika ali skupino. Prazno polje določa privzeti način. Spremembe bodo vplivale na novo preslikane (dodane) uporabnike LDAP in skupine.", diff --git a/apps/user_ldap/l10n/sl.json b/apps/user_ldap/l10n/sl.json index 319b83cf762..bc0b19608a2 100644 --- a/apps/user_ldap/l10n/sl.json +++ b/apps/user_ldap/l10n/sl.json @@ -8,6 +8,7 @@ "No action specified" : "Ni določenega dejanja", "No configuration specified" : "Ni določenih nastavitev", "No data specified" : "Ni navedenih podatkov", + "Invalid data specified" : "Določeni so neveljavni podatki", " Could not set configuration %s" : "Ni mogoče uveljaviti nastavitev %s", "Action does not exist" : "Dejanje ne obstaja", "Renewing …" : "Poteka ponastavljanje ...", @@ -58,6 +59,10 @@ "Your password will expire today." : "Geslo vam poteče danes!", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Geslo bo poteklo čez %n dan.","Geslo bo poteklo čez %n dneva","Geslo bo poteklo čez %n dni.","Geslo bo poteklo čez %n dni."], "LDAP/AD integration" : "Združevalnik za LDAP / AD", + "_%n group found_::_%n groups found_" : ["%s najdena skupina","%s najdeni skupini","%s najdene skupine","%s najdenih skupin"], + "> 1000 groups found" : "> 1000 najdenih skupin", + "> 1000 users found" : "> 1000 najdenih uporabnikov", + "_%n user found_::_%n users found_" : ["%s najden uporabnik","%s najdena uporabnika","%s najdeni uporabniki","%s najdenih uporabnikov"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Ni mogoče zaznati atributa prikaznega imena. Določiti ga je treba ročno med nastavitvami LDAP.", "Could not find the desired feature" : "Želene zmožnosti ni mogoče najti", "Invalid Host" : "Neveljaven gostitelj", @@ -175,7 +180,10 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Pustite prazno za uporabniško ime (privzeto), sicer navedite atribut LDAP/AD.", "\"$home\" Placeholder Field" : "Polje vsebnika »$home«", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Vrednost »$home« bo znotraj nastavitev zunanje shrambe zamenjaj z vrednostjo določenega atributa.", + "User Profile Attributes" : "Atributi profila uporabnika", + "Phone Field" : "Polje številke telefona", "Internal Username" : "Programsko uporabniško ime", + "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." : "Privzeto je notranje uporabniško ime ustvarjeno po atributu UUID. To zagotavlja, da je uporabniško ime enkratno in da znakov ni treba posebej pretvarjati. Notranje uporabniško ime ima določeno omejitev uporabe izključno znakov [a-zA-Z0-9_.@- ]. Vsi drugi znaki so zamenjani z ustreznimi ASCII zamenjavami, ali pa so enostavno izpuščeni. V primeru spora je k imenu dodana še številka. Notranje uporabniško ime je namenjeno določitvi istovetnosti in je hkrati tudi privzeto ime uporabnikove osebne mape. Je tudi del oddaljenega naslova URL, na primer za vse storitve *DAV. Ta možnost nastavitve privzetega sistema prepiše, spremembe pa se uveljavijo le za na novo dodane (preslikane) uporabnike LDAP. Za privzeto delovanje mora biti polje prazno.", "Internal Username Attribute:" : "Programski atribut uporabniškega imena:", "Override UUID detection" : "Prezri zaznavo 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." : "Privzeto je atribut UUID samodejno zaznan. Uporabljen je za določevanje uporabnikov LDAP in skupin. Notranje uporabniško ime je določeno prav na atributu UUID, če ni določeno drugače. To nastavitev je mogoče prepisati in poslati poljuben atribut. Zagotoviti je treba le, da je ta pridobljen kot enolični podatek za uporabnika ali skupino. Prazno polje določa privzeti način. Spremembe bodo vplivale na novo preslikane (dodane) uporabnike LDAP in skupine.", diff --git a/apps/user_ldap/l10n/sr.js b/apps/user_ldap/l10n/sr.js index 0dd3fe3c7da..704b28a0dc9 100644 --- a/apps/user_ldap/l10n/sr.js +++ b/apps/user_ldap/l10n/sr.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Један Корисников јединствени назив 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" : "Стабло основне групе", diff --git a/apps/user_ldap/l10n/sr.json b/apps/user_ldap/l10n/sr.json index 4a743428361..d41b0005aa3 100644 --- a/apps/user_ldap/l10n/sr.json +++ b/apps/user_ldap/l10n/sr.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Један Корисников јединствени назив 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" : "Стабло основне групе", diff --git a/apps/user_ldap/l10n/sv.js b/apps/user_ldap/l10n/sv.js index a735c6d53dc..f7b5a5cb38d 100644 --- a/apps/user_ldap/l10n/sv.js +++ b/apps/user_ldap/l10n/sv.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "En användarstart-DN per rad", "User Search Attributes" : "Användarsökningsattribut", "Optional; one attribute per line" : "Valfritt; ett attribut per rad", + "Disable users missing from LDAP" : "Inaktivera användare som saknas via LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "När aktiverad kommer användare som importerats från LDAP som sedan saknas att inaktiveras", "Group Display Name Field" : "Attribut för gruppnamn", "The LDAP attribute to use to generate the groups's display name." : "LDAP-attributet som ska användas för att generera gruppens visningsnamn.", "Base Group Tree" : "Bas för grupper i katalogtjänst", diff --git a/apps/user_ldap/l10n/sv.json b/apps/user_ldap/l10n/sv.json index 3b629de3d5e..b81cf360a2b 100644 --- a/apps/user_ldap/l10n/sv.json +++ b/apps/user_ldap/l10n/sv.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "En användarstart-DN per rad", "User Search Attributes" : "Användarsökningsattribut", "Optional; one attribute per line" : "Valfritt; ett attribut per rad", + "Disable users missing from LDAP" : "Inaktivera användare som saknas via LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "När aktiverad kommer användare som importerats från LDAP som sedan saknas att inaktiveras", "Group Display Name Field" : "Attribut för gruppnamn", "The LDAP attribute to use to generate the groups's display name." : "LDAP-attributet som ska användas för att generera gruppens visningsnamn.", "Base Group Tree" : "Bas för grupper i katalogtjänst", diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js index cdf8ff0a098..68d504c4dee 100644 --- a/apps/user_ldap/l10n/tr.js +++ b/apps/user_ldap/l10n/tr.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Her Satıra Bir Kullanıcı Base DN", "User Search Attributes" : "Kullanıcı arama öznitelikleri", "Optional; one attribute per line" : "İsteğe bağlı; her satıra bir öznitelik", + "Disable users missing from LDAP" : "LDAP üzerinde bulunmayan kullanıcılar devre dışı bırakılsın", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Bu seçenek etkinleştirildiğinde, LDAP üzerinden içe aktarılmış ancak daha sonra kaybolmuş kullanıcılar devre dışı bırakılır", "Group Display Name Field" : "Görüntülenecek Grup Adı Alanı", "The LDAP attribute to use to generate the groups's display name." : "Görüntülenecek grup adını oluşturmak için kullanılacak LDAP özniteliği.", "Base Group Tree" : "Temel Grup Ağacı", diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json index 4c07f79e6db..99eeb463f7a 100644 --- a/apps/user_ldap/l10n/tr.json +++ b/apps/user_ldap/l10n/tr.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Her Satıra Bir Kullanıcı Base DN", "User Search Attributes" : "Kullanıcı arama öznitelikleri", "Optional; one attribute per line" : "İsteğe bağlı; her satıra bir öznitelik", + "Disable users missing from LDAP" : "LDAP üzerinde bulunmayan kullanıcılar devre dışı bırakılsın", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Bu seçenek etkinleştirildiğinde, LDAP üzerinden içe aktarılmış ancak daha sonra kaybolmuş kullanıcılar devre dışı bırakılır", "Group Display Name Field" : "Görüntülenecek Grup Adı Alanı", "The LDAP attribute to use to generate the groups's display name." : "Görüntülenecek grup adını oluşturmak için kullanılacak LDAP özniteliği.", "Base Group Tree" : "Temel Grup Ağacı", diff --git a/apps/user_ldap/l10n/uk.js b/apps/user_ldap/l10n/uk.js index 391f41ff995..54503516376 100644 --- a/apps/user_ldap/l10n/uk.js +++ b/apps/user_ldap/l10n/uk.js @@ -133,7 +133,7 @@ OC.L10N.register( "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" : "Налаштування Активне", + "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 сервера.", @@ -189,7 +189,7 @@ OC.L10N.register( "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! Ніколи не очищайте зіставлення у виробничому середовищі, лише на стадії тестування чи експерименту.", + "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" }, diff --git a/apps/user_ldap/l10n/uk.json b/apps/user_ldap/l10n/uk.json index 3894b315880..b642ec2129d 100644 --- a/apps/user_ldap/l10n/uk.json +++ b/apps/user_ldap/l10n/uk.json @@ -131,7 +131,7 @@ "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" : "Налаштування Активне", + "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 сервера.", @@ -187,7 +187,7 @@ "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! Ніколи не очищайте зіставлення у виробничому середовищі, лише на стадії тестування чи експерименту.", + "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" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" diff --git a/apps/user_ldap/l10n/zh_CN.js b/apps/user_ldap/l10n/zh_CN.js index 847b0d28330..fac005b2891 100644 --- a/apps/user_ldap/l10n/zh_CN.js +++ b/apps/user_ldap/l10n/zh_CN.js @@ -4,12 +4,13 @@ OC.L10N.register( "Failed to clear the mappings." : "清除映射失败。", "Failed to delete the server configuration" : "删除服务器配置失败", "Invalid configuration: Anonymous binding is not allowed." : "配置无效:不允许匿名绑定。", - "Valid configuration, connection established!" : "配置有效,连接成功!", + "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 …" : "正在更新……", @@ -60,6 +61,10 @@ OC.L10N.register( "Your password will expire today." : "您的明码将在今天过期", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["您的密码会在%n天后过期"], "LDAP/AD integration" : "LDAP/AD 集成", + "_%n group found_::_%n groups found_" : ["已找到%n个组"], + "> 1000 groups found" : "已找到>1000个组", + "> 1000 users found" : "已找到>1000个用户", + "_%n user found_::_%n users found_" : ["已找到%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" : "无效的主机", @@ -86,6 +91,7 @@ OC.L10N.register( "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" : "增加一个新的配置", @@ -149,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "每行一个用户基准判别名", "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" : "基础组树", @@ -177,9 +185,27 @@ OC.L10N.register( "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" : "联邦宇宙字段", "User profile Fediverse will be set from the specified attribute" : "用户个人资料的联邦宇宙将从指定的属性设定", + "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." : "ownCloud 默认会自动检测 UUID 属性。UUID 属性用来无误地识别 LDAP 用户和组。同时,如果上面没有特别设置,内部用户名也基于 UUID 创建。也可以覆盖设置,直接指定一个属性。但一定要确保指定的属性取得的用户和组是唯一的。留空,则执行默认操作。更改只影响新映射(或增加)的 LDAP 用户和组。", diff --git a/apps/user_ldap/l10n/zh_CN.json b/apps/user_ldap/l10n/zh_CN.json index 7599b62a8ac..74a32fb694a 100644 --- a/apps/user_ldap/l10n/zh_CN.json +++ b/apps/user_ldap/l10n/zh_CN.json @@ -2,12 +2,13 @@ "Failed to clear the mappings." : "清除映射失败。", "Failed to delete the server configuration" : "删除服务器配置失败", "Invalid configuration: Anonymous binding is not allowed." : "配置无效:不允许匿名绑定。", - "Valid configuration, connection established!" : "配置有效,连接成功!", + "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 …" : "正在更新……", @@ -58,6 +59,10 @@ "Your password will expire today." : "您的明码将在今天过期", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["您的密码会在%n天后过期"], "LDAP/AD integration" : "LDAP/AD 集成", + "_%n group found_::_%n groups found_" : ["已找到%n个组"], + "> 1000 groups found" : "已找到>1000个组", + "> 1000 users found" : "已找到>1000个用户", + "_%n user found_::_%n users found_" : ["已找到%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" : "无效的主机", @@ -84,6 +89,7 @@ "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" : "增加一个新的配置", @@ -147,6 +153,8 @@ "One User Base DN per line" : "每行一个用户基准判别名", "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" : "基础组树", @@ -175,9 +183,27 @@ "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" : "联邦宇宙字段", "User profile Fediverse will be set from the specified attribute" : "用户个人资料的联邦宇宙将从指定的属性设定", + "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." : "ownCloud 默认会自动检测 UUID 属性。UUID 属性用来无误地识别 LDAP 用户和组。同时,如果上面没有特别设置,内部用户名也基于 UUID 创建。也可以覆盖设置,直接指定一个属性。但一定要确保指定的属性取得的用户和组是唯一的。留空,则执行默认操作。更改只影响新映射(或增加)的 LDAP 用户和组。", diff --git a/apps/user_ldap/l10n/zh_HK.js b/apps/user_ldap/l10n/zh_HK.js index f8e39d59e32..9c06929c251 100644 --- a/apps/user_ldap/l10n/zh_HK.js +++ b/apps/user_ldap/l10n/zh_HK.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "一行一個用戶 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" : "基本群組樹", diff --git a/apps/user_ldap/l10n/zh_HK.json b/apps/user_ldap/l10n/zh_HK.json index 31b7e606335..1a24b8c0f11 100644 --- a/apps/user_ldap/l10n/zh_HK.json +++ b/apps/user_ldap/l10n/zh_HK.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "一行一個用戶 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" : "基本群組樹", diff --git a/apps/user_ldap/l10n/zh_TW.js b/apps/user_ldap/l10n/zh_TW.js index bf4569b9e61..eab5f928228 100644 --- a/apps/user_ldap/l10n/zh_TW.js +++ b/apps/user_ldap/l10n/zh_TW.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "一行一個使用者 Base DN", "User Search Attributes" : "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", diff --git a/apps/user_ldap/l10n/zh_TW.json b/apps/user_ldap/l10n/zh_TW.json index 5312e5718b7..4155fe4d91d 100644 --- a/apps/user_ldap/l10n/zh_TW.json +++ b/apps/user_ldap/l10n/zh_TW.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "一行一個使用者 Base DN", "User Search Attributes" : "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", diff --git a/apps/user_ldap/lib/AppInfo/Application.php b/apps/user_ldap/lib/AppInfo/Application.php index 757ac141d3d..d6fb062a028 100644 --- a/apps/user_ldap/lib/AppInfo/Application.php +++ b/apps/user_ldap/lib/AppInfo/Application.php @@ -59,7 +59,6 @@ use OCP\Notification\IManager as INotificationManager; use OCP\Share\IManager as IShareManager; use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; class Application extends App implements IBootstrap { public function __construct() { @@ -120,7 +119,6 @@ class Application extends App implements IBootstrap { $context->injectFn(function ( INotificationManager $notificationManager, IAppContainer $appContainer, - EventDispatcherInterface $legacyDispatcher, IEventDispatcher $dispatcher, IGroupManager $groupManager, User_Proxy $userBackend, @@ -136,7 +134,7 @@ class Application extends App implements IBootstrap { $groupManager->addBackend($groupBackend); $userBackendRegisteredEvent = new UserBackendRegistered($userBackend, $userPluginManager); - $legacyDispatcher->dispatch('OCA\\User_LDAP\\User\\User::postLDAPBackendAdded', $userBackendRegisteredEvent); + $dispatcher->dispatch('OCA\\User_LDAP\\User\\User::postLDAPBackendAdded', $userBackendRegisteredEvent); $dispatcher->dispatchTyped($userBackendRegisteredEvent); $groupBackendRegisteredEvent = new GroupBackendRegistered($groupBackend, $groupPluginManager); $dispatcher->dispatchTyped($groupBackendRegisteredEvent); @@ -153,7 +151,7 @@ class Application extends App implements IBootstrap { ); } - private function registerBackendDependents(IAppContainer $appContainer, EventDispatcherInterface $dispatcher) { + private function registerBackendDependents(IAppContainer $appContainer, IEventDispatcher $dispatcher) { $dispatcher->addListener( 'OCA\\Files_External::loadAdditionalBackends', function () use ($appContainer) { diff --git a/apps/user_ldap/lib/Configuration.php b/apps/user_ldap/lib/Configuration.php index 5a0fcc79ab8..36258f5ad27 100644 --- a/apps/user_ldap/lib/Configuration.php +++ b/apps/user_ldap/lib/Configuration.php @@ -115,6 +115,7 @@ class Configuration { 'ldapExpertUsernameAttr' => null, 'ldapExpertUUIDUserAttr' => null, 'ldapExpertUUIDGroupAttr' => null, + 'markRemnantsAsDisabled' => false, 'lastJpegPhotoLookup' => null, 'ldapNestedGroups' => false, 'ldapPagingSize' => null, @@ -468,6 +469,7 @@ class Configuration { 'ldap_expert_uuid_group_attr' => '', 'has_memberof_filter_support' => 0, 'use_memberof_to_detect_membership' => 1, + 'ldap_mark_remnants_as_disabled' => 0, 'last_jpegPhoto_lookup' => 0, 'ldap_nested_groups' => 0, 'ldap_paging_size' => 500, @@ -543,6 +545,7 @@ class Configuration { 'ldap_expert_uuid_group_attr' => 'ldapExpertUUIDGroupAttr', 'has_memberof_filter_support' => 'hasMemberOfFilterSupport', 'use_memberof_to_detect_membership' => 'useMemberOfToDetectMembership', + 'ldap_mark_remnants_as_disabled' => 'markRemnantsAsDisabled', 'last_jpegPhoto_lookup' => 'lastJpegPhotoLookup', 'ldap_nested_groups' => 'ldapNestedGroups', 'ldap_paging_size' => 'ldapPagingSize', diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php index 861fb1e246b..b47e51fdf70 100644 --- a/apps/user_ldap/lib/Connection.php +++ b/apps/user_ldap/lib/Connection.php @@ -63,6 +63,7 @@ use Psr\Log\LoggerInterface; * @property string ldapEmailAttribute * @property string ldapExtStorageHomeAttribute * @property string homeFolderNamingRule + * @property bool|string markRemnantsAsDisabled * @property bool|string ldapNestedGroups * @property string[] ldapBaseGroups * @property string ldapGroupFilter diff --git a/apps/user_ldap/lib/Controller/ConfigAPIController.php b/apps/user_ldap/lib/Controller/ConfigAPIController.php index e408d03fcd5..23c35895c94 100644 --- a/apps/user_ldap/lib/Controller/ConfigAPIController.php +++ b/apps/user_ldap/lib/Controller/ConfigAPIController.php @@ -29,6 +29,7 @@ use OC\Security\IdentityProof\Manager; use OCA\User_LDAP\Configuration; use OCA\User_LDAP\ConnectionFactory; use OCA\User_LDAP\Helper; +use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSBadRequestException; use OCP\AppFramework\OCS\OCSException; @@ -76,42 +77,10 @@ class ConfigAPIController extends OCSController { } /** - * Creates a new (empty) configuration and returns the resulting prefix - * - * Example: curl -X POST -H "OCS-APIREQUEST: true" -u $admin:$password \ - * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config - * - * results in: - * - * <?xml version="1.0"?> - * <ocs> - * <meta> - * <status>ok</status> - * <statuscode>200</statuscode> - * <message>OK</message> - * </meta> - * <data> - * <configID>s40</configID> - * </data> - * </ocs> - * - * Failing example: if an exception is thrown (e.g. Database connection lost) - * the detailed error will be logged. The output will then look like: - * - * <?xml version="1.0"?> - * <ocs> - * <meta> - * <status>failure</status> - * <statuscode>999</statuscode> - * <message>An issue occurred when creating the new config.</message> - * </meta> - * <data/> - * </ocs> - * - * For JSON output provide the format=json parameter + * Create a new (empty) configuration and return the resulting prefix * * @AuthorizedAdminSetting(settings=OCA\User_LDAP\Settings\Admin) - * @return DataResponse + * @return DataResponse<Http::STATUS_OK, array{configID: string}, array{}> * @throws OCSException */ public function create() { @@ -128,27 +97,15 @@ class ConfigAPIController extends OCSController { } /** - * Deletes a LDAP configuration, if present. - * - * Example: - * curl -X DELETE -H "OCS-APIREQUEST: true" -u $admin:$password \ - * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config/s60 - * - * <?xml version="1.0"?> - * <ocs> - * <meta> - * <status>ok</status> - * <statuscode>200</statuscode> - * <message>OK</message> - * </meta> - * <data/> - * </ocs> + * Delete a LDAP configuration * * @AuthorizedAdminSetting(settings=OCA\User_LDAP\Settings\Admin) - * @param string $configID - * @return DataResponse - * @throws OCSBadRequestException + * @param string $configID ID of the config + * @return DataResponse<Http::STATUS_OK, array<empty>, array{}> * @throws OCSException + * @throws OCSNotFoundException Config not found + * + * 200: Config deleted successfully */ public function delete($configID) { try { @@ -167,28 +124,17 @@ class ConfigAPIController extends OCSController { } /** - * Modifies a configuration - * - * Example: - * curl -X PUT -d "configData[ldapHost]=ldaps://my.ldap.server&configData[ldapPort]=636" \ - * -H "OCS-APIREQUEST: true" -u $admin:$password \ - * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config/s60 - * - * <?xml version="1.0"?> - * <ocs> - * <meta> - * <status>ok</status> - * <statuscode>200</statuscode> - * <message>OK</message> - * </meta> - * <data/> - * </ocs> + * Modify a configuration * * @AuthorizedAdminSetting(settings=OCA\User_LDAP\Settings\Admin) - * @param string $configID - * @param array $configData - * @return DataResponse + * @param string $configID ID of the config + * @param array<string, mixed> $configData New config + * @return DataResponse<Http::STATUS_OK, array<empty>, array{}> * @throws OCSException + * @throws OCSBadRequestException Modifying config is not possible + * @throws OCSNotFoundException Config not found + * + * 200: Config returned */ public function modify($configID, $configData) { try { @@ -220,8 +166,9 @@ class ConfigAPIController extends OCSController { } /** - * Retrieves a configuration + * Get a configuration * + * Output can look like this: * <?xml version="1.0"?> * <ocs> * <meta> @@ -285,10 +232,13 @@ class ConfigAPIController extends OCSController { * </ocs> * * @AuthorizedAdminSetting(settings=OCA\User_LDAP\Settings\Admin) - * @param string $configID - * @param bool|string $showPassword - * @return DataResponse + * @param string $configID ID of the config + * @param bool $showPassword Whether to show the password + * @return DataResponse<Http::STATUS_OK, array<string, mixed>, array{}> * @throws OCSException + * @throws OCSNotFoundException Config not found + * + * 200: Config returned */ public function show($configID, $showPassword = false) { try { @@ -296,7 +246,7 @@ class ConfigAPIController extends OCSController { $config = new Configuration($configID); $data = $config->getConfiguration(); - if (!(int)$showPassword) { + if (!$showPassword) { $data['ldapAgentPassword'] = '***'; } foreach ($data as $key => $value) { diff --git a/apps/user_ldap/lib/User/DeletedUsersIndex.php b/apps/user_ldap/lib/User/DeletedUsersIndex.php index 1e057987eef..d679ca86d93 100644 --- a/apps/user_ldap/lib/User/DeletedUsersIndex.php +++ b/apps/user_ldap/lib/User/DeletedUsersIndex.php @@ -24,6 +24,7 @@ namespace OCA\User_LDAP\User; use OCA\User_LDAP\Mapping\UserMapping; +use OCP\IConfig; use OCP\Share\IManager; /** @@ -31,24 +32,16 @@ use OCP\Share\IManager; * @package OCA\User_LDAP */ class DeletedUsersIndex { - /** - * @var \OCP\IConfig $config - */ - protected $config; - - /** - * @var \OCA\User_LDAP\Mapping\UserMapping $mapping - */ - protected $mapping; + protected IConfig $config; + protected UserMapping $mapping; + protected ?array $deletedUsers = null; + private IManager $shareManager; - /** - * @var array $deletedUsers - */ - protected $deletedUsers; - /** @var IManager */ - private $shareManager; - - public function __construct(\OCP\IConfig $config, UserMapping $mapping, IManager $shareManager) { + public function __construct( + IConfig $config, + UserMapping $mapping, + IManager $shareManager + ) { $this->config = $config; $this->mapping = $mapping; $this->shareManager = $shareManager; @@ -56,11 +49,10 @@ class DeletedUsersIndex { /** * reads LDAP users marked as deleted from the database - * @return \OCA\User_LDAP\User\OfflineUser[] + * @return OfflineUser[] */ - private function fetchDeletedUsers() { - $deletedUsers = $this->config->getUsersForUserValue( - 'user_ldap', 'isDeleted', '1'); + private function fetchDeletedUsers(): array { + $deletedUsers = $this->config->getUsersForUserValue('user_ldap', 'isDeleted', '1'); $userObjects = []; foreach ($deletedUsers as $user) { @@ -73,9 +65,9 @@ class DeletedUsersIndex { /** * returns all LDAP users that are marked as deleted - * @return \OCA\User_LDAP\User\OfflineUser[] + * @return OfflineUser[] */ - public function getUsers() { + public function getUsers(): array { if (is_array($this->deletedUsers)) { return $this->deletedUsers; } @@ -84,9 +76,8 @@ class DeletedUsersIndex { /** * whether at least one user was detected as deleted - * @return bool */ - public function hasUsers() { + public function hasUsers(): bool { if (!is_array($this->deletedUsers)) { $this->fetchDeletedUsers(); } @@ -96,12 +87,10 @@ class DeletedUsersIndex { /** * marks a user as deleted * - * @param string $ocName * @throws \OCP\PreConditionNotMetException */ - public function markUser($ocName) { - $curValue = $this->config->getUserValue($ocName, 'user_ldap', 'isDeleted', '0'); - if ($curValue === '1') { + public function markUser(string $ocName): void { + if ($this->isUserMarked($ocName)) { // the user is already marked, do not write to DB again return; } @@ -109,4 +98,8 @@ class DeletedUsersIndex { $this->config->setUserValue($ocName, 'user_ldap', 'foundDeleted', (string)time()); $this->deletedUsers = null; } + + public function isUserMarked(string $ocName): bool { + return ($this->config->getUserValue($ocName, 'user_ldap', 'isDeleted', '0') === '1'); + } } diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php index 772b2f46095..f9ae6bbee66 100644 --- a/apps/user_ldap/lib/User_LDAP.php +++ b/apps/user_ldap/lib/User_LDAP.php @@ -42,6 +42,7 @@ use OC\ServerNotAvailableException; use OC\User\Backend; use OC\User\NoUserException; use OCA\User_LDAP\Exceptions\NotOnLDAP; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; use OCP\IConfig; @@ -50,34 +51,32 @@ use OCP\IUserSession; use OCP\Notification\IManager as INotificationManager; use OCP\User\Backend\ICountMappedUsersBackend; use OCP\User\Backend\ICountUsersBackend; +use OCP\User\Backend\IProvideEnabledStateBackend; use OCP\UserInterface; use Psr\Log\LoggerInterface; -class User_LDAP extends BackendUtility implements IUserBackend, UserInterface, IUserLDAP, ICountUsersBackend, ICountMappedUsersBackend { - /** @var \OCP\IConfig */ - protected $ocConfig; - - /** @var INotificationManager */ - protected $notificationManager; - - /** @var UserPluginManager */ - protected $userPluginManager; - - /** @var LoggerInterface */ - protected $logger; - - /** - * @param Access $access - * @param \OCP\IConfig $ocConfig - * @param \OCP\Notification\IManager $notificationManager - * @param IUserSession $userSession - */ - public function __construct(Access $access, IConfig $ocConfig, INotificationManager $notificationManager, IUserSession $userSession, UserPluginManager $userPluginManager) { +class User_LDAP extends BackendUtility implements IUserBackend, UserInterface, IUserLDAP, ICountUsersBackend, ICountMappedUsersBackend, IProvideEnabledStateBackend { + protected IConfig $ocConfig; + protected INotificationManager $notificationManager; + protected UserPluginManager $userPluginManager; + protected LoggerInterface $logger; + protected DeletedUsersIndex $deletedUsersIndex; + + public function __construct( + Access $access, + IConfig $ocConfig, + INotificationManager $notificationManager, + IUserSession $userSession, + UserPluginManager $userPluginManager, + LoggerInterface $logger, + DeletedUsersIndex $deletedUsersIndex, + ) { parent::__construct($access); $this->ocConfig = $ocConfig; $this->notificationManager = $notificationManager; $this->userPluginManager = $userPluginManager; - $this->logger = \OC::$server->get(LoggerInterface::class); + $this->logger = $logger; + $this->deletedUsersIndex = $deletedUsersIndex; } /** @@ -392,13 +391,13 @@ class User_LDAP extends BackendUtility implements IUserBackend, UserInterface, I } } - $marked = (int)$this->ocConfig->getUserValue($uid, 'user_ldap', 'isDeleted', 0); - if ($marked === 0) { + $marked = $this->deletedUsersIndex->isUserMarked($uid); + if (!$marked) { try { $user = $this->access->userManager->get($uid); if (($user instanceof User) && !$this->userExistsOnLDAP($uid, true)) { $user->markUser(); - $marked = 1; + $marked = true; } } catch (\Exception $e) { $this->logger->debug( @@ -406,7 +405,7 @@ class User_LDAP extends BackendUtility implements IUserBackend, UserInterface, I ['app' => 'user_ldap', 'exception' => $e] ); } - if ($marked === 0) { + if (!$marked) { $this->logger->notice( 'User '.$uid . ' is not marked as deleted, not cleaning up.', ['app' => 'user_ldap'] @@ -669,4 +668,21 @@ class User_LDAP extends BackendUtility implements IUserBackend, UserInterface, I } return false; } + + public function isUserEnabled(string $uid, callable $queryDatabaseValue): bool { + if ($this->deletedUsersIndex->isUserMarked($uid) && ((int)$this->access->connection->markRemnantsAsDisabled === 1)) { + return false; + } else { + return $queryDatabaseValue(); + } + } + + public function setUserEnabled(string $uid, bool $enabled, callable $queryDatabaseValue, callable $setDatabaseValue): bool { + $setDatabaseValue($enabled); + return $enabled; + } + + public function getDisabledUserList(int $offset = 0, ?int $limit = null): array { + throw new \Exception('This is implemented directly in User_Proxy'); + } } diff --git a/apps/user_ldap/lib/User_Proxy.php b/apps/user_ldap/lib/User_Proxy.php index b07c632eeeb..0449c89bd24 100644 --- a/apps/user_ldap/lib/User_Proxy.php +++ b/apps/user_ldap/lib/User_Proxy.php @@ -31,20 +31,23 @@ */ namespace OCA\User_LDAP; +use OCA\User_LDAP\User\DeletedUsersIndex; +use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; use OCP\IConfig; use OCP\IUserBackend; use OCP\IUserSession; use OCP\Notification\IManager as INotificationManager; +use OCP\UserInterface; use OCP\User\Backend\ICountMappedUsersBackend; use OCP\User\Backend\ICountUsersBackend; -use OCP\UserInterface; +use OCP\User\Backend\IProvideEnabledStateBackend; +use Psr\Log\LoggerInterface; -class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP, ICountUsersBackend, ICountMappedUsersBackend { - /** @var array<string,User_LDAP> */ - private $backends = []; - /** @var ?User_LDAP */ - private $refBackend = null; +class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP, ICountUsersBackend, ICountMappedUsersBackend, IProvideEnabledStateBackend { + /** @var User_LDAP[] */ + private array $backends = []; + private ?User_LDAP $refBackend = null; private bool $isSetUp = false; private Helper $helper; @@ -52,6 +55,8 @@ class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP private INotificationManager $notificationManager; private IUserSession $userSession; private UserPluginManager $userPluginManager; + private LoggerInterface $logger; + private DeletedUsersIndex $deletedUsersIndex; public function __construct( Helper $helper, @@ -60,7 +65,9 @@ class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP IConfig $ocConfig, INotificationManager $notificationManager, IUserSession $userSession, - UserPluginManager $userPluginManager + UserPluginManager $userPluginManager, + LoggerInterface $logger, + DeletedUsersIndex $deletedUsersIndex, ) { parent::__construct($ldap, $accessFactory); $this->helper = $helper; @@ -68,6 +75,8 @@ class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP $this->notificationManager = $notificationManager; $this->userSession = $userSession; $this->userPluginManager = $userPluginManager; + $this->logger = $logger; + $this->deletedUsersIndex = $deletedUsersIndex; } protected function setup(): void { @@ -77,8 +86,15 @@ class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP $serverConfigPrefixes = $this->helper->getServerConfigurationPrefixes(true); foreach ($serverConfigPrefixes as $configPrefix) { - $this->backends[$configPrefix] = - new User_LDAP($this->getAccess($configPrefix), $this->ocConfig, $this->notificationManager, $this->userSession, $this->userPluginManager); + $this->backends[$configPrefix] = new User_LDAP( + $this->getAccess($configPrefix), + $this->ocConfig, + $this->notificationManager, + $this->userSession, + $this->userPluginManager, + $this->logger, + $this->deletedUsersIndex, + ); if (is_null($this->refBackend)) { $this->refBackend = &$this->backends[$configPrefix]; @@ -438,4 +454,23 @@ class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP public function createUser($username, $password) { return $this->handleRequest($username, 'createUser', [$username, $password]); } + + public function isUserEnabled(string $uid, callable $queryDatabaseValue): bool { + return $this->handleRequest($uid, 'isUserEnabled', [$uid, $queryDatabaseValue]); + } + + public function setUserEnabled(string $uid, bool $enabled, callable $queryDatabaseValue, callable $setDatabaseValue): bool { + return $this->handleRequest($uid, 'setUserEnabled', [$uid, $enabled, $queryDatabaseValue, $setDatabaseValue]); + } + + public function getDisabledUserList(int $offset = 0, ?int $limit = null): array { + return array_map( + fn (OfflineUser $user) => $user->getOCName(), + array_slice( + $this->deletedUsersIndex->getUsers(), + $offset, + $limit + ) + ); + } } diff --git a/apps/user_ldap/openapi.json b/apps/user_ldap/openapi.json new file mode 100644 index 00000000000..43d2d8016b5 --- /dev/null +++ b/apps/user_ldap/openapi.json @@ -0,0 +1,384 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "user_ldap", + "version": "0.0.1", + "description": "This application enables administrators to connect Nextcloud to an LDAP-based user directory.", + "license": { + "name": "agpl" + } + }, + "components": { + "securitySchemes": { + "basic_auth": { + "type": "http", + "scheme": "basic" + }, + "bearer_auth": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "OCSMeta": { + "type": "object", + "required": [ + "status", + "statuscode" + ], + "properties": { + "status": { + "type": "string" + }, + "statuscode": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "totalitems": { + "type": "string" + }, + "itemsperpage": { + "type": "string" + } + } + } + } + }, + "paths": { + "/ocs/v2.php/apps/user_ldap/api/v1/config": { + "post": { + "operationId": "configapi-create", + "summary": "Create a new (empty) configuration and return the resulting prefix", + "description": "This endpoint requires admin access", + "tags": [ + "configapi" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "OCS-APIRequest", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "true" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "configID" + ], + "properties": { + "configID": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/user_ldap/api/v1/config/{configID}": { + "get": { + "operationId": "configapi-show", + "summary": "Get a configuration", + "description": "Output can look like this: <?xml version=\"1.0\"?> <ocs> <meta> <status>ok</status> <statuscode>200</statuscode> <message>OK</message> </meta> <data> <ldapHost>ldaps://my.ldap.server</ldapHost> <ldapPort>7770</ldapPort> <ldapBackupHost></ldapBackupHost> <ldapBackupPort></ldapBackupPort> <ldapBase>ou=small,dc=my,dc=ldap,dc=server</ldapBase> <ldapBaseUsers>ou=users,ou=small,dc=my,dc=ldap,dc=server</ldapBaseUsers> <ldapBaseGroups>ou=small,dc=my,dc=ldap,dc=server</ldapBaseGroups> <ldapAgentName>cn=root,dc=my,dc=ldap,dc=server</ldapAgentName> <ldapAgentPassword>clearTextWithShowPassword=1</ldapAgentPassword> <ldapTLS>1</ldapTLS> <turnOffCertCheck>0</turnOffCertCheck> <ldapIgnoreNamingRules/> <ldapUserDisplayName>displayname</ldapUserDisplayName> <ldapUserDisplayName2>uid</ldapUserDisplayName2> <ldapUserFilterObjectclass>inetOrgPerson</ldapUserFilterObjectclass> <ldapUserFilterGroups></ldapUserFilterGroups> <ldapUserFilter>(&(objectclass=nextcloudUser)(nextcloudEnabled=TRUE))</ldapUserFilter> <ldapUserFilterMode>1</ldapUserFilterMode> <ldapGroupFilter>(&(|(objectclass=nextcloudGroup)))</ldapGroupFilter> <ldapGroupFilterMode>0</ldapGroupFilterMode> <ldapGroupFilterObjectclass>nextcloudGroup</ldapGroupFilterObjectclass> <ldapGroupFilterGroups></ldapGroupFilterGroups> <ldapGroupDisplayName>cn</ldapGroupDisplayName> <ldapGroupMemberAssocAttr>memberUid</ldapGroupMemberAssocAttr> <ldapLoginFilter>(&(|(objectclass=inetOrgPerson))(uid=%uid))</ldapLoginFilter> <ldapLoginFilterMode>0</ldapLoginFilterMode> <ldapLoginFilterEmail>0</ldapLoginFilterEmail> <ldapLoginFilterUsername>1</ldapLoginFilterUsername> <ldapLoginFilterAttributes></ldapLoginFilterAttributes> <ldapQuotaAttribute></ldapQuotaAttribute> <ldapQuotaDefault></ldapQuotaDefault> <ldapEmailAttribute>mail</ldapEmailAttribute> <ldapCacheTTL>20</ldapCacheTTL> <ldapUuidUserAttribute>auto</ldapUuidUserAttribute> <ldapUuidGroupAttribute>auto</ldapUuidGroupAttribute> <ldapOverrideMainServer></ldapOverrideMainServer> <ldapConfigurationActive>1</ldapConfigurationActive> <ldapAttributesForUserSearch>uid;sn;givenname</ldapAttributesForUserSearch> <ldapAttributesForGroupSearch></ldapAttributesForGroupSearch> <ldapExperiencedAdmin>0</ldapExperiencedAdmin> <homeFolderNamingRule></homeFolderNamingRule> <hasMemberOfFilterSupport></hasMemberOfFilterSupport> <useMemberOfToDetectMembership>1</useMemberOfToDetectMembership> <ldapExpertUsernameAttr>uid</ldapExpertUsernameAttr> <ldapExpertUUIDUserAttr>uid</ldapExpertUUIDUserAttr> <ldapExpertUUIDGroupAttr></ldapExpertUUIDGroupAttr> <lastJpegPhotoLookup>0</lastJpegPhotoLookup> <ldapNestedGroups>0</ldapNestedGroups> <ldapPagingSize>500</ldapPagingSize> <turnOnPasswordChange>1</turnOnPasswordChange> <ldapDynamicGroupMemberURL></ldapDynamicGroupMemberURL> </data> </ocs>\nThis endpoint requires admin access", + "tags": [ + "configapi" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "showPassword", + "in": "query", + "description": "Whether to show the password", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "configID", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "true" + } + } + ], + "responses": { + "200": { + "description": "Config returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Config not found", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + } + } + } + }, + "put": { + "operationId": "configapi-modify", + "summary": "Modify a configuration", + "description": "This endpoint requires admin access", + "tags": [ + "configapi" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "configData", + "in": "query", + "description": "New config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "configID", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "true" + } + } + ], + "responses": { + "200": { + "description": "Config returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "400": { + "description": "Modifying config is not possible", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + } + }, + "404": { + "description": "Config not found", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + } + } + } + }, + "delete": { + "operationId": "configapi-delete", + "summary": "Delete a LDAP configuration", + "description": "This endpoint requires admin access", + "tags": [ + "configapi" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "configID", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "true" + } + } + ], + "responses": { + "200": { + "description": "Config deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "404": { + "description": "Config not found", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + } + } + } + } + } + }, + "tags": [] +}
\ No newline at end of file diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php index 916ff84b82a..ae4091288b5 100644 --- a/apps/user_ldap/templates/settings.php +++ b/apps/user_ldap/templates/settings.php @@ -1,6 +1,6 @@ <?php -style('user_ldap', 'vendor/ui-multiselect/jquery.multiselect'); +style('user_ldap', 'vendor/ui-multiselect/jquery.multiselect'); script('user_ldap', [ 'vendor/ui-multiselect/src/jquery.multiselect', @@ -69,7 +69,7 @@ style('user_ldap', 'settings'); if (!function_exists('ldap_connect')) { print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>'); } - ?> +?> <?php require_once __DIR__ . '/part.wizard-server.php'; ?> <?php require_once __DIR__ . '/part.wizard-userfilter.php'; ?> <?php require_once __DIR__ . '/part.wizard-loginfilter.php'; ?> @@ -91,20 +91,21 @@ style('user_ldap', 'settings'); <p><label for="ldap_user_display_name_2"><?php p($l->t('2nd User Display Name Field'));?></label><input type="text" id="ldap_user_display_name_2" name="ldap_user_display_name_2" data-default="<?php p($_['ldap_user_display_name_2_default']); ?>" aria-describedby="ldap_user_display_name_2_instructions" title="<?php p($l->t('Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«.'));?>" /><p class="hidden-visually" id="ldap_user_display_name_2_instructions"><?php p($l->t('Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«.'));?></p></p> <p><label for="ldap_base_users"><?php p($l->t('Base User Tree'));?></label><textarea id="ldap_base_users" name="ldap_base_users" placeholder="<?php p($l->t('One User Base DN per line'));?>" data-default="<?php p($_['ldap_base_users_default']); ?>" aria-describedby="ldap_base_users_instructions" title="<?php p($l->t('Base User Tree'));?>"></textarea><p class="hidden-visually" id="ldap_base_users_instructions"><?php p($l->t('Base User Tree'));?></p></p> <p><label for="ldap_attributes_for_user_search"><?php p($l->t('User Search Attributes'));?></label><textarea id="ldap_attributes_for_user_search" name="ldap_attributes_for_user_search" placeholder="<?php p($l->t('Optional; one attribute per line'));?>" data-default="<?php p($_['ldap_attributes_for_user_search_default']); ?>" aria-describedby="ldap_attributes_for_user_search_instructions" title="<?php p($l->t('User Search Attributes'));?>"></textarea><p class="hidden-visually" id="ldap_attributes_for_user_search_instructions"><?php p($l->t('User Search Attributes'));?></p></p> + <p><label for="ldap_mark_remnants_as_disabled"><?php p($l->t('Disable users missing from LDAP'));?></label><input type="checkbox" id="ldap_mark_remnants_as_disabled" name="ldap_mark_remnants_as_disabled" value="1" data-default="<?php p($_['ldap_mark_remnants_as_disabled_default']); ?>" aria-describedby="ldap_mark_remnants_as_disabled_instructions" title="<?php p($l->t('When switched on, users imported from LDAP which are then missing will be disabled'));?>" /><p class="hidden-visually" id="ldap_mark_remnants_as_disabled_instructions"><?php p($l->t('When switched on, users imported from LDAP which are then missing will be disabled'));?></p></p> <p><label for="ldap_group_display_name"><?php p($l->t('Group Display Name Field'));?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" data-default="<?php p($_['ldap_group_display_name_default']); ?>" aria-describedby="ldap_group_display_name_instructions" title="<?php p($l->t('The LDAP attribute to use to generate the groups\'s display name.'));?>" /><p class="hidden-visually" id="ldap_group_display_name_instructions"><?php p($l->t('The LDAP attribute to use to generate the groups\'s display name.'));?></p></p> <p><label for="ldap_base_groups"><?php p($l->t('Base Group Tree'));?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php p($l->t('One Group Base DN per line'));?>" data-default="<?php p($_['ldap_base_groups_default']); ?>" aria-describedby="ldap_base_groups_instructions" title="<?php p($l->t('Base Group Tree'));?>"></textarea><p class="hidden-visually" id="ldap_base_groups_instructions"><?php p($l->t('Base Group Tree'));?></p></p> <p><label for="ldap_attributes_for_group_search"><?php p($l->t('Group Search Attributes'));?></label><textarea id="ldap_attributes_for_group_search" name="ldap_attributes_for_group_search" placeholder="<?php p($l->t('Optional; one attribute per line'));?>" data-default="<?php p($_['ldap_attributes_for_group_search_default']); ?>" aria-describedby="ldap_attributes_for_group_search_instructions" title="<?php p($l->t('Group Search Attributes'));?>"></textarea><p class="hidden-visually" id="ldap_attributes_for_group_search_instructions"><?php p($l->t('Group Search Attributes'));?></p></p> <p><label for="ldap_group_member_assoc_attribute"><?php p($l->t('Group-Member association'));?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute" data-default="<?php p($_['ldap_group_member_assoc_attribute_default']); ?>" ><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'uniqueMember')) { - p(' selected'); - } ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'memberUid')) { - p(' selected'); - } ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'member')) { - p(' selected'); - } ?>>member (AD)</option><option value="gidNumber"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'gidNumber')) { - p(' selected'); - } ?>>gidNumber</option><option value="zimbraMailForwardingAddress"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'zimbraMailForwardingAddress')) { - p(' selected'); - } ?>>zimbraMailForwardingAddress</option></select></p> + p(' selected'); + } ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'memberUid')) { + p(' selected'); + } ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'member')) { + p(' selected'); + } ?>>member (AD)</option><option value="gidNumber"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'gidNumber')) { + p(' selected'); + } ?>>gidNumber</option><option value="zimbraMailForwardingAddress"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'zimbraMailForwardingAddress')) { + p(' selected'); + } ?>>zimbraMailForwardingAddress</option></select></p> <p><label for="ldap_dynamic_group_member_url"><?php p($l->t('Dynamic Group Member URL'));?></label><input type="text" id="ldap_dynamic_group_member_url" name="ldap_dynamic_group_member_url" aria-describedby="ldap_dynamic_group_member_url_instructions" title="<?php p($l->t('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.)'));?>" data-default="<?php p($_['ldap_dynamic_group_member_url_default']); ?>" /><p class="hidden-visually" id="ldap_dynamic_group_member_url_instructions"><?php p($l->t('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.)'));?></p></p> <p><label for="ldap_nested_groups"><?php p($l->t('Nested Groups'));?></label><input type="checkbox" id="ldap_nested_groups" name="ldap_nested_groups" value="1" data-default="<?php p($_['ldap_nested_groups_default']); ?>" aria-describedby="ldap_nested_groups_instructions" title="<?php p($l->t('When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)'));?>" /><p class="hidden-visually" id="ldap_nested_groups_instructions"><?php p($l->t('When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)'));?></p></p> <p><label for="ldap_paging_size"><?php p($l->t('Paging chunksize'));?></label><input type="number" id="ldap_paging_size" name="ldap_paging_size" aria-describedby="ldap_paging_size_instructions" title="<?php p($l->t('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.)'));?>" data-default="<?php p($_['ldap_paging_size_default']); ?>" /><p class="hidden-visually" id="ldap_paging_size_instructions"><?php p($l->t('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.)'));?></p></p> diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php index eb70c774e25..a742c0b8076 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php @@ -28,8 +28,10 @@ use OCA\User_LDAP\GroupPluginManager; use OCA\User_LDAP\Mapping\GroupMapping; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\UserPluginManager; +use Psr\Log\LoggerInterface; require_once __DIR__ . '/../Bootstrap.php'; @@ -51,7 +53,7 @@ class IntegrationTestAttributeDetection extends AbstractIntegrationTest { $groupMapper->clear(); $this->access->setGroupMapper($groupMapper); - $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); + $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->get(UserPluginManager::class), \OC::$server->get(LoggerInterface::class), \OC::$server->get(DeletedUsersIndex::class)); $userManager = \OC::$server->getUserManager(); $userManager->clearBackends(); $userManager->registerBackend($userBackend); diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php index 36c8ab4c0d3..7b8f9fda754 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php @@ -26,8 +26,10 @@ namespace OCA\User_LDAP\Tests\Integration\Lib; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\UserPluginManager; +use Psr\Log\LoggerInterface; require_once __DIR__ . '/../Bootstrap.php'; @@ -49,7 +51,7 @@ class IntegrationTestFetchUsersByLoginName extends AbstractIntegrationTest { $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection()); $this->mapping->clear(); $this->access->setUserMapper($this->mapping); - $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); + $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->get(UserPluginManager::class), \OC::$server->get(LoggerInterface::class), \OC::$server->get(DeletedUsersIndex::class)); } /** diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php index b941fa6fc66..6b272d3ad3c 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php @@ -27,8 +27,10 @@ namespace OCA\User_LDAP\Tests\Integration\Lib; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\UserPluginManager; +use Psr\Log\LoggerInterface; require_once __DIR__ . '/../Bootstrap.php'; @@ -50,7 +52,7 @@ class IntegrationTestPaging extends AbstractIntegrationTest { require(__DIR__ . '/../setup-scripts/createExplicitUsers.php'); parent::init(); - $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); + $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->get(UserPluginManager::class), \OC::$server->get(LoggerInterface::class), \OC::$server->get(DeletedUsersIndex::class)); } public function initConnection() { diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php index ec1cebbe087..c5b7f73bbcc 100644 --- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php +++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php @@ -30,6 +30,7 @@ namespace OCA\User_LDAP\Tests\Integration\Lib\User; use OCA\User_LDAP\FilesystemHelper; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\User; use OCA\User_LDAP\User_LDAP; @@ -53,7 +54,7 @@ class IntegrationTestUserAvatar extends AbstractIntegrationTest { $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection()); $this->mapping->clear(); $this->access->setUserMapper($this->mapping); - $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); + $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->get(UserPluginManager::class), \OC::$server->get(LoggerInterface::class), \OC::$server->get(DeletedUsersIndex::class)); \OC_User::useBackend($userBackend); } diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php index 5da672d8a55..623d08d565d 100644 --- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php +++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php @@ -26,8 +26,10 @@ namespace OCA\User_LDAP\Tests\Integration\Lib\User; use OCA\User_LDAP\Jobs\CleanUp; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\UserPluginManager; +use Psr\Log\LoggerInterface; require_once __DIR__ . '/../../Bootstrap.php'; @@ -46,7 +48,7 @@ class IntegrationTestUserCleanUp extends AbstractIntegrationTest { $this->mapping->clear(); $this->access->setUserMapper($this->mapping); - $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); + $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->get(UserPluginManager::class), \OC::$server->get(LoggerInterface::class), \OC::$server->get(DeletedUsersIndex::class)); \OC_User::useBackend($userBackend); } diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php index 993ceec5abb..666211fc898 100644 --- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php +++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php @@ -26,8 +26,10 @@ namespace OCA\User_LDAP\Tests\Integration\Lib\User; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\UserPluginManager; +use Psr\Log\LoggerInterface; require_once __DIR__ . '/../../Bootstrap.php'; @@ -45,7 +47,7 @@ class IntegrationTestUserDisplayName extends AbstractIntegrationTest { $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection()); $this->mapping->clear(); $this->access->setUserMapper($this->mapping); - $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); + $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->get(UserPluginManager::class), \OC::$server->get(LoggerInterface::class), \OC::$server->get(DeletedUsersIndex::class)); \OC_User::useBackend($userBackend); } diff --git a/apps/user_ldap/tests/LDAPProviderTest.php b/apps/user_ldap/tests/LDAPProviderTest.php index 8a071119d16..3e34ce7bdbb 100644 --- a/apps/user_ldap/tests/LDAPProviderTest.php +++ b/apps/user_ldap/tests/LDAPProviderTest.php @@ -39,7 +39,6 @@ use OCP\EventDispatcher\IEventDispatcher; use OCP\ICacheFactory; use OCP\IConfig; use OCP\IServerContainer; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; /** * Class LDAPProviderTest @@ -76,7 +75,6 @@ class LDAPProviderTest extends \Test\TestCase { ->setMethods(['getBackends']) ->setConstructorArgs([ $this->createMock(IConfig::class), - $this->createMock(EventDispatcherInterface::class), $this->createMock(ICacheFactory::class), $this->createMock(IEventDispatcher::class), ]) diff --git a/apps/user_ldap/tests/User_LDAPTest.php b/apps/user_ldap/tests/User_LDAPTest.php index e837471bab0..b561840b4a5 100644 --- a/apps/user_ldap/tests/User_LDAPTest.php +++ b/apps/user_ldap/tests/User_LDAPTest.php @@ -37,6 +37,7 @@ use OCA\User_LDAP\Access; use OCA\User_LDAP\Connection; use OCA\User_LDAP\Mapping\AbstractMapping; use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; @@ -48,6 +49,8 @@ use OCP\IConfig; use OCP\IUser; use OCP\Notification\IManager as INotificationManager; use Test\TestCase; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; /** * Class Test_User_Ldap_Direct @@ -59,22 +62,26 @@ use Test\TestCase; class User_LDAPTest extends TestCase { /** @var User_LDAP */ protected $backend; - /** @var Access|\PHPUnit\Framework\MockObject\MockObject */ + /** @var Access|MockObject */ protected $access; - /** @var OfflineUser|\PHPUnit\Framework\MockObject\MockObject */ + /** @var OfflineUser|MockObject */ protected $offlineUser; - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ + /** @var IConfig|MockObject */ protected $config; - /** @var INotificationManager|\PHPUnit\Framework\MockObject\MockObject */ + /** @var INotificationManager|MockObject */ protected $notificationManager; - /** @var Session|\PHPUnit\Framework\MockObject\MockObject */ + /** @var Session|MockObject */ protected $session; - /** @var UserPluginManager|\PHPUnit\Framework\MockObject\MockObject */ + /** @var UserPluginManager|MockObject */ protected $pluginManager; - /** @var Connection|\PHPUnit\Framework\MockObject\MockObject */ + /** @var Connection|MockObject */ protected $connection; - /** @var Manager|\PHPUnit\Framework\MockObject\MockObject */ + /** @var Manager|MockObject */ protected $userManager; + /** @var LoggerInterface|MockObject */ + protected $logger; + /** @var DeletedUsersIndex|MockObject */ + protected $deletedUsersIndex; protected function setUp(): void { parent::setUp(); @@ -95,12 +102,18 @@ class User_LDAPTest extends TestCase { $this->session = $this->createMock(Session::class); $this->pluginManager = $this->createMock(UserPluginManager::class); + $this->logger = $this->createMock(LoggerInterface::class); + + $this->deletedUsersIndex = $this->createMock(DeletedUsersIndex::class); + $this->backend = new User_LDAP( $this->access, $this->config, $this->notificationManager, $this->session, - $this->pluginManager + $this->pluginManager, + $this->logger, + $this->deletedUsersIndex, ); } @@ -109,21 +122,21 @@ class User_LDAPTest extends TestCase { ->method('username2dn') ->willReturnCallback(function ($uid) { switch ($uid) { - case 'gunslinger': - return 'dnOfRoland,dc=test'; - break; - case 'formerUser': - return 'dnOfFormerUser,dc=test'; - break; - case 'newyorker': - return 'dnOfNewYorker,dc=test'; - break; - case 'ladyofshadows': - return 'dnOfLadyOfShadows,dc=test'; - break; - default: - return false; - } + case 'gunslinger': + return 'dnOfRoland,dc=test'; + break; + case 'formerUser': + return 'dnOfFormerUser,dc=test'; + break; + case 'newyorker': + return 'dnOfNewYorker,dc=test'; + break; + case 'ladyofshadows': + return 'dnOfLadyOfShadows,dc=test'; + break; + default: + return false; + } }); $this->access->method('fetchUsersByLoginName') @@ -199,7 +212,7 @@ class User_LDAPTest extends TestCase { ->method('get') ->willReturn($user); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); @@ -209,7 +222,7 @@ class User_LDAPTest extends TestCase { public function testCheckPasswordWrongPassword() { $this->prepareAccessForCheckPassword(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $result = $backend->checkPassword('roland', 'wrong'); @@ -218,7 +231,7 @@ class User_LDAPTest extends TestCase { public function testCheckPasswordWrongUser() { $this->prepareAccessForCheckPassword(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $result = $backend->checkPassword('mallory', 'evil'); @@ -233,7 +246,7 @@ class User_LDAPTest extends TestCase { ->method('get') ->willReturn(null); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $result = $backend->checkPassword('roland', 'dt19'); @@ -251,7 +264,7 @@ class User_LDAPTest extends TestCase { ->method('get') ->willReturn($user); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $user = \OC::$server->getUserManager()->checkPassword('roland', 'dt19'); @@ -264,7 +277,7 @@ class User_LDAPTest extends TestCase { public function testCheckPasswordPublicAPIWrongPassword() { $this->prepareAccessForCheckPassword(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $user = \OC::$server->getUserManager()->checkPassword('roland', 'wrong'); @@ -277,7 +290,7 @@ class User_LDAPTest extends TestCase { public function testCheckPasswordPublicAPIWrongUser() { $this->prepareAccessForCheckPassword(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $user = \OC::$server->getUserManager()->checkPassword('mallory', 'evil'); @@ -289,7 +302,7 @@ class User_LDAPTest extends TestCase { } public function testDeleteUserCancel() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->deleteUser('notme'); $this->assertFalse($result); } @@ -309,10 +322,10 @@ class User_LDAPTest extends TestCase { ->method('getConnectionResource') ->willReturn('this is an ldap link'); - $this->config->expects($this->any()) - ->method('getUserValue') - ->with($uid, 'user_ldap', 'isDeleted') - ->willReturn('1'); + $this->deletedUsersIndex->expects($this->once()) + ->method('isUserMarked') + ->with($uid) + ->willReturn(true); $offlineUser = $this->createMock(OfflineUser::class); $offlineUser->expects($this->once()) @@ -322,7 +335,7 @@ class User_LDAPTest extends TestCase { ->method('get') ->willReturn($offlineUser); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->deleteUser($uid); $this->assertTrue($result); @@ -339,10 +352,10 @@ class User_LDAPTest extends TestCase { ->with('uid') ->willReturn(true); - $this->config->expects($this->once()) - ->method('getUserValue') - ->with('uid', 'user_ldap', 'isDeleted', 0) - ->willReturn(1); + $this->deletedUsersIndex->expects($this->once()) + ->method('isUserMarked') + ->with('uid') + ->willReturn(true); $mapper = $this->createMock(UserMapping::class); $mapper->expects($this->once()) @@ -388,7 +401,7 @@ class User_LDAPTest extends TestCase { } else { $result = []; foreach ($users as $user) { - if (stripos($user, $search) !== false) { + if (stripos($user, $search) !== false) { $result[] = $user; } } @@ -411,7 +424,7 @@ class User_LDAPTest extends TestCase { public function testGetUsersNoParam() { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->getUsers(); $this->assertEquals(3, count($result)); @@ -419,7 +432,7 @@ class User_LDAPTest extends TestCase { public function testGetUsersLimitOffset() { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->getUsers('', 1, 2); $this->assertEquals(1, count($result)); @@ -427,7 +440,7 @@ class User_LDAPTest extends TestCase { public function testGetUsersLimitOffset2() { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->getUsers('', 2, 1); $this->assertEquals(2, count($result)); @@ -435,7 +448,7 @@ class User_LDAPTest extends TestCase { public function testGetUsersSearchWithResult() { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->getUsers('yo'); $this->assertEquals(2, count($result)); @@ -443,7 +456,7 @@ class User_LDAPTest extends TestCase { public function testGetUsersSearchEmptyResult() { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->getUsers('nix'); $this->assertEquals(0, count($result)); @@ -459,7 +472,7 @@ class User_LDAPTest extends TestCase { public function testGetUsersViaAPINoParam() { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $result = $this->getUsers(); @@ -468,7 +481,7 @@ class User_LDAPTest extends TestCase { public function testGetUsersViaAPILimitOffset() { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $result = $this->getUsers('', 1, 2); @@ -477,7 +490,7 @@ class User_LDAPTest extends TestCase { public function testGetUsersViaAPILimitOffset2() { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $result = $this->getUsers('', 2, 1); @@ -486,7 +499,7 @@ class User_LDAPTest extends TestCase { public function testGetUsersViaAPISearchWithResult() { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $result = $this->getUsers('yo'); @@ -495,7 +508,7 @@ class User_LDAPTest extends TestCase { public function testGetUsersViaAPISearchEmptyResult() { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $result = $this->getUsers('nix'); @@ -503,7 +516,7 @@ class User_LDAPTest extends TestCase { } public function testUserExists() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $user = $this->createMock(User::class); @@ -522,7 +535,7 @@ class User_LDAPTest extends TestCase { } public function testUserExistsForDeleted() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $mapper = $this->createMock(UserMapping::class); @@ -546,7 +559,7 @@ class User_LDAPTest extends TestCase { } public function testUserExistsForNeverExisting() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->access->expects($this->any()) @@ -565,7 +578,7 @@ class User_LDAPTest extends TestCase { } public function testUserExistsPublicAPI() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); \OC_User::useBackend($backend); @@ -595,7 +608,7 @@ class User_LDAPTest extends TestCase { } public function testDeleteUserExisting() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); //we do not support deleting existing users at all $result = $backend->deleteUser('gunslinger'); @@ -603,7 +616,7 @@ class User_LDAPTest extends TestCase { } public function testGetHomeAbsolutePath() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->connection->expects($this->any()) @@ -652,7 +665,7 @@ class User_LDAPTest extends TestCase { } public function testGetHomeRelative() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $dataDir = \OC::$server->getConfig()->getSystemValue( @@ -706,7 +719,7 @@ class User_LDAPTest extends TestCase { public function testGetHomeNoPath() { $this->expectException(\Exception::class); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->connection->expects($this->any()) @@ -754,7 +767,7 @@ class User_LDAPTest extends TestCase { public function testGetHomeDeletedUser() { $uid = 'newyorker'; - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->connection->expects($this->any()) @@ -810,7 +823,7 @@ class User_LDAPTest extends TestCase { }); /** @noinspection PhpUnhandledExceptionInspection */ - $this->assertEquals($this->backend->getHome('uid'),'result'); + $this->assertEquals($this->backend->getHome('uid'), 'result'); } private function prepareAccessForGetDisplayName() { @@ -829,16 +842,16 @@ class User_LDAPTest extends TestCase { ->method('readAttribute') ->willReturnCallback(function ($dn, $attr) { switch ($dn) { - case 'dnOfRoland,dc=test': - if ($attr === 'displayname') { - return ['Roland Deschain']; - } - return []; - break; - - default: - return false; - } + case 'dnOfRoland,dc=test': + if ($attr === 'displayname') { + return ['Roland Deschain']; + } + return []; + break; + + default: + return false; + } }); $this->access->method('fetchUsersByLoginName') ->willReturn([]); @@ -846,7 +859,7 @@ class User_LDAPTest extends TestCase { public function testGetDisplayName() { $this->prepareAccessForGetDisplayName(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->connection->expects($this->any()) @@ -927,7 +940,7 @@ class User_LDAPTest extends TestCase { } }); $this->prepareAccessForGetDisplayName(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->connection->expects($this->any()) @@ -998,7 +1011,7 @@ class User_LDAPTest extends TestCase { ->with('uid') ->willReturn('result'); - $this->assertEquals($this->backend->getDisplayName('uid'),'result'); + $this->assertEquals($this->backend->getDisplayName('uid'), 'result'); } //no test for getDisplayNames, because it just invokes getUsers and @@ -1009,7 +1022,7 @@ class User_LDAPTest extends TestCase { ->method('countUsers') ->willReturn(5); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->countUsers(); $this->assertEquals(5, $result); @@ -1020,7 +1033,7 @@ class User_LDAPTest extends TestCase { ->method('countUsers') ->willReturn(false); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->countUsers(); $this->assertFalse($result); @@ -1035,7 +1048,7 @@ class User_LDAPTest extends TestCase { ->method('countUsers') ->willReturn(42); - $this->assertEquals($this->backend->countUsers(),42); + $this->assertEquals($this->backend->countUsers(), 42); } public function testLoginName2UserNameSuccess() { @@ -1064,7 +1077,7 @@ class User_LDAPTest extends TestCase { ->method('writeToCache') ->with($this->equalTo('loginName2UserName-'.$loginName), $this->equalTo($username)); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $user = $this->createMock(User::class); $user->expects($this->any()) ->method('getUsername') @@ -1109,7 +1122,7 @@ class User_LDAPTest extends TestCase { ->method('getAttributes') ->willReturn(['dn', 'uid', 'mail', 'displayname']); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $name = $backend->loginName2UserName($loginName); $this->assertSame(false, $name); @@ -1146,7 +1159,7 @@ class User_LDAPTest extends TestCase { ->method('getAttributes') ->willReturn(['dn', 'uid', 'mail', 'displayname']); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $name = $backend->loginName2UserName($loginName); $this->assertSame(false, $name); @@ -1223,7 +1236,7 @@ class User_LDAPTest extends TestCase { $this->userManager->expects($this->atLeastOnce()) ->method('get') ->willReturn($this->createMock(User::class)); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $this->assertTrue(\OC_User::setPassword('roland', 'dt')); @@ -1236,7 +1249,7 @@ class User_LDAPTest extends TestCase { ->method('get') ->willReturn($this->createMock(User::class)); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->userManager->expects($this->any()) ->method('get') ->willReturn($this->createMock(User::class)); @@ -1252,7 +1265,7 @@ class User_LDAPTest extends TestCase { ->willReturn($this->createMock(User::class)); $this->prepareAccessForSetPassword(false); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager, $this->logger, $this->deletedUsersIndex); \OC_User::useBackend($backend); $this->assertFalse(\OC_User::setPassword('roland', 'dt12234$')); @@ -1295,11 +1308,11 @@ class User_LDAPTest extends TestCase { ->willReturn(true); $this->pluginManager->expects($this->once()) ->method('setPassword') - ->with('uid','password') + ->with('uid', 'password') ->willReturn('result'); /** @noinspection PhpUnhandledExceptionInspection */ - $this->assertEquals($this->backend->setPassword('uid', 'password'),'result'); + $this->assertEquals($this->backend->setPassword('uid', 'password'), 'result'); } public function avatarDataProvider() { @@ -1340,7 +1353,7 @@ class User_LDAPTest extends TestCase { ->with('uid') ->willReturn('result'); - $this->assertEquals($this->backend->canChangeAvatar('uid'),'result'); + $this->assertEquals($this->backend->canChangeAvatar('uid'), 'result'); } public function testSetDisplayNameWithPlugin() { @@ -1413,7 +1426,7 @@ class User_LDAPTest extends TestCase { ->method('getUserMapper') ->willReturn($this->createMock(UserMapping::class)); - $this->assertEquals($this->backend->createUser($uid, $pwd),true); + $this->assertEquals($this->backend->createUser($uid, $pwd), true); } public function testCreateUserFailing() { diff --git a/apps/user_ldap/tests/User_ProxyTest.php b/apps/user_ldap/tests/User_ProxyTest.php index edeefeb4b0e..a557eb4bc6f 100644 --- a/apps/user_ldap/tests/User_ProxyTest.php +++ b/apps/user_ldap/tests/User_ProxyTest.php @@ -31,12 +31,14 @@ namespace OCA\User_LDAP\Tests; use OCA\User_LDAP\AccessFactory; use OCA\User_LDAP\Helper; use OCA\User_LDAP\ILDAPWrapper; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_Proxy; use OCA\User_LDAP\UserPluginManager; use OCP\IConfig; use OCP\IUserSession; use OCP\Notification\IManager as INotificationManager; use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; use Test\TestCase; class User_ProxyTest extends TestCase { @@ -56,6 +58,10 @@ class User_ProxyTest extends TestCase { private $proxy; /** @var UserPluginManager|MockObject */ private $userPluginManager; + /** @var LoggerInterface|MockObject */ + protected $logger; + /** @var DeletedUsersIndex|MockObject */ + protected $deletedUsersIndex; protected function setUp(): void { parent::setUp(); @@ -67,6 +73,8 @@ class User_ProxyTest extends TestCase { $this->notificationManager = $this->createMock(INotificationManager::class); $this->userSession = $this->createMock(IUserSession::class); $this->userPluginManager = $this->createMock(UserPluginManager::class); + $this->logger = $this->createMock(LoggerInterface::class); + $this->deletedUsersIndex = $this->createMock(DeletedUsersIndex::class); $this->proxy = $this->getMockBuilder(User_Proxy::class) ->setConstructorArgs([ $this->helper, @@ -75,7 +83,9 @@ class User_ProxyTest extends TestCase { $this->config, $this->notificationManager, $this->userSession, - $this->userPluginManager + $this->userPluginManager, + $this->logger, + $this->deletedUsersIndex, ]) ->setMethods(['handleRequest']) ->getMock(); |