Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions acp/boardrules_module.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public function main($id, $mode)

// Return to stop execution of this script
return;
break;
// no break;

case 'edit':
// Set the page title for our ACP page
Expand All @@ -100,7 +100,7 @@ public function main($id, $mode)

// Return to stop execution of this script
return;
break;
// no break;

case 'move_down':
// Move a rule down one position
Expand All @@ -121,7 +121,7 @@ public function main($id, $mode)
$this->page_title = 'ACP_BOARDRULES_COPY_RULESET';
$admin_controller->copy_ruleset($language, $return_to);
return;
break;
// no break;

case 'publish':
$admin_controller->set_ruleset_published($language, true, $return_to);
Expand All @@ -130,6 +130,11 @@ public function main($id, $mode)
case 'draft':
$admin_controller->set_ruleset_published($language, false, $return_to);
break;

case 'save_intro':
$admin_controller->save_ruleset_intro($language);
return;
// no break;
}

// Check if a language variable was submitted and display
Expand Down
12 changes: 10 additions & 2 deletions adm/style/boardrules_acp.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
.boardrules-language-toolbar {
display: flex;
align-items: flex-end;
align-items: center;
flex-wrap: wrap;
gap: 12px;
margin: 14px 0;
Expand All @@ -16,7 +16,15 @@
}

.boardrules-language-picker label {
font-weight: bold;
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}

