module_main.php

来自「这是matlab的一个小程序」· PHP 代码 · 共 624 行 · 第 1/2 页

PHP
624
字号
<?php
require_once(dirname(__FILE__)."/config.php");
CheckPurview('sys_module');
require_once(dirname(__FILE__)."/../include/dedemodule.class.php");
require_once(dirname(__FILE__)."/../include/oxwindow.class.php");
if(empty($action)) $action = '';
$mdir = DEDEROOT.'/data/module';

function TestWriteAble($d)
{
	$tfile = '_dedet.txt';
	$d = ereg_replace('/$','',$d);
	$fp = @fopen($d.'/'.$tfile,'w');
	if(!$fp) return false;
	else
	{
		fclose($fp);
		$rs = @unlink($d.'/'.$tfile);
		if($rs) return true;
		else return false;
	}
}

function ReWriteConfigAuto()
{
	global $dsql;
	$configfile = DEDEROOT.'/data/config.cache.inc.php';
	if(!is_writeable($configfile))
	{
		echo "配置文件'{$configfile}'不支持写入,无法修改系统配置参数!";
		//ClearAllLink();
		exit();
	}
	$fp = fopen($configfile,'w');
	flock($fp,3);
	fwrite($fp,"<"."?php\r\n");
	$dsql->SetQuery("Select `varname`,`type`,`value`,`groupid` From `#@__sysconfig` order by aid asc ");
	$dsql->Execute();
	while($row = $dsql->GetArray())
	{
		if($row['type']=='number') fwrite($fp,"\${$row['varname']} = ".$row['value'].";\r\n");
		else fwrite($fp,"\${$row['varname']} = '".str_replace("'",'',$row['value'])."';\r\n");
	}
	fwrite($fp,"?".">");
	fclose($fp);
}

/*--------------
function ShowAll();
--------------*/
if($action=='')
{
	$types = array('soft'=>'模块','templets'=>'模板','plus'=>'小插件','patch'=>'补丁');
	$dm = new DedeModule($mdir);
	if(empty($moduletype)) $moduletype = '';
	$modules = $dm->GetModuleList($moduletype);
	require_once(dirname(__FILE__)."/templets/module_main.htm");
	$dm->Clear();
	exit();
}
/*--------------
function Setup();
--------------*/
else if($action=='setup')
{
	$dm = new DedeModule($mdir);
	$infos = $dm->GetModuleInfo($hash);

	if($infos['url']=='') $infos['url'] = '&nbsp;';
	$alertMsg = ($infos['lang']==$cfg_soft_lang ? '' : '<br /><font color="red">(这个模块的语言编码与你系统的编码不一致,请向开发者确认它的兼容性)</font>');

	$filelists = $dm->GetFileLists($hash);
	$filelist = '';
	$prvdirs = array();
	$incdir = array();
	foreach($filelists as $v)
	{
		if(empty($v['name'])) continue;
		if($v['type']=='dir')
		{
			$v['type'] = '目录';
			$incdir[] = $v['name'];
		}
		else
		{
			$v['type'] = '文件';
		}
		$filelist .= "{$v['type']}|{$v['name']}\r\n";
	}
	//检测需要的目录权限
	foreach($filelists as $v)
	{
		$prvdir = ereg_replace('/([^/]*)$','/',$v['name']);
		if(!ereg('^\.',$prvdir)) $prvdir = './';
		$n = true;
		foreach($incdir as $k=>$v)
		{
			if(eregi("^".$v,$prvdir))
			{
				$n = false;
				break;
			}
		}
		if(!isset($prvdirs[$prvdir]) && $n && is_dir($prvdir))
		{
			$prvdirs[$prvdir][0] = 1;
			$prvdirs[$prvdir][1] = TestWriteAble($prvdir);
		}
	}
	$prvdir = "<table width='350'>\r\n";
	$prvdir .= "<tr style='background:#D1F5B6'><th width='270'>目录</td><th align='center'>可写</td></tr>\r\n";
	foreach($prvdirs as $k=>$v)
	{
		if($v) $cw = '√';
		else $cw = '<font color="red">×</font>';
		$prvdir .= "<tr><td style='border-bottom:1px solid #D1F5B6'>$k</td>";
		$prvdir .= "<td align='center' style='border-bottom:1px solid #D1F5B6'>$cw</td></tr>\r\n";
	}
	$prvdir .= "</table>";

	$win = new OxWindow();
	$win->Init("module_main.php","js/blank.js","post");
	$win->mainTitle = "模块管理";
	$win->AddTitle("<a href='module_main.php'>模块管理</a> &gt;&gt; 安装模块: {$infos['name']}");
	$win->AddHidden("hash",$hash);
	$win->AddHidden("action",'setupstart');
	if(trim($infos['url'])=='') $infos['url'] = '无';
	$msg = "<style>.dtb{border-bottom:1px dotted #cccccc}</style>
	<table width='98%' border='0' cellspacing='0' cellpadding='0'>
  <tr>
    <td width='20%' height='28' class='dtb'>模块名称:</td>
    <td width='80%' class='dtb'>{$infos['name']}</td>
  </tr>
  <tr>
    <td height='28' class='dtb'>语言:</td>
    <td class='dtb'>{$infos['lang']} {$alertMsg}</td>
  </tr>
  <tr>
    <td height='28' class='dtb'>文件大小:</td>
    <td class='dtb'>{$infos['filesize']}</td>
  </tr>
  <tr>
    <td height='28' class='dtb'>团队名称:</td>
    <td class='dtb'>{$infos['team']}</td>
  </tr>
  <tr>
    <td height='28' class='dtb'>发布时间:</td>
    <td class='dtb'>{$infos['time']}</td>
  </tr>
  <tr>
    <td height='28' class='dtb'>电子邮箱:</td>
    <td class='dtb'>{$infos['email']}</td>
  </tr>
  <tr>
    <td height='28' class='dtb'>官方网址:</td>
    <td class='dtb'>{$infos['url']}</td>
  </tr>
  <tr>
    <td height='28' class='dtb'>使用协议:</td>
    <td class='dtb'><a href='module_main.php?action=showreadme&hash={$hash}' target='_blank'>点击浏览...</a></td>
  </tr>
  <tr>
    <td height='30' class='dtb' bgcolor='#FCFE9C' colspan='2'>
    <b>注意事项:</b>
    安装时请确保文件列表中涉及的目录前可写入权限,此外“后台管理目录”、“后台管理目录/templets”目录也必须暂时设置可写入权限。
    </td>
  </tr>
  <tr>
    <td height='30'><b>目录权限检测:</b><br /> ../ 为根目录 <br /> ./ 表示当前目录</td>
    <td>
    $prvdir
    </td>
  </tr>
  <tr>
    <td height='30'>模块包含的所有文件列表:</td>
    <td></td>
  </tr>
  <tr>
    <td height='164' colspan='2'>
     <textarea name='filelists' id='filelists' style='width:90%;height:200px'>{$filelist}</textarea>
    </td>
  </tr>
  <tr>
    <td height='28'>对于已存在文件处理方法:</td>
    <td>
   <input name='isreplace' type='radio' value='1' checked='checked' />
    覆盖
   <input name='isreplace' type='radio' value='3' />
   覆盖,保留副本
   <input type='radio' name='isreplace' value='0' />
   保留旧文件
   </td>
  </tr>
</table>
	";
	$win->AddMsgItem("<div style='padding-left:10px;line-height:150%'>$msg</div>");
	$winform = $win->GetWindow("ok","");
	$win->Display();
	$dm->Clear();
	exit();
}
/*---------------
function SetupRun()
--------------*/
else if($action=='setupstart')
{
	if(!is_writeable($mdir))
	{
		ShowMsg("目录 {$mdir} 不支持写入,这将导致安装程序没法正常创建!","-1");
		exit();
	}
	$dm = new DedeModule($mdir);

	$minfos = $dm->GetModuleInfo($hash);
	extract($minfos, EXTR_SKIP);

	$menustring = addslashes($dm->GetSystemFile($hash,'menustring'));

	$query = "INSERT INTO `#@__sys_module`(`hashcode` , `modname` , `indexname` , `indexurl` , `ismember` , `menustring` )
                                    VALUES ('$hash' , '$name' , '$indexname' , '$indexurl' , '$ismember' , '$menustring' ) ";

	$rs = $dsql->ExecuteNoneQuery("Delete From `#@__sys_module` where hashcode like '$hash' ");
	$rs = $dsql->ExecuteNoneQuery($query);
	if(!$rs)
	{
		ShowMsg('保存数据库信息失败,无法完成安装!'.$dsql->GetError(),'javascript:;');
		exit();
	}

	$dm->WriteFiles($hash,$isreplace);
	$filename = '';
	if(!isset($autosetup) || $autosetup==0) $filename = $dm->WriteSystemFile($hash,'setup');
	if(!isset($autodel) || $autodel==0) $dm->WriteSystemFile($hash,'uninstall');
	$dm->WriteSystemFile($hash,'readme');
	$dm->Clear();

	//用模块的安装程序安装
	if(!isset($autosetup) || $autosetup==0)
	{
		include(DEDEROOT.'/data/module/'.$filename);
		exit();
	}
	//系统自动安装
	else
	{
		$mysql_version = $dsql->GetVersion(true);
		//默认使用MySQL 4.1 以下版本的SQL语句,对大于4.1版本采用替换处理 TYPE=MyISAM ==> ENGINE=MyISAM DEFAULT CHARSET=#~lang~#
		$setupsql = $dm->GetSystemFile($hash,'setupsql40');
		
		$setupsql = eregi_replace('ENGINE=MyISAM','TYPE=MyISAM',$setupsql);
		
		$sql41tmp = 'ENGINE=MyISAM DEFAULT CHARSET='.$cfg_db_language;
		
		if($mysql_version >= 4.1)
		{
			$setupsql = eregi_replace('TYPE=MyISAM',$sql41tmp,$setupsql);
		}
		
		
		//_ROOTURL_
		if($cfg_cmspath=='/') {
			$cfg_cmspath = '';
		}
		$rooturl = $cfg_basehost.$cfg_cmspath;
		
		$setupsql = eregi_replace('_ROOTURL_',$rooturl,$setupsql);
		$setupsql = ereg_replace("[\r\n]{1,}","\n",$setupsql);
		
		$sqls = split(";[ \t]{0,}\n", $setupsql);
		foreach($sqls as $sql)
		{
			if(trim($sql)!='') $dsql->executenonequery($sql);
		}
		
		ReWriteConfigAuto();
		
		$rflwft = "<script language='javascript' type='text/javascript'>\r\n";
		$rflwft .= "if(window.navigator.userAgent.indexOf('MSIE')>=1) top.document.frames.menu.location = 'index_menu_module.php';\r\n";
		$rflwft .= "else top.document.getElementById('menu').src = 'index_menu_module.php';\r\n";
		$rflwft .= "</script>";
		echo $rflwft;
		
		UpDateCatCache();
		ShowMsg('模块安装完成...','module_main.php');
		exit();
	}
}
/*--------------
function DelModule();
--------------*/
else if($action=='del')
{
	$dm = new DedeModule($mdir);
	$infos = $dm->GetModuleInfo($hash);

	if($infos['url']=='') $infos['url'] = '&nbsp;';
	$alertMsg = ($infos['lang']==$cfg_soft_lang ? '' : '<br /><font color="red">(这个模块的语言编码与你系统的编码不一致,请向开发者确认它的兼容性)</font>');

	$win = new OxWindow();
	$win->Init("module_main.php","js/blank.js","post");
	$win->mainTitle = "模块管理";
	$win->AddTitle("<a href='module_main.php'>模块管理</a> &gt;&gt; 删除模块: {$infos['name']}");
	$win->AddHidden('hash',$hash);
	$win->AddHidden('action','delok');
	$msg = "<style>.dtb{border-bottom:1px dotted #cccccc}</style>
	<table width='750' border='0' cellspacing='0' cellpadding='0'>
  <tr>
    <td width='200' height='28' class='dtb'>模块名称:</td>
    <td width='550' class='dtb'>{$infos['name']}</td>
  </tr>
  <tr>
    <td height='28' class='dtb'>语言:</td>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?