• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

dragomano / Optimus / 19723178314

27 Nov 2025 02:22AM UTC coverage: 97.641% (+0.01%) from 97.631%
19723178314

push

github

dragomano
Update docs

1904 of 1950 relevant lines covered (97.64%)

3.48 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.2
/src/Sources/Optimus/Handlers/SettingHandler.php
1
<?php declare(strict_types=1);
2

3
/**
4
 * @package Optimus
5
 * @link https://custom.simplemachines.org/mods/index.php?mod=2659
6
 * @author Bugo https://dragomano.ru/mods/optimus
7
 * @copyright 2010-2025 Bugo
8
 * @license https://opensource.org/licenses/artistic-license-2.0 Artistic-2.0
9
 *
10
 * @version 3.0 RC5
11
 */
12

13
namespace Bugo\Optimus\Handlers;
14

15
use Bugo\Compat\Actions\Admin\ACP;
16
use Bugo\Compat\{Config, Db, ErrorHandler};
17
use Bugo\Compat\{IntegrationHook, Lang};
18
use Bugo\Compat\{Theme, User, Utils};
19
use Bugo\Optimus\Services\RobotsGenerator;
20
use Bugo\Optimus\Tasks\Sitemap;
21
use Bugo\Optimus\Utils\Input;
22
use Bugo\Optimus\Utils\Str;
23

24
if (! defined('SMF'))
25
        die('No direct access...');
26

