Skip to content

Commit 4b60b6e

Browse files
authored
Merge pull request #375 from iMattPro/updates
Allow admin to customize the Rules page intro text
2 parents 2f6a903 + a1789d6 commit 4b60b6e

75 files changed

Lines changed: 530 additions & 16 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎acp/boardrules_module.php‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public function main($id, $mode)
8989

9090
// Return to stop execution of this script
9191
return;
92-
break;
92+
// no break;
9393

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

101101
// Return to stop execution of this script
102102
return;
103-
break;
103+
// no break;
104104

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

126126
case 'publish':
127127
$admin_controller->set_ruleset_published($language, true, $return_to);
@@ -130,6 +130,11 @@ public function main($id, $mode)
130130
case 'draft':
131131
$admin_controller->set_ruleset_published($language, false, $return_to);
132132
break;
133+
134+
case 'save_intro':
135+
$admin_controller->save_ruleset_intro($language);
136+
return;
137+
// no break;
133138
}
134139

135140
// Check if a language variable was submitted and display

‎adm/style/boardrules_acp.css‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
.boardrules-language-toolbar {
22
display: flex;
3-
align-items: flex-end;
3+
align-items: center;
44
flex-wrap: wrap;
55
gap: 12px;
66
margin: 14px 0;
@@ -16,7 +16,15 @@
1616
}
1717

1818
.boardrules-language-picker label {
19-
font-weight: bold;
19+
position: absolute;
20+
width: 1px;
21+
height: 1px;
22+
padding: 0;
23+
margin: -1px;
24+
overflow: hidden;
25+
clip: rect(0, 0, 0, 0);
26+
white-space: nowrap;
27+
border: 0;
2028
}
2129

