function_admincp.php 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381
  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 36353 2017-01-17 07:19:28Z nemohou $
  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').DIRECTORY_SEPARATOR) === 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 upgradeinformation($status = 0) {
  54. global $_G, $upgrade_step;
  55. if(empty($upgrade_step)) {
  56. return '';
  57. }
  58. $update = array();
  59. $siteuniqueid = C::t('common_setting')->fetch('siteuniqueid');
  60. $update['uniqueid'] = $siteuniqueid;
  61. $update['curversion'] = $upgrade_step['curversion'];
  62. $update['currelease'] = $upgrade_step['currelease'];
  63. $update['upgradeversion'] = $upgrade_step['version'];
  64. $update['upgraderelease'] = $upgrade_step['release'];
  65. $update['step'] = $upgrade_step['step'] == 'dbupdate' ? 4 : $upgrade_step['step'];
  66. $update['status'] = $status;
  67. $data = '';
  68. foreach($update as $key => $value) {
  69. $data .= $key.'='.rawurlencode($value).'&';
  70. }
  71. $upgradeurl = 'ht'.'tp:/'.'/cus'.'tome'.'r.disc'.'uz.n'.'et/upg'.'rade'.'.p'.'hp?'.'os=dx&update='.rawurlencode(base64_encode($data)).'&timestamp='.TIMESTAMP;
  72. return '<img src="'.$upgradeurl.'" />';
  73. }
  74. function isfounder($user = '') {
  75. $user = empty($user) ? getglobal('member') : $user;
  76. return $GLOBALS['admincp']->checkfounder($user);
  77. }
  78. function cplang($name, $replace = array(), $output = false) {
  79. global $_G;
  80. $ret = '';
  81. if(!isset($_G['lang']['admincp'])) {
  82. lang('admincp');
  83. }
  84. if(!isset($_G['lang']['admincp_menu'])) {
  85. lang('admincp_menu');
  86. }
  87. if(!isset($_G['lang']['admincp_msg'])) {
  88. lang('admincp_msg');
  89. }
  90. if(isset($_G['lang']['admincp'][$name])) {
  91. $ret = $_G['lang']['admincp'][$name];
  92. } elseif(isset($_G['lang']['admincp_menu'][$name])) {
  93. $ret = $_G['lang']['admincp_menu'][$name];
  94. } elseif(isset($_G['lang']['admincp_msg'][$name])) {
  95. $ret = $_G['lang']['admincp_msg'][$name];
  96. }
  97. $ret = $ret ? $ret : ($replace === false ? '' : $name);
  98. if($replace && is_array($replace)) {
  99. $s = $r = array();
  100. foreach($replace as $k => $v) {
  101. $s[] = '{'.$k.'}';
  102. $r[] = $v;
  103. }
  104. $ret = str_replace($s, $r, $ret);
  105. }
  106. $output && print($ret);
  107. return $ret;
  108. }
  109. function admincustom($title, $url, $sort = 0) {
  110. global $_G;
  111. $url = ADMINSCRIPT.'?'.$url;
  112. $id = C::t('common_admincp_cmenu')->fetch_id_by_uid_sort_url($_G['uid'], $sort, $url);
  113. if($id) {
  114. C::t('common_admincp_cmenu')->update($id, array('title' => $title, 'dateline' => $_G['timestamp']));
  115. C::t('common_admincp_cmenu')->increase_clicks($id);
  116. } else {
  117. $id = C::t('common_admincp_cmenu')->insert(array(
  118. 'title' => $title,
  119. 'url' => $url,
  120. 'sort' => $sort,
  121. 'uid' => $_G['uid'],
  122. 'dateline' => $_G['timestamp'],
  123. ), true);
  124. }
  125. return $id;
  126. }
  127. function cpurl($type = 'parameter', $filters = array('sid', 'frames')) {
  128. parse_str($_SERVER['QUERY_STRING'], $getarray);
  129. $extra = $and = '';
  130. foreach($getarray as $key => $value) {
  131. if(!in_array($key, $filters)) {
  132. @$extra .= $and.$key.($type == 'parameter' ? '%3D' : '=').rawurlencode($value);
  133. $and = $type == 'parameter' ? '%26' : '&';
  134. }
  135. }
  136. return $extra;
  137. }
  138. function showheader($key, $url) {
  139. list($action, $operation, $do) = explode('_', $url.'___');
  140. $url = $action.($operation ? '&operation='.$operation.($do ? '&do='.$do : '') : '');
  141. $menuname = cplang('header_'.$key) != 'header_'.$key ? cplang('header_'.$key) : $key;
  142. echo '<li><em><a href="'.ADMINSCRIPT.'?action='.$url.'" id="header_'.$key.'" hidefocus="true" onmouseover="previewheader(\''.$key.'\')" onmouseout="previewheader()" onclick="toggleMenu(\''.$key.'\', \''.$url.'\');doane(event);">'.$menuname.'</a></em></li>';
  143. }
  144. function shownav($header = '', $menu = '', $nav = '') {
  145. global $action, $operation;
  146. $title = 'cplog_'.$action.($operation ? '_'.$operation : '');
  147. if(in_array($action, array('home', 'custommenu'))) {
  148. $customtitle = '';
  149. } elseif(cplang($title, false)) {
  150. $customtitle = $title;
  151. } elseif(cplang('nav_'.($header ? $header : 'index'), false)) {
  152. $customtitle = 'nav_'.$header;
  153. } else {
  154. $customtitle = rawurlencode($nav ? $nav : ($menu ? $menu : ''));
  155. }
  156. $title = cplang('header_'.($header ? $header : 'index')).($menu ? '&nbsp;&raquo;&nbsp;'.cplang($menu) : '').($nav ? '&nbsp;&raquo;&nbsp;'.cplang($nav) : '');
  157. $ctitle = cplang('header_'.($header ? $header : 'index'));
  158. if($menu) {
  159. $ctitle = cplang($menu);
  160. }
  161. if($nav) {
  162. $ctitle = cplang($nav);
  163. }
  164. $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>";
  165. $dtitle = str_replace("'", "\'", cplang('admincp_title').' - '.str_replace('&nbsp;&raquo;&nbsp;', ' - ', $title));
  166. echo '<script type="text/JavaScript">parent.document.title = \''.$dtitle.'\';if(parent.$(\'admincpnav\')) parent.$(\'admincpnav\').innerHTML=\''.$title.$addtomenu.'\';</script>';
  167. }
  168. function showmenu($key, $menus, $return = 0) {
  169. global $_G;
  170. $body = '';
  171. if(is_array($menus)) {
  172. foreach($menus as $menu) {
  173. if($menu[0] && $menu[1]) {
  174. list($action, $operation, $do) = explode('_', $menu[1]);
  175. $menu[1] = $action.($operation ? '&operation='.$operation.($do ? '&do='.$do : '') : '');
  176. $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>';
  177. } elseif($menu[0] && $menu[2]) {
  178. if($menu[2] == 1) {
  179. $id = 'M'.substr(md5($menu[0]), 0, 8);
  180. $hide = false;
  181. if(!empty($_G['cookie']['cpmenu_'.$id])) {
  182. $hide = true;
  183. }
  184. $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.'">';
  185. }
  186. if($menu[2] == 2) {
  187. $body .= '<li class="sp"></li></ol></div></li>';
  188. }
  189. }
  190. }
  191. }
  192. if(!$return) {
  193. echo '<ul id="menu_'.$key.'" style="display: none">'.$body.'</ul>';
  194. } else {
  195. return $body;
  196. }
  197. }
  198. function updatemenu($key) {
  199. @include DISCUZ_ROOT.'./source/admincp/admincp_menu.php';
  200. $s = showmenu($key, $menu[$key], 1);
  201. echo '<script type="text/JavaScript">parent.$(\'menu_'.$key.'\').innerHTML = \''.str_replace("'", "\'", $s).'\';parent.initCpMenus(\'leftmenu\');parent.initCpMap();</script>';
  202. }
  203. function cpmsg_error($message, $url = '', $extra = '', $halt = TRUE) {
  204. return cpmsg($message, $url, 'error', array(), $extra, $halt);
  205. }
  206. function cpmsg($message, $url = '', $type = '', $values = array(), $extra = '', $halt = TRUE, $cancelurl = '') {
  207. global $_G;
  208. $vars = explode(':', $message);
  209. $values['ADMINSCRIPT'] = ADMINSCRIPT;
  210. if(count($vars) == 2) {
  211. $message = lang('plugin/'.$vars[0], $vars[1], $values);
  212. } else {
  213. $message = cplang($message, $values);
  214. }
  215. switch($type) {
  216. case 'download':
  217. case 'succeed': $classname = 'infotitle2';break;
  218. case 'error': $classname = 'infotitle3';break;
  219. case 'loadingform': case 'loading': $classname = 'infotitle1';break;
  220. default: $classname = 'marginbot normal';break;
  221. }
  222. if($url) {
  223. $url = substr($url, 0, 5) == 'http:' ? $url : ADMINSCRIPT.'?'.$url;
  224. }
  225. $message = "<h4 class=\"$classname\">$message</h4>";
  226. $url .= $url && !empty($_GET['scrolltop']) ? '&scrolltop='.intval($_GET['scrolltop']) : '';
  227. if($type == 'form') {
  228. $message = "<form method=\"post\" action=\"$url\"><input type=\"hidden\" name=\"formhash\" value=\"".FORMHASH."\">".
  229. "<br />$message$extra<br />".
  230. "<p class=\"margintop\"><input type=\"submit\" class=\"btn\" name=\"confirmed\" value=\"".cplang('ok')."\"> &nbsp; \n".
  231. ($cancelurl ? "<input type=\"button\" class=\"btn\" value=\"".cplang('cancel')."\" onClick=\"location.href='$cancelurl'\">" :
  232. "<script type=\"text/javascript\">".
  233. "if(history.length > (BROWSER.ie ? 0 : 1)) document.write('<input type=\"button\" class=\"btn\" value=\"".cplang('cancel')."\" onClick=\"history.go(-1);\">');".
  234. "</script>").
  235. "</p></form><br />";
  236. } elseif($type == 'loadingform') {
  237. $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 />".
  238. '<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>';
  239. } else {
  240. $message .= $extra.($type == 'loading' ? '<img src="static/image/admincp/ajax_loader.gif" class="marginbot" />' : '');
  241. if($url) {
  242. if($type == 'button') {
  243. $message = "<br />$message<br /><p class=\"margintop\"><input type=\"submit\" class=\"btn\" name=\"submit\" value=\"".cplang('start')."\" onclick=\"location.href='$url'\" />";
  244. } else {
  245. $message .= '<p class="marginbot"><a href="'.$url.'" class="lightlink">'.cplang($type == 'download' ? 'message_download' : 'message_redirect').'</a></p>';
  246. $timeout = $type != 'loading' ? 3000 : 1000;
  247. $message .= "<script type=\"text/JavaScript\">setTimeout(\"redirect('$url');\", $timeout);</script>";
  248. }
  249. } elseif($type != 'succeed') {
  250. $message .= '<p class="marginbot">'.
  251. "<script type=\"text/javascript\">".
  252. "if(history.length > (BROWSER.ie ? 0 : 1)) document.write('<a href=\"javascript:history.go(-1);\" class=\"lightlink\">".cplang('message_return')."</a>');".
  253. "</script>".
  254. '</p>';
  255. }
  256. }
  257. if($halt) {
  258. echo '<h3>'.cplang('discuz_message').'</h3><div class="infobox">'.$message.'</div>';
  259. exit();
  260. } else {
  261. echo '<div class="infobox">'.$message.'</div>';
  262. }
  263. }
  264. function cpheader() {
  265. global $_G;
  266. if(!defined('DISCUZ_CP_HEADER_OUTPUT')) {
  267. define('DISCUZ_CP_HEADER_OUTPUT', true);
  268. } else {
  269. return true;
  270. }
  271. $IMGDIR = $_G['style']['imgdir'];
  272. $STYLEID = $_G['setting']['styleid'];
  273. $VERHASH = $_G['style']['verhash'];
  274. $frame = getgpc('frame') != 'no' ? 1 : 0;
  275. $charset = CHARSET;
  276. $basescript = ADMINSCRIPT;
  277. echo <<<EOT
  278. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  279. <html xmlns="http://www.w3.org/1999/xhtml">
  280. <head>
  281. <meta http-equiv="Content-Type" content="text/html; charset=$charset">
  282. <meta http-equiv="x-ua-compatible" content="ie=7" />
  283. <link href="static/image/admincp/admincp.css?{$_G[style][verhash]}" rel="stylesheet" type="text/css" />
  284. </head>
  285. <body>
  286. <script type="text/JavaScript">
  287. var admincpfilename = '$basescript', IMGDIR = '$IMGDIR', STYLEID = '$STYLEID', VERHASH = '$VERHASH', IN_ADMINCP = true, ISFRAME = $frame, STATICURL='static/', SITEURL = '$_G[siteurl]', JSPATH = '{$_G[setting][jspath]}';
  288. </script>
  289. <script src="{$_G[setting][jspath]}common.js?{$_G[style][verhash]}" type="text/javascript"></script>
  290. <script src="{$_G[setting][jspath]}admincp.js?{$_G[style][verhash]}" type="text/javascript"></script>
  291. <script type="text/javascript">
  292. if(ISFRAME && !parent.document.getElementById('leftmenu') && !parent.parent.document.getElementById('leftmenu')) {
  293. redirect(admincpfilename + '?frames=yes&' + document.URL.substr(document.URL.indexOf(admincpfilename) + admincpfilename.length + 1));
  294. }
  295. </script>
  296. <div id="append_parent"></div><div id="ajaxwaitid"></div>
  297. <div class="container" id="cpcontainer">
  298. EOT;
  299. if(empty($_G['inajax'])) {
  300. register_shutdown_function('cpfooter');
  301. }
  302. }
  303. function showsubmenu($title, $menus = array(), $right = '', $replace = array()) {
  304. if(empty($menus)) {
  305. $s = '<div class="itemtitle">'.$right.'<h3>'.cplang($title, $replace).'</h3></div>';
  306. } elseif(is_array($menus)) {
  307. $s = '<div class="itemtitle">'.$right.'<h3>'.cplang($title, $replace).'</h3><ul class="tab1">';
  308. foreach($menus as $k => $menu) {
  309. if(is_array($menu[0])) {
  310. $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;">';
  311. if(is_array($menu[0]['submenu'])) {
  312. foreach($menu[0]['submenu'] as $submenu) {
  313. $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>';
  314. }
  315. }
  316. $s .= '</div></li>';
  317. } else {
  318. $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>';
  319. }
  320. }
  321. $s .= '</ul></div>';
  322. }
  323. echo !empty($menus) ? '<div class="floattop">'.$s.'</div><div class="floattopempty"></div>' : $s;
  324. }
  325. function showsubmenusteps($title, $menus = array(), $mleft = array(), $mright = array()) {
  326. $s = '<div class="itemtitle">'.($title ? '<h3>'.cplang($title).'</h3>' : '');
  327. if(is_array($mleft)) {
  328. $s .= '<ul class="tab1" style="margin-right:10px">';
  329. foreach($mleft as $k => $menu) {
  330. $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>';
  331. }
  332. $s .= '</ul>';
  333. }
  334. if(is_array($menus)) {
  335. $s .= '<ul class="stepstat">';
  336. $i = 0;
  337. foreach($menus as $menu) {
  338. $i++;
  339. $s .= '<li'.($menu[1] ? ' class="current"' : '').' id="step'.$i.'">'.$i.'.'.cplang($menu[0]).'</li>';
  340. }
  341. $s .= '</ul>';
  342. }
  343. if(is_array($mright)) {
  344. $s .= '<ul class="tab1">';
  345. foreach($mright as $k => $menu) {
  346. $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>';
  347. }
  348. $s .= '</ul>';
  349. }
  350. $s .= '</div>';
  351. echo $s;
  352. }
  353. function showsubmenuanchors($title, $menus = array(), $right = '') {
  354. if(!$title || !$menus || !is_array($menus)) {
  355. return;
  356. }
  357. echo <<<EOT
  358. <script type="text/JavaScript">var currentAnchor = '$GLOBALS[anchor]';</script>
  359. EOT;
  360. $s = '<div class="itemtitle">'.$right.'<h3>'.cplang($title).'</h3>';
  361. $s .= '<ul class="tab1" id="submenu">';
  362. foreach($menus as $k => $menu) {
  363. if($menu && is_array($menu)) {
  364. if(is_array($menu[0])) {
  365. $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>';
  366. if(is_array($menu[0]['submenu'])) {
  367. foreach($menu[0]['submenu'] as $submenu) {
  368. $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>';
  369. }
  370. }
  371. $s .= '</ul></div></li>';
  372. } else {
  373. $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>';
  374. }
  375. }
  376. }
  377. $s .= '</ul>';
  378. $s .= '</div>';
  379. echo !empty($menus) ? '<div class="floattop">'.$s.'</div><div class="floattopempty"></div>' : $s;
  380. }
  381. function showtips($tips, $id = 'tips', $display = TRUE, $title = '') {
  382. $tips = cplang($tips);
  383. $tips = preg_replace('#</li>\s*<li>#i', '</li><li>', $tips);
  384. $tmp = explode('</li><li>', substr($tips, 4, -5));
  385. if(count($tmp) > 4) {
  386. $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>';
  387. foreach($tmp AS $k => $v) {
  388. if($k > 1) {
  389. $tips .= '<li style="display: none">'.$v.'</li>';
  390. }
  391. }
  392. }
  393. unset($tmp);
  394. $title = $title ? $title : 'tips';
  395. showtableheader($title, '', 'id="'.$id.'"'.(!$display ? ' style="display: none;"' : ''), 0);
  396. showtablerow('', 'class="tipsblock" s="1"', '<ul id="'.$id.'lis">'.$tips.'</ul>');
  397. showtablefooter();
  398. }
  399. function showformheader($action, $extra = '', $name = 'cpform', $method = 'post') {
  400. global $_G;
  401. $anchor = isset($_GET['anchor']) ? dhtmlspecialchars($_GET['anchor']) : '';
  402. echo '<form name="'.$name.'" method="'.$method.'" autocomplete="off" action="'.ADMINSCRIPT.'?action='.$action.'" id="'.$name.'"'.($extra == 'enctype' ? ' enctype="multipart/form-data"' : " $extra").'>'.
  403. '<input type="hidden" name="formhash" value="'.FORMHASH.'" />'.
  404. '<input type="hidden" id="formscrolltop" name="scrolltop" value="" />'.
  405. '<input type="hidden" name="anchor" value="'.$anchor.'" />';
  406. }
  407. function showhiddenfields($hiddenfields = array()) {
  408. if(is_array($hiddenfields)) {
  409. foreach($hiddenfields as $key => $val) {
  410. $val = is_string($val) ? dhtmlspecialchars($val) : $val;
  411. echo "\n<input type=\"hidden\" name=\"$key\" value=\"$val\">";
  412. }
  413. }
  414. }
  415. function showtableheader($title = '', $classname = '', $extra = '', $titlespan = 15) {
  416. global $_G;
  417. $classname = str_replace(array('nobottom', 'notop'), array('nobdb', 'nobdt'), $classname);
  418. if(isset($_G['showsetting_multi'])) {
  419. if($_G['showsetting_multi'] == 0) {
  420. $extra .= ' style="width:'.($_G['showsetting_multicount'] * 270 + 20).'px"';
  421. } else {
  422. return;
  423. }
  424. }
  425. echo "\n".'<table class="tb tb2 '.$classname.'"'.($extra ? " $extra" : '').'>';
  426. if($title) {
  427. $span = $titlespan ? 'colspan="'.$titlespan.'"' : '';
  428. echo "\n".'<tr><th '.$span.' class="partition">'.cplang($title).'</th></tr>';
  429. showmultititle(1);
  430. }
  431. }
  432. function showmultititle($nofloat = 0) {
  433. global $_G;
  434. if(isset($_G['showtableheader_multi']) && $_G['showsetting_multi'] == 0) {
  435. $i = 0;
  436. $rows = '';
  437. foreach($_G['showtableheader_multi'] as $row) {
  438. $i++;
  439. $rows .= '<div class="multicol">'.$row.'</div>';
  440. }
  441. if($nofloat) {
  442. echo '<tr><td class="tbm"><div>'.$rows.'</div></td></tr>';
  443. } else {
  444. echo '<div id="multititle" class="tbm" style="width:'.($i * 270).'px;display:none">'.$rows.'</div>';
  445. echo '<script type="text/javascript">floatbottom(\'multititle\');</script>';
  446. }
  447. }
  448. }
  449. function showtagheader($tagname, $id, $display = FALSE, $classname = '') {
  450. global $_G;
  451. if(!empty($_G['showsetting_multi'])) {
  452. return;
  453. }
  454. echo '<'.$tagname.(!isset($_G['showsetting_multi']) && $classname ? " class=\"$classname\"" : '').' id="'.$id.'"'.($display ? '' : ' style="display: none"').'>';
  455. }
  456. function showtitle($title, $extra = '', $multi = 1) {
  457. global $_G;
  458. if(!empty($_G['showsetting_multi'])) {
  459. return;
  460. }
  461. echo "\n".'<tr'.($extra ? " $extra" : '').'><th colspan="15" class="partition">'.cplang($title).'</th></tr>';
  462. if($multi) {
  463. showmultititle(1);
  464. }
  465. }
  466. function showsubtitle($title = array(), $rowclass='header', $tdstyle=array()) {
  467. if(is_array($title)) {
  468. $subtitle = "\n<tr class=\"$rowclass\">";
  469. foreach($title as $k => $v) {
  470. if($v !== NULL) {
  471. $subtitle .= '<th'.($tdstyle[$k] ? ' '.$tdstyle[$k] : '').'>'.cplang($v).'</th>';
  472. }
  473. }
  474. $subtitle .= '</tr>';
  475. echo $subtitle;
  476. }
  477. }
  478. function showtablerow($trstyle = '', $tdstyle = array(), $tdtext = array(), $return = FALSE) {
  479. $rowswapclass = '';
  480. if(!preg_match('/class\s*=\s*[\'"]([^\'"<>]+)[\'"]/i', $trstyle, $matches)) {
  481. $rowswapclass = is_array($tdtext) && count($tdtext) > 2 ? ' class="hover"' : '';
  482. } else {
  483. if(is_array($tdtext) && count($tdtext) > 2) {
  484. $rowswapclass = " class=\"{$matches[1]} hover\"";
  485. $trstyle = preg_replace('/class\s*=\s*[\'"]([^\'"<>]+)[\'"]/i', '', $trstyle);
  486. }
  487. }
  488. $cells = "\n".'<tr'.($trstyle ? ' '.$trstyle : '').$rowswapclass.'>';
  489. if(isset($tdtext)) {
  490. if(is_array($tdtext)) {
  491. foreach($tdtext as $key => $td) {
  492. $cells .= '<td'.(is_array($tdstyle) && !empty($tdstyle[$key]) ? ' '.$tdstyle[$key] : '').'>'.$td.'</td>';
  493. }
  494. } else {
  495. $cells .= '<td'.(!empty($tdstyle) && is_string($tdstyle) ? ' '.$tdstyle : '').'>'.$tdtext.'</td>';
  496. }
  497. }
  498. $cells .= '</tr>';
  499. if($return) {
  500. return $cells;
  501. }
  502. echo $cells;
  503. }
  504. function showsetting($setname, $varname, $value, $type = 'radio', $disabled = '', $hidden = 0, $comment = '', $extra = '', $setid = '', $nofaq = false) {
  505. global $_G;
  506. $s = "\n";
  507. $check = array();
  508. $noborder = false;
  509. if(substr($disabled, 0, 8) == 'noborder') {
  510. $disabled = trim(substr($disabled, 8));
  511. $noborder = 'class="noborder" ';
  512. }
  513. $check['disabled'] = $disabled ? ($disabled == 'readonly' ? ' readonly' : ' disabled') : '';
  514. $check['disabledaltstyle'] = $disabled ? ', 1' : '';
  515. $nocomment = false;
  516. if(isset($_G['showsetting_multi'])) {
  517. $hidden = 0;
  518. if(is_array($varname)) {
  519. $varnameid = '_'.str_replace(array('[', ']'), '_', $varname[0]).'|'.$_G['showsetting_multi'];
  520. $varname[0] = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname[0]);
  521. } else {
  522. $varnameid = '_'.str_replace(array('[', ']'), '_', $varname).'|'.$_G['showsetting_multi'];
  523. $varname = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname);
  524. }
  525. } else {
  526. $varnameid = '';
  527. }
  528. if($type == 'radio') {
  529. $value ? $check['true'] = "checked" : $check['false'] = "checked";
  530. $value ? $check['false'] = '' : $check['true'] = '';
  531. $check['hidden1'] = $hidden ? ' onclick="$(\'hidden_'.$setname.'\').style.display = \'\';"' : '';
  532. $check['hidden0'] = $hidden ? ' onclick="$(\'hidden_'.$setname.'\').style.display = \'none\';"' : '';
  533. $onclick = $disabled && $disabled == 'readonly' ? ' onclick="return false"' : ($extra ? $extra : '');
  534. $s .= '<ul onmouseover="altStyle(this'.$check['disabledaltstyle'].');">'.
  535. '<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>'.
  536. '<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>'.
  537. '</ul>';
  538. } elseif($type == 'text' || $type == 'password' || $type == 'number') {
  539. $s .= '<input name="'.$varname.'" value="'.dhtmlspecialchars($value).'" type="'.$type.'" class="txt" '.$check['disabled'].' '.$extra.' />';
  540. } elseif($type == 'htmltext') {
  541. $id .= 'html'.random(2);
  542. $s .= '<div id="'.$id.'">'.$value.'</div><input id="'.$id.'_v" name="'.$varname.'" value="'.dhtmlspecialchars($value).'" type="hidden" /><script type="text/javascript">sethtml(\''.$id.'\')</script>';
  543. } elseif($type == 'file') {
  544. $s .= '<input name="'.$varname.'" value="" type="file" class="txt uploadbtn marginbot" '.$check['disabled'].' '.$extra.' />';
  545. } elseif($type == 'filetext') {
  546. $defaulttype = $value ? 1 : 0;
  547. $id = 'file'.random(2);
  548. $s .= '<input id="'.$id.'_0" style="display:'.($defaulttype ? 'none' : '').'" name="'.($defaulttype ? 'TMP' : '').$varname.'" value="" type="file" class="txt uploadbtn marginbot" '.$check['disabled'].' '.$extra.' />'.
  549. '<input id="'.$id.'_1" style="display:'.(!$defaulttype ? 'none' : '').'" name="'.(!$defaulttype ? 'TMP' : '').$varname.'" value="'.dhtmlspecialchars($value).'" type="text" class="txt marginbot" '.$extra.' /><br />'.
  550. '<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;'.
  551. '<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>';
  552. } elseif($type == 'textarea') {
  553. $readonly = $disabled ? 'readonly' : '';
  554. $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>";
  555. } elseif($type == 'select') {
  556. $s .= '<select name="'.$varname[0].'" '.$extra.'>';
  557. foreach($varname[1] as $option) {
  558. if(!array_key_exists(0, $option)) {
  559. $option = array_values($option);
  560. }
  561. $selected = $option[0] == $value ? 'selected="selected"' : '';
  562. if(empty($option[2])) {
  563. $s .= "<option value=\"$option[0]\" $selected>".$option[1]."</option>\n";
  564. } else {
  565. $s .= "<optgroup label=\"".$option[1]."\"></optgroup>\n";
  566. }
  567. }
  568. $s .= '</select>';
  569. } elseif($type == 'mradio' || $type == 'mradio2') {
  570. $nocomment = $type == 'mradio2' && !isset($_G['showsetting_multi']) ? true : false;
  571. $addstyle = $nocomment ? ' style="float: left; width: 18%"' : '';
  572. $ulstyle = $nocomment ? ' style="width: 790px"' : '';
  573. if(is_array($varname)) {
  574. $radiocheck = array($value => ' checked');
  575. $s .= '<ul'.(empty($varname[2]) ? ' class="nofloat"' : '').' onmouseover="altStyle(this'.$check['disabledaltstyle'].');"'.$ulstyle.'>';
  576. foreach($varname[1] as $varary) {
  577. if(is_array($varary) && !empty($varary)) {
  578. if(!array_key_exists(0, $varary)) {
  579. $varary = array_values($varary);
  580. }
  581. $onclick = '';
  582. if(!isset($_G['showsetting_multi']) && !empty($varary[2])) {
  583. foreach($varary[2] as $ctrlid => $display) {
  584. $onclick .= '$(\''.$ctrlid.'\').style.display = \''.$display.'\';';
  585. }
  586. }
  587. $onclick && $onclick = ' onclick="'.$onclick.'"';
  588. $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>';
  589. }
  590. }
  591. $s .= '</ul>';
  592. }
  593. } elseif($type == 'mcheckbox' || $type == 'mcheckbox2') {
  594. $nocomment = $type != 'mcheckbox2' && count($varname[1]) > 3 && !isset($_G['showsetting_multi']) ? true : false;
  595. $addstyle = $nocomment ? ' style="float: left;'.(empty($_G['showsetting_multirow']) ? ' width: 18%;overflow: hidden;' : '').'"' : '';
  596. $ulstyle = $nocomment && empty($_G['showsetting_multirow']) ? ' style="width: 790px"' : '';
  597. $s .= '<ul class="nofloat" onmouseover="altStyle(this'.$check['disabledaltstyle'].');"'.$ulstyle.'>';
  598. foreach($varname[1] as $varary) {
  599. if(is_array($varary) && !empty($varary)) {
  600. if(!array_key_exists(0, $varary)) {
  601. $varary = array_values($varary);
  602. }
  603. $onclick = !isset($_G['showsetting_multi']) && !empty($varary[2]) ? ' onclick="$(\''.$varary[2].'\').style.display = $(\''.$varary[2].'\').style.display == \'none\' ? \'\' : \'none\';"' : '';
  604. $checked = is_array($value) && in_array($varary[0], $value) ? ' checked' : '';
  605. $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>';
  606. }
  607. }
  608. $s .= '</ul>';
  609. } elseif($type == 'binmcheckbox') {
  610. $checkboxs = count($varname[1]);
  611. $value = sprintf('%0'.$checkboxs.'b', $value);$i = 1;
  612. $s .= '<ul class="nofloat" onmouseover="altStyle(this'.$check['disabledaltstyle'].');">';
  613. foreach($varname[1] as $key => $var) {
  614. if($var !== false) {
  615. $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>';
  616. }
  617. $i++;
  618. }
  619. $s .= '</ul>';
  620. } elseif($type == 'omcheckbox') {
  621. $nocomment = count($varname[1]) > 3 ? true : false;
  622. $addstyle = $nocomment ? 'style="float: left; width: 18%"' : '';
  623. $ulstyle = $nocomment ? 'style="width: 790px"' : '';
  624. $s .= '<ul onmouseover="altStyle(this'.$check['disabledaltstyle'].');"'.(empty($varname[2]) ? ' class="nofloat"' : 'class="ckbox"').' '.$ulstyle.'>';
  625. foreach($varname[1] as $varary) {
  626. if(is_array($varary) && !empty($varary)) {
  627. $checked = is_array($value) && $value[$varary[0]] ? ' checked' : '';
  628. $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>';
  629. }
  630. }
  631. $s .= '</ul>';
  632. } elseif($type == 'mselect') {
  633. $s .= '<select name="'.$varname[0].'" multiple="multiple" size="10" '.$extra.'>';
  634. foreach($varname[1] as $option) {
  635. if(!array_key_exists(0, $option)) {
  636. $option = array_values($option);
  637. }
  638. $selected = is_array($value) && in_array($option[0], $value) ? 'selected="selected"' : '';
  639. if(empty($option[2])) {
  640. $s .= "<option value=\"$option[0]\" $selected>".$option[1]."</option>\n";
  641. } else {
  642. $s .= "<optgroup label=\"".$option[1]."\"></optgroup>\n";
  643. }
  644. }
  645. $s .= '</select>';
  646. } elseif($type == 'color') {
  647. global $stylestuff;
  648. $preview_varname = str_replace('[', '_', str_replace(']', '', $varname));
  649. $code = explode(' ', $value);
  650. $css = '';
  651. for($i = 0; $i <= 1; $i++) {
  652. if($code[$i] != '') {
  653. if($code[$i]{0} == '#') {
  654. $css .= strtoupper($code[$i]).' ';
  655. } elseif(preg_match('/^(https?:)?\/\//i', $code[$i])) {
  656. $css .= 'url(\''.$code[$i].'\') ';
  657. } else {
  658. $css .= 'url(\''.$stylestuff['imgdir']['subst'].'/'.$code[$i].'\') ';
  659. }
  660. }
  661. }
  662. $background = trim($css);
  663. $colorid = ++$GLOBALS['coloridcount'];
  664. $s .= "<input id=\"c{$colorid}_v\" type=\"text\" class=\"txt\" style=\"float:left; width:210px;\" value=\"$value\" name=\"$varname\" onchange=\"updatecolorpreview('c{$colorid}')\">\n".
  665. "<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";
  666. } elseif($type == 'calendar') {
  667. $s .= "<input type=\"text\" class=\"txt\" name=\"$varname\" value=\"".dhtmlspecialchars($value)."\" onclick=\"showcalendar(event, this".($extra ? ', 1' : '').")\">\n";
  668. } elseif(in_array($type, array('multiply', 'range', 'daterange'))) {
  669. $onclick = $type == 'daterange' ? ' onclick="showcalendar(event, this)"' : '';
  670. if(isset($_G['showsetting_multi'])) {
  671. $varname[1] = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname[1]);
  672. }
  673. $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>";
  674. } else {
  675. $s .= $type;
  676. }
  677. $name = cplang($setname);
  678. $name .= $name && substr($name, -1) != ':' ? ':' : '';
  679. $name = $disabled ? '<span class="lightfont">'.$name.'</span>' : $name;
  680. $setid = !$setid ? substr(md5($setname), 0, 4) : $setid;
  681. $setid = isset($_G['showsetting_multi']) ? 'S'.$setid : $setid;
  682. if(!empty($_G['showsetting_multirow'])) {
  683. if(empty($_G['showsetting_multirow_n'])) {
  684. echo '<tr>';
  685. }
  686. echo '<td class="vtop rowform"><p class="td27m">'.$name.'</p>'.$s.'</td>';
  687. $_G['showsetting_multirow_n']++;
  688. if($_G['showsetting_multirow_n'] == 2) {
  689. if(empty($_G['showsetting_multirow_n'])) {
  690. echo '</tr>';
  691. }
  692. $_G['showsetting_multirow_n'] = 0;
  693. }
  694. return;
  695. }
  696. if(!isset($_G['showsetting_multi'])) {
  697. if(!$nofaq) {
  698. $faqurl = 'http://faq.comsenz.com?type=admin&ver='.$_G['setting']['version'].'&action='.rawurlencode($_GET['action']).'&operation='.rawurlencode($_GET['operation']).'&key='.rawurlencode($setname);
  699. showtablerow($noborder.'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>');
  700. } else {
  701. showtablerow('', 'colspan="2" class="td27" s="1"', $name);
  702. }
  703. } else {
  704. if(empty($_G['showsetting_multijs'])) {
  705. $_G['setting_JS'] .= 'var ss = new Array();';
  706. $_G['showsetting_multijs'] = 1;
  707. }
  708. if($_G['showsetting_multi'] == 0) {
  709. showtablerow('', array('class="td27"'), array('<div id="D'.$setid.'"></div>'));
  710. $_G['setting_JS'] .= 'ss[\'D'.$setid.'\'] = new Array();';
  711. }
  712. $name = preg_replace("/\r\n|\n|\r/", '\n', addcslashes($name, "'\\"));
  713. $_G['setting_JS'] .= 'ss[\'D'.$setid.'\'] += \'<div class="multicol">'.$name.'</div>\';';
  714. }
  715. if(!$nocomment && ($type != 'omcheckbox' || $varname[2] != 'isfloat')) {
  716. if(!isset($_G['showsetting_multi'])) {
  717. showtablerow('class="noborder" onmouseover="setfaq(this, \'faq'.$setid.'\')"', array('class="vtop rowform"', 'class="vtop tips2" s="1"'), array(
  718. $s,
  719. ($comment ? $comment : cplang($setname.'_comment', false)).($type == 'textarea' ? '<br />'.cplang('tips_textarea') : '').
  720. ($disabled ? '<br /><span class="smalltxt" style="color:#F00">'.cplang($setname.'_disabled', false).'</span>' : NULL)
  721. ));
  722. } else {
  723. if($_G['showsetting_multi'] == 0) {
  724. showtablerow('class="noborder"', array('class="vtop rowform" style="width:auto"'), array(
  725. '<div id="'.$setid.'"></div>'
  726. ));
  727. $_G['setting_JS'] .= 'ss[\''.$setid.'\'] = new Array();';
  728. }
  729. $s = preg_replace("/\r\n|\n|\r/", '\n', addcslashes($s, "'\\"));
  730. $_G['setting_JS'] .= 'ss[\''.$setid.'\'] += \'<div class="multicol">'.$s.'</div>\';';
  731. }
  732. } else {
  733. showtablerow('class="noborder" onmouseover="setfaq(this, \'faq'.$setid.'\')"', array('colspan="2" class="vtop rowform"'), array($s));
  734. }
  735. if($hidden) {
  736. showtagheader('tbody', 'hidden_'.$setname, $value, 'sub');
  737. }
  738. }
  739. function showmulti() {
  740. global $_G;
  741. $_G['setting_JS'] .= <<<EOF
  742. for(i in ss) {
  743. $(i).innerHTML=ss[i];
  744. }
  745. EOF;
  746. }
  747. function mradio($name, $items = array(), $checked = '', $float = TRUE) {
  748. $list = '<ul'.($float ? '' : ' class="nofloat"').' onmouseover="altStyle(this);">';
  749. if(is_array($items)) {
  750. foreach($items as $value => $item) {
  751. $list .= '<li'.($checked == $value ? ' class="checked"' : '').'><input type="radio" name="'.$name.'" value="'.$value.'" class="radio"'.($checked == $value ? ' checked="checked"' : '').' /> '.$item.'</li>';
  752. }
  753. }
  754. $list .= '</ul>';
  755. return $list;
  756. }
  757. function mcheckbox($name, $items = array(), $checked = array()) {
  758. $list = '<ul class="dblist" onmouseover="altStyle(this);">';
  759. if(is_array($items)) {
  760. foreach($items as $value => $item) {
  761. $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>';
  762. }
  763. }
  764. $list .= '</ul>';
  765. return $list;
  766. }
  767. function showsubmit($name = '', $value = 'submit', $before = '', $after = '', $floatright = '', $entersubmit = true) {
  768. global $_G;
  769. if(!empty($_G['showsetting_multi'])) {
  770. return;
  771. }
  772. $str = '<tr>';
  773. $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>' : '';
  774. $str .= '<td colspan="15">';
  775. $str .= $floatright ? '<div class="cuspages right">'.$floatright.'</div>' : '';
  776. $str .= '<div class="fixsel">';
  777. $str .= $before && !in_array($before, array('del', 'select_all', 'td')) ? $before.' &nbsp;' : '';
  778. $str .= $name ? '<input type="submit" class="btn" id="submit_'.$name.'" name="'.$name.'" title="'.($entersubmit ? cplang('submit_tips') : '').'" value="'.cplang($value).'" />' : '';
  779. $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;
  780. $str = $after ? $str.(($before && $before != 'del') || $name ? ' &nbsp;' : '').$after : $str;
  781. $str .= '</div></td>';
  782. $str .= '</tr>';
  783. echo $str.($name && $entersubmit ? '<script type="text/JavaScript">_attachEvent(document.documentElement, \'keydown\', function (e) { entersubmit(e, \''.$name.'\'); });</script>' : '');
  784. }
  785. function showtagfooter($tagname) {
  786. global $_G;
  787. if(!empty($_G['showsetting_multi'])) {
  788. return;
  789. }
  790. echo '</'.$tagname.'>';
  791. }
  792. function showtablefooter() {
  793. global $_G;
  794. if(!empty($_G['showsetting_multi'])) {
  795. return;
  796. }
  797. echo '</table>'."\n";
  798. }
  799. function showformfooter() {
  800. global $_G;
  801. if(!empty($_G['setting_JS'])) {
  802. echo '<script type="text/JavaScript">'.$_G['setting_JS'].'</script>';
  803. }
  804. updatesession();
  805. echo '</form>'."\n";
  806. if($scrolltop = intval(getgpc('scrolltop'))) {
  807. echo '<script type="text/JavaScript">_attachEvent(window, \'load\', function () { scroll(0,'.$scrolltop.') }, document);</script>';
  808. }
  809. }
  810. function cpfooter() {
  811. global $_G, $admincp;
  812. if(defined('FOOTERDISABLED')) {
  813. exit;
  814. }
  815. require_once DISCUZ_ROOT.'./source/discuz_version.php';
  816. $version = DISCUZ_VERSION;
  817. $charset = CHARSET;
  818. echo "\n</div>";
  819. if(!empty($_GET['highlight'])) {
  820. $kws = explode(' ', $_GET['highlight']);
  821. echo '<script type="text/JavaScript">';
  822. foreach($kws as $kw) {
  823. $kw = addslashes($kw);
  824. echo 'parsetag(\''.dhtmlspecialchars($kw, ENT_QUOTES).'\');';
  825. }
  826. echo '</script>';
  827. }
  828. if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG && @include(libfile('function/debug'))) {
  829. function_exists('debugmessage') && debugmessage();
  830. }
  831. echo "\n</body>\n</html>";
  832. }
  833. if(!function_exists('ajaxshowheader')) {
  834. function ajaxshowheader() {
  835. global $_G;
  836. ob_end_clean();
  837. @header("Expires: -1");
  838. @header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
  839. @header("Pragma: no-cache");
  840. header("Content-type: application/xml");
  841. echo "<?xml version=\"1.0\" encoding=\"".CHARSET."\"?>\n<root><![CDATA[";
  842. }
  843. }
  844. if(!function_exists('ajaxshowfooter')) {
  845. function ajaxshowfooter() {
  846. echo ']]></root>';
  847. exit();
  848. }
  849. }
  850. function showimportdata() {
  851. showsetting('import_type', array('importtype', array(
  852. array('file', cplang('import_type_file'), array('importfile' => '', 'importtxt' => 'none')),
  853. array('txt', cplang('import_type_txt'), array('importfile' => 'none', 'importtxt' => ''))
  854. )), 'file', 'mradio');
  855. showtagheader('tbody', 'importfile', TRUE);
  856. showsetting('import_file', 'importfile', '', 'file');
  857. showtagfooter('tbody');
  858. showtagheader('tbody', 'importtxt');
  859. showsetting('import_txt', 'importtxt', '', 'textarea');
  860. showtagfooter('tbody');
  861. }
  862. function getimportdata($name = '', $addslashes = 0, $ignoreerror = 0) {
  863. global $_G;
  864. if($_GET['importtype'] == 'file') {
  865. $data = @implode('', file($_FILES['importfile']['tmp_name']));
  866. @unlink($_FILES['importfile']['tmp_name']);
  867. } else {
  868. if(!empty($_GET['importtxt'])) {
  869. $data = $_GET['importtxt'];
  870. } else {
  871. $data = $GLOBALS['importtxt'];
  872. }
  873. }
  874. require_once libfile('class/xml');
  875. $xmldata = xml2array($data);
  876. if(!is_array($xmldata) || !$xmldata) {
  877. if(!$ignoreerror) {
  878. cpmsg(cplang('import_data_invalid').cplang($data), '', 'error');
  879. } else {
  880. return array();
  881. }
  882. } else {
  883. if($name && $name != $xmldata['Title']) {
  884. if(!$ignoreerror) {
  885. cpmsg(cplang('import_data_typeinvalid').cplang($data), '', 'error');
  886. } else {
  887. return array();
  888. }
  889. }
  890. $data = exportarray($xmldata['Data'], 0);
  891. }
  892. if($addslashes) {
  893. $data = daddslashes($data, 1);
  894. }
  895. return $data;
  896. }
  897. function exportdata($name, $filename, $data) {
  898. global $_G;
  899. require_once libfile('class/xml');
  900. $root = array(
  901. 'Title' => $name,
  902. 'Version' => $_G['setting']['version'],
  903. 'Time' => dgmdate(TIMESTAMP, 'Y-m-d H:i'),
  904. 'From' => $_G['setting']['bbname'].' ('.$_G['siteurl'].')',
  905. 'Data' => exportarray($data, 1)
  906. );
  907. $filename = strtolower(str_replace(array('!', ' '), array('', '_'), $name)).'_'.$filename.'.xml';
  908. $plugin_export = array2xml($root, 1);
  909. ob_end_clean();
  910. dheader('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
  911. dheader('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
  912. dheader('Cache-Control: no-cache, must-revalidate');
  913. dheader('Pragma: no-cache');
  914. dheader('Content-Encoding: none');
  915. dheader('Content-Length: '.strlen($plugin_export));
  916. dheader('Content-Disposition: attachment; filename='.$filename);
  917. dheader('Content-Type: text/xml');
  918. echo $plugin_export;
  919. define('FOOTERDISABLED' , 1);
  920. exit();
  921. }
  922. function exportarray($array, $method) {
  923. $tmp = $array;
  924. if($method) {
  925. foreach($array as $k => $v) {
  926. if(is_array($v)) {
  927. $tmp[$k] = exportarray($v, 1);
  928. } else {
  929. $uv = unserialize($v);
  930. if($uv && is_array($uv)) {
  931. $tmp['__'.$k] = exportarray($uv, 1);
  932. unset($tmp[$k]);
  933. } else {
  934. $tmp[$k] = $v;
  935. }
  936. }
  937. }
  938. } else {
  939. foreach($array as $k => $v) {
  940. if(is_array($v)) {
  941. if(substr($k, 0, 2) == '__') {
  942. $tmp[substr($k, 2)] = serialize(exportarray($v, 0));
  943. unset($tmp[$k]);
  944. } else {
  945. $tmp[$k] = exportarray($v, 0);
  946. }
  947. } else {
  948. $tmp[$k] = $v;
  949. }
  950. }
  951. }
  952. return $tmp;
  953. }
  954. function getwheres($intkeys, $strkeys, $randkeys, $likekeys, $pre='') {
  955. $wherearr = array();
  956. $urls = array();
  957. foreach ($intkeys as $var) {
  958. $value = isset($_GET[$var])?$_GET[$var]:'';
  959. if(strlen($value)) {
  960. $urls[] = "$var=$value";
  961. $var = addslashes($var);
  962. $wherearr[] = "{$pre}{$var}='".intval($value)."'";
  963. }
  964. }
  965. foreach ($strkeys as $var) {
  966. $value = isset($_GET[$var])?trim($_GET[$var]):'';
  967. if(strlen($value)) {
  968. $urls[] = "$var=".rawurlencode($value);
  969. $var = addslashes($var);
  970. $value = addslashes($value);
  971. $wherearr[] = "{$pre}{$var}='$value'";
  972. }
  973. }
  974. foreach ($randkeys as $vars) {
  975. $value1 = isset($_GET[$vars[1].'1'])?$vars[0]($_GET[$vars[1].'1']):'';
  976. $value2 = isset($_GET[$vars[1].'2'])?$vars[0]($_GET[$vars[1].'2']):'';
  977. if($value1) {
  978. $urls[] = "{$vars[1]}1=".rawurlencode($_GET[$vars[1].'1']);
  979. $vars[1] = addslashes($vars[1]);
  980. $value1 = addslashes($value1);
  981. $wherearr[] = "{$pre}{$vars[1]}>='$value1'";
  982. }
  983. if($value2) {
  984. $wherearr[] = "{$pre}{$vars[1]}<='$value2'";
  985. $vars[2] = addslashes($vars[2]);
  986. $value2 = addslashes($value2);
  987. $urls[] = "{$vars[1]}2=".rawurlencode($_GET[$vars[1].'2']);
  988. }
  989. }
  990. foreach ($likekeys as $var) {
  991. $value = isset($_GET[$var])?stripsearchkey($_GET[$var]):'';
  992. if(strlen($value)>1) {
  993. $urls[] = "$var=".rawurlencode($_GET[$var]);
  994. $var = addslashes($var);
  995. $value = addslashes($value);
  996. $wherearr[] = "{$pre}{$var} LIKE BINARY '%$value%'";
  997. }
  998. }
  999. return array('wherearr'=>$wherearr, 'urls'=>$urls);
  1000. }
  1001. function getorders($alloworders, $default, $pre='') {
  1002. $orders = array('sql'=>'', 'urls'=>array());
  1003. if(empty($_GET['orderby']) || !in_array($_GET['orderby'], $alloworders)) {
  1004. $_GET['orderby'] = $default;
  1005. if(empty($_GET['ordersc'])) $_GET['ordersc'] = 'desc';
  1006. }
  1007. $orders['sql'] = " ORDER BY {$pre}$_GET[orderby] ";
  1008. $orders['urls'][] = "orderby=$_GET[orderby]";
  1009. if(!empty($_GET['ordersc']) && $_GET['ordersc'] == 'desc') {
  1010. $orders['urls'][] = 'ordersc=desc';
  1011. $orders['sql'] .= ' DESC ';
  1012. } else {
  1013. $orders['urls'][] = 'ordersc=asc';
  1014. }
  1015. return $orders;
  1016. }
  1017. function blog_replynum_stat($start, $perpage) {
  1018. global $_G;
  1019. $next = false;
  1020. $updates = array();
  1021. $query = C::t('home_blog')->range($start, $perpage);
  1022. foreach($query as $value) {
  1023. $next = true;
  1024. $count = C::t('home_comment')->count_by_id_idtype($value['blogid'], 'blogid');
  1025. if($count != $value['replynum']) {
  1026. $updates[$value['blogid']] = $count;
  1027. }
  1028. }
  1029. if(empty($updates)) return $next;
  1030. $nums = renum($updates);
  1031. foreach ($nums[0] as $count) {
  1032. C::t('home_blog')->update($nums[1][$count], array('replynum' => $count));
  1033. }
  1034. return $next;
  1035. }
  1036. function space_friendnum_stat($start, $perpage) {
  1037. global $_G;
  1038. $next = false;
  1039. $updates = array();
  1040. foreach(C::t('common_member_count')->range($start,$perpage) as $uid => $value) {
  1041. $next = true;
  1042. $count = C::t('home_friend')->count_by_uid($value['uid']);
  1043. if($count != $value['friends']) {
  1044. $updates[$value['uid']] = $count;
  1045. }
  1046. }
  1047. if(empty($updates)) return $next;
  1048. $nums = renum($updates);
  1049. foreach ($nums[0] as $count) {
  1050. C::t('common_member_count')->update($nums[1][$count], array('friends' => $count));
  1051. }
  1052. return $next;
  1053. }
  1054. function album_picnum_stat($start, $perpage) {
  1055. global $_G;
  1056. $next = false;
  1057. $updates = array();
  1058. $query = C::t('home_album')->range($start, $perpage);
  1059. foreach($query as $value) {
  1060. $next = true;
  1061. $count = C::t('home_pic')->check_albumpic($value['albumid']);
  1062. if($count != $value['picnum']) {
  1063. $updates[$value['albumid']] = $count;
  1064. }
  1065. }
  1066. if(empty($updates)) return $next;
  1067. $nums = renum($updates);
  1068. foreach ($nums[0] as $count) {
  1069. C::t('home_album')->update($nums[1][$count], array('picnum' => $count));
  1070. }
  1071. return $next;
  1072. }
  1073. function get_custommenu() {
  1074. global $_G;
  1075. $custommenu = array();
  1076. foreach(C::t('common_admincp_cmenu')->fetch_all_by_uid($_G['uid']) as $custom) {
  1077. $custom['url'] = substr(rawurldecode($custom['url']), strlen(ADMINSCRIPT) + 8);
  1078. $custommenu[] = array($custom['title'], $custom['url']);
  1079. }
  1080. return $custommenu;
  1081. }
  1082. function get_pluginsetting($type) {
  1083. $pluginsetting = $pluginvalue = array();
  1084. @include_once DISCUZ_ROOT.'./data/sysdata/cache_pluginsetting.php';
  1085. $pluginsetting = isset($pluginsetting[$type]) ? $pluginsetting[$type] : array();
  1086. $varids = array();
  1087. foreach($pluginsetting as $v) {
  1088. foreach($v['setting'] as $varid => $var) {
  1089. $varids[] = $varid;
  1090. }
  1091. }
  1092. if($varids) {
  1093. foreach(C::t('common_pluginvar')->fetch_all($varids) as $plugin) {
  1094. $values = (array)dunserialize($plugin['value']);
  1095. foreach($values as $id => $value) {
  1096. $pluginvalue[$id][$plugin['pluginvarid']] = $value;
  1097. }
  1098. }
  1099. }
  1100. return array($pluginsetting, $pluginvalue);
  1101. }
  1102. function set_pluginsetting($pluginvars) {
  1103. foreach($pluginvars as $varid => $value) {
  1104. $pluginvar = C::t('common_pluginvar')->fetch($varid);
  1105. $valuenew = dunserialize($pluginvar['value']);
  1106. $valuenew = is_array($valuenew) ? $valuenew : array();
  1107. foreach($value as $k => $v) {
  1108. $valuenew[$k] = $v;
  1109. }
  1110. C::t('common_pluginvar')->update($varid, array('value' => serialize($valuenew)));
  1111. }
  1112. updatecache('plugin');
  1113. }
  1114. function checkformulaperm($formula) {
  1115. $formula = preg_replace('/(\{([\d\.\-]+?)\})/', "'\\1'", $formula);
  1116. return checkformulasyntax(
  1117. $formula,
  1118. array('+', '-', '*', '/', '(', ')', '<', '=', '>', '!', 'and', 'or', ' ', '{', '}', "'"),
  1119. array('regdate', 'regday', 'regip', 'lastip', 'buyercredit', 'sellercredit', 'digestposts', 'posts', 'threads', 'oltime', 'extcredits[1-8]', 'field[\d]+')
  1120. );
  1121. }
  1122. function getposttableselect() {
  1123. global $_G;
  1124. loadcache('posttable_info');
  1125. if(!empty($_G['cache']['posttable_info']) && is_array($_G['cache']['posttable_info'])) {
  1126. $posttableselect = '<select name="posttableid" id="posttableid" class="ps">';
  1127. foreach($_G['cache']['posttable_info'] as $posttableid => $data) {
  1128. $posttableselect .= '<option value="'.$posttableid.'"'.($_GET['posttableid'] == $posttableid ? ' selected="selected"' : '').'>'.($data['memo'] ? $data['memo'] : 'post_'.$posttableid).'</option>';
  1129. }
  1130. $posttableselect .= '</select>';
  1131. } else {
  1132. $posttableselect = '';
  1133. }
  1134. return $posttableselect;
  1135. }
  1136. function rewritedata($alldata = 1) {
  1137. global $_G;
  1138. $data = array();
  1139. if(!$alldata) {
  1140. if(in_array('portal_topic', $_G['setting']['rewritestatus'])) {
  1141. $data['search']['portal_topic'] = "/".$_G['domain']['pregxprw']['portal']."\?mod\=topic&(amp;)?topic\=([^#]+?)?\"([^\>]*)\>/";
  1142. $data['replace']['portal_topic'] = 'rewriteoutput(\'portal_topic\', 0, $matches[1], $matches[3], $matches[4])';
  1143. }
  1144. if(in_array('portal_article', $_G['setting']['rewritestatus'])) {
  1145. $data['search']['portal_article'] = "/".$_G['domain']['pregxprw']['portal']."\?mod\=view&(amp;)?aid\=(\d+)(&amp;page\=(\d+))?\"([^\>]*)\>/";
  1146. $data['replace']['portal_article'] = 'rewriteoutput(\'portal_article\', 0, $matches[1], $matches[3], $matches[5], $matches[6])';
  1147. }
  1148. if(in_array('forum_forumdisplay', $_G['setting']['rewritestatus'])) {
  1149. $data['search']['forum_forumdisplay'] = "/".$_G['domain']['pregxprw']['forum']."\?mod\=forumdisplay&(amp;)?fid\=(\w+)(&amp;page\=(\d+))?\"([^\>]*)\>/";
  1150. $data['replace']['forum_forumdisplay'] = 'rewriteoutput(\'forum_forumdisplay\', 0, $matches[1], $matches[3], $matches[5], $matches[6])';
  1151. }
  1152. if(in_array('forum_viewthread', $_G['setting']['rewritestatus'])) {
  1153. $data['search']['forum_viewthread'] = "/".$_G['domain']['pregxprw']['forum']."\?mod\=viewthread&(amp;)?tid\=(\d+)(&amp;extra\=(page\%3D(\d+))?)?(&amp;page\=(\d+))?\"([^\>]*)\>/";
  1154. $data['replace']['forum_viewthread'] = 'rewriteoutput(\'forum_viewthread\', 0, $matches[1], $matches[3], $matches[8], $matches[6], $matches[9])';
  1155. }
  1156. if(in_array('group_group', $_G['setting']['rewritestatus'])) {
  1157. $data['search']['group_group'] = "/".$_G['domain']['pregxprw']['forum']."\?mod\=group&(amp;)?fid\=(\d+)(&amp;page\=(\d+))?\"([^\>]*)\>/";
  1158. $data['replace']['group_group'] = 'rewriteoutput(\'group_group\', 0, $matches[1], $matches[3], $matches[5], $matches[6])';
  1159. }
  1160. if(in_array('home_space', $_G['setting']['rewritestatus'])) {
  1161. $data['search']['home_space'] = "/".$_G['domain']['pregxprw']['home']."\?mod=space&(amp;)?(uid\=(\d+)|username\=([^&]+?))\"([^\>]*)\>/";
  1162. $data['replace']['home_space'] = 'rewriteoutput(\'home_space\', 0, $matches[1], $matches[4], $matches[5], $matches[6])';
  1163. }
  1164. if(in_array('home_blog', $_G['setting']['rewritestatus'])) {
  1165. $data['search']['home_blog'] = "/".$_G['domain']['pregxprw']['home']."\?mod=space&(amp;)?uid\=(\d+)&(amp;)?do=blog&(amp;)?id=(\d+)\"([^\>]*)\>/";
  1166. $data['replace']['home_blog'] = 'rewriteoutput(\'home_blog\', 0, $matches[1], $matches[3], $matches[6], $matches[7])';
  1167. }
  1168. if(in_array('forum_archiver', $_G['setting']['rewritestatus'])) {
  1169. $data['search']['forum_archiver'] = "/<a href\=\"\?(fid|tid)\-(\d+)\.html(&page\=(\d+))?\"([^\>]*)\>/";
  1170. $data['replace']['forum_archiver'] = 'rewriteoutput(\'forum_archiver\', 0, $matches[1], $matches[2], $matches[4], $matches[5])';
  1171. }
  1172. if(in_array('plugin', $_G['setting']['rewritestatus'])) {
  1173. $data['search']['plugin'] = "/<a href\=\"plugin\.php\?id=([a-z]+[a-z0-9_]*):([a-z0-9_\-]+)(&amp;|&)?(.*?)?\"([^\>]*)\>/";
  1174. $data['replace']['plugin'] = 'rewriteoutput(\'plugin\', 0, $matches[1], $matches[2], $matches[3], $matches[4], $matches[5])';
  1175. }
  1176. } else {
  1177. $data['rulesearch']['portal_topic'] = 'topic-{name}.html';
  1178. $data['rulereplace']['portal_topic'] = 'portal.php?mod=topic&topic={name}';
  1179. $data['rulevars']['portal_topic']['{name}'] = '(.+)';
  1180. $data['rulesearch']['portal_article'] = 'article-{id}-{page}.html';
  1181. $data['rulereplace']['portal_article'] = 'portal.php?mod=view&aid={id}&page={page}';
  1182. $data['rulevars']['portal_article']['{id}'] = '([0-9]+)';
  1183. $data['rulevars']['portal_article']['{page}'] = '([0-9]+)';
  1184. $data['rulesearch']['forum_forumdisplay'] = 'forum-{fid}-{page}.html';
  1185. $data['rulereplace']['forum_forumdisplay'] = 'forum.php?mod=forumdisplay&fid={fid}&page={page}';
  1186. $data['rulevars']['forum_forumdisplay']['{fid}'] = '(\w+)';
  1187. $data['rulevars']['forum_forumdisplay']['{page}'] = '([0-9]+)';
  1188. $data['rulesearch']['forum_viewthread'] = 'thread-{tid}-{page}-{prevpage}.html';
  1189. $data['rulereplace']['forum_viewthread'] = 'forum.php?mod=viewthread&tid={tid}&extra=page\%3D{prevpage}&page={page}';
  1190. $data['rulevars']['forum_viewthread']['{tid}'] = '([0-9]+)';
  1191. $data['rulevars']['forum_viewthread']['{page}'] = '([0-9]+)';
  1192. $data['rulevars']['forum_viewthread']['{prevpage}'] = '([0-9]+)';
  1193. $data['rulesearch']['group_group'] = 'group-{fid}-{page}.html';
  1194. $data['rulereplace']['group_group'] = 'forum.php?mod=group&fid={fid}&page={page}';
  1195. $data['rulevars']['group_group']['{fid}'] = '([0-9]+)';
  1196. $data['rulevars']['group_group']['{page}'] = '([0-9]+)';
  1197. $data['rulesearch']['home_space'] = 'space-{user}-{value}.html';
  1198. $data['rulereplace']['home_space'] = 'home.php?mod=space&{user}={value}';
  1199. $data['rulevars']['home_space']['{user}'] = '(username|uid)';
  1200. $data['rulevars']['home_space']['{value}'] = '(.+)';
  1201. $data['rulesearch']['home_blog'] = 'blog-{uid}-{blogid}.html';
  1202. $data['rulereplace']['home_blog'] = 'home.php?mod=space&uid={uid}&do=blog&id={blogid}';
  1203. $data['rulevars']['home_blog']['{uid}'] = '([0-9]+)';
  1204. $data['rulevars']['home_blog']['{blogid}'] = '([0-9]+)';
  1205. $data['rulesearch']['forum_archiver'] = '{action}-{value}.html';
  1206. $data['rulereplace']['forum_archiver'] = 'index.php?action={action}&value={value}';
  1207. $data['rulevars']['forum_archiver']['{action}'] = '(fid|tid)';
  1208. $data['rulevars']['forum_archiver']['{value}'] = '([0-9]+)';
  1209. $data['rulesearch']['plugin'] = '{pluginid}-{module}.html';
  1210. $data['rulereplace']['plugin'] = 'plugin.php?id={pluginid}:{module}';
  1211. $data['rulevars']['plugin']['{pluginid}'] = '([a-z]+[a-z0-9_]*)';
  1212. $data['rulevars']['plugin']['{module}'] = '([a-z0-9_\-]+)';
  1213. }
  1214. return $data;
  1215. }
  1216. function siteftp_form($action) {
  1217. showformheader($action);
  1218. showtableheader('cloudaddons_ftp_setting');
  1219. showsetting('setting_attach_remote_enabled_ssl', 'siteftp[ssl]', '', 'radio');
  1220. showsetting('setting_attach_remote_ftp_host', 'siteftp[host]', '', 'text');
  1221. showsetting('setting_attach_remote_ftp_port', 'siteftp[port]', '21', 'text');
  1222. showsetting('setting_attach_remote_ftp_user', 'siteftp[username]', '', 'text');
  1223. showsetting('setting_attach_remote_ftp_pass', 'siteftp[password]', '', 'text');
  1224. showsetting('setting_attach_remote_ftp_pasv', 'siteftp[pasv]', 0, 'radio');
  1225. showsetting('setting_attach_ftp_dir', 'siteftp[attachdir]', '', 'text');
  1226. showsubmit('settingsubmit');
  1227. showtablefooter();
  1228. showformfooter();
  1229. }
  1230. function siteftp_check($siteftp, $dir) {
  1231. global $_G;
  1232. $siteftp['on'] = 1;
  1233. $siteftp['password'] = authcode($siteftp['password'], 'ENCODE', md5($_G['config']['security']['authkey']));
  1234. $ftp = & discuz_ftp::instance($siteftp);
  1235. $ftp->connect();
  1236. $ftp->upload(DISCUZ_ROOT.'./source/discuz_version.php', $dir.'/discuz_version.php');
  1237. if($ftp->error()) {
  1238. cpmsg('setting_ftp_remote_'.$ftp->error(), '', 'error');
  1239. }
  1240. if(!file_exists(DISCUZ_ROOT.'./'.$dir.'/discuz_version.php')) {
  1241. cpmsg('cloudaddons_ftp_path_error', '', 'error');
  1242. }
  1243. $ftp->ftp_delete($typedir.'/discuz_version.php');
  1244. $_G['siteftp'] = $ftp;
  1245. }
  1246. function siteftp_upload($readfile, $writefile) {
  1247. global $_G;
  1248. if(!isset($_G['siteftp'])) {
  1249. return;
  1250. }
  1251. $_G['siteftp']->upload($readfile, $writefile);
  1252. if($_G['siteftp']->error()) {
  1253. cpmsg('setting_ftp_remote_'.$_G['siteftp']->error(), '', 'error');
  1254. }
  1255. }
  1256. ?>