PageRenderTime 25ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 1ms

/source/function/function_admincp.php

https://github.com/jinbo51/DiscuzX
PHP | 1462 lines | 1394 code | 62 blank | 6 comment | 220 complexity | 6c67c21e73709a0199a025e771176d90 MD5 | raw file
Possible License(s): BSD-3-Clause

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: function_admincp.php 33367 2013-06-03 04:24:27Z andyzheng $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. @set_time_limit(0);
  12. function istpldir($dir) {
  13. return is_dir(DISCUZ_ROOT.'./'.$dir) && !in_array(substr($dir, -1, 1), array('/', '\\')) &&
  14. strpos(realpath(DISCUZ_ROOT.'./'.$dir), realpath(DISCUZ_ROOT.'./template')) === 0;
  15. }
  16. function isplugindir($dir) {
  17. return preg_match("/^[a-z]+[a-z0-9_]*\/$/", $dir);
  18. }
  19. function ispluginkey($key) {
  20. return preg_match("/^[a-z]+[a-z0-9_]*$/i", $key);
  21. }
  22. function dir_writeable($dir) {
  23. if(!is_dir($dir)) {
  24. @mkdir($dir, 0777);
  25. }
  26. if(is_dir($dir)) {
  27. if($fp = @fopen("$dir/test.txt", 'w')) {
  28. @fclose($fp);
  29. @unlink("$dir/test.txt");
  30. $writeable = 1;
  31. } else {
  32. $writeable = 0;
  33. }
  34. }
  35. return $writeable;
  36. }
  37. function filemtimesort($a, $b) {
  38. if($a['filemtime'] == $b['filemtime']) {
  39. return 0;
  40. }
  41. return ($a['filemtime'] > $b['filemtime']) ? 1 : -1;
  42. }
  43. function checkpermission($action, $break = 1) {
  44. global $_G;
  45. if(!isset($_G['config']['admincp'])) {
  46. cpmsg('action_access_noexists', '', 'error');
  47. } elseif($break && !$_G['config']['admincp'][$action]) {
  48. cpmsg('action_noaccess_config', '', 'error');
  49. } else {
  50. return $_G['config']['admincp'][$action];
  51. }
  52. }
  53. function siteinformation() {
  54. global $_G, $siteuniqueid, $save_mastermobile, $save_masterqq, $save_masteremail;
  55. $db = DB::object();
  56. $update = array(
  57. 'uniqueid' => $siteuniqueid,
  58. 'version' => DISCUZ_VERSION,
  59. 'release' => DISCUZ_RELEASE,
  60. 'php' => PHP_VERSION,
  61. 'mysql' => $db->version(),
  62. 'charset' => CHARSET,
  63. 'bbname' => $_G['setting']['bbname'],
  64. 'mastermobile' => $save_mastermobile,
  65. 'masterqq' => $save_masterqq,
  66. 'masteremail' => $save_masteremail,
  67. 'software' => $_SERVER['SERVER_SOFTWARE'],
  68. 'my_siteid' => $_G['setting']['my_siteid'],
  69. 'my_sitekey' => $_G['setting']['my_sitekey'],
  70. );
  71. $updatetime = @filemtime(DISCUZ_ROOT.'./data/updatetime.lock');
  72. if(empty($updatetime) || (TIMESTAMP - $updatetime > 3600 * 4)) {
  73. @touch(DISCUZ_ROOT.'./data/updatetime.lock');
  74. $tableprelen = strlen($db->tablepre);
  75. $table = array(
  76. 'forum_thread' => 'threads',
  77. 'forum_post' => 'posts',
  78. 'forum_attachment' => 'fattachments',
  79. 'common_member' => 'members',
  80. 'home_album' => 'albums',
  81. 'home_blog' => 'blogs',
  82. 'home_doing' => 'doings',
  83. 'home_poke' => 'pokes',
  84. 'home_share' => 'shares',
  85. 'portal_topic' => 'topics',
  86. 'portal_article_title' => 'articles',
  87. 'portal_attachment' => 'pattachments',
  88. );
  89. foreach(C::t('common_setting')->fetch_all_table_status() as $row) {
  90. $tablename = substr($row['Name'], $tableprelen);
  91. if(!isset($table[$tablename])) continue;
  92. $update[$table[$tablename]] = $row['Rows'];
  93. }
  94. foreach(C::t('forum_thread')->count_special_group_by_special() as $thread) {
  95. $thread['special'] = intval($thread['special']);
  96. $update['spt_'.$thread['special']] = $thread['spcount'];
  97. }
  98. $update['groups'] = C::t('forum_forum')->fetch_forum_num('group');
  99. $update['forums'] = C::t('forum_forum')->fetch_forum_num();
  100. $update['adminemail'] = $_G['setting']['adminemail'];
  101. if($_G['setting']['msn']['on'] && $_G['setting']['msn']['domain']) {
  102. $update['msn_domain'] = $_G['setting']['msn']['domain'];
  103. }
  104. $comma = '';
  105. foreach(C::t('common_patch')->fetch_patch_by_status(array(1, 2)) as $patch) {
  106. $update['patch'] .= $comma.$patch['serial'];
  107. $comma = ',';
  108. }
  109. }
  110. $data = '';
  111. foreach($update as $key => $value) {
  112. $data .= $key.'='.rawurlencode($value).'&';
  113. }
  114. return 'os=dx&update='.rawurlencode(base64_encode($data)).'&md5hash='.substr(md5($_SERVER['HTTP_USER_AGENT'].implode('', $update).TIMESTAMP), 8, 8).'&timestamp='.TIMESTAMP;
  115. }
  116. function upgradeinformation($status = 0) {
  117. global $_G, $upgrade_step;
  118. if(empty($upgrade_step)) {
  119. return '';
  120. }
  121. $update = array();
  122. $siteuniqueid = C::t('common_setting')->fetch('siteuniqueid');
  123. $update['uniqueid'] = $siteuniqueid;
  124. $update['curversion'] = $upgrade_step['curversion'];
  125. $update['currelease'] = $upgrade_step['currelease'];
  126. $update['upgradeversion'] = $upgrade_step['version'];
  127. $update['upgraderelease'] = $upgrade_step['release'];
  128. $update['step'] = $upgrade_step['step'] == 'dbupdate' ? 4 : $upgrade_step['step'];
  129. $update['status'] = $status;
  130. $data = '';
  131. foreach($update as $key => $value) {
  132. $data .= $key.'='.rawurlencode($value).'&';
  133. }
  134. $upgradeurl = 'ht'.'tp:/'.'/cus'.'tome'.'r.disc'.'uz.n'.'et/upg'.'rade'.'.p'.'hp?'.'os=dx&update='.rawurlencode(base64_encode($data)).'&timestamp='.TIMESTAMP;
  135. return '<img src="'.$upgradeurl.'" />';
  136. }
  137. function isfounder($user = '') {
  138. $user = empty($user) ? getglobal('member') : $user;
  139. return $GLOBALS['admincp']->checkfounder($user);
  140. }
  141. function cplang($name, $replace = array(), $output = false) {
  142. global $_G;
  143. $ret = '';
  144. if(!isset($_G['lang']['admincp'])) {
  145. lang('admincp');
  146. }
  147. if(!isset($_G['lang']['admincp_menu'])) {
  148. lang('admincp_menu');
  149. }
  150. if(!isset($_G['lang']['admincp_msg'])) {
  151. lang('admincp_msg');
  152. }
  153. if(isset($_G['lang']['admincp'][$name])) {
  154. $ret = $_G['lang']['admincp'][$name];
  155. } elseif(isset($_G['lang']['admincp_menu'][$name])) {
  156. $ret = $_G['lang']['admincp_menu'][$name];
  157. } elseif(isset($_G['lang']['admincp_msg'][$name])) {
  158. $ret = $_G['lang']['admincp_msg'][$name];
  159. }
  160. $ret = $ret ? $ret : ($replace === false ? '' : $name);
  161. if($replace && is_array($replace)) {
  162. $s = $r = array();
  163. foreach($replace as $k => $v) {
  164. $s[] = '{'.$k.'}';
  165. $r[] = $v;
  166. }
  167. $ret = str_replace($s, $r, $ret);
  168. }
  169. $output && print($ret);
  170. return $ret;
  171. }
  172. function admincustom($title, $url, $sort = 0) {
  173. global $_G;
  174. $url = ADMINSCRIPT.'?'.$url;
  175. $id = C::t('common_admincp_cmenu')->fetch_id_by_uid_sort_url($_G['uid'], $sort, $url);
  176. if($id) {
  177. C::t('common_admincp_cmenu')->update($id, array('title' => $title, 'dateline' => $_G['timestamp']));
  178. C::t('common_admincp_cmenu')->increase_clicks($id);
  179. } else {
  180. $id = C::t('common_admincp_cmenu')->insert(array(
  181. 'title' => $title,
  182. 'url' => $url,
  183. 'sort' => $sort,
  184. 'uid' => $_G['uid'],
  185. 'dateline' => $_G['timestamp'],
  186. ), true);
  187. }
  188. return $id;
  189. }
  190. function cpurl($type = 'parameter', $filters = array('sid', 'frames')) {
  191. parse_str($_SERVER['QUERY_STRING'], $getarray);
  192. $extra = $and = '';
  193. foreach($getarray as $key => $value) {
  194. if(!in_array($key, $filters)) {
  195. @$extra .= $and.$key.($type == 'parameter' ? '%3D' : '=').rawurlencode($value);
  196. $and = $type == 'parameter' ? '%26' : '&';
  197. }
  198. }
  199. return $extra;
  200. }
  201. function showheader($key, $url) {
  202. list($action, $operation, $do) = explode('_', $url.'___');
  203. $url = $action.($operation ? '&operation='.$operation.($do ? '&do='.$do : '') : '');
  204. echo '<li><em><a href="'.ADMINSCRIPT.'?action='.$url.'" id="header_'.$key.'" hidefocus="true" onmouseover="previewheader(\''.$key.'\')" onmouseout="previewheader()" onclick="toggleMenu(\''.$key.'\', \''.$url.'\');doane(event);">'.cplang('header_'.$key).'</a></em></li>';
  205. }
  206. function shownav($header = '', $menu = '', $nav = '') {
  207. global $action, $operation;
  208. $title = 'cplog_'.$action.($operation ? '_'.$operation : '');
  209. if(in_array($action, array('home', 'custommenu'))) {
  210. $customtitle = '';
  211. } elseif(cplang($title, false)) {
  212. $customtitle = $title;
  213. } elseif(cplang('nav_'.($header ? $header : 'index'), false)) {
  214. $customtitle = 'nav_'.$header;
  215. } else {
  216. $customtitle = rawurlencode($nav ? $nav : ($menu ? $menu : ''));
  217. }
  218. $title = cplang('header_'.($header ? $header : 'index')).($menu ? '&nbsp;&raquo;&nbsp;'.cplang($menu) : '').($nav ? '&nbsp;&raquo;&nbsp;'.cplang($nav) : '');
  219. $ctitle = cplang('header_'.($header ? $header : 'index'));
  220. if($menu) {
  221. $ctitle = cplang($menu);
  222. }
  223. if($nav) {
  224. $ctitle = cplang($nav);
  225. }
  226. $addtomenu = "&nbsp;&nbsp;<a target=\"main\" title=\"".cplang('custommenu_addto')."\" href=\"".ADMINSCRIPT."?action=misc&operation=custommenu&do=add&title=".rawurlencode($ctitle)."&url=".rawurlencode(cpurl())."\">[+]</a>";
  227. $dtitle = str_replace("'", "\'", cplang('admincp_title').' - '.str_replace('&nbsp;&raquo;&nbsp;', ' - ', $title));
  228. echo '<script type="text/JavaScript">parent.document.title = \''.$dtitle.'\';if(parent.$(\'admincpnav\')) parent.$(\'admincpnav\').innerHTML=\''.$title.$addtomenu.'\';</script>';
  229. }
  230. function showmenu($key, $menus, $return = 0) {
  231. global $_G;
  232. $body = '';
  233. if(is_array($menus)) {
  234. foreach($menus as $menu) {
  235. if($menu[0] && $menu[1]) {
  236. list($action, $operation, $do) = explode('_', $menu[1]);
  237. $menu[1] = $action.($operation ? '&operation='.$operation.($do ? '&do='.$do : '') : '');
  238. $body .= '<li><a href="'.(substr($menu[1], 0, 4) == 'http' ? $menu[1] : ADMINSCRIPT.'?action='.$menu[1]).'" hidefocus="true" target="'.($menu[2] ? $menu[2] : 'main').'"'.($menu[3] ? $menu[3] : '').'><em onclick="menuNewwin(this)" title="'.cplang('nav_newwin').'"></em>'.cplang($menu[0]).'</a></li>';
  239. } elseif($menu[0] && $menu[2]) {
  240. if($menu[2] == 1) {
  241. $id = 'M'.substr(md5($menu[0]), 0, 8);
  242. $hide = false;
  243. if(!empty($_G['cookie']['cpmenu_'.$id])) {
  244. $hide = true;
  245. }
  246. $body .= '<li class="s"><div class="lsub'.($hide ? '' : ' desc').'" subid="'.$id.'"><div onclick="lsub(\''.$id.'\', this.parentNode)">'.$menu[0].'</div><ol style="display:'.($hide ? 'none' : '').'" id="'.$id.'">';
  247. }
  248. if($menu[2] == 2) {
  249. $body .= '</ol></div></li>';
  250. }
  251. }
  252. }
  253. }
  254. if(!$return) {
  255. echo '<ul id="menu_'.$key.'" style="display: none">'.$body.'</ul>';
  256. } else {
  257. return $body;
  258. }
  259. }
  260. function updatemenu($key) {
  261. @include DISCUZ_ROOT.'./source/admincp/admincp_menu.php';
  262. $s = showmenu($key, $menu[$key], 1);
  263. echo '<script type="text/JavaScript">parent.$(\'menu_'.$key.'\').innerHTML = \''.str_replace("'", "\'", $s).'\';parent.initCpMenus(\'leftmenu\');parent.initCpMap();</script>';
  264. }
  265. function cpmsg_error($message, $url = '', $extra = '', $halt = TRUE) {
  266. return cpmsg($message, $url, 'error', array(), $extra, $halt);
  267. }
  268. function cpmsg($message, $url = '', $type = '', $values = array(), $extra = '', $halt = TRUE, $cancelurl = '') {
  269. global $_G;
  270. $vars = explode(':', $message);
  271. $values['ADMINSCRIPT'] = ADMINSCRIPT;
  272. if(count($vars) == 2) {
  273. $message = lang('plugin/'.$vars[0], $vars[1], $values);
  274. } else {
  275. $message = cplang($message, $values);
  276. }
  277. switch($type) {
  278. case 'download':
  279. case 'succeed': $classname = 'infotitle2';break;
  280. case 'error': $classname = 'infotitle3';break;
  281. case 'loadingform': case 'loading': $classname = 'infotitle1';break;
  282. default: $classname = 'marginbot normal';break;
  283. }
  284. if($url) {
  285. $url = substr($url, 0, 5) == 'http:' ? $url : ADMINSCRIPT.'?'.$url;
  286. }
  287. $message = "<h4 class=\"$classname\">$message</h4>";
  288. $url .= $url && !empty($_GET['scrolltop']) ? '&scrolltop='.intval($_GET['scrolltop']) : '';
  289. if($type == 'form') {
  290. $message = "<form method=\"post\" action=\"$url\"><input type=\"hidden\" name=\"formhash\" value=\"".FORMHASH."\">".
  291. "<br />$message$extra<br />".
  292. "<p class=\"margintop\"><input type=\"submit\" class=\"btn\" name=\"confirmed\" value=\"".cplang('ok')."\"> &nbsp; \n".
  293. ($cancelurl ? "<input type=\"button\" class=\"btn\" value=\"".cplang('cancel')."\" onClick=\"location.href='$cancelurl'\">" :
  294. "<script type=\"text/javascript\">".
  295. "if(history.length > (BROWSER.ie ? 0 : 1)) document.write('<input type=\"button\" class=\"btn\" value=\"".cplang('cancel')."\" onClick=\"history.go(-1);\">');".
  296. "</script>").
  297. "</p></form><br />";
  298. } elseif($type == 'loadingform') {
  299. $message = "<form method=\"post\" action=\"$url\" id=\"loadingform\"><input type=\"hidden\" name=\"formhash\" value=\"".FORMHASH."\"><br />$message$extra<img src=\"static/image/admincp/ajax_loader.gif\" class=\"marginbot\" /><br />".
  300. '<p class="marginbot"><a href="###" onclick="$(\'loadingform\').submit();" class="lightlink">'.cplang('message_redirect').'</a></p></form><br /><script type="text/JavaScript">setTimeout("$(\'loadingform\').submit();", 2000);</script>';
  301. } else {
  302. $message .= $extra.($type == 'loading' ? '<img src="static/image/admincp/ajax_loader.gif" class="marginbot" />' : '');
  303. if($url) {
  304. if($type == 'button') {
  305. $message = "<br />$message<br /><p class=\"margintop\"><input type=\"submit\" class=\"btn\" name=\"submit\" value=\"".cplang('start')."\" onclick=\"location.href='$url'\" />";
  306. } else {
  307. $message .= '<p class="marginbot"><a href="'.$url.'" class="lightlink">'.cplang($type == 'download' ? 'message_download' : 'message_redirect').'</a></p>';
  308. $timeout = $type != 'loading' ? 10000 : 0;
  309. $message .= "<script type=\"text/JavaScript\">setTimeout(\"redirect('$url');\", $timeout);</script>";
  310. }
  311. } elseif($type != 'succeed') {
  312. $message .= '<p class="marginbot">'.
  313. "<script type=\"text/javascript\">".
  314. "if(history.length > (BROWSER.ie ? 0 : 1)) document.write('<a href=\"javascript:history.go(-1);\" class=\"lightlink\">".cplang('message_return')."</a>');".
  315. "</script>".
  316. '</p>';
  317. }
  318. }
  319. if($halt) {
  320. echo '<h3>'.cplang('discuz_message').'</h3><div class="infobox">'.$message.'</div>';
  321. exit();
  322. } else {
  323. echo '<div class="infobox">'.$message.'</div>';
  324. }
  325. }
  326. function cpheader() {
  327. global $_G;
  328. if(!defined('DISCUZ_CP_HEADER_OUTPUT')) {
  329. define('DISCUZ_CP_HEADER_OUTPUT', true);
  330. } else {
  331. return true;
  332. }
  333. $IMGDIR = $_G['style']['imgdir'];
  334. $STYLEID = $_G['setting']['styleid'];
  335. $VERHASH = $_G['style']['verhash'];
  336. $frame = getgpc('frame') != 'no' ? 1 : 0;
  337. $charset = CHARSET;
  338. $basescript = ADMINSCRIPT;
  339. echo <<<EOT
  340. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  341. <html xmlns="http://www.w3.org/1999/xhtml">
  342. <head>
  343. <meta http-equiv="Content-Type" content="text/html; charset=$charset">
  344. <meta http-equiv="x-ua-compatible" content="ie=7" />
  345. <link href="static/image/admincp/admincp.css?{$_G[style][verhash]}" rel="stylesheet" type="text/css" />
  346. </head>
  347. <body>
  348. <script type="text/JavaScript">
  349. var admincpfilename = '$basescript', IMGDIR = '$IMGDIR', STYLEID = '$STYLEID', VERHASH = '$VERHASH', IN_ADMINCP = true, ISFRAME = $frame, STATICURL='static/', SITEURL = '$_G[siteurl]', JSPATH = '{$_G[setting][jspath]}';
  350. </script>
  351. <script src="{$_G[setting][jspath]}common.js?{$_G[style][verhash]}" type="text/javascript"></script>
  352. <script src="{$_G[setting][jspath]}admincp.js?{$_G[style][verhash]}" type="text/javascript"></script>
  353. <script type="text/javascript">
  354. if(ISFRAME && !parent.document.getElementById('leftmenu') && !parent.parent.document.getElementById('leftmenu')) {
  355. redirect(admincpfilename + '?frames=yes&' + document.URL.substr(document.URL.indexOf(admincpfilename) + admincpfilename.length + 1));
  356. }
  357. </script>
  358. <div id="append_parent"></div><div id="ajaxwaitid"></div>
  359. <div class="container" id="cpcontainer">
  360. EOT;
  361. if(empty($_G['inajax'])) {
  362. register_shutdown_function('cpfooter');
  363. }
  364. }
  365. function showsubmenu($title, $menus = array(), $right = '', $replace = array()) {
  366. if(empty($menus)) {
  367. $s = '<div class="itemtitle">'.$right.'<h3>'.cplang($title, $replace).'</h3></div>';
  368. } elseif(is_array($menus)) {
  369. $s = '<div class="itemtitle">'.$right.'<h3>'.cplang($title, $replace).'</h3><ul class="tab1">';
  370. foreach($menus as $k => $menu) {
  371. if(is_array($menu[0])) {
  372. $s .= '<li id="addjs'.$k.'" class="'.($menu[1] ? 'current' : 'hasdropmenu').'" onmouseover="dropmenu(this);"><a href="#"><span>'.cplang($menu[0]['menu']).'<em>&nbsp;&nbsp;</em></span></a><div id="addjs'.$k.'child" class="dropmenu" style="display:none;">';
  373. if(is_array($menu[0]['submenu'])) {
  374. foreach($menu[0]['submenu'] as $submenu) {
  375. $s .= $submenu[1] ? '<a href="'.ADMINSCRIPT.'?action='.$submenu[1].'" class="'.($submenu[2] ? 'current' : '').'" onclick="'.$submenu[3].'">'.cplang($submenu[0]).'</a>' : '<a><b>'.cplang($submenu[0]).'</b></a>';
  376. }
  377. }
  378. $s .= '</div></li>';
  379. } else {
  380. $s .= '<li'.($menu[2] ? ' class="current"' : '').'><a href="'.(!$menu[4] ? ADMINSCRIPT.'?action='.$menu[1] : $menu[1]).'"'.(!empty($menu[3]) ? ' target="_blank"' : '').'><span>'.cplang($menu[0]).'</span></a></li>';
  381. }
  382. }
  383. $s .= '</ul></div>';
  384. }
  385. echo !empty($menus) ? '<div class="floattop">'.$s.'</div><div class="floattopempty"></div>' : $s;
  386. }
  387. function showsubmenusteps($title, $menus = array(), $mleft = array(), $mright = array()) {
  388. $s = '<div class="itemtitle">'.($title ? '<h3>'.cplang($title).'</h3>' : '');
  389. if(is_array($mleft)) {
  390. $s .= '<ul class="tab1" style="margin-right:10px">';
  391. foreach($mleft as $k => $menu) {
  392. $s .= '<li'.($menu[2] ? ' class="current"' : '').'><a href="'.(!$menu[4] ? ADMINSCRIPT.'?action='.$menu[1] : $menu[1]).'"'.(!empty($menu[3]) ? ' target="_blank"' : '').'><span>'.cplang($menu[0]).'</span></a></li>';
  393. }
  394. $s .= '</ul>';
  395. }
  396. if(is_array($menus)) {
  397. $s .= '<ul class="stepstat">';
  398. $i = 0;
  399. foreach($menus as $menu) {
  400. $i++;
  401. $s .= '<li'.($menu[1] ? ' class="current"' : '').' id="step'.$i.'">'.$i.'.'.cplang($menu[0]).'</li>';
  402. }
  403. $s .= '</ul>';
  404. }
  405. if(is_array($mright)) {
  406. $s .= '<ul class="tab1">';
  407. foreach($mright as $k => $menu) {
  408. $s .= '<li'.($menu[2] ? ' class="current"' : '').'><a href="'.(!$menu[4] ? ADMINSCRIPT.'?action='.$menu[1] : $menu[1]).'"'.(!empty($menu[3]) ? ' target="_blank"' : '').'><span>'.cplang($menu[0]).'</span></a></li>';
  409. }
  410. $s .= '</ul>';
  411. }
  412. $s .= '</div>';
  413. echo $s;
  414. }
  415. function showsubmenuanchors($title, $menus = array(), $right = '') {
  416. if(!$title || !$menus || !is_array($menus)) {
  417. return;
  418. }
  419. echo <<<EOT
  420. <script type="text/JavaScript">var currentAnchor = '$GLOBALS[anchor]';</script>
  421. EOT;
  422. $s = '<div class="itemtitle">'.$right.'<h3>'.cplang($title).'</h3>';
  423. $s .= '<ul class="tab1" id="submenu">';
  424. foreach($menus as $k => $menu) {
  425. if($menu && is_array($menu)) {
  426. if(is_array($menu[0])) {
  427. $s .= '<li id="nav_m'.$k.'" class="hasdropmenu" onmouseover="dropmenu(this);"><a href="#"><span>'.cplang($menu[0]['menu']).'<em>&nbsp;&nbsp;</em></span></a><div id="nav_m'.$k.'child" class="dropmenu" style="display:none;"><ul>';
  428. if(is_array($menu[0]['submenu'])) {
  429. foreach($menu[0]['submenu'] as $submenu) {
  430. $s .= '<li '.(!$submenu[3] ? ' id="nav_'.$submenu[1].'" onclick="showanchor(this)"' : '').($submenu[2] ? ' class="current"' : '').'><a href="'.($submenu[3] ? ADMINSCRIPT.'?action='.$submenu[1] : '#').'">'.cplang($submenu[0]).'</a></li>';
  431. }
  432. }
  433. $s .= '</ul></div></li>';
  434. } else {
  435. $s .= '<li'.(!$menu[3] ? ' id="nav_'.$menu[1].'" onclick="showanchor(this)"' : '').($menu[2] ? ' class="current"' : '').'><a href="'.($menu[3] ? ADMINSCRIPT.'?action='.$menu[1] : '#').'"><span>'.cplang($menu[0]).'</span></a></li>';
  436. }
  437. }
  438. }
  439. $s .= '</ul>';
  440. $s .= '</div>';
  441. echo !empty($menus) ? '<div class="floattop">'.$s.'</div><div class="floattopempty"></div>' : $s;
  442. }
  443. function showtips($tips, $id = 'tips', $display = TRUE, $title = '') {
  444. $tips = cplang($tips);
  445. $tips = preg_replace('#</li>\s*<li>#i', '</li><li>', $tips);
  446. $tmp = explode('</li><li>', substr($tips, 4, -5));
  447. if(count($tmp) > 4) {
  448. $tips = '<li>'.$tmp[0].'</li><li>'.$tmp[1].'</li><li id="'.$id.'_more" style="border: none; background: none; margin-bottom: 6px;"><a href="###" onclick="var tiplis = $(\''.$id.'lis\').getElementsByTagName(\'li\');for(var i = 0; i < tiplis.length; i++){tiplis[i].style.display=\'\'}$(\''.$id.'_more\').style.display=\'none\';">'.cplang('tips_all').'...</a></li>';
  449. foreach($tmp AS $k => $v) {
  450. if($k > 1) {
  451. $tips .= '<li style="display: none">'.$v.'</li>';
  452. }
  453. }
  454. }
  455. unset($tmp);
  456. $title = $title ? $title : 'tips';
  457. showtableheader($title, '', 'id="'.$id.'"'.(!$display ? ' style="display: none;"' : ''), 0);
  458. showtablerow('', 'class="tipsblock" s="1"', '<ul id="'.$id.'lis">'.$tips.'</ul>');
  459. showtablefooter();
  460. }
  461. function showformheader($action, $extra = '', $name = 'cpform', $method = 'post') {
  462. global $_G;
  463. $anchor = isset($_GET['anchor']) ? dhtmlspecialchars($_GET['anchor']) : '';
  464. echo '<form name="'.$name.'" method="'.$method.'" autocomplete="off" action="'.ADMINSCRIPT.'?action='.$action.'" id="'.$name.'"'.($extra == 'enctype' ? ' enctype="multipart/form-data"' : " $extra").'>'.
  465. '<input type="hidden" name="formhash" value="'.FORMHASH.'" />'.
  466. '<input type="hidden" id="formscrolltop" name="scrolltop" value="" />'.
  467. '<input type="hidden" name="anchor" value="'.$anchor.'" />';
  468. }
  469. function showhiddenfields($hiddenfields = array()) {
  470. if(is_array($hiddenfields)) {
  471. foreach($hiddenfields as $key => $val) {
  472. $val = is_string($val) ? dhtmlspecialchars($val) : $val;
  473. echo "\n<input type=\"hidden\" name=\"$key\" value=\"$val\">";
  474. }
  475. }
  476. }
  477. function showtableheader($title = '', $classname = '', $extra = '', $titlespan = 15) {
  478. global $_G;
  479. $classname = str_replace(array('nobottom', 'notop'), array('nobdb', 'nobdt'), $classname);
  480. if(isset($_G['showsetting_multi'])) {
  481. if($_G['showsetting_multi'] == 0) {
  482. $extra .= ' style="width:'.($_G['showsetting_multicount'] * 270 + 20).'px"';
  483. } else {
  484. return;
  485. }
  486. }
  487. echo "\n".'<table class="tb tb2 '.$classname.'"'.($extra ? " $extra" : '').'>';
  488. if($title) {
  489. $span = $titlespan ? 'colspan="'.$titlespan.'"' : '';
  490. echo "\n".'<tr><th '.$span.' class="partition">'.cplang($title).'</th></tr>';
  491. showmultititle(1);
  492. }
  493. }
  494. function showmultititle($nofloat = 0) {
  495. global $_G;
  496. if(isset($_G['showtableheader_multi']) && $_G['showsetting_multi'] == 0) {
  497. $i = 0;
  498. $rows = '';
  499. foreach($_G['showtableheader_multi'] as $row) {
  500. $i++;
  501. $rows .= '<div class="multicol">'.$row.'</div>';
  502. }
  503. if($nofloat) {
  504. echo '<tr><td class="tbm"><div>'.$rows.'</div></td></tr>';
  505. } else {
  506. echo '<div id="multititle" class="tbm" style="width:'.($i * 270).'px;display:none">'.$rows.'</div>';
  507. echo '<script type="text/javascript">floatbottom(\'multititle\');</script>';
  508. }
  509. }
  510. }
  511. function showtagheader($tagname, $id, $display = FALSE, $classname = '') {
  512. global $_G;
  513. if(!empty($_G['showsetting_multi'])) {
  514. return;
  515. }
  516. echo '<'.$tagname.(!isset($_G['showsetting_multi']) && $classname ? " class=\"$classname\"" : '').' id="'.$id.'"'.($display ? '' : ' style="display: none"').'>';
  517. }
  518. function showtitle($title, $extra = '', $multi = 1) {
  519. global $_G;
  520. if(!empty($_G['showsetting_multi'])) {
  521. return;
  522. }
  523. echo "\n".'<tr'.($extra ? " $extra" : '').'><th colspan="15" class="partition">'.cplang($title).'</th></tr>';
  524. if($multi) {
  525. showmultititle(1);
  526. }
  527. }
  528. function showsubtitle($title = array(), $rowclass='header', $tdstyle=array()) {
  529. if(is_array($title)) {
  530. $subtitle = "\n<tr class=\"$rowclass\">";
  531. foreach($title as $k => $v) {
  532. if($v !== NULL) {
  533. $subtitle .= '<th'.($tdstyle[$k] ? ' '.$tdstyle[$k] : '').'>'.cplang($v).'</th>';
  534. }
  535. }
  536. $subtitle .= '</tr>';
  537. echo $subtitle;
  538. }
  539. }
  540. function showtablerow($trstyle = '', $tdstyle = array(), $tdtext = array(), $return = FALSE) {
  541. $rowswapclass = '';
  542. if(!preg_match('/class\s*=\s*[\'"]([^\'"<>]+)[\'"]/i', $trstyle, $matches)) {
  543. $rowswapclass = is_array($tdtext) && count($tdtext) > 2 ? ' class="hover"' : '';
  544. } else {
  545. if(is_array($tdtext) && count($tdtext) > 2) {
  546. $rowswapclass = " class=\"{$matches[1]} hover\"";
  547. $trstyle = preg_replace('/class\s*=\s*[\'"]([^\'"<>]+)[\'"]/i', '', $trstyle);
  548. }
  549. }
  550. $cells = "\n".'<tr'.($trstyle ? ' '.$trstyle : '').$rowswapclass.'>';
  551. if(isset($tdtext)) {
  552. if(is_array($tdtext)) {
  553. foreach($tdtext as $key => $td) {
  554. $cells .= '<td'.(is_array($tdstyle) && !empty($tdstyle[$key]) ? ' '.$tdstyle[$key] : '').'>'.$td.'</td>';
  555. }
  556. } else {
  557. $cells .= '<td'.(!empty($tdstyle) && is_string($tdstyle) ? ' '.$tdstyle : '').'>'.$tdtext.'</td>';
  558. }
  559. }
  560. $cells .= '</tr>';
  561. if($return) {
  562. return $cells;
  563. }
  564. echo $cells;
  565. }
  566. function showsetting($setname, $varname, $value, $type = 'radio', $disabled = '', $hidden = 0, $comment = '', $extra = '', $setid = '', $nofaq = false) {
  567. global $_G;
  568. $s = "\n";
  569. $check = array();
  570. $check['disabled'] = $disabled ? ($disabled == 'readonly' ? ' readonly' : ' disabled') : '';
  571. $check['disabledaltstyle'] = $disabled ? ', 1' : '';
  572. $nocomment = false;
  573. if(isset($_G['showsetting_multi'])) {
  574. $hidden = 0;
  575. if(is_array($varname)) {
  576. $varnameid = '_'.str_replace(array('[', ']'), '_', $varname[0]).'|'.$_G['showsetting_multi'];
  577. $varname[0] = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname[0]);
  578. } else {
  579. $varnameid = '_'.str_replace(array('[', ']'), '_', $varname).'|'.$_G['showsetting_multi'];
  580. $varname = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname);
  581. }
  582. } else {
  583. $varnameid = '';
  584. }
  585. if($type == 'radio') {
  586. $value ? $check['true'] = "checked" : $check['false'] = "checked";
  587. $value ? $check['false'] = '' : $check['true'] = '';
  588. $check['hidden1'] = $hidden ? ' onclick="$(\'hidden_'.$setname.'\').style.display = \'\';"' : '';
  589. $check['hidden0'] = $hidden ? ' onclick="$(\'hidden_'.$setname.'\').style.display = \'none\';"' : '';
  590. $onclick = $disabled && $disabled == 'readonly' ? ' onclick="return false"' : ($extra ? $extra : '');
  591. $s .= '<ul onmouseover="altStyle(this'.$check['disabledaltstyle'].');">'.
  592. '<li'.($check['true'] ? ' class="checked"' : '').'><input class="radio" type="radio"'.($varnameid ? ' id="_v1_'.$varnameid.'"' : '').' name="'.$varname.'" value="1" '.$check['true'].$check['hidden1'].$check['disabled'].$onclick.'>&nbsp;'.cplang('yes').'</li>'.
  593. '<li'.($check['false'] ? ' class="checked"' : '').'><input class="radio" type="radio"'.($varnameid ? ' id="_v0_'.$varnameid.'"' : '').' name="'.$varname.'" value="0" '.$check['false'].$check['hidden0'].$check['disabled'].$onclick.'>&nbsp;'.cplang('no').'</li>'.
  594. '</ul>';
  595. } elseif($type == 'text' || $type == 'password' || $type == 'number') {
  596. $s .= '<input name="'.$varname.'" value="'.dhtmlspecialchars($value).'" type="'.$type.'" class="txt" '.$check['disabled'].' '.$extra.' />';
  597. } elseif($type == 'htmltext') {
  598. $id .= 'html'.random(2);
  599. $s .= '<div id="'.$id.'">'.$value.'</div><input id="'.$id.'_v" name="'.$varname.'" value="'.dhtmlspecialchars($value).'" type="hidden" /><script type="text/javascript">sethtml(\''.$id.'\')</script>';
  600. } elseif($type == 'file') {
  601. $s .= '<input name="'.$varname.'" value="" type="file" class="txt uploadbtn marginbot" '.$check['disabled'].' '.$extra.' />';
  602. } elseif($type == 'filetext') {
  603. $defaulttype = $value ? 1 : 0;
  604. $id = 'file'.random(2);
  605. $s .= '<input id="'.$id.'_0" style="display:'.($defaulttype ? 'none' : '').'" name="'.($defaulttype ? 'TMP' : '').$varname.'" value="" type="file" class="txt uploadbtn marginbot" '.$check['disabled'].' '.$extra.' />'.
  606. '<input id="'.$id.'_1" style="display:'.(!$defaulttype ? 'none' : '').'" name="'.(!$defaulttype ? 'TMP' : '').$varname.'" value="'.dhtmlspecialchars($value).'" type="text" class="txt marginbot" '.$extra.' /><br />'.
  607. '<a id="'.$id.'_0a" style="'.(!$defaulttype ? 'font-weight:bold' : '').'" href="javascript:;" onclick="$(\''.$id.'_1a\').style.fontWeight = \'\';this.style.fontWeight = \'bold\';$(\''.$id.'_1\').name = \'TMP'.$varname.'\';$(\''.$id.'_0\').name = \''.$varname.'\';$(\''.$id.'_0\').style.display = \'\';$(\''.$id.'_1\').style.display = \'none\'">'.cplang('switch_upload').'</a>&nbsp;'.
  608. '<a id="'.$id.'_1a" style="'.($defaulttype ? 'font-weight:bold' : '').'" href="javascript:;" onclick="$(\''.$id.'_0a\').style.fontWeight = \'\';this.style.fontWeight = \'bold\';$(\''.$id.'_0\').name = \'TMP'.$varname.'\';$(\''.$id.'_1\').name = \''.$varname.'\';$(\''.$id.'_1\').style.display = \'\';$(\''.$id.'_0\').style.display = \'none\'">'.cplang('switch_url').'</a>';
  609. } elseif($type == 'textarea') {
  610. $readonly = $disabled ? 'readonly' : '';
  611. $s .= "<textarea $readonly rows=\"6\" ".(!isset($_G['showsetting_multi']) ? "ondblclick=\"textareasize(this, 1)\"" : '')." onkeyup=\"textareasize(this, 0)\" onkeydown=\"textareakey(this, event)\" name=\"$varname\" id=\"$varname\" cols=\"50\" class=\"tarea\" $extra>".dhtmlspecialchars($value)."</textarea>";
  612. } elseif($type == 'select') {
  613. $s .= '<select name="'.$varname[0].'" '.$extra.'>';
  614. foreach($varname[1] as $option) {
  615. if(!array_key_exists(0, $option)) {
  616. $option = array_values($option);
  617. }
  618. $selected = $option[0] == $value ? 'selected="selected"' : '';
  619. if(empty($option[2])) {
  620. $s .= "<option value=\"$option[0]\" $selected>".$option[1]."</option>\n";
  621. } else {
  622. $s .= "<optgroup label=\"".$option[1]."\"></optgroup>\n";
  623. }
  624. }
  625. $s .= '</select>';
  626. } elseif($type == 'mradio' || $type == 'mradio2') {
  627. $nocomment = $type == 'mradio2' && !isset($_G['showsetting_multi']) ? true : false;
  628. $addstyle = $nocomment ? ' style="float: left; width: 18%"' : '';
  629. $ulstyle = $nocomment ? ' style="width: 790px"' : '';
  630. if(is_array($varname)) {
  631. $radiocheck = array($value => ' checked');
  632. $s .= '<ul'.(empty($varname[2]) ? ' class="nofloat"' : '').' onmouseover="altStyle(this'.$check['disabledaltstyle'].');"'.$ulstyle.'>';
  633. foreach($varname[1] as $varary) {
  634. if(is_array($varary) && !empty($varary)) {
  635. if(!array_key_exists(0, $varary)) {
  636. $varary = array_values($varary);
  637. }
  638. $onclick = '';
  639. if(!isset($_G['showsetting_multi']) && !empty($varary[2])) {
  640. foreach($varary[2] as $ctrlid => $display) {
  641. $onclick .= '$(\''.$ctrlid.'\').style.display = \''.$display.'\';';
  642. }
  643. }
  644. $onclick && $onclick = ' onclick="'.$onclick.'"';
  645. $s .= '<li'.($radiocheck[$varary[0]] ? ' class="checked"' : '').$addstyle.'><input class="radio" type="radio"'.($varnameid ? ' id="_v'.md5($varary[0]).'_'.$varnameid.'"' : '').' name="'.$varname[0].'" value="'.$varary[0].'"'.$radiocheck[$varary[0]].$check['disabled'].$onclick.'>&nbsp;'.$varary[1].'</li>';
  646. }
  647. }
  648. $s .= '</ul>';
  649. }
  650. } elseif($type == 'mcheckbox' || $type == 'mcheckbox2') {
  651. $nocomment = $type != 'mcheckbox2' && count($varname[1]) > 3 && !isset($_G['showsetting_multi']) ? true : false;
  652. $addstyle = $nocomment ? ' style="float: left;'.(empty($_G['showsetting_multirow']) ? ' width: 18%;overflow: hidden;' : '').'"' : '';
  653. $ulstyle = $nocomment && empty($_G['showsetting_multirow']) ? ' style="width: 790px"' : '';
  654. $s .= '<ul class="nofloat" onmouseover="altStyle(this'.$check['disabledaltstyle'].');"'.$ulstyle.'>';
  655. foreach($varname[1] as $varary) {
  656. if(is_array($varary) && !empty($varary)) {
  657. if(!array_key_exists(0, $varary)) {
  658. $varary = array_values($varary);
  659. }
  660. $onclick = !isset($_G['showsetting_multi']) && !empty($varary[2]) ? ' onclick="$(\''.$varary[2].'\').style.display = $(\''.$varary[2].'\').style.display == \'none\' ? \'\' : \'none\';"' : '';
  661. $checked = is_array($value) && in_array($varary[0], $value) ? ' checked' : '';
  662. $s .= '<li'.($checked ? ' class="checked"' : '').$addstyle.' title="'.dhtmlspecialchars($varary[1]).'"><input class="checkbox" type="checkbox"'.($varnameid ? ' id="_v'.md5($varary[0]).'_'.$varnameid.'"' : '').' name="'.$varname[0].'[]" value="'.$varary[0].'"'.$checked.$check['disabled'].$onclick.'>&nbsp;'.$varary[1].'</li>';
  663. }
  664. }
  665. $s .= '</ul>';
  666. } elseif($type == 'binmcheckbox') {
  667. $checkboxs = count($varname[1]);
  668. $value = sprintf('%0'.$checkboxs.'b', $value);$i = 1;
  669. $s .= '<ul class="nofloat" onmouseover="altStyle(this'.$check['disabledaltstyle'].');">';
  670. foreach($varname[1] as $key => $var) {
  671. if($var !== false) {
  672. $s .= '<li'.($value{$checkboxs - $i} ? ' class="checked"' : '').'><input class="checkbox" type="checkbox"'.($varnameid ? ' id="_v'.md5($i).'_'.$varnameid.'"' : '').' name="'.$varname[0].'['.$i.']" value="1"'.($value{$checkboxs - $i} ? ' checked' : '').' '.(!empty($varname[2][$key]) ? $varname[2][$key] : '').'>&nbsp;'.$var.'</li>';
  673. }
  674. $i++;
  675. }
  676. $s .= '</ul>';
  677. } elseif($type == 'omcheckbox') {
  678. $nocomment = count($varname[1]) > 3 ? true : false;
  679. $addstyle = $nocomment ? 'style="float: left; width: 18%"' : '';
  680. $ulstyle = $nocomment ? 'style="width: 790px"' : '';
  681. $s .= '<ul onmouseover="altStyle(this'.$check['disabledaltstyle'].');"'.(empty($varname[2]) ? ' class="nofloat"' : 'class="ckbox"').' '.$ulstyle.'>';
  682. foreach($varname[1] as $varary) {
  683. if(is_array($varary) && !empty($varary)) {
  684. $checked = is_array($value) && $value[$varary[0]] ? ' checked' : '';
  685. $s .= '<li'.($checked ? ' class="checked"' : '').' '.$addstyle.'><input class="checkbox" type="checkbox" name="'.$varname[0].'['.$varary[0].']" value="'.$varary[2].'"'.$checked.$check['disabled'].'>&nbsp;'.$varary[1].'</li>';
  686. }
  687. }
  688. $s .= '</ul>';
  689. } elseif($type == 'mselect') {
  690. $s .= '<select name="'.$varname[0].'" multiple="multiple" size="10" '.$extra.'>';
  691. foreach($varname[1] as $option) {
  692. if(!array_key_exists(0, $option)) {
  693. $option = array_values($option);
  694. }
  695. $selected = is_array($value) && in_array($option[0], $value) ? 'selected="selected"' : '';
  696. if(empty($option[2])) {
  697. $s .= "<option value=\"$option[0]\" $selected>".$option[1]."</option>\n";
  698. } else {
  699. $s .= "<optgroup label=\"".$option[1]."\"></optgroup>\n";
  700. }
  701. }
  702. $s .= '</select>';
  703. } elseif($type == 'color') {
  704. global $stylestuff;
  705. $preview_varname = str_replace('[', '_', str_replace(']', '', $varname));
  706. $code = explode(' ', $value);
  707. $css = '';
  708. for($i = 0; $i <= 1; $i++) {
  709. if($code[$i] != '') {
  710. if($code[$i]{0} == '#') {
  711. $css .= strtoupper($code[$i]).' ';
  712. } elseif(preg_match('/^http:\/\//i', $code[$i])) {
  713. $css .= 'url(\''.$code[$i].'\') ';
  714. } else {
  715. $css .= 'url(\''.$stylestuff['imgdir']['subst'].'/'.$code[$i].'\') ';
  716. }
  717. }
  718. }
  719. $background = trim($css);
  720. $colorid = ++$GLOBALS['coloridcount'];
  721. $s .= "<input id=\"c{$colorid}_v\" type=\"text\" class=\"txt\" style=\"float:left; width:210px;\" value=\"$value\" name=\"$varname\" onchange=\"updatecolorpreview('c{$colorid}')\">\n".
  722. "<input id=\"c$colorid\" onclick=\"c{$colorid}_frame.location='static/image/admincp/getcolor.htm?c{$colorid}|c{$colorid}_v';showMenu({'ctrlid':'c$colorid'})\" type=\"button\" class=\"colorwd\" value=\"\" style=\"background: $background\"><span id=\"c{$colorid}_menu\" style=\"display: none\"><iframe name=\"c{$colorid}_frame\" src=\"\" frameborder=\"0\" width=\"210\" height=\"148\" scrolling=\"no\"></iframe></span>\n$extra";
  723. } elseif($type == 'calendar') {
  724. $s .= "<input type=\"text\" class=\"txt\" name=\"$varname\" value=\"".dhtmlspecialchars($value)."\" onclick=\"showcalendar(event, this".($extra ? ', 1' : '').")\">\n";
  725. } elseif(in_array($type, array('multiply', 'range', 'daterange'))) {
  726. $onclick = $type == 'daterange' ? ' onclick="showcalendar(event, this)"' : '';
  727. if(isset($_G['showsetting_multi'])) {
  728. $varname[1] = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname[1]);
  729. }
  730. $s .= "<input type=\"text\" class=\"txt\" name=\"$varname[0]\" value=\"".dhtmlspecialchars($value[0])."\" style=\"width: 108px; margin-right: 5px;\"$onclick>".($type == 'multiply' ? ' X ' : ' -- ')."<input type=\"text\" class=\"txt\" name=\"$varname[1]\" value=\"".dhtmlspecialchars($value[1])."\"class=\"txt\" style=\"width: 108px; margin-left: 5px;\"$onclick>";
  731. } else {
  732. $s .= $type;
  733. }
  734. $name = cplang($setname);
  735. $name .= $name && substr($name, -1) != ':' ? ':' : '';
  736. $name = $disabled ? '<span class="lightfont">'.$name.'</span>' : $name;
  737. $setid = !$setid ? substr(md5($setname), 0, 4) : $setid;
  738. $setid = isset($_G['showsetting_multi']) ? 'S'.$setid : $setid;
  739. if(!empty($_G['showsetting_multirow'])) {
  740. if(empty($_G['showsetting_multirow_n'])) {
  741. echo '<tr>';
  742. }
  743. echo '<td class="vtop rowform"><p class="td27m">'.$name.'</p>'.$s.'</td>';
  744. $_G['showsetting_multirow_n']++;
  745. if($_G['showsetting_multirow_n'] == 2) {
  746. if(empty($_G['showsetting_multirow_n'])) {
  747. echo '</tr>';
  748. }
  749. $_G['showsetting_multirow_n'] = 0;
  750. }
  751. return;
  752. }
  753. if(!isset($_G['showsetting_multi'])) {
  754. if(!$nofaq) {
  755. $faqurl = 'http://faq.comsenz.com?type=admin&ver='.$_G['setting']['version'].'&action='.rawurlencode($_GET['action']).'&operation='.rawurlencode($_GET['operation']).'&key='.rawurlencode($setname);
  756. showtablerow('onmouseover="setfaq(this, \'faq'.$setid.'\')"', 'colspan="2" class="td27" s="1"', $name.'<a id="faq'.$setid.'" class="faq" title="'.cplang('setting_faq_title').'" href="'.$faqurl.'" target="_blank" style="display:none">&nbsp;&nbsp;&nbsp;</a>');
  757. } else {
  758. showtablerow('', 'colspan="2" class="td27" s="1"', $name);
  759. }
  760. } else {
  761. if(empty($_G['showsetting_multijs'])) {
  762. $_G['setting_JS'] .= 'var ss = new Array();';
  763. $_G['showsetting_multijs'] = 1;
  764. }
  765. if($_G['showsetting_multi'] == 0) {
  766. showtablerow('', array('class="td27"'), array('<div id="D'.$setid.'"></div>'));
  767. $_G['setting_JS'] .= 'ss[\'D'.$setid.'\'] = new Array();';
  768. }
  769. $name = preg_replace("/\r\n|\n|\r/", '\n', addcslashes($name, "'\\"));
  770. $_G['setting_JS'] .= 'ss[\'D'.$setid.'\'] += \'<div class="multicol">'.$name.'</div>\';';
  771. }
  772. if(!$nocomment && ($type != 'omcheckbox' || $varname[2] != 'isfloat')) {
  773. if(!isset($_G['showsetting_multi'])) {
  774. showtablerow('class="noborder" onmouseover="setfaq(this, \'faq'.$setid.'\')"', array('class="vtop rowform"', 'class="vtop tips2" s="1"'), array(
  775. $s,
  776. ($comment ? $comment : cplang($setname.'_comment', false)).($type == 'textarea' ? '<br />'.cplang('tips_textarea') : '').
  777. ($disabled ? '<br /><span class="smalltxt" style="color:#F00">'.cplang($setname.'_disabled', false).'</span>' : NULL)
  778. ));
  779. } else {
  780. if($_G['showsetting_multi'] == 0) {
  781. showtablerow('class="noborder"', array('class="vtop rowform" style="width:auto"'), array(
  782. '<div id="'.$setid.'"></div>'
  783. ));
  784. $_G['setting_JS'] .= 'ss[\''.$setid.'\'] = new Array();';
  785. }
  786. $s = preg_replace("/\r\n|\n|\r/", '\n', addcslashes($s, "'\\"));
  787. $_G['setting_JS'] .= 'ss[\''.$setid.'\'] += \'<div class="multicol">'.$s.'</div>\';';
  788. }
  789. } else {
  790. showtablerow('class="noborder" onmouseover="setfaq(this, \'faq'.$setid.'\')"', array('colspan="2" class="vtop rowform"'), array($s));
  791. }
  792. if($hidden) {
  793. showtagheader('tbody', 'hidden_'.$setname, $value, 'sub');
  794. }
  795. }
  796. function showmulti() {
  797. global $_G;
  798. $_G['setting_JS'] .= <<<EOF
  799. for(i in ss) {
  800. $(i).innerHTML=ss[i];
  801. }
  802. EOF;
  803. }
  804. function mradio($name, $items = array(), $checked = '', $float = TRUE) {
  805. $list = '<ul'.($float ? '' : ' class="nofloat"').' onmouseover="altStyle(this);">';
  806. if(is_array($items)) {
  807. foreach($items as $value => $item) {
  808. $list .= '<li'.($checked == $value ? ' class="checked"' : '').'><input type="radio" name="'.$name.'" value="'.$value.'" class="radio"'.($checked == $value ? ' checked="checked"' : '').' /> '.$item.'</li>';
  809. }
  810. }
  811. $list .= '</ul>';
  812. return $list;
  813. }
  814. function mcheckbox($name, $items = array(), $checked = array()) {
  815. $list = '<ul class="dblist" onmouseover="altStyle(this);">';
  816. if(is_array($items)) {
  817. foreach($items as $value => $item) {
  818. $list .= '<li'.(empty($checked) || in_array($value, $checked) ? ' class="checked"' : '').'><input type="checkbox" name="'.$name.'[]" value="'.$value.'" class="checkbox"'.(empty($checked) || in_array($value, $checked) ? ' checked="checked"' : '').' /> '.$item.'</li>';
  819. }
  820. }
  821. $list .= '</ul>';
  822. return $list;
  823. }
  824. function showsubmit($name = '', $value = 'submit', $before = '', $after = '', $floatright = '', $entersubmit = true) {
  825. global $_G;
  826. if(!empty($_G['showsetting_multi'])) {
  827. return;
  828. }
  829. $str = '<tr>';
  830. $str .= $name && in_array($before, array('del', 'select_all', 'td')) ? '<td class="td25">'.($before != 'td' ? '<input type="checkbox" name="chkall" id="chkall'.($chkkallid = random(4)).'" class="checkbox" onclick="checkAll(\'prefix\', this.form, \'delete\')" /><label for="chkall'.$chkkallid.'">'.cplang($before) : '').'</label></td>' : '';
  831. $str .= '<td colspan="15">';
  832. $str .= $floatright ? '<div class="cuspages right">'.$floatright.'</div>' : '';
  833. $str .= '<div class="fixsel">';
  834. $str .= $before && !in_array($before, array('del', 'select_all', 'td')) ? $before.' &nbsp;' : '';
  835. $str .= $name ? '<input type="submit" class="btn" id="submit_'.$name.'" name="'.$name.'" title="'.($entersubmit ? cplang('submit_tips') : '').'" value="'.cplang($value).'" />' : '';
  836. $after = $after == 'more_options' ? '<input class="checkbox" type="checkbox" value="1" onclick="$(\'advanceoption\').style.display = $(\'advanceoption\').style.display == \'none\' ? \'\' : \'none\'; this.value = this.value == 1 ? 0 : 1; this.checked = this.value == 1 ? false : true" id="btn_more" /><label for="btn_more">'.cplang('more_options').'</label>' : $after;
  837. $str = $after ? $str.(($before && $before != 'del') || $name ? ' &nbsp;' : '').$after : $str;
  838. $str .= '</div></td>';
  839. $str .= '</tr>';
  840. echo $str.($name && $entersubmit ? '<script type="text/JavaScript">_attachEvent(document.documentElement, \'keydown\', function (e) { entersubmit(e, \''.$name.'\'); });</script>' : '');
  841. }
  842. function showtagfooter($tagname) {
  843. global $_G;
  844. if(!empty($_G['showsetting_multi'])) {
  845. return;
  846. }
  847. echo '</'.$tagname.'>';
  848. }
  849. function showtablefooter() {
  850. global $_G;
  851. if(!empty($_G['showsetting_multi'])) {
  852. return;
  853. }
  854. echo '</table>'."\n";
  855. }
  856. function showformfooter() {
  857. global $_G;
  858. if(!empty($_G['setting_JS'])) {
  859. echo '<script type="text/JavaScript">'.$_G['setting_JS'].'</script>';
  860. }
  861. updatesession();
  862. echo '</form>'."\n";
  863. if($scrolltop = intval(getgpc('scrolltop'))) {
  864. echo '<script type="text/JavaScript">_attachEvent(window, \'load\', function () { scroll(0,'.$scrolltop.') }, document);</script>';
  865. }
  866. }
  867. function cpfooter() {
  868. global $_G, $admincp;
  869. if(defined('FOOTERDISABLED')) {
  870. exit;
  871. }
  872. require_once DISCUZ_ROOT.'./source/discuz_version.php';
  873. $version = DISCUZ_VERSION;
  874. $charset = CHARSET;
  875. echo "\n</div>";
  876. if(!empty($_GET['highlight'])) {
  877. $kws = explode(' ', $_GET['highlight']);
  878. echo '<script type="text/JavaScript">';
  879. foreach($kws as $kw) {
  880. $kw = addslashes($kw);
  881. echo 'parsetag(\''.dhtmlspecialchars($kw).'\');';
  882. }
  883. echo '</script>';
  884. }
  885. if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG && @include(libfile('function/debug'))) {
  886. function_exists('debugmessage') && debugmessage();
  887. }
  888. if($_G['adminid'] == 1 && $_GET['action'] == 'index') {
  889. $release = DISCUZ_RELEASE;
  890. $newsurl = 'ht'.'tp:/'.'/cus'.'tome'.'r.disc'.'uz.n'.'et/n'.'ews'.'.p'.'hp?'.siteinformation();
  891. echo <<<EOT
  892. <script type="text/javascript">
  893. var newhtml = '';
  894. newhtml += '<table class="tb tb2"><tr><th class="partition edited">&#x60A8;&#x5F53;&#x524D;&#x4F7F;&#x7528;&#x7684; Discuz! &#x7A0B;&#x5E8F;&#x7248;&#x672C;&#x6709;&#x91CD;&#x8981;&#x66F4;&#x65B0;&#xFF0C;&#x8BF7;&#x53C2;&#x7167;&#x4EE5;&#x4E0B;&#x63D0;&#x793A;&#x8FDB;&#x884C;&#x53CA;&#x65F6;&#x5347;&#x7EA7;</th></tr>';
  895. newhtml += '<tr><td class="tipsblock"><a href="http://faq.comsenz.com/checkversion.php?product=Discuz&version={$version}&release={$release}&charset={$charset}" target="_blank"><img src="{$newsurl}" onload="shownews()" /></a></td></tr></table>';
  896. \$('boardnews').style.display = 'none';
  897. \$('boardnews').innerHTML = newhtml;
  898. function shownews() {
  899. \$('boardnews').style.display = '';
  900. }
  901. </script>
  902. EOT;
  903. }
  904. echo "\n</body>\n</html>";
  905. }
  906. if(!function_exists('ajaxshowheader')) {
  907. function ajaxshowheader() {
  908. global $_G;
  909. ob_end_clean();
  910. @header("Expires: -1");
  911. @header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
  912. @header("Pragma: no-cache");
  913. header("Content-type: application/xml");
  914. echo "<?xml version=\"1.0\" encoding=\"".CHARSET."\"?>\n<root><![CDATA[";
  915. }
  916. }
  917. if(!function_exists('ajaxshowfooter')) {
  918. function ajaxshowfooter() {
  919. echo ']]></root>';
  920. exit();
  921. }
  922. }
  923. function showimportdata() {
  924. showsetting('import_type', array('importtype', array(
  925. array('file', cplang('import_type_file'), array('importfile' => '', 'importtxt' => 'none')),
  926. array('txt', cplang('import_type_txt'), array('importfile' => 'none', 'importtxt' => ''))
  927. )), 'file', 'mradio');
  928. showtagheader('tbody', 'importfile', TRUE);
  929. showsetting('import_file', 'importfile', '', 'file');
  930. showtagfooter('tbody');
  931. showtagheader('tbody', 'importtxt');
  932. showsetting('import_txt', 'importtxt', '', 'textarea');
  933. showtagfooter('tbody');
  934. }
  935. function getimportdata($name = '', $addslashes = 0, $ignoreerror = 0) {
  936. global $_G;
  937. if($_GET['importtype'] == 'file') {
  938. $data = @implode('', file($_FILES['importfile']['tmp_name']));
  939. @unlink($_FILES['importfile']['tmp_name']);
  940. } else {
  941. if(!empty($_GET['importtxt'])) {
  942. $data = $_GET['importtxt'];
  943. } else {
  944. $data = $GLOBALS['importtxt'];
  945. }
  946. }
  947. require_once libfile('class/xml');
  948. $xmldata = xml2array($data);
  949. if(!is_array($xmldata) || !$xmldata) {
  950. if(!$ignoreerror) {
  951. cpmsg(cplang('import_data_invalid').cplang($data), '', 'error');
  952. } else {
  953. return array();
  954. }
  955. } else {
  956. if($name && $name != $xmldata['Title']) {
  957. if(!$ignoreerror) {
  958. cpmsg(cplang('import_data_typeinvalid').cplang($data), '', 'error');
  959. } else {
  960. return array();
  961. }
  962. }
  963. $data = exportarray($xmldata['Data'], 0);
  964. }
  965. if($addslashes) {
  966. $data = daddslashes($data, 1);
  967. }
  968. return $data;
  969. }
  970. function exportdata($name, $filename, $data) {
  971. global $_G;
  972. require_once libfile('class/xml');
  973. $root = array(
  974. 'Title' => $name,
  975. 'Version' => $_G['setting']['version'],
  976. 'Time' => dgmdate(TIMESTAMP, 'Y-m-d H:i'),
  977. 'From' => $_G['setting']['bbname'].' ('.$_G['siteurl'].')',
  978. 'Data' => exportarray($data, 1)
  979. );
  980. $filename = strtolower(str_replace(array('!', ' '), array('', '_'), $name)).'_'.$filename.'.xml';
  981. $plugin_export = array2xml($root, 1);
  982. ob_end_clean();
  983. dheader('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
  984. dheader('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
  985. dheader('Cache-Control: no-cache, must-revalidate');
  986. dheader('Pragma: no-cache');
  987. dheader('Content-Encoding: none');
  988. dheader('Content-Length: '.strlen($plugin_export));
  989. dheader('Content-Disposition: attachment; filename='.$filename);
  990. dheader('Content-Type: text/xml');
  991. echo $plugin_export;
  992. define('FOOTERDISABLED' , 1);
  993. exit();
  994. }
  995. function exportarray($array, $method) {
  996. $tmp = $array;
  997. if($method) {
  998. foreach($array as $k => $v) {
  999. if(is_array($v)) {
  1000. $tmp[$k] = exportarray($v, 1);
  1001. } else {
  1002. $uv = unserialize($v);
  1003. if($uv && is_array($uv)) {
  1004. $tmp['__'.$k] = exportarray($uv, 1);
  1005. unset($tmp[$k]);
  1006. } else {
  1007. $tmp[$k] = $v;
  1008. }
  1009. }
  1010. }
  1011. } else {
  1012. foreach($array as $k => $v) {
  1013. if(is_array($v)) {
  1014. if(substr($k, 0, 2) == '__') {
  1015. $tmp[substr($k, 2)] = serialize(exportarray($v, 0));
  1016. unset($tmp[$k]);
  1017. } else {
  1018. $tmp[$k] = exportarray($v, 0);
  1019. }
  1020. } else {
  1021. $tmp[$k] = $v;
  1022. }
  1023. }
  1024. }
  1025. return $tmp;
  1026. }
  1027. function getwheres($intkeys, $strkeys, $randkeys, $likekeys, $pre='') {
  1028. $wherearr = array();
  1029. $urls = array();
  1030. foreach ($intkeys as $var) {
  1031. $value = isset($_GET[$var])?$_GET[$var]:'';
  1032. if(strlen($value)) {
  1033. $urls[] = "$var=$value";
  1034. $var = addslashes($var);
  1035. $wherearr[] = "{$pre}{$var}='".intval($value)."'";
  1036. }
  1037. }
  1038. foreach ($strkeys as $var) {
  1039. $value = isset($_GET[$var])?trim($_GET[$var]):'';
  1040. if(strlen($value)) {
  1041. $urls[] = "$var=".rawurlencode($value);
  1042. $var = addslashes($var);
  1043. $value = addslashes($value);
  1044. $wherearr[] = "{$pre}{$var}='$value'";
  1045. }
  1046. }
  1047. foreach ($randkeys as $vars) {
  1048. $value1 = isset($_GET[$vars[1].'1'])?$vars[0]($_GET[$vars[1].'1']):'';
  1049. $value2 = isset($_GET[$vars[1].'2'])?$vars[0]($_GET[$vars[1].'2']):'';
  1050. if($value1) {
  1051. $urls[] = "{$vars[1]}1=".rawurlencode($_GET[$vars[1].'1']);
  1052. $vars[1] = addslashes($vars[1]);
  1053. $value1 = addslashes($value1);
  1054. $wherearr[] = "{$pre}{$vars[1]}>='$value1'";
  1055. }
  1056. if($value2) {
  1057. $wherearr[] = "{$pre}{$vars[1]}<='$value2'";
  1058. $vars[2] = addslashes($vars[2]);
  1059. $value2 = addslashes($value2);
  1060. $urls[] = "{$vars[1]}2=".rawurlencode($_GET[$vars[1].'2']);
  1061. }
  1062. }
  1063. foreach ($likekeys as $var) {
  1064. $value = isset($_GET[$var])?stripsearchkey($_GET[$var]):'';
  1065. if(strlen($value)>1) {
  1066. $urls[] = "$var=".rawurlencode($_GET[$var]);
  1067. $var = addslashes($var);
  1068. $value = addslashes($value);
  1069. $wherearr[] = "{$pre}{$var} LIKE BINARY '%$value%'";
  1070. }
  1071. }
  1072. return array('wherearr'=>$wherearr, 'urls'=>$urls);
  1073. }
  1074. function getorders($alloworders, $default, $pre='') {
  1075. $orders = array('sql'=>'', 'urls'=>array());
  1076. if(empty($_GET['orderby']) || !in_array($_GET['orderby'], $alloworders)) {
  1077. $_GET['orderby'] = $default;
  1078. if(empty($_GET['ordersc'])) $_GET['ordersc'] = 'desc';
  1079. }
  1080. $orders['sql'] = " ORDER BY {$pre}$_GET[orderby] ";
  1081. $orders['urls'][] = "orderby=$_GET[orderby]";
  1082. if(!empty($_GET['ordersc']) && $_GET['ordersc'] == 'desc') {
  1083. $orders['urls'][] = 'ordersc=desc';
  1084. $orders['sql'] .= ' DESC ';
  1085. } else {
  1086. $orders['urls'][] = 'ordersc=asc';
  1087. }
  1088. return $orders;
  1089. }
  1090. function blog_replynum_stat($start, $perpage) {
  1091. global $_G;
  1092. $next = false;
  1093. $updates = array();
  1094. $query = C::t('home_blog')->range($start, $perpage);
  1095. foreach($query as $value) {
  1096. $next = true;
  1097. $count = C::t('home_comment')->count_by_id_idtype($value['blogid'], 'blogid');
  1098. if($count != $value['replynum']) {
  1099. $updates[$value['blogid']] = $count;
  1100. }
  1101. }
  1102. if(empty($updates)) return $next;
  1103. $nums = renum($updates);
  1104. foreach ($nums[0] as $count) {
  1105. C::t('home_blog')->update($nums[1][$count], array('replynum' => $count));
  1106. }
  1107. return $next;
  1108. }
  1109. function space_friendnum_stat($start, $perpage) {
  1110. global $_G;
  1111. $next = false;
  1112. $updates = array();
  1113. foreach(C::t('common_member_count')->range($start,$perpage) as $uid => $value) {
  1114. $next = true;
  1115. $count = C::t('home_friend')->count_by_uid($value['uid']);
  1116. if($count != $value['friends']) {
  1117. $updates[$value['uid']] = $count;
  1118. }
  1119. }
  1120. if(empty($updates)) return $next;
  1121. $nums = renum($updates);
  1122. foreach ($nums[0] as $count) {
  1123. C::t('common_member_count')->update($nums[1][$count], array('friends' => $count));
  1124. }
  1125. return $next;
  1126. }
  1127. function album_picnum_stat($start, $perpage) {
  1128. global $_G;
  1129. $next = false;
  1130. $updates = array();
  1131. $query = C::t('home_album')->range($start, $perpage);
  1132. foreach($query as $value) {
  1133. $next = true;
  1134. $count = C::t('home_pic')->check_albumpic($value['albumid']);
  1135. if($count != $value['p…

Large files files are truncated, but you can click here to view the full file