2230
.boardrules-language-picker select {

‎adm/style/boardrules_manage_rules.html‎

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ <h1>{{ lang('ACP_BOARDRULES_MANAGE') }}</h1>
55

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

24+
{% if S_RULESET_ROOT %}
25+
<form id="boardrules_intro_form" method="post" action="{{ U_INTRO_ACTION }}" data-ajax="true">
26+
<fieldset>
27+
<legend>{{ lang('ACP_BOARDRULES_INTRO') }}</legend>
28+
<dl>
29+
<dt>
30+
<label for="boardrules_intro_text">{{ lang('ACP_BOARDRULES_INTRO') ~ lang('COLON') }}</label><br>
31+
<span>{{ lang('ACP_BOARDRULES_INTRO_EXPLAIN', CURRENT_LANGUAGE) }}</span>
32+
</dt>
33+
<dd>
34+
<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>
35+
</dd>
36+
</dl>
37+
<p class="quick">
38+
<input type="submit" name="submit_intro" class="button1" value="{{ lang('ACP_BOARDRULES_INTRO_SAVE') }}">
39+
<input type="reset" class="button2" value="{{ lang('RESET') }}">
40+
</p>
41+
{{ S_FORM_TOKEN_INTRO }}
42+
</fieldset>
43+
</form>
44+
{% endif %}
45+
2346
{% if S_CAN_COPY_RULESET or S_RULESET_DRAFT or S_CAN_DRAFT_RULESET %}
2447
<p class="boardrules-action-bar">
2548
{% 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 %}
@@ -103,6 +126,6 @@ <h3>{{ lang(S_DEFAULT_LANGUAGE ? 'ACP_BOARDRULES_STATUS_NO_RULES' : 'ACP_BOARDRU
103126
</label>
104127
<input type="submit" name="addrule" class="button2" value="{{ lang('SUBMIT') }}">
105128
<input type="hidden" name="action" value="add">
106-
{{ S_FORM_TOKEN }}
129+
{{ S_FORM_TOKEN_ADD_RULE }}
107130
</fieldset>
108131
</form>

‎config/services.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ services:
2222
- '@controller.helper'
2323
- '@dbal.conn'
2424
- '@language'
25+
- '@language.loader'
2526
- '@log'
2627
- '@notification_manager'
2728
- '@request'

‎controller/admin_controller.php‎

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ class admin_controller implements admin_interface
3232
/** @var \phpbb\language\language */
3333
protected $lang;
3434

35+
/** @var \phpbb\language\language_file_loader */
36+
protected $language_loader;
37+
3538
/** @var \phpbb\log\log */
3639
protected $log;
3740

@@ -70,6 +73,7 @@ class admin_controller implements admin_interface
7073
* @param \phpbb\controller\helper $controller_helper Controller helper object
7174
* @param \phpbb\db\driver\driver_interface $db Database object
7275
* @param \phpbb\language\language $lang Language object
76+
* @param \phpbb\language\language_file_loader $language_loader Language file loader
7377
* @param \phpbb\log\log $log Log object
7478
* @param \phpbb\notification\manager $notification_manager Notification manager
7579
* @param \phpbb\request\request $request Request object
@@ -81,13 +85,14 @@ class admin_controller implements admin_interface
8185
* @param string $php_ext phpEx
8286
* @access public
8387
*/
84-
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)
88+
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)
8589
{
8690
$this->config = $config;
8791
$this->container = $container;
8892
$this->controller_helper = $controller_helper;
8993
$this->db = $db;
9094
$this->lang = $lang;
95+
$this->language_loader = $language_loader;
9196
$this->log = $log;
9297
$this->notification_manager = $notification_manager;
9398
$this->request = $request;
@@ -237,6 +242,10 @@ public function display_language_dashboard()
237242
*/
238243
public function display_rules($language, $parent_id = 0)
239244
{
245+
add_form_key('boardrules_intro', '_INTRO');
246+
add_form_key('add_edit_rule', '_ADD_RULE');
247+
$this->lang->add_lang('boardrules_controller', 'phpbb/boardrules');
248+
240249
$languages = $this->assign_language_options($language);
241250
$current_language = $this->find_language($languages, $language);
242251
if ($current_language === null)
@@ -302,6 +311,9 @@ public function display_rules($language, $parent_id = 0)
302311
'U_COPY_RULESET' => "{$this->u_action}&amp;action=copy&amp;language={$language}",
303312
'U_PUBLISH_RULESET' => "{$this->u_action}&amp;action=publish&amp;language={$language}",
304313
'U_DRAFT_RULESET' => "{$this->u_action}&amp;action=draft&amp;language={$language}",
314+
'U_INTRO_ACTION' => "{$this->u_action}&amp;action=save_intro&amp;language={$language}&amp;parent_id={$parent_id}",
315+
'BOARDRULES_INTRO_TEXT' => $this->ruleset_operator->get_intro_text($language),
316+
'BOARDRULES_INTRO_FALLBACK' => $this->get_intro_fallback($language),
305317
'CURRENT_LANGUAGE' => $current_language['lang_local_name'],
306318
'CURRENT_RULE_COUNT' => $current_language['rule_count'],
307319
'S_RULESET_EMPTY' => $current_language['rule_count'] === 0,
@@ -310,9 +322,57 @@ public function display_rules($language, $parent_id = 0)
310322
'S_RULESET_DRAFT' => $current_language['rule_count'] > 0 && !$current_language['published'],
311323
'S_CAN_DRAFT_RULESET' => $current_language['rule_count'] > 0 && $current_language['published'] && $language !== $this->config['default_lang'],
312324
'S_CAN_COPY_RULESET' => $this->has_copy_source($languages, $language),
325+
'S_RULESET_ROOT' => $parent_id === 0,
313326
));
314327
}
315328

329+
/**
330+
* Get the translated built-in introduction for a selected ruleset language.
331+
*
332+
* @param string $language
333+
* @return string
334+
*/
335+
protected function get_intro_fallback($language)
336+
{
337+
$lang = array();
338+
$locales = array_values(array_unique(array($language, $this->config['default_lang'], \phpbb\language\language::FALLBACK_LANGUAGE)));
339+
$this->language_loader->load_extension('phpbb/boardrules', 'boardrules_controller', $locales, $lang);
340+
$sitename = html_entity_decode($this->config['sitename'], ENT_QUOTES);
341+
342+
return isset($lang['BOARDRULES_EXPLAIN'])
343+
? sprintf($lang['BOARDRULES_EXPLAIN'], $sitename)
344+
: $this->lang->lang('BOARDRULES_EXPLAIN', $sitename);
345+
}
346+
347+
/**
348+
* Save a language ruleset's custom introduction.
349+
*
350+
* @param string $language
351+
* @return void
352+
*/
353+
public function save_ruleset_intro($language)
354+
{
355+
if (!check_form_key('boardrules_intro'))
356+
{
357+
trigger_error($this->lang->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING);
358+
}
359+
360+
$intro_text = trim(html_entity_decode($this->request->variable('boardrules_intro_text', '', true), ENT_COMPAT));
361+
362+
try
363+
{
364+
$this->ruleset_operator->set_intro_text($language, $intro_text);
365+
}
366+
catch (\InvalidArgumentException $e)
367+
{
368+
trigger_error($this->lang->lang($e->getMessage()) . adm_back_link($this->u_action), E_USER_WARNING);
369+
}
370+
371+
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'ACP_BOARDRULES_INTRO_LOG', false, array($language));
372+
373+
trigger_error($this->lang->lang('ACP_BOARDRULES_INTRO_SAVED') . adm_back_link("{$this->u_action}&amp;language={$language}"));
374+
}
375+
316376
/**
317377
* Display and process the complete ruleset copy form.
318378
*

‎controller/admin_interface.php‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ public function set_ruleset_published($language, $published, $return_to = '');
6262
*/
6363
public function display_rules($language, $parent_id = 0);
6464

