2020-08-17 19:16:42 -04:00

310 lines
13 KiB
PHP
Executable File

<?php
// addnews ready
// translator ready
// mail ready
require_once("common.php");
require_once("lib/http.php");
require_once("lib/sanitize.php");
check_su_access(SU_MANAGE_MODULES);
tlschema("modulemanage");
page_header("Module Manager");
require_once("lib/superusernav.php");
superusernav();
addnav("Module Categories");
addnav("",$REQUEST_URI);
$op = httpget('op');
$module = httpget('module');
if ($op == 'mass'){
if (httppost("activate")) $op = "activate";
if (httppost("deactivate")) $op = "deactivate";
if (httppost("uninstall")) $op = "uninstall";
if (httppost("reinstall")) $op = "reinstall";
if (httppost("install")) $op = "install";
$module = httppost("module");
}
$theOp = $op;
if (is_array($module)){
$modules = $module;
}else{
if ($module) $modules = array($module);
else $modules = array();
}
reset($modules);
while (list($key,$module)=each($modules)){
$op = $theOp;
output("`2Performing `^%s`2 on `%%s`0`n", translate_inline($op), $module);
if($op=="install"){
if (install_module($module)){
}else{
httpset('cat','');
}
$op="";
httpset('op', "");
}elseif($op=="uninstall"){
if (uninstall_module($module)) {
} else {
output("Unable to inject module. Module not uninstalled.`n");
}
$op="";
httpset('op', "");
}elseif($op=="activate"){
activate_module($module);
$op="";
httpset('op', "");
invalidatedatacache("inject-$module");
}elseif($op=="deactivate"){
deactivate_module($module);
$op="";
httpset('op', "");
invalidatedatacache("inject-$module");
}elseif($op=="reinstall"){
$sql = "UPDATE " . db_prefix("modules") . " SET filemoddate='0000-00-00 00:00:00' WHERE modulename='$module'";
db_query($sql);
// We don't care about the return value here at all.
injectmodule($module, true);
$op="";
httpset('op', "");
invalidatedatacache("inject-$module");
}
}
$install_status = get_module_install_status();
$uninstmodules = $install_status['uninstalledmodules'];
$seencats = $install_status['installedcategories'];
$ucount = $install_status['uninstcount'];
ksort($seencats);
addnav(array(" ?Uninstalled - (%s modules)", $ucount), "modules.php");
reset($seencats);
foreach ($seencats as $cat=>$count) {
addnav(array(" ?%s - (%s modules)", $cat, $count), "modules.php?cat=$cat");
}
$cat = httpget('cat');
if ($op==""){
if ($cat) {
$sortby=httpget('sortby');
if (!$sortby) $sortby="installdate";
$order=httpget('order');
$tcat = translate_inline($cat);
output("`n`b%s Modules`b`n", $tcat);
$deactivate = translate_inline("Deactivate");
$activate = translate_inline("Activate");
$uninstall = translate_inline("Uninstall");
$reinstall = translate_inline("Reinstall");
$strsettings = translate_inline("Settings");
$strnosettings = translate_inline("`\$No Settings`0");
$uninstallconfirm = translate_inline("Are you sure you wish to uninstall this module? All user preferences and module settings will be lost. If you wish to temporarily remove access to the module, you may simply deactivate it.");
$status = translate_inline("Status");
$mname = translate_inline("Module Name");
$ops = translate_inline("Ops");
$mauth = translate_inline("Module Author");
$inon = translate_inline("Installed On");
$installstr = translate_inline("by %s");
$active = translate_inline("`@Active`0");
$inactive = translate_inline("`\$Inactive`0");
rawoutput("<form action='modules.php?op=mass&cat=$cat' method='POST'>");
addnav("","modules.php?op=mass&cat=$cat");
rawoutput("<table border='0' cellpadding='2' cellspacing='1' bgcolor='#999999'>",true);
rawoutput("<tr class='trhead'><td>&nbsp;</td><td>$ops</td><td><a href='modules.php?cat=$cat&sortby=active&order=".($sortby=="active"?!$order:1)."'>$status</a></td><td><a href='modules.php?cat=$cat&sortby=formalname&order=".($sortby=="formalname"?!$order:1)."'>$mname</a></td><td><a href='modules.php?cat=$cat&sortby=moduleauthor&order=".($sortby=="moduleauthor"?!$order:1)."'>$mauth</a></td><td><a href='modules.php?cat=$cat&sortby=installdate&order=".($sortby=="installdate"?!$order:0)."'>$inon</a></td></tr>");
addnav("","modules.php?cat=$cat&sortby=active&order=".($sortby=="active"?!$order:1));
addnav("","modules.php?cat=$cat&sortby=formalname&order=".($sortby=="formalname"?!$order:1));
addnav("","modules.php?cat=$cat&sortby=moduleauthor&order=".($sortby=="moduleauthor"?!$order:1));
addnav("","modules.php?cat=$cat&sortby=installdate&order=".($sortby=="installdate"?$order:0));
$sql = "SELECT * FROM " . db_prefix("modules") . " WHERE category='$cat' ORDER BY ".$sortby." ".($order?"ASC":"DESC");
$result = db_query($sql);
if (db_num_rows($result)==0){
rawoutput("<tr class='trlight'><td colspan='6' align='center'>");
output("`i-- No Modules Installed--`i");
rawoutput("</td></tr>");
}
$number=db_num_rows($result);
for ($i=0;$i<$number;$i++){
$row = db_fetch_assoc($result);
rawoutput("<tr class='".($i%2?"trlight":"trdark")."'>",true);
rawoutput("<td nowrap valign='top'>");
rawoutput("<input type='checkbox' name='module[]' value=\"{$row['modulename']}\">");
rawoutput("</td><td valign='top' nowrap>[ ");
if ($row['active']){
rawoutput("<a href='modules.php?op=deactivate&module={$row['modulename']}&cat=$cat'>");
output_notl($deactivate);
rawoutput("</a>");
addnav("","modules.php?op=deactivate&module={$row['modulename']}&cat=$cat");
}else{
rawoutput("<a href='modules.php?op=activate&module={$row['modulename']}&cat=$cat'>");
output_notl($activate);
rawoutput("</a>");
addnav("","modules.php?op=activate&module={$row['modulename']}&cat=$cat");
}
rawoutput(" |<a href='modules.php?op=uninstall&module={$row['modulename']}&cat=$cat' onClick='return confirm(\"$uninstallconfirm\");'>");
output_notl($uninstall);
rawoutput("</a>");
addnav("","modules.php?op=uninstall&module={$row['modulename']}&cat=$cat");
rawoutput(" | <a href='modules.php?op=reinstall&module={$row['modulename']}&cat=$cat'>");
output_notl($reinstall);
rawoutput("</a>");
addnav("","modules.php?op=reinstall&module={$row['modulename']}&cat=$cat");
if ($session['user']['superuser'] & SU_EDIT_CONFIG) {
if (strstr($row['infokeys'], "|settings|")) {
rawoutput(" | <a href='configuration.php?op=modulesettings&module={$row['modulename']}'>");
output_notl($strsettings);
rawoutput("</a>");
addnav("","configuration.php?op=modulesettings&module={$row['modulename']}");
} else {
output_notl(" | %s", $strnosettings);
}
}
rawoutput(" ]</td><td valign='top'>");
output_notl($row['active']?$active:$inactive);
require_once("lib/sanitize.php");
rawoutput("</td><td nowrap valign='top'><span title=\"".
(isset($row['description'])&&$row['description']?
$row['description']:sanitize($row['formalname']))."\">");
output_notl("%s %s", $row['formalname'], $row['version']);
rawoutput("<br>");
output_notl("(%s) ", $row['modulename'], $row['version']);
rawoutput("</span></td><td valign='top'>");
output_notl("`#%s`0", $row['moduleauthor'], true);
rawoutput("</td><td nowrap valign='top'>");
$line = sprintf($installstr, $row['installedby']);
output_notl("%s", $row['installdate']);
rawoutput("<br>");
output_notl("%s", $line);
rawoutput("</td></tr>");
}
rawoutput("</table><br />");
$activate = translate_inline("Activate");
$deactivate = translate_inline("Deactivate");
$reinstall = translate_inline("Reinstall");
$uninstall = translate_inline("Uninstall");
rawoutput("<input type='submit' name='activate' class='button' value='$activate'>");
rawoutput("<input type='submit' name='deactivate' class='button' value='$deactivate'>");
rawoutput("<input type='submit' name='reinstall' class='button' value='$reinstall'>");
rawoutput("<input type='submit' name='uninstall' class='button' value='$uninstall'>");
rawoutput("</form>");
} else {
$sorting=httpget('sorting');
if (!$sorting) $sorting="shortname";
$order=httpget('order');
output("`bUninstalled Modules`b`n");
$install = translate_inline("Install");
$mname = translate_inline("Module Name");
$ops = translate_inline("Ops");
$mauth = translate_inline("Module Author");
$categ = translate_inline("Category");
$fname = translate_inline("Filename");
rawoutput("<form action='modules.php?op=mass&cat=$cat' method='POST'>");
addnav("","modules.php?op=mass&cat=$cat");
rawoutput("<table border='0' cellpadding='2' cellspacing='1' bgcolor='#999999'>",true);
rawoutput("<tr class='trhead'><td>&nbsp;</td><td>$ops</td><td><a href='modules.php?sorting=name&order=".($sorting=="name"?!$order:0)."'>$mname</a></td><td><a href='modules.php?sorting=author&order=".($sorting=="author"?!$order:0)."'>$mauth</a></td><td><a href='modules.php?sorting=category&order=".($sorting=="category"?!$order:0)."'>$categ</a></td><td><a href='modules.php?sorting=shortname&order=".($sorting=="shortname"?!$order:0)."'>$fname</a></td></tr>");
addnav("","modules.php?sorting=name&order=".($sorting=="name"?!$order:0));
addnav("","modules.php?sorting=author&order=".($sorting=="author"?!$order:0));
addnav("","modules.php?sorting=category&order=".($sorting=="category"?!$order:0));
addnav("","modules.php?sorting=shortname&order=".($sorting=="shortname"?!$order:0));
if (count($uninstmodules) > 0) {
$count = 0;
$moduleinfo=array();
$sortby=array();
$numberarray=array();
$invalidmodule = array(
"version"=>"",
"author"=>"",
"category"=>"",
"download"=>"",
"invalid"=>true,
);
foreach($uninstmodules as $key=>$shortname) {
//test if the file is a valid module or a lib file/whatever that got in, maybe even malcode that does not have module form
$shortnamelower = strtolower($shortname);
$file = strtolower(file_get_contents("modules/$shortname.php"));
if (strpos($file,$shortnamelower."_getmoduleinfo")===false ||
//strpos($file,$shortname."_dohook")===false ||
//do_hook is not a necessity
strpos($file,$shortnamelower."_install")===false ||
strpos($file,$shortnamelower."_uninstall")===false) {
//here the files has neither do_hook nor getinfo, which means it won't execute as a module here --> block it + notify the admin who is the manage modules section
$temp=array_merge($invalidmodule,array("name"=>$shortname.".php ".appoencode(translate_inline("(`\$Invalid Module! Contact Author or check file!`0)"))));
} else {
$temp= get_module_info($shortname);
}
//end of testing
if (!$temp || empty($temp)) continue;
$temp['shortname']=$shortname;
array_push($moduleinfo,$temp);
array_push($sortby,full_sanitize($temp[$sorting]));
array_push($numberarray,$count);
$count++;
}
array_multisort($sortby,($order?SORT_DESC:SORT_ASC),$numberarray,($order?SORT_DESC:SORT_ASC));
for ($a=0;$a<count($moduleinfo);$a++) {
$i=$numberarray[$a];
rawoutput("<tr class='".($i%2?"trlight":"trdark")."'>");
if (isset($moduleinfo[$i]['invalid']) && $moduleinfo[$i]['invalid']===true) {
rawoutput("<td></td><td nowrap valign='top'>");
output("Not installable");
rawoutput("</td>");
} else {
rawoutput("<td><input type='checkbox' name='module[]' value='{$moduleinfo[$i]['shortname']}'></td>");
rawoutput("<td nowrap valign='top'>");
rawoutput("[ <a href='modules.php?op=install&module={$moduleinfo[$i]['shortname']}&cat={$moduleinfo[$i]['category']}'>");
output_notl($install);
rawoutput("</a>]</td>");
addnav("","modules.php?op=install&module={$moduleinfo[$i]['shortname']}&cat={$moduleinfo[$i]['category']}");
}
rawoutput("<td nowrap valign='top'><span title=\"".
(isset($moduleinfo[$i]['description'])&&
$moduleinfo[$i]['description'] ?
$moduleinfo[$i]['description'] :
sanitize($moduleinfo[$i]['name']))."\">");
rawoutput($moduleinfo[$i]['name']." ".$moduleinfo[$i]['version']);
rawoutput("</span></td><td valign='top'>");
output_notl("`#%s`0", $moduleinfo[$i]['author'], true);
rawoutput("</td><td valign='top'>");
rawoutput($moduleinfo[$i]['category']);
rawoutput("</td><td valign='top'>");
rawoutput($moduleinfo[$i]['shortname'] . ".php");
rawoutput("</td>");
rawoutput("</tr>");
if (isset($moduleinfo[$i]['requires']) && count($moduleinfo[$i]['requires'])){
rawoutput("<tr class='".($i%2?"trlight":"trdark")."'>");
rawoutput("<td>&nbsp;</td>");
rawoutput("<td colspan='6'>");
output("`bRequires:`b`n");
reset($moduleinfo[$i]['requires']);
while (list($key,$val)=each($moduleinfo[$i]['requires'])){
$info = explode("|",$val);
if (module_check_requirements(array($key=>$val))){
output_notl("`@");
}else{
output_notl("`\$");
}
if(isset($info[1])) output_notl("$key {$info[0]} -- {$info[1]}`n");
else output_notl("$key {$info[0]}`n");
}
rawoutput("</td>");
rawoutput("</tr>");
}
$count++;
}
} else {
rawoutput("<tr class='trlight'><td colspan='6' align='center'>");
output("`i--No uninstalled modules were found--`i");
rawoutput("</td></tr>");
}
rawoutput("</table><br />");
$install = translate_inline("Install");
rawoutput("<input type='submit' name='install' class='button' value='$install'>");
}
}
page_footer();
?>