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

dragomano / Optimus / 13298944384

13 Feb 2025 02:13AM UTC coverage: 94.658% (-0.05%) from 94.709%
13298944384

push

github

dragomano
Update docs

1772 of 1872 relevant lines covered (94.66%)

2.06 hits per line

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

93.1
/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 RC3
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::$txt['optimus_title'],
1✔
77
                        'function' => $this->actions(...),
1✔
78
                        'icon' => 'optimus',
1✔
79
                        'subsections' => [
1✔
80
                                'basic'    => [Lang::$txt['optimus_basic_title']],
1✔
81
                                'extra'    => [Lang::$txt['optimus_extra_title']],
1✔
82
                                'favicon'  => [Lang::$txt['optimus_favicon_title']],
1✔
83
                                'metatags' => [Lang::$txt['optimus_meta_title']],
1✔
84
                                'redirect' => [Lang::$txt['optimus_redirect_title']],
1✔
85
                                'counters' => [Lang::$txt['optimus_counters']],
1✔
86
                                'robots'   => [Lang::$txt['optimus_robots_title']],
1✔
87
                                'htaccess' => [Lang::$txt['optimus_htaccess_title']],
1✔
88
                                'sitemap'  => [Lang::$txt['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
                Lang::load('ManageSettings');
1✔
108

109
                Theme::loadTemplate('Optimus');
1✔
110

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

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

162
                $this->addBlockWithTips();
1✔
163

164
                $this->callActionFromAreas($subActions);
1✔
165
        }
166

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

175
                $this->addDefaultSettings(
2✔
176
                        ['optimus_forum_index' => sprintf(Lang::$txt['forum_index'], Utils::$context['forum_name'])]
2✔
177
                );
2✔
178

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

204
                // You can add your own options
205
                IntegrationHook::call('integrate_optimus_basic_settings', [&$config_vars]);
2✔
206

207
                if ($return_config)
2✔
208
                        return $config_vars;
1✔
209

210
                if (Input::isGet('save')) {
2✔
211
                        User::$me->checkSession();
1✔
212

213
                        if (Input::isPost('optimus_forum_index')) {
1✔
214
                                Input::post(['optimus_forum_index' => Input::filter('optimus_forum_index')]);
×
215
                        }
216

217
                        if (Input::isPost('optimus_description')) {
1✔
218
                                Input::post(['optimus_description' => Input::filter('optimus_description')]);
×
219
                        }
220

221
                        IntegrationHook::call('integrate_save_optimus_basic_settings');
1✔
222

223
                        $save_vars = $config_vars;
1✔
224
                        ACP::saveDBSettings($save_vars);
1✔
225

226
                        Utils::redirectexit('action=admin;area=optimus;sa=basic');
1✔
227
                }
228

229
                ACP::prepareDBSettingContext($config_vars);
2✔
230
        }
231

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

240
                Lang::$txt['optimus_extra_info'] = sprintf(Lang::$txt['optimus_extra_info'], Config::$scripturl);
1✔
241
                $ogImageLink = Config::$scripturl . '?action=admin;area=theme;sa=list;th='
1✔
242
                        . Theme::$current->settings['theme_id']  . '#options_og_image';
1✔
243

244
                $config_vars = [
1✔
245
                        ['title', 'optimus_extra_title'],
1✔
246
                        ['desc', 'optimus_extra_info'],
1✔
247
                        [
1✔
248
                                'check',
1✔
249
                                'optimus_og_image',
1✔
250
                                'help' => 'optimus_og_image_help',
1✔
251
                                'subtext' => sprintf(Lang::$txt['optimus_og_image_subtext'], $ogImageLink)
1✔
252
                        ],
1✔
253
                        [
1✔
254
                                'check',
1✔
255
                                'optimus_allow_change_board_og_image',
1✔
256
                                'subtext' => Lang::$txt['optimus_allow_change_board_og_image_subtext']
1✔
257
                        ],
1✔
258
                        ['text', 'optimus_fb_appid', 40, 'help' => 'optimus_fb_appid_help'],
1✔
259
                        ['text', 'optimus_tw_cards', 40, 'preinput' => '@', 'help' => 'optimus_tw_cards_help'],
1✔
260
                ];
1✔
261

262
                // You can add your own options
263
                IntegrationHook::call('integrate_optimus_extra_settings', [&$config_vars]);
1✔
264

265
                if ($return_config)
1✔
266
                        return $config_vars;
1✔
267

268
                if (Input::isGet('save')) {
1✔
269
                        User::$me->checkSession();
1✔
270

271
                        if (Input::isPost('optimus_fb_appid')) {
1✔
272
                                Input::post(['optimus_fb_appid' => Input::filter('optimus_fb_appid')]);
×
273
                        }
274

275
                        if (Input::isPost('optimus_tw_cards')) {
1✔
276
                                Input::post([
×
277
                                        'optimus_tw_cards' => str_replace(
×
278
                                                '@', '', Input::filter('optimus_tw_cards'))
×
279
                                ]);
×
280
                        }
281

282
                        IntegrationHook::call('integrate_save_optimus_extra_settings');
1✔
283

284
                        $save_vars = $config_vars;
1✔
285
                        ACP::saveDBSettings($save_vars);
1✔
286

287
                        Utils::redirectexit('action=admin;area=optimus;sa=extra');
1✔
288
                }
289

290
                ACP::prepareDBSettingContext($config_vars);
1✔
291
        }
