📄 plugins.inc.php
字号:
<?php
/*
[Discuz!] (C)2001-2009 Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$Id: plugins.inc.php 17025 2008-12-03 07:37:56Z monkey $
*/
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('config', 'plugins&operation=config', 0),
array('admin', 'plugins', 1),
array('import', 'plugins&operation=import', 0)
));
showtips('plugins_config_tips');
showformheader('plugins');
showtableheader();
showsubtitle(array('', 'available', 'plugins_name', 'plugins_identifier', 'plugins_directory', ''));
$query = $db->query("SELECT * FROM {$tablepre}plugins");
while($plugin = $db->fetch_array($query)) {
showtablerow('', array('class="td25"', 'class="td25"', 'class="bold"', 'width="20%"', 'width="30%"', 'width="10%"'), 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['directory'],
"<a href=\"$BASESCRIPT?action=plugins&operation=export&pluginid=$plugin[pluginid]\" class=\"act\">$lang[export]</a> <a href=\"$BASESCRIPT?action=plugins&operation=edit&pluginid=$plugin[pluginid]\" target=\"_blank\" 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">'],
[1,''],
[1,'']
]
];
</script>
<?
echo '<tr><td></td><td colspan="5"><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', $BASESCRIPT.'?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('config', 'plugins&operation=config', 0),
array('admin', 'plugins', 0),
array('import', 'plugins&operation=import', 1)
));
showformheader('plugins&operation=import', 'enctype');
showtableheader('plugins_import', 'fixpadding');
showimportdata();
showtablerow('', '', '<input type="checkbox" name="ignoreversion" value="1" class="checkbox" /> '.lang('plugins_import_ignore_version'));
showsubmit('importsubmit');
showtablefooter();
showformfooter();
} else {
$pluginarray = getimportdata();
if(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', $BASESCRIPT.'?action=plugins', 'succeed');
}
} elseif($operation == 'config') {
if(!$pluginid && !$identifier) {
shownav('extended', 'nav_plugins');
showsubmenu('nav_plugins', array(
array('config', 'plugins&operation=config', 1),
array('admin', 'plugins', 0),
array('import', 'plugins&operation=import', 0)
));
$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");
if(!$db->num_rows($query)) {
dheader("location: $BASESCRIPT?action=plugins");
}
while($plugin = $db->fetch_array($query)) {
if(!$plugin['adminid'] || $plugin['adminid'] >= $adminid) {
$plugin['edit'] = $plugin['pluginvarid'] ? "<a href=\"$BASESCRIPT?action=plugins&operation=config&pluginid=$plugin[pluginid]\" class=\"act\">$lang[plugins_config]</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=\"$BASESCRIPT?action=plugins&operation=config&identifier=$plugin[identifier]&mod=$module[name]\" class=\"act\">$module[menu]</a> ";
}
}
}
} else {
$plugin['edit'] = lang('detail');
}
echo '<div class="colorbox"><h4>'.$plugin['name'].(!$plugin['available'] ? ' ('.$lang['plugins_unavailable'].')' : '').'</h4>'.nl2br($plugin['description']).'<br><div style="width:95%" style="clear:both"><div style="float:right">'.$plugin['copyright'].'</div>'.$plugin['edit'].'</div></div><br /><br />';
}
} else {
$plugin = $db->fetch_first("SELECT * FROM {$tablepre}plugins WHERE ".($identifier ? "identifier='$identifier'" : "pluginid='$pluginid'"));
if(!$plugin) {
cpmsg('undefined_action', '', 'error');
} else {
$pluginid = $plugin['pluginid'];
}
$pluginvars = array();
$query = $db->query("SELECT * FROM {$tablepre}pluginvars WHERE pluginid='$pluginid' ORDER BY displayorder");
while($var = $db->fetch_array($query)) {
$pluginvars[$var['variable']] = $var;
}
if(empty($mod)) {
if(($plugin['adminid'] && $adminid > $plugin['adminid']) || !$pluginvars) {
cpmsg('noaccess', '', 'error');
}
if(!submitcheck('editsubmit')) {
shownav('extended', 'nav_plugins');
showsubmenu('nav_plugins', array(
array('config', 'plugins&operation=config', 0),
array('admin', 'plugins', 0),
array('import', 'plugins&operation=import', 0)
));
showformheader("plugins&operation=config&pluginid=$pluginid");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -