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

dragomano / Optimus / 17876715787

20 Sep 2025 06:53AM UTC coverage: 97.619% (+3.0%) from 94.648%
17876715787

push

github

dragomano
Update dependencies (docs)

1845 of 1890 relevant lines covered (97.62%)

3.52 hits per line

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

97.46
/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 RC4
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

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

101
        public function actions(): void
102
        {
103
                User::$me->isAllowedTo('admin_forum');
1✔
104

105
                Utils::$context['page_title'] = OP_NAME;
1✔
106

107
                Theme::loadTemplate('Optimus');
1✔
108

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

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

160
                $this->addBlockWithTips();
1✔
161

162
                $this->callActionFromAreas($subActions);
1✔
163
        }
164

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

173
                $this->addDefaultSettings(
3✔
174
                        ['optimus_forum_index' => sprintf(Lang::getTxt('forum_index'), Utils::$context['forum_name'])]
3✔
175
                );
3✔
176

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

207
                // You can add your own options
208
                IntegrationHook::call('integrate_optimus_basic_settings', [&$config_vars]);
3✔
209

210
                if ($return_config)
3✔
211
                        return $config_vars;
1✔
212

213
                if (Input::isGet('save')) {
3✔
214
                        User::$me->checkSession();
2✔
215

216
                        if (Input::isPost('optimus_forum_index')) {
2✔
217
                                Input::post(['optimus_forum_index' => Input::filter('optimus_forum_index')]);
1✔
218
                        }
219

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

224
                        IntegrationHook::call('integrate_save_optimus_basic_settings');
2✔
225

226
                        $save_vars = $config_vars;
2✔
227
                        ACP::saveDBSettings($save_vars);
2✔
228

229
                        Utils::redirectexit('action=admin;area=optimus;sa=basic');
2✔
230
                }
231

232
                ACP::prepareDBSettingContext($config_vars);
3✔
233
        }
234

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

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

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

266
                // You can add your own options
267
                IntegrationHook::call('integrate_optimus_extra_settings', [&$config_vars]);
2✔
268

269
                if ($return_config)
2✔
270
                        return $config_vars;
1✔
271

272
                if (Input::isGet('save')) {
2✔
273
                        User::$me->checkSession();
2✔
274

275
                        if (Input::isPost('optimus_fb_appid')) {
2✔
276
                                Input::post(['optimus_fb_appid' => Input::filter('optimus_fb_appid')]);
1✔
277
                        }
278

279
                        if (Input::isPost('optimus_tw_cards')) {
2✔
280
                                Input::post([
1✔
281
                                        'optimus_tw_cards' => str_replace(
1✔
282
                                                '@', '', Input::filter('optimus_tw_cards'))
1✔
283
                                ]);
1✔
284
                        }
285

286
                        IntegrationHook::call('integrate_save_optimus_extra_settings');
2✔
287

288
                        $save_vars = $config_vars;
2✔
289
                        ACP::saveDBSettings($save_vars);
2✔
290

291
                        Utils::redirectexit('action=admin;area=optimus;sa=extra');
2✔
292
                }
293

294
                ACP::prepareDBSettingContext($config_vars);
2✔
295
        }
296

297
        /**
298
         * @return void|array
299
         */
300
        public function faviconTabSettings(bool $return_config = false)
301
        {
302
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_favicon_title');
1✔
303
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=favicon;save';
1✔
304

305
                $config_vars = [
1✔
306
                        ['large_text', 'optimus_favicon_text'],
1✔
307
                ];
1✔
308

309
                if ($return_config)
1✔
310
                        return $config_vars;
1✔
311

312
                Utils::$context['sub_template'] = 'favicon';
1✔
313

314
                if (Input::isGet('save')) {
1✔
315
                        User::$me->checkSession();
1✔
316

317
                        $save_vars = $config_vars;
1✔
318
                        ACP::saveDBSettings($save_vars);
1✔
319

320
                        Utils::redirectexit('action=admin;area=optimus;sa=favicon');
1✔
321
                }
322

323
                ACP::prepareDBSettingContext($config_vars);
1✔
324
        }
325

326
        public function metatagsTabSettings(): void
327
        {
328
                Utils::$context['sub_template'] = 'metatags';
2✔
329
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_meta_title');
2✔
330
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=metatags;save';
2✔
331

332
                Utils::$context['optimus_metatags_rules'] = empty(Config::$modSettings['optimus_meta'])
2✔
333
                        ? [] : unserialize(Config::$modSettings['optimus_meta']);
2✔
334

335
                $config_vars = [];
2✔
336

337
                if (Input::isGet('save')) {
2✔
338
                        User::$me->checkSession();
2✔
339

340
                        $save_vars = $config_vars;
2✔
341
                        ACP::saveDBSettings($save_vars);
2✔
342

343
                        $meta = [];
2✔
344
                        if (Input::isPost('custom_tag_name') && Input::isPost('custom_tag_value')) {
2✔
345
                                $custom_tag_name = Input::post('custom_tag_name');
1✔
346
                                $custom_tag_value = Input::post('custom_tag_value');
1✔
347
                                $custom_tag_name = array_filter($custom_tag_name);
1✔
348

349
                                foreach ($custom_tag_name as $key => $value) {
1✔
350
                                        $meta[$value] = $custom_tag_value[$key];
1✔
351
                                }
352
                        }
353

354
                        Config::updateModSettings(['optimus_meta' => serialize($meta)]);
2✔
355
                        Utils::redirectexit('action=admin;area=optimus;sa=metatags');
2✔
356
                }
357

358
                ACP::prepareDBSettingContext($config_vars);
2✔
359
        }