292

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

301
                $config_vars = [
1✔
302
                        ['large_text', 'optimus_favicon_text'],
1✔
303
                ];
1✔
304

305
                if ($return_config)
1✔
306
                        return $config_vars;
1✔
307

308
                Utils::$context['sub_template'] = 'favicon';
1✔
309

310
                if (Input::isGet('save')) {
1✔
311
                        User::$me->checkSession();
1✔
312

313
                        $save_vars = $config_vars;
1✔
314
                        ACP::saveDBSettings($save_vars);
1✔
315

316
                        Utils::redirectexit('action=admin;area=optimus;sa=favicon');
1✔
317
                }
318

319
                ACP::prepareDBSettingContext($config_vars);
1✔
320
        }
321

322
        public function metatagsTabSettings(): void
323
        {
324
                Utils::$context['sub_template'] = 'metatags';
1✔
325
                Utils::$context['page_title'] .= ' - ' . Lang::$txt['optimus_meta_title'];
1✔
326
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=metatags;save';
1✔
327

328
                Utils::$context['optimus_metatags_rules'] = empty(Config::$modSettings['optimus_meta'])
1✔
329
                        ? [] : unserialize(Config::$modSettings['optimus_meta']);
1✔
330

331
                $config_vars = [];
1✔
332

333
                if (Input::isGet('save')) {
1✔
334
                        User::$me->checkSession();
1✔
335

336
                        $save_vars = $config_vars;
1✔
337
                        ACP::saveDBSettings($save_vars);
1✔
338

339
                        $meta = [];
1✔
340
                        if (Input::isPost('custom_tag_name') && Input::isPost('custom_tag_value')) {
1✔
341
                                $custom_tag = filter_input_array(INPUT_POST);
×
342
                                $custom_tag['custom_tag_name'] = array_filter($custom_tag['custom_tag_name']);
×
343

344
                                foreach ($custom_tag['custom_tag_name'] as $key => $value) {
×
345
                                        $meta[$value] = $custom_tag['custom_tag_value'][$key];
×
346
                                }
347
                        }
348

349
                        Config::updateModSettings(['optimus_meta' => serialize($meta)]);
1✔
350
                        Utils::redirectexit('action=admin;area=optimus;sa=metatags');
1✔
351
                }
352

353
                ACP::prepareDBSettingContext($config_vars);
1✔
354
        }
355

356
        public function redirectTabSettings(): void
