<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mwiki.costasano.club/index.php?action=history&amp;feed=atom&amp;title=ICT%3ALocalSettings_organisation</id>
	<title>ICT:LocalSettings organisation - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mwiki.costasano.club/index.php?action=history&amp;feed=atom&amp;title=ICT%3ALocalSettings_organisation"/>
	<link rel="alternate" type="text/html" href="https://mwiki.costasano.club/index.php?title=ICT:LocalSettings_organisation&amp;action=history"/>
	<updated>2026-07-23T02:54:55Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://mwiki.costasano.club/index.php?title=ICT:LocalSettings_organisation&amp;diff=390&amp;oldid=prev</id>
		<title>Mngr: Created page with &quot;= LocalSettings.php Architecture and Maintenance Guide = __TOC__  == Purpose == This document explains the structure, order and design decisions of &#039;&#039;LocalSettings.php&#039;&#039; for the Costa Sano MediaWiki installation.  The goal is:  * predictable behaviour * easy maintenance * safe upgrades * easy handover to future ICT volunteers  This file is intentionally organised in logical blocks.   &#039;&#039;&#039;Do not mix sections.&#039;&#039;&#039;   Order matters.  ----  == Guiding Principles ==  === 1. Read...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mwiki.costasano.club/index.php?title=ICT:LocalSettings_organisation&amp;diff=390&amp;oldid=prev"/>
		<updated>2026-02-04T17:14:10Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= LocalSettings.php Architecture and Maintenance Guide = __TOC__  == Purpose == This document explains the structure, order and design decisions of &amp;#039;&amp;#039;LocalSettings.php&amp;#039;&amp;#039; for the Costa Sano MediaWiki installation.  The goal is:  * predictable behaviour * easy maintenance * safe upgrades * easy handover to future ICT volunteers  This file is intentionally organised in logical blocks.   &amp;#039;&amp;#039;&amp;#039;Do not mix sections.&amp;#039;&amp;#039;&amp;#039;   Order matters.  ----  == Guiding Principles ==  === 1. Read...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= LocalSettings.php Architecture and Maintenance Guide =&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
This document explains the structure, order and design decisions of &amp;#039;&amp;#039;LocalSettings.php&amp;#039;&amp;#039; for the Costa Sano MediaWiki installation.&lt;br /&gt;
&lt;br /&gt;
The goal is:&lt;br /&gt;
&lt;br /&gt;
* predictable behaviour&lt;br /&gt;
* easy maintenance&lt;br /&gt;
* safe upgrades&lt;br /&gt;
* easy handover to future ICT volunteers&lt;br /&gt;
&lt;br /&gt;
This file is intentionally organised in logical blocks.  &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Do not mix sections.&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
Order matters.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Guiding Principles ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Readability over cleverness ===&lt;br /&gt;
Future maintainers must understand the file quickly.&lt;br /&gt;
&lt;br /&gt;
=== 2. One responsibility per block ===&lt;br /&gt;
Each section handles only one topic:&lt;br /&gt;
* site&lt;br /&gt;
* namespaces&lt;br /&gt;
* security&lt;br /&gt;
* extensions&lt;br /&gt;
* extension configuration&lt;br /&gt;
&lt;br /&gt;
=== 3. Correct load order ===&lt;br /&gt;
Some settings MUST be defined before extensions are loaded.&lt;br /&gt;
&lt;br /&gt;
Wrong order causes:&lt;br /&gt;
* Cargo tables not recognised&lt;br /&gt;
* namespaces ignored&lt;br /&gt;
* Lockdown not working&lt;br /&gt;
* PageForms parsing issues&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Required Section Order ==&lt;br /&gt;
&lt;br /&gt;
The file MUST follow this order.&lt;br /&gt;
&lt;br /&gt;
=== 1. Core site configuration ===&lt;br /&gt;
General wiki behaviour.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$wgSitename&lt;br /&gt;
$wgServer&lt;br /&gt;
$wgScriptPath&lt;br /&gt;
$wgLanguageCode&lt;br /&gt;
$wgLocaltimezone&lt;br /&gt;
Database settings&lt;br /&gt;
SMTP / mail&lt;br /&gt;
Uploads&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reason:&lt;br /&gt;
These are global and independent of extensions.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2. Namespace definitions (VERY IMPORTANT) ===&lt;br /&gt;
&lt;br /&gt;
ALL custom namespaces must be defined here, BEFORE extensions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define(&amp;quot;NS_RESEARCH&amp;quot;, 3000);&lt;br /&gt;
define(&amp;quot;NS_CHAPTER&amp;quot;, 3004);&lt;br /&gt;
define(&amp;quot;NS_PLACE&amp;quot;, 3006);&lt;br /&gt;
...&lt;br /&gt;
$wgExtraNamespaces[...]&lt;br /&gt;
$wgNamespaceAliases[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reason:&lt;br /&gt;
Extensions (Cargo, PageForms, Lockdown, VisualEditor) read namespaces during startup.&lt;br /&gt;
&lt;br /&gt;
If namespaces are declared later:&lt;br /&gt;
* forms break&lt;br /&gt;
* Cargo queries fail&lt;br /&gt;
* permissions ignored&lt;br /&gt;
&lt;br /&gt;
This was the cause of several earlier problems.&lt;br /&gt;
&lt;br /&gt;
Rule:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Namespaces first. Always.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3. Groups and permissions ===&lt;br /&gt;
&lt;br /&gt;
User groups and rights only.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$wgGroupPermissions[&amp;#039;club&amp;#039;][&amp;#039;read&amp;#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&amp;#039;club&amp;#039;][&amp;#039;edit&amp;#039;] = true;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No extensions here.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4. Lockdown security ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wfLoadExtension( &amp;#039;Lockdown&amp;#039; );&lt;br /&gt;
$wgNamespacePermissionLockdown[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reason:&lt;br /&gt;
Lockdown depends on:&lt;br /&gt;
* namespaces&lt;br /&gt;
* groups&lt;br /&gt;
&lt;br /&gt;
Therefore it must come AFTER both.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5. Extensions (all together) ===&lt;br /&gt;
&lt;br /&gt;
Load ALL extensions in one clean block.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wfLoadExtension(&amp;#039;Cargo&amp;#039;);&lt;br /&gt;
wfLoadExtension(&amp;#039;PageForms&amp;#039;);&lt;br /&gt;
wfLoadExtension(&amp;#039;ParserFunctions&amp;#039;);&lt;br /&gt;
wfLoadExtension(&amp;#039;InputBox&amp;#039;);&lt;br /&gt;
wfLoadExtension(&amp;#039;Scribunto&amp;#039;);&lt;br /&gt;
wfLoadExtension(&amp;#039;VisualEditor&amp;#039;);&lt;br /&gt;
wfLoadExtension(&amp;#039;PdfHandler&amp;#039;);&lt;br /&gt;
wfLoadExtension(&amp;#039;PageImages&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rules:&lt;br /&gt;
* no logic between loads&lt;br /&gt;
* keep together&lt;br /&gt;
* easy to see what is installed&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 6. Extension configuration ===&lt;br /&gt;
&lt;br /&gt;
Settings that belong to extensions only.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$wgCargoDBtype&lt;br /&gt;
$wgPageFormsUploadableFiles&lt;br /&gt;
$wgVisualEditorAvailableNamespaces&lt;br /&gt;
$wgScribuntoEngineConf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reason:&lt;br /&gt;
Cleaner separation between loading and configuring.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 7. Site CSS/JS ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$wgUseSiteCss = true;&lt;br /&gt;
$wgUseSiteJs  = true;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 8. Debugging (last only) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$wgDebugLogFile&lt;br /&gt;
$wgShowExceptionDetails&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Never place debugging options inside functional sections.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Namespace Design ==&lt;br /&gt;
&lt;br /&gt;
Namespaces are used for both organisation and security.&lt;br /&gt;
&lt;br /&gt;
=== UI pages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Research:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dashboards and user entry points.&lt;br /&gt;
&lt;br /&gt;
=== Data entities ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Chapter:&lt;br /&gt;
Place:&lt;br /&gt;
Organisation:&lt;br /&gt;
Asset:&lt;br /&gt;
Heritage:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pages created by forms only.&lt;br /&gt;
&lt;br /&gt;
Users never manually create pages here.&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ICT:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Technical documentation for maintainers.&lt;br /&gt;
&lt;br /&gt;
This separation keeps:&lt;br /&gt;
* data clean&lt;br /&gt;
* UI simple&lt;br /&gt;
* permissions easy&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Cargo + PageForms Workflow ==&lt;br /&gt;
&lt;br /&gt;
Each entity follows this pattern:&lt;br /&gt;
&lt;br /&gt;
# Template with #cargo_declare&lt;br /&gt;
# Form using PageForms&lt;br /&gt;
# Dashboard page using #cargo_query&lt;br /&gt;
# Edit links using #formlink&lt;br /&gt;
# After schema change → Special:CargoTables → Recreate data&lt;br /&gt;
&lt;br /&gt;
Never manually delete Cargo tables.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Common Maintenance Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== After changing template schema ===&lt;br /&gt;
# Save Template&lt;br /&gt;
# Go to Special:CargoTables&lt;br /&gt;
# Click &amp;quot;Recreate data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== After CSS or layout change ===&lt;br /&gt;
Use:&lt;br /&gt;
?action=purge&lt;br /&gt;
&lt;br /&gt;
=== After LocalSettings change ===&lt;br /&gt;
Restart Apache:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart httpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Rules for Future Maintainers ==&lt;br /&gt;
&lt;br /&gt;
Do:&lt;br /&gt;
* keep section order&lt;br /&gt;
* document every new block&lt;br /&gt;
* add comments&lt;br /&gt;
* test after each change&lt;br /&gt;
&lt;br /&gt;
Do NOT:&lt;br /&gt;
* mix extension loads with config&lt;br /&gt;
* move namespaces lower in file&lt;br /&gt;
* manually edit Cargo database tables&lt;br /&gt;
* duplicate dashboard pages in multiple namespaces&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
Version 4.1  &lt;br /&gt;
Reorganised after implementation of:&lt;br /&gt;
* Cargo&lt;br /&gt;
* PageForms&lt;br /&gt;
* Namespaces with Lockdown&lt;br /&gt;
* Dashboard-based UI&lt;br /&gt;
&lt;br /&gt;
This structure proved stable and should be preserved.&lt;/div&gt;</summary>
		<author><name>Mngr</name></author>
	</entry>
</feed>