360

361
        public function redirectTabSettings(): void
362
        {
363
                Utils::$context['sub_template'] = 'redirect';
2✔
364
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_redirect_title');
2✔
365
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=redirect;save';
2✔
366

367
                Utils::$context['optimus_redirect_rules'] = empty(Config::$modSettings['optimus_redirect'])
2✔
368
                        ? [] : unserialize(Config::$modSettings['optimus_redirect']);
2✔
369

370
                $config_vars = [];
2✔
371

372
                if (Input::isGet('save')) {
2✔
373
                        User::$me->checkSession();
2✔
374

375
                        $save_vars = $config_vars;
2✔
376
                        ACP::saveDBSettings($save_vars);
2✔
377

378
                        $redirect = [];
2✔
379
                        if (Input::isPost('custom_redirect_from') && Input::isPost('custom_redirect_to')) {
2✔
380
                                $custom_redirect_from = Input::post('custom_redirect_from');
1✔
381
                                $custom_redirect_to = Input::post('custom_redirect_to');
1✔
382
                                $custom_redirect_from = array_filter($custom_redirect_from);
1✔
383

384
                                foreach ($custom_redirect_from as $to => $from) {
1✔
385
                                        $redirect[$from] = $custom_redirect_to[$to];
1✔
386
                                }
387
                        }
388

389
                        Config::updateModSettings(['optimus_redirect' => serialize($redirect)]);
2✔
390
                        Utils::redirectexit('action=admin;area=optimus;sa=redirect');
2✔
391
                }
392

393
                ACP::prepareDBSettingContext($config_vars);
2✔
394
        }
395

396
        public function counterTabSettings(): void
397
        {
398
                Utils::$context['sub_template'] = 'counters';
1✔
399
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_counters');
1✔
400
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=counters;save';
1✔
401

402
                $this->addDefaultSettings([
1✔
403
                        'optimus_counters_css'    => '.counters {text-align: center}',
1✔
404
                        'optimus_ignored_actions' => 'admin,bookmarks,credits,helpadmin,pm,printpage',
1✔
405
                ]);
1✔
406

407
                $config_vars = [
1✔
408
                        ['large_text', 'optimus_head_code'],
1✔
409
                        ['large_text', 'optimus_stat_code'],
1✔
410
                        ['large_text', 'optimus_count_code'],
1✔
411
                        ['large_text', 'optimus_counters_css'],
1✔
412
                        ['text', 'optimus_ignored_actions'],
1✔
413
                ];
1✔
414

415
                if (Input::isGet('save')) {
1✔
416
                        User::$me->checkSession();
1✔
417

418
                        $save_vars = $config_vars;
1✔
419
                        ACP::saveDBSettings($save_vars);
1✔
420

421
                        Utils::redirectexit('action=admin;area=optimus;sa=counters');
1✔
422
                }
423

424
                ACP::prepareDBSettingContext($config_vars);
1✔
425
        }
426

427
        public function robotsTabSettings(): void
428
        {
429
                Utils::$context['sub_template'] = 'robots';
2✔
430
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_robots_title');
2✔
431
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=robots;save';
2✔
432

433
                $config_vars = [];
2✔
434

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

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

439
                (new RobotsGenerator())->generate();
2✔
440

441
                if (Input::isGet('save')) {
2✔
442
                        User::$me->checkSession();
2✔
443

444
                        $save_vars = $config_vars;
2✔
445
                        ACP::saveDBSettings($save_vars);
2✔
446

447
                        file_put_contents($path, Input::filter('optimus_robots'), LOCK_EX);
2✔
448

449
                        Utils::redirectexit('action=admin;area=optimus;sa=robots');
2✔
450
                }
451

452
                ACP::prepareDBSettingContext($config_vars);
2✔
453
        }
454

455
        public function htaccessTabSettings(): void
456
        {
457
                Utils::$context['sub_template'] = 'htaccess';
2✔
458
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_htaccess_title');
2✔
459
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=htaccess;save';
2✔
460

461
                $config_vars = [];
2✔
462

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

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

467
                if (Input::isGet('save')) {
2✔
468
                        User::$me->checkSession();
2✔
469

470
                        $save_vars = $config_vars;
2✔
471
                        ACP::saveDBSettings($save_vars);
2✔
472

473
                        if (is_file($path)) {
2✔
474
                                copy($path, $path . '.backup');
2✔
475
                        }
476

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

479
                        Utils::redirectexit('action=admin;area=optimus;sa=htaccess');
2✔
480
                }
481

482
                ACP::prepareDBSettingContext($config_vars);
2✔
483
        }
484