65+
/**
66+
* Save a language ruleset's custom introduction.
67+
*
68+
* @param string $language
69+
* @return void
70+
*/
71+
public function save_ruleset_intro($language);
72+
6573
/**
6674
* Add a rule
6775
*

‎controller/main_controller.php‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,14 @@ public function display()
9494

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

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

@@ -174,13 +176,15 @@ public function display()
174176
}
175177

176178
// Assign values to template vars for the rules page
179+
$intro_text = (string) $this->ruleset_operator->get_intro_text($display_language);
180+
177181
$this->template->assign_vars(array(
178182
'S_BOARD_RULES' => true,
179183
'S_CATEGORIES' => $cat_counter > 1,
180184
'S_LIST_UNORDERED' => $list_style === 'unordered',
181185
'S_LIST_COMPOUND' => $list_style === 'compound',
182186
'S_LIST_UNSTYLED' => $list_style === 'none',
183-
'BOARDRULES_EXPLAIN' => $this->lang->lang('BOARDRULES_EXPLAIN', $this->config['sitename']),
187+
'BOARDRULES_EXPLAIN' => $intro_text !== '' ? nl2br(utf8_htmlspecialchars($intro_text)) : $this->lang->lang('BOARDRULES_EXPLAIN', $this->config['sitename']),
184188
));
185189

186190
// Assign breadcrumb template vars for the rules page

‎language/ar/boardrules_acp.php‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@
6464
// Manage page
6565
'ACP_BOARDRULES_MANAGE' => 'إدارة القوانين',
6666
'ACP_BOARDRULES_MANAGE_EXPLAIN' => 'من هنا تستطيع إضافة, تعديل, حذف أو إعادة ترتيب الأقسام والقوانين. القسم عبارة عن مجموعة من القوانين التي لها علاقه بهذه القسم. يمكن إضافة عدد غير محدود من القوانين في كل قسم.',
67+
'ACP_BOARDRULES_INTRO' => 'مقدمة صفحة القوانين',
68+
'ACP_BOARDRULES_INTRO_EXPLAIN' => 'خصص المقدمة التي تظهر للمستخدمين الذين يشاهدون صفحة قوانين <strong>%s</strong>. اترك هذا الحقل فارغًا لاستخدام المقدمة الافتراضية الظاهرة كنص نائب.',
69+
'ACP_BOARDRULES_INTRO_SAVE' => 'حفظ المقدمة',
70+
'ACP_BOARDRULES_INTRO_SAVED' => 'تم حفظ مقدمة صفحة القوانين.',
6771
'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.',
6872
'ACP_BOARDRULES_CATEGORY' => 'القسم',
6973
'ACP_BOARDRULES_RULE' => 'قانون',

‎language/ar/info_acp_boardrules.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,5 @@
5050
'ACP_BOARDRULES_COPY_LOG' => '<strong>تم نسخ مجموعة قوانين المنتدى للغة</strong><br />» %1$s → %2$s (%3$d قانون)',
5151
'ACP_BOARDRULES_PUBLISH_LOG' => '<strong>تم نشر مجموعة قوانين المنتدى للغة</strong><br />» %s',
5252
'ACP_BOARDRULES_DRAFT_LOG' => '<strong>تم تحويل مجموعة قوانين المنتدى للغة إلى مسودة</strong><br />» %s',
53+
'ACP_BOARDRULES_INTRO_LOG' => '<strong>تم تغيير مقدمة صفحة قوانين المنتدى</strong><br />» %s',
5354
));

‎language/bg/boardrules_acp.php‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@
6363
// Manage page
6464
'ACP_BOARDRULES_MANAGE' => 'Управлявай Правилата',
6565
'ACP_BOARDRULES_MANAGE_EXPLAIN' => 'На тази страница може да добавяте, променята, изтривате и ре-организирате категориите и правилата. Категорията е група от свързани правила. Всяка категория може да има неограничен брой правила.',
66+
'ACP_BOARDRULES_INTRO' => 'Въведение на страницата с правила',
67+
'ACP_BOARDRULES_INTRO_EXPLAIN' => 'Персонализирайте въведението, показвано на потребителите на страницата с правила <strong>%s</strong>. Оставете това поле празно, за да използвате въведението по подразбиране, показано като подсказка.',
68+
'ACP_BOARDRULES_INTRO_SAVE' => 'Запази въведението',
69+
'ACP_BOARDRULES_INTRO_SAVED' => 'Въведението на страницата с правила е запазено.',
6670
'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.',
6771
'ACP_BOARDRULES_CATEGORY' => 'Категория на Правило',
6872
'ACP_BOARDRULES_RULE' => 'Правило',

0 commit comments

Comments
 (0)