.boardrules-language-picker select {
Expand Down
27 changes: 25 additions & 2 deletions adm/style/boardrules_manage_rules.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ <h1>{{ lang('ACP_BOARDRULES_MANAGE') }}</h1>

<form id="language_form" method="post" action="{{ U_LANGUAGE_ACTION }}">
<fieldset class="boardrules-language-toolbar">
<legend>{{ lang('ACP_BOARDRULES_SELECT_LANGUAGE') }}</legend>
<div class="boardrules-language-picker">
<label for="language">{{ lang('ACP_BOARDRULES_SELECT_LANGUAGE') ~ lang('COLON') }}</label>
<label for="language">{{ lang('ACP_BOARDRULES_SELECT_LANGUAGE') }}</label>
<select name="language" id="language">
{% for option in loops.language_options %}
<option value="{{ option.LANG_ISO }}"{% if option.S_SELECTED %} selected="selected"{% endif %}>{{ option.LANG_LOCAL_NAME }}</option>
Expand All @@ -20,6 +21,28 @@ <h1>{{ lang('ACP_BOARDRULES_MANAGE') }}</h1>
</fieldset>
</form>

{% if S_RULESET_ROOT %}
<form id="boardrules_intro_form" method="post" action="{{ U_INTRO_ACTION }}" data-ajax="true">
<fieldset>
<legend>{{ lang('ACP_BOARDRULES_INTRO') }}</legend>
<dl>
<dt>
<label for="boardrules_intro_text">{{ lang('ACP_BOARDRULES_INTRO') ~ lang('COLON') }}</label><br>
<span>{{ lang('ACP_BOARDRULES_INTRO_EXPLAIN', CURRENT_LANGUAGE) }}</span>
</dt>
<dd>
<textarea id="boardrules_intro_text" name="boardrules_intro_text" rows="4" cols="60" placeholder="{{ BOARDRULES_INTRO_FALLBACK|e('html_attr') }}">{{ BOARDRULES_INTRO_TEXT|e('html') }}</textarea>
</dd>
</dl>
<p class="quick">
<input type="submit" name="submit_intro" class="button1" value="{{ lang('ACP_BOARDRULES_INTRO_SAVE') }}">
<input type="reset" class="button2" value="{{ lang('RESET') }}">
</p>
{{ S_FORM_TOKEN_INTRO }}
</fieldset>
</form>
{% endif %}

{% if S_CAN_COPY_RULESET or S_RULESET_DRAFT or S_CAN_DRAFT_RULESET %}
<p class="boardrules-action-bar">
{% if S_CAN_COPY_RULESET %}<a href="{{ U_COPY_RULESET }}" class="button2 boardrules-button"><i class="icon fa-copy fa-fw" aria-hidden="true"></i> {{ lang('ACP_BOARDRULES_COPY_ACTION') }}</a>{% endif %}
Expand Down Expand Up @@ -103,6 +126,6 @@ <h3>{{ lang(S_DEFAULT_LANGUAGE ? 'ACP_BOARDRULES_STATUS_NO_RULES' : 'ACP_BOARDRU
</label>
<input type="submit" name="addrule" class="button2" value="{{ lang('SUBMIT') }}">
<input type="hidden" name="action" value="add">
{{ S_FORM_TOKEN }}
{{ S_FORM_TOKEN_ADD_RULE }}
</fieldset>
</form>
1 change: 1 addition & 0 deletions config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ services:
- '@controller.helper'
- '@dbal.conn'
- '@language'
- '@language.loader'
- '@log'
- '@notification_manager'
- '@request'
Expand Down
62 changes: 61 additions & 1 deletion controller/admin_controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ class admin_controller implements admin_interface
/** @var \phpbb\language\language */
protected $lang;

/** @var \phpbb\language\language_file_loader */
protected $language_loader;

/** @var \phpbb\log\log */
protected $log;

Expand Down Expand Up @@ -70,6 +73,7 @@ class admin_controller implements admin_interface
* @param \phpbb\controller\helper $controller_helper Controller helper object
* @param \phpbb\db\driver\driver_interface $db Database object
* @param \phpbb\language\language $lang Language object
* @param \phpbb\language\language_file_loader $language_loader Language file loader
* @param \phpbb\log\log $log Log object
* @param \phpbb\notification\manager $notification_manager Notification manager
* @param \phpbb\request\request $request Request object
Expand All @@ -81,13 +85,14 @@ class admin_controller implements admin_interface
* @param string $php_ext phpEx
* @access public
*/
public function __construct(\phpbb\config\config $config, ContainerInterface $container, \phpbb\controller\helper $controller_helper, \phpbb\db\driver\driver_interface $db, \phpbb\language\language $lang, \phpbb\log\log $log, \phpbb\notification\manager $notification_manager, \phpbb\request\request $request, \phpbb\boardrules\operators\rule $rule_operator, \phpbb\boardrules\operators\ruleset $ruleset_operator, \phpbb\template\template $template, \phpbb\user $user, $root_path, $php_ext)
public function __construct(\phpbb\config\config $config, ContainerInterface $container, \phpbb\controller\helper $controller_helper, \phpbb\db\driver\driver_interface $db, \phpbb\language\language $lang, \phpbb\language\language_file_loader $language_loader, \phpbb\log\log $log, \phpbb\notification\manager $notification_manager, \phpbb\request\request $request, \phpbb\boardrules\operators\rule $rule_operator, \phpbb\boardrules\operators\ruleset $ruleset_operator, \phpbb\template\template $template, \phpbb\user $user, $root_path, $php_ext)
{
$this->config = $config;
$this->container = $container;
$this->controller_helper = $controller_helper;
$this->db = $db;
$this->lang = $lang;
$this->language_loader = $language_loader;
$this->log = $log;
$this->notification_manager = $notification_manager;
$this->request = $request;
Expand Down Expand Up @@ -237,6 +242,10 @@ public function display_language_dashboard()
*/
public function display_rules($language, $parent_id = 0)
{
add_form_key('boardrules_intro', '_INTRO');
add_form_key('add_edit_rule', '_ADD_RULE');
$this->lang->add_lang('boardrules_controller', 'phpbb/boardrules');

$languages = $this->assign_language_options($language);
$current_language = $this->find_language($languages, $language);
if ($current_language === null)
Expand Down Expand Up @@ -302,6 +311,9 @@ public function display_rules($language, $parent_id = 0)
'U_COPY_RULESET' => "{$this->u_action}&amp;action=copy&amp;language={$language}",
'U_PUBLISH_RULESET' => "{$this->u_action}&amp;action=publish&amp;language={$language}",
'U_DRAFT_RULESET' => "{$this->u_action}&amp;action=draft&amp;language={$language}",
'U_INTRO_ACTION' => "{$this->u_action}&amp;action=save_intro&amp;language={$language}&amp;parent_id={$parent_id}",
'BOARDRULES_INTRO_TEXT' => $this->ruleset_operator->get_intro_text($language),
'BOARDRULES_INTRO_FALLBACK' => $this->get_intro_fallback($language),
'CURRENT_LANGUAGE' => $current_language['lang_local_name'],
'CURRENT_RULE_COUNT' => $current_language['rule_count'],
'S_RULESET_EMPTY' => $current_language['rule_count'] === 0,
Expand All @@ -310,9 +322,57 @@ public function display_rules($language, $parent_id = 0)
'S_RULESET_DRAFT' => $current_language['rule_count'] > 0 && !$current_language['published'],
'S_CAN_DRAFT_RULESET' => $current_language['rule_count'] > 0 && $current_language['published'] && $language !== $this->config['default_lang'],
'S_CAN_COPY_RULESET' => $this->has_copy_source($languages, $language),
'S_RULESET_ROOT' => $parent_id === 0,
));
}

/**
* Get the translated built-in introduction for a selected ruleset language.
*
* @param string $language
* @return string
*/
protected function get_intro_fallback($language)
{
$lang = array();
$locales = array_values(array_unique(array($language, $this->config['default_lang'], \phpbb\language\language::FALLBACK_LANGUAGE)));
$this->language_loader->load_extension('phpbb/boardrules', 'boardrules_controller', $locales, $lang);
$sitename = html_entity_decode($this->config['sitename'], ENT_QUOTES);

return isset($lang['BOARDRULES_EXPLAIN'])
? sprintf($lang['BOARDRULES_EXPLAIN'], $sitename)
: $this->lang->lang('BOARDRULES_EXPLAIN', $sitename);
}

/**
* Save a language ruleset's custom introduction.
*
* @param string $language
* @return void
*/
public function save_ruleset_intro($language)
{
if (!check_form_key('boardrules_intro'))
{
trigger_error($this->lang->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING);
}

$intro_text = trim(html_entity_decode($this->request->variable('boardrules_intro_text', '', true), ENT_COMPAT));

try
{
$this->ruleset_operator->set_intro_text($language, $intro_text);
}
catch (\InvalidArgumentException $e)
{
trigger_error($this->lang->lang($e->getMessage()) . adm_back_link($this->u_action), E_USER_WARNING);
}

$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'ACP_BOARDRULES_INTRO_LOG', false, array($language));

trigger_error($this->lang->lang('ACP_BOARDRULES_INTRO_SAVED') . adm_back_link("{$this->u_action}&amp;language={$language}"));
}

/**
* Display and process the complete ruleset copy form.
*
Expand Down
8 changes: 8 additions & 0 deletions controller/admin_interface.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,14 @@ public function set_ruleset_published($language, $published, $return_to = '');
*/
public function display_rules($language, $parent_id = 0);

/**
* Save a language ruleset's custom introduction.
*
* @param string $language
* @return void
*/
public function save_ruleset_intro($language);

/**
* Add a rule
*
Expand Down
6 changes: 5 additions & 1 deletion controller/main_controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,14 @@ public function display()

// Grab all published rules in the current user's language
$used_language = $this->lang->get_used_language();
$display_language = $used_language;
$entities = $this->ruleset_operator->is_published($used_language) ? $this->rule_operator->get_rules($used_language) : array();

// If no rules were found, it may be because no rules exist in the current user's
// language, so let's look for rules in the board's default language as a fallback.
if (empty($entities) && $used_language !== $this->config['default_lang'] && $this->ruleset_operator->is_published($this->config['default_lang']))
{
$display_language = $this->config['default_lang'];
$entities = $this->rule_operator->get_rules($this->config['default_lang']);
}

Expand Down Expand Up @@ -174,13 +176,15 @@ public function display()
}

// Assign values to template vars for the rules page
$intro_text = (string) $this->ruleset_operator->get_intro_text($display_language);

$this->template->assign_vars(array(
'S_BOARD_RULES' => true,
'S_CATEGORIES' => $cat_counter > 1,
'S_LIST_UNORDERED' => $list_style === 'unordered',
'S_LIST_COMPOUND' => $list_style === 'compound',
'S_LIST_UNSTYLED' => $list_style === 'none',
'BOARDRULES_EXPLAIN' => $this->lang->lang('BOARDRULES_EXPLAIN', $this->config['sitename']),
'BOARDRULES_EXPLAIN' => $intro_text !== '' ? nl2br(utf8_htmlspecialchars($intro_text)) : $this->lang->lang('BOARDRULES_EXPLAIN', $this->config['sitename']),
));

// Assign breadcrumb template vars for the rules page
Expand Down
4 changes: 4 additions & 0 deletions language/ar/boardrules_acp.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@
// Manage page
'ACP_BOARDRULES_MANAGE' => 'إدارة القوانين',
'ACP_BOARDRULES_MANAGE_EXPLAIN' => 'من هنا تستطيع إضافة, تعديل, حذف أو إعادة ترتيب الأقسام والقوانين. القسم عبارة عن مجموعة من القوانين التي لها علاقه بهذه القسم. يمكن إضافة عدد غير محدود من القوانين في كل قسم.',
'ACP_BOARDRULES_INTRO' => 'مقدمة صفحة القوانين',
'ACP_BOARDRULES_INTRO_EXPLAIN' => 'خصص المقدمة التي تظهر للمستخدمين الذين يشاهدون صفحة قوانين <strong>%s</strong>. اترك هذا الحقل فارغًا لاستخدام المقدمة الافتراضية الظاهرة كنص نائب.',
'ACP_BOARDRULES_INTRO_SAVE' => 'حفظ المقدمة',
'ACP_BOARDRULES_INTRO_SAVED' => 'تم حفظ مقدمة صفحة القوانين.',
'ACP_BOARDRULES_LANGUAGE_EXPLAIN' => 'Choose a language for your Board Rules. Users will see the rules you create for their preferred language. If you do not create any rules in their preferred language, then users will see rules created using the board’s default language.',
'ACP_BOARDRULES_CATEGORY' => 'القسم',
'ACP_BOARDRULES_RULE' => 'قانون',
Expand Down
1 change: 1 addition & 0 deletions language/ar/info_acp_boardrules.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,5 @@
'ACP_BOARDRULES_COPY_LOG' => '<strong>تم نسخ مجموعة قوانين المنتدى للغة</strong><br />» %1$s → %2$s (%3$d قانون)',
'ACP_BOARDRULES_PUBLISH_LOG' => '<strong>تم نشر مجموعة قوانين المنتدى للغة</strong><br />» %s',
'ACP_BOARDRULES_DRAFT_LOG' => '<strong>تم تحويل مجموعة قوانين المنتدى للغة إلى مسودة</strong><br />» %s',
'ACP_BOARDRULES_INTRO_LOG' => '<strong>تم تغيير مقدمة صفحة قوانين المنتدى</strong><br />» %s',
));
4 changes: 4 additions & 0 deletions language/bg/boardrules_acp.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@
// Manage page
'ACP_BOARDRULES_MANAGE' => 'Управлявай Правилата',
'ACP_BOARDRULES_MANAGE_EXPLAIN' => 'На тази страница може да добавяте, променята, изтривате и ре-организирате категориите и правилата. Категорията е група от свързани правила. Всяка категория може да има неограничен брой правила.',
'ACP_BOARDRULES_INTRO' => 'Въведение на страницата с правила',
'ACP_BOARDRULES_INTRO_EXPLAIN' => 'Персонализирайте въведението, показвано на потребителите на страницата с правила <strong>%s</strong>. Оставете това поле празно, за да използвате въведението по подразбиране, показано като подсказка.',
'ACP_BOARDRULES_INTRO_SAVE' => 'Запази въведението',
'ACP_BOARDRULES_INTRO_SAVED' => 'Въведението на страницата с правила е запазено.',
'ACP_BOARDRULES_LANGUAGE_EXPLAIN' => 'Choose a language for your Board Rules. Users will see the rules you create for their preferred language. If you do not create any rules in their preferred language, then users will see rules created using the board’s default language.',
'ACP_BOARDRULES_CATEGORY' => 'Категория на Правило',
'ACP_BOARDRULES_RULE' => 'Правило',
Expand Down
1 change: 1 addition & 0 deletions language/bg/info_acp_boardrules.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,5 @@
'ACP_BOARDRULES_COPY_LOG' => '<strong>Копиран езиков набор от правила на форума</strong><br />» %1$s → %2$s (%3$d правила)',
'ACP_BOARDRULES_PUBLISH_LOG' => '<strong>Публикуван езиков набор от правила на форума</strong><br />» %s',
'ACP_BOARDRULES_DRAFT_LOG' => '<strong>Езиковият набор от правила на форума е променен на чернова</strong><br />» %s',
'ACP_BOARDRULES_INTRO_LOG' => '<strong>Променено въведение на страницата с правила</strong><br />» %s',
));
4 changes: 4 additions & 0 deletions language/cs/boardrules_acp.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@
// Manage page
'ACP_BOARDRULES_MANAGE' => 'Spravovat pravidla',
'ACP_BOARDRULES_MANAGE_EXPLAIN' => 'Na této stránce můžeš přidávat, upravovat, mazat a reorganizovat kategorie a pravidla. Kategorie je skupina souvisejících pravidel. Každá kategorie může mít neomezený počet pravidel.',
'ACP_BOARDRULES_INTRO' => 'Úvod stránky s pravidly',
'ACP_BOARDRULES_INTRO_EXPLAIN' => 'Upravte úvod zobrazený uživatelům stránky pravidel <strong>%s</strong>. Ponechte toto pole prázdné, chcete-li použít výchozí úvod zobrazený jako zástupný text.',
'ACP_BOARDRULES_INTRO_SAVE' => 'Uložit úvod',
'ACP_BOARDRULES_INTRO_SAVED' => 'Úvod stránky s pravidly byl uložen.',
'ACP_BOARDRULES_LANGUAGE_EXPLAIN' => 'Choose a language for your Board Rules. Users will see the rules you create for their preferred language. If you do not create any rules in their preferred language, then users will see rules created using the board’s default language.',
'ACP_BOARDRULES_CATEGORY' => 'Kategorie pravidel',
'ACP_BOARDRULES_RULE' => 'Pravidlo',
Expand Down
1 change: 1 addition & 0 deletions language/cs/info_acp_boardrules.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,5 @@
'ACP_BOARDRULES_COPY_LOG' => '<strong>Jazyková sada pravidel fóra zkopírována</strong><br />» %1$s → %2$s (%3$d pravidel)',
'ACP_BOARDRULES_PUBLISH_LOG' => '<strong>Jazyková sada pravidel fóra zveřejněna</strong><br />» %s',
'ACP_BOARDRULES_DRAFT_LOG' => '<strong>Jazyková sada pravidel fóra změněna na koncept</strong><br />» %s',
'ACP_BOARDRULES_INTRO_LOG' => '<strong>Úvod stránky s pravidly změněn</strong><br />» %s',
));
4 changes: 4 additions & 0 deletions language/da/boardrules_acp.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@
// Manage page
'ACP_BOARDRULES_MANAGE' => 'Håndter regler',
'ACP_BOARDRULES_MANAGE_EXPLAIN' => 'På denne side kan du tilføje, redigere, slette og ændre på rækkefølgen af kategorier og regler. En kategori er en gruppe af relaterede regler. Hver kategori kan have et ubegrænset antal regler.',
'ACP_BOARDRULES_INTRO' => 'Introduktion til regelsiden',
'ACP_BOARDRULES_INTRO_EXPLAIN' => 'Tilpas introduktionen, der vises til brugere af regelsiden <strong>%s</strong>. Lad dette felt være tomt for at bruge standardintroduktionen, der vises som pladsholdertekst.',
'ACP_BOARDRULES_INTRO_SAVE' => 'Gem introduktion',
'ACP_BOARDRULES_INTRO_SAVED' => 'Introduktionen til regelsiden blev gemt.',
'ACP_BOARDRULES_LANGUAGE_EXPLAIN' => 'Choose a language for your Board Rules. Users will see the rules you create for their preferred language. If you do not create any rules in their preferred language, then users will see rules created using the board’s default language.',
'ACP_BOARDRULES_CATEGORY' => 'Regelkategori',
'ACP_BOARDRULES_RULE' => 'Regel',
Expand Down
1 change: 1 addition & 0 deletions language/da/info_acp_boardrules.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,5 @@
'ACP_BOARDRULES_COPY_LOG' => '<strong>Sprogsæt med boardregler kopieret</strong><br />» %1$s → %2$s (%3$d regler)',
'ACP_BOARDRULES_PUBLISH_LOG' => '<strong>Sprogsæt med boardregler udgivet</strong><br />» %s',
'ACP_BOARDRULES_DRAFT_LOG' => '<strong>Sprogsæt med boardregler ændret til kladde</strong><br />» %s',
'ACP_BOARDRULES_INTRO_LOG' => '<strong>Introduktionen til regelsiden blev ændret</strong><br />» %s',
));
Loading