diff --git a/controller/admin_controller.php b/controller/admin_controller.php index ad61158e..c0fa0287 100644 --- a/controller/admin_controller.php +++ b/controller/admin_controller.php @@ -555,16 +555,14 @@ public function add_rule($language, $parent_id = 0) * @param int $rule_id The rule identifier to edit * @return void * @access public - * @throws \phpbb\boardrules\exception\base If the rule does not exist or stored rule data is invalid + * @throws \phpbb\boardrules\exception\base If stored rule data is invalid */ public function edit_rule($rule_id) { // Add form key add_form_key('add_edit_rule'); - // Initiate and load the rule entity - /* @var $entity \phpbb\boardrules\entity\rule */ - $entity = $this->container->get('phpbb.boardrules.entity')->load($rule_id); + $entity = $this->load_rule($rule_id); // Collect the form data $data = array( @@ -778,13 +776,10 @@ protected function add_edit_rule_data($entity, $data) * @param int $rule_id The rule identifier to delete * @return void * @access public - * @throws \phpbb\boardrules\exception\out_of_bounds If the rule does not exist */ public function delete_rule($rule_id) { - // Initiate and load the rule entity - /* @var $entity \phpbb\boardrules\entity\rule */ - $entity = $this->container->get('phpbb.boardrules.entity')->load($rule_id); + $entity = $this->load_rule($rule_id); // Use a confirmation box routine when deleting a rule if (confirm_box(true)) @@ -811,7 +806,7 @@ public function delete_rule($rule_id) $is_cat = (int) ($entity->get_right_id() - $entity->get_left_id() > 1); // Request confirmation from the user to delete the rule - confirm_box(false, $this->lang->lang('ACP_DELETE_RULE_CONFIRM', $is_cat), build_hidden_fields(array( + confirm_box(false, $this->lang->lang($is_cat ? 'ACP_DELETE_RULE_CATEGORY_CONFIRM' : 'ACP_DELETE_RULE_CONFIRM'), build_hidden_fields(array( 'mode' => 'manage', 'action' => 'delete', 'rule_id' => $rule_id, @@ -831,10 +826,11 @@ public function delete_rule($rule_id) * @param int $amount The number of places to move the rule * @return void * @access public - * @throws \phpbb\boardrules\exception\out_of_bounds If the rule does not exist after moving */ public function move_rule($rule_id, $direction, $amount = 1) { + $moved = false; + // If the link hash is invalid, stop and show an error message to the user if (!check_link_hash($this->request->variable('hash', ''), $direction . $rule_id)) { @@ -862,9 +858,7 @@ public function move_rule($rule_id, $direction, $amount = 1) $json_response->send(array('success' => $moved)); } - // Initiate and load the rule entity for no AJAX request - /* @var $entity \phpbb\boardrules\entity\rule */ - $entity = $this->container->get('phpbb.boardrules.entity')->load($rule_id); + $entity = $this->load_rule($rule_id); // Use a redirect to reload the current page redirect("{$this->u_action}&language={$entity->get_language()}&parent_id={$entity->get_parent_id()}"); @@ -920,6 +914,24 @@ public function set_page_url($u_action) $this->u_action = $u_action; } + /** + * Load a rule or display a recoverable ACP error when it no longer exists. + * + * @param int $rule_id Rule identifier + * @return \phpbb\boardrules\entity\rule_interface + */ + protected function load_rule($rule_id) + { + try + { + return $this->container->get('phpbb.boardrules.entity')->load($rule_id); + } + catch (\phpbb\boardrules\exception\out_of_bounds $e) + { + trigger_error($e->get_message($this->lang) . adm_back_link($this->u_action), E_USER_WARNING); + } + } + /** * Assign installed language options and return their dashboard data. * diff --git a/controller/main_controller.php b/controller/main_controller.php index 25ab4803..17724a8b 100644 --- a/controller/main_controller.php +++ b/controller/main_controller.php @@ -116,6 +116,11 @@ public function display() $item_depth = count($open_categories); + // Build a stable compound number from sibling positions at every nesting level + $compound_counters = array_slice($compound_counters, 0, $item_depth + 1); + $compound_counters[$item_depth] = isset($compound_counters[$item_depth]) ? $compound_counters[$item_depth] + 1 : 1; + $compound_number = implode('.', $compound_counters); + if ($entity->get_right_id() - $entity->get_left_id() > 1) { // Rule categories @@ -131,7 +136,7 @@ public function display() { // Rules $is_category = false; - $anchor = $entity->get_anchor() ?: $this->lang->lang('BOARDRULES_RULE_ANCHOR', ($cat_counter - 1) . $rule_counter); + $anchor = $entity->get_anchor() ?: $this->lang->lang('BOARDRULES_RULE_ANCHOR', $item_depth ? ($cat_counter - 1) . $rule_counter : $compound_number); // Increment rule counter $rule_counter++; @@ -141,11 +146,6 @@ public function display() // one-based display depth; rules use the containing category count. $depth = $is_category ? $item_depth + 1 : $item_depth; - // Build a stable compound number from sibling positions at every nesting level - $compound_counters = array_slice($compound_counters, 0, $item_depth + 1); - $compound_counters[$item_depth] = isset($compound_counters[$item_depth]) ? $compound_counters[$item_depth] + 1 : 1; - $compound_number = implode('.', $compound_counters); - // Assign values to template vars for this rule entity $this->template->assign_block_vars('rules', array( 'TITLE' => $entity->get_title(), diff --git a/entity/rule.php b/entity/rule.php index 34699bbe..6ec87b86 100644 --- a/entity/rule.php +++ b/entity/rule.php @@ -89,7 +89,8 @@ public function load($id) * * Used when the data is already loaded externally. * Any existing data on this rule is over-written. - * All data is validated and an exception is thrown if any data is invalid. + * Required fields and basic data types are validated. Values already loaded + * from storage are not passed through write-time transformations again. * * @param array $data Data array, typically from the database * @return rule_interface $this object for chaining calls; load()->set()->save() @@ -111,7 +112,7 @@ public function import($data) 'rule_parent_id' => 'integer', 'rule_parents' => 'string', 'rule_anchor' => 'string', - 'rule_title' => 'set_title', // call set_title() + 'rule_title' => 'string', // We do not pass to set_message() as generate_text_for_storage would run twice 'rule_message' => 'string', @@ -273,10 +274,13 @@ public function set_title($title) // Enforce a string $title = (string) $title; - $title = $this->encode_unicode_for_storage($title); + // MSSQL string literals cannot safely preserve every BMP character. + $title = strpos($this->db->get_sql_layer(), 'mssql') === 0 + ? utf8_encode_ncr($title) + : utf8_encode_ucr($title); - // Limit both the displayed and stored title lengths to the column size. - if (truncate_string($title, 200, 200) !== $title) + // Enforce the database column length after storage encoding. + if (utf8_strlen($title) > 200) { throw new \phpbb\boardrules\exception\unexpected_value(array('title', 'TOO_LONG')); } @@ -287,22 +291,6 @@ public function set_title($title) return $this; } - /** - * Encode Unicode characters that cannot be stored safely by the DBMS. - * - * @param string $text - * @return string - */ - protected function encode_unicode_for_storage($text) - { - if (strpos($this->db->get_sql_layer(), 'mssql') === 0) - { - return utf8_encode_ncr($text); - } - - return utf8_encode_ucr($text); - } - /** * Get message for edit * @@ -497,31 +485,39 @@ public function set_anchor($anchor) { // Enforce a string $anchor = (string) $anchor; + $rule_id = $this->get_id(); - // Anchors must begin with a letter and contain only URL-friendly - // letters, marks, numbers, hyphens, and underscores. Four-byte - // characters are rejected even when their Unicode category matches. - if ($anchor !== '' && !preg_match('/^(?!.*[\x{10000}-\x{10FFFF}])\p{L}[\p{L}\p{M}\p{N}_-]*$/u', $anchor)) + // Existing anchors may predate current validation rules. + if ($rule_id && $this->get_anchor() === $anchor) { - throw new \phpbb\boardrules\exception\unexpected_value(array('anchor', 'ILLEGAL_CHARACTERS')); + return $this; } - // Limit both the displayed and stored anchor lengths to the column size. - if (truncate_string($anchor, 255, 255) !== $anchor) + if ($anchor !== '') { - throw new \phpbb\boardrules\exception\unexpected_value(array('anchor', 'TOO_LONG')); - } + // HTML5 IDs allow broader values, but these are also URL fragments. + // Restrict them to BMP letters, marks, numbers, hyphens, and underscores. + if (!preg_match('/^(?!.*[\x{10000}-\x{10FFFF}])[\p{L}\p{N}_-][\p{L}\p{M}\p{N}_-]*$/u', $anchor)) + { + throw new \phpbb\boardrules\exception\unexpected_value(array('anchor', 'ILLEGAL_CHARACTERS')); + } - // Make sure rule anchors are unique for the current language - // Test if new page and anchor field has data or... - // if existing page and anchor field has new data not equal to existing anchor data - if ((!$this->get_id() && $anchor !== '') || ($this->get_id() && $anchor !== '' && $this->get_anchor() !== $anchor)) - { + if (utf8_strlen($anchor) > 255) + { + throw new \phpbb\boardrules\exception\unexpected_value(array('anchor', 'TOO_LONG')); + } + + // Make sure the anchor is unique for the current language. $sql = 'SELECT 1 FROM ' . $this->boardrules_table . " WHERE rule_anchor = '" . $this->db->sql_escape($anchor) . "' - AND rule_id <> " . $this->get_id() . - ($this->get_language() ? " AND rule_language = '" . $this->db->sql_escape($this->get_language()) . "'" : ''); + AND rule_id <> " . $rule_id; + $language = $this->get_language(); + if ($language !== '') + { + $sql .= " AND rule_language = '" . $this->db->sql_escape($language) . "'"; + } + $result = $this->db->sql_query_limit($sql, 1); $row = $this->db->sql_fetchrow($result); $this->db->sql_freeresult($result); diff --git a/exception/base.php b/exception/base.php index 40afea89..881532ea 100644 --- a/exception/base.php +++ b/exception/base.php @@ -33,7 +33,7 @@ class base extends \Exception * @param \Exception|null $previous * @access public */ - public function __construct($message = null, $code = 0, \Exception $previous = null) + public function __construct($message = null, $code = 0, ?\Exception $previous = null) { parent::__construct(); diff --git a/language/ar/boardrules_acp.php b/language/ar/boardrules_acp.php index 09739071..af475036 100644 --- a/language/ar/boardrules_acp.php +++ b/language/ar/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'هذه القوانين غير مرئية للمستخدمين. يرى المستخدمون حالياً القوانين المكتوبة باللغة الافتراضية للمنتدى.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'هذه القوانين غير مرئية للمستخدمين. انشرها لإتاحة قوانين المنتدى الافتراضية.', 'ACP_BOARDRULES_COPY_RULESET' => 'نسخ مجموعة قوانين اللغة', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'انسخ كل الفئات والقوانين إلى %s. ستُضاف القوانين المنسوخة بعد أي قوانين موجودة، وستظل مجموعة القوانين الكاملة في اللغة الهدف مسودة حتى تنشرها.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'انسخ كل الفئات والقوانين إلى %s. ستُضاف القوانين المنسوخة بعد أي قوانين موجودة، وسيتم تعيين مجموعة القوانين الكاملة في اللغة الهدف كمسودة حتى تنشرها.', 'ACP_BOARDRULES_COPY_APPEND' => 'إضافة إلى القوانين الموجودة', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'تحتوي اللغة الهدف حالياً على %d قانون. سيبقى دون تغيير، وستُضاف القوانين المنسوخة بعده. ستُضاف لاحقة رقمية إلى المراسي المنسوخة المتعارضة.', @@ -152,10 +152,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'محتوى كل قانون على حده يظهر في صفحة القوانين ( يتم تعطيل هذا الخيار في الأقسام ).', 'ACP_RULE_MESSAGE_DISABLED' => 'هذا القسم يحتوي على قوانين , وبالتالي يتم تعطيل المحتوى ( محرر الكتابة ).', 'ACP_ADD_RULE' => 'إنشاء قانون جديد ', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'متأكد أنك تريد حذف هذا القانون ؟', - 1 => 'متأكد أنك تريد حذف هذا القانون ؟
تحذير : حذف قسم يعني حذف جميع القوانين الموجودة فيه أيضاً.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'متأكد أنك تريد حذف هذا القانون ؟', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'متأكد أنك تريد حذف هذا القانون ؟
تحذير : حذف قسم يعني حذف جميع القوانين الموجودة فيه أيضاً.', 'ACP_RULE_ADDED' => 'تم إضافة القانون بنجاح.', 'ACP_RULE_DELETED' => 'تم حذف القانون بنجاح.', 'ACP_RULE_EDITED' => 'تم تعديل القانون بنجاح.', diff --git a/language/bg/boardrules_acp.php b/language/bg/boardrules_acp.php index 64d7b775..0c02219c 100644 --- a/language/bg/boardrules_acp.php +++ b/language/bg/boardrules_acp.php @@ -90,7 +90,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Тези правила не са видими за потребителите. В момента потребителите виждат правилата на езика по подразбиране на форума.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Тези правила не са видими за потребителите. Публикувайте ги, за да направите правилата по подразбиране на форума достъпни.', 'ACP_BOARDRULES_COPY_RULESET' => 'Копирай набора от правила на езика', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Копира всяка категория и правило в %s. Копираните правила се добавят след съществуващите, а пълният целеви набор остава чернова, докато не го публикувате.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Копира всяка категория и правило в %s. Копираните правила се добавят след съществуващите, а пълният целеви набор ще бъде зададен като чернова, докато не го публикувате.', 'ACP_BOARDRULES_COPY_APPEND' => 'Добави към съществуващите правила', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'В момента целта съдържа %d правило. То ще остане непроменено, а копираните правила ще бъдат добавени след него. Конфликтните копирани котви ще получат цифров суфикс.', @@ -136,10 +136,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Съобщението на Правилото се показва на страницата на правилата за всяко правило (Категориите не показват съобщение за правилото).', 'ACP_RULE_MESSAGE_DISABLED' => 'Тази категория съдържа правила, които текстовият редактор е забранил.', 'ACP_ADD_RULE' => 'Създай ново правило', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Сигурни ли сте, че искате да изтриете това правило?', - 1 => 'Сигурни ли сте, че искате да изтриете това правило?
Предупреждение: Премахвайки категория правила, ще премахнете и всички правила, които тя съдържа.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Сигурни ли сте, че искате да изтриете това правило?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Сигурни ли сте, че искате да изтриете това правило?
Предупреждение: Премахвайки категория правила, ще премахнете и всички правила, които тя съдържа.', 'ACP_RULE_ADDED' => 'Правилото успешно добавено.', 'ACP_RULE_DELETED' => 'Правилото успешно изтрито.', 'ACP_RULE_EDITED' => 'Правилото успешно редактирано.', diff --git a/language/cs/boardrules_acp.php b/language/cs/boardrules_acp.php index 36a16cdb..037cbde7 100644 --- a/language/cs/boardrules_acp.php +++ b/language/cs/boardrules_acp.php @@ -90,7 +90,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Tato pravidla nejsou pro uživatele viditelná. Uživatelé nyní vidí pravidla ve výchozím jazyce fóra.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Tato pravidla nejsou pro uživatele viditelná. Zveřejněte je, aby byla výchozí pravidla fóra dostupná.', 'ACP_BOARDRULES_COPY_RULESET' => 'Kopírovat jazykovou sadu pravidel', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Zkopíruje všechny kategorie a pravidla do %s. Zkopírovaná pravidla se přidají za stávající pravidla a celá cílová sada zůstane konceptem, dokud ji nezveřejníte.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Zkopíruje všechny kategorie a pravidla do %s. Zkopírovaná pravidla se přidají za stávající pravidla a celá cílová sada bude nastavena jako koncept, dokud ji nezveřejníte.', 'ACP_BOARDRULES_COPY_APPEND' => 'Přidat ke stávajícím pravidlům', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Cíl nyní obsahuje %d pravidlo. Zůstane beze změny a zkopírovaná pravidla budou přidána za něj. Konfliktní zkopírované odkazy dostanou číselnou příponu.', @@ -140,10 +140,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Obsah pravidla je zobrazen u každého z pravidel (toto pole je u kategorií ignorováno).', 'ACP_RULE_MESSAGE_DISABLED' => 'Toto je kategorie pravidel, proto není možné pravidlo upravovat.', 'ACP_ADD_RULE' => 'Vytvořit nové pravidlo', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Opravdu chcete smazat toto pravidlo?', - 1 => 'Opravdu chcete smazat toto pravidlo?
Varování: Smazáním kategorie odstraníte také všechna vnořená pravidla.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Opravdu chcete smazat toto pravidlo?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Opravdu chcete smazat toto pravidlo?
Varování: Smazáním kategorie odstraníte také všechna vnořená pravidla.', 'ACP_RULE_ADDED' => 'Pravidlo úspěšně přidáno.', 'ACP_RULE_DELETED' => 'Pravidlo úspěšně odstraněno.', 'ACP_RULE_EDITED' => 'Pravidlo úspěšně upraveno.', diff --git a/language/da/boardrules_acp.php b/language/da/boardrules_acp.php index bcfee75a..8e1bbe74 100644 --- a/language/da/boardrules_acp.php +++ b/language/da/boardrules_acp.php @@ -90,7 +90,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Disse regler er ikke synlige for brugerne. Brugerne ser i øjeblikket reglerne på boardets standardsprog.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Disse regler er ikke synlige for brugerne. Udgiv dem for at gøre boardets standardregler tilgængelige.', 'ACP_BOARDRULES_COPY_RULESET' => 'Kopiér sprogets regelsæt', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopiér alle kategorier og regler til %s. Kopierede regler tilføjes efter eksisterende regler, og hele destinationsregelsættet forbliver en kladde, indtil du udgiver det.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopiér alle kategorier og regler til %s. Kopierede regler tilføjes efter eksisterende regler, og hele destinationsregelsættet sættes som kladde, indtil du udgiver det.', 'ACP_BOARDRULES_COPY_APPEND' => 'Føj til eksisterende regler', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Destinationen indeholder i øjeblikket %d regel. Den forbliver uændret, og kopierede regler tilføjes efter den. Kopierede ankre med konflikter får et numerisk suffiks.', @@ -136,10 +136,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Regelbeskeden vises på regler-siden for hver regel (kategorier viser ikke en regelbesked).', 'ACP_RULE_MESSAGE_DISABLED' => 'Dette er en kategori som indeholder regler, beskededitoren er blevet deaktiveret.', 'ACP_ADD_RULE' => 'Opret ny regel', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Er du sikker på, at du vil fjerne reglen?', - 1 => 'Er du sikker på, at du vil fjerne regelkategorien?
Advarsel: Når en regelkategori fjernes, så fjernes også alle reglerne i den.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Er du sikker på, at du vil fjerne reglen?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Er du sikker på, at du vil fjerne regelkategorien?
Advarsel: Når en regelkategori fjernes, så fjernes også alle reglerne i den.', 'ACP_RULE_ADDED' => 'Regel tilføjet.', 'ACP_RULE_DELETED' => 'Regel fjernet.', 'ACP_RULE_EDITED' => 'Regel redigeret.', diff --git a/language/de/boardrules_acp.php b/language/de/boardrules_acp.php index 0ca9f227..04546de2 100644 --- a/language/de/boardrules_acp.php +++ b/language/de/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Diese Regeln sind für Benutzer nicht sichtbar. Den Benutzern werden derzeit die Regeln in der Standardsprache des Forums angezeigt.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Diese Regeln sind für Benutzer nicht sichtbar. Veröffentlichen Sie sie, damit die Standardregeln des Forums verfügbar werden.', 'ACP_BOARDRULES_COPY_RULESET' => 'Sprachregelsatz kopieren', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopiert alle Kategorien und Regeln nach %s. Die kopierten Regeln werden hinter vorhandenen Regeln angefügt. Der vollständige Zielregelsatz bleibt ein Entwurf, bis Sie ihn veröffentlichen.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopiert alle Kategorien und Regeln nach %s. Die kopierten Regeln werden hinter vorhandenen Regeln angefügt. Der vollständige Zielregelsatz wird als Entwurf festgelegt, bis Sie ihn veröffentlichen.', 'ACP_BOARDRULES_COPY_APPEND' => 'An vorhandene Regeln anfügen', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Das Ziel enthält derzeit %d Regel. Diese bleibt unverändert und die kopierten Regeln werden dahinter eingefügt. Bei Konflikten erhalten kopierte Anker einen numerischen Suffix.', @@ -137,10 +137,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Der Regel-Text wird für jede Regel angezeigt, die keine Regel-Kategorie ist.', 'ACP_RULE_MESSAGE_DISABLED' => 'Dies ist eine Regel-Kategorie. Der Regel-Text-Editor ist deshalb nicht verfügbar.', 'ACP_ADD_RULE' => 'Neue Regel erstellen', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Bist du dir sicher, dass du diese Regel entfernen möchtest?', - 1 => 'Bist du dir sicher, dass du diese Regel-Kategorie entfernen möchtest?
Warnung: Das Entfernen einer Regel-Kategorie wird auch alle darin enthaltenen Regeln löschen.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Bist du dir sicher, dass du diese Regel entfernen möchtest?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Bist du dir sicher, dass du diese Regel-Kategorie entfernen möchtest?
Warnung: Das Entfernen einer Regel-Kategorie wird auch alle darin enthaltenen Regeln löschen.', 'ACP_RULE_ADDED' => 'Regel hinzugefügt.', 'ACP_RULE_DELETED' => 'Regel gelöscht.', 'ACP_RULE_EDITED' => 'Regel bearbeitet.', diff --git a/language/de_x_sie/boardrules_acp.php b/language/de_x_sie/boardrules_acp.php index 19eba8e4..bc13bc6e 100644 --- a/language/de_x_sie/boardrules_acp.php +++ b/language/de_x_sie/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Diese Regeln sind für Benutzer nicht sichtbar. Den Benutzern werden derzeit die Regeln in der Standardsprache des Forums angezeigt.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Diese Regeln sind für Benutzer nicht sichtbar. Veröffentlichen Sie sie, damit die Standardregeln des Forums verfügbar werden.', 'ACP_BOARDRULES_COPY_RULESET' => 'Sprachregelsatz kopieren', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopiert alle Kategorien und Regeln nach %s. Die kopierten Regeln werden hinter vorhandenen Regeln angefügt. Der vollständige Zielregelsatz bleibt ein Entwurf, bis Sie ihn veröffentlichen.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopiert alle Kategorien und Regeln nach %s. Die kopierten Regeln werden hinter vorhandenen Regeln angefügt. Der vollständige Zielregelsatz wird als Entwurf festgelegt, bis Sie ihn veröffentlichen.', 'ACP_BOARDRULES_COPY_APPEND' => 'An vorhandene Regeln anfügen', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Das Ziel enthält derzeit %d Regel. Diese bleibt unverändert und die kopierten Regeln werden dahinter eingefügt. Bei Konflikten erhalten kopierte Anker einen numerischen Suffix.', @@ -137,10 +137,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Der Regel-Text wird für jede Regel angezeigt, die keine Regel-Kategorie ist.', 'ACP_RULE_MESSAGE_DISABLED' => 'Dies ist eine Regel-Kategorie. Der Regel-Text-Editor ist deshalb nicht verfügbar.', 'ACP_ADD_RULE' => 'Neue Regel erstellen', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Sind Sie sicher, dass Sie diese Regel entfernen möchten?', - 1 => 'Sind Sie sicher, dass diese Regel-Kategorie entfernt werden soll?
Warnung: Das Entfernen einer Regel-Kategorie wird auch alle darin enthaltenen Regeln entfernen.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Sind Sie sicher, dass Sie diese Regel entfernen möchten?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Sind Sie sicher, dass diese Regel-Kategorie entfernt werden soll?
Warnung: Das Entfernen einer Regel-Kategorie wird auch alle darin enthaltenen Regeln entfernen.', 'ACP_RULE_ADDED' => 'Regel hinzugefügt.', 'ACP_RULE_DELETED' => 'Regel gelöscht.', 'ACP_RULE_EDITED' => 'Regel bearbeitet.', diff --git a/language/el/boardrules_acp.php b/language/el/boardrules_acp.php index 2406ec4a..79dc0101 100644 --- a/language/el/boardrules_acp.php +++ b/language/el/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Αυτοί οι κανόνες δεν είναι ορατοί στους χρήστες. Οι χρήστες βλέπουν αυτή τη στιγμή τους κανόνες στην προεπιλεγμένη γλώσσα της κοινότητας.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Αυτοί οι κανόνες δεν είναι ορατοί στους χρήστες. Δημοσιεύστε τους για να γίνουν διαθέσιμοι οι προεπιλεγμένοι κανόνες της κοινότητας.', 'ACP_BOARDRULES_COPY_RULESET' => 'Αντιγραφή συνόλου κανόνων γλώσσας', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Αντιγράψτε κάθε κατηγορία και κανόνα στη γλώσσα %s. Οι αντιγραμμένοι κανόνες προστίθενται μετά από τυχόν υπάρχοντες και ολόκληρο το σύνολο κανόνων προορισμού παραμένει πρόχειρο μέχρι να το δημοσιεύσετε.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Αντιγράψτε κάθε κατηγορία και κανόνα στη γλώσσα %s. Οι αντιγραμμένοι κανόνες προστίθενται μετά από τυχόν υπάρχοντες και ολόκληρο το σύνολο κανόνων προορισμού θα οριστεί ως πρόχειρο μέχρι να το δημοσιεύσετε.', 'ACP_BOARDRULES_COPY_APPEND' => 'Προσθήκη στους υπάρχοντες κανόνες', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Ο προορισμός περιέχει αυτή τη στιγμή %d κανόνα. Θα παραμείνει αμετάβλητος και οι αντιγραμμένοι κανόνες θα προστεθούν μετά από αυτόν. Οι αντιγραμμένες άγκυρες που συγκρούονται θα λάβουν αριθμητικό επίθημα.', @@ -136,10 +136,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Το κείμενο του όρου εμφανίζεται στη σελίδα όρων για κάθε όρο (οι κατηγορίες δεν εμφανίζουν το κείμενο όρου).', 'ACP_RULE_MESSAGE_DISABLED' => 'Αυτή είναι μια κατηγορία που περιέχει όρους, ο κειμενογράφος έχει απενεργοποιηθεί.', 'ACP_ADD_RULE' => 'Δημιουργία νέου όρου', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Είστε σίγουρος (-η) ότι θέλετε να διαγράψετε αυτό τον όρο.', - 1 => 'Είστε σίγουρος (-η) ότι θέλετε να διαγράψετε αυτό τον όρο.
Προσοχή: Διαγράφοντας μια κατηγορία όρων, θα διαγραφούν και όλοι οι όροι που περιέχονται σε αυτή.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Είστε σίγουρος (-η) ότι θέλετε να διαγράψετε αυτό τον όρο.', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Είστε σίγουρος (-η) ότι θέλετε να διαγράψετε αυτό τον όρο.
Προσοχή: Διαγράφοντας μια κατηγορία όρων, θα διαγραφούν και όλοι οι όροι που περιέχονται σε αυτή.', 'ACP_RULE_ADDED' => 'Ο όρος προστέθηκε με επιτυχία.', 'ACP_RULE_DELETED' => 'Ο όρος διαγράφηκε με επιτυχία.', 'ACP_RULE_EDITED' => 'Ο όρος επεξεργάστηκε με επιτυχία.', diff --git a/language/en/boardrules_acp.php b/language/en/boardrules_acp.php index a101c7d9..b76eb819 100644 --- a/language/en/boardrules_acp.php +++ b/language/en/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'These rules are not visible to users. Users currently see rules from the board’s default language.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'These rules are not visible to users. Publish them to make the board’s default rules available.', 'ACP_BOARDRULES_COPY_RULESET' => 'Copy language ruleset', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copy every category and rule into %s. Copied rules are appended after any existing rules, and the complete target ruleset remains a draft until you publish it.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copy every category and rule into %s. Copied rules are appended after any existing rules. The complete target ruleset will be set to draft until you publish it.', 'ACP_BOARDRULES_COPY_APPEND' => 'Append to existing rules', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'The target currently contains %d rule. It will remain unchanged, and copied rules will be added after it. Any conflicting copied anchors will receive a numeric suffix.', @@ -138,10 +138,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'The rule message is displayed on the rules page for each rule (categories do not display a rule message).', 'ACP_RULE_MESSAGE_DISABLED' => 'This is a category containing rules, the message editor has been disabled.', 'ACP_ADD_RULE' => 'Create new rule', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Are you sure you want to remove this rule?', - 1 => 'Are you sure you want to remove this rule category?
Warning: Removing a rule category will also remove all rules contained within it.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Are you sure you want to remove this rule?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Are you sure you want to remove this rule category?
Warning: Removing a rule category will also remove all rules contained within it.', 'ACP_RULE_ADDED' => 'Rule successfully added.', 'ACP_RULE_DELETED' => 'Rule successfully removed.', 'ACP_RULE_EDITED' => 'Rule successfully edited.', diff --git a/language/es/boardrules_acp.php b/language/es/boardrules_acp.php index dc38b65a..01d119dc 100644 --- a/language/es/boardrules_acp.php +++ b/language/es/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Estas normas no son visibles para los usuarios. Los usuarios ven actualmente las normas en el idioma predeterminado del sitio.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Estas normas no son visibles para los usuarios. Publíquelas para que estén disponibles las normas predeterminadas del sitio.', 'ACP_BOARDRULES_COPY_RULESET' => 'Copiar conjunto de normas del idioma', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copia cada categoría y norma en %s. Las normas copiadas se añaden después de las existentes y el conjunto completo de destino permanece como borrador hasta que se publique.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copia cada categoría y norma en %s. Las normas copiadas se añaden después de las existentes y el conjunto completo de destino se establecerá como borrador hasta que se publique.', 'ACP_BOARDRULES_COPY_APPEND' => 'Añadir a las normas existentes', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'El destino contiene actualmente %d norma. Permanecerá sin cambios y las normas copiadas se añadirán después. Los anclajes copiados que entren en conflicto recibirán un sufijo numérico.', @@ -137,10 +137,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'El mensaje de la Norma se muestra en la página de Normas para cada norma (las categorías no muestran un mensaje de norma).', 'ACP_RULE_MESSAGE_DISABLED' => 'Está es una categoría que contiene normas, el editor de mensajes está deshabilitado.', 'ACP_ADD_RULE' => 'Crear nueva norma', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => '¿Está seguro de querer borrar esta norma?', - 1 => '¿Está seguro de querer borrar esta norma de categoría?
Advertencia: Al eliminar una norma de categoría también eliminará todas las normas contenidas de la misma.', - ), + 'ACP_DELETE_RULE_CONFIRM' => '¿Está seguro de querer borrar esta norma?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => '¿Está seguro de querer borrar esta norma de categoría?
Advertencia: Al eliminar una norma de categoría también eliminará todas las normas contenidas de la misma.', 'ACP_RULE_ADDED' => 'Norma añadida correctamente.', 'ACP_RULE_DELETED' => 'Norma eliminada correctamente.', 'ACP_RULE_EDITED' => 'Norma editada correctamente.', diff --git a/language/et/boardrules_acp.php b/language/et/boardrules_acp.php index a7e0b27a..756dffe9 100644 --- a/language/et/boardrules_acp.php +++ b/language/et/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Need reeglid pole kasutajatele nähtavad. Kasutajad näevad praegu foorumi vaikekeele reegleid.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Need reeglid pole kasutajatele nähtavad. Avalda need, et foorumi vaikereeglid oleksid saadaval.', 'ACP_BOARDRULES_COPY_RULESET' => 'Kopeeri keele reeglistik', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopeeri kõik kategooriad ja reeglid keelde %s. Kopeeritud reeglid lisatakse olemasolevate järele ning kogu sihtkeele reeglistik jääb mustandiks, kuni selle avaldad.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopeeri kõik kategooriad ja reeglid keelde %s. Kopeeritud reeglid lisatakse olemasolevate järele ning kogu sihtkeele reeglistik määratakse mustandiks, kuni selle avaldad.', 'ACP_BOARDRULES_COPY_APPEND' => 'Lisa olemasolevatele reeglitele', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Sihtkeeles on praegu %d reegel. See jääb muutmata ning kopeeritud reeglid lisatakse selle järele. Konfliktsed kopeeritud ankrud saavad numbrilise järelliite.', @@ -136,10 +136,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Reegli sisu näidatakse reeglite lehel igal reeglil (kategooriatel ei ole reeglite sisu).', 'ACP_RULE_MESSAGE_DISABLED' => 'See on kategooria, mis sisaldab reegleid, sõnumi muutja on keelatud.', 'ACP_ADD_RULE' => 'Loo uus reegel', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Oled sa kindel, et soovid eemaldada selle reegli?', - 1 => 'Oled sa kindel, et soovid eemaldada selle reeglite kategooria?
Hoiatus: Reeglite kategooria eemaldamisega, eemaldad ka selles kategoorias asetsevad reeglid.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Oled sa kindel, et soovid eemaldada selle reegli?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Oled sa kindel, et soovid eemaldada selle reeglite kategooria?
Hoiatus: Reeglite kategooria eemaldamisega, eemaldad ka selles kategoorias asetsevad reeglid.', 'ACP_RULE_ADDED' => 'Reegel on edukalt lisatud.', 'ACP_RULE_DELETED' => 'Reegel on edukalt kustutatud.', 'ACP_RULE_EDITED' => 'Reegel on edukalt muudetud.', diff --git a/language/fi/boardrules_acp.php b/language/fi/boardrules_acp.php index 7f543743..b77c3684 100644 --- a/language/fi/boardrules_acp.php +++ b/language/fi/boardrules_acp.php @@ -90,7 +90,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Nämä säännöt eivät näy käyttäjille. Käyttäjät näkevät tällä hetkellä foorumin oletuskielen säännöt.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Nämä säännöt eivät näy käyttäjille. Julkaise ne, jotta foorumin oletussäännöt tulevat saataville.', 'ACP_BOARDRULES_COPY_RULESET' => 'Kopioi kielen sääntökokonaisuus', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopioi kaikki kategoriat ja säännöt kielelle %s. Kopioidut säännöt lisätään olemassa olevien sääntöjen perään, ja koko kohdekielen sääntökokonaisuus pysyy luonnoksena, kunnes julkaiset sen.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopioi kaikki kategoriat ja säännöt kielelle %s. Kopioidut säännöt lisätään olemassa olevien sääntöjen perään, ja koko kohdekielen sääntökokonaisuus asetetaan luonnokseksi, kunnes julkaiset sen.', 'ACP_BOARDRULES_COPY_APPEND' => 'Lisää olemassa oleviin sääntöihin', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Kohteessa on tällä hetkellä %d sääntö. Se pysyy muuttumattomana, ja kopioidut säännöt lisätään sen perään. Ristiriitaisiin kopioituihin ankkureihin lisätään numeerinen jälkiliite.', @@ -135,10 +135,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Säännön sisältö näytetään kunkin säännön kohdalla Säännöt-sivulla (kategoriat eivät näytä sääntöviestiä).', 'ACP_RULE_MESSAGE_DISABLED' => 'Tämä on kategoria, joka sisältää sääntöjä, viestieditori on poistettu käytöstä.', 'ACP_ADD_RULE' => 'Luo uusi sääntö', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Haluatko varmasti poistaa tämän säännön?', - 1 => 'Haluatko varmasti poistaa tämän sääntökategorian?
Varoitus: Sääntökategorian poistaminen poistaa myös kaikki sen sisältämät säännöt.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Haluatko varmasti poistaa tämän säännön?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Haluatko varmasti poistaa tämän sääntökategorian?
Varoitus: Sääntökategorian poistaminen poistaa myös kaikki sen sisältämät säännöt.', 'ACP_RULE_ADDED' => 'Sääntö lisätty onnistuneesti.', 'ACP_RULE_DELETED' => 'Sääntö poistettu onnistuneesti.', 'ACP_RULE_EDITED' => 'Sääntöä muokattu onnistuneesti.', diff --git a/language/fr/boardrules_acp.php b/language/fr/boardrules_acp.php index c71aa621..2b31eda6 100644 --- a/language/fr/boardrules_acp.php +++ b/language/fr/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Ces règles ne sont pas visibles par les utilisateurs. Ceux-ci voient actuellement les règles dans la langue par défaut du forum.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Ces règles ne sont pas visibles par les utilisateurs. Publiez-les pour rendre disponibles les règles par défaut du forum.', 'ACP_BOARDRULES_COPY_RULESET' => 'Copier l’ensemble de règles d’une langue', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copie chaque catégorie et règle vers %s. Les règles copiées sont ajoutées après les règles existantes et l’ensemble complet de règles cible reste un brouillon jusqu’à sa publication.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copie chaque catégorie et règle vers %s. Les règles copiées sont ajoutées après les règles existantes et l’ensemble complet de règles cible sera défini comme brouillon jusqu’à sa publication.', 'ACP_BOARDRULES_COPY_APPEND' => 'Ajouter aux règles existantes', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'La cible contient actuellement %d règle. Elle restera inchangée et les règles copiées seront ajoutées après celle-ci. Les ancres copiées en conflit recevront un suffixe numérique.', @@ -137,10 +137,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Le texte de la règle est affiché sur la page des règles pour chacune d’elle (les catégories n’affichent aucun texte de règle).', 'ACP_RULE_MESSAGE_DISABLED' => 'Cette catégorie contient des règles, l’éditeur de message a été désactivé.', 'ACP_ADD_RULE' => 'Créer une nouvelle règle', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Confirmer la supression de cette règle.', - 1 => 'Confirmer la suppression de cette catégorie.
Information importante : La suppression d’une catégorie supprimera aussi toutes les règles qu’elle contient.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Confirmer la supression de cette règle.', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Confirmer la suppression de cette catégorie.
Information importante : La suppression d’une catégorie supprimera aussi toutes les règles qu’elle contient.', 'ACP_RULE_ADDED' => 'Règle ajoutée avec succès.', 'ACP_RULE_DELETED' => 'Règle supprimée avec succès.', 'ACP_RULE_EDITED' => 'Règle modifiée avec succès.', diff --git a/language/he/boardrules_acp.php b/language/he/boardrules_acp.php index 3bb06470..c292c3d5 100644 --- a/language/he/boardrules_acp.php +++ b/language/he/boardrules_acp.php @@ -90,7 +90,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'חוקים אלה אינם גלויים למשתמשים. המשתמשים רואים כעת את החוקים בשפת ברירת המחדל של הפורום.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'חוקים אלה אינם גלויים למשתמשים. פרסם אותם כדי להפוך את חוקי ברירת המחדל של הפורום לזמינים.', 'ACP_BOARDRULES_COPY_RULESET' => 'העתק מערכת חוקים של שפה', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'העתק כל קטגוריה וחוק אל %s. החוקים המועתקים יתווספו אחרי החוקים הקיימים, ומערכת החוקים המלאה בשפת היעד תישאר טיוטה עד שתפורסם.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'העתק כל קטגוריה וחוק אל %s. החוקים המועתקים יתווספו אחרי החוקים הקיימים, ומערכת החוקים המלאה בשפת היעד תוגדר כטיוטה עד שתפורסם.', 'ACP_BOARDRULES_COPY_APPEND' => 'הוסף לחוקים קיימים', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'היעד מכיל כעת %d חוק. הוא יישאר ללא שינוי, והחוקים המועתקים יתווספו אחריו. לעוגנים מועתקים מתנגשים תתווסף סיומת מספרית.', @@ -135,10 +135,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'הודעת החוק מופיעה בעמוד החוקים לכל חוק - קטגוריות לא מציגות הודעת חוקים', 'ACP_RULE_MESSAGE_DISABLED' => 'זוהי קטגוריה המכילה חוקים, העורך לא פעיל.', 'ACP_ADD_RULE' => 'צור חוק חדש', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'האם אתה בטוח שברצונך למחוק חוק זה ?', - 1 => 'האם אתה בטוח שברצונך למחוק חוק זה ?
אזהרה: מחיקת קטגוריית חוקים תמחק גם את כל החוקים בתוכה.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'האם אתה בטוח שברצונך למחוק חוק זה ?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'האם אתה בטוח שברצונך למחוק חוק זה ?
אזהרה: מחיקת קטגוריית חוקים תמחק גם את כל החוקים בתוכה.', 'ACP_RULE_ADDED' => 'החוק נוסף בהצלחה.', 'ACP_RULE_DELETED' => 'החוק הוסר בהצלחה.', 'ACP_RULE_EDITED' => 'החוק נערך בהצלחה.', diff --git a/language/hr/boardrules_acp.php b/language/hr/boardrules_acp.php index b0bbf7c2..82edeb22 100644 --- a/language/hr/boardrules_acp.php +++ b/language/hr/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Ova pravila nisu vidljiva korisnicima. Korisnici trenutačno vide pravila na zadanom jeziku foruma.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Ova pravila nisu vidljiva korisnicima. Objavite ih kako bi zadana pravila foruma bila dostupna.', 'ACP_BOARDRULES_COPY_RULESET' => 'Kopiraj skup pravila jezika', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopirajte sve kategorije i pravila u %s. Kopirana pravila dodat će se nakon postojećih pravila, a cijeli ciljni skup pravila ostat će skica dok ga ne objavite.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopirajte sve kategorije i pravila u %s. Kopirana pravila dodat će se nakon postojećih pravila, a cijeli ciljni skup pravila bit će postavljen kao skica dok ga ne objavite.', 'ACP_BOARDRULES_COPY_APPEND' => 'Dodaj postojećim pravilima', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Cilj trenutačno sadrži %d pravilo. Ono će ostati nepromijenjeno, a kopirana pravila dodat će se nakon njega. Svim kopiranim sidrima koja se podudaraju dodat će se brojčani sufiks.', @@ -140,10 +140,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Poruka pravila prikazana je na stranici pravila za svako pravilo.
Kategorije ne prikazuju poruke pravila.', 'ACP_RULE_MESSAGE_DISABLED' => 'Ovo je kategorija koja sadrži pravila.
Uređivač poruka je onemogućen.', 'ACP_ADD_RULE' => 'Dodaj novo pravilo', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Jesi li siguran/na da želiš izbrisati ovo pravilo?', - 1 => 'Jesi li siguran/na da želiš izbrisati ovo kategorije pravila?
Upozorenje: izbrisivanje kategorije pravila rezultirat će izbrisivanjem svih pravila povezanih s istom.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Jesi li siguran/na da želiš izbrisati ovo pravilo?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Jesi li siguran/na da želiš izbrisati ovo kategorije pravila?
Upozorenje: izbrisivanje kategorije pravila rezultirat će izbrisivanjem svih pravila povezanih s istom.', 'ACP_RULE_ADDED' => 'Pravilo je dodano.', 'ACP_RULE_DELETED' => 'Pravilo je izbrisano.', 'ACP_RULE_EDITED' => 'Pravilo je uređeno.', diff --git a/language/hu/boardrules_acp.php b/language/hu/boardrules_acp.php index 2e537187..d28344b1 100644 --- a/language/hu/boardrules_acp.php +++ b/language/hu/boardrules_acp.php @@ -90,7 +90,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Ezek a szabályok nem láthatók a felhasználók számára. A felhasználók jelenleg a fórum alapértelmezett nyelvén létrehozott szabályokat látják.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Ezek a szabályok nem láthatók a felhasználók számára. Tegye közzé őket, hogy a fórum alapértelmezett szabályai elérhetők legyenek.', 'ACP_BOARDRULES_COPY_RULESET' => 'Nyelvi szabálykészlet másolása', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Másoljon át minden kategóriát és szabályt ide: %s. A másolt szabályok a meglévők után kerülnek, és a teljes cél-szabálykészlet piszkozat marad a közzétételig.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Másoljon át minden kategóriát és szabályt ide: %s. A másolt szabályok a meglévők után kerülnek, és a teljes cél-szabálykészlet piszkozat állapotba kerül a közzétételig.', 'ACP_BOARDRULES_COPY_APPEND' => 'Hozzáfűzés a meglévő szabályokhoz', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'A cél jelenleg %d szabályt tartalmaz. Ez változatlan marad, a másolt szabályok pedig utána kerülnek. Az ütköző másolt horgonyok számozott utótagot kapnak.', @@ -135,10 +135,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'A szabályzat megjelenik az egyes szabályzatok szabályzat oldalán (a kategóriák nem tartalmaznak szabályzatot).', 'ACP_RULE_MESSAGE_DISABLED' => 'Ez egy szabályzatokat tartalmazó kategória, az üzenetszerkesztő le van tiltva.', 'ACP_ADD_RULE' => 'Új szabályzat létrehozása', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Biztos törölni szeretné a szabályzat?', - 1 => 'Biztos szeretné törölni a szabályzat kategőriát?
Figyelmeztetés: A szabályzat kategória eltávolítása esetén eltávolítja az abban foglalt szabályzatokat is.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Biztos törölni szeretné a szabályzat?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Biztos szeretné törölni a szabályzat kategőriát?
Figyelmeztetés: A szabályzat kategória eltávolítása esetén eltávolítja az abban foglalt szabályzatokat is.', 'ACP_RULE_ADDED' => 'Szabályzat sikeresen hozzáadva.', 'ACP_RULE_DELETED' => 'Szabályzat sikeresen törölve.', 'ACP_RULE_EDITED' => 'Szabályzat sikeresen szerkesztve.', diff --git a/language/it/boardrules_acp.php b/language/it/boardrules_acp.php index 14b2041d..ab183f2b 100644 --- a/language/it/boardrules_acp.php +++ b/language/it/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Queste regole non sono visibili agli utenti. Gli utenti vedono attualmente le regole nella lingua predefinita della board.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Queste regole non sono visibili agli utenti. Pubblicale per rendere disponibili le regole predefinite della board.', 'ACP_BOARDRULES_COPY_RULESET' => 'Copia set di regole della lingua', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copia ogni categoria e regola in %s. Le regole copiate vengono aggiunte dopo quelle esistenti e l’intero set di regole di destinazione rimane una bozza finché non viene pubblicato.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copia ogni categoria e regola in %s. Le regole copiate vengono aggiunte dopo quelle esistenti e l’intero set di regole di destinazione verrà impostato come bozza finché non verrà pubblicato.', 'ACP_BOARDRULES_COPY_APPEND' => 'Aggiungi alle regole esistenti', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'La destinazione contiene attualmente %d regola. Rimarrà invariata e le regole copiate verranno aggiunte dopo di essa. Gli ancoraggi copiati in conflitto riceveranno un suffisso numerico.', @@ -137,10 +137,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Il messaggio regola viene visualizzato nella pagina regole per ogni regola (categorie non visualizzano un messaggio regola).', 'ACP_RULE_MESSAGE_DISABLED' => 'Si tratta di una categoria che contiene delle regole, l´editor di messaggio è stato disattivato.', 'ACP_ADD_RULE' => 'Crea nuova regola', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Sei sicuro di voler rimuovere questa regola?', - 1 => 'Sei sicuro di voler rimuovere questa categoria di regole?
Attenzione: La rimozione di una categoria di regole comporterà anche la rimozione di tutte le regole in essa contenute.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Sei sicuro di voler rimuovere questa regola?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Sei sicuro di voler rimuovere questa categoria di regole?
Attenzione: La rimozione di una categoria di regole comporterà anche la rimozione di tutte le regole in essa contenute.', 'ACP_RULE_ADDED' => 'Regola aggiunta con successo.', 'ACP_RULE_DELETED' => 'Regola rimossa con successo.', 'ACP_RULE_EDITED' => 'Regola modificata con successo.', diff --git a/language/nb/boardrules_acp.php b/language/nb/boardrules_acp.php index 0722f12b..10a1a12a 100644 --- a/language/nb/boardrules_acp.php +++ b/language/nb/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Disse reglene er ikke synlige for brukerne. Brukerne ser for øyeblikket reglene på forumets standardspråk.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Disse reglene er ikke synlige for brukerne. Publiser dem for å gjøre forumets standardregler tilgjengelige.', 'ACP_BOARDRULES_COPY_RULESET' => 'Kopier språkets regelsett', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopier alle kategorier og regler til %s. Kopierte regler legges til etter eksisterende regler, og hele regelsettet for målspråket forblir et utkast til du publiserer det.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopier alle kategorier og regler til %s. Kopierte regler legges til etter eksisterende regler, og hele regelsettet for målspråket settes som utkast til du publiserer det.', 'ACP_BOARDRULES_COPY_APPEND' => 'Legg til i eksisterende regler', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Målet inneholder for øyeblikket %d regel. Den forblir uendret, og kopierte regler legges til etter den. Kopierte ankere med konflikter får et numerisk suffiks.', @@ -137,10 +137,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Regelmeldingen vises på regelsiden for hver regel. (Kategorier viser ikke regelmeldinger.)', 'ACP_RULE_MESSAGE_DISABLED' => 'Denne kategorien inneholder regler. Meldingsredigering har blitt deaktivert.', 'ACP_ADD_RULE' => 'Opprett en ny regel', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Er du sikker på at du vil slette denne regelen?', - 1 => 'Er du sikker på at du vil slette denne regelkategori?
Advarsel: Hvis en regelkategori blir slettet, slettes også alle reglene i den.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Er du sikker på at du vil slette denne regelen?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Er du sikker på at du vil slette denne regelkategori?
Advarsel: Hvis en regelkategori blir slettet, slettes også alle reglene i den.', 'ACP_RULE_ADDED' => 'Regelen har blitt opprettet.', 'ACP_RULE_DELETED' => 'Regelen har blitt slettet.', 'ACP_RULE_EDITED' => 'Regelen har blitt oppdatert.', diff --git a/language/nl/boardrules_acp.php b/language/nl/boardrules_acp.php index af42d0b8..172383f7 100644 --- a/language/nl/boardrules_acp.php +++ b/language/nl/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Deze regels zijn niet zichtbaar voor gebruikers. Gebruikers zien momenteel de regels in de standaardtaal van het forum.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Deze regels zijn niet zichtbaar voor gebruikers. Publiceer ze om de standaardregels van het forum beschikbaar te maken.', 'ACP_BOARDRULES_COPY_RULESET' => 'Regelset van taal kopiëren', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopieer elke categorie en regel naar %s. Gekopieerde regels worden na bestaande regels toegevoegd en de volledige doelregelset blijft een concept totdat je deze publiceert.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopieer elke categorie en regel naar %s. Gekopieerde regels worden na bestaande regels toegevoegd en de volledige doelregelset wordt als concept ingesteld totdat je deze publiceert.', 'ACP_BOARDRULES_COPY_APPEND' => 'Aan bestaande regels toevoegen', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Het doel bevat momenteel %d regel. Deze blijft ongewijzigd en gekopieerde regels worden erna toegevoegd. Conflicterende gekopieerde ankers krijgen een numeriek achtervoegsel.', @@ -137,10 +137,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Het regelbericht wordt weergegeven op de regelspagina voor iedere regel (categorieën geven geen regelbericht weer.)', 'ACP_RULE_MESSAGE_DISABLED' => 'Deze categrie bevat onderregels. Je kan hier geen bericht tevegen.', 'ACP_ADD_RULE' => 'Nieuwe regel aanmaken', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Weet je zeker dat je deze regel wilt verwijderen?', - 1 => 'Weet je zeker dat je deze regel categorie wilt verwijderen?
Let op: Als je deze regel categorie verwijdert, verwijder je ook de onderliggende regels.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Weet je zeker dat je deze regel wilt verwijderen?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Weet je zeker dat je deze regel categorie wilt verwijderen?
Let op: Als je deze regel categorie verwijdert, verwijder je ook de onderliggende regels.', 'ACP_RULE_ADDED' => 'Regel succesvol toegevoegd.', 'ACP_RULE_DELETED' => 'Regel succesvol verwijderd.', 'ACP_RULE_EDITED' => 'Regel succesvol gewijzigd.', diff --git a/language/pl/boardrules_acp.php b/language/pl/boardrules_acp.php index ea996ace..e4e7f5fe 100644 --- a/language/pl/boardrules_acp.php +++ b/language/pl/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Te przepisy nie są widoczne dla użytkowników. Użytkownicy widzą obecnie regulamin w domyślnym języku forum.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Te przepisy nie są widoczne dla użytkowników. Opublikuj je, aby udostępnić domyślny regulamin forum.', 'ACP_BOARDRULES_COPY_RULESET' => 'Kopiuj regulamin języka', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopiuje wszystkie rozdziały i przepisy do %s. Skopiowane przepisy są dodawane za istniejącymi, a cały regulamin docelowy pozostaje szkicem do czasu publikacji.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopiuje wszystkie rozdziały i przepisy do %s. Skopiowane przepisy są dodawane za istniejącymi, a cały regulamin docelowy zostanie ustawiony jako szkic do czasu publikacji.', 'ACP_BOARDRULES_COPY_APPEND' => 'Dodaj do istniejących przepisów', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Element docelowy zawiera obecnie %d przepis. Pozostanie on bez zmian, a skopiowane przepisy zostaną dodane za nim. Skopiowane zakotwiczenia powodujące konflikt otrzymają przyrostek liczbowy.', @@ -141,10 +141,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Treść przepisu jest wyświetlana na stronie regulaminu dla każdego przepisu (rozdziały nie wyświetlają treści przepisu).', 'ACP_RULE_MESSAGE_DISABLED' => 'To jest rozdział zawierający przepisy - edytor treści przepisu został wyłączony.', 'ACP_ADD_RULE' => 'Utwórz nowy przepis', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Czy na pewno chcesz usunąć ten przepis?', - 1 => 'Czy na pewno chcesz usunąć ten kategorii reguły?
Uwaga: Usunięcie kategorii reguły spowoduje także usunięcie wszystkich zawartych w nim zasad.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Czy na pewno chcesz usunąć ten przepis?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Czy na pewno chcesz usunąć ten kategorii reguły?
Uwaga: Usunięcie kategorii reguły spowoduje także usunięcie wszystkich zawartych w nim zasad.', 'ACP_RULE_ADDED' => 'Reguła została dodana.', 'ACP_RULE_DELETED' => 'Reguła została usunięta.', 'ACP_RULE_EDITED' => 'Reguła została zaktualizowana.', diff --git a/language/pt/boardrules_acp.php b/language/pt/boardrules_acp.php index c5fa71e5..1d5e5b3f 100644 --- a/language/pt/boardrules_acp.php +++ b/language/pt/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Estas regras não estão visíveis para os utilizadores. Os utilizadores veem atualmente as regras no idioma predefinido do fórum.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Estas regras não estão visíveis para os utilizadores. Publique-as para disponibilizar as regras predefinidas do fórum.', 'ACP_BOARDRULES_COPY_RULESET' => 'Copiar conjunto de regras do idioma', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copia todas as categorias e regras para %s. As regras copiadas são adicionadas depois das regras existentes e o conjunto completo de destino permanece como rascunho até ser publicado.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copia todas as categorias e regras para %s. As regras copiadas são adicionadas depois das regras existentes e o conjunto completo de destino será definido como rascunho até ser publicado.', 'ACP_BOARDRULES_COPY_APPEND' => 'Adicionar às regras existentes', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'O destino contém atualmente %d regra. Esta permanecerá inalterada e as regras copiadas serão adicionadas depois dela. As âncoras copiadas em conflito receberão um sufixo numérico.', @@ -137,10 +137,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'A mensagem da regra é exibida na página de regra para cada regra (categorias não exibem mensagens das regras).', 'ACP_RULE_MESSAGE_DISABLED' => 'Esta é uma categoria que contém regras, o editor mensagem foi desativado.', 'ACP_ADD_RULE' => 'Criar nova regra', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Tem a certeza que deseja eliminar esta regra?', - 1 => 'Tem a certeza que deseja eliminar esta categoria de regra?
Aviso: Removendo um categoria de regra irá remover todas as regras contidas dentro dela.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Tem a certeza que deseja eliminar esta regra?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Tem a certeza que deseja eliminar esta categoria de regra?
Aviso: Removendo um categoria de regra irá remover todas as regras contidas dentro dela.', 'ACP_RULE_ADDED' => 'Regra criada com sucesso.', 'ACP_RULE_DELETED' => 'Regra eliminada com sucesso.', 'ACP_RULE_EDITED' => 'Regra editada com sucesso.', diff --git a/language/pt_br/boardrules_acp.php b/language/pt_br/boardrules_acp.php index dc65dc0b..344cd529 100644 --- a/language/pt_br/boardrules_acp.php +++ b/language/pt_br/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Estas regras não estão visíveis para os usuários. Os usuários estão vendo as regras no idioma padrão do fórum.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Estas regras não estão visíveis para os usuários. Publique-as para disponibilizar as regras padrão do fórum.', 'ACP_BOARDRULES_COPY_RULESET' => 'Copiar conjunto de regras do idioma', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copia todas as categorias e regras para %s. As regras copiadas são adicionadas depois das regras existentes e o conjunto completo de destino permanece como rascunho até ser publicado.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copia todas as categorias e regras para %s. As regras copiadas são adicionadas depois das regras existentes e o conjunto completo de destino será definido como rascunho até ser publicado.', 'ACP_BOARDRULES_COPY_APPEND' => 'Adicionar às regras existentes', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'O destino contém atualmente %d regra. Ela permanecerá inalterada e as regras copiadas serão adicionadas depois dela. As âncoras copiadas em conflito receberão um sufixo numérico.', @@ -137,10 +137,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'A mensagem da regra é exibida na página de regra para cada regra (categorias não exibem mensagens das regras).', 'ACP_RULE_MESSAGE_DISABLED' => 'Esta é uma categoria que contém regras, o editor mensagem foi desativado.', 'ACP_ADD_RULE' => 'Criar nova regra', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Tem certeza que deseja remover esta regra?', - 1 => 'Tem certeza que deseja remover esta categoria de regra?
Aviso: Removendo um categoria de regra irá remover todas as regras contidas dentro dela.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Tem certeza que deseja remover esta regra?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Tem certeza que deseja remover esta categoria de regra?
Aviso: Removendo um categoria de regra irá remover todas as regras contidas dentro dela.', 'ACP_RULE_ADDED' => 'Regra criada com sucesso.', 'ACP_RULE_DELETED' => 'Regra removida com sucesso.', 'ACP_RULE_EDITED' => 'Regra editada com sucesso.', diff --git a/language/pt_preao/boardrules_acp.php b/language/pt_preao/boardrules_acp.php index 2f725f61..e2fb8408 100644 --- a/language/pt_preao/boardrules_acp.php +++ b/language/pt_preao/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Estas regras não estão visíveis para os utilizadores. Os utilizadores veem actualmente as regras no idioma predefinido do fórum.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Estas regras não estão visíveis para os utilizadores. Publique-as para disponibilizar as regras predefinidas do fórum.', 'ACP_BOARDRULES_COPY_RULESET' => 'Copiar conjunto de regras do idioma', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copia todas as categorias e regras para %s. As regras copiadas são adicionadas depois das regras existentes e o conjunto completo de destino permanece como rascunho até ser publicado.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copia todas as categorias e regras para %s. As regras copiadas são adicionadas depois das regras existentes e o conjunto completo de destino será definido como rascunho até ser publicado.', 'ACP_BOARDRULES_COPY_APPEND' => 'Adicionar às regras existentes', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'O destino contém actualmente %d regra. Esta permanecerá inalterada e as regras copiadas serão adicionadas depois dela. As âncoras copiadas em conflito receberão um sufixo numérico.', @@ -137,10 +137,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'A mensagem da regra é exibida na página de regra para cada regra (categorias não exibem mensagens das regras).', 'ACP_RULE_MESSAGE_DISABLED' => 'Esta é uma categoria que contém regras, o editor mensagem foi desativado.', 'ACP_ADD_RULE' => 'Criar nova regra', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Tem a certeza que deseja eliminar esta regra?', - 1 => 'Tem a certeza que deseja eliminar esta categoria de regra?
Aviso: Removendo um categoria de regra irá remover todas as regras contidas dentro dela.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Tem a certeza que deseja eliminar esta regra?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Tem a certeza que deseja eliminar esta categoria de regra?
Aviso: Removendo um categoria de regra irá remover todas as regras contidas dentro dela.', 'ACP_RULE_ADDED' => 'Regra criada com sucesso.', 'ACP_RULE_DELETED' => 'Regra eliminada com sucesso.', 'ACP_RULE_EDITED' => 'Regra editada com sucesso.', diff --git a/language/ro/boardrules_acp.php b/language/ro/boardrules_acp.php index d48a5089..b6d3c51d 100644 --- a/language/ro/boardrules_acp.php +++ b/language/ro/boardrules_acp.php @@ -90,7 +90,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Aceste reguli nu sunt vizibile utilizatorilor. Utilizatorii văd în prezent regulile în limba implicită a forumului.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Aceste reguli nu sunt vizibile utilizatorilor. Publicați-le pentru a face disponibile regulile implicite ale forumului.', 'ACP_BOARDRULES_COPY_RULESET' => 'Copiază setul de reguli al limbii', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copiați fiecare categorie și regulă în %s. Regulile copiate sunt adăugate după cele existente, iar setul complet de reguli țintă rămâne ciornă până când îl publicați.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Copiați fiecare categorie și regulă în %s. Regulile copiate sunt adăugate după cele existente, iar setul complet de reguli țintă va fi setat ca ciornă până când îl publicați.', 'ACP_BOARDRULES_COPY_APPEND' => 'Adaugă la regulile existente', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Limba țintă conține în prezent %d regulă. Aceasta va rămâne neschimbată, iar regulile copiate vor fi adăugate după ea. Ancorele copiate care intră în conflict vor primi un sufix numeric.', @@ -139,10 +139,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Mesajul regula apare doar pe pagina de reguli.', 'ACP_RULE_MESSAGE_DISABLED' => 'Aceasta categorie contine mesaje, iar editarea a fost oprita.', 'ACP_ADD_RULE' => 'Creaza o regula noua', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Esti sigur ca vrei sa stergi aceasta regula?', - 1 => 'Esti sigur ca vrei sa stergi aceasta regula?
Avertisment: Eliminarea unei categorii reguli va duce la elimina toate regulile conținute în ea.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Esti sigur ca vrei sa stergi aceasta regula?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Esti sigur ca vrei sa stergi aceasta regula?
Avertisment: Eliminarea unei categorii reguli va duce la elimina toate regulile conținute în ea.', 'ACP_RULE_ADDED' => 'Regula a fost adaugata cu succes.', 'ACP_RULE_DELETED' => 'Regula a fost stearsa cu succes.', 'ACP_RULE_EDITED' => 'Regula a fost editata cu succes.', diff --git a/language/ru/boardrules_acp.php b/language/ru/boardrules_acp.php index 79661ce8..acaf1069 100644 --- a/language/ru/boardrules_acp.php +++ b/language/ru/boardrules_acp.php @@ -90,7 +90,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Эти правила не видны пользователям. Сейчас пользователи видят правила на языке форума по умолчанию.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Эти правила не видны пользователям. Опубликуйте их, чтобы сделать правила форума по умолчанию доступными.', 'ACP_BOARDRULES_COPY_RULESET' => 'Копирование набора правил языка', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Копирует все категории и правила в %s. Скопированные правила добавляются после существующих, а полный целевой набор правил остаётся черновиком до публикации.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Копирует все категории и правила в %s. Скопированные правила добавляются после существующих, а полный целевой набор правил будет переведён в статус черновика до публикации.', 'ACP_BOARDRULES_COPY_APPEND' => 'Добавить к существующим правилам', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Сейчас целевой язык содержит %d правило. Оно останется без изменений, а скопированные правила будут добавлены после него. Конфликтующие скопированные якоря получат числовой суффикс.', @@ -140,10 +140,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Текст отображается под каждым правилом в их списке. Под категориями текст не отображается', 'ACP_RULE_MESSAGE_DISABLED' => 'Эта котегория содержит правила, поэтому редактор текста правил отключен', 'ACP_ADD_RULE' => 'Создать новое правило', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Вы действительно хотите удалить данное правило?', - 1 => 'Вы действительно хотите удалить данное правило?
Предупреждение: удаление раздела правил также приведёт к удалению всех входящих в него пунктов.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Вы действительно хотите удалить данное правило?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Вы действительно хотите удалить данное правило?
Предупреждение: удаление раздела правил также приведёт к удалению всех входящих в него пунктов.', 'ACP_RULE_ADDED' => 'Правило успешно добавлено.', 'ACP_RULE_DELETED' => 'Правило успешно удалено.', 'ACP_RULE_EDITED' => 'Правило успешно отредактировано.', diff --git a/language/sk/boardrules_acp.php b/language/sk/boardrules_acp.php index bf71038f..067d3df9 100644 --- a/language/sk/boardrules_acp.php +++ b/language/sk/boardrules_acp.php @@ -90,7 +90,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Tieto pravidlá nie sú pre používateľov viditeľné. Používatelia teraz vidia pravidlá v predvolenom jazyku fóra.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Tieto pravidlá nie sú pre používateľov viditeľné. Zverejnite ich, aby boli predvolené pravidlá fóra dostupné.', 'ACP_BOARDRULES_COPY_RULESET' => 'Kopírovať jazykovú sadu pravidiel', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Skopíruje všetky kategórie a pravidlá do %s. Skopírované pravidlá sa pridajú za existujúce pravidlá a celá cieľová sada zostane konceptom, kým ju nezverejníte.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Skopíruje všetky kategórie a pravidlá do %s. Skopírované pravidlá sa pridajú za existujúce pravidlá a celá cieľová sada bude nastavená ako koncept, kým ju nezverejníte.', 'ACP_BOARDRULES_COPY_APPEND' => 'Pridať k existujúcim pravidlám', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Cieľ teraz obsahuje %d pravidlo. Zostane nezmenené a skopírované pravidlá budú pridané zaň. Konfliktné skopírované odkazy dostanú číselnú príponu.', @@ -140,10 +140,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Obsah pravidla je zobrazený pri každom z pravidiel (toto pole je pri kategóriách ignorované).', 'ACP_RULE_MESSAGE_DISABLED' => 'Toto je kategória pravidiel, preto nie je možné pravidlo upravovať.', 'ACP_ADD_RULE' => 'Vytvoriť nové pravidlo', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Naozaj chcete odstrániť toto pravidlo?', - 1 => 'Naozaj chcete odstrániť toto pravidlo?
Varovanie: Odstránením kategórie odstraníte tiež všetky pravidlá v nej.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Naozaj chcete odstrániť toto pravidlo?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Naozaj chcete odstrániť toto pravidlo?
Varovanie: Odstránením kategórie odstraníte tiež všetky pravidlá v nej.', 'ACP_RULE_ADDED' => 'Pravidlo bolo úspešne pridané.', 'ACP_RULE_DELETED' => 'Pravidlo bolo úspešne odstránené.', 'ACP_RULE_EDITED' => 'Pravidlo bolo úspešne upravené.', diff --git a/language/sv/boardrules_acp.php b/language/sv/boardrules_acp.php index fa7881d0..fe749321 100644 --- a/language/sv/boardrules_acp.php +++ b/language/sv/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Dessa regler är inte synliga för användarna. Användarna ser för närvarande reglerna på forumets standardspråk.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Dessa regler är inte synliga för användarna. Publicera dem för att göra forumets standardregler tillgängliga.', 'ACP_BOARDRULES_COPY_RULESET' => 'Kopiera språkets regeluppsättning', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopiera alla kategorier och regler till %s. Kopierade regler läggs till efter befintliga regler och målspråkets fullständiga regeluppsättning förblir ett utkast tills du publicerar den.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Kopiera alla kategorier och regler till %s. Kopierade regler läggs till efter befintliga regler och målspråkets fullständiga regeluppsättning sätts som utkast tills du publicerar den.', 'ACP_BOARDRULES_COPY_APPEND' => 'Lägg till i befintliga regler', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Målet innehåller för närvarande %d regel. Den förblir oförändrad och kopierade regler läggs till efter den. Kopierade ankare med konflikter får ett numeriskt suffix.', @@ -137,10 +137,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Regelmeddelandet visas på regelsidan för varje regel (kategorier visar ej regelmeddelanden).', 'ACP_RULE_MESSAGE_DISABLED' => 'Denna kategori innehåller regler, meddelandeeditorn har deaktiverats.', 'ACP_ADD_RULE' => 'Skapa en ny regel', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Är du säker på att du vill ta bort denna regel?', - 1 => 'Är du säker på att du vill ta bort denna regelkategori?
Varning: raderas en regelkategori så raderas även alla regler i denna kategori.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Är du säker på att du vill ta bort denna regel?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Är du säker på att du vill ta bort denna regelkategori?
Varning: raderas en regelkategori så raderas även alla regler i denna kategori.', 'ACP_RULE_ADDED' => 'Regeln har skapats.', 'ACP_RULE_DELETED' => 'Regeln har raderats.', 'ACP_RULE_EDITED' => 'Regeln har uppdaterats.', diff --git a/language/tr/boardrules_acp.php b/language/tr/boardrules_acp.php index 89dd6c43..13abd5ab 100644 --- a/language/tr/boardrules_acp.php +++ b/language/tr/boardrules_acp.php @@ -91,7 +91,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Bu kurallar kullanıcılar tarafından görülemez. Kullanıcılar şu anda forumun varsayılan dilindeki kuralları görüyor.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Bu kurallar kullanıcılar tarafından görülemez. Forumun varsayılan kurallarını kullanılabilir hale getirmek için yayınlayın.', 'ACP_BOARDRULES_COPY_RULESET' => 'Dil kural kümesini kopyala', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Tüm kategorileri ve kuralları %s diline kopyalayın. Kopyalanan kurallar mevcut kuralların ardından eklenir ve hedef kural kümesinin tamamı siz yayınlayana kadar taslak olarak kalır.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Tüm kategorileri ve kuralları %s diline kopyalayın. Kopyalanan kurallar mevcut kuralların ardından eklenir ve hedef kural kümesinin tamamı siz yayınlayana kadar taslak olarak ayarlanır.', 'ACP_BOARDRULES_COPY_APPEND' => 'Mevcut kurallara ekle', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Hedef şu anda %d kural içeriyor. Bu kurallar değişmeden kalacak ve kopyalanan kurallar onların ardından eklenecek. Çakışan kopyalanmış bağlantı çapalarına sayısal bir son ek verilecek.', @@ -132,10 +132,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Kural mesajı, her bir kural için kurallar sayfasında gösterilir (kategoriler bir kural mesajı görüntülemez).', 'ACP_RULE_MESSAGE_DISABLED' => 'Bu kurallar içeren bir kategoridir, mesaj editörü devre dışı bırakıldı.', 'ACP_ADD_RULE' => 'Yeni kural oluştur', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Bu kuralı kaldırmak istediğinize emin misiniz?', - 1 => 'Bu kuralı kaldırmak istediğinize emin misiniz?
Dikkat: Bir kural kategorisi kaldırıldığında içerdiği tüm kurallar da kaldırılır.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Bu kuralı kaldırmak istediğinize emin misiniz?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Bu kuralı kaldırmak istediğinize emin misiniz?
Dikkat: Bir kural kategorisi kaldırıldığında içerdiği tüm kurallar da kaldırılır.', 'ACP_RULE_ADDED' => 'Kural başarıyla eklendi.', 'ACP_RULE_DELETED' => 'Kural başarıyla kaldırıldı.', 'ACP_RULE_EDITED' => 'Kural başarıyla düzenlendi.', diff --git a/language/uk/boardrules_acp.php b/language/uk/boardrules_acp.php index a890ed44..2e9d7ec8 100644 --- a/language/uk/boardrules_acp.php +++ b/language/uk/boardrules_acp.php @@ -90,7 +90,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => 'Ці правила не видимі користувачам. Зараз користувачі бачать правила типовою мовою форуму.', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => 'Ці правила не видимі користувачам. Опублікуйте їх, щоб зробити типові правила форуму доступними.', 'ACP_BOARDRULES_COPY_RULESET' => 'Копіювати набір правил мови', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Копіює всі категорії та правила до %s. Скопійовані правила додаються після наявних, а повний цільовий набір правил залишається чернеткою до публікації.', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => 'Копіює всі категорії та правила до %s. Скопійовані правила додаються після наявних, а повний цільовий набір правил буде переведено в статус чернетки до публікації.', 'ACP_BOARDRULES_COPY_APPEND' => 'Додати до наявних правил', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => 'Зараз цільова мова містить %d правило. Воно залишиться без змін, а скопійовані правила буде додано після нього. Конфліктні скопійовані якорі отримають числовий суфікс.', @@ -140,10 +140,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => 'Текст відображається під кожним правилом у списку. Під категоріями текст не відображається', 'ACP_RULE_MESSAGE_DISABLED' => 'Ця категория містить правила, тому редактор тексту правил вимкнено', 'ACP_ADD_RULE' => 'Створити нове правило', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => 'Ви дійсно хочете видалити це правило?', - 1 => 'Ви дійсно хочете видалити це правило?
Попередження: видалення розділу правил також призведе до видалення всіх пунктів, що входять до нього.', - ), + 'ACP_DELETE_RULE_CONFIRM' => 'Ви дійсно хочете видалити це правило?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => 'Ви дійсно хочете видалити це правило?
Попередження: видалення розділу правил також призведе до видалення всіх пунктів, що входять до нього.', 'ACP_RULE_ADDED' => 'Правило успішно додано.', 'ACP_RULE_DELETED' => 'Правило успішно видалено.', 'ACP_RULE_EDITED' => 'Правило успішно відредаговано.', diff --git a/language/zh_cmn_hans/boardrules_acp.php b/language/zh_cmn_hans/boardrules_acp.php index 112a6022..1653b9c7 100644 --- a/language/zh_cmn_hans/boardrules_acp.php +++ b/language/zh_cmn_hans/boardrules_acp.php @@ -90,7 +90,7 @@ 'ACP_BOARDRULES_DRAFT_NOTICE' => '用户看不到这些章程。用户目前看到的是论坛默认语言的章程。', 'ACP_BOARDRULES_DRAFT_DEFAULT_NOTICE' => '用户看不到这些章程。请发布它们,使论坛默认章程可用。', 'ACP_BOARDRULES_COPY_RULESET' => '复制语言章程集', - 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => '将每个分类和章程复制到%s。复制的章程将添加到任何现有章程之后,完整的目标章程集在您发布前会保持草稿状态。', + 'ACP_BOARDRULES_COPY_RULESET_EXPLAIN' => '将每个分类和章程复制到%s。复制的章程将添加到任何现有章程之后,完整的目标章程集将被设为草稿,直到您发布为止。', 'ACP_BOARDRULES_COPY_APPEND' => '添加到现有章程', 'ACP_BOARDRULES_COPY_APPEND_EXPLAIN' => array( 1 => '目标目前包含 %d 条章程。它们将保持不变,复制的章程将添加到其后。任何冲突的已复制锚点都将获得数字后缀。', @@ -131,10 +131,8 @@ 'ACP_RULE_MESSAGE_EXPLAIN' => '章程消息是显示在章程页面。(分类并不会显示章程消息)', 'ACP_RULE_MESSAGE_DISABLED' => '这是分类,消息编辑器已经禁用。', 'ACP_ADD_RULE' => '创建一条新章程', - 'ACP_DELETE_RULE_CONFIRM' => array( - 0 => '您确认要删除这条章程?', - 1 => '您确认要删除这条章程?
警告:删除分类会删除所有其包含的章程。', - ), + 'ACP_DELETE_RULE_CONFIRM' => '您确认要删除这条章程?', + 'ACP_DELETE_RULE_CATEGORY_CONFIRM' => '您确认要删除这条章程?
警告:删除分类会删除所有其包含的章程。', 'ACP_RULE_ADDED' => '成功增加了章程。', 'ACP_RULE_DELETED' => '成功删除了章程。', 'ACP_RULE_EDITED' => '章程编辑成功。', diff --git a/tests/controller/admin_controller_test.php b/tests/controller/admin_controller_test.php index da423911..befa9033 100644 --- a/tests/controller/admin_controller_test.php +++ b/tests/controller/admin_controller_test.php @@ -633,6 +633,42 @@ public function test_edit_rule_initial_form_loads_real_entity(): void self::assertTrue($this->blocks['rulemenu'][1]['S_DISABLED']); } + public function test_edit_rule_reports_missing_rule(): void + { + $this->setExpectedTriggerError(E_USER_WARNING, 'EXCEPTION_OUT_OF_BOUNDS'); + + $this->controller->edit_rule(999); + } + + public function test_edit_rule_initial_form_accepts_unchanged_legacy_anchor(): void + { + $this->db->sql_query("UPDATE phpbb_boardrules + SET rule_anchor = '1-general' + WHERE rule_id = 2"); + + $this->controller->edit_rule(2); + + self::assertFalse($this->assigned_vars['S_ERROR']); + self::assertSame('1-general', $this->assigned_vars['RULE_ANCHOR']); + } + + public function test_edit_rule_submit_preserves_unchanged_legacy_anchor(): void + { + $this->db->sql_query("UPDATE phpbb_boardrules + SET rule_anchor = '1-general' + WHERE rule_id = 2"); + $this->post['submit'] = true; + $this->variables = array( + 'rule_title' => 'Updated legacy rule', + 'rule_anchor' => '1-general', + 'rule_message' => 'Updated', + 'rule_parent' => 1, + ); + $this->setExpectedTriggerError(E_USER_NOTICE, 'ACP_RULE_EDITED'); + + $this->controller->edit_rule(2); + } + public function test_edit_rule_submit_saves_changes(): void { $this->post['submit'] = true; @@ -727,6 +763,13 @@ public function test_delete_rule_requests_confirmation_and_redirects(): void self::assertSame(array('adm.php?i=boardrules&language=en&parent_id=0'), admin_test_state::$redirects); } + public function test_delete_rule_reports_missing_rule(): void + { + $this->setExpectedTriggerError(E_USER_WARNING, 'EXCEPTION_OUT_OF_BOUNDS'); + + $this->controller->delete_rule(999); + } + public function test_delete_rule_confirmed_deletes_real_tree(): void { $this->setExpectedTriggerError(E_USER_NOTICE, 'ACP_RULE_DELETED'); @@ -772,6 +815,23 @@ public function test_move_rule_redirects_to_own_parent(): void self::assertSame(array('adm.php?i=boardrules&language=en&parent_id=1'), admin_test_state::$redirects); } + public function test_move_rule_reports_rule_removed_after_move(): void + { + $entity = $this->getMockBuilder(\phpbb\boardrules\entity\rule::class) + ->disableOriginalConstructor() + ->getMock(); + $entity->method('load')->willThrowException(new \phpbb\boardrules\exception\out_of_bounds('rule_id')); + $operator = $this->getMockBuilder(\phpbb\boardrules\operators\rule::class) + ->disableOriginalConstructor() + ->getMock(); + $operator->method('move')->willReturn(true); + $this->replace_controller_service('container', $this->entity_container($entity)); + $this->replace_controller_service('rule_operator', $operator); + $this->setExpectedTriggerError(E_USER_WARNING, 'EXCEPTION_OUT_OF_BOUNDS'); + + $this->controller->move_rule(2, 'down'); + } + public function test_move_rule_returns_success_for_ajax_request(): void { $this->ajax = true; diff --git a/tests/controller/main_controller_test.php b/tests/controller/main_controller_test.php index 6196b3c5..ea24de63 100644 --- a/tests/controller/main_controller_test.php +++ b/tests/controller/main_controller_test.php @@ -173,7 +173,12 @@ public function test_display_redirects_when_disabled_and_closes_completed_tree() 'default_lang' => 'en', 'sitename' => 'Board', )); - $loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); + $loader = $this->createMock(\phpbb\language\language_file_loader::class); + $loader->method('load_extension') + ->willReturnCallback(function ($extension, $component, $locales, &$lang) { + $lang['BOARDRULES_CATEGORY_ANCHOR'] = 'section-%s'; + $lang['BOARDRULES_RULE_ANCHOR'] = 'rule-%s'; + }); $lang = new \phpbb\language\language($loader); $lang->set_default_language('en'); $lang->set_user_language('en'); @@ -206,6 +211,7 @@ public function test_display_redirects_when_disabled_and_closes_completed_tree() ->disableOriginalConstructor() ->getMock(); $ruleset_operator->method('is_published')->with('en')->willReturn(true); + $assigned_rules = array(); $template = $this->createMock(\phpbb\template\template::class); $template->expects(self::exactly(5))->method('assign_block_vars')->withConsecutive( array('rules', self::arrayHasKey('TITLE')), @@ -213,7 +219,12 @@ public function test_display_redirects_when_disabled_and_closes_completed_tree() array('rules', array('S_CLOSE_LIST' => true)), array('rules', self::arrayHasKey('TITLE')), array('navlinks', self::arrayHasKey('U_VIEW_FORUM')) - ); + )->willReturnCallback(function ($block, $vars) use (&$assigned_rules) { + if ($block === 'rules' && isset($vars['U_ANCHOR'])) + { + $assigned_rules[] = $vars; + } + }); $helper = $this->getMockBuilder(\phpbb\controller\helper::class) ->disableOriginalConstructor() ->getMock(); @@ -232,6 +243,7 @@ public function test_display_redirects_when_disabled_and_closes_completed_tree() ); self::assertSame('rules', $controller->display()->getContent()); + self::assertSame(array('section-1', 'rule-1a', 'rule-2'), array_column($assigned_rules, 'U_ANCHOR')); self::assertCount(1, \phpbb\boardrules\controller\admin_test_state::$redirects); self::assertStringContainsString('index.' . $phpEx, \phpbb\boardrules\controller\admin_test_state::$redirects[0]); } diff --git a/tests/entity/rule_entity_anchor_test.php b/tests/entity/rule_entity_anchor_test.php index 405f41a8..952c15ff 100644 --- a/tests/entity/rule_entity_anchor_test.php +++ b/tests/entity/rule_entity_anchor_test.php @@ -28,6 +28,9 @@ public function anchor_test_data() array('foø-bar', 'foø-bar'), array('foó-bar', 'foó-bar'), array('παράδειγμα-1', 'παράδειγμα-1'), + array('1-general', '1-general'), + array('-general', '-general'), + array('_general', '_general'), array('', ''), array(null, ''), @@ -70,9 +73,6 @@ public function anchor_fails_test_data() // Starts with illegal characters array('#foo'), array(' foo'), - array('1foo'), - array('-foo'), - array('_foo'), // Contains illegal characters array('foo bar'), @@ -189,6 +189,37 @@ public function test_unique_anchor($id, $language, $anchor, $expected) self::assertSame($expected, $entity->get_anchor()); } + /** + * Existing anchors accepted by older versions remain editable when unchanged. + */ + public function test_unchanged_legacy_anchor_is_accepted() + { + $data = $this->get_import_data()[1]; + $data['rule_anchor'] = 'symbol-❤'; + + $entity = $this->get_rule_entity(); + $entity + ->import($data) + ->set_anchor($data['rule_anchor']); + + self::assertSame($data['rule_anchor'], $entity->get_anchor()); + } + + /** + * Changing a legacy anchor applies current validation rules. + */ + public function test_changed_legacy_anchor_is_validated() + { + $data = $this->get_import_data()[1]; + $data['rule_anchor'] = 'symbol-❤'; + + $entity = $this->get_rule_entity(); + $entity->import($data); + + $this->expectException(\phpbb\boardrules\exception\base::class); + $entity->set_anchor('another-❤'); + } + /** * Test data for the test_unique_anchor_fails() function * diff --git a/tests/entity/rule_entity_import_test.php b/tests/entity/rule_entity_import_test.php index c935b42a..5b763c99 100644 --- a/tests/entity/rule_entity_import_test.php +++ b/tests/entity/rule_entity_import_test.php @@ -67,6 +67,20 @@ public function test_import($data) } } + /** + * Stored titles are imported without write-time encoding or validation. + */ + public function test_import_accepts_existing_unicode_title() + { + $data = $this->get_import_data()[1]; + $data['rule_title'] = str_repeat('К', 200); + + $entity = $this->get_rule_entity(); + $entity->import($data); + + self::assertSame($data['rule_title'], $entity->get_title()); + } + /** * Test data for the test_import_fail() function * @@ -108,11 +122,6 @@ public function import_test_fail_data() // 'rule_anchor' => str_repeat('a', 256), // )); - // Too long - $data[] = array_merge($import_data[1], array( - 'rule_title' => str_repeat('a', 201), - )); - // Go through every field and unset it while submitting everything else foreach ($import_data[1] as $field => $value) { diff --git a/tests/entity/rule_entity_save_test.php b/tests/entity/rule_entity_save_test.php index abdac934..2322f7b5 100644 --- a/tests/entity/rule_entity_save_test.php +++ b/tests/entity/rule_entity_save_test.php @@ -73,7 +73,7 @@ public function test_save($id, $expected) self::assertEquals($expected['rule_title'], $result->get_title()); } - public function test_unicode_title_characters_are_encoded_for_storage_and_decoded_on_read() + public function test_four_byte_title_characters_are_encoded_and_other_unicode_is_preserved() { $entity = $this->get_rule_entity(); $entity->load(1) @@ -88,10 +88,12 @@ public function test_unicode_title_characters_are_encoded_for_storage_and_decode $this->db->sql_freeresult($result); self::assertSame('emoji-title', $row['rule_anchor']); - $expected_title = strpos($this->db->get_sql_layer(), 'mssql') === 0 - ? 'Emoji 😀 中文 Кириллица title' - : 'Emoji 😀 中文 Кириллица title'; - self::assertSame($expected_title, $row['rule_title']); + self::assertSame( + strpos($this->db->get_sql_layer(), 'mssql') === 0 + ? 'Emoji 😀 中文 Кириллица title' + : 'Emoji 😀 中文 Кириллица title', + $row['rule_title'] + ); $entity->load(1); self::assertSame('emoji-title', $entity->get_anchor()); diff --git a/tests/entity/rule_entity_title_test.php b/tests/entity/rule_entity_title_test.php index c394fdf5..046a52f9 100644 --- a/tests/entity/rule_entity_title_test.php +++ b/tests/entity/rule_entity_title_test.php @@ -34,6 +34,10 @@ public function title_test_data() str_repeat('a', 200), str_repeat('a', 200), ), + array( + str_repeat('😀', 22), + str_repeat('😀', 22), + ), ); } @@ -72,10 +76,13 @@ public function title_fails_test_data() str_repeat('a', 201), ), - // Escaped request value exceeds the stored column length. + // Encoded request value exceeds the stored column length. array( str_repeat('a', 194) . '&&', ), + array( + str_repeat('😀', 23), + ), ); }