1+ <?php
2+
3+ // $foldersInExtensionsFolder;
4+ // $wfLoadExtensionStatements;
5+ // $requireExtensionStatements;
6+ // $composerjsonReq;
7+ // $composerlocaljsonReq;
8+ // $wfLoadExtensionStatements2;
9+ // $mwmLocalSettingsString;
10+ // $extensionsReportedByAPI;
11+
12+ function getWfLoadExtensions ($ lines ) {
13+ $ wfLoadExtensionStatements = array ();
14+ foreach ($ lines as $ lsline ) {
15+ preg_match ('/#?wfLoadExtension\( *[" \']+(.*)[" \']+ *\);/ ' , $ lsline , $ matches );
16+ if (count ($ matches ) > 0 ) {
17+ $ wfLoadExtensionStatements [] = trim ($ matches [1 ]);
18+ };
19+ }
20+ return $ wfLoadExtensionStatements ;
21+ }
22+
23+ function getRequireExtensions ($ lines ) {
24+ $ wfLoadExtensionStatements = array ();
25+ foreach ($ lines as $ lsline ) {
26+ preg_match ('/#?require.+\/extensions\/(.+)\/.+;/ ' , $ lsline , $ matches );
27+ if (count ($ matches ) > 0 ) {
28+ $ wfLoadExtensionStatements [] = trim ($ matches [1 ]);
29+ };
30+ }
31+ return $ wfLoadExtensionStatements ;
32+ }
33+
34+ function isLoadedFromExtensionsFolder ($ extensionName ) {
35+ $ doNotPrintMonitorTable = true ;
36+ require ("/var/www/manage/manage-extensions/monitor.php " );
37+ if (in_array ($ extensionName , $ foldersInExtensionsFolder )) {
38+ if (in_array ($ extensionName , $ wfLoadExtensionStatements ) OR in_array ($ extensionName , $ requireExtensionStatements ) OR in_array ($ extensionName , $ mwmLocalSettingsString )) {
39+ if (in_array ($ extensionName , $ wfLoadExtensionStatements ) XOR in_array ($ extensionName , $ requireExtensionStatements ) XOR in_array ($ extensionName , $ mwmLocalSettingsString )) {
40+ return "properly loaded " ;
41+ }
42+ return "not properly loaded " ;
43+ }
44+ return "folder present, not loaded " ;
45+ }
46+ return "folder not present, not loaded " ;
47+ }
48+
49+ function isLoadedByComposer ($ extensionName ) {
50+ $ doNotPrintMonitorTable = true ;
51+ require ("/var/www/manage/manage-extensions/monitor.php " );
52+ $ installationAspects = getInstallationAspects ($ extensionName );
53+ if (in_array ($ installationAspects ->composer ." ( " .$ installationAspects ->version .") " , $ composerjsonReq ) OR in_array ($ installationAspects ->composer ." ( " .$ installationAspects ->version .") " , $ composerlocaljsonReq )) {
54+ return "loaded " ;
55+ }
56+ return "not loaded " ;
57+ }
58+
59+ function getExtensionJSON () {
60+ $ catalogueURL = "https://raw.githubusercontent.com/dataspects/mediawiki-cli/main/catalogues/extensions.json " ;
61+ $ ch = curl_init ();
62+ curl_setopt ($ ch , CURLOPT_RETURNTRANSFER , 1 );
63+ curl_setopt ($ ch , CURLOPT_SSL_VERIFYHOST , false );
64+ curl_setopt ($ ch , CURLOPT_SSL_VERIFYPEER , false );
65+ curl_setopt ($ ch , CURLOPT_SSL_VERIFYSTATUS , false );
66+ curl_setopt ($ ch , CURLOPT_URL , $ catalogueURL );
67+ $ extensionsCatalogue = json_decode (curl_exec ($ ch ));
68+ curl_close ($ ch );
69+ return $ extensionsCatalogue ;
70+ }
71+
72+ function getInstallationAspects ($ extensionName ) {
73+ $ extensionsCatalogue = getExtensionJSON ();
74+ $ key = array_search ($ extensionName , array_column ($ extensionsCatalogue , "name " ));
75+ return $ extensionsCatalogue [$ key ]->{"installation-aspects " };
76+ }
77+
78+ function addToMWMSQLite ($ name , $ localsettingsdirectives ) {
79+ $ db = new SQLite3 ("/var/www/config/mwmconfigdb.sqlite " );
80+ $ stmt = $ db ->prepare ("INSERT INTO extensions (name, localsettingsdirectives) VALUES ( :name, :localsettingsdirectives) " );
81+ $ stmt ->bindValue (":name " , trim ($ name ), SQLITE3_TEXT );
82+ $ stmt ->bindValue (":localsettingsdirectives " , trim ($ localsettingsdirectives ), SQLITE3_TEXT );
83+ $ stmt ->execute ();
84+ }
85+
86+ function removeFromMWMSQLite_by_lsd ($ localsettingsdirectives ) {
87+ $ db = new SQLite3 ("/var/www/config/mwmconfigdb.sqlite " );
88+ $ stmt = $ db ->prepare ("DELETE FROM extensions WHERE localsettingsdirectives=:localsettingsdirectives " );
89+ $ stmt ->bindValue (":localsettingsdirectives " , trim ($ localsettingsdirectives ), SQLITE3_TEXT );
90+ $ stmt ->execute ();
91+ }
92+
93+ function enableExtension ($ extensionName ) {
94+ $ installationAspects = getInstallationAspects ($ extensionName );
95+ if (property_exists ($ installationAspects , "repository " )) {
96+ $ path = "/var/www/html/w/extensions/ $ extensionName " ;
97+ if ( !file_exists ( $ path ) && !is_dir ( $ path ) ) {
98+ `git clone $ installationAspects ->repository $ path `;
99+ }
100+ }
101+ if (property_exists ($ installationAspects , "localsettings " )) {
102+ foreach ($ installationAspects ->localsettings as $ lsd ) {
103+ addToMWMSQLite ($ extensionName , $ lsd );
104+ }
105+ compileMWMLocalSettings ();
106+ }
107+ if (property_exists ($ installationAspects , "composer " )) {
108+ `echo $(cat /var/www/html/w/composer.local.json | jq ".require += { \"$ installationAspects ->composer \": \"$ installationAspects ->version \"}") > /var/www/html/w/composer.local.json `;
109+ `cd /var/www/html/w && COMPOSER=composer.json COMPOSER_HOME=/var/www/html/w php composer.phar update `;
110+ }
111+ }
112+
113+ function disableExtension ($ extensionName ) {
114+ $ installationAspects = getInstallationAspects ($ extensionName );
115+ if (property_exists ($ installationAspects , "localsettings " )) {
116+ foreach ($ installationAspects ->localsettings as $ lsd ) {
117+ removeFromMWMSQLite_by_lsd ($ lsd );
118+ }
119+ compileMWMLocalSettings ();
120+ }
121+ if (property_exists ($ installationAspects , "composer " )) {
122+ `echo $(cat /var/www/html/w/composer.local.json | jq "del(.require. \"$ installationAspects ->composer \")") > /var/www/html/w/composer.local.json `;
123+ `cd /var/www/html/w && COMPOSER=composer.json COMPOSER_HOME=/var/www/html/w php composer.phar update `;
124+ }
125+ }
126+
127+ function compileMWMLocalSettings () {
128+ shell_exec ('pwd ' );
129+ $ db = new SQLite3 ("/var/www/config/mwmconfigdb.sqlite " );
130+ $ stmt = $ db ->prepare ("SELECT localsettingsdirectives FROM extensions " );
131+ $ result = $ stmt ->execute ();
132+
133+ $ mwmLocalSettingsString = "" ;
134+ while ($ res = $ result ->fetchArray (SQLITE3_ASSOC )){
135+ $ mwmLocalSettingsString .= trim ($ res ["localsettingsdirectives " ])."\n" ;
136+ }
137+
138+ $ mwcliLS = fopen ("/var/www/config/mwmLocalSettings.php " , "w " );
139+ fwrite ($ mwcliLS , "<?php \n" .$ mwmLocalSettingsString );
140+ fclose ($ mwcliLS );
141+ }
142+
143+ function prompt ( $ msg )
144+ {
145+ echo $ msg . "\n" ;
146+ $ in = trim ( fgets ( STDIN ));
147+ return $ in ;
148+ }
0 commit comments