Skip to content

Commit 7d3cc7c

Browse files
committed
Working extensions management tests
1 parent 0fec610 commit 7d3cc7c

14 files changed

+250
-261
lines changed

add-to-mwm-config.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ source ./my-system.env
44

55
if [ "`ls /home`" != "" ] ; then source ./lib/runInContainerOnly.sh ; fi
66

7-
"php /var/www/manage/mediawiki-cli/lib/addToMWMSQLite.php \"ls\" \"
7+
"php /var/www/manage/lib/addToMWMSQLite.php \"ls\" \"
88
\\\$wgServer = 'https://p51:4443';
99
\""

lib/test-updateMWMLocalSettings.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ if [ "`ls /home`" != "" ] ; then source ./lib/runInContainerOnly.sh ; fi
33
source ./lib/utils.sh
44

55

6-
php /var/www/manage/mediawiki-cli/manage-config/compileMWMLocalSettings.php
6+
php /var/www/manage/manage-config/compileMWMLocalSettings.php

manage-content/inject-ontology-WikiPageContents.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ source ./lib/utils.sh
77
echo -n "Enter full GitHub clone URL, e.g. 'https://github.com/dataspects/dataspectsSystemCoreOntology.git': "
88
read ONTOLOGY_URL
99

10-
/var/www/manage/mediawiki-cli/manage-snapshots/take-restic-snapshot.sh BeforeGitHubOntologyContentsInjection
10+
/var/www/manage/manage-snapshots/take-restic-snapshot.sh BeforeGitHubOntologyContentsInjection
1111

1212
# Clone
1313
mkdir -p /tmp/ontologies
@@ -24,11 +24,11 @@ for filename in /tmp/ontologies/$ONTOLOGY_NAME/objects/*; do
2424
for filename2 in $filename/*; do
2525
getPageData "$filename2"
2626
PAGENAME=$NAMESPACE:$PAGENAME
27-
source /var/www/manage/mediawiki-cli/manage-content/mediawiki-inject.sh
27+
source /var/www/manage/manage-content/mediawiki-inject.sh
2828
done
2929
else
3030
getPageData "$filename"
31-
source /var/www/manage/mediawiki-cli/manage-content/mediawiki-inject.sh
31+
source /var/www/manage/manage-content/mediawiki-inject.sh
3232
fi
3333
done
3434

manage-extensions/check-extensions-diff.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22

3-
source /var/www/manage/mediawiki-cli/lib/utils.sh
3+
source /var/www/manage/lib/utils.sh
44

55
printf "Comparing system_root/w/extensions/ <<<>>> existing_version/extensions/\n\n"
66
diff --brief \
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
require_once("/var/www/manage/manage-extensions/lib.php");
4+
5+
$extensionName = $argv[1];
6+
disableExtension($extensionName);
Lines changed: 2 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,12 @@
11
#!/bin/bash
22
# Public MWCLIBashScript: Disable extensions selected from $CATALOGUE_URL.
3-
4-
source /var/www/manage/manage-extensions/utils.sh
5-
source /var/www/manage/lib/utils.sh
6-
source /var/www/manage/lib/permissions.sh
7-
83
# https://cameronnokes.com/blog/working-with-json-in-bash-using-jq/
94
# https://edoras.sdsu.edu/doc/sed-oneliners.html
105

11-
126
EXTNAME=$1
137

14-
###
15-
# Collect installation aspects
16-
getExtensionData $EXTNAME
17-
installationAspects=`getExtensionDataByKey "installation-aspects" "$extensionData"`
18-
composer=`getExtensionDataByKey "composer" "$installationAspects"`
19-
repository=`getExtensionDataByKey "repository" "$installationAspects"`
20-
localSettings=`getExtensionDataByKey "localsettings" "$installationAspects"`
21-
if [ "$composer" != "null" ]; then cInstrFound=true; fi
22-
if [ "$repository" != "null" ]; then rInstrFound=true; fi
23-
if [ "$localSettings" != "null" ]; then lsInstrFound=true; fi
24-
###
25-
268
/var/www/manage/manage-snapshots/take-restic-snapshot.sh BeforeDisabling-$EXTNAME
279

28-
###
29-
# Check installation aspects
30-
if [ $cInstrFound ] && [ $rInstrFound ]
31-
then
32-
echo "Problem: Installation aspects for $EXTNAME contain both composer and repository specifications!"
33-
exit
34-
fi
35-
36-
###
37-
# Run installation aspects
38-
if [ $cInstrFound ]
39-
then
40-
echo "Running composer..."
41-
echo $(cat /var/www/html/w/composer.local.json | jq "del(.require.\"$composer\")") > /var/www/html/w/composer.local.json
42-
cd /var/www/html/w && COMPOSER=composer.json COMPOSER_HOME=/var/www/html/w php composer.phar update
43-
cd -
44-
echo "Ran composer"
45-
fi
46-
if [ $rInstrFound ]
47-
then
48-
echo "Running repository"
49-
fi
50-
if [ $lsInstrFound ]
51-
then
52-
echo "Running localsettings"
53-
echo `pwd`
54-
echo $localSettings | jq -r '.[]' | while read lsLine
55-
do
56-
php /var/www/manage/manage-config/removeFromMWMSQLite_by_name.php "$EXTNAME"
57-
done
58-
fi
59-
###
60-
61-
php /var/www/manage/manage-config/compileMWMLocalSettings.php
10+
php /var/www/manage/manage-extensions/disable-extension.php $EXTNAME
11+
6212
runMWUpdatePHP
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
require_once("/var/www/manage/manage-extensions/lib.php");
4+
5+
$extensionName = $argv[1];
6+
enableExtension($extensionName);

manage-extensions/enable-extension.sh

Lines changed: 1 addition & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -2,82 +2,14 @@
22
# Public MWCLIBashScript: Enable extensions selected from $CATALOGUE_URL.
33

44
# FIXME: handle multiple system setups
5-
source /var/www/manage/lib/utils.sh
6-
source /var/www/manage/manage-extensions/utils.sh
7-
source /var/www/manage/lib/permissions.sh
85

96
# https://cameronnokes.com/blog/working-with-json-in-bash-using-jq/
107
# https://edoras.sdsu.edu/doc/sed-oneliners.html
118

129
EXTNAME=$1
1310

14-
declare lsDirectives
15-
16-
###
17-
# Collect installation aspects
18-
getExtensionData $EXTNAME
19-
installationAspects=`getExtensionDataByKey "installation-aspects" "$extensionData"`
20-
composer=`getExtensionDataByKey "composer" "$installationAspects"`
21-
version=`getExtensionDataByKey "version" "$installationAspects"`
22-
repository=`getExtensionDataByKey "repository" "$installationAspects"`
23-
localSettings=`getExtensionDataByKey "localsettings" "$installationAspects"`
24-
if [ "$composer" != "null" ]; then cInstrFound=true; fi
25-
if [ "$repository" != "null" ]; then rInstrFound=true; fi
26-
if [ "$localSettings" != "null" ]; then lsInstrFound=true; fi
27-
###
28-
29-
###
30-
# Check installation aspects
31-
if [ $cInstrFound ] && [ $rInstrFound ]
32-
then
33-
echo "Problem: Installation aspects for $EXTNAME contain both composer and repository specifications!"
34-
exit
35-
fi
36-
###
37-
3811
/var/www/manage/manage-snapshots/take-restic-snapshot.sh BeforeEnabling-$EXTNAME
3912

40-
###
41-
# Run installation aspects
42-
if [ $cInstrFound ]
43-
then
44-
echo "Running composer..."
45-
# FIXME: running this removes everything from composer.json!
46-
echo $(cat /var/www/html/w/composer.local.json | jq ".require += { \"$composer\": \"$version\"}") > /var/www/html/w/composer.local.json
47-
cd /var/www/html/w && COMPOSER=composer.json COMPOSER_HOME=/var/www/html/w php composer.phar update
48-
cd -
49-
echo "Ran composer"
50-
fi
51-
# Note: BACKUP composer lock file, restore, and run composer update, which will look at lock file
52-
if [ $rInstrFound ]
53-
then
54-
echo "Running repository"
55-
if [ -d /var/www/html/w/extensions/$EXTNAME ]; then
56-
printf "Removing '/var/www/html/w/extensions/$EXTNAME'...\n"
57-
rm -r /var/www/html/w/extensions/$EXTNAME
58-
printf "Removed '/var/www/html/w/extensions/$EXTNAME'...\n"
59-
fi
60-
git clone $repository /var/www/html/w/extensions/$EXTNAME
61-
fi
62-
if [ $lsInstrFound ]
63-
then
64-
echo "Running localsettings"
65-
lsDirectives=""
66-
echo $localSettings | jq -r '.[]' | {
67-
while read lsLine
68-
do
69-
lsDirectives="$lsDirectives $lsLine"
70-
done
71-
php /var/www/manage/manage-config/addToMWMSQLite.php "$EXTNAME" "$lsDirectives"
72-
if [[ $? == 0 ]]
73-
then
74-
echo "SUCCESS: $?"
75-
else
76-
echo "ERROR: $?"
77-
fi
78-
}
79-
fi
80-
###
13+
php /var/www/manage/manage-extensions/enable-extension.php $EXTNAME
8114

82-
php /var/www/manage/manage-config/compileMWMLocalSettings.php
8315
runMWUpdatePHP

manage-extensions/lib.php

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
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

Comments
 (0)