27
final class SettingHandler
28
{
29
        public function __invoke(): void
30
        {
31
                IntegrationHook::add(
1✔
32
                        'integrate_modify_basic_settings', self::class . '::modifyBasicSettings#', false, __FILE__
1✔
33
                );
1✔
34

35
                IntegrationHook::add(
1✔
36
                        'integrate_admin_areas', self::class . '::adminAreas#', false, __FILE__
1✔
37
                );
1✔
38

39
                IntegrationHook::add(
1✔
40
                        'integrate_admin_search', self::class . '::adminSearch#', false, __FILE__
1✔
41
                );
1✔
42
        }
43

44
        /**
45
         * Remove meta_keywords setting and move it to the Optimus settings
46
         *
47
         * Удаляем настройку meta_keywords и помещаем на страницу настроек Optimus
48
         */
49
        public function modifyBasicSettings(array &$config_vars): void
50
        {
51
                foreach ($config_vars as $key => $dump) {
1✔
52
                        if (isset($dump[1]) && $dump[1] === 'meta_keywords') {
1✔
53
                                unset($config_vars[$key]);
1✔
54
                        }
55
                }
56
        }
57

58
        public function adminAreas(array &$admin_areas): void
59
        {
60
                Theme::addInlineCss('
1✔
61
                .main_icons.optimus::before {
62
                        background:url(' . Theme::$current->settings['default_images_url'] . '/optimus.png) no-repeat 0 0 !important;
1✔
63
                }
64
                .large_admin_menu_icon.optimus::before {
65
                        background:url(' . Theme::$current->settings['default_images_url'] . '/optimus_large.png) no-repeat 0 0;
1✔
66
                }
67
                .fa-optimus::before {
68
                        content: "\f717";
69
                }');
1✔
70

71
                if (Input::request('area') === 'optimus') {
1✔
72
                        Theme::loadCSSFile('optimus/optimus.css');
1✔
73
                }
74

75
                $admin_areas['config']['areas']['optimus'] = [
1✔
76
                        'label' => Lang::getTxt('optimus_title', file: 'Optimus/Optimus'),
1✔
77
                        'function' => $this->actions(...),
1✔
78
                        'icon' => 'optimus',
1✔
79
                        'subsections' => [
1✔
80
                                'basic'    => [Lang::getTxt('optimus_basic_title')],
1✔
81
                                'extra'    => [Lang::getTxt('optimus_extra_title')],
1✔
82
                                'favicon'  => [Lang::getTxt('optimus_favicon_title')],
1✔
83
                                'metatags' => [Lang::getTxt('optimus_meta_title')],
1✔
84
                                'redirect' => [Lang::getTxt('optimus_redirect_title')],
1✔
85
                                'counters' => [Lang::getTxt('optimus_counters')],
1✔
86
                                'robots'   => [Lang::getTxt('optimus_robots_title')],
1✔
87
                                'htaccess' => [Lang::getTxt('optimus_htaccess_title')],
1✔
88
                                'sitemap'  => [Lang::getTxt('optimus_sitemap_title')],
1✔
89
                        ]
1✔
90
                ];
1✔
91

92
                if (str_starts_with(SMF_VERSION, '3.0')) {
1✔
93
                        $admin_areas['config']['areas']['optimus']['label'] = 'optimus_title';
×
94
                }
95
        }
96

97
        public function adminSearch(array $language_files, array $include_files, array &$settings_search): void
98
        {
99
                $settings_search[] = [$this->basicTabSettings(...), 'area=optimus;sa=basic'];
1✔
100
                $settings_search[] = [$this->extraTabSettings(...), 'area=optimus;sa=extra'];
1✔
101
                $settings_search[] = [$this->faviconTabSettings(...), 'area=optimus;sa=favicon'];
1✔
102
                $settings_search[] = [$this->sitemapTabSettings(...), 'area=optimus;sa=sitemap'];
1✔
103
        }
104

105
        public function actions(): void
106
        {
107
                User::$me->isAllowedTo('admin_forum');
1✔
108

109
                Utils::$context['page_title'] = OP_NAME;
1✔
110

111
                Theme::loadTemplate('Optimus');
1✔
112

113
                $subActions = [
1✔
114
                        'basic'    => 'basicTabSettings',
1✔
115
                        'extra'    => 'extraTabSettings',
1✔
116
                        'favicon'  => 'faviconTabSettings',
1✔
117
                        'metatags' => 'metatagsTabSettings',
1✔
118
                        'redirect' => 'redirectTabSettings',
1✔
119
                        'counters' => 'counterTabSettings',
1✔
120
                        'robots'   => 'robotsTabSettings',
1✔
121
                        'htaccess' => 'htaccessTabSettings',
1✔
122
                        'sitemap'  => 'sitemapTabSettings',
1✔
123
                ];
1✔
124

125
                Utils::$context[Utils::$context['admin_menu_name']]['tab_data'] = [
1✔
126
                        'title' => Lang::getTxt('optimus_title'),
1✔
127
                        'tabs' => [
1✔
128
                                'basic' => [
1✔
129
                                        'description' => sprintf(
1✔
130
                                                Lang::getTxt('optimus_basic_desc'),
1✔
131
                                                OP_VERSION,
1✔
132
                                                PHP_VERSION,
1✔
133
                                                Utils::$smcFunc['db_title'],
1✔
134
                                                Db::$db->get_version(),
1✔
135
                                        )
1✔
136
                                ],
1✔
137
                                'extra' => [
1✔
138
                                        'description' => Lang::getTxt('optimus_extra_desc')
1✔
139
                                ],
1✔
140
                                'favicon' => [
1✔
141
                                        'description' => Lang::getTxt('optimus_favicon_desc')
1✔
142
                                ],
1✔
143
                                'metatags' => [
1✔
144
                                        'description' => Lang::getTxt('optimus_meta_desc')
1✔
145
                                ],
1✔
146
                                'redirect' => [
1✔
147
                                        'description' => Lang::getTxt('optimus_redirect_desc')
1✔
148
                                ],
1✔
149
                                'counters' => [
1✔
150
                                        'description' => Lang::getTxt('optimus_counters_desc')
1✔
151
                                ],
1✔
152
                                'robots' => [
1✔
153
                                        'description' => Lang::getTxt('optimus_robots_desc')
1✔
154
                                ],
1✔
155
                                'htaccess' => [
1✔
156
                                        'description' => Lang::getTxt('optimus_htaccess_desc')
1✔
157
                                ],
1✔
158
                                'sitemap' => [
1✔
159
                                        'description' => sprintf(Lang::getTxt('optimus_sitemap_desc'), OP_NAME)
1✔
160
                                ]
1✔
161
                        ]
1✔
162
                ];
1✔
163

164
                $this->addBlockWithTips();
1✔
165

166
                $this->callActionFromAreas($subActions);
1✔
167
        }
168

169
        /**
170
         * @return void|array
171
         */
172
        public function basicTabSettings(bool $return_config = false)
173
        {
174
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_basic_title');
3✔
175
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=basic;save';
3✔
176

177
                $this->addDefaultSettings(
3✔
178
                        ['optimus_forum_index' => sprintf(Lang::getTxt('forum_index'), Utils::$context['forum_name'])]
3✔
179
                );
3✔
180

181
                $config_vars = [
3✔
182
                        ['title', 'optimus_main_page'],
3✔
183
                        [
3✔
184
                                'text',
3✔
185
                                'optimus_forum_index',
3✔
186
                                80,
3✔
187
                                'value' => Utils::htmlspecialcharsDecode((string) (Config::$modSettings['optimus_forum_index'] ?? ''))
3✔
188
                        ],
3✔
189
                        [
3✔
190
                                'large_text',
3✔
191
                                'optimus_description',
3✔
192
                                'value' => Utils::htmlspecialcharsDecode((string) (Config::$modSettings['optimus_description'] ?? '')),
3✔
193
                                'subtext' => Lang::getTxt('optimus_description_subtext')
3✔
194
                        ],
3✔
195
                        [
3✔
196
                                'large_text',
3✔
197
                                'meta_keywords',
3✔
198
                                'label' => Lang::getTxt('meta_keywords', file: 'Search'),
3✔
199
                                'subtext' => Lang::getTxt('meta_keywords_note', file: 'ManageSettings')
3✔
200
                        ],
3✔
201
                        ['title', 'optimus_all_pages'],
3✔
202
                        ['select', 'optimus_board_extend_title', Lang::getTxt('optimus_board_extend_title_set')],
3✔
203
                        ['select', 'optimus_topic_extend_title', Lang::getTxt('optimus_topic_extend_title_set')],
3✔
204
                        '',
3✔
205
                        ['title', 'optimus_extra_settings'],
3✔
206
                        ['check', 'optimus_errors_for_wrong_actions'],
3✔
207
                        ['check', 'optimus_errors_for_wrong_boards_topics'],
3✔
208
                        ['check', 'optimus_log_search'],
3✔
209
                ];
3✔
210

211
                // You can add your own options
212
                IntegrationHook::call('integrate_optimus_basic_settings', [&$config_vars]);
3✔
213

214
                if ($return_config) {
3✔
215
                        return $config_vars;
1✔
216
                }
217

218
                if (Input::isGet('save')) {
3✔
219
                        User::$me->checkSession();
2✔
220

221
                        if (Input::isPost('optimus_forum_index')) {
2✔
222
                                Input::post(['optimus_forum_index' => Input::filter('optimus_forum_index')]);
1✔
223
                        }
224

225
                        if (Input::isPost('optimus_description')) {
2✔
226
                                Input::post(['optimus_description' => Input::filter('optimus_description')]);
1✔
227
                        }
228

229
                        IntegrationHook::call('integrate_save_optimus_basic_settings');
2✔
230

231
                        $save_vars = $config_vars;
2✔
232
                        ACP::saveDBSettings($save_vars);
2✔
233

234
                        Utils::redirectexit('action=admin;area=optimus;sa=basic');
2✔
235
                }
236

237
                ACP::prepareDBSettingContext($config_vars);
3✔
238
        }
239

240
        /**
241
         * @return void|array
242
         */
243
        public function extraTabSettings(bool $return_config = false)
244
        {
245
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_extra_title');
2✔
246
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=extra;save';
2✔
247

248
                Lang::setTxt('optimus_extra_info', sprintf(Lang::getTxt('optimus_extra_info'), Config::$scripturl));
2✔
249

250
                $config_vars = [
2✔
251
                        ['title', 'optimus_extra_title'],
2✔
252
                        ['desc', 'optimus_extra_info'],
2✔
253
                        [
2✔
254
                                'check',
2✔
255
                                'optimus_og_image',
2✔
256
                                'help' => 'optimus_og_image_help',
2✔
257
                                'subtext' => sprintf(Lang::getTxt('optimus_og_image_subtext'), implode('', [
2✔
258
                                        Config::$scripturl . '?action=admin;area=theme;sa=list;th=',
2✔
259
                                        Theme::$current->settings['theme_id']  . '#options_og_image',
2✔
260
                                ]))
2✔
261
                        ],
2✔
262
                        [
2✔
263
                                'check',
2✔
264
                                'optimus_allow_change_board_og_image',
2✔
265
                                'subtext' => Lang::getTxt('optimus_allow_change_board_og_image_subtext')
2✔
266
                        ],
2✔
267
                        ['text', 'optimus_fb_appid', 40, 'help' => 'optimus_fb_appid_help'],
2✔
268
                        ['text', 'optimus_tw_cards', 40, 'preinput' => '@', 'help' => 'optimus_tw_cards_help'],
2✔
269
                ];
2✔
270

271
                // You can add your own options
272
                IntegrationHook::call('integrate_optimus_extra_settings', [&$config_vars]);
2✔
273

274
                if ($return_config) {
2✔
275
                        return $config_vars;
1✔
276
                }
277

278
                if (Input::isGet('save')) {
2✔
279
                        User::$me->checkSession();
2✔
280

281
                        if (Input::isPost('optimus_fb_appid')) {
2✔
282
                                Input::post(['optimus_fb_appid' => Input::filter('optimus_fb_appid')]);
1✔
283
                        }
284

285
                        if (Input::isPost('optimus_tw_cards')) {
2✔
286
                                Input::post([
1✔
287
                                        'optimus_tw_cards' => str_replace(
1✔
288
                                                '@', '', Input::filter('optimus_tw_cards'))
1✔
289
                                ]);
1✔
290
                        }
291

292
                        IntegrationHook::call('integrate_save_optimus_extra_settings');
2✔
293

294
                        $save_vars = $config_vars;
2✔
295
                        ACP::saveDBSettings($save_vars);
2✔
296

297
                        Utils::redirectexit('action=admin;area=optimus;sa=extra');
2✔
298
                }
299

300
                ACP::prepareDBSettingContext($config_vars);
2✔
301
        }
302

303
        /**
304
         * @return void|array
305
         */
306
        public function faviconTabSettings(bool $return_config = false)
307
        {
308
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_favicon_title');
1✔
309
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=favicon;save';
1✔
310

311
                $config_vars = [
1✔
312
                        ['large_text', 'optimus_favicon_text'],
1✔
313
                ];
1✔
314

315
                if ($return_config) {
1✔
316
                        return $config_vars;
1✔
317
                }
318

319
                Utils::$context['sub_template'] = 'favicon';
1✔
320

321
                if (Input::isGet('save')) {
1✔
322
                        User::$me->checkSession();
1✔
323

324
                        $save_vars = $config_vars;
1✔
325
                        ACP::saveDBSettings($save_vars);
1✔
326

327
                        Utils::redirectexit('action=admin;area=optimus;sa=favicon');
1✔
328
                }
329

330
                ACP::prepareDBSettingContext($config_vars);
1✔
331
        }
332

333
        public function metatagsTabSettings(): void
334
        {
335
                Utils::$context['sub_template'] = 'metatags';
2✔
336
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_meta_title');
2✔
337
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=metatags;save';
2✔
338

339
                $meta_tags = empty(Config::$modSettings['optimus_meta']) ? [] : unserialize(Config::$modSettings['optimus_meta']);
2✔
340

341
                IntegrationHook::call('integrate_optimus_metatags_settings', [&$meta_tags]);
2✔
342

343
                Utils::$context['optimus_metatags_rules'] = $meta_tags;
2✔
344

345
                $config_vars = [];
2✔
346

347
                if (Input::isGet('save')) {
2✔
348
                        User::$me->checkSession();
2✔
349

350
                        $save_vars = $config_vars;
2✔
351
                        ACP::saveDBSettings($save_vars);
2✔
352

353
                        $meta = [];
2✔
354
                        if (Input::isPost('custom_tag_name') && Input::isPost('custom_tag_value')) {
2✔
355
                                $custom_tag_name = Input::post('custom_tag_name');
1✔
356
                                $custom_tag_value = Input::post('custom_tag_value');
1✔
357
                                $custom_tag_name = array_filter($custom_tag_name);
1✔
358

359
                                foreach ($custom_tag_name as $key => $value) {
1✔
360
                                        $meta[$value] = $custom_tag_value[$key];
1✔
361
                                }
362
                        }
363

364
                        Config::updateModSettings(['optimus_meta' => serialize($meta)]);
2✔
365
                        Utils::redirectexit('action=admin;area=optimus;sa=metatags');
2✔
366
                }
367

368
                ACP::prepareDBSettingContext($config_vars);
2✔
369
        }
370

371
        public function redirectTabSettings(): void
372
        {
373
                Utils::$context['sub_template'] = 'redirect';
2✔
374
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_redirect_title');
2✔
375
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=redirect;save';
2✔
376

377
                Utils::$context['optimus_redirect_rules'] = empty(Config::$modSettings['optimus_redirect'])
2✔
378
                        ? [] : unserialize(Config::$modSettings['optimus_redirect']);
2✔
379

380
                $config_vars = [];
2✔
381

382
                if (Input::isGet('save')) {
2✔
383
                        User::$me->checkSession();
2✔
384

385
                        $save_vars = $config_vars;
2✔
386
                        ACP::saveDBSettings($save_vars);
2✔
387

388
                        $redirect = [];
2✔
389
                        if (Input::isPost('custom_redirect_from') && Input::isPost('custom_redirect_to')) {
2✔
390
                                $custom_redirect_from = Input::post('custom_redirect_from');
1✔
391
                                $custom_redirect_to = Input::post('custom_redirect_to');
1✔
392
                                $custom_redirect_from = array_filter($custom_redirect_from);
1✔
393

394
                                foreach ($custom_redirect_from as $to => $from) {
1✔
395
                                        $redirect[$from] = $custom_redirect_to[$to];
1✔
396
                                }
397
                        }
398

399
                        Config::updateModSettings(['optimus_redirect' => serialize($redirect)]);
2✔
400
                        Utils::redirectexit('action=admin;area=optimus;sa=redirect');
2✔
401
                }
402

403
                ACP::prepareDBSettingContext($config_vars);
2✔
404
        }
405

406
        public function counterTabSettings(): void
407
        {
408
                Utils::$context['sub_template'] = 'counters';
1✔
409
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_counters');
1✔
410
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=counters;save';
1✔
411

412
                $this->addDefaultSettings([
1✔
413
                        'optimus_counters_css'    => '.counters {text-align: center}',
1✔
414
                        'optimus_ignored_actions' => 'admin,bookmarks,credits,helpadmin,pm,printpage',
1✔
415
                ]);
1✔
416

417
                $config_vars = [
1✔
418
                        ['large_text', 'optimus_head_code'],
1✔
419
                        ['large_text', 'optimus_stat_code'],
1✔
420
                        ['large_text', 'optimus_count_code'],
1✔
421
                        ['large_text', 'optimus_counters_css'],
1✔
422
                        ['text', 'optimus_ignored_actions'],
1✔
423
                ];
1✔
424

425
                if (Input::isGet('save')) {
1✔
426
                        User::$me->checkSession();
1✔
427

428
                        $save_vars = $config_vars;
1✔
429
                        ACP::saveDBSettings($save_vars);
1✔
430

431
                        Utils::redirectexit('action=admin;area=optimus;sa=counters');
1✔
432
                }
433

434
                ACP::prepareDBSettingContext($config_vars);
1✔
435
        }
436

437
        public function robotsTabSettings(): void
438
        {
439
                Utils::$context['sub_template'] = 'robots';
2✔
440
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_robots_title');
2✔
441
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=robots;save';
2✔
442

443
                $config_vars = [];
2✔
444

445
                $path = (Input::server('document_root') ?: Config::$boarddir) . '/robots.txt';
2✔
446

447
                Utils::$context['robots_content'] = Utils::makeWritable($path) ? @file_get_contents($path) : '';
2✔
448

449
                (new RobotsGenerator())->generate();
2✔
450

451
                if (Input::isGet('save')) {
2✔
452
                        User::$me->checkSession();
2✔
453

454
                        $save_vars = $config_vars;
2✔
455
                        ACP::saveDBSettings($save_vars);
2✔
456

457
                        file_put_contents($path, Input::filter('optimus_robots'), LOCK_EX);
2✔
458

459
                        Utils::redirectexit('action=admin;area=optimus;sa=robots');
2✔
460
                }
461

462
                ACP::prepareDBSettingContext($config_vars);
2✔
463
        }
464

465
        public function htaccessTabSettings(): void
466
        {
467
                Utils::$context['sub_template'] = 'htaccess';
2✔
468
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_htaccess_title');
2✔
469
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=htaccess;save';
2✔
470

471
                $config_vars = [];
2✔
472

473
                $path = (Input::server('document_root') ?: Config::$boarddir) . '/.htaccess';
2✔
474

475
                Utils::$context['htaccess_content'] = Utils::makeWritable($path) ? @file_get_contents($path) : '';
2✔
476

477
                if (Input::isGet('save')) {
2✔
478
                        User::$me->checkSession();
2✔
479

480
                        $save_vars = $config_vars;
2✔
481
                        ACP::saveDBSettings($save_vars);
2✔
482

483
                        if (is_file($path)) {
2✔
484
                                copy($path, $path . '.backup');
2✔
485
                        }
486

487
                        file_put_contents($path, trim(Input::post('optimus_htaccess')), LOCK_EX);
2✔
488

489
                        Utils::redirectexit('action=admin;area=optimus;sa=htaccess');
2✔
490
                }
491

492
                ACP::prepareDBSettingContext($config_vars);
2✔
493
        }
494

495
        /**
496
         * @return void|array
497
         */
498
        public function sitemapTabSettings(bool $return_config = false)
499
        {
500
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_sitemap_title');
2✔
501
                Utils::$context['settings_title'] = Lang::getTxt('optimus_sitemap_title');
2✔
502
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=sitemap;save';
2✔
503

504
                if (! Utils::makeWritable(Config::$boarddir)) {
2✔
505
                        ErrorHandler::fatalLang('optimus_root_is_not_writable');
×
506
                }
507

508
                $this->addDefaultSettings([
2✔
509
                        'optimus_sitemap_topics_num_replies' => 5,
2✔
510
                        'optimus_sitemap_items_display'      => 10000,
2✔
511
                        'optimus_start_year'                 => 1994,
2✔
512
                        'optimus_update_frequency'           => 1,
2✔
513
                ]);
2✔
514

515
                $title = Lang::getTxt('admin_maintenance', file: 'ManageMaintenance') . ' - ' . Lang::getTxt('maintain_recount');
2✔
516
                $link = Str::html('a', $title)->class('bbc_link')
2✔
517
                        ->href(sprintf('%s?action=admin;area=maintain;sa=routine', Config::$scripturl));
2✔
518

519
                Utils::$context['settings_insert_above'] = Str::html('div')->class('roundframe')
2✔
520
                        ->setHtml(sprintf(Lang::getTxt('optimus_sitemap_info'), $link));
2✔
521

522
                $config_vars = [
2✔
523
                        ['check', 'optimus_sitemap_enable', 'subtext' => Lang::getTxt('optimus_sitemap_enable_subtext')],
2✔
524
                        ['check', 'optimus_sitemap_link'],
2✔
525
                        ['check', 'optimus_remove_previous_xml_files'],
2✔
526
                        '',
2✔
527
                        ['select', 'optimus_main_page_frequency', Lang::getTxt('optimus_main_page_frequency_set')],
2✔
528
                        ['check', 'optimus_sitemap_boards', 'subtext' => Lang::getTxt('optimus_sitemap_boards_subtext')],
2✔
529
                        [
2✔
530
                                'check',
2✔
531
                                'optimus_sitemap_all_topic_pages',
2✔
532
                                'subtext' => Lang::getTxt('optimus_sitemap_all_topic_pages_subtext')
2✔
533
                        ],
2✔
534
                        ['int', 'optimus_sitemap_topics_num_replies', 'min' => 0],
2✔
535
                        ['check', 'optimus_sitemap_add_found_images'],
2✔
536
                        '',
2✔
537
                        ['int', 'optimus_sitemap_items_display', 'min' => 1, 'max' => 50000],
2✔
538
                        ['int', 'optimus_start_year', 'min' => 1994, 'max' => date('Y')],
2✔
539
                        ['select', 'optimus_update_frequency', Lang::getTxt('optimus_update_frequency_set')],
2✔
540
                ];
2✔
541

542
                // You can add your own options
543
                IntegrationHook::call('integrate_optimus_sitemap_settings', [&$config_vars]);
2✔
544

545
                if ($return_config) {
2✔
546
                        return $config_vars;
1✔
547
                }
548

549
                if (Input::isGet('save')) {
2✔
550
                        User::$me->checkSession();
1✔
551

552
                        // Recreate a sitemap after save settings
553
                        Db::$db->query('
1✔
554
                                DELETE FROM {db_prefix}background_tasks
555
                                WHERE task_class = {string:task_class}',
1✔
556
                                [
1✔
557
                                        'task_class' => '\\' . Sitemap::class,
1✔
558
                                ]
1✔
559
                        );
1✔
560

561
                        if (Input::isPost('optimus_sitemap_enable')) {
1✔
562
                                Db::$db->insert('insert',
×
563
                                        '{db_prefix}background_tasks',
×
564
                                        ['task_file' => 'string-255', 'task_class' => 'string-255', 'task_data' => 'string'],
×
565
                                        ['$sourcedir/Optimus/Tasks/Sitemap.php', '\\' . Sitemap::class, ''],
×
566
                                        ['id_task'],
×
567
                                );
×
568
                        }
569

570
                        IntegrationHook::call('integrate_save_optimus_sitemap_settings');
1✔
571

572
                        $save_vars = $config_vars;
1✔
573
                        ACP::saveDBSettings($save_vars);
1✔
574

575
                        Utils::redirectexit('action=admin;area=optimus;sa=sitemap');
1✔
576
                }
577

578
                ACP::prepareDBSettingContext($config_vars);
2✔
579
        }
580

581
        private function addBlockWithTips(): void
582
        {
583
                if (empty(Input::isRequest('area')) || empty(Utils::$context['template_layers']))
1✔
584
                        return;
×
585

586
                if (str_contains(Input::request('area'), 'optimus')) {
1✔
587
                        Theme::loadTemplate('Optimus');
1✔
588

589
                        Utils::$context['template_layers'][] = 'tips';
1✔
590
                }
591
        }
592

593
        private function callActionFromAreas(array $subActions): void
594
        {
595
                Utils::$context['sub_template'] = 'show_settings';
1✔
596

597
                $sa = Input::request('sa', 'basic');
1✔
598
                Input::request(['sa' => isset($subActions[$sa]) ? $sa : key($subActions)]);
1✔
599

600
                $this->{$subActions[Input::request('sa')]}();
1✔
601
        }
602

603
        private function addDefaultSettings($settings): void
604
        {
605
                if (empty($settings))
6✔
606
                        return;
×
607

608
                $vars = array_filter($settings, fn($key) => ! isset(Config::$modSettings[$key]), ARRAY_FILTER_USE_KEY);
6✔
609

610
                Config::updateModSettings($vars);
6✔
611
        }
612
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc