📄 plugins.inc.php
字号:
<?php
/*
[Discuz!] (C)2001-2007 Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$Id: plugins.inc.php 13707 2008-05-08 08:54:02Z liuqiang $
*/
if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
exit('Access Denied');
}
cpheader();
if(!empty($identifier) && !empty($mod)) {
$operation = 'config';
}
if(!$operation) {
if(!submitcheck('submit')) {
shownav('extended', 'nav_plugins');
showsubmenu('nav_plugins', array(
array('admin', 'plugins', 1),
array('config', 'plugins&operation=config', 0),
array('import', 'plugins&operation=import', 0)
));
showtips('plugins_config_tips');
showformheader('plugins');
showtableheader();
showsubtitle(array('', 'available', 'plugins_name', 'plugins_identifier', 'description', 'plugins_directory', '', ''));
$query = $db->query("SELECT * FROM {$tablepre}plugins");
while($plugin = $db->fetch_array($query)) {
showtablerow('', array('class="td25"', 'class="td25"', 'class="bold"'), array(
"<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$plugin[pluginid]\">",
"<input class=\"checkbox\" type=\"checkbox\" name=\"availablenew[$plugin[pluginid]]\" value=\"1\" ".(!$plugin['name'] || !$plugin['identifier'] ? 'disabled' : ($plugin['available'] ? 'checked' : '')).">",
$plugin[name],
$plugin[identifier],
$plugin[description],
$plugin[directory],
"<a href=\"admincp.php?action=plugins&operation=export&pluginid=$plugin[pluginid]\" class=\"act\">$lang[export]</a>",
"<a href=\"admincp.php?action=plugins&operation=edit&pluginid=$plugin[pluginid]\" class=\"act\">$lang[detail]</a>"
));
}
?>
<script type="text/JavaScript">
var rowtypedata = [
[
[1,''],
[1,''],
[1,'<input type="text" class="txt" name="newname[]" size="12">'],
[1,'<input type="text" class="txt" name="newidentifier[]" size="8">'],
[4,'']
]
];
</script>
<?
echo '<tr><td></td><td colspan="7"><div><a href="###" onclick="addrow(this, 0)" class="addtr">'.$lang['plugins_add'].'</a></div></td></tr>';
showsubmit('submit', 'submit', 'del');
showtablefooter();
showformfooter();
} else {
$db->query("UPDATE {$tablepre}plugins SET available='0'");
if(is_array($availablenew)) {
foreach($availablenew as $id => $available) {
$db->query("UPDATE {$tablepre}plugins SET available='$available' WHERE pluginid='$id'");
}
}
if($ids = implodeids($delete)) {
$db->query("DELETE FROM {$tablepre}plugins WHERE pluginid IN ($ids)");
$db->query("DELETE FROM {$tablepre}pluginvars WHERE pluginid IN ($ids)");
}
if(is_array($newname)) {
foreach($newname as $key => $value) {
$newname1 = trim($value);
$newidentifier1 = trim($newidentifier[$key]);
if($newname1 || $newidentifier1) {
if(!$newname1) {
cpmsg('plugins_edit_name_invalid', '', 'error');
}
$query = $db->query("SELECT pluginid FROM {$tablepre}plugins WHERE identifier='$newidentifier1' LIMIT 1");
if($db->num_rows($query) || !$newidentifier1 || !ispluginkey($newidentifier1)) {
cpmsg('plugins_edit_identifier_invalid', '', 'error');
}
$db->query("INSERT INTO {$tablepre}plugins (name, identifier, available) VALUES ('".dhtmlspecialchars(trim($newname1))."', '$newidentifier1', '0')");
}
}
}
updatecache('plugins');
updatecache('settings');
cpmsg('plugins_edit_succeed', 'admincp.php?action=plugins', 'succeed');
}
} elseif($operation == 'export' && $pluginid) {
$plugin = $db->fetch_first("SELECT * FROM {$tablepre}plugins WHERE pluginid='$pluginid'");
if(!$plugin) {
cpheader();
cpmsg('undefined_action', '', 'error');
}
unset($plugin['pluginid']);
$pluginarray = array();
$pluginarray['plugin'] = $plugin;
$pluginarray['version'] = strip_tags($version);
$time = gmdate("$dateformat $timeformat", $timestamp + $timeoffset * 3600);
$query = $db->query("SELECT * FROM {$tablepre}pluginhooks WHERE pluginid='$pluginid'");
while($hook = $db->fetch_array($query)) {
unset($hook['pluginhookid'], $hook['pluginid']);
$pluginarray['hooks'][] = $hook;
}
$query = $db->query("SELECT * FROM {$tablepre}pluginvars WHERE pluginid='$pluginid'");
while($var = $db->fetch_array($query)) {
unset($var['pluginvarid'], $var['pluginid']);
$pluginarray['vars'][] = $var;
}
$plugin_export = "# Discuz! Plugin Dump\n".
"# Version: Discuz! $version\n".
"# Time: $time \n".
"# From: $bbname ($boardurl) \n".
"#\n".
"# Discuz! Community: http://www.Discuz.net\n".
"# Please visit our website for latest news about Discuz!\n".
"# --------------------------------------------------------\n\n\n".
wordwrap(base64_encode(serialize($pluginarray)), 60, "\n", 1);
ob_end_clean();
dheader('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
dheader('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
dheader('Cache-Control: no-cache, must-revalidate');
dheader('Pragma: no-cache');
dheader('Content-Encoding: none');
dheader('Content-Length: '.strlen($plugin_export));
dheader('Content-Disposition: attachment; filename=discuz_plugin_'.$plugin['identifier'].'.txt');
dheader('Content-Type: '.(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? 'application/octetstream' : 'application/octet-stream'));
echo $plugin_export;
dexit();
} elseif($operation == 'import') {
if(!submitcheck('importsubmit')) {
shownav('extended', 'nav_plugins');
showsubmenu('nav_plugins', array(
array('admin', 'plugins', 0),
array('config', 'plugins&operation=config', 0),
array('import', 'plugins&operation=import', 1)
));
showformheader('plugins&operation=import', 'enctype');
showtableheader('plugins_import', 'fixpadding');
showtablerow('', '', '<input type="file" name="importfile" size="40" class="uploadbtn marginbot" />');
showtablerow('', '', '<input type="checkbox" name="ignoreversion" value="1" class="checkbox" /> '.lang('plugins_import_ignore_version'));
showsubmit('importsubmit');
showtablefooter();
showformfooter();
} else {
$plugindata = preg_replace("/(#.*\s+)*/", '', @implode('', file($_FILES['importfile']['tmp_name'])));
@unlink($_FILES['importfile']['tmp_name']);
$pluginarray = daddslashes(unserialize(base64_decode($plugindata)), 1);
if(!is_array($pluginarray) || !is_array($pluginarray['plugin'])) {
cpmsg('plugins_import_data_invalid', '', 'error');
} elseif(empty($ignoreversion) && strip_tags($pluginarray['version']) != strip_tags($version)) {
cpmsg('plugins_import_version_invalid', '', 'error');
}
$query = $db->query("SELECT pluginid FROM {$tablepre}plugins WHERE identifier='{$pluginarray[plugin][identifier]}' LIMIT 1");
if($db->num_rows($query)) {
cpmsg('plugins_import_identifier_duplicated', '', 'error');
}
$sql1 = $sql2 = $comma = '';
foreach($pluginarray['plugin'] as $key => $val) {
if($key == 'directory') {
//compatible for old versions
$val .= (!empty($val) && substr($val, -1) != '/') ? '/' : '';
}
$sql1 .= $comma.$key;
$sql2 .= $comma.'\''.$val.'\'';
$comma = ',';
}
$db->query("INSERT INTO {$tablepre}plugins ($sql1) VALUES ($sql2)");
$pluginid = $db->insert_id();
foreach(array('hooks', 'vars') as $pluginconfig) {
if(is_array($pluginarray[$pluginconfig])) {
foreach($pluginarray[$pluginconfig] as $config) {
$sql1 = 'pluginid';
$sql2 = '\''.$pluginid.'\'';
foreach($config as $key => $val) {
$sql1 .= ','.$key;
$sql2 .= ',\''.$val.'\'';
}
$db->query("INSERT INTO {$tablepre}plugin$pluginconfig ($sql1) VALUES ($sql2)");
}
}
}
updatecache('plugins');
updatecache('settings');
cpmsg('plugins_import_succeed', 'admincp.php?action=plugins', 'succeed');
}
} elseif($operation == 'config') {
if(!$pluginid && !$identifier) {
shownav('extended', 'nav_plugins');
showsubmenu('nav_plugins', array(
array('admin', 'plugins', 0),
array('config', 'plugins&operation=config', 1),
array('import', 'plugins&operation=import', 0)
));
showtips('plugins_tips');
$plugins = '';
$query = $db->query("SELECT p.*, pv.pluginvarid FROM {$tablepre}plugins p
LEFT JOIN {$tablepre}pluginvars pv USING(pluginid)
GROUP BY p.pluginid
ORDER BY p.available DESC, p.pluginid");
while($plugin = $db->fetch_array($query)) {
if(!$plugin['adminid'] || $plugin['adminid'] >= $adminid) {
$plugin['disabled'] = '';
$plugin['edit'] = $plugin['pluginvarid'] ? "<a href=\"admincp.php?action=plugins&operation=config&pluginid=$plugin[pluginid]\" class=\"act\">$lang[plugins_settings]</a> " : '';
if(is_array($plugin['modules'] = unserialize($plugin['modules']))) {
foreach($plugin['modules'] as $module) {
if($module['type'] == 3 && (!$module['adminid'] || $module['adminid'] >= $adminid)) {
$plugin['edit'] .= "<a href=\"admincp.php?action=plugins&operation=config&identifier=$plugin[identifier]&mod=$module[name]\" class=\"act\">$lang[plugins_settings_module]: $module[menu]</a> ";
}
}
}
} else {
$plugin['disabled'] = 'disabled';
$plugin['edit'] = lang('detail');
}
showtableheader("$plugin[name]".(!$plugin['available'] ? ' ('.$lang['plugins_unavailable'].')' : ''), 'nobottom fixpadding', $plugin[disabled]);
showtablerow('', '', array(
$lang[description],
$plugin[description]
));
showtablerow('', '', array(
$lang[copyright],
$plugin[copyright]
));
showtablerow('', '', array(
$lang[edit],
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -