Skip to content

Commit b17bdca

Browse files
Implements YaBB SE → SMF 1.0 migration and cleanup substeps
Signed-off-by: Jon Stovell <jonstovell@gmail.com>
1 parent 39ac2e1 commit b17bdca

Some content is hidden

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

66 files changed

+5933
-0
lines changed
Lines changed: 387 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,387 @@
1+
<?php
2+
3+
/**
4+
* Simple Machines Forum (SMF)
5+
*
6+
* @package SMF
7+
* @author Simple Machines https://www.simplemachines.org
8+
* @copyright 2024 Simple Machines and individual contributors
9+
* @license https://www.simplemachines.org/about/smf/license.php BSD
10+
*
11+
* @version 3.0 Alpha 3
12+
*/
13+
14+
declare(strict_types=1);
15+
16+
namespace SMF\Maintenance\Cleanup\v1_0;
17+
18+
use SMF\IntegrationHook;
19+
use SMF\Maintenance\Cleanup\CleanupBase;
20+
use SMF\Utils;
21+
22+
class RemoveObsoleteSettings extends CleanupBase
23+
{
24+
/*******************
25+
* Public properties
26+
*******************/
27+
28+
/**
29+
* @var string
30+
*
31+
* Name of the cleanup task.
32+
*/
33+
public string $name = 'Removing obsolete settings';
34+
35+
/**
36+
* @var array
37+
*
38+
* Settings to delete.
39+
*/
40+
public array $obsolete_settings_defs = [
41+
'guestaccess' => [
42+
'default' => 0,
43+
'auto_delete' => 3,
44+
'type' => 'integer',
45+
],
46+
'yyForceIIS' => [
47+
'default' => 0,
48+
'auto_delete' => 3,
49+
'type' => 'integer',
50+
],
51+
'yyblankpageIIS' => [
52+
'default' => 0,
53+
'auto_delete' => 3,
54+
'type' => 'integer',
55+
],
56+
'Cookie_Length' => [
57+
'default' => 0,
58+
'auto_delete' => 3,
59+
'type' => 'integer',
60+
],
61+
'RegAgree' => [
62+
'default' => 0,
63+
'auto_delete' => 3,
64+
'type' => 'integer',
65+
],
66+
'emailpassword' => [
67+
'default' => 0,
68+
'auto_delete' => 3,
69+
'type' => 'integer',
70+
],
71+
'emailnewpass' => [
72+
'default' => 0,
73+
'auto_delete' => 3,
74+
'type' => 'integer',
75+
],
76+
'emailwelcome' => [
77+
'default' => 0,
78+
'auto_delete' => 3,
79+
'type' => 'integer',
80+
],
81+
'mailprog' => [
82+
'default' => '',
83+
'auto_delete' => 3,
84+
'type' => 'string',
85+
],
86+
'smtp_server' => [
87+
'default' => '',
88+
'auto_delete' => 3,
89+
'type' => 'string',
90+
],
91+
'mailtype' => [
92+
'default' => 0,
93+
'auto_delete' => 3,
94+
'type' => 'integer',
95+
],
96+
'facesdir' => [
97+
'default' => '',
98+
'auto_delete' => 3,
99+
'type' => 'string',
100+
],
101+
'facesurl' => [
102+
'default' => '',
103+
'auto_delete' => 3,
104+
'type' => 'string',
105+
],
106+
'imagesdir' => [
107+
'default' => '',
108+
'auto_delete' => 3,
109+
'type' => 'string',
110+
],
111+
'ubbcjspath' => [
112+
'default' => '',
113+
'auto_delete' => 3,
114+
'type' => 'string',
115+
],
116+
'faderpath' => [
117+
'default' => '',
118+
'auto_delete' => 3,
119+
'type' => 'string',
120+
],
121+
'helpfile' => [
122+
'default' => '',
123+
'auto_delete' => 3,
124+
'type' => 'string',
125+
],
126+
'MenuType' => [
127+
'default' => 0,
128+
'auto_delete' => 3,
129+
'type' => 'integer',
130+
],
131+
'curposlinks' => [
132+
'default' => 0,
133+
'auto_delete' => 3,
134+
'type' => 'integer',
135+
],
136+
'profilebutton' => [
137+
'default' => 0,
138+
'auto_delete' => 3,
139+
'type' => 'integer',
140+
],
141+
'timeformatstring' => [
142+
'default' => '',
143+
'auto_delete' => 3,
144+
'type' => 'string',
145+
],
146+
'allow_hide_email' => [
147+
'default' => 0,
148+
'auto_delete' => 3,
149+
'type' => 'integer',
150+
],
151+
'showlatestmember' => [
152+
'default' => 0,
153+
'auto_delete' => 3,
154+
'type' => 'integer',
155+
],
156+
'shownewsfader' => [
157+
'default' => 0,
158+
'auto_delete' => 3,
159+
'type' => 'integer',
160+
],
161+
'Show_RecentBar' => [
162+
'default' => 0,
163+
'auto_delete' => 3,
164+
'type' => 'integer',
165+
],
166+
'Show_MemberBar' => [
167+
'default' => 0,
168+
'auto_delete' => 3,
169+
'type' => 'integer',
170+
],
171+
'showmarkread' => [
172+
'default' => 0,
173+
'auto_delete' => 3,
174+
'type' => 'integer',
175+
],
176+
'showmodify' => [
177+
'default' => 0,
178+
'auto_delete' => 3,
179+
'type' => 'integer',
180+
],
181+
'ShowBDescrip' => [
182+
'default' => 0,
183+
'auto_delete' => 3,
184+
'type' => 'integer',
185+
],
186+
'showuserpic' => [
187+
'default' => 0,
188+
'auto_delete' => 3,
189+
'type' => 'integer',
190+
],
191+
'showusertext' => [
192+
'default' => 0,
193+
'auto_delete' => 3,
194+
'type' => 'integer',
195+
],
196+
'showgenderimage' => [
197+
'default' => 0,
198+
'auto_delete' => 3,
199+
'type' => 'integer',
200+
],
201+
'showyabbcbutt' => [
202+
'default' => 0,
203+
'auto_delete' => 3,
204+
'type' => 'integer',
205+
],
206+
'enable_ubbc' => [
207+
'default' => 0,
208+
'auto_delete' => 3,
209+
'type' => 'integer',
210+
],
211+
'enable_news' => [
212+
'default' => 0,
213+
'auto_delete' => 3,
214+
'type' => 'integer',
215+
],
216+
'allowpics' => [
217+
'default' => 0,
218+
'auto_delete' => 3,
219+
'type' => 'integer',
220+
],
221+
'enable_guestposting' => [
222+
'default' => 0,
223+
'auto_delete' => 3,
224+
'type' => 'integer',
225+
],
226+
'enable_notification' => [
227+
'default' => 0,
228+
'auto_delete' => 3,
229+
'type' => 'integer',
230+
],
231+
'autolinkurls' => [
232+
'default' => 0,
233+
'auto_delete' => 3,
234+
'type' => 'integer',
235+
],
236+
'timeoffset' => [
237+
'default' => 0,
238+
'auto_delete' => 3,
239+
'type' => 'integer',
240+
],
241+
'TopAmmount' => [
242+
'default' => 0,
243+
'auto_delete' => 3,
244+
'type' => 'integer',
245+
],
246+
'MembersPerPage' => [
247+
'default' => 0,
248+
'auto_delete' => 3,
249+
'type' => 'integer',
250+
],
251+
'maxdisplay' => [
252+
'default' => 0,
253+
'auto_delete' => 3,
254+
'type' => 'integer',
255+
],
256+
'maxmessagedisplay' => [
257+
'default' => 0,
258+
'auto_delete' => 3,
259+
'type' => 'integer',
260+
],
261+
'MaxMessLen' => [
262+
'default' => 0,
263+
'auto_delete' => 3,
264+
'type' => 'integer',
265+
],
266+
'MaxSigLen' => [
267+
'default' => 0,
268+
'auto_delete' => 3,
269+
'type' => 'integer',
270+
],
271+
'ClickLogTime' => [
272+
'default' => 0,
273+
'auto_delete' => 3,
274+
'type' => 'integer',
275+
],
276+
'max_log_days_old' => [
277+
'default' => 0,
278+
'auto_delete' => 3,
279+
'type' => 'integer',
280+
],
281+
'fadertime' => [
282+
'default' => 0,
283+
'auto_delete' => 3,
284+
'type' => 'integer',
285+
],
286+
'timeout' => [
287+
'default' => 0,
288+
'auto_delete' => 3,
289+
'type' => 'integer',
290+
],
291+
'JrPostNum' => [
292+
'default' => 0,
293+
'auto_delete' => 3,
294+
'type' => 'integer',
295+
],
296+
'FullPostNum' => [
297+
'default' => 0,
298+
'auto_delete' => 3,
299+
'type' => 'integer',
300+
],
301+
'SrPostNum' => [
302+
'default' => 0,
303+
'auto_delete' => 3,
304+
'type' => 'integer',
305+
],
306+
'GodPostNum' => [
307+
'default' => 0,
308+
'auto_delete' => 3,
309+
'type' => 'integer',
310+
],
311+
'userpic_width' => [
312+
'default' => 0,
313+
'auto_delete' => 3,
314+
'type' => 'integer',
315+
],
316+
'userpic_height' => [
317+
'default' => 0,
318+
'auto_delete' => 3,
319+
'type' => 'integer',
320+
],
321+
'userpic_limits' => [
322+
'default' => '',
323+
'auto_delete' => 3,
324+
'type' => 'string',
325+
],
326+
'color' => [
327+
'default' => null,
328+
'auto_delete' => 3,
329+
'type' => ['NULL', 'array'],
330+
// Special search pattern needed because YaBB's settings file used a
331+
// separate statement for each element of this array.
332+
'search_pattern' => '/^\$color(\s*=\s*array\s*(?P<parentheses_a>\((?' . '>[^()]|(?P>parentheses_a))*\))|(?P<brackets>\[(?' . '>[^\[\]]|(?P>brackets))*\])|\[(?P<quote_k>["\'])\w+(?P>quote_k)\]\s*=\s*(?P<quote_v>["\'])(?:.(?!(?P>quote_v))|\\\(?=(?P>quote_v)))*.?(?P>quote_v))\s*;\h*$/m',
333+
],
334+
];
335+
336+
/****************
337+
* Public methods
338+
****************/
339+
340+
/**
341+
*
342+
*/
343+
public function isCandidate(): bool
344+
{
345+
return (bool) preg_match(
346+
'/\$' . Utils::buildRegex(array_keys(self::$obsolete_settings_defs), '/') . '\b/',
347+
file_get_contents(SMF_SETTINGS_FILE),
348+
);
349+
}
350+
351+
/**
352+
*
353+
*/
354+
public function execute(): bool
355+
{
356+
// Add the obsolete settings to the list of defined settings.
357+
IntegrationHook::add('integrate_update_settings_file', __CLASS__ . '::addSettingsDefs', false);
358+
359+
// Delete all the obsolete settings and rebuild the file.
360+
Maintenance::$tool->updateSettingsFile(
361+
config_vars: array_combine(
362+
array_keys(self::$obsolete_settings_defs),
363+
array_map(fn($def) => $def['default'], self::$obsolete_settings_defs),
364+
),
365+
rebuild: true,
366+
);
367+
368+
// Remove the obsolete settings from the list of defined settings.
369+
IntegrationHook::remove('integrate_update_settings_file', __CLASS__ . '::addSettingsDefs', false);
370+
371+
return true;
372+
}
373+
374+
/***********************
375+
* Public static methods
376+
***********************/
377+
378+
/**
379+
* Adds the obsolete YaBB SE settings to the list of defined settings.
380+
*
381+
* @param array &$settings_defs A reference to Config::$settings_defs.
382+
*/
383+
public static function addSettingsDefs(array &$settings_defs): void
384+
{
385+
$settings_defs += self::$obsolete_settings_defs;
386+
}
387+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
// Try to handle it with the upper level index.php. (it should know what to do.)
4+
if (file_exists(dirname(__DIR__) . '/index.php')) {
5+
include dirname(__DIR__) . '/index.php';
6+
} else {
7+
exit;
8+
}

0 commit comments

Comments
 (0)