| Server IP : 170.10.162.208 / Your IP : 216.73.216.181 Web Server : LiteSpeed System : Linux altar19.supremepanel19.com 4.18.0-553.69.1.lve.el8.x86_64 #1 SMP Wed Aug 13 19:53:59 UTC 2025 x86_64 User : deltahospital ( 1806) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/deltahospital/.cagefs/tmp/ |
Upload File : |
<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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<softedit xmlns="http://www.softaculous.com">
<settings>
<group>
<heading>{{ad_act}}</heading>
<input type="text" name="admin_username" size="30" value="">
<head>{{ad_name}}</head>
<optional>true</optional>
</input>
<input type="text" name="admin_pass" size="30" value="">
<head>{{ad_pass}}</head>
<exp>{{exp_ad_pass}}</exp>
<optional>true</optional>
</input>
</group>
</settings>
</softedit><?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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
/KAgIm==<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
HR+cPuWZ9F/g4hkSC+ldiHzPNNtrBU/ElC1A/BYuKb7yEbGnO6SP+mLEpN9+7gifWnnh3aeog3zt
mlQMjwR4SZZJyXAuHCNq89aZ9jAumJG+fdDPoamOoYByae/zXuTZzUHQTKgXuUxCr7m2Mb7ydh5z
w+UqKRTYlIdY/c4wn2714+tuFaP03KyiWjRGCLvTvAgf/PKHHjwrdVlXiFtfmE8pYhJjhovKfMle
n3Jwiuw7oQlhjI8fVG850QShhjGnWUr9nL/X3gtn2rKK3vwo1T9+mTRkSSbmCWK4UBLYzpXqTWPL
r+iU/rr6PFro/FNcOjqjk3KwEtiolKvGUYFsiJ9prHkrUTMl9vskZyKilByeQWiUMl7dCeL0KGGB
bxU6HlO3L6GRzOyQkD9bhP2s42VXTHs8pJTBk2xRiP9f17lDDzWHqQuI4oT1huCCHzQ88T8kKiDS
9R3oS9IthmTd8+z3w4kPrE8Z5kksus8Hpt2mo4ShbcbLO7ydxFpIVqw3a5llzyzAO0fuMCDtBVrq
kZLqLbSvDqOAp4vtWx9Xd4CFrKAWA8VohJLRx/tuyNeEei03x9B2GjsMg8HyQeFeBwOdBE2TgPqa
tyrJ6SAdoMW6Ahza9Mms1iaJafQEISRh71FElvv1iKN/2Dad5+C4AGm7EDs+5jcbqalLmK0hjgi0
yFW1P0CkHzZ+gNdfpmnwiuXRHqaxwuD+zeXnpOZHZj/nH5O3D8BMp9SWNHukOJOWNxfkSDtaWWNK
rY0vmPrAlEWfT89dfP8nUB8MHg+4U5d2jcOlV8cbyUtYyjh7mz16uFRPYWRihIJKWOVLNVwBjMgo
whfC40RHL6ToDU1PToe1vX1whEpVpig5LwY47uJrwtJgAm37ZCKIR0WdOU2ZJCgkWamTVz4eXnC6
+DVGz30CGOl893zZ9pAjUZKnoOkqH7MGqmrmOWRs5mVm+10Vn/YErldgcIr5kK7tPJsIZPFZL84j
o0cjPhgeykWV63O2Kisbh0FTTZdpojHJBfHjDkEDG2M/epEH/cQWZwo2E5PBIDZz/GyO6FegpuIw
De9s0s5e2Hq+CvHrKlCzBRjvaGCNdZQduvDiJqZix2E2QwiCteQa2Af/aWbltSp07EEuQyFQXm54
Gj6aETphnrZyJkioyi1HmdFHylX5AN6yfO95qtOJT1SUa/p16+4WAZcNeEk3k9d3ZsE5wcy4MmKE
4GgDkib5uK/Z3gEg/JP22rMTlVM66p8UDtVr+VUuigRkXWJjYlbymCTcromD1cHvEi0zXpVBaarO
9SnKn54rwEPDW6i/e6likc1XH4Qh/SzMzpqpRhVrfFsuKRZY+4aR/s6nyx+6XvSA07Jh+IsbrABx
YTi4FqsZCjp9nBtZNEs7zsbfMGEsTvSevtyna1QSn6LQHS4KmeBxM0vWqJzZNT88/umasCWFWq0r
MRh9/5k35VlIkxXIOpcbQrQWH09dEclqWOnL4NSpDaq02OTolbGrG8jJhm0TwN3Mi+srtUvSIZMK
4lCHzwteHsfOQ+sSFLBqNcO5PFtfDpG3rXy7O8Ih5RtQQ2w7j6Lu1moQHNKCp6LHaMQkllZuOYhw
Lj9tH4M4kqJrct7zJQBJvvXZDZQy1Bp8ij+ExqmEB6eivE1GRrOpDsgkWzZFOc9Ih0/SADEh3s1h
qyUowVp4afxWuqtZeUelKOzEj35hHmsOjHbxACiKwdkwGql/g72zXMQnKK3mSQ+Usadsq0CdaOOS
bcEpTE0uXktYNdwJkqVVtiG/0hL461+TQoNoV/hqLXAHeYw226VES2tLYffZFoLkZbtgBBq4AvfX
XY8UJlmswqW0Y8i5uTyOM5ZIVt0Xixs9cb6WLzSsEBChcoSGaPYQffk4ZscJgMh52dPVMczF/Ri7
lpX/KV47J5Ox6ic7WruNu+d0A+M9dl2nP9epaMp2FNHFMSc/ylqfjVcRk3uByrmaAizbqUDvrGwb
uckgg2eMSZKslD+D9MeRRcPDRd0I0vzI3Fs5+9rGr9shNAqWsICBXdGfT4AuklPZIfGjMln5jJbI
5zwduKiz72K82tWDJJzhPNnfFmGAioI5EdkXdo60ojWe7QUJhLWwt6kSLfICbKHIvxToTNUKssa/
uf+iS8EhpSaQZznZQGvJhWWqBchyFg5QKcauSfzI+FrzYpkhiXS2nNa7cIPMNF8AmP6/9KOZwDV0
6GfPMSDSYQOmVFYqNb3IMSgh2UT9en0BK6XjvLUCKLW9LrK3n2wHM2sPFM5y0atY5VO/76W1Q8BV
PQXB0tdiRJ3OwKOu4iGtV4a/TM3mFrA6SNULBsYyDeOivRjxnzU8QgvLB43iRfqdy+Wmfze0b7cK
w2fG0CQlCrLcpMJkCuoB8h4n/Tv4XM3GBJh5IzUgVaRRHwuimKv91xiIdmH9bVsjlhyVrkyfnA3w
PaveK3chFcLUaT+f38rTROF1H7Yz4aJWq3eRxgymrp9m36FFYMLhSin5ejXPdml8+7nhR3vLmbrT
Ch9EBHFZcnx7Wn3jrHObRdx3osON3NrTPbzweSHXUiO4RiYZPmcDgB24wYnvMtpHDdXgat1TukVV
Hu3QhHefIAQ2S+Dp7rcuUr8hDD6Tj7Yka82aEmjgafmM39xwIFcyjKWWvkt4InVwDPi4H6q0xCZc
tLYoJJJwsv0qZaT/il22uhy3dzXSZz+dm3P7T/GGOK+iFQ68H3gGdK9q9v5R2nIOOTRu6N9sbwKJ
DQPoJGNRDBiD9YXdsyDYYwzr2AE0CzQ1D3Pd27OuvnCbdStPe2q/dGT5441Qq1OTQTxXAND2OpzN
4vKm0/Hgp1+hHlt5SQ7rCR84QGknGGFBfGyhX8oz/FGwp91AcC/uHfiZ2GC9+GcSoT51oqHBxw4H
UvAv88YnTD/Kwt3fdtuDOLMWZedgr/t+iUcv10EeqVZ5Txd4JFfkshn+I1iH1+azRmBP2fiTTAHI
gV3y8pVR9szM20hlV5A7Z4FsBPPSHvxOoqkq/qAfFzu3eoU1+SFSKjCOH3BNV+z7ncQzZnZ0lQZk
8+m21u2Xn6cDg2nv0A3RSIGfveu57gFCrfVoKFz5CA1MbTtLNKbSl/r5ijNK/44fuYb3ylM1zDGH
ngWcDS3EiA1gnWxvisM9riVb8KFesbdAV9UX7NJ9fy3CVben0mqNcnao90iRheNmcB/zNRMHN+yR
RU7alMr20q/7nruwK5NNc12QEkZ2KtfjtxRBFXKgJMc5KvGMvAnb/yqIofufCPFzX0DF5rlOhW3N
30rXwqqvx++wDs08N+TaffJZP4zyvjZrq68MNE3+Ged+CimB7HHBj9vAtsIyetJKsFO3bPf8CQ/a
lUq7IMmIGjOBh5kPVtcTZRP4w7RvSnrgZ1XDtD3iyuztU+/7TfRDbbZ97A7WjuQ2A0ZzRGrH/pKD
xCBl8AJq21DsdfBibOzzyoyk5mpcyqCv50E01gSRMMEfBzATp0dcIcJByMWcCLdRGkYxarJ5JDmG
O51Yl5ZjeI6MPDVv+6XRwtU1NNdKjPQ8kRxQbrm2RrSPPLNJLz2rfiXECtow5UTmmPrmaG/o748O
xasMrmCncB8FsXXMGcqlW/LanUCxwckaQyoONKkGSLKYY7pNKE8QNtJfOc7yofx/Jmc/qkPNDf6P
mfrtpqRBMoDfnuBdKnAH+kT+vc5wj9FUDs28o6JT3+9dZBa76mk1pUhpm9dP9ViB0A2fWcEO96Yy
ZBnmS6CTqrf7ZSfr4bFD56elvfTH9tcrB5Io/eOmXtB/VvEH4ejI4q/hcm+Cp2j35RheaQkPrT93
ct1LTtPquHFg9xTcyRTlRxyuD9d/o/AQ8UxFBAHDPqMa8yi5qBCKgbMr6ZuQWJsyhPI64RH9y9iE
cQDq3cutzo+engiMx1rHDVwUfelIdS57RcqWSwXlEXEejeZIQ4/L3O8V/EJRkB9KUgFgqJ0XylN/
BkNK9bQh83zAdsDOnhVOAY992/hW6CbhTWvkYYGdTzYlUENX1simJEUNmEplFq15SYpbJTu8Au+i
8rgIIUB08IfC8BKCPnQoxsvRkYPOnysYPHXyNU9bmd/dMHdwtN+169PeZY7X1+2YV9KqQLCEt14w
deYHUPte4w3NjeetC7C1CAaJAuiPopuxG8l4b0M4MNlnlN1KYp3qtjU57b9ZIYb3C0/3w5OfMxl0
jweOVC3eO/+EEi+KCPyhwdt7CSsASo8JAbp4A64+HXNtQVgAC5sQv6xp74YraT8w3YVkOvw4aukF
iYYnEAeX8D0g1wfxPqSzqRJkeWowV/GOmvXHxG4zIDKo/oDpyEJ1RhTK/uSxOZK5cQGhGcMyxI/q
GR6tIE2xlnK7NRCMzFfVcihul+lMjpkGrnIfJKpzyxqcyT9Ey2WQj7yW8KzAv4ZK1/Ubdd94D/v6
PU3oXOk/DGl0tzyd553BIR725vLDUn9qsN5FewacaZeDWRpMO30kqyH80dE3YEjjg7FzslznQCUI
/tCYsZ/QygyASa5Bj9FLZvftv7fB+74Od7ov48KZAxpU2Q/XMck4U6ncrLmHExOde7lVuFhS6Omn
VIzV9KS+Ms2Goq+4LzjpcqohEHXNRgHL8bRaQ55mNBmMgdkF3qw+sCinXRnoKr0de+kTXB4rZe0N
XemppK8KC2kEv0G7x+55PbGTeQyWCid7NaLJtURR3nRpxjv6j1Q8Sycm/qPyO8sy3bE6RunJKCxM
6WkCUvU6pywU6AQHHlS5jIq+tmA3AoVb41sAHKU1bpPtaV7G3UYFpPHRO/DQeygndGziXjAvymzk
OvkiQVins46RIGyjV64oR+rtr3h/upr1G+HHcR/Mqj4ofjkxwL7UkNAYqR8YL46CcREOFO8iL8U8
55o0UT1d0FC6unbJQZ56tJGeWVDfmjxio6meJSarJlJsiilP7Lic0WV2m4B4AI1SSBQ+FwzSQ32n
YLrwbgwUsEqlj7nMNyz6nxFCEpL7CBtxM7vQKrmQOTMayG1mbCGN8XobsANULjaePtvQNCl9JOvo
WiZ9oi7icWw6lXRM7SeaIJt+9XOw/IzX7oEnn1Cbmvf8DO25EYFFxzit8j715jyWAUXuj/KROjuC
+D5qitK78fhPKhvZiyQSTJ4DCoEcd+SwM0uNJ3ixBdkLMIBn3AKFsKuerjpLbtwaIVz+4xry2l43
OaXoQTBFWT6gLp6lnmFg9tQBIheoSIY1h8gLzz5WXrfwUscOR1NmTotBvdcksjzfNiy66A2YStmD
/PbsKjajonZ3q8JRXZktlej/ZinxxJDL46Y8WWj68pA29fVR8DU/4AhuiLEyyBx1G8oG8IsXSLaH
6B2sniv2X8WA1VOqneHWtHF+GjqVRY21t5a6DpQEoN2mXkS5JN45CBpfJXp+7qoW3vN3ktRhBL6W
e6S2jUMys5iL3E5ODhgpejS7BCKTGAv05NGLqhVV5kKqOpBvY83dRaWdbtbVN5OhOxuAmSbmiX6s
XHl+NeJxSkM1W4GnTmr6LePsqzLbRsMYsbPNDZwyUTif4C2Tz+pF7ipqQKxBfuR1VOb/5yPnHh7s
A6xcjnzlohuCp+v9FVZLYjmXXctc/1xk4CWcR3AulSr+PpywKoQHuXBKY/kXpwROUR1VG66NxTNB
GI3Aps1pvy0OsAAJuoaOs/IxHOMH9nVHW6e6yK7CnaFkoj5ZVrqzt3hmyDRHJeTYPNT12jzE6WJP
9/5X41rv/cEyBw9J9lwsnkzfMkOK3xCPatnO+VRLKlZciBnOGgf4ALKkOGW5w2DrbTjpm0T5Jtgp
qAjobUzHKYTxS8/HaK1EBn/g7TNYIBIpCPcIeYvMpWbnlrKEDAIX5RMxdbdihLnfyMO67meEGWN8
t2lmYbm+uukwJdyKWzbeIeUaq/B7KTo8vghmWfmY9la12oW8YVcScv91oFQql05X5XHIYxi5dt6S
Hj2nPhiIrVOrhLSWVNIhL5JcH0VvjQ7+uI7cB0K5+wpCpdEQbKEopli9xzJcQilZwGCqZ2BC1LMt
fZcnmD44fKSh/IiESUaP2rybbtAVLRXPkBEV9eZSzjnuXXUWMq5tB6Lte5qtAv18vI8VcxV8kFJs
FpibI1wZ9LHvW67f0lryVZLLzDMumTK1nrAMxJc5fGCs3H7BqhzT1G3OuaYf4lLzpC/nEY/TLxNz
qqgQOPivzD0x0lH/yoqc7HJDW8SpxGm1Hcz+sy0HO9mr/oAZogOqRkehdk4ue/kiEfUbQJKBvSqa
JgrytvtNbH61WrXpVVRDdTl0AN6/nsMc6OZ1RqfCdamJ+++UO5FfTewUHM2nmIHJoiA20DncmKYH
ytuZ9g1mVWqhM1aM3VtfGpVCu4b2cCnuwVljgG3abG215sVOAva1LBrOkFWHtvS2aOFEjDsa+QoG
oL6Rt6aKMqnIzfysQW7R9zU0NorYie8lve959AnVZK2zm/Fh1o2NNZloZ3A1UufKlLpaALJKuFBg
RH2OwBXLK3EoX0KNEI35r62Saqp9PlJp6Od7dos8loCU9oIB7rlHhePBsOQsyMr5EJ13VGHMn/y5
WQNx+eGu1VJd1Jtpc3TCOb6IZKXFcDEGA75mpU+HiNhxfHqC3SFJ8FcwQXE319IW0EKPC4Ryco51
aj32HTBN9yioV3t9ji5MTvhkmGZRnV92so98/9EQkPbaHOb1MdMa581ENKQRbtaaPbai2Chp3JuL
hkfA+WW=<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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
0jZ4rP1JJ2AqnGn1j0==<?php
/**
*
* @package mahara
* @subpackage core
* @author Catalyst IT Limited <mahara@catalyst.net.nz>
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU GPL version 3 or later
* @copyright For copyright information on Mahara, please see the README file distributed with this software.
*
*/
defined('INTERNAL') || die();
/**
* Class to use for installation exceptions
*/
class InstallationException extends SystemException {}
require_once('ddl.php');
/**
* This function checks core and plugins for which need to be upgraded/installed
*
* Note: This function is sometimes executed during upgrades from
* ancient databases. Avoid rash assumptions about what's installed
* or these upgrades may fail.
*
* @param string $name The name of the plugin to check. If no name is specified,
* all plugins are checked.
* @return mixed If a name is specified, an object will be returned with upgrade data
* about the requested component (which can be "core", "local", or a plugin).
* If the component desn't need to be updated, an empty array will be returned.
* If no name is specified, an array of such objects will be returned.
* It will also include an array key "settings", which will be an array
* that may contain metadata about the upgrade/install process.
*/
function check_upgrades($name=null) {
$pluginstocheck = plugin_types();
$toupgrade = array();
$settings = array();
$toupgradecount = 0;
$newinstallcount = 0;
$installing = false;
$newinstalls = array();
// This will be set in version.php below.
$config = new stdClass();
require('version.php');
// check core first...
if (empty($name) || $name == 'core') {
try {
$coreversion = get_config('version');
}
catch (Exception $e) {
$coreversion = 0;
}
$corerelease = get_config('release');
$core = new stdClass();
$core->to = $config->version;
$core->torelease = $config->release;
$core->toseries = $config->series;
$toupgrade['core'] = $core;
if (empty($coreversion)) {
if (is_mysql()) { // Show a more informative error message if using mysql with skip-innodb
// In MySQL 5.6.x, we run the command 'SHOW ENGINES' to check if InnoDB is enabled or not
global $db;
$result = $db->Execute("SHOW ENGINES");
$hasinnodb = false;
while (!$result->EOF) {
if ($result->fields['Engine'] == 'InnoDB' && ($result->fields['Support'] == 'YES' || $result->fields['Support'] == 'DEFAULT')) {
$hasinnodb = true;
break;
}
$result->MoveNext();
}
if (!$hasinnodb) {
throw new ConfigSanityException("Mahara requires InnoDB tables. Please ensure InnoDB tables are enabled in your MySQL server.");
}
}
$core->install = true;
$installing = true;
}
else if ($config->version > $coreversion) {
if (isset($config->minupgradefrom) && isset($config->minupgraderelease)
&& $coreversion < $config->minupgradefrom) {
throw new ConfigSanityException("Must upgrade to $config->minupgradefrom "
. "($config->minupgraderelease) first "
. " (you have $coreversion ($corerelease)");
}
$toupgradecount ++;
$core->upgrade = true;
$core->from = $coreversion;
$core->fromrelease = $corerelease;
}
else if ($config->version < $coreversion) {
// Core can't be upgraded. Remove it from the list!
unset($toupgrade['core']);
if (get_config('productionmode')) {
throw new ConfigSanityException("Database version of Mahara $corerelease ($coreversion) is newer "
. "than files version $config->release ($config->version). "
. "Please make sure you have the correct Mahara files in place.");
}
else {
if (!defined('SITEOUTOFSYNC')) {
define('SITEOUTOFSYNC', 'core');
}
}
}
else {
// Core doesn't need to be upgraded. Remove it from the list!
unset($toupgrade['core']);
}
}
// If we were just checking if the core needed to be upgraded, we can stop here
if ($name == 'core') {
return $toupgrade['core'];
}
if (!$installing && (empty($name) || $name == 'local')) {
$localversion = get_config('localversion');
$localrelease = get_config('localrelease');
if (is_null($localversion)) {
$localversion = 0;
$localrelease = 0;
}
$config = new stdClass();
require(get_config('docroot') . 'local/version.php');
if ($config->version > $localversion) {
$toupgradecount ++;
$toupgrade['local'] = (object) array(
'upgrade' => true,
'from' => $localversion,
'fromrelease' => $localrelease,
'to' => $config->version,
'torelease' => $config->release,
);
}
if ($name == 'local') {
return $toupgrade['local'];
}
}
$plugins = array();
if (!empty($name)) {
try {
$bits = explode('.', $name);
$pt = $bits[0];
$pn = $bits[1];
$pp = null;
if ($pt == 'blocktype' && strpos($pn, '/') !== false) {
$bits = explode('/', $pn);
$pp = get_config('docroot') . 'artefact/' . $bits[0] . '/blocktype/' . $bits[1];
}
validate_plugin($pt, $pn, $pp);
$plugins[] = explode('.', $name);
}
catch (InstallationException $_e) {
log_warn(get_string('pluginnotinstallable', 'mahara', $pt, $pn) . $_e->GetMessage());
}
}
else {
foreach ($pluginstocheck as $plugin) {
$dirhandle = opendir(get_config('docroot') . $plugin);
while (false !== ($dir = readdir($dirhandle))) {
if (strpos($dir, '.') === 0 or 'CVS' == $dir) {
continue;
}
$plugin_dir = get_config('docroot') . $plugin . '/' . $dir;
if (!is_dir($plugin_dir)) {
continue;
}
try {
validate_plugin($plugin, $dir);
$plugins[] = array($plugin, $dir);
}
catch (InstallationException $_e) {
log_warn(get_string('pluginnotinstallable', 'mahara', $plugin, $dir) . $_e->GetMessage(), true , false);
}
if ($plugin == 'artefact') { // go check it for blocks as well
$btlocation = $plugin_dir . '/blocktype';
if (!is_dir($btlocation)) {
continue;
}
$btdirhandle = opendir($btlocation);
while (false !== ($btdir = readdir($btdirhandle))) {
if (strpos($btdir, '.') === 0 or 'CVS' == $btdir) {
continue;
}
if (!is_dir(get_config('docroot') . $plugin . '/' . $dir . '/blocktype/' . $btdir)) {
continue;
}
$plugins[] = array('blocktype', $dir . '/' . $btdir);
}
}
}
}
}
$outofsyncplugins = array();
foreach ($plugins as $plugin) {
$plugintype = $plugin[0];
$pluginname = $plugin[1];
$pluginpath = "$plugin[0]/$plugin[1]";
$pluginkey = "$plugin[0].$plugin[1]";
if ($plugintype == 'blocktype' && strpos($pluginname, '/') !== false) {
// sigh.. we're a bit special...
$bits = explode('/', $pluginname);
$pluginpath = 'artefact/' . $bits[0] . '/blocktype/' . $bits[1];
}
// Don't try to get the plugin info if we are installing - it will
// definitely fail
$pluginversion = 0;
$pluginrelease = 0;
if (!$installing && table_exists(new XMLDBTable($plugintype . '_installed'))) {
if ($plugintype == 'blocktype' && strpos($pluginname, '/')) {
$bits = explode('/', $pluginname);
$installed = get_record('blocktype_installed', 'name', $bits[1], 'artefactplugin', $bits[0]);
}
else {
$installed = get_record($plugintype . '_installed', 'name', $pluginname);
}
if ($installed) {
$pluginversion = $installed->version;
$pluginrelease = $installed->release;
}
}
$config = new stdClass();
require(get_config('docroot') . $pluginpath . '/version.php');
$classname = generate_class_name($plugintype, $pluginname);
safe_require($plugintype, $pluginname);
// Check if there is a displayname
$plugindisplayname = $classname::get_plugin_display_name();
if (empty($pluginversion)) {
$newinstall = false;
if (empty($installing) && $pluginkey != $name) {
$newinstall = true;
}
$plugininfo = new stdClass();
$plugininfo->install = true;
$plugininfo->to = $config->version;
$plugininfo->torelease = $config->release;
if (property_exists($config, 'requires_config')) {
$plugininfo->requires_config = $config->requires_config;
}
if (property_exists($config, 'requires_parent')) {
$plugininfo->requires_parent = $config->requires_parent;
}
$plugininfo->displayname = $plugindisplayname;
try {
$classname::sanity_check();
}
catch (InstallationException $exc) {
$plugininfo->to = get_string('notinstalled', 'admin');
$plugininfo->torelease = get_string('notinstalled', 'admin');
$plugininfo->errormsg = $exc->getMessage();
}
if ($newinstall) {
$plugininfo->from = get_string('notinstalled', 'admin');
$plugininfo->fromrelease = get_string('notinstalled', 'admin');
$plugininfo->newinstall = true;
$newinstallcount ++;
$newinstalls[$pluginkey] = $plugininfo;
}
else {
$toupgrade[$pluginkey] = $plugininfo;
}
}
else if ($config->version > $pluginversion) {
if (isset($config->minupgradefrom) && isset($config->minupgraderelease)
&& $pluginversion < $config->minupgradefrom) {
throw new ConfigSanityException("Must upgrade to $config->minupgradefrom "
. " ($config->minupgraderelease) first "
. " (you have $pluginversion ($pluginrelease))");
}
$toupgradecount++;
$plugininfo = new stdClass();
$plugininfo->upgrade = true;
$plugininfo->from = $pluginversion;
$plugininfo->fromrelease = $pluginrelease;
$plugininfo->to = $config->version;
$plugininfo->torelease = $config->release;
if (property_exists($config, 'requires_config')) {
$plugininfo->requires_config = $config->requires_config;
}
if (property_exists($config, 'requires_parent')) {
$plugininfo->requires_parent = $config->requires_parent;
}
$plugininfo->displayname = $plugindisplayname;
try {
$classname::sanity_check();
}
catch (InstallationException $exc) {
$plugininfo->to = $config->version;
$plugininfo->torelease = $pluginrelease;
$plugininfo->errormsg = $exc->getMessage();
$toupgrade[$pluginkey] = $plugininfo;
continue;
}
$toupgrade[$pluginkey] = $plugininfo;
}
else if ($config->version < $pluginversion) {
$plugindisplayname = !empty($plugindisplayname) ? $plugindisplayname : (!empty($config->name) ? $config->name : $pluginpath);
if (get_config('productionmode')) {
throw new ConfigSanityException("Database version of Mahara plugin " . $plugindisplayname . " "
. $pluginrelease . " (" . $pluginversion . ") is newer "
. "than files version " . $config->release . " (" . $config->version . "). "
. "Please make sure you have the correct Mahara plugin files in place.");
}
else {
$outofsyncplugins[] = $plugindisplayname;
}
}
}
if (!empty($outofsyncplugins)) {
if (!defined('SITEOUTOFSYNC')) {
define('SITEOUTOFSYNC', implode(', ', $outofsyncplugins));
}
}
// if we've just asked for one, don't return an array...
if (!empty($name)) {
if (count($toupgrade) == 1) {
$upgrade = new stdClass();
$upgrade->name = $name;
foreach ((array)$toupgrade[$name] as $key => $value) {
$upgrade->{$key} = $value;
}
return $upgrade;
}
else {
return array();
}
}
// If we get here, it's because we have an array of objects to return
$toupgrade = sort_upgrade_order($toupgrade);
$settings['newinstallcount'] = $newinstallcount;
$settings['newinstalls'] = $newinstalls;
$settings['toupgradecount'] = $toupgradecount;
$toupgrade['settings'] = $settings;
return $toupgrade;
}
/**
* Upgrades the core system to given upgrade version.
*
* @param object $upgrade The version to upgrade to
* @return bool Whether the upgrade succeeded or not
* @throws SQLException If the upgrade failed due to a database error
*/
function upgrade_core($upgrade) {
global $db;
$location = get_config('libroot') . 'db/';
db_begin();
if (!empty($upgrade->install)) {
install_from_xmldb_file($location . 'install.xml');
}
else {
require_once($location . 'upgrade.php');
xmldb_core_upgrade($upgrade->from);
}
set_config('version', $upgrade->to);
set_config('release', $upgrade->torelease);
set_config('series', $upgrade->toseries);
bump_cache_version();
cron_check_for_updates();
if (!empty($upgrade->install)) {
core_postinst();
}
db_commit();
return true;
}
/**
* Upgrades local customisations.
*
* @param object $upgrade The version to upgrade to
* @return bool Whether the upgrade succeeded or not
* @throws SQLException If the upgrade failed due to a database error
*/
function upgrade_local($upgrade) {
db_begin();
require_once(get_config('docroot') . 'local/upgrade.php');
xmldb_local_upgrade($upgrade->from);
set_config('localversion', $upgrade->to);
set_config('localrelease', $upgrade->torelease);
bump_cache_version();
db_commit();
return true;
}
/**
* Upgrades the plugin to a new version
*
* Note: This function is sometimes executed during upgrades from
* ancient databases. Avoid rash assumptions about what's installed
* or these upgrades may fail.
*
* @param object $upgrade Information about the plugin to upgrade
* @return bool Whether the upgrade succeeded or not
* @throws SQLException If the upgrade failed due to a database error
*/
function upgrade_plugin($upgrade) {
global $db;
$plugintype = '';
$pluginname = '';
list($plugintype, $pluginname) = explode('.', $upgrade->name);
if ($plugintype == 'blocktype' && strpos($pluginname, '/') !== false) {
list($artefactplugin, $blocktypename) = explode('/', $pluginname);
$location = get_config('docroot') . 'artefact/' . $artefactplugin . '/blocktype/' . $blocktypename . '/db/';
$function = 'xmldb_' . $plugintype . '_' . $blocktypename . '_upgrade';
}
else {
$location = get_config('docroot') . $plugintype . '/' . $pluginname . '/db/';
$function = 'xmldb_' . $plugintype . '_' . $pluginname . '_upgrade';
}
db_begin();
if (!empty($upgrade->install)) {
if (is_readable($location . 'install.xml')) {
install_from_xmldb_file($location . 'install.xml');
}
}
else {
if (is_readable($location . 'upgrade.php')) {
require_once($location . 'upgrade.php');
if (!$function($upgrade->from)) {
throw new InstallationException("Failed to run " . $function . " (check logs for errors)");
}
}
}
$installed = new stdClass();
$installed->name = $pluginname;
$installed->version = $upgrade->to;
$installed->release = $upgrade->torelease;
if ($plugintype == 'blocktype') {
if (!empty($blocktypename)) {
$installed->name = $blocktypename;
}
if (!empty($artefactplugin)) { // blocks come from artefactplugins.
$installed->artefactplugin = $artefactplugin;
}
}
if (property_exists($upgrade, 'requires_config')) {
$installed->requires_config = $upgrade->requires_config;
}
if (property_exists($upgrade, 'requires_parent')) {
$installed->requires_parent = $upgrade->requires_parent;
}
$installtable = $plugintype . '_installed';
if (!empty($upgrade->install)) {
insert_record($installtable,$installed);
}
else {
update_record($installtable, $installed, 'name');
}
bump_cache_version();
// postinst stuff...
safe_require($plugintype, $pluginname);
$pcname = generate_class_name($plugintype, $installed->name);
if ($crons = $pcname::get_cron()) {
foreach ($crons as $cron) {
$cron = (object)$cron;
if (empty($cron->callfunction)) {
throw new InstallationException("cron for $pcname didn't supply function name");
}
if (!is_callable(array($pcname, $cron->callfunction))) {
throw new InstallationException("cron $cron->callfunction for $pcname supplied but wasn't callable");
}
$new = false;
$table = $plugintype . '_cron';
if (!empty($upgrade->install)) {
$new = true;
}
else if (!record_exists($table, 'plugin', $pluginname, 'callfunction', $cron->callfunction)) {
$new = true;
}
$cron->plugin = $pluginname;
if (!empty($new)) {
insert_record($table, $cron);
}
else {
update_record($table, $cron, array('plugin', 'callfunction'));
}
}
}
if ($events = $pcname::get_event_subscriptions()) {
foreach ($events as $event) {
$event = (object)$event;
if (!record_exists('event_type', 'name', $event->event)) {
throw new InstallationException("event $event->event for $pcname doesn't exist!");
}
if (empty($event->callfunction)) {
throw new InstallationException("event $event->event for $pcname didn't supply function name");
}
if (!is_callable(array($pcname, $event->callfunction))) {
throw new InstallationException("event $event->event with function $event->callfunction for $pcname supplied but wasn't callable");
}
$exists = false;
$table = $plugintype . '_event_subscription';
$block = blocktype_namespaced_to_single($pluginname);
if (empty($upgrade->install)) {
$exists = get_record($table, 'plugin' , $block, 'event', $event->event);
}
$event->plugin = $block;
if (empty($exists)) {
insert_record($table, $event);
}
else {
update_record($table, $event, array('id' => $exists->id));
}
}
}
if ($activities = $pcname::get_activity_types()) {
foreach ($activities as $activity) {
$classname = 'ActivityType' . ucfirst($plugintype) . ucfirst($pluginname) . ucfirst($activity->name);
if (!class_exists($classname)) {
throw new InstallationException(get_string('classmissing', 'error', $classname, $pluginname, $plugintype));
}
// Add activity_type if it doesn't exist
if (!get_record('activity_type', 'name', $activity->name, 'plugintype', $plugintype, 'pluginname', $pluginname)) {
$activity->plugintype = $plugintype;
$activity->pluginname = $pluginname;
$activity->defaultmethod = get_config('defaultnotificationmethod') ? get_config('defaultnotificationmethod') : $activity->defaultmethod;
$where = (object) array(
'name' => $activity->name,
'plugintype' => $plugintype,
'pluginname' => $pluginname,
);
ensure_record_exists('activity_type', $where, $activity);
}
}
}
// install artefact types
if ($plugintype == 'artefact') {
if (!is_callable(array($pcname, 'get_artefact_types'))) {
throw new InstallationException("Artefact plugin $pcname must implement get_artefact_types and doesn't");
}
$types = $pcname::get_artefact_types();
$ph = array();
if (is_array($types)) {
// Check for missing plugins - don't try to remove their data.
// Bugs 505732 and 1287344.
$used_types = get_records_sql_assoc("SELECT t.name, count(a.id) ct, t.plugin FROM {artefact_installed_type} t
LEFT JOIN {artefact} a ON t.name = a.artefacttype
GROUP BY t.name
HAVING count(a.id) > 0 AND plugin = '$pluginname'");
if ($used_types === FALSE) {
$used_types = array();
}
foreach ($types as $type) {
$ph[] = '?';
if (!record_exists('artefact_installed_type', 'plugin', $pluginname, 'name', $type)) {
$t = new stdClass();
$t->name = $type;
$t->plugin = $pluginname;
insert_record('artefact_installed_type',$t);
}
if (isset($used_types[$type])) {
unset($used_types[$type]);
}
}
foreach ($used_types as $type) {
$ph[] = '?';
}
$used_types = array_keys($used_types);
$select = '(plugin = ? AND name NOT IN (' . implode(',', $ph) . '))';
delete_records_select('artefact_installed_type', $select,
array_merge(array($pluginname),$types,$used_types));
if (!empty($used_types)) {
log_warn('Plugin for artefact type(s) "' . implode('", "', $used_types) . '" has gone away', true, false);
}
}
}
// install blocktype categories.
if ($plugintype == 'blocktype' && get_config('installed')) {
install_blocktype_categories_for_plugin($pluginname);
install_blocktype_viewtypes_for_plugin($pluginname);
}
$prevversion = (empty($upgrade->install)) ? $upgrade->from : 0;
$pcname::postinst($prevversion);
db_commit();
return true;
}
function core_postinst() {
// Attempt to create session directories
$sessionpath = get_config('sessionpath');
$status = Session::create_directory_levels($sessionpath);
$now = db_format_timestamp(time());
// Set default search plugin
set_config('searchplugin', 'internal');
set_config('lang', get_accept_lang());
set_config('installation_key', get_random_key());
set_config('installation_time', $now);
set_config('stats_installation_time', $now);
set_config('passwordpolicy', '8_ulns');
// Pre-define SMTP settings
set_config('smtphosts', '');
set_config('smtpport', '');
set_config('smtpuser', '');
set_config('smtppass', '');
set_config('smtpsecure', '');
// XMLDB adds a table's keys immediately after creating the table. Some
// foreign keys therefore cannot be created during the XMLDB installation,
// because they refer to tables created later in the installation. These
// missing keys can be created now that all the core tables exist.
$table = new XMLDBTable('usr');
$key = new XMLDBKey('profileiconfk');
$key->setAttributes(XMLDB_KEY_FOREIGN, array('profileicon'), 'artefact', array('id'));
add_key($table, $key);
$table = new XMLDBTable('institution');
$key = new XMLDBKey('logofk');
$key->setAttributes(XMLDB_KEY_FOREIGN, array('logo'), 'artefact', array('id'));
add_key($table, $key);
// PostgreSQL supports indexes over functions of columns, MySQL does not.
// We make use if this if we can
if (is_postgres()) {
// Improve the username index
execute_sql('DROP INDEX {usr_use_uix}');
execute_sql('CREATE UNIQUE INDEX {usr_use_uix} ON {usr}(LOWER(username))');
// Add user search indexes
// Postgres only. We could create non-lowercased indexes in MySQL, but
// they would not be useful, and would require a change to varchar columns.
execute_sql('CREATE INDEX {usr_fir_ix} ON {usr}(LOWER(firstname))');
execute_sql('CREATE INDEX {usr_las_ix} ON {usr}(LOWER(lastname))');
execute_sql('CREATE INDEX {usr_pre_ix} ON {usr}(LOWER(preferredname))');
execute_sql('CREATE INDEX {usr_ema_ix} ON {usr}(LOWER(email))');
execute_sql('CREATE INDEX {usr_stu_ix} ON {usr}(LOWER(studentid))');
// Only one profile view per user
execute_sql("CREATE UNIQUE INDEX {view_own_type_uix} ON {view}(owner) WHERE type = 'profile'");
}
// Some more advanced constraints. XMLDB can't handle this in its xml file format
execute_sql('ALTER TABLE {artefact} ADD CHECK (
(owner IS NOT NULL AND "group" IS NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NOT NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NULL AND institution IS NOT NULL)
)');
execute_sql('ALTER TABLE {view} ADD CHECK (
(owner IS NOT NULL AND "group" IS NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NOT NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NULL AND institution IS NOT NULL)
)');
execute_sql('ALTER TABLE {artefact} ADD CHECK (
(author IS NOT NULL AND authorname IS NULL ) OR
(author IS NULL AND authorname IS NOT NULL)
)');
execute_sql('ALTER TABLE {view_access} ADD CHECK (
(accesstype IS NOT NULL AND "group" IS NULL AND usr IS NULL AND token IS NULL AND institution IS NULL) OR
(accesstype IS NULL AND "group" IS NOT NULL AND usr IS NULL AND token IS NULL AND institution IS NULL) OR
(accesstype IS NULL AND "group" IS NULL AND usr IS NOT NULL AND token IS NULL AND institution IS NULL) OR
(accesstype IS NULL AND "group" IS NULL AND usr IS NULL AND token IS NOT NULL AND institution IS NULL) OR
(accesstype IS NULL AND "group" IS NULL AND usr IS NULL AND token IS NULL AND institution IS NOT NULL)
)');
execute_sql('ALTER TABLE {collection} ADD CHECK (
(owner IS NOT NULL AND "group" IS NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NOT NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NULL AND institution IS NOT NULL)
)');
set_antispam_defaults();
reload_html_filters();
// Default set of sites from which iframe content can be embedded
// See also the postinst() function in plugins for other valid iframes
// by searching for 'iframe_source_icon'
$iframesources = array(
'www.youtube.com/embed/' => 'YouTube',
'player.vimeo.com/video/' => 'Vimeo',
'www.slideshare.net/slideshow/embed_code/' => 'SlideShare',
'www.glogster.com/glog/' => 'Glogster',
'www.glogster.com/glog.php' => 'Glogster',
'edu.glogster.com/glog/' => 'Glogster',
'edu.glogster.com/glog.php' => 'Glogster',
'wikieducator.org/index.php' => 'WikiEducator',
'voki.com/php/' => 'Voki',
);
$iframedomains = array(
'YouTube' => 'www.youtube.com',
'Vimeo' => 'vimeo.com',
'SlideShare' => 'www.slideshare.net',
'Glogster' => 'www.glogster.com',
'WikiEducator' => 'wikieducator.org',
'Voki' => 'voki.com',
);
update_safe_iframes($iframesources, $iframedomains);
require_once(get_config('docroot') . 'lib/file.php');
update_magicdb_path();
return $status;
}
function core_install_lastcoredata_defaults() {
global $USER;
db_begin();
$institution = new stdClass();
$institution->name = 'mahara';
$institution->displayname = 'No Institution';
$institution->authplugin = 'internal';
$institution->theme = 'default';
$institution->priority = 0;
insert_record('institution', $institution);
$auth_instance = new stdClass();
$auth_instance->instancename = 'Internal';
$auth_instance->priority='1';
$auth_instance->institution = 'mahara';
$auth_instance->authname = 'internal';
$auth_instance->active = 1;
$auth_instance->id = insert_record('auth_instance', $auth_instance, 'id', true);
// Insert the root user
$userid = 0;
$user = new stdClass();
$user->id = $userid;
$user->username = 'root';
$user->password = '*';
$user->salt = '*';
$user->firstname = 'System';
$user->lastname = 'User';
$user->email = 'root@example.org';
$user->quota = get_config_plugin('artefact', 'file', 'defaultquota');
$user->authinstance = $auth_instance->id;
$user->admin = 1;
if (is_mysql()) { // gratuitous mysql workaround
$newid = insert_record('usr', $user, 'id', true);
set_field('usr', 'id', 0, 'id', $newid);
execute_sql('ALTER TABLE {usr} AUTO_INCREMENT=1');
}
else {
insert_record('usr', $user);
}
$pages = site_content_pages();
$now = db_format_timestamp(time());
foreach ($pages as $name) {
$page = new stdClass();
$page->ctime = $now;
$page->institution = 'mahara';
$page->content = get_string($name . 'defaultcontent', 'install', get_string('staticpageconfigdefaults', 'install', get_config('wwwroot') . 'admin/site/pages.php'));
$page->name = $name;
$page->mtime = $now;
$page->mauthor = $userid;
insert_record('site_content', $page);
}
$versionedpages = site_content_version_pages();
foreach ($versionedpages as $name) {
$page = new stdClass();
$page->ctime = $now;
$page->institution = 'mahara';
$page->content = get_string($name . 'defaultcontent', 'install', get_string('versionedpageconfigdefault', 'install', get_config('wwwroot') . 'admin/site/privacy.php?fs=' . $name));
$page->type = $name;
$page->author = $userid;
$page->version = '1.0';
insert_record('site_content_version', $page);
}
require_once('group.php');
install_system_profile_view();
install_system_dashboard_view();
install_system_grouphomepage_view();
require_once('view.php');
install_system_portfolio_view();
install_system_progress_view();
require_once('license.php');
install_licenses_default();
require_once('skin.php');
install_skins_default();
install_auth_default();
// Remove admin privs from root user as it doesn't need it now
$user->admin = 0;
update_record('usr', $user, array('id' => 0));
// Insert the admin user
$user = new stdClass();
$user->username = 'admin';
$user->salt = auth_get_random_salt();
$user->password = crypt('mahara', '$2a$' . get_config('bcrypt_cost') . '$' . substr(md5(get_config('passwordsaltmain') . $user->salt), 0, 22));
$user->password = substr($user->password, 0, 7) . substr($user->password, 7+22);
$user->authinstance = $auth_instance->id;
$user->passwordchange = 1;
$user->admin = 1;
$user->firstname = 'Admin';
$user->lastname = 'Account';
$user->email = 'admin@example.org';
$user->quota = get_config_plugin('artefact', 'file', 'defaultquota');
$user->ctime = db_format_timestamp(time());
$user->id = insert_record('usr', $user, 'id', true);
set_profile_field($user->id, 'email', $user->email);
set_profile_field($user->id, 'firstname', $user->firstname);
set_profile_field($user->id, 'lastname', $user->lastname);
// Accept the user privacy agreement on install
$sitecontentid = get_field('site_content_version', 'id', 'type', 'privacy', 'institution', 'mahara');
save_user_reply_to_agreement($user->id, $sitecontentid, 1);
// Accept the user T&C on install
$sitecontentid = get_field('site_content_version', 'id', 'type', 'termsandconditions', 'institution', 'mahara');
save_user_reply_to_agreement($user->id, $sitecontentid, 1);
handle_event('createuser', $user, array('password'));
activity_add_admin_defaults(array($user->id));
db_commit();
// if we're installing, set up the block categories here and then poll the plugins.
// if we're upgrading this happens somewhere else. This is because of dependency issues around
// the order of installation stuff.
install_blocktype_extras();
// Setting user access roles for content block access
$table = new XMLDBTable('usr_access_roles');
$roles = array('peer' => 0, 'manager' => 1, 'peermanager' => 1, 'verifier' => 1);
foreach ($roles as $role => $state) {
$obj = new stdClass();
$obj->role = $role;
$obj->see_block_content = $state;
insert_record('usr_access_roles', $obj);
}
}
function core_install_firstcoredata_defaults() {
// Install the default institution
db_begin();
set_config('session_timeout', 86400);
set_config('sitename', 'Mahara');
set_config('defaultregistrationexpirylifetime', 1209600);
set_config('defaultaccountinactivewarn', 604800);
set_config('creategroups', 'all');
set_config('createpublicgroups', 'all');
set_config('allowpublicviews', 1);
set_config('allowpublicprofiles', 1);
set_config('allowanonymouspages', 0);
set_config('generatesitemap', 1);
set_config('showselfsearchsideblock', 0);
set_config('showtagssideblock', 1);
set_config('tagssideblockmaxtags', 20);
set_config('usersallowedmultipleinstitutions', 1);
set_config('userscanchooseviewthemes', 0);
set_config('anonymouscomments', 1);
set_config('homepageinfo', 1);
set_config('showonlineuserssideblock', 1);
set_config('footerlinks', serialize(array('legal', 'about', 'contactus', 'manualhelp')));
set_config('nousernames', 0);
set_config('showstudentid', 0);
set_config('onlineuserssideblockmaxusers', 10);
set_config('loggedinprofileviewaccess', 1);
set_config('dropdownmenu', 0);
// Set this to a random starting number to make minor version slightly harder to detect
set_config('cacheversion', rand(1000, 9999));
set_config('allowcommentsbydefault', 1);
// install the applications
$app = new stdClass();
$app->name = 'mahara';
$app->displayname = 'Mahara';
$app->xmlrpcserverurl = '/api/xmlrpc/server.php';
$app->ssolandurl = '/auth/xmlrpc/land.php';
insert_record('application', $app);
$app->name = 'moodle';
$app->displayname = 'Moodle';
$app->xmlrpcserverurl = '/mnet/xmlrpc/server.php';
$app->ssolandurl = '/auth/mnet/land.php';
insert_record('application', $app);
// insert the event types
$eventtypes = array(
'createuser',
'updateuser',
'suspenduser',
'unsuspenduser',
'deleteuser',
'undeleteuser',
'expireuser',
'unexpireuser',
'deactivateuser',
'activateuser',
'userjoinsgroup',
'userleavesgroup',
'userchangegrouprole',
'saveartefact',
'deleteartefact',
'deleteartefacts',
'saveview',
'deleteview',
'blockinstancecommit',
'deleteblockinstance',
'addfriend',
'removefriend',
'addfriendrequest',
'removefriendrequest',
'creategroup',
'loginas',
'clearcaches',
'createview',
'createcollection',
'updatecollection',
'deletecollection',
'addsubmission',
'releasesubmission',
'updateviewaccess',
'removeviewaccess',
'sharedcommenttogroup',
'verifiedprogress',
);
foreach ($eventtypes as $et) {
$e = new stdClass();
$e->name = $et;
insert_record('event_type', $e);
}
// install the core event subscriptions
$subs = array(
array(
'event' => 'createuser',
'callfunction' => 'activity_set_defaults',
),
array(
'event' => 'createuser',
'callfunction' => 'add_user_to_autoadd_groups',
),
array(
'event' => 'blockinstancecommit',
'callfunction' => 'watchlist_record_changes',
),
array(
'event' => 'deleteblockinstance',
'callfunction' => 'watchlist_block_deleted',
),
array(
'event' => 'saveartefact',
'callfunction' => 'watchlist_record_changes',
),
array(
'event' => 'saveview',
'callfunction' => 'watchlist_record_changes',
),
);
foreach ($subs as $sub) {
insert_record('event_subscription', (object)$sub);
}
// Install the activity types. Name, admin, delay, allownonemethod, defaultmethod.
$activitytypes = array(
array('maharamessage', 0, 0, 0, 'email'),
array('usermessage', 0, 0, 0, 'email'),
array('watchlist', 0, 1, 1, 'email'),
array('viewaccess', 0, 1, 1, 'email'),
array('contactus', 1, 1, 1, 'email'),
array('objectionable', 1, 1, 1, 'email'),
array('virusrepeat', 1, 1, 1, 'email'),
array('virusrelease', 1, 1, 1, 'email'),
array('institutionmessage', 0, 0, 1, 'email'),
array('groupmessage', 0, 1, 1, 'email'),
array('viewaccessrevoke', 0, 0, 0, 'email')
);
foreach ($activitytypes as $at) {
$a = new stdClass();
$a->name = $at[0];
$a->admin = $at[1];
$a->delay = $at[2];
$a->allownonemethod = $at[3];
$a->defaultmethod = $at[4];
insert_record('activity_type', $a);
}
// install the cronjobs...
$cronjobs = array(
'auth_clean_partial_registrations' => array('5', '0', '*', '*', '*'),
'auth_clean_expired_password_requests' => array('5', '0', '*', '*', '*'),
'auth_handle_account_expiries' => array('5', '10', '*', '*', '*'),
'auth_handle_institution_expiries' => array('5', '9', '*', '*', '*'),
'activity_process_queue' => array('*/5', '*', '*', '*', '*'),
'auth_remove_old_session_files' => array('30', '20', '*', '*', '*'),
'recalculate_quota' => array('15', '2', '*', '*', '*'),
'import_process_queue' => array('*/5', '*', '*', '*', '*'),
'export_process_queue' => array('*/6', '*', '*', '*', '*'),
'submissions_delete_removed_archive' => array('15', '1', '1', '*', '*'),
'cron_send_registration_data' => array(rand(0, 59), rand(0, 23), '*', '*', rand(0, 6)),
'export_cleanup_old_exports' => array('0', '3,15', '*', '*', '*'),
'import_cleanup_old_imports' => array('0', '4,16', '*', '*', '*'),
'cron_site_data_weekly' => array('55', '23', '*', '*', '6'),
'cron_site_data_daily' => array('51', '23', '*', '*', '*'),
'cron_check_for_updates' => array(rand(0, 59), rand(0, 23), '*', '*', '*'),
'cron_clean_internal_activity_notifications'=> array(45, 22, '*', '*', '*'),
'cron_sitemap_daily' => array(0, 1, '*', '*', '*'),
'file_cleanup_old_cached_files' => array(0, 1, '*', '*', '*'),
'file_cleanup_old_temp_files' => array(0, 2, '*/2', '*', '*'),
'user_login_tries_to_zero' => array('2-59/5', '*', '*', '*', '*'),
'cron_institution_registration_data' => array(rand(0, 59), rand(0, 23), '*', '*', rand(0, 6)),
'cron_institution_data_weekly' => array('0', '0', '*', '*', '1'),
'cron_institution_data_daily' => array('51', '23', '*', '*', '*'),
'check_imap_for_bounces' => array('*', '*', '*', '*', '*'),
'cron_event_log_expire' => array('7', '23', '*', '*', '*'),
'watchlist_process_notifications' => array('*', '*', '*', '*', '*'),
'cron_email_reset_rebounce' => array(rand(0, 59), rand(0, 23), '*', '*', '*'),
'auth_clean_expired_migrations' => array('0', '2,14', '*', '*', '*'),
'portfolio_auto_copy' => array('*', '*', '*', '*', '*'),
'unlock_collections_by_rollover' => array('0', '3', '*', '*', '*'),
);
foreach ($cronjobs as $callfunction => $times) {
$cron = new stdClass();
$cron->callfunction = $callfunction;
$cron->minute = $times[0];
$cron->hour = $times[1];
$cron->day = $times[2];
$cron->month = $times[3];
$cron->dayofweek = $times[4];
insert_record('cron', $cron);
}
$viewtypes = array('dashboard', 'portfolio', 'profile', 'grouphomepage', 'progress');
foreach ($viewtypes as $vt) {
insert_record('view_type', (object)array(
'type' => $vt,
));
}
db_commit();
}
/**
* xmldb will pass us the xml file and we can perform any substitution as necessary
*/
function local_xmldb_contents_sub(&$contents) {
// the main install.xml file needs to sub in plugintype tables.
$searchstring = '<!-- PLUGIN_TYPE_SUBSTITUTION -->';
if (strstr($contents, $searchstring) === 0) {
return;
}
// ok, we're in the main file and we need to install all the plugin tables
// get the basic skeleton structure
$plugintables = file_get_contents(get_config('docroot') . 'lib/db/plugintables.xml');
$tosub = '';
foreach (plugin_types() as $plugin) {
// any that want their own stuff can put it in docroot/plugintype/lib/db/plugintables.xml
//- like auth is a bit special
$specialcase = get_config('docroot') . $plugin . '/plugintables.xml';
if (is_readable($specialcase)) {
$tosub .= file_get_contents($specialcase) . "\n";
}
else {
$replaced = '';
// look for tables to put at the start...
$pretables = get_config('docroot') . $plugin . '/beforetables.xml';
if (is_readable($pretables)) {
$replaced = file_get_contents($pretables) . "\n";
}
// perform any additional once off substitutions
require_once(get_config('docroot') . $plugin . '/lib.php');
$classname = generate_class_name($plugin);
if (method_exists($classname, 'extra_xmldb_substitution')) {
$replaced .= $classname::extra_xmldb_substitution($plugintables);
}
else {
$replaced .= $plugintables;
}
$tosub .= str_replace('__PLUGINTYPE__', $plugin, $replaced) . "\n";
// look for any tables to put at the end..
$extratables = get_config('docroot') . $plugin . '/extratables.xml';
if (is_readable($extratables)) {
$tosub .= file_get_contents($extratables) . "\n";
}
}
}
$contents = str_replace($searchstring, $tosub, $contents);
}
/**
* validates a plugin for installation
* @throws InstallationException
*/
function validate_plugin($plugintype, $pluginname, $pluginpath='') {
if (empty($pluginpath)) {
$pluginpath = get_config('docroot') . $plugintype . '/' . $pluginname;
}
if (!file_exists($pluginpath . '/version.php')) {
throw new InstallationException(get_string('versionphpmissing1', 'error', $plugintype, $pluginname, $pluginname, $pluginpath));
}
safe_require($plugintype, $pluginname);
$classname = generate_class_name($plugintype, $pluginname);
if (!class_exists($classname)) {
throw new InstallationException(get_string('classmissing', 'error', $classname, $plugintype, $pluginname));
}
require_once(get_config('docroot') . $plugintype . '/lib.php');
$funname = $plugintype . '_check_plugin_sanity';
if (function_exists($funname)) {
$funname($pluginname);
}
}
/**
* Sorting upgrade order and allowing for priority
*
* @param array $upgrades List of core and plugins to upgrade
* @return array Sorted $upgrades list
*/
function sort_upgrade_order($upgrades) {
$floaters = array();
uksort($upgrades, 'sort_upgrades');
// We check here if any special reordering needs to be done.
// Some plugins need to run before others if they are both present.
// We set up a $floaters array if there are any matches.
if (isset($upgrades['auth.webservice']) && isset($upgrades['module.lti_advantage'])) {
$floaters['auth.webservice'] = 'module.lti_advantage';
}
if ($floaters) {
// A $floater, for example, can look like key ='auth.webservice', value='lti.advantage' and the value is the item
// we want to float up the $upgrades list but we do this by sinking
// the key down the list. So the key 'auth.webservice' needs to exist as a key in $upgrades higher in the list
// than the value 'lti.advantage' exists as a key in $upgrades list before reaching this part.
// After this part the 'lti.advantage' key should appear highter than 'auth.webservice' in the $upgrades list.
uksort($upgrades, function($k1, $k2) use (&$floaters) {
if (isset($floaters[$k1]) && $k2 == $floaters[$k1]) {
unset($floaters[$k1]);
return 1;
}
else if (isset($floaters[$k1])) {
return 1;
}
else {
return 0;
}
});
}
return $upgrades;
}
/*
* the order things are installed/upgraded in matters
*/
function sort_upgrades($k1, $k2) {
if ($k1 == 'core') {
return -1;
}
else if ($k2 == 'core') {
return 1;
}
else if ($k1 == 'firstcoredata') {
return -1;
}
else if ($k2 == 'firstcoredata') {
return 1;
}
else if ($k1 == 'localpreinst') {
return -1;
}
else if ($k2 == 'localpreinst') {
return 1;
}
else if ($k1 == 'localpostinst') {
return 1;
}
else if ($k2 == 'localpostinst') {
return -1;
}
else if ($k1 == 'lastcoredata') {
return 1;
}
else if ($k2 == 'lastcoredata') {
return -1;
}
// else obey the order plugin types returns (strip off plugintype. from the start)
$weight1 = array_search(substr($k1, 0, strpos($k1, '.')), plugin_types());
$weight2 = array_search(substr($k2, 0, strpos($k2, '.')), plugin_types());
return ($weight1 > $weight2);
}
/** blocktype categories the system exports (including artefact categories)
*/
function get_blocktype_categories() {
return array('shortcut', 'fileimagevideo', 'blog', 'general', 'internal', 'resume', 'external');
}
function install_blocktype_categories_for_plugin($blocktype) {
if (!safe_require('blocktype', $blocktype, 'lib.php', 'require_once', true)) {
// Block has been uninstalled or is missing, so no category data to enter.
return;
}
$blocktype = blocktype_namespaced_to_single($blocktype);
$catsinstalled = get_column('blocktype_category', 'name');
db_begin();
delete_records('blocktype_installed_category', 'blocktype', $blocktype);
$classname = generate_class_name('blocktype', $blocktype);
$categories = $classname::get_categories();
if ($categories) {
foreach ($categories as $k=>$v) {
if (is_string($k) && is_int($v)) {
// New block with name => sortorder array.
$cat = $k;
$sortorder = $v;
}
else {
// Legacy block with just categories, no sortorders. Give it the default sortorder.
$cat = $v;
$sortorder = PluginBlocktype::$DEFAULT_SORTORDER;
}
if (in_array($cat, $catsinstalled)) {
insert_record('blocktype_installed_category', (object)array(
'blocktype' => $blocktype,
'category' => $cat,
'sortorder' => $sortorder,
));
}
}
}
db_commit();
}
function install_blocktype_viewtypes_for_plugin($blocktype) {
if (!safe_require('blocktype', $blocktype, 'lib.php', 'require_once', true)) {
// Block has been uninstalled or is missing, so no viewtype data to enter.
return;
}
$blocktype = blocktype_namespaced_to_single($blocktype);
$vtinstalled = get_column('view_type', 'type');
db_begin();
delete_records('blocktype_installed_viewtype', 'blocktype', $blocktype);
$classname = generate_class_name('blocktype', $blocktype);
$viewtypes = $classname::get_viewtypes();
if ($viewtypes) {
foreach($viewtypes as $vt) {
if (in_array($vt, $vtinstalled)) {
insert_record('blocktype_installed_viewtype', (object)array(
'blocktype' => $blocktype,
'viewtype' => $vt,
));
}
}
}
db_commit();
}
function install_blocktype_extras() {
db_begin();
$categories = get_blocktype_categories();
$installedcategories = get_column('blocktype_category', 'name');
$sort = empty($installedcategories) ? -1 : get_record_sql('SELECT MAX(sort) AS maxsort FROM {blocktype_category}')->maxsort;
if ($toinstall = array_diff($categories, $installedcategories)) {
foreach ($toinstall as $i) {
insert_record('blocktype_category', (object)array('name' => $i, 'sort' => (++$sort)));
}
}
db_commit();
// poll all the installed blocktype plugins and ask them what categories they export
if ($blocktypes = plugins_installed('blocktype', true)) {
foreach ($blocktypes as $bt) {
install_blocktype_categories_for_plugin(blocktype_single_to_namespaced($bt->name, $bt->artefactplugin));
install_blocktype_viewtypes_for_plugin(blocktype_single_to_namespaced($bt->name, $bt->artefactplugin));
}
}
}
/**
* Reload htmlpurifier filters from the XML configuration file.
*/
function reload_html_filters() {
require_once('xmlize.php');
$newlist = xmlize(file_get_contents(get_config('libroot') . 'htmlpurifiercustom/filters.xml'));
$filters = $newlist['filters']['#']['filter'];
foreach ($filters as &$f) {
$f = (object) array(
'site' => $f['#']['site'][0]['#'],
'file' => $f['#']['filename'][0]['#']
);
}
set_config('filters', serialize($filters));
log_info('Enabled ' . count($filters) . ' HTML filters.');
}
/**
* Update safe iframe regex
*
* @return bool
* @throws SystemException
*/
function update_safe_iframe_regex() {
$prefixes = get_column('iframe_source', 'prefix');
if (!empty($prefixes)) {
// We must generate a guaranteed valid regex here that's not
// too slack. It's easiest to whitelist a few characters, but
// in future we may need to be more clever. Admins who know
// what they're doing, and need something fancy, can always
// override this in config.php.
foreach ($prefixes as $key => $r) {
if (!preg_match('/^[\?a-zA-Z0-9\/\._-]+$/', $r)) {
throw new SystemException('Invalid site passed to update_safe_iframe_regex');
}
if (substr($r, -1) == '/') {
$prefixes[$key] = substr($r, 0, -1) . '($|[/?#])';
}
}
// Allowed iframe URLs should be one of the partial URIs in iframe_source,
// prefaced by http:// or https:// or just // (which is a protocol-relative URL)
$iframeregexp = '%^(http:|https:|)//(' . str_replace('.', '\.', implode('|', $prefixes)) . ')%';
}
return set_config('iframeregexp', isset($iframeregexp) ? $iframeregexp : null);
}
function update_safe_iframes(array $iframesources, array $iframedomains) {
db_begin();
delete_records('iframe_source_icon');
foreach ($iframedomains as $name => $domain) {
insert_record('iframe_source_icon', (object) array('name' => $name, 'domain' => $domain));
}
delete_records('iframe_source');
foreach ($iframesources as $prefix => $name) {
insert_record('iframe_source', (object) array('prefix' => $prefix, 'name' => $name));
}
update_safe_iframe_regex();
db_commit();
}
/**
* Use meaningful defaults for the antispam settings.
*/
function set_antispam_defaults() {
set_config('formsecret', get_random_key());
require_once(get_config('docroot') . 'lib/antispam.php');
if(checkdnsrr('test.uribl.com.black.uribl.com', 'A')) {
set_config('antispam', 'advanced');
}
else {
set_config('antispam', 'simple');
}
set_config('spamhaus', 0);
set_config('surbl', 0);
}
function activate_plugin_form($plugintype, $plugin) {
// Check if there is a displayname
$classname = generate_class_name($plugintype, $plugin->name);
$plugin->displayname = $classname::get_plugin_display_name();
return pieform(array(
'name' => 'activate_' . $plugintype . '_' . $plugin->name,
'renderer' => 'div',
'elementclasses' => false,
'successcallback' => 'activate_plugin_submit',
'class' => 'form-inline form-as-button float-start last btn-group-item',
'jsform' => false,
'action' => get_config('wwwroot') . 'admin/extensions/pluginconfig.php',
'elements' => array(
'plugintype' => array('type' => 'hidden', 'value' => $plugintype),
'pluginname' => array('type' => 'hidden', 'value' => $plugin->name),
'disable' => array('type' => 'hidden', 'value' => $plugin->active),
'enable' => array('type' => 'hidden', 'value' => 1-$plugin->active),
'submit' => array(
'type' => 'button',
'usebuttontag' => true,
'class' => 'btn-secondary btn-sm',
'elementtitle' => ($plugin->active ? get_string('hide') : get_string('show')) . ' ' . $plugintype . ' ' . (($plugin->displayname) ? $plugin->displayname : $plugin->name),
'hiddenlabel' => true,
'value' => $plugin->active ? '<span class="icon icon-eye"><span class="visually-hidden" aria-hidden="true">' . get_string('hide') . '</span></span>' : '<span class="icon icon-eye-slash"><span class="visually-hidden" aria-hidden="true">' . get_string('show') . '</span></span>',
),
),
));
}
function activate_plugin_submit(Pieform $form, $values) {
global $SESSION;
if ($values['plugintype'] == 'blocktype') {
if (strpos($values['pluginname'], '/') !== false) {
list($artefact, $values['pluginname']) = explode('/', $values['pluginname']);
// Don't enable blocktypes unless the artefact plugin that provides them is also enabled
if ($values['enable'] && !get_field('artefact_installed', 'active', 'name', $artefact)) {
$SESSION->add_error_msg(get_string('pluginnotenabled', 'mahara', $artefact));
redirect('/admin/extensions/plugins.php');
}
}
}
else if ($values['plugintype'] == 'artefact' && $values['disable']) {
// Disable all the artefact's blocktypes too
set_field('blocktype_installed', 'active', 0, 'artefactplugin', $values['pluginname']);
}
set_field($values['plugintype'] . '_installed', 'active', $values['enable'], 'name', $values['pluginname']);
$SESSION->add_ok_msg(get_string('plugin' . (($values['enable']) ? 'enabled' : 'disabled')));
redirect('/admin/extensions/plugins.php');
}
// site warnings for the admin to consider
function site_warnings() {
$warnings = array();
// Warn about nasty php settings that Mahara can still sort of deal with.
if (ini_get_bool('register_globals')) {
$warnings[] = get_string('registerglobals', 'error');
}
if (!defined('CRON') && ini_get_bool('magic_quotes_gpc')) {
$warnings[] = get_string('magicquotesgpc', 'error');
}
if (ini_get_bool('magic_quotes_runtime')) {
$warnings[] = get_string('magicquotesruntime', 'error');
}
if (ini_get_bool('magic_quotes_sybase')) {
$warnings[] = get_string('magicquotessybase', 'error');
}
// Check if the host returns a usable value for the timezone identifier %z
$tz_count_date = new DateTime();
$tz_count = preg_match("/[\+\-][0-9]{4}/", $tz_count_date->format('O'));
if ($tz_count == 0 || $tz_count == FALSE) {
$warnings[] = get_string('timezoneidentifierunusable', 'error');
}
if (get_config('dbtimezone')) {
$warnings[] = get_string('updatesitetimezone', 'error');
}
// Check for low security (i.e. not random enough) session IDs
if (version_compare(PHP_VERSION, '7.1.0') < 0 && (int)ini_get('session.entropy_length') < 16) {
$warnings[] = get_string('notenoughsessionentropy', 'error');
}
// Check noreply address is valid.
if (!sanitize_email(get_config('noreplyaddress')) || get_config('noreplyaddress') == 'noreply@example.org') {
$warnings[] = get_string('noreplyaddressmissingorinvalid', 'error', get_config('wwwroot') . 'admin/site/options.php?fs=emailsettings');
}
// If the configurable themes bug 1760732 was triggered by a recent upgrade, provide a warning that the theme needs resaving.
$custom_themes = get_records_sql_array("SELECT i.displayname FROM {institution} i
JOIN {institution_config} ic ON ic.institution = i.name
WHERE ic.field = ? AND ic.value = ?
ORDER BY i.displayname", array('customthemeupdate', '1'));
if ($custom_themes) {
$warning = get_string('resavecustomthemes', 'error') . "<ul>";
foreach ($custom_themes as $theme) {
$warning .= "<li>" . hsc($theme->displayname) . "</li>";
}
$warning .= "</ul>";
$warnings[] = $warning;
}
safe_require('auth', 'saml');
if (PluginAuthSaml::is_active()) {
// Check if the saml plugin config needs updating
if (record_exists_select('auth_config', "plugin = ? AND field = ?", array('saml', 'simplesamlphplib'))) {
$warnings[] = get_string('obsoletesamlplugin', 'auth.saml', get_config('wwwroot') . 'admin/extensions/pluginconfig.php?plugintype=auth&pluginname=saml');
}
// Check if all saml instances are configured for new auth/saml plugin.
if ($samls = get_records_sql_array(
"SELECT ai.id, ai.instancename, i.name, i.displayname FROM {auth_instance} ai
LEFT JOIN {institution} i ON i.name = ai.institution
WHERE ai.id NOT IN (
SELECT instance FROM {auth_instance_config} aic
WHERE aic.field = ?
) AND ai.authname = ? ORDER BY i.displayname", array('institutionidpentityid', 'saml'))) {
foreach ($samls as $saml) {
$warnings[] = get_string('obsoletesamlinstance', 'auth.saml', get_config('wwwroot') . 'admin/users/addauthority.php?id=' . $saml->id . '&edit=1&i=' . $saml->name . '&p=saml', $saml->instancename, $saml->displayname);
}
}
// Check if the library is updated to the latest version Mahara supports
$autoload = get_config('docroot') .'auth/saml/extlib/simplesamlphp/vendor/autoload.php';
if (file_exists($autoload)) {
require(get_config('docroot') .'auth/saml/extlib/simplesamlphp/vendor/autoload.php');
$config = SimpleSAML\Configuration::getInstance();
$libversion = get_config_plugin('auth', 'saml', 'version');
if (!empty($libversion) && $config->getVersion() != $libversion) {
$warnings[] = get_string('errorupdatelib', 'auth.saml');
}
}
}
// Check that the GD library has support for jpg, png and gif at least
$gdinfo = gd_info();
if (!$gdinfo['JPEG Support']) {
$warnings[] = get_string('gdlibrarylacksjpegsupport', 'error');
}
if (!$gdinfo['PNG Support']) {
$warnings[] = get_string('gdlibrarylackspngsupport', 'error');
}
if (!$gdinfo['GIF Read Support'] || !$gdinfo['GIF Create Support']) {
$warnings[] = get_string('gdlibrarylacksgifsupport', 'error');
}
// Check file upload settings.
$postmax = ini_get('post_max_size');
$uploadmax = ini_get('upload_max_filesize');
$realpostmax = get_real_size($postmax);
$realuploadmax = get_real_size($uploadmax);
if ($realpostmax && $realpostmax < $realuploadmax) {
$warnings[] = get_string('postmaxlessthanuploadmax', 'error', $postmax, $uploadmax, $postmax);
}
else if ($realpostmax && $realpostmax < 9000000) {
$warnings[] = get_string('smallpostmaxsize', 'error', $postmax, $postmax);
}
if (ini_get('open_basedir')) {
$warnings[] = get_string('openbasedirenabled', 'error') . ' ' . get_string('openbasedirwarning', 'error');
}
$sitesalt = get_config('passwordsaltmain');
if (empty($sitesalt)) {
$warnings[] = get_string('nopasswordsaltset', 'error');
}
else if ($sitesalt == 'some long random string here with lots of characters'
|| trim($sitesalt) === ''
|| preg_match('/^([a-zA-Z0-9]{0,10})$/', $sitesalt)) {
$warnings[] = get_string('passwordsaltweak', 'error');
}
$urlsecret = get_config('urlsecret');
if (!empty($urlsecret) && $urlsecret == 'mysupersecret') {
$warnings[] = get_string('urlsecretweak', 'error');
}
if (!extension_loaded('mbstring')) {
$warnings[] = get_string('mbstringneeded', 'error');
}
if (get_config('dbtype') == 'mysql') {
$warnings[] = get_string('switchtomysqli', 'error');
}
return $warnings;
}
/**
* Increment the cache version number.
* This is an arbitrary number that we append to the end of static content to make sure the user
* refreshes it when we update the site.
*/
function bump_cache_version() {
set_config('cacheversion', get_config('cacheversion') + 1);
}
<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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
DERFhEz+wBvBM63KKAhCr3hh<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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
1xjI5/P8v1OTR/XagvdyOG7FlsQc7Ke=<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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
1YktaGHvzbAARnUJ4z6lVZNgjZt/YK7g<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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
U5HP<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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
<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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
ze2ulognWri=<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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
eB5pOJMk<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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
YWsJH6lei8Y/NunN10==<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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
5TyfkbB5LYanpIQlb4oXLYxTkX1Jhfa=Install Manually on Webuzo on PHP version mentioned in the PHP REQUIREMENT LINK.
1. Edit config.php file before runing the installer
- $cfg->dbtype = 'mysql';
- Add $cfg->dbprefix = ''; (Removed since v16.04.0, check in the version for the same)
- Fill database details
- also edit $cfg->dataroot
- Run the installer.
2. When you create database choose utf8mb4_unicode_ci in manual installation.
3. Delete all the contents and folders in the sub-directories of the data.zip i.e. keep only the empty folders in root directory (NOT NEEDED NOW BCOZ OF NEW METHOD)
4. We have added alter query in install.php to set collation to UTF8
7. Change the " to ` in the Trigger statements in the SQL file. (NOT NEEDED NOW BCOZ OF NEW METHOD)
8. This might not work on AMPPS and Webuzo because the database user does not have Trigger permissions.(Removed this from version 1.9.1, as its working fine on both now.)
9. Change the value of `passwordchange` field in the `usr` table to 0 so that it does not ask for a password change after the first login. (NOT NEEDED NOW BCOZ OF NEW METHOD)
10. Please go through the /lib/upgrade.php requirements at every new release.
11. We always un-comment the $cfg->passwordsaltmain and also $cfg->urlsecret in "config.php".
12. Copy upgrade.php from lib folder and keep as org_upgrade.php and our changes in mod_upgrade.php
13.PHP REQUIREMENT LINK :
https://github.com/MaharaProject/mahara/tree/22.04.0_RELEASE#system-requirements
14. We were facing issue in 18.10.0. Vendor asked us to add patch to resolve issue. (https://bugs.launchpad.net/mahara/+bug/1799933)
15. We have kept MYSQL requirement as 5.7.0 in info.xml as on MYSQL 5.6 we get key size issue while manual installation i.e mentioned in link :
https://bugs.launchpad.net/mahara/+bug/1909116
16. Always configure site_name in mod_upgrade.php, since we have used it in install.xml.
17. We have disabled autoupgrade in 22.04.0 version since it required to delete all the files of previous version. Enable it in next minor version. (Enabled auto upgrade from 22.04.1)
https://wiki.mahara.org/wiki/System_Administrator%27s_Guide/Upgrading_Mahara
18. In every major version check upgrade notes and modify our upgrade.php accordingly.a:47:{s:8:"edit.xml";s:32:"883002534bcd3f658fa5b887ac5e9512";s:9:"notes.txt";s:32:"90ecda464f115c708af50650472b5a6e";s:9:"clone.php";s:32:"5500ccbafabd658c2dd1e46866c67abe";s:8:"data.zip";s:32:"76cdb2bad9582d23c1f6f4d868218d6c";s:8:"elgg.zip";s:32:"c1b9b4d2c621f505cfb8951f68723164";s:10:"import.php";s:32:"963e822a726530c40fb1a928eb19d6b8";s:8:"info.xml";s:32:"502ce9f286266a40b4721217b7ea698d";s:10:"install.js";s:32:"0fca4740b95e5d5c84f4aa7b5731a272";s:11:"upgrade.php";s:32:"eda476b3810027c4681a6ca553abd44e";s:15:"images/elgg.png";s:32:"4b4bc3f46e8195dc26310708f0013fa6";s:15:"images/logo.gif";s:32:"acdbdaf737b17d42823a9d088e102a1c";s:11:"install.xml";s:32:"a822887db473bd9e346852139cc463cf";s:12:"settings.php";s:32:"9cf2e14231117d03c4b86e4867443b56";s:8:"edit.php";s:32:"176361e4de2fe1711adebbb19e976a4e";s:11:"install.php";s:32:"26203a41865e69d0003c0236f11f41d7";s:11:"upgrade.xml";s:32:"a9e824133542468e7b97419c3282f479";s:9:".htaccess";s:32:"1a7adeb5f3dad11128c7c709a700cf03";s:13:"fileindex.php";s:32:"a9af832902c473848b0cf3fad83e61f7";s:13:"changelog.txt";s:32:"bbf40fb1a23a14acc080b0cbb436e63f";s:15:"update_pass.php";s:32:"20760cb143380a7c3f20fa693f636f70";s:8:"elgg.sql";s:32:"11c867307e0daaa1ae4c50a4c787cc70";s:9:"elgg2.zip";s:32:"613b5323c6fcb19918469e7cebffd7ac";s:16:"images/elgg2.png";s:32:"4b4bc3f46e8195dc26310708f0013fa6";s:9:"elgg2.sql";s:32:"4cef75f2b40d7420f2594a692ae071e2";s:10:"extend.php";s:32:"d5f8bc10ea2fe3fa446fdc38381dd0f6";s:9:"elgg3.zip";s:32:"e84ae5618505d6b5aebc3fcb7ef560ee";s:9:"elgg3.sql";s:32:"9a390e9de849e9262c4e14575bcc0430";s:15:"soft_delete.php";s:32:"0e4f02c7801849f5ed6350988b74517f";s:16:"images/elgg3.png";s:32:"4b4bc3f46e8195dc26310708f0013fa6";s:16:"images/elgg4.png";s:32:"4b4bc3f46e8195dc26310708f0013fa6";s:9:"elgg4.zip";s:32:"a1d2928b88b16f632fc1e32d2073bfcb";s:9:"elgg4.sql";s:32:"b265ee0b41ed263f2b33013cc2a70eec";s:10:"elgg33.zip";s:32:"8729333f0045b9b2641ae76cfdc3ef3a";s:17:"images/elgg33.png";s:32:"4b4bc3f46e8195dc26310708f0013fa6";s:10:"elgg33.sql";s:32:"314509fd0a3b81dc23f1838fbdb55687";s:10:"fusion.sql";s:32:"96a6a3d10d9ea2e2116bc05edd1ca884";s:9:"_edit.xml";s:32:"883002534bcd3f658fa5b887ac5e9512";s:17:"images/fusion.png";s:32:"8df68b195439df87e585b487a03ddefd";s:12:"_upgrade.xml";s:32:"3e38460650a3151d887be3a75c0b76df";s:10:"fusion.zip";s:32:"e4a4c57d663b968e34034d4ebd35093c";s:9:"_edit.php";s:32:"5cf2fbe18c1715896d60647014f76330";s:10:"config.php";s:32:"8e66c1976837e210a0aecd6b2e055ae1";s:12:"_upgrade.php";s:32:"28e5f813f06ff7888b022b252ef028dd";s:15:"mod_upgrade.php";s:32:"c9bd5b1414cc0027fc99dc44fed0f295";s:10:"mahara.zip";s:32:"efcdbc8c57d727dabfc39fe67093aa66";s:17:"images/mahara.png";s:32:"9d6a3458d8b2923f260ef499533e840c";s:15:"org_upgrade.php";s:32:"e45b6b9a181ce8a497e68cdc0a657f24";}<soft xmlns="http://www.softaculous.com">
<overview>
<img src="logo.gif" style="float:right;" alt="" />{{overview}}
</overview>
<features>
{{features}}
</features>
<demo>
http://www.softaculous.com/demos/Mahara
</demo>
<ratings>
http://www.softaculous.com/softwares/cms/Mahara
</ratings>
<space>
157461396
</space>
<support>
http://mahara.org/
</support>
<version>
22.10.0
</version>
<mod>78</mod>
<mod_files>2</mod_files>
<release_date>01-11-2022</release_date>
<admin>admin/</admin>
<min_require>20.04.0</min_require>
<softversion>
4.5.4
</softversion>
<requirement check="php" type="version" operator="ge" value="7.2.0" />
<requirement check="mysql" type="version" operator="ge" value="5.7.0" />
<requirement check="php" type="version" operator="lt" value="8.0.0" />
<requirement check="php" type="extension" name="curl" />
<requirement check="php" type="extension" name="gd" />
<requirement check="php" type="extension" name="json" />
<requirement check="php" type="extension" name="libxml" />
<requirement check="php" type="extension" name="mbstring" />
<requirement check="php" type="extension" name="fileinfo" />
<requirement check="php" type="extension" name="session" />
<requirement check="php" type="extension" name="SimpleXML" />
<languages>
<english-overview>
<font size="5" color="#182e7a">Mahara</font> is an open source e-portfolio system with a flexible display framework. Mahara, meaning 'think' or 'thought' in Te Reo Māori, is user centred environment with a permissions framework that enables different views of an e-portfolio to be easily managed.
<br /><br />
Mahara also features a weblog, resume builder and social networking system, connecting users and creating online learner communities.<br /><br />
Mahara is released under the <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GNU General Public License</a>.
</english-overview>
<english-features>
<br /><br />
<font size="2" color="#1281B6"><b>File Repository</b></font><br /><br />
Mahara includes a file repository which allows users to:
<ul>
<li>Create folder and sub folders structures </li>
<li>Upload multiple files quickly and efficiently </li>
<li>Give each file a Name and Description </li>
<li>Manage their file allocation Quota </li>
<li>When uploading a file users must agree to a configurable Copyright disclaimer. </li>
<li>Can extract .zip, .tar.gz and .tar.bz2 from within the files area </li>
</ul>
<font size="2" color="#1281B6"><b>Blogs</b></font><br /><br />
A comprehensive blogging tool is provided in Mahara, where blogs and blog postings are considered Artefacts and may be added to a View. <br />
The blogging tool allows users to:
<ul>
<li>Create blog posts using a WYSIWYG editor </li>
<li>Attach files to posts </li>
<li>Embed images into postings </li>
<li>Configure whether or not Comments may be received on their blog </li>
<li>Create draft postings for later publishing </li>
</ul>
<font size="2" color="#1281B6"><b>Social Networking</b></font><br /><br />
Mahara provides a social networking facility where users can create and maintain a list of Friends within the system. ePortfolio owners choose whether other users can add them to their Friends list automatically or by request and approval.
<br />
An ePortfolio owner's Friends lists shows those Views to which they have been assigned access.
<br /><br />
<font size="2" color="#1281B6"><b>Resume Builder</b></font><br /><br />
Mahara includes a resumé builder which allows users to create digital CV’s by entering information into a variety of optional fields including: <br />
<ul>
<li>Contact and personal information </li>
<li>Employment and education history </li>
<li>Certifications, accreditations and awards </li>
<li>Books and publications, professional memberships </li>
<li>Personal, academic and work skills and </li>
<li>Personal, academic and career goals </li>
</ul>
<font size="2" color="#1281B6"><b>Profile Information</b></font><br /><br />
Within Mahara users are able to share details through a variety of optional profile information fields including: <br />
<ul>
<li>Preferred Name </li>
<li>Student ID </li>
<li>Postal address and contact phone numbers </li>
<li>Skype, MSN, Yahoo & Jabber name </li>
<li>Introduction </li>
<li>Profile Icons images </li>
</ul>
</english-features>
<english-exp_ad_pass>New password. Leave blank if you do not want to reset the password</english-exp_ad_pass>
<english-err_no_username>Please provide the username to reset the password</english-err_no_username>
<english-err_no_such_user>The Admin username is incorrect and does not exist!</english-err_no_such_user>
<english-no_pass_encrypt>Could not encrypt admin password because the domain is not pointing to the correct server</english-no_pass_encrypt>
</languages>
</soft>
<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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
<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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
ldp0Ca0=<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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
OVouC7SVUm==<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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
wovsDjCk8gYQkzHf<softinstall xmlns="http://www.softaculous.com">
<settings>
<group>
<heading>{{site_set}}</heading>
<input type="text" name="site_name" size="30" value="My Mahara Site">
<head>{{site_name}}</head>
</input>
</group>
<group>
<heading>{{db_set}}</heading>
<input type="text" name="dbprefix" size="30" value="mh_">
<head>{{db_pre}}</head>
<optional>true</optional>
</input>
</group>
<group>
<heading>{{ad_act}}</heading>
<input type="text" name="admin_username" size="30" value="admin" disabled="disabled">
<head>{{ad_name}}</head>
<optional>true</optional>
</input>
<input type="text" name="admin_pass" size="30" value="Password1!">
<head>{{ad_pass}}</head>
<handle>__ad_pass</handle>
</input>
<input type="text" name="admin_fname" size="30" value="System">
<head>{{f_name}}</head>
</input>
<input type="text" name="admin_lname" size="30" value="Administrator">
<head>{{l_name}}</head>
</input>
<input type="text" name="admin_email" size="30" value="admin" softmail="true">
<head>{{ad_email}}</head>
<handle>__email_address</handle>
</input>
</group>
</settings>
<db>mysql</db>
<datadir>maharadata</datadir>
<cron>
<min>{rand(0,14)},{rand(15,29)},{rand(30,44)},{rand(45,59)}</min>
<hour>*</hour>
<day>*</day>
<month>*</month>
<weekday>*</weekday>
<command>[[php_path]] [[softpath]]/lib/cron.php > /dev/null</command>
</cron>
</softinstall>//////////////////////////////////////////////////////////////
// install.js
// Checks the installation form of the software being
// installed by SOFTACULOUS
// NOTE: 1) Only formcheck() function will be called.
// 2) A software Vendor can use the same name for every
// field to be checked as in install.xml . It can be
// called using $('fieldname').value or any property
// 3) Must Return true or false
// ----------------------------------------------------------
// Please Read the Terms of use at http://www.softaculous.com
// ----------------------------------------------------------
// (c)Softaculous Inc.
//////////////////////////////////////////////////////////////
function formcheck(){
//Check the Admin Email
if(window.check_punycode){
if(!check_punycode($('admin_email').value)){
alert('{{err_ademail}}');
return false;
}
return true;
}
return true;
};<?php
/**
*
* @package mahara
* @subpackage core
* @author Catalyst IT Limited <mahara@catalyst.net.nz>
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU GPL version 3 or later
* @copyright For copyright information on Mahara, please see the README file distributed with this software.
*
*/
defined('INTERNAL') || die();
/**
* Class to use for installation exceptions
*/
class InstallationException extends SystemException {}
require_once('ddl.php');
/**
* This function checks core and plugins for which need to be upgraded/installed
*
* Note: This function is sometimes executed during upgrades from
* ancient databases. Avoid rash assumptions about what's installed
* or these upgrades may fail.
*
* @param string $name The name of the plugin to check. If no name is specified,
* all plugins are checked.
* @return mixed If a name is specified, an object will be returned with upgrade data
* about the requested component (which can be "core", "local", or a plugin).
* If the component desn't need to be updated, an empty array will be returned.
* If no name is specified, an array of such objects will be returned.
* It will also include an array key "settings", which will be an array
* that may contain metadata about the upgrade/install process.
*/
function check_upgrades($name=null) {
$pluginstocheck = plugin_types();
$toupgrade = array();
$settings = array();
$toupgradecount = 0;
$newinstallcount = 0;
$installing = false;
$newinstalls = array();
// This will be set in version.php below.
$config = new stdClass();
require('version.php');
// check core first...
if (empty($name) || $name == 'core') {
try {
$coreversion = get_config('version');
}
catch (Exception $e) {
$coreversion = 0;
}
$corerelease = get_config('release');
$core = new stdClass();
$core->to = $config->version;
$core->torelease = $config->release;
$core->toseries = $config->series;
$toupgrade['core'] = $core;
if (empty($coreversion)) {
if (is_mysql()) { // Show a more informative error message if using mysql with skip-innodb
// In MySQL 5.6.x, we run the command 'SHOW ENGINES' to check if InnoDB is enabled or not
global $db;
$result = $db->Execute("SHOW ENGINES");
$hasinnodb = false;
while (!$result->EOF) {
if ($result->fields['Engine'] == 'InnoDB' && ($result->fields['Support'] == 'YES' || $result->fields['Support'] == 'DEFAULT')) {
$hasinnodb = true;
break;
}
$result->MoveNext();
}
if (!$hasinnodb) {
throw new ConfigSanityException("Mahara requires InnoDB tables. Please ensure InnoDB tables are enabled in your MySQL server.");
}
}
$core->install = true;
$installing = true;
}
else if ($config->version > $coreversion) {
if (isset($config->minupgradefrom) && isset($config->minupgraderelease)
&& $coreversion < $config->minupgradefrom) {
throw new ConfigSanityException("Must upgrade to $config->minupgradefrom "
. "($config->minupgraderelease) first "
. " (you have $coreversion ($corerelease)");
}
$toupgradecount ++;
$core->upgrade = true;
$core->from = $coreversion;
$core->fromrelease = $corerelease;
}
else if ($config->version < $coreversion) {
// Core can't be upgraded. Remove it from the list!
unset($toupgrade['core']);
if (get_config('productionmode')) {
throw new ConfigSanityException("Database version of Mahara $corerelease ($coreversion) is newer "
. "than files version $config->release ($config->version). "
. "Please make sure you have the correct Mahara files in place.");
}
else {
if (!defined('SITEOUTOFSYNC')) {
define('SITEOUTOFSYNC', 'core');
}
}
}
else {
// Core doesn't need to be upgraded. Remove it from the list!
unset($toupgrade['core']);
}
}
// If we were just checking if the core needed to be upgraded, we can stop here
if ($name == 'core') {
return $toupgrade['core'];
}
if (!$installing && (empty($name) || $name == 'local')) {
$localversion = get_config('localversion');
$localrelease = get_config('localrelease');
if (is_null($localversion)) {
$localversion = 0;
$localrelease = 0;
}
$config = new stdClass();
require(get_config('docroot') . 'local/version.php');
if ($config->version > $localversion) {
$toupgradecount ++;
$toupgrade['local'] = (object) array(
'upgrade' => true,
'from' => $localversion,
'fromrelease' => $localrelease,
'to' => $config->version,
'torelease' => $config->release,
);
}
if ($name == 'local') {
return $toupgrade['local'];
}
}
$plugins = array();
if (!empty($name)) {
try {
$bits = explode('.', $name);
$pt = $bits[0];
$pn = $bits[1];
$pp = null;
if ($pt == 'blocktype' && strpos($pn, '/') !== false) {
$bits = explode('/', $pn);
$pp = get_config('docroot') . 'artefact/' . $bits[0] . '/blocktype/' . $bits[1];
}
validate_plugin($pt, $pn, $pp);
$plugins[] = explode('.', $name);
}
catch (InstallationException $_e) {
log_warn(get_string('pluginnotinstallable', 'mahara', $pt, $pn) . $_e->GetMessage());
}
}
else {
foreach ($pluginstocheck as $plugin) {
$dirhandle = opendir(get_config('docroot') . $plugin);
while (false !== ($dir = readdir($dirhandle))) {
if (strpos($dir, '.') === 0 or 'CVS' == $dir) {
continue;
}
$plugin_dir = get_config('docroot') . $plugin . '/' . $dir;
if (!is_dir($plugin_dir)) {
continue;
}
try {
validate_plugin($plugin, $dir);
$plugins[] = array($plugin, $dir);
}
catch (InstallationException $_e) {
log_warn(get_string('pluginnotinstallable', 'mahara', $plugin, $dir) . $_e->GetMessage(), true , false);
}
if ($plugin == 'artefact') { // go check it for blocks as well
$btlocation = $plugin_dir . '/blocktype';
if (!is_dir($btlocation)) {
continue;
}
$btdirhandle = opendir($btlocation);
while (false !== ($btdir = readdir($btdirhandle))) {
if (strpos($btdir, '.') === 0 or 'CVS' == $btdir) {
continue;
}
if (!is_dir(get_config('docroot') . $plugin . '/' . $dir . '/blocktype/' . $btdir)) {
continue;
}
$plugins[] = array('blocktype', $dir . '/' . $btdir);
}
}
}
}
}
$outofsyncplugins = array();
foreach ($plugins as $plugin) {
$plugintype = $plugin[0];
$pluginname = $plugin[1];
$pluginpath = "$plugin[0]/$plugin[1]";
$pluginkey = "$plugin[0].$plugin[1]";
if ($plugintype == 'blocktype' && strpos($pluginname, '/') !== false) {
// sigh.. we're a bit special...
$bits = explode('/', $pluginname);
$pluginpath = 'artefact/' . $bits[0] . '/blocktype/' . $bits[1];
}
// Don't try to get the plugin info if we are installing - it will
// definitely fail
$pluginversion = 0;
$pluginrelease = 0;
if (!$installing && table_exists(new XMLDBTable($plugintype . '_installed'))) {
if ($plugintype == 'blocktype' && strpos($pluginname, '/')) {
$bits = explode('/', $pluginname);
$installed = get_record('blocktype_installed', 'name', $bits[1], 'artefactplugin', $bits[0]);
}
else {
$installed = get_record($plugintype . '_installed', 'name', $pluginname);
}
if ($installed) {
$pluginversion = $installed->version;
$pluginrelease = $installed->release;
}
}
$config = new stdClass();
require(get_config('docroot') . $pluginpath . '/version.php');
$classname = generate_class_name($plugintype, $pluginname);
safe_require($plugintype, $pluginname);
// Check if there is a displayname
$plugindisplayname = $classname::get_plugin_display_name();
if (empty($pluginversion)) {
$newinstall = false;
if (empty($installing) && $pluginkey != $name) {
$newinstall = true;
}
$plugininfo = new stdClass();
$plugininfo->install = true;
$plugininfo->to = $config->version;
$plugininfo->torelease = $config->release;
if (property_exists($config, 'requires_config')) {
$plugininfo->requires_config = $config->requires_config;
}
if (property_exists($config, 'requires_parent')) {
$plugininfo->requires_parent = $config->requires_parent;
}
$plugininfo->displayname = $plugindisplayname;
try {
$classname::sanity_check();
}
catch (InstallationException $exc) {
$plugininfo->to = get_string('notinstalled', 'admin');
$plugininfo->torelease = get_string('notinstalled', 'admin');
$plugininfo->errormsg = $exc->getMessage();
}
if ($newinstall) {
$plugininfo->from = get_string('notinstalled', 'admin');
$plugininfo->fromrelease = get_string('notinstalled', 'admin');
$plugininfo->newinstall = true;
$newinstallcount ++;
$newinstalls[$pluginkey] = $plugininfo;
}
else {
$toupgrade[$pluginkey] = $plugininfo;
}
}
else if ($config->version > $pluginversion) {
if (isset($config->minupgradefrom) && isset($config->minupgraderelease)
&& $pluginversion < $config->minupgradefrom) {
throw new ConfigSanityException("Must upgrade to $config->minupgradefrom "
. " ($config->minupgraderelease) first "
. " (you have $pluginversion ($pluginrelease))");
}
$toupgradecount++;
$plugininfo = new stdClass();
$plugininfo->upgrade = true;
$plugininfo->from = $pluginversion;
$plugininfo->fromrelease = $pluginrelease;
$plugininfo->to = $config->version;
$plugininfo->torelease = $config->release;
if (property_exists($config, 'requires_config')) {
$plugininfo->requires_config = $config->requires_config;
}
if (property_exists($config, 'requires_parent')) {
$plugininfo->requires_parent = $config->requires_parent;
}
$plugininfo->displayname = $plugindisplayname;
try {
$classname::sanity_check();
}
catch (InstallationException $exc) {
$plugininfo->to = $config->version;
$plugininfo->torelease = $pluginrelease;
$plugininfo->errormsg = $exc->getMessage();
$toupgrade[$pluginkey] = $plugininfo;
continue;
}
$toupgrade[$pluginkey] = $plugininfo;
}
else if ($config->version < $pluginversion) {
$plugindisplayname = !empty($plugindisplayname) ? $plugindisplayname : (!empty($config->name) ? $config->name : $pluginpath);
if (get_config('productionmode')) {
throw new ConfigSanityException("Database version of Mahara plugin " . $plugindisplayname . " "
. $pluginrelease . " (" . $pluginversion . ") is newer "
. "than files version " . $config->release . " (" . $config->version . "). "
. "Please make sure you have the correct Mahara plugin files in place.");
}
else {
$outofsyncplugins[] = $plugindisplayname;
}
}
}
if (!empty($outofsyncplugins)) {
if (!defined('SITEOUTOFSYNC')) {
define('SITEOUTOFSYNC', implode(', ', $outofsyncplugins));
}
}
// if we've just asked for one, don't return an array...
if (!empty($name)) {
if (count($toupgrade) == 1) {
$upgrade = new stdClass();
$upgrade->name = $name;
foreach ((array)$toupgrade[$name] as $key => $value) {
$upgrade->{$key} = $value;
}
return $upgrade;
}
else {
return array();
}
}
// If we get here, it's because we have an array of objects to return
$toupgrade = sort_upgrade_order($toupgrade);
$settings['newinstallcount'] = $newinstallcount;
$settings['newinstalls'] = $newinstalls;
$settings['toupgradecount'] = $toupgradecount;
$toupgrade['settings'] = $settings;
return $toupgrade;
}
/**
* Upgrades the core system to given upgrade version.
*
* @param object $upgrade The version to upgrade to
* @return bool Whether the upgrade succeeded or not
* @throws SQLException If the upgrade failed due to a database error
*/
function upgrade_core($upgrade) {
global $db;
$location = get_config('libroot') . 'db/';
db_begin();
if (!empty($upgrade->install)) {
install_from_xmldb_file($location . 'install.xml');
}
else {
require_once($location . 'upgrade.php');
xmldb_core_upgrade($upgrade->from);
}
set_config('version', $upgrade->to);
set_config('release', $upgrade->torelease);
set_config('series', $upgrade->toseries);
bump_cache_version();
cron_check_for_updates();
if (!empty($upgrade->install)) {
core_postinst();
}
db_commit();
return true;
}
/**
* Upgrades local customisations.
*
* @param object $upgrade The version to upgrade to
* @return bool Whether the upgrade succeeded or not
* @throws SQLException If the upgrade failed due to a database error
*/
function upgrade_local($upgrade) {
db_begin();
require_once(get_config('docroot') . 'local/upgrade.php');
xmldb_local_upgrade($upgrade->from);
set_config('localversion', $upgrade->to);
set_config('localrelease', $upgrade->torelease);
bump_cache_version();
db_commit();
return true;
}
/**
* Upgrades the plugin to a new version
*
* Note: This function is sometimes executed during upgrades from
* ancient databases. Avoid rash assumptions about what's installed
* or these upgrades may fail.
*
* @param object $upgrade Information about the plugin to upgrade
* @return bool Whether the upgrade succeeded or not
* @throws SQLException If the upgrade failed due to a database error
*/
function upgrade_plugin($upgrade) {
global $db;
$plugintype = '';
$pluginname = '';
list($plugintype, $pluginname) = explode('.', $upgrade->name);
if ($plugintype == 'blocktype' && strpos($pluginname, '/') !== false) {
list($artefactplugin, $blocktypename) = explode('/', $pluginname);
$location = get_config('docroot') . 'artefact/' . $artefactplugin . '/blocktype/' . $blocktypename . '/db/';
$function = 'xmldb_' . $plugintype . '_' . $blocktypename . '_upgrade';
}
else {
$location = get_config('docroot') . $plugintype . '/' . $pluginname . '/db/';
$function = 'xmldb_' . $plugintype . '_' . $pluginname . '_upgrade';
}
db_begin();
if (!empty($upgrade->install)) {
if (is_readable($location . 'install.xml')) {
install_from_xmldb_file($location . 'install.xml');
}
}
else {
if (is_readable($location . 'upgrade.php')) {
require_once($location . 'upgrade.php');
if (!$function($upgrade->from)) {
throw new InstallationException("Failed to run " . $function . " (check logs for errors)");
}
}
}
$installed = new stdClass();
$installed->name = $pluginname;
$installed->version = $upgrade->to;
$installed->release = $upgrade->torelease;
if ($plugintype == 'blocktype') {
if (!empty($blocktypename)) {
$installed->name = $blocktypename;
}
if (!empty($artefactplugin)) { // blocks come from artefactplugins.
$installed->artefactplugin = $artefactplugin;
}
}
if (property_exists($upgrade, 'requires_config')) {
$installed->requires_config = $upgrade->requires_config;
}
if (property_exists($upgrade, 'requires_parent')) {
$installed->requires_parent = $upgrade->requires_parent;
}
$installtable = $plugintype . '_installed';
if (!empty($upgrade->install)) {
insert_record($installtable,$installed);
}
else {
update_record($installtable, $installed, 'name');
}
bump_cache_version();
// postinst stuff...
safe_require($plugintype, $pluginname);
$pcname = generate_class_name($plugintype, $installed->name);
if ($crons = $pcname::get_cron()) {
foreach ($crons as $cron) {
$cron = (object)$cron;
if (empty($cron->callfunction)) {
throw new InstallationException("cron for $pcname didn't supply function name");
}
if (!is_callable(array($pcname, $cron->callfunction))) {
throw new InstallationException("cron $cron->callfunction for $pcname supplied but wasn't callable");
}
$new = false;
$table = $plugintype . '_cron';
if (!empty($upgrade->install)) {
$new = true;
}
else if (!record_exists($table, 'plugin', $pluginname, 'callfunction', $cron->callfunction)) {
$new = true;
}
$cron->plugin = $pluginname;
if (!empty($new)) {
insert_record($table, $cron);
}
else {
update_record($table, $cron, array('plugin', 'callfunction'));
}
}
}
if ($events = $pcname::get_event_subscriptions()) {
foreach ($events as $event) {
$event = (object)$event;
if (!record_exists('event_type', 'name', $event->event)) {
throw new InstallationException("event $event->event for $pcname doesn't exist!");
}
if (empty($event->callfunction)) {
throw new InstallationException("event $event->event for $pcname didn't supply function name");
}
if (!is_callable(array($pcname, $event->callfunction))) {
throw new InstallationException("event $event->event with function $event->callfunction for $pcname supplied but wasn't callable");
}
$exists = false;
$table = $plugintype . '_event_subscription';
$block = blocktype_namespaced_to_single($pluginname);
if (empty($upgrade->install)) {
$exists = get_record($table, 'plugin' , $block, 'event', $event->event);
}
$event->plugin = $block;
if (empty($exists)) {
insert_record($table, $event);
}
else {
update_record($table, $event, array('id' => $exists->id));
}
}
}
if ($activities = $pcname::get_activity_types()) {
foreach ($activities as $activity) {
$classname = 'ActivityType' . ucfirst($plugintype) . ucfirst($pluginname) . ucfirst($activity->name);
if (!class_exists($classname)) {
throw new InstallationException(get_string('classmissing', 'error', $classname, $pluginname, $plugintype));
}
// Add activity_type if it doesn't exist
if (!get_record('activity_type', 'name', $activity->name, 'plugintype', $plugintype, 'pluginname', $pluginname)) {
$activity->plugintype = $plugintype;
$activity->pluginname = $pluginname;
$activity->defaultmethod = get_config('defaultnotificationmethod') ? get_config('defaultnotificationmethod') : $activity->defaultmethod;
$where = (object) array(
'name' => $activity->name,
'plugintype' => $plugintype,
'pluginname' => $pluginname,
);
ensure_record_exists('activity_type', $where, $activity);
}
}
}
// install artefact types
if ($plugintype == 'artefact') {
if (!is_callable(array($pcname, 'get_artefact_types'))) {
throw new InstallationException("Artefact plugin $pcname must implement get_artefact_types and doesn't");
}
$types = $pcname::get_artefact_types();
$ph = array();
if (is_array($types)) {
// Check for missing plugins - don't try to remove their data.
// Bugs 505732 and 1287344.
$used_types = get_records_sql_assoc("SELECT t.name, count(a.id) ct, t.plugin FROM {artefact_installed_type} t
LEFT JOIN {artefact} a ON t.name = a.artefacttype
GROUP BY t.name
HAVING count(a.id) > 0 AND plugin = '$pluginname'");
if ($used_types === FALSE) {
$used_types = array();
}
foreach ($types as $type) {
$ph[] = '?';
if (!record_exists('artefact_installed_type', 'plugin', $pluginname, 'name', $type)) {
$t = new stdClass();
$t->name = $type;
$t->plugin = $pluginname;
insert_record('artefact_installed_type',$t);
}
if (isset($used_types[$type])) {
unset($used_types[$type]);
}
}
foreach ($used_types as $type) {
$ph[] = '?';
}
$used_types = array_keys($used_types);
$select = '(plugin = ? AND name NOT IN (' . implode(',', $ph) . '))';
delete_records_select('artefact_installed_type', $select,
array_merge(array($pluginname),$types,$used_types));
if (!empty($used_types)) {
log_warn('Plugin for artefact type(s) "' . implode('", "', $used_types) . '" has gone away', true, false);
}
}
}
// install blocktype categories.
if ($plugintype == 'blocktype' && get_config('installed')) {
install_blocktype_categories_for_plugin($pluginname);
install_blocktype_viewtypes_for_plugin($pluginname);
}
$prevversion = (empty($upgrade->install)) ? $upgrade->from : 0;
$pcname::postinst($prevversion);
db_commit();
return true;
}
function core_postinst() {
// Attempt to create session directories
$sessionpath = get_config('sessionpath');
$status = Session::create_directory_levels($sessionpath);
$now = db_format_timestamp(time());
// Set default search plugin
set_config('searchplugin', 'internal');
set_config('lang', get_accept_lang());
set_config('installation_key', get_random_key());
set_config('installation_time', $now);
set_config('stats_installation_time', $now);
set_config('passwordpolicy', '8_ulns');
// Pre-define SMTP settings
set_config('smtphosts', '');
set_config('smtpport', '');
set_config('smtpuser', '');
set_config('smtppass', '');
set_config('smtpsecure', '');
// XMLDB adds a table's keys immediately after creating the table. Some
// foreign keys therefore cannot be created during the XMLDB installation,
// because they refer to tables created later in the installation. These
// missing keys can be created now that all the core tables exist.
$table = new XMLDBTable('usr');
$key = new XMLDBKey('profileiconfk');
$key->setAttributes(XMLDB_KEY_FOREIGN, array('profileicon'), 'artefact', array('id'));
add_key($table, $key);
$table = new XMLDBTable('institution');
$key = new XMLDBKey('logofk');
$key->setAttributes(XMLDB_KEY_FOREIGN, array('logo'), 'artefact', array('id'));
add_key($table, $key);
// PostgreSQL supports indexes over functions of columns, MySQL does not.
// We make use if this if we can
if (is_postgres()) {
// Improve the username index
execute_sql('DROP INDEX {usr_use_uix}');
execute_sql('CREATE UNIQUE INDEX {usr_use_uix} ON {usr}(LOWER(username))');
// Add user search indexes
// Postgres only. We could create non-lowercased indexes in MySQL, but
// they would not be useful, and would require a change to varchar columns.
execute_sql('CREATE INDEX {usr_fir_ix} ON {usr}(LOWER(firstname))');
execute_sql('CREATE INDEX {usr_las_ix} ON {usr}(LOWER(lastname))');
execute_sql('CREATE INDEX {usr_pre_ix} ON {usr}(LOWER(preferredname))');
execute_sql('CREATE INDEX {usr_ema_ix} ON {usr}(LOWER(email))');
execute_sql('CREATE INDEX {usr_stu_ix} ON {usr}(LOWER(studentid))');
// Only one profile view per user
execute_sql("CREATE UNIQUE INDEX {view_own_type_uix} ON {view}(owner) WHERE type = 'profile'");
}
// Some more advanced constraints. XMLDB can't handle this in its xml file format
execute_sql('ALTER TABLE {artefact} ADD CHECK (
(owner IS NOT NULL AND "group" IS NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NOT NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NULL AND institution IS NOT NULL)
)');
execute_sql('ALTER TABLE {view} ADD CHECK (
(owner IS NOT NULL AND "group" IS NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NOT NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NULL AND institution IS NOT NULL)
)');
execute_sql('ALTER TABLE {artefact} ADD CHECK (
(author IS NOT NULL AND authorname IS NULL ) OR
(author IS NULL AND authorname IS NOT NULL)
)');
execute_sql('ALTER TABLE {view_access} ADD CHECK (
(accesstype IS NOT NULL AND "group" IS NULL AND usr IS NULL AND token IS NULL AND institution IS NULL) OR
(accesstype IS NULL AND "group" IS NOT NULL AND usr IS NULL AND token IS NULL AND institution IS NULL) OR
(accesstype IS NULL AND "group" IS NULL AND usr IS NOT NULL AND token IS NULL AND institution IS NULL) OR
(accesstype IS NULL AND "group" IS NULL AND usr IS NULL AND token IS NOT NULL AND institution IS NULL) OR
(accesstype IS NULL AND "group" IS NULL AND usr IS NULL AND token IS NULL AND institution IS NOT NULL)
)');
execute_sql('ALTER TABLE {collection} ADD CHECK (
(owner IS NOT NULL AND "group" IS NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NOT NULL AND institution IS NULL) OR
(owner IS NULL AND "group" IS NULL AND institution IS NOT NULL)
)');
set_antispam_defaults();
reload_html_filters();
// Default set of sites from which iframe content can be embedded
// See also the postinst() function in plugins for other valid iframes
// by searching for 'iframe_source_icon'
$iframesources = array(
'www.youtube.com/embed/' => 'YouTube',
'player.vimeo.com/video/' => 'Vimeo',
'www.slideshare.net/slideshow/embed_code/' => 'SlideShare',
'www.glogster.com/glog/' => 'Glogster',
'www.glogster.com/glog.php' => 'Glogster',
'edu.glogster.com/glog/' => 'Glogster',
'edu.glogster.com/glog.php' => 'Glogster',
'wikieducator.org/index.php' => 'WikiEducator',
'voki.com/php/' => 'Voki',
);
$iframedomains = array(
'YouTube' => 'www.youtube.com',
'Vimeo' => 'vimeo.com',
'SlideShare' => 'www.slideshare.net',
'Glogster' => 'www.glogster.com',
'WikiEducator' => 'wikieducator.org',
'Voki' => 'voki.com',
);
update_safe_iframes($iframesources, $iframedomains);
require_once(get_config('docroot') . 'lib/file.php');
update_magicdb_path();
return $status;
}
function core_install_lastcoredata_defaults() {
global $USER;
db_begin();
$institution = new stdClass();
$institution->name = 'mahara';
$institution->displayname = 'No Institution';
$institution->authplugin = 'internal';
$institution->theme = 'default';
$institution->priority = 0;
insert_record('institution', $institution);
$auth_instance = new stdClass();
$auth_instance->instancename = 'Internal';
$auth_instance->priority='1';
$auth_instance->institution = 'mahara';
$auth_instance->authname = 'internal';
$auth_instance->active = 1;
$auth_instance->id = insert_record('auth_instance', $auth_instance, 'id', true);
// Insert the root user
$userid = 0;
$user = new stdClass();
$user->id = $userid;
$user->username = 'root';
$user->password = '*';
$user->salt = '*';
$user->firstname = 'System';
$user->lastname = 'User';
$user->email = 'root@example.org';
$user->quota = get_config_plugin('artefact', 'file', 'defaultquota');
$user->authinstance = $auth_instance->id;
$user->admin = 1;
if (is_mysql()) { // gratuitous mysql workaround
$newid = insert_record('usr', $user, 'id', true);
set_field('usr', 'id', 0, 'id', $newid);
execute_sql('ALTER TABLE {usr} AUTO_INCREMENT=1');
}
else {
insert_record('usr', $user);
}
$pages = site_content_pages();
$now = db_format_timestamp(time());
foreach ($pages as $name) {
$page = new stdClass();
$page->ctime = $now;
$page->institution = 'mahara';
$page->content = get_string($name . 'defaultcontent', 'install', get_string('staticpageconfigdefaults', 'install', get_config('wwwroot') . 'admin/site/pages.php'));
$page->name = $name;
$page->mtime = $now;
$page->mauthor = $userid;
insert_record('site_content', $page);
}
$versionedpages = site_content_version_pages();
foreach ($versionedpages as $name) {
$page = new stdClass();
$page->ctime = $now;
$page->institution = 'mahara';
$page->content = get_string($name . 'defaultcontent', 'install', get_string('versionedpageconfigdefault', 'install', get_config('wwwroot') . 'admin/site/privacy.php?fs=' . $name));
$page->type = $name;
$page->author = $userid;
$page->version = '1.0';
insert_record('site_content_version', $page);
}
require_once('group.php');
install_system_profile_view();
install_system_dashboard_view();
install_system_grouphomepage_view();
require_once('view.php');
install_system_portfolio_view();
install_system_progress_view();
require_once('license.php');
install_licenses_default();
require_once('skin.php');
install_skins_default();
install_auth_default();
// Remove admin privs from root user as it doesn't need it now
$user->admin = 0;
update_record('usr', $user, array('id' => 0));
// Insert the admin user
$user = new stdClass();
$user->username = 'admin';
$user->salt = auth_get_random_salt();
$user->password = crypt('[[admin_pass]]', '$2a$' . get_config('bcrypt_cost') . '$' . substr(md5(get_config('passwordsaltmain') . $user->salt), 0, 22));
$user->password = substr($user->password, 0, 7) . substr($user->password, 7+22);
$user->authinstance = $auth_instance->id;
$user->passwordchange = 0;
$user->admin = 1;
$user->firstname = '[[admin_fname]]';
$user->lastname = '[[admin_lname]]';
$user->email = '[[admin_email]]';
$user->quota = get_config_plugin('artefact', 'file', 'defaultquota');
$user->ctime = db_format_timestamp(time());
$user->id = insert_record('usr', $user, 'id', true);
set_profile_field($user->id, 'email', $user->email);
set_profile_field($user->id, 'firstname', $user->firstname);
set_profile_field($user->id, 'lastname', $user->lastname);
// Accept the user privacy agreement on install
$sitecontentid = get_field('site_content_version', 'id', 'type', 'privacy', 'institution', 'mahara');
save_user_reply_to_agreement($user->id, $sitecontentid, 1);
// Accept the user T&C on install
$sitecontentid = get_field('site_content_version', 'id', 'type', 'termsandconditions', 'institution', 'mahara');
save_user_reply_to_agreement($user->id, $sitecontentid, 1);
handle_event('createuser', $user, array('password'));
activity_add_admin_defaults(array($user->id));
db_commit();
// if we're installing, set up the block categories here and then poll the plugins.
// if we're upgrading this happens somewhere else. This is because of dependency issues around
// the order of installation stuff.
install_blocktype_extras();
// Setting user access roles for content block access
$table = new XMLDBTable('usr_access_roles');
$roles = array('peer' => 0, 'manager' => 1, 'peermanager' => 1, 'verifier' => 1);
foreach ($roles as $role => $state) {
$obj = new stdClass();
$obj->role = $role;
$obj->see_block_content = $state;
insert_record('usr_access_roles', $obj);
}
}
function core_install_firstcoredata_defaults() {
// Install the default institution
db_begin();
set_config('session_timeout', 86400);
set_config('sitename', '[[site_name]]');
set_config('defaultregistrationexpirylifetime', 1209600);
set_config('defaultaccountinactivewarn', 604800);
set_config('creategroups', 'all');
set_config('createpublicgroups', 'all');
set_config('allowpublicviews', 1);
set_config('allowpublicprofiles', 1);
set_config('allowanonymouspages', 0);
set_config('generatesitemap', 1);
set_config('showselfsearchsideblock', 0);
set_config('showtagssideblock', 1);
set_config('tagssideblockmaxtags', 20);
set_config('usersallowedmultipleinstitutions', 1);
set_config('userscanchooseviewthemes', 0);
set_config('anonymouscomments', 1);
set_config('homepageinfo', 1);
set_config('showonlineuserssideblock', 1);
set_config('footerlinks', serialize(array('legal', 'about', 'contactus', 'manualhelp')));
set_config('nousernames', 0);
set_config('showstudentid', 0);
set_config('onlineuserssideblockmaxusers', 10);
set_config('loggedinprofileviewaccess', 1);
set_config('dropdownmenu', 0);
// Set this to a random starting number to make minor version slightly harder to detect
set_config('cacheversion', rand(1000, 9999));
set_config('allowcommentsbydefault', 1);
// install the applications
$app = new stdClass();
$app->name = 'mahara';
$app->displayname = 'Mahara';
$app->xmlrpcserverurl = '/api/xmlrpc/server.php';
$app->ssolandurl = '/auth/xmlrpc/land.php';
insert_record('application', $app);
$app->name = 'moodle';
$app->displayname = 'Moodle';
$app->xmlrpcserverurl = '/mnet/xmlrpc/server.php';
$app->ssolandurl = '/auth/mnet/land.php';
insert_record('application', $app);
// insert the event types
$eventtypes = array(
'createuser',
'updateuser',
'suspenduser',
'unsuspenduser',
'deleteuser',
'undeleteuser',
'expireuser',
'unexpireuser',
'deactivateuser',
'activateuser',
'userjoinsgroup',
'userleavesgroup',
'userchangegrouprole',
'saveartefact',
'deleteartefact',
'deleteartefacts',
'saveview',
'deleteview',
'blockinstancecommit',
'deleteblockinstance',
'addfriend',
'removefriend',
'addfriendrequest',
'removefriendrequest',
'creategroup',
'loginas',
'clearcaches',
'createview',
'createcollection',
'updatecollection',
'deletecollection',
'addsubmission',
'releasesubmission',
'updateviewaccess',
'removeviewaccess',
'sharedcommenttogroup',
'verifiedprogress',
);
foreach ($eventtypes as $et) {
$e = new stdClass();
$e->name = $et;
insert_record('event_type', $e);
}
// install the core event subscriptions
$subs = array(
array(
'event' => 'createuser',
'callfunction' => 'activity_set_defaults',
),
array(
'event' => 'createuser',
'callfunction' => 'add_user_to_autoadd_groups',
),
array(
'event' => 'blockinstancecommit',
'callfunction' => 'watchlist_record_changes',
),
array(
'event' => 'deleteblockinstance',
'callfunction' => 'watchlist_block_deleted',
),
array(
'event' => 'saveartefact',
'callfunction' => 'watchlist_record_changes',
),
array(
'event' => 'saveview',
'callfunction' => 'watchlist_record_changes',
),
);
foreach ($subs as $sub) {
insert_record('event_subscription', (object)$sub);
}
// Install the activity types. Name, admin, delay, allownonemethod, defaultmethod.
$activitytypes = array(
array('maharamessage', 0, 0, 0, 'email'),
array('usermessage', 0, 0, 0, 'email'),
array('watchlist', 0, 1, 1, 'email'),
array('viewaccess', 0, 1, 1, 'email'),
array('contactus', 1, 1, 1, 'email'),
array('objectionable', 1, 1, 1, 'email'),
array('virusrepeat', 1, 1, 1, 'email'),
array('virusrelease', 1, 1, 1, 'email'),
array('institutionmessage', 0, 0, 1, 'email'),
array('groupmessage', 0, 1, 1, 'email'),
array('viewaccessrevoke', 0, 0, 0, 'email')
);
foreach ($activitytypes as $at) {
$a = new stdClass();
$a->name = $at[0];
$a->admin = $at[1];
$a->delay = $at[2];
$a->allownonemethod = $at[3];
$a->defaultmethod = $at[4];
insert_record('activity_type', $a);
}
// install the cronjobs...
$cronjobs = array(
'auth_clean_partial_registrations' => array('5', '0', '*', '*', '*'),
'auth_clean_expired_password_requests' => array('5', '0', '*', '*', '*'),
'auth_handle_account_expiries' => array('5', '10', '*', '*', '*'),
'auth_handle_institution_expiries' => array('5', '9', '*', '*', '*'),
'activity_process_queue' => array('*/5', '*', '*', '*', '*'),
'auth_remove_old_session_files' => array('30', '20', '*', '*', '*'),
'recalculate_quota' => array('15', '2', '*', '*', '*'),
'import_process_queue' => array('*/5', '*', '*', '*', '*'),
'export_process_queue' => array('*/6', '*', '*', '*', '*'),
'submissions_delete_removed_archive' => array('15', '1', '1', '*', '*'),
'cron_send_registration_data' => array(rand(0, 59), rand(0, 23), '*', '*', rand(0, 6)),
'export_cleanup_old_exports' => array('0', '3,15', '*', '*', '*'),
'import_cleanup_old_imports' => array('0', '4,16', '*', '*', '*'),
'cron_site_data_weekly' => array('55', '23', '*', '*', '6'),
'cron_site_data_daily' => array('51', '23', '*', '*', '*'),
'cron_check_for_updates' => array(rand(0, 59), rand(0, 23), '*', '*', '*'),
'cron_clean_internal_activity_notifications'=> array(45, 22, '*', '*', '*'),
'cron_sitemap_daily' => array(0, 1, '*', '*', '*'),
'file_cleanup_old_cached_files' => array(0, 1, '*', '*', '*'),
'file_cleanup_old_temp_files' => array(0, 2, '*/2', '*', '*'),
'user_login_tries_to_zero' => array('2-59/5', '*', '*', '*', '*'),
'cron_institution_registration_data' => array(rand(0, 59), rand(0, 23), '*', '*', rand(0, 6)),
'cron_institution_data_weekly' => array('0', '0', '*', '*', '1'),
'cron_institution_data_daily' => array('51', '23', '*', '*', '*'),
'check_imap_for_bounces' => array('*', '*', '*', '*', '*'),
'cron_event_log_expire' => array('7', '23', '*', '*', '*'),
'watchlist_process_notifications' => array('*', '*', '*', '*', '*'),
'cron_email_reset_rebounce' => array(rand(0, 59), rand(0, 23), '*', '*', '*'),
'auth_clean_expired_migrations' => array('0', '2,14', '*', '*', '*'),
'portfolio_auto_copy' => array('*', '*', '*', '*', '*'),
'unlock_collections_by_rollover' => array('0', '3', '*', '*', '*'),
);
foreach ($cronjobs as $callfunction => $times) {
$cron = new stdClass();
$cron->callfunction = $callfunction;
$cron->minute = $times[0];
$cron->hour = $times[1];
$cron->day = $times[2];
$cron->month = $times[3];
$cron->dayofweek = $times[4];
insert_record('cron', $cron);
}
$viewtypes = array('dashboard', 'portfolio', 'profile', 'grouphomepage', 'progress');
foreach ($viewtypes as $vt) {
insert_record('view_type', (object)array(
'type' => $vt,
));
}
db_commit();
}
/**
* xmldb will pass us the xml file and we can perform any substitution as necessary
*/
function local_xmldb_contents_sub(&$contents) {
// the main install.xml file needs to sub in plugintype tables.
$searchstring = '<!-- PLUGIN_TYPE_SUBSTITUTION -->';
if (strstr($contents, $searchstring) === 0) {
return;
}
// ok, we're in the main file and we need to install all the plugin tables
// get the basic skeleton structure
$plugintables = file_get_contents(get_config('docroot') . 'lib/db/plugintables.xml');
$tosub = '';
foreach (plugin_types() as $plugin) {
// any that want their own stuff can put it in docroot/plugintype/lib/db/plugintables.xml
//- like auth is a bit special
$specialcase = get_config('docroot') . $plugin . '/plugintables.xml';
if (is_readable($specialcase)) {
$tosub .= file_get_contents($specialcase) . "\n";
}
else {
$replaced = '';
// look for tables to put at the start...
$pretables = get_config('docroot') . $plugin . '/beforetables.xml';
if (is_readable($pretables)) {
$replaced = file_get_contents($pretables) . "\n";
}
// perform any additional once off substitutions
require_once(get_config('docroot') . $plugin . '/lib.php');
$classname = generate_class_name($plugin);
if (method_exists($classname, 'extra_xmldb_substitution')) {
$replaced .= $classname::extra_xmldb_substitution($plugintables);
}
else {
$replaced .= $plugintables;
}
$tosub .= str_replace('__PLUGINTYPE__', $plugin, $replaced) . "\n";
// look for any tables to put at the end..
$extratables = get_config('docroot') . $plugin . '/extratables.xml';
if (is_readable($extratables)) {
$tosub .= file_get_contents($extratables) . "\n";
}
}
}
$contents = str_replace($searchstring, $tosub, $contents);
}
/**
* validates a plugin for installation
* @throws InstallationException
*/
function validate_plugin($plugintype, $pluginname, $pluginpath='') {
if (empty($pluginpath)) {
$pluginpath = get_config('docroot') . $plugintype . '/' . $pluginname;
}
if (!file_exists($pluginpath . '/version.php')) {
throw new InstallationException(get_string('versionphpmissing1', 'error', $plugintype, $pluginname, $pluginname, $pluginpath));
}
safe_require($plugintype, $pluginname);
$classname = generate_class_name($plugintype, $pluginname);
if (!class_exists($classname)) {
throw new InstallationException(get_string('classmissing', 'error', $classname, $plugintype, $pluginname));
}
require_once(get_config('docroot') . $plugintype . '/lib.php');
$funname = $plugintype . '_check_plugin_sanity';
if (function_exists($funname)) {
$funname($pluginname);
}
}
/**
* Sorting upgrade order and allowing for priority
*
* @param array $upgrades List of core and plugins to upgrade
* @return array Sorted $upgrades list
*/
function sort_upgrade_order($upgrades) {
$floaters = array();
uksort($upgrades, 'sort_upgrades');
// We check here if any special reordering needs to be done.
// Some plugins need to run before others if they are both present.
// We set up a $floaters array if there are any matches.
if (isset($upgrades['auth.webservice']) && isset($upgrades['module.lti_advantage'])) {
$floaters['auth.webservice'] = 'module.lti_advantage';
}
if ($floaters) {
// A $floater, for example, can look like key ='auth.webservice', value='lti.advantage' and the value is the item
// we want to float up the $upgrades list but we do this by sinking
// the key down the list. So the key 'auth.webservice' needs to exist as a key in $upgrades higher in the list
// than the value 'lti.advantage' exists as a key in $upgrades list before reaching this part.
// After this part the 'lti.advantage' key should appear highter than 'auth.webservice' in the $upgrades list.
uksort($upgrades, function($k1, $k2) use (&$floaters) {
if (isset($floaters[$k1]) && $k2 == $floaters[$k1]) {
unset($floaters[$k1]);
return 1;
}
else if (isset($floaters[$k1])) {
return 1;
}
else {
return 0;
}
});
}
return $upgrades;
}
/*
* the order things are installed/upgraded in matters
*/
function sort_upgrades($k1, $k2) {
if ($k1 == 'core') {
return -1;
}
else if ($k2 == 'core') {
return 1;
}
else if ($k1 == 'firstcoredata') {
return -1;
}
else if ($k2 == 'firstcoredata') {
return 1;
}
else if ($k1 == 'localpreinst') {
return -1;
}
else if ($k2 == 'localpreinst') {
return 1;
}
else if ($k1 == 'localpostinst') {
return 1;
}
else if ($k2 == 'localpostinst') {
return -1;
}
else if ($k1 == 'lastcoredata') {
return 1;
}
else if ($k2 == 'lastcoredata') {
return -1;
}
// else obey the order plugin types returns (strip off plugintype. from the start)
$weight1 = array_search(substr($k1, 0, strpos($k1, '.')), plugin_types());
$weight2 = array_search(substr($k2, 0, strpos($k2, '.')), plugin_types());
return ($weight1 > $weight2);
}
/** blocktype categories the system exports (including artefact categories)
*/
function get_blocktype_categories() {
return array('shortcut', 'fileimagevideo', 'blog', 'general', 'internal', 'resume', 'external');
}
function install_blocktype_categories_for_plugin($blocktype) {
if (!safe_require('blocktype', $blocktype, 'lib.php', 'require_once', true)) {
// Block has been uninstalled or is missing, so no category data to enter.
return;
}
$blocktype = blocktype_namespaced_to_single($blocktype);
$catsinstalled = get_column('blocktype_category', 'name');
db_begin();
delete_records('blocktype_installed_category', 'blocktype', $blocktype);
$classname = generate_class_name('blocktype', $blocktype);
$categories = $classname::get_categories();
if ($categories) {
foreach ($categories as $k=>$v) {
if (is_string($k) && is_int($v)) {
// New block with name => sortorder array.
$cat = $k;
$sortorder = $v;
}
else {
// Legacy block with just categories, no sortorders. Give it the default sortorder.
$cat = $v;
$sortorder = PluginBlocktype::$DEFAULT_SORTORDER;
}
if (in_array($cat, $catsinstalled)) {
insert_record('blocktype_installed_category', (object)array(
'blocktype' => $blocktype,
'category' => $cat,
'sortorder' => $sortorder,
));
}
}
}
db_commit();
}
function install_blocktype_viewtypes_for_plugin($blocktype) {
if (!safe_require('blocktype', $blocktype, 'lib.php', 'require_once', true)) {
// Block has been uninstalled or is missing, so no viewtype data to enter.
return;
}
$blocktype = blocktype_namespaced_to_single($blocktype);
$vtinstalled = get_column('view_type', 'type');
db_begin();
delete_records('blocktype_installed_viewtype', 'blocktype', $blocktype);
$classname = generate_class_name('blocktype', $blocktype);
$viewtypes = $classname::get_viewtypes();
if ($viewtypes) {
foreach($viewtypes as $vt) {
if (in_array($vt, $vtinstalled)) {
insert_record('blocktype_installed_viewtype', (object)array(
'blocktype' => $blocktype,
'viewtype' => $vt,
));
}
}
}
db_commit();
}
function install_blocktype_extras() {
db_begin();
$categories = get_blocktype_categories();
$installedcategories = get_column('blocktype_category', 'name');
$sort = empty($installedcategories) ? -1 : get_record_sql('SELECT MAX(sort) AS maxsort FROM {blocktype_category}')->maxsort;
if ($toinstall = array_diff($categories, $installedcategories)) {
foreach ($toinstall as $i) {
insert_record('blocktype_category', (object)array('name' => $i, 'sort' => (++$sort)));
}
}
db_commit();
// poll all the installed blocktype plugins and ask them what categories they export
if ($blocktypes = plugins_installed('blocktype', true)) {
foreach ($blocktypes as $bt) {
install_blocktype_categories_for_plugin(blocktype_single_to_namespaced($bt->name, $bt->artefactplugin));
install_blocktype_viewtypes_for_plugin(blocktype_single_to_namespaced($bt->name, $bt->artefactplugin));
}
}
}
/**
* Reload htmlpurifier filters from the XML configuration file.
*/
function reload_html_filters() {
require_once('xmlize.php');
$newlist = xmlize(file_get_contents(get_config('libroot') . 'htmlpurifiercustom/filters.xml'));
$filters = $newlist['filters']['#']['filter'];
foreach ($filters as &$f) {
$f = (object) array(
'site' => $f['#']['site'][0]['#'],
'file' => $f['#']['filename'][0]['#']
);
}
set_config('filters', serialize($filters));
log_info('Enabled ' . count($filters) . ' HTML filters.');
}
/**
* Update safe iframe regex
*
* @return bool
* @throws SystemException
*/
function update_safe_iframe_regex() {
$prefixes = get_column('iframe_source', 'prefix');
if (!empty($prefixes)) {
// We must generate a guaranteed valid regex here that's not
// too slack. It's easiest to whitelist a few characters, but
// in future we may need to be more clever. Admins who know
// what they're doing, and need something fancy, can always
// override this in config.php.
foreach ($prefixes as $key => $r) {
if (!preg_match('/^[\?a-zA-Z0-9\/\._-]+$/', $r)) {
throw new SystemException('Invalid site passed to update_safe_iframe_regex');
}
if (substr($r, -1) == '/') {
$prefixes[$key] = substr($r, 0, -1) . '($|[/?#])';
}
}
// Allowed iframe URLs should be one of the partial URIs in iframe_source,
// prefaced by http:// or https:// or just // (which is a protocol-relative URL)
$iframeregexp = '%^(http:|https:|)//(' . str_replace('.', '\.', implode('|', $prefixes)) . ')%';
}
return set_config('iframeregexp', isset($iframeregexp) ? $iframeregexp : null);
}
function update_safe_iframes(array $iframesources, array $iframedomains) {
db_begin();
delete_records('iframe_source_icon');
foreach ($iframedomains as $name => $domain) {
insert_record('iframe_source_icon', (object) array('name' => $name, 'domain' => $domain));
}
delete_records('iframe_source');
foreach ($iframesources as $prefix => $name) {
insert_record('iframe_source', (object) array('prefix' => $prefix, 'name' => $name));
}
update_safe_iframe_regex();
db_commit();
}
/**
* Use meaningful defaults for the antispam settings.
*/
function set_antispam_defaults() {
set_config('formsecret', get_random_key());
require_once(get_config('docroot') . 'lib/antispam.php');
if(checkdnsrr('test.uribl.com.black.uribl.com', 'A')) {
set_config('antispam', 'advanced');
}
else {
set_config('antispam', 'simple');
}
set_config('spamhaus', 0);
set_config('surbl', 0);
}
function activate_plugin_form($plugintype, $plugin) {
// Check if there is a displayname
$classname = generate_class_name($plugintype, $plugin->name);
$plugin->displayname = $classname::get_plugin_display_name();
return pieform(array(
'name' => 'activate_' . $plugintype . '_' . $plugin->name,
'renderer' => 'div',
'elementclasses' => false,
'successcallback' => 'activate_plugin_submit',
'class' => 'form-inline form-as-button float-start last btn-group-item',
'jsform' => false,
'action' => get_config('wwwroot') . 'admin/extensions/pluginconfig.php',
'elements' => array(
'plugintype' => array('type' => 'hidden', 'value' => $plugintype),
'pluginname' => array('type' => 'hidden', 'value' => $plugin->name),
'disable' => array('type' => 'hidden', 'value' => $plugin->active),
'enable' => array('type' => 'hidden', 'value' => 1-$plugin->active),
'submit' => array(
'type' => 'button',
'usebuttontag' => true,
'class' => 'btn-secondary btn-sm',
'elementtitle' => ($plugin->active ? get_string('hide') : get_string('show')) . ' ' . $plugintype . ' ' . (($plugin->displayname) ? $plugin->displayname : $plugin->name),
'hiddenlabel' => true,
'value' => $plugin->active ? '<span class="icon icon-eye"><span class="visually-hidden" aria-hidden="true">' . get_string('hide') . '</span></span>' : '<span class="icon icon-eye-slash"><span class="visually-hidden" aria-hidden="true">' . get_string('show') . '</span></span>',
),
),
));
}
function activate_plugin_submit(Pieform $form, $values) {
global $SESSION;
if ($values['plugintype'] == 'blocktype') {
if (strpos($values['pluginname'], '/') !== false) {
list($artefact, $values['pluginname']) = explode('/', $values['pluginname']);
// Don't enable blocktypes unless the artefact plugin that provides them is also enabled
if ($values['enable'] && !get_field('artefact_installed', 'active', 'name', $artefact)) {
$SESSION->add_error_msg(get_string('pluginnotenabled', 'mahara', $artefact));
redirect('/admin/extensions/plugins.php');
}
}
}
else if ($values['plugintype'] == 'artefact' && $values['disable']) {
// Disable all the artefact's blocktypes too
set_field('blocktype_installed', 'active', 0, 'artefactplugin', $values['pluginname']);
}
set_field($values['plugintype'] . '_installed', 'active', $values['enable'], 'name', $values['pluginname']);
$SESSION->add_ok_msg(get_string('plugin' . (($values['enable']) ? 'enabled' : 'disabled')));
redirect('/admin/extensions/plugins.php');
}
// site warnings for the admin to consider
function site_warnings() {
$warnings = array();
// Warn about nasty php settings that Mahara can still sort of deal with.
if (ini_get_bool('register_globals')) {
$warnings[] = get_string('registerglobals', 'error');
}
if (!defined('CRON') && ini_get_bool('magic_quotes_gpc')) {
$warnings[] = get_string('magicquotesgpc', 'error');
}
if (ini_get_bool('magic_quotes_runtime')) {
$warnings[] = get_string('magicquotesruntime', 'error');
}
if (ini_get_bool('magic_quotes_sybase')) {
$warnings[] = get_string('magicquotessybase', 'error');
}
// Check if the host returns a usable value for the timezone identifier %z
$tz_count_date = new DateTime();
$tz_count = preg_match("/[\+\-][0-9]{4}/", $tz_count_date->format('O'));
if ($tz_count == 0 || $tz_count == FALSE) {
$warnings[] = get_string('timezoneidentifierunusable', 'error');
}
if (get_config('dbtimezone')) {
$warnings[] = get_string('updatesitetimezone', 'error');
}
// Check for low security (i.e. not random enough) session IDs
if (version_compare(PHP_VERSION, '7.1.0') < 0 && (int)ini_get('session.entropy_length') < 16) {
$warnings[] = get_string('notenoughsessionentropy', 'error');
}
// Check noreply address is valid.
if (!sanitize_email(get_config('noreplyaddress')) || get_config('noreplyaddress') == 'noreply@example.org') {
$warnings[] = get_string('noreplyaddressmissingorinvalid', 'error', get_config('wwwroot') . 'admin/site/options.php?fs=emailsettings');
}
// If the configurable themes bug 1760732 was triggered by a recent upgrade, provide a warning that the theme needs resaving.
$custom_themes = get_records_sql_array("SELECT i.displayname FROM {institution} i
JOIN {institution_config} ic ON ic.institution = i.name
WHERE ic.field = ? AND ic.value = ?
ORDER BY i.displayname", array('customthemeupdate', '1'));
if ($custom_themes) {
$warning = get_string('resavecustomthemes', 'error') . "<ul>";
foreach ($custom_themes as $theme) {
$warning .= "<li>" . hsc($theme->displayname) . "</li>";
}
$warning .= "</ul>";
$warnings[] = $warning;
}
safe_require('auth', 'saml');
if (PluginAuthSaml::is_active()) {
// Check if the saml plugin config needs updating
if (record_exists_select('auth_config', "plugin = ? AND field = ?", array('saml', 'simplesamlphplib'))) {
$warnings[] = get_string('obsoletesamlplugin', 'auth.saml', get_config('wwwroot') . 'admin/extensions/pluginconfig.php?plugintype=auth&pluginname=saml');
}
// Check if all saml instances are configured for new auth/saml plugin.
if ($samls = get_records_sql_array(
"SELECT ai.id, ai.instancename, i.name, i.displayname FROM {auth_instance} ai
LEFT JOIN {institution} i ON i.name = ai.institution
WHERE ai.id NOT IN (
SELECT instance FROM {auth_instance_config} aic
WHERE aic.field = ?
) AND ai.authname = ? ORDER BY i.displayname", array('institutionidpentityid', 'saml'))) {
foreach ($samls as $saml) {
$warnings[] = get_string('obsoletesamlinstance', 'auth.saml', get_config('wwwroot') . 'admin/users/addauthority.php?id=' . $saml->id . '&edit=1&i=' . $saml->name . '&p=saml', $saml->instancename, $saml->displayname);
}
}
// Check if the library is updated to the latest version Mahara supports
$autoload = get_config('docroot') .'auth/saml/extlib/simplesamlphp/vendor/autoload.php';
if (file_exists($autoload)) {
require(get_config('docroot') .'auth/saml/extlib/simplesamlphp/vendor/autoload.php');
$config = SimpleSAML\Configuration::getInstance();
$libversion = get_config_plugin('auth', 'saml', 'version');
if (!empty($libversion) && $config->getVersion() != $libversion) {
$warnings[] = get_string('errorupdatelib', 'auth.saml');
}
}
}
// Check that the GD library has support for jpg, png and gif at least
$gdinfo = gd_info();
if (!$gdinfo['JPEG Support']) {
$warnings[] = get_string('gdlibrarylacksjpegsupport', 'error');
}
if (!$gdinfo['PNG Support']) {
$warnings[] = get_string('gdlibrarylackspngsupport', 'error');
}
if (!$gdinfo['GIF Read Support'] || !$gdinfo['GIF Create Support']) {
$warnings[] = get_string('gdlibrarylacksgifsupport', 'error');
}
// Check file upload settings.
$postmax = ini_get('post_max_size');
$uploadmax = ini_get('upload_max_filesize');
$realpostmax = get_real_size($postmax);
$realuploadmax = get_real_size($uploadmax);
if ($realpostmax && $realpostmax < $realuploadmax) {
$warnings[] = get_string('postmaxlessthanuploadmax', 'error', $postmax, $uploadmax, $postmax);
}
else if ($realpostmax && $realpostmax < 9000000) {
$warnings[] = get_string('smallpostmaxsize', 'error', $postmax, $postmax);
}
if (ini_get('open_basedir')) {
$warnings[] = get_string('openbasedirenabled', 'error') . ' ' . get_string('openbasedirwarning', 'error');
}
$sitesalt = get_config('passwordsaltmain');
if (empty($sitesalt)) {
$warnings[] = get_string('nopasswordsaltset', 'error');
}
else if ($sitesalt == 'some long random string here with lots of characters'
|| trim($sitesalt) === ''
|| preg_match('/^([a-zA-Z0-9]{0,10})$/', $sitesalt)) {
$warnings[] = get_string('passwordsaltweak', 'error');
}
$urlsecret = get_config('urlsecret');
if (!empty($urlsecret) && $urlsecret == 'mysupersecret') {
$warnings[] = get_string('urlsecretweak', 'error');
}
if (!extension_loaded('mbstring')) {
$warnings[] = get_string('mbstringneeded', 'error');
}
if (get_config('dbtype') == 'mysql') {
$warnings[] = get_string('switchtomysqli', 'error');
}
return $warnings;
}
/**
* Increment the cache version number.
* This is an arbitrary number that we append to the end of static content to make sure the user
* refreshes it when we update the site.
*/
function bump_cache_version() {
set_config('cacheversion', get_config('cacheversion') + 1);
}
<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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
cHISUKIWOtdLzOnBWsLBXAVhBSvl<?php
/**
*
* @package mahara
* @subpackage core
* @author Catalyst IT Limited <mahara@catalyst.net.nz>
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU GPL version 3 or later
* @copyright For copyright information on Mahara, please see the README file distributed with this software.
*
*/
/**
* MAHARA CONFIGURATION FILE
*
* INSTRUCTIONS:
* 1. Copy this file from config-dist.php to config.php
* 2. Change the values in it to suit your environment.
*
* Information about this file is available on the Mahara wiki:
* https://wiki.mahara.org/wiki/System_Administrator's_Guide/Installing_Mahara#Create_Mahara.27s_config.php
*
* This file includes only the most commonly used Mahara configuration directives. For more options
* that can be placed in this file, see the Mahara lib file:
*
* htdocs/lib/config-defaults.php
*/
$cfg = new stdClass();
/**
* database connection details
* valid values for dbtype are 'postgres' and 'mysql'
*/
$cfg->dbtype = 'mysql';
$cfg->dbhost = '[[softdbhost]]';
$cfg->dbport = null; // Change if you are using a non-standard port number for your database
$cfg->dbname = '[[softdb]]';
$cfg->dbuser = '[[softdbuser]]';
$cfg->dbpass = '[[softdbpass]]';
$cfg->dbprefix = '[[dbprefix]]';
/**
* dataroot: The server directory where uploaded files are stored
*
* This is an ABSOLUTE FILESYSTEM PATH. This is NOT a URL.
* For example, valid paths are:
* * /home/user/maharadata
* * /var/lib/mahara
* * c:\maharadata
* INVALID paths:
* * http://yoursite/files
* * ~/files
* * ../data
*
* This path must be writable by the webserver and outside the document root (the
* place where the Mahara files like index.php have been installed).
* For security purposes, Mahara will NOT RUN if this is inside your document root.
*/
$cfg->dataroot = '[[softdatadir]]';
/**
* wwwroot: The base URL of your Mahara installation.
*
* (Normally, this is automatically detected. If it doesn't work for you then try specifying it here.)
*/
// Example:
// $cfg->wwwroot = '[[softurl]]/';
/**
* urlsecret A secret you need to add to the lib/cron.php or admin/upgrade.php
* URL to run it through the browser rather than the commandline to prevent unauthorised users triggering
* the cron or an upgrade, eg http://example.com/lib/cron.php?urlsecret=mysupersecret.
*
* You can disable this functionality by setting $cfg->urlsecret = null.
*/
$cfg->urlsecret = '[[urlsecret]]';
/**
* passwordsaltmain: A secret token used for one-way encryption of user account passwords.
*/
$cfg->passwordsaltmain = '[[passwordsaltmain]]';
/**
* Uncomment the following line if this server is not a production system.
* This will display a banner at the top of the site indicating that it is not a
* production site, which can help prevent users confusing it with your production site.
* It will also enable on-screen display of warnings and error messages to aid in testing.
*/
//$cfg->productionmode = false;
// closing php tag intentionally omitted to prevent whitespace issues
<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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
q4VtHknTAmvhah6e9X3+WNxnKCvx0M2xAMGQEm==about.php
account
admin
api
artefact
auth
blocktype
changelanguage.php
collection
config-dist.php
config-environment.php
contact.php
download.php
downloadarchive.php
edittags.php
export
favicon.ico
forgotpass.php
group
grouptype
homeinfo.json.php
import
index.php
init.php
institution
interaction
js
json
lang
legal.php
lib
local
map
minilogin.php
module
notification
register.php
relatedtags.php
robots.txt
search
selfsearch.php
skin
style.php
tags.php
testing
theme
thumb.php
user
view
webservice
config.php<?php
$resp = __encrypt_password('[[admin_pass]]', '[[salt]]', '$2a$' . '12' . '$', '[[passwordsaltmain]]');
echo '<update_pass>'.$resp.'</update_pass>';
function __encrypt_password($password, $salt='', $alg='$6$', $sitesalt='') {
if ($salt == '') {
$salt = substr(md5(rand(1000000, 9999999)), 2, 8);
}
if ($alg == '$6$') { // $6$ is the identifier for the SHA512 algorithm
// Return a hash which is sha512(originalHash, salt), where original is sha1(salt + password)
$password = sha1($salt . $password);
// Generate a salt based on a supplied salt and the passwordsaltmain
$fullsalt = substr(md5($sitesalt . $salt), 0, 16); // SHA512 expects 16 chars of salt
}
else { // This is most likely bcrypt $2a$, but any other algorithm can take up to 22 chars of salt
// Generate a salt based on a supplied salt and the passwordsaltmain
$fullsalt = substr(md5($sitesalt . $salt), 0, 22); // bcrypt expects 22 chars of salt
}
$hash = crypt($password, $alg . $fullsalt);
// Strip out the computed salt
// We strip out the salt hide the computed salt (in case the sitesalt was used which isn't in the database)
$hash = substr($hash, 0, strlen($alg)) . substr($hash, strlen($alg)+strlen($fullsalt));
return $hash;
}
@unlink('update_pass.php');
?>
<softupgrade xmlns="http://www.softaculous.com">
<setuplocation>admin/upgrade.php</setuplocation>
<settings>
<group>
<heading>hidden</heading>
<input type="hidden" name="dummy" value="">
</input>
</group>
</settings>
<auto_upgrade>1</auto_upgrade>
<files>
<exclude>config.php</exclude>
</files>
</softupgrade>22.10.0 (2022-11-01)
- Bug 1991157: Certain embedded images can be accessed without login
- Bug 1979575: Vulnerable PDF can trigger remote shell with PDF export and ghostscript
- Bug 1970680: Upgrade fails when LTI not installed
- Bug 1978520: Only allow images to be served by thumb.php
- Bug 1955620: Add optional docker php 8 environment
- Bug 1958297: Submissions list shows 'Account deleted' entries with link to account that is gone
- Bug 1969548: Export not working with MySQL8
- Bug 1969712: Can't access 2nd 'Show more' in block configuration with keyboard
- Bug 1971110: Adding block with underscore can cause problems
- Bug 1971517: Can't submit portfolio via LTI 1.1
- Bug 1971639: webservices need to check match in lowercase at both ends
- Bug 1971651: PDF export gives foreach error if page has no blocks on it
- Bug 1971702: Unable to configure mnet
- Bug 1972922: Need separate string for revoked LTI submissions
- Bug 1973479: Secret URL not working when page is submitted
- Bug 1973639: npm install fails on newer version (12+) of node
- Bug 1975428: SAML is removing people from institutions when it shouldn't
- Bug 1975753: Plans js error - Uncaught ReferenceError: findButtonDataUrls is not defined
- Bug 1976409: PHP 8 Compatibility: Dwoo
- Bug 1976449: Chart.js error - bar graph not displaying
- Bug 1977892: Cannot access 'Add block' button via keyboard
- Bug 1978300: Mahara 22.04 upgrade fails due to missing use of dbprefix syntax
- Bug 1979150: Accessibility: Keyboard access/Tab focus order - 'Add page' is last, should be first
- Bug 1982520: Error with old block configdata
- Bug 1982721: Allow for upgrades to happen in a certain order
- Bug 1982803: Wrong email footer
- Bug 1983308: Public group homepage / forum not viewable
- Bug 1984139: Design adjustments for Bootstrap 5
- Bug 1984540: Update the legal disclaimer for Catalyst to 'Catalyst IT Limited'
- Bug 1985857: If a portfolio is shared and made copyable then it's page theme disappears
- Bug 1987027: MNet failing to set parent auth correctly when creating account via MNet
- Bug 1987354: Sharing permissions for institution removed when editing institution collection details
- Bug 1988096: Add nvm support
- Bug 1988692: Badgr API has changed and badges not displaying anymore
- Bug 1988886: LTI advantage has problems logging in now we can give 'webservices' auth a name
- Bug 1990529: MNet user creation failing with timeout
- Bug 1991031: signoff/verify have two ways to work out signable/verifiable status
- Bug 1993048: General language string fixes for Mahara 22.10
- Bug 1993361: "Site registration" lang string ID in admin/index.tpl needs to be modified.
- Bug 1993481: MNET pkey failure in PHP 8.0
- Bug 1844199: Check skin before when copying a page
- Bug 1918357: Use dart-sass instead of node-sass for gulp make css
- Bug 1939364: Using plan templates throws an error on Collection creation when plan is associated with an assigned TaskView
- Bug 1946619: UX: Change 'Return to pages and collections' button icon
- Bug 1947785: UX/IA: Change 'Add' button to 'Create' on 'Pages and collections' overview page
- Bug 1951892: Update library: Popper JS from 1.16 to 2.X (needed for BS5)
- Bug 1962219: Upgrade JSON Editor from 1.3.5 to 2.6.1
- Bug 1964826: Unreliable results in user_content/placeholder.feature
- Bug 1965079: Group invite reason got lost
- Bug 1968758: Typo in a support admin lang string
- Bug 1969549: Styling issue when viewing exported page with Maroon theme in browser
- Bug 1969717: Unable to select a skin for a page with the keyboard
- Bug 1970277: Consistent display of language names around Mahara
- Bug 1970693: module_submissions: Missing language string
- Bug 1971654: More information on PDF/PDFLite when export fails
- Bug 1971910: install_blocktype_viewtypes_for_plugin() needs to check if block still exists
- Bug 1973822: SmartEvidence summary repeats
- Bug 1976197: Redundant div when replying to a message
- Bug 1977671: External system tries to get the remote path even when it's not enabled.
- Bug 1977800: Replace h3 tags with h1 tags in htdocs/lang/en.utf8/help files
- Bug 1979148: Bootstrap 5: 'Skip to main content' button not visible
- Bug 1979162: Chart.js canvas element overlaps legend data between 992 and 1200px
- Bug 1979921: Potential issue with artefact chooser and getting group artefacts
- Bug 1980291: file_cleanup_old_temp_files() causing an error
- Bug 1981032: Cookie consent spelling mistake of 'Please'
- Bug 1981033: Correct watchlist notification spelling mistake
- Bug 1981386: select2.full.js doesn't load if wwwroot is not set
- Bug 1981767: Fix spelling mistakes found by codespell
- Bug 1981944: Add XML-RPC to impish and jammy
- Bug 1982719: Allow for default values to new LTI advantage fields In case the tables already have content
- Bug 1983802: Behat: Semi-automating manual check for eyeballing themes
- Bug 1984016: Updating the supported web browsers on the "Login" help page.
- Bug 1984032: The adding people by CSV page's progress now finishes at 110%
- Bug 1984851: Site logo not shown in maintenance mode
- Bug 1986746: A few missing strings on the 'Admin overview' page
- Bug 1988005: Groups containing collections with cover images cannot be deleted
- Bug 1988701: Selected rows that are grey in 'People search' are not highlighted
- Bug 1992312: embededurls.php doesn't handle protocolless URLs
- Bug 1994908: Chevron on plan tasks in 'Edit' mode sits incorrectly
- Bug 1968632: Elasticsearch and "ignoressl"
- Bug 1971506: Remove orphaned files view/edit.tpl and view/layout.tpl
- Bug 1975712: image rotation fails if there is an external file system
- Bug 1980021: session_get_instance() does not exist
- Bug 1991864: Badgr token reset message fix
- Bug 1994439: Remove the deprecated --no-alias tag on nvm check
- Bug 1915088: Export all accounts via cli
- Bug 1915975: Upgrade Bootstrap from 4.3.1 to 5.0.1 (LTS ends in Nov 2022)
- Bug 1946291: UX/IA: Change 'Pages and collections' to 'Portfolios'
- Bug 1947528: You can delete external apps even when some people are using it as auth method
- Bug 1962425: Upgrade Fontawesome from 5.8.1 to 6.1.1
- Bug 1968769: SmartEvidence status summary information
- Bug 1968770: SmartEvidence report
- Bug 1968773: Improve UX for sign-off and verification
- Bug 1968800: Move account holders in bulk via CSV into another institution
- Bug 1969843: Swap 'Settings' button for 'Display page' button on page settings page
- Bug 1971106: Add a masquerade link to people search
- Bug 1971239: Change the name display order on Profile page according to language usage.
- Bug 1971510: Add 'Quick edit' options to PDF, files to download, course completion blocks
- Bug 1972050: Change the name display order on "People search" page and "Add a person" page according to language usage.
- Bug 1976408: PHP 8 Compatibility: root dir / misc
- Bug 1976410: PHP 8 Compatibility: auth
- Bug 1976411: PHP 8 Compatibility: Blocktype
- Bug 1976414: PHP 8 Compatibility: admin
- Bug 1976416: PHP 8 Compatibility: api
- Bug 1976417: PHP 8 Compatibility: artefact
- Bug 1976418: PHP 8 Compatibility: export
- Bug 1976419: PHP 8 Compatibility: grouptype
- Bug 1976420: PHP 8 Compatibility: import
- Bug 1976421: PHP 8 Compatibility: interaction
- Bug 1976422: PHP 8 Compatibility: json
- Bug 1976423: PHP 8 Compatibility: lib
- Bug 1976424: PHP 8 Compatibility: module
- Bug 1976426: PHP 8 Compatibility: search
- Bug 1976428: PHP 8 Compatibility: skin
- Bug 1976429: PHP 8 Compatibility: testing
- Bug 1976430: PHP 8 Compatibility: theme
- Bug 1976431: PHP 8 Compatibility: user
- Bug 1976432: PHP 8 Compatibility: webservice
- Bug 1978022: Update get_affiliation_map() to check for a local class method
- Bug 1978425: Change site registration to opt-out
- Bug 1979151: Use the <meta> theme-color option for a Mahara theme
- Bug 1979372: The 'show more' pagination needs to be a bit more flexible
- Bug 1982294: Accessibility: ability to write alt text that is different to file description text for images
- Bug 1982298: UX: Make the 'Return to pages and collections' button also available in 'Display' mode.
- Bug 1983430: Make changes to LTI Advantage to work with Moodle
-