357
        {
358
                Utils::$context['sub_template'] = 'redirect';
1✔
359
                Utils::$context['page_title'] .= ' - ' . Lang::$txt['optimus_redirect_title'];
1✔
360
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=redirect;save';
1✔
361

362
                Utils::$context['optimus_redirect_rules'] = empty(Config::$modSettings['optimus_redirect'])
1✔
363
                        ? [] : unserialize(Config::$modSettings['optimus_redirect']);
1✔
364

365
                $config_vars = [];
1✔
366

367
                if (Input::isGet('save')) {
1✔
368
                        User::$me->checkSession();
1✔
369

370
                        $save_vars = $config_vars;
1✔
371
                        ACP::saveDBSettings($save_vars);
1✔
372

373
                        $redirect = [];
1✔
374
                        if (Input::isPost('custom_redirect_from') && Input::isPost('custom_redirect_to')) {
1✔
375
                                $custom_redirect = filter_input_array(INPUT_POST);
×
376
                                $custom_redirect['custom_redirect_from'] = array_filter($custom_redirect['custom_redirect_from']);
×
377

378
                                foreach ($custom_redirect['custom_redirect_from'] as $to => $from) {
×
379
                                        $redirect[$from] = $custom_redirect['custom_redirect_to'][$to];
×
380
                                }
381
                        }
382

383
                        Config::updateModSettings(['optimus_redirect' => serialize($redirect)]);
1✔
384
                        Utils::redirectexit('action=admin;area=optimus;sa=redirect');
1✔
385
                }
386

387
                ACP::prepareDBSettingContext($config_vars);
1✔
388
        }
389

390
        public function counterTabSettings(): void
391
        {
392
                Utils::$context['sub_template'] = 'counters';
1✔
393
                Utils::$context['page_title'] .= ' - ' . Lang::$txt['optimus_counters'];
1✔
394
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=counters;save';
1✔
395

396
                $this->addDefaultSettings([
1✔
397
                        'optimus_counters_css'    => '.counters {text-align: center}',
1✔
398
                        'optimus_ignored_actions' => 'admin,bookmarks,credits,helpadmin,pm,printpage',
1✔
399
                ]);
1✔
400

401
                $config_vars = [
1✔
402
                        ['large_text', 'optimus_head_code'],
1✔
403
                        ['large_text', 'optimus_stat_code'],
1✔
404
                        ['large_text', 'optimus_count_code'],
1✔
405
                        ['large_text', 'optimus_counters_css'],
1✔
406
                        ['text', 'optimus_ignored_actions'],
1✔
407
                ];
1✔
408

409
                if (Input::isGet('save')) {
1✔
410
                        User::$me->checkSession();
1✔
411

412
                        $save_vars = $config_vars;
1✔
413
                        ACP::saveDBSettings($save_vars);
1✔
414

415
                        Utils::redirectexit('action=admin;area=optimus;sa=counters');
1✔
416
                }
417

418
                ACP::prepareDBSettingContext($config_vars);
1✔
419
        }
420

421
        public function robotsTabSettings(): void
422
        {
423
                Utils::$context['sub_template'] = 'robots';
1✔
424
                Utils::$context['page_title'] .= ' - ' . Lang::$txt['optimus_robots_title'];
1✔
425
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=robots;save';
1✔
426

427
                $config_vars = [];
1✔
428

429
                $path = (Input::server('document_root') ?: Config::$boarddir) . '/robots.txt';
1✔
430

431
                Utils::$context['robots_content'] = Utils::makeWritable($path) ? file_get_contents($path) : '';
1✔
432

433
                (new RobotsGenerator())->generate();
1✔
434

435
                if (Input::isGet('save')) {
1✔
436
                        User::$me->checkSession();
1✔
437

438
                        $save_vars = $config_vars;
1✔
439
                        ACP::saveDBSettings($save_vars);
1✔
440

441
                        file_put_contents($path, Input::filter('optimus_robots'), LOCK_EX);
1✔
442

443
                        Utils::redirectexit('action=admin;area=optimus;sa=robots');
1✔
444
                }
445

446
                ACP::prepareDBSettingContext($config_vars);
1✔
447
        }
448

449
        public function htaccessTabSettings(): void
450
        {
451
                Utils::$context['sub_template'] = 'htaccess';
1✔
452
                Utils::$context['page_title'] .= ' - ' . Lang::$txt['optimus_htaccess_title'];
1✔
453
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=htaccess;save';
1✔
454

455
                $config_vars = [];
1✔
456

457
                $path = (Input::server('document_root') ?: Config::$boarddir) . '/.htaccess';
1✔
458

459
                Utils::$context['htaccess_content'] = Utils::makeWritable($path) ? file_get_contents($path) : '';
1✔
460

461
                if (Input::isGet('save')) {
1✔
462
                        User::$me->checkSession();
1✔
463

464
                        $save_vars = $config_vars;
1✔
465
                        ACP::saveDBSettings($save_vars);
1✔
466

467
                        if (is_file($path)) {
1✔
468
                                copy($path, $path . '.backup');
×
469
                        }
470

471
                        file_put_contents($path, trim(Input::post('optimus_htaccess')), LOCK_EX);
1✔
472

473
                        Utils::redirectexit('action=admin;area=optimus;sa=htaccess');
1✔
474
                }
475

476
                ACP::prepareDBSettingContext($config_vars);
1✔
477
        }
478

479
        /**
480
         * @return void|array
481
         */
482
        public function sitemapTabSettings(bool $return_config = false)
483
        {
484
                Utils::$context['page_title'] .= ' - ' . Lang::$txt['optimus_sitemap_title'];
1✔
485
                Utils::$context['settings_title'] = Lang::$txt['optimus_sitemap_title'];
1✔
486
                Utils::$context['post_url'] = Config::$scripturl . '?action=admin;area=optimus;sa=sitemap;save';
1✔
487

488
                if (! Utils::makeWritable(Config::$boarddir)) {
1✔
489
                        ErrorHandler::fatalLang('optimus_root_is_not_writable');
1✔
490
                }
491

492
                Lang::load('ManageMaintenance');
1✔
493

494
                $this->addDefaultSettings([
1✔
495
                        'optimus_sitemap_topics_num_replies' => 5,
1✔
496
                        'optimus_sitemap_items_display'      => 10000,
1✔
497
                        'optimus_start_year'                 => 1994,
1✔
498
                        'optimus_update_frequency'           => 1,
1✔
499
                ]);
1✔
500

501
                $title = Lang::$txt['admin_maintenance'] . ' - ' . Lang::$txt['maintain_recount'];
1✔
502
                $link = Str::html('a', $title)->class('bbc_link')
1✔
503
                        ->href(sprintf('%s?action=admin;area=maintain;sa=routine', Config::$scripturl));
1✔
504

505
                Utils::$context['settings_insert_above'] = Str::html('div')->class('roundframe')
1✔
506
                        ->setHtml(sprintf(Lang::$txt['optimus_sitemap_info'], $link));
1✔
507

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

528
                // You can add your own options
529
                IntegrationHook::call('integrate_optimus_sitemap_settings', [&$config_vars]);
1✔
530

531
                if ($return_config)
1✔
532
                        return $config_vars;
1✔
533

534
                if (Input::isGet('save')) {
1✔
535
                        User::$me->checkSession();
1✔
536

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

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

555
                        IntegrationHook::call('integrate_save_optimus_sitemap_settings');
1✔
556

557
                        $save_vars = $config_vars;
1✔
558
                        ACP::saveDBSettings($save_vars);
1✔
559

560
                        Utils::redirectexit('action=admin;area=optimus;sa=sitemap');
1✔
561
                }
562

563
                ACP::prepareDBSettingContext($config_vars);
1✔
564
        }
565

566
        private function addBlockWithTips(): void
567
        {
568
                if (empty(Input::isRequest('area')) || empty(Utils::$context['template_layers']))
1✔
569
                        return;
×
570

571
                if (str_contains(Input::request('area'), 'optimus')) {
1✔
572
                        Theme::loadTemplate('Optimus');
1✔
573

574
                        Utils::$context['template_layers'][] = 'tips';
1✔
575
                }
576
        }
577

578
        private function callActionFromAreas(array $subActions): void
579
        {
580
                Utils::$context['sub_template'] = 'show_settings';
1✔
581

582
                $sa = Input::request('sa', 'basic');
1✔
583
                Input::request(['sa' => isset($subActions[$sa]) ? $sa : key($subActions)]);
1✔
584

585
                $this->{$subActions[Input::request('sa')]}();
1✔
586
        }
587

588
        private function addDefaultSettings($settings): void
589
        {
590
                if (empty($settings))
4✔
591
                        return;
×
592

593
                $vars = array_filter($settings, fn($key) => ! isset(Config::$modSettings[$key]), ARRAY_FILTER_USE_KEY);
4✔
594

595
                Config::updateModSettings($vars);
4✔
596
        }
597
}
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