310 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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> </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> </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> </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();
 | 
						|
?>
 |