485
        /**
486
         * @return void|array
487
         */
488
        public function sitemapTabSettings(bool $return_config = false)
489
        {
490
                Utils::$context['page_title'] .= ' - ' . Lang::getTxt('optimus_sitemap_title');
2✔
491
                Utils::$context['settings_title'] = Lang::getTxt('optimus_sitemap_title');
2✔
492
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=sitemap;save';
2✔
493

494
                if (! Utils::makeWritable(Config::$boarddir)) {
2✔
495
                        ErrorHandler::fatalLang('optimus_root_is_not_writable');
×
496
                }
497

498
                $this->addDefaultSettings([
2✔
499
                        'optimus_sitemap_topics_num_replies' => 5,
2✔
500
                        'optimus_sitemap_items_display'      => 10000,
2✔
501
                        'optimus_start_year'                 => 1994,
2✔
502
                        'optimus_update_frequency'           => 1,
2✔
503
                ]);
2✔
504

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

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

512
                $config_vars = [
2✔
513
                        ['check', 'optimus_sitemap_enable', 'subtext' => Lang::getTxt('optimus_sitemap_enable_subtext')],
2✔
514
                        ['check', 'optimus_sitemap_link'],
2✔
515
                        ['check', 'optimus_remove_previous_xml_files'],
2✔
516
                        '',
2✔
517
                        ['select', 'optimus_main_page_frequency', Lang::getTxt('optimus_main_page_frequency_set')],
2✔
518
                        ['check', 'optimus_sitemap_boards', 'subtext' => Lang::getTxt('optimus_sitemap_boards_subtext')],
2✔
519
                        [
2✔
520
                                'check',
2✔
521
                                'optimus_sitemap_all_topic_pages',
2✔
522
                                'subtext' => Lang::getTxt('optimus_sitemap_all_topic_pages_subtext')
2✔
523
                        ],
2✔
524
                        ['int', 'optimus_sitemap_topics_num_replies', 'min' => 0],
2✔
525
                        ['check', 'optimus_sitemap_add_found_images'],
2✔
526
                        '',
2✔
527
                        ['int', 'optimus_sitemap_items_display', 'min' => 1, 'max' => 50000],
2✔
528
                        ['int', 'optimus_start_year', 'min' => 1994, 'max' => date('Y')],
2✔
529
                        ['select', 'optimus_update_frequency', Lang::getTxt('optimus_update_frequency_set')],
2✔
530
                ];
2✔
531

532
                // You can add your own options
533
                IntegrationHook::call('integrate_optimus_sitemap_settings', [&$config_vars]);
2✔
534

535
                if ($return_config)
2✔
536
                        return $config_vars;
1✔
537

538
                if (Input::isGet('save')) {
2✔
539
                        User::$me->checkSession();
1✔
540

541
                        // Recreate a sitemap after save settings
542
                        Db::$db->query('
1✔
543
                                DELETE FROM {db_prefix}background_tasks
544
                                WHERE task_class = {string:task_class}',
1✔
545
                                [
1✔
546
                                        'task_class' => '\\' . Sitemap::class,
1✔
547
                                ]
1✔
548
                        );
1✔
549

550
                        if (Input::isPost('optimus_sitemap_enable')) {
1✔
551
                                Db::$db->insert('insert',
×
552
                                        '{db_prefix}background_tasks',
×
553
                                        ['task_file' => 'string-255', 'task_class' => 'string-255', 'task_data' => 'string'],
×
554
                                        ['$sourcedir/Optimus/Tasks/Sitemap.php', '\\' . Sitemap::class, ''],
×
555
                                        ['id_task'],
×
556
                                );
×
557
                        }
558

559
                        IntegrationHook::call('integrate_save_optimus_sitemap_settings');
1✔
560

561
                        $save_vars = $config_vars;
1✔
562
                        ACP::saveDBSettings($save_vars);
1✔
563

564
                        Utils::redirectexit('action=admin;area=optimus;sa=sitemap');
1✔
565
                }
566

567
                ACP::prepareDBSettingContext($config_vars);
2✔
568
        }
569

570
        private function addBlockWithTips(): void
571
        {
572
                if (empty(Input::isRequest('area')) || empty(Utils::$context['template_layers']))
1✔
573
                        return;
×
574

575
                if (str_contains(Input::request('area'), 'optimus')) {
1✔
576
                        Theme::loadTemplate('Optimus');
1✔
577

578
                        Utils::$context['template_layers'][] = 'tips';
1✔
579
                }
580
        }
581

582
        private function callActionFromAreas(array $subActions): void
583
        {
584
                Utils::$context['sub_template'] = 'show_settings';
1✔
585

586
                $sa = Input::request('sa', 'basic');
1✔
587
                Input::request(['sa' => isset($subActions[$sa]) ? $sa : key($subActions)]);
1✔
588

589
                $this->{$subActions[Input::request('sa')]}();
1✔
590
        }
591

592
        private function addDefaultSettings($settings): void
593
        {
594
                if (empty($settings))
6✔
595
                        return;
×
596

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

599
                Config::updateModSettings($vars);
6✔
600
        }
601
}
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