PageRenderTime 82ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 1ms

/source/admincp/admincp_misc.php

https://github.com/jinbo51/DiscuzX
PHP | 1582 lines | 1420 code | 156 blank | 6 comment | 219 complexity | b73510d9d3ba426358c22d000c3d8bf0 MD5 | raw file
Possible License(s): BSD-3-Clause
  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: admincp_misc.php 32647 2013-02-27 09:13:03Z monkey $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. cpheader();
  12. if($operation == 'onlinelist') {
  13. if(!submitcheck('onlinesubmit')) {
  14. shownav('style', 'misc_onlinelist');
  15. showsubmenu('nav_misc_onlinelist');
  16. showtips('misc_onlinelist_tips');
  17. showformheader('misc&operation=onlinelist&');
  18. showtableheader('', 'fixpadding');
  19. showsubtitle(array('', 'display_order', 'usergroup', 'usergroups_title', 'misc_onlinelist_image'));
  20. $listarray = array();
  21. foreach(C::t('forum_onlinelist')->range() as $list) {
  22. $list['title'] = dhtmlspecialchars($list['title']);
  23. $listarray[$list['groupid']] = $list;
  24. }
  25. $onlinelist = '';
  26. $query = array_merge(array(0 => array('groupid' => 0, 'grouptitle' => 'Member')), C::t('common_usergroup')->range());
  27. foreach($query as $group) {
  28. $id = $group['groupid'];
  29. showtablerow('', array('class="td25"', 'class="td23 td28"', 'class="td24"', 'class="td24"', 'class="td21 td26"'), array(
  30. $listarray[$id]['url'] ? " <img src=\"static/image/common/{$listarray[$id]['url']}\">" : '',
  31. '<input type="text" class="txt" name="displayordernew['.$id.']" value="'.$listarray[$id]['displayorder'].'" size="3" />',
  32. $group['groupid'] <= 8 ? cplang('usergroups_system_'.$id) : $group['grouptitle'],
  33. '<input type="text" class="txt" name="titlenew['.$id.']" value="'.($listarray[$id]['title'] ? $listarray[$id]['title'] : $group['grouptitle']).'" size="15" />',
  34. '<input type="text" class="txt" name="urlnew['.$id.']" value="'.$listarray[$id]['url'].'" size="20" />'
  35. ));
  36. }
  37. showsubmit('onlinesubmit', 'submit', 'td');
  38. showtablefooter();
  39. showformfooter();
  40. } else {
  41. if(is_array($_GET['urlnew'])) {
  42. C::t('forum_onlinelist')->delete_all();
  43. foreach($_GET['urlnew'] as $id => $url) {
  44. $url = trim($url);
  45. if($id == 0 || $url) {
  46. $data = array(
  47. 'groupid' => $id,
  48. 'displayorder' => $_GET['displayordernew'][$id],
  49. 'title' => $_GET['titlenew'][$id],
  50. 'url' => $url,
  51. );
  52. C::t('forum_onlinelist')->insert($data);
  53. }
  54. }
  55. }
  56. updatecache(array('onlinelist', 'groupicon'));
  57. cpmsg('onlinelist_succeed', 'action=misc&operation=onlinelist', 'succeed');
  58. }
  59. } elseif($operation == 'link') {
  60. if(!submitcheck('linksubmit')) {
  61. ?>
  62. <script type="text/JavaScript">
  63. var rowtypedata = [
  64. [
  65. [1,'', 'td25'],
  66. [1,'<input type="text" class="txt" name="newdisplayorder[]" size="3">', 'td28'],
  67. [1,'<input type="text" class="txt" name="newname[]" size="15">'],
  68. [1,'<input type="text" class="txt" name="newurl[]" size="20">'],
  69. [1,'<input type="text" class="txt" name="newdescription[]" size="30">', 'td26'],
  70. [1,'<input type="text" class="txt" name="newlogo[]" size="20">'],
  71. [1,'<input type="checkbox" name="newportal[{n}]" value="1" class="checkbox">'],
  72. [1,'<input type="checkbox" name="newforum[{n}]" value="1" class="checkbox">'],
  73. [1,'<input type="checkbox" name="newgroup[{n}]" value="1" class="checkbox">'],
  74. [1,'<input type="checkbox" name="newhome[{n}]" value="1" class="checkbox">']
  75. ]
  76. ]
  77. </script>
  78. <?php
  79. shownav('extended', 'misc_link');
  80. showsubmenu('nav_misc_links');
  81. showtips('misc_link_tips');
  82. showformheader('misc&operation=link');
  83. showtableheader();
  84. showsubtitle(array('', 'display_order', 'misc_link_edit_name', 'misc_link_edit_url', 'misc_link_edit_description', 'misc_link_edit_logo', 'misc_link_group1', 'misc_link_group2', 'misc_link_group3','misc_link_group4'));
  85. showsubtitle(array('', '', '', '', '', '', '<input class="checkbox" type="checkbox" name="portalall" onclick="checkAll(\'prefix\', this.form, \'portal\', \'portalall\')">',
  86. '<input class="checkbox" type="checkbox" name="forumall" onclick="checkAll(\'prefix\', this.form, \'forum\', \'forumall\')">',
  87. '<input class="checkbox" type="checkbox" name="groupall" onclick="checkAll(\'prefix\', this.form, \'group\', \'groupall\')">',
  88. '<input class="checkbox" type="checkbox" name="homeall" onclick="checkAll(\'prefix\', this.form, \'home\', \'homeall\')">'));
  89. $query = C::t('common_friendlink')->fetch_all_by_displayorder();
  90. foreach ($query as $forumlink) {
  91. $type = sprintf('%04b', $forumlink['type']);
  92. showtablerow('', array('class="td25"', 'class="td28"', '', '', 'class="td26"'), array(
  93. '<input type="checkbox" class="checkbox" name="delete[]" value="'.$forumlink['id'].'" />',
  94. '<input type="text" class="txt" name="displayorder['.$forumlink[id].']" value="'.$forumlink['displayorder'].'" size="3" />',
  95. '<input type="text" class="txt" name="name['.$forumlink[id].']" value="'.$forumlink['name'].'" size="15" />',
  96. '<input type="text" class="txt" name="url['.$forumlink[id].']" value="'.$forumlink['url'].'" size="20" />',
  97. '<input type="text" class="txt" name="description['.$forumlink[id].']" value="'.$forumlink['description'].'" size="30" />',
  98. '<input type="text" class="txt" name="logo['.$forumlink[id].']" value="'.$forumlink['logo'].'" size="20" />',
  99. '<input class="checkbox" type="checkbox" value="1" name="portal['.$forumlink[id].']" '.($type[0] ? "checked" : '').'>',
  100. '<input class="checkbox" type="checkbox" value="1" name="forum['.$forumlink[id].']" '.($type[1] ? "checked" : '').'>',
  101. '<input class="checkbox" type="checkbox" value="1" name="group['.$forumlink[id].']" '.($type[2] ? "checked" : '').'>',
  102. '<input class="checkbox" type="checkbox" value="1" name="home['.$forumlink[id].']" '.($type[3] ? "checked" : '').'>',
  103. ));
  104. }
  105. echo '<tr><td></td><td colspan="3"><div><a href="###" onclick="addrow(this, 0)" class="addtr">'.$lang['misc_link_add'].'</a></div></td></tr>';
  106. showsubmit('linksubmit', 'submit', 'del');
  107. showtablefooter();
  108. showformfooter();
  109. } else {
  110. if($_GET['delete']) {
  111. C::t('common_friendlink')->delete($_GET['delete']);
  112. }
  113. if(is_array($_GET['name'])) {
  114. foreach($_GET['name'] as $id => $val) {
  115. $type_str = intval($_GET['portal'][$id]).intval($_GET['forum'][$id]).intval($_GET['group'][$id]).intval($_GET['home'][$id]);
  116. $type_str = intval($type_str, '2');
  117. $query = C::t('common_friendlink')->update($id, array(
  118. 'displayorder' => $_GET['displayorder'][$id],
  119. 'name' => $_GET['name'][$id],
  120. 'url' => $_GET['url'][$id],
  121. 'description' => $_GET['description'][$id],
  122. 'logo' => $_GET['logo'][$id],
  123. 'type' => $type_str,
  124. ));
  125. }
  126. }
  127. if(is_array($_GET['newname'])) {
  128. foreach($_GET['newname'] as $key => $value) {
  129. if($value) {
  130. $type_str = intval($_GET['newportal'][$key]).intval($_GET['newforum'][$key]).intval($_GET['newgroup'][$key]).intval($_GET['newhome'][$key]);
  131. $type_str = intval($type_str, '2');
  132. C::t('common_friendlink')->insert(array(
  133. 'displayorder' => $_GET['newdisplayorder'][$key],
  134. 'name' => $value,
  135. 'url' => $_GET['newurl'][$key],
  136. 'description' => $_GET['newdescription'][$key],
  137. 'logo' => $_GET['newlogo'][$key],
  138. 'type' => $type_str,
  139. ));
  140. }
  141. }
  142. }
  143. updatecache('forumlinks');
  144. cpmsg('forumlinks_succeed', 'action=misc&operation=link', 'succeed');
  145. }
  146. } elseif($operation == 'relatedlink') {
  147. if(!submitcheck('linksubmit')) {
  148. ?>
  149. <script type="text/JavaScript">
  150. var rowtypedata = [
  151. [
  152. [1,'', 'td25'],
  153. [1,'<input type="text" class="txt" name="newname[]" size="15">'],
  154. [1,'<input type="text" name="newurl[]" size="50">'],
  155. [1,'<input class="checkbox" type="checkbox" value="1" name="newarticle[{n}]">'],
  156. [1,'<input class="checkbox" type="checkbox" value="1" name="newforum[{n}]">'],
  157. [1,'<input class="checkbox" type="checkbox" value="1" name="newgroup[{n}]">'],
  158. [1,'<input class="checkbox" type="checkbox" value="1" name="newblog[{n}]">']
  159. ]
  160. ]
  161. </script>
  162. <?php
  163. shownav('extended', 'misc_relatedlink');
  164. showsubmenu('nav_misc_relatedlink');
  165. showtips('misc_relatedlink_tips');
  166. $tdstyle = array('width="50"', 'width="120"', 'width="330"', 'width="50"', 'width="80"', 'width="80"', '');
  167. showformheader('misc&operation=relatedlink');
  168. showtableheader();
  169. showsetting('misc_relatedlink_status', 'relatedlinkstatus', $_G['setting']['relatedlinkstatus'], 'radio');
  170. showtablefooter();
  171. showtableheader('', '', 'id="relatedlink_header"');
  172. showsubtitle(array('', 'misc_relatedlink_edit_name', 'misc_relatedlink_edit_url', 'misc_relatedlink_extent_article', 'misc_relatedlink_extent_forum', 'misc_relatedlink_extent_group', 'misc_relatedlink_extent_blog'), 'header tbm', $tdstyle);
  173. showtablefooter();
  174. echo '<script type="text/javascript">floatbottom(\'relatedlink_header\');</script>';
  175. showtableheader();
  176. showsubtitle(array('', 'misc_relatedlink_edit_name', 'misc_relatedlink_edit_url', '<label><input class="checkbox" type="checkbox" name="articleall" onclick="checkAll(\'prefix\', this.form, \'article\', \'articleall\')">'.cplang('misc_relatedlink_extent_article').'</label>', '<label><input class="checkbox" type="checkbox" name="forumall" onclick="checkAll(\'prefix\', this.form, \'forum\', \'forumall\')">'.cplang('misc_relatedlink_extent_forum').'</label>', '<label><input class="checkbox" type="checkbox" name="groupall" onclick="checkAll(\'prefix\', this.form, \'group\', \'groupall\')">'.cplang('misc_relatedlink_extent_group').'</label>', '<label><input class="checkbox" type="checkbox" name="blogall" onclick="checkAll(\'prefix\', this.form, \'blog\', \'blogall\')">'.cplang('misc_relatedlink_extent_blog').'</label>'), 'header', $tdstyle);
  177. $query = C::t('common_relatedlink')->range(0, 0, 'DESC');
  178. foreach($query as $link) {
  179. $extent = sprintf('%04b', $link['extent']);
  180. showtablerow('', array('class="td25"', '', '', 'class="td26"', 'class="td26"', 'class="td26"', ''), array(
  181. '<input type="checkbox" class="checkbox" name="delete[]" value="'.$link['id'].'" />',
  182. '<input type="text" class="txt" name="name['.$link[id].']" value="'.$link['name'].'" size="15" />',
  183. '<input type="text" name="url['.$link[id].']" value="'.$link['url'].'" size="50" />',
  184. '<input class="checkbox" type="checkbox" value="1" name="article['.$link[id].']" '.($extent[0] ? "checked" : '').'>',
  185. '<input class="checkbox" type="checkbox" value="1" name="forum['.$link[id].']" '.($extent[1] ? "checked" : '').'>',
  186. '<input class="checkbox" type="checkbox" value="1" name="group['.$link[id].']" '.($extent[2] ? "checked" : '').'>',
  187. '<input class="checkbox" type="checkbox" value="1" name="blog['.$link[id].']" '.($extent[3] ? "checked" : '').'>',
  188. ));
  189. }
  190. echo '<tr><td></td><td colspan="6"><div><a href="###" onclick="addrow(this, 0)" class="addtr">'.$lang['misc_relatedlink_add'].'</a></div></td></tr>';
  191. showsubmit('linksubmit', 'submit', 'del');
  192. showtablefooter();
  193. showformfooter();
  194. } else {
  195. if($_GET['delete']) {
  196. C::t('common_relatedlink')->delete($_GET['delete']);
  197. }
  198. if(is_array($_GET['name'])) {
  199. foreach($_GET['name'] as $id => $val) {
  200. $extent_str = intval($_GET['article'][$id]).intval($_GET['forum'][$id]).intval($_GET['group'][$id]).intval($_GET['blog'][$id]);
  201. $extent_str = intval($extent_str, '2');
  202. C::t('common_relatedlink')->update($id, array(
  203. 'name' => $_GET['name'][$id],
  204. 'url' => $_GET['url'][$id],
  205. 'extent' => $extent_str,
  206. ));
  207. }
  208. }
  209. if(is_array($_GET['newname'])) {
  210. foreach($_GET['newname'] as $key => $value) {
  211. if($value) {
  212. $extent_str = intval($_GET['newarticle'][$key]).intval($_GET['newforum'][$key]).intval($_GET['newgroup'][$key]).intval($_GET['newblog'][$key]);
  213. $extent_str = intval($extent_str, '2');
  214. C::t('common_relatedlink')->insert(array(
  215. 'name' => $value,
  216. 'url' => $_GET['newurl'][$key],
  217. 'extent' => $extent_str,
  218. ));
  219. }
  220. }
  221. }
  222. C::t('common_setting')->update('relatedlinkstatus', $_GET['relatedlinkstatus']);
  223. updatecache(array('relatedlink','setting'));
  224. cpmsg('relatedlink_succeed', 'action=misc&operation=relatedlink', 'succeed');
  225. }
  226. } elseif($operation == 'bbcode') {
  227. $edit = $_GET['edit'];
  228. if(!submitcheck('bbcodessubmit') && !$edit) {
  229. shownav('style', 'setting_editor');
  230. showsubmenu('setting_editor', array(
  231. array('setting_editor_global', 'setting&operation=editor', 0),
  232. array('setting_editor_code', 'misc&operation=bbcode', 1),
  233. ));
  234. showtips('misc_bbcode_edit_tips');
  235. showformheader('misc&operation=bbcode');
  236. showtableheader('', 'fixpadding');
  237. showsubtitle(array('', 'misc_bbcode_tag', 'available', 'display', 'display_order', 'misc_bbcode_icon', 'misc_bbcode_icon_file', ''));
  238. foreach(C::t('forum_bbcode')->fetch_all_by_available_icon() as $bbcode) {
  239. showtablerow('', array('class="td25"', 'class="td21"', 'class="td25"', 'class="td25"', 'class="td28 td24"', 'class="td25"', 'class="td21"'), array(
  240. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$bbcode[id]\">",
  241. "<input type=\"text\" class=\"txt\" size=\"15\" name=\"tagnew[$bbcode[id]]\" value=\"$bbcode[tag]\">",
  242. "<input class=\"checkbox\" type=\"checkbox\" name=\"availablenew[$bbcode[id]]\" value=\"1\" ".($bbcode['available'] ? 'checked="checked"' : NULL).">",
  243. "<input class=\"checkbox\" type=\"checkbox\" name=\"displaynew[$bbcode[id]]\" value=\"1\" ".($bbcode['available'] == '2' ? 'checked="checked"' : NULL).">",
  244. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"displayordernew[$bbcode[id]]\" value=\"$bbcode[displayorder]\">",
  245. $bbcode['icon'] ? "<em class=\"editor\"><a class=\"customedit\"><img src=\"static/image/common/$bbcode[icon]\" border=\"0\"></a></em>" : ' ',
  246. "<input type=\"text\" class=\"txt\" size=\"25\" name=\"iconnew[$bbcode[id]]\" value=\"$bbcode[icon]\">",
  247. "<a href=\"".ADMINSCRIPT."?action=misc&operation=bbcode&edit=$bbcode[id]\" class=\"act\">$lang[detail]</a>"
  248. ));
  249. }
  250. showtablerow('', array('class="td25"', 'class="td25"', 'class="td25"', 'class="td25"', 'class="td28 td24"', 'class="td25"', 'class="td21"'), array(
  251. cplang('add_new'),
  252. '<input type="text" class="txt" size="15" name="newtag">',
  253. '',
  254. '',
  255. '<input type="text" class="txt" size="2" name="newdisplayorder">',
  256. '',
  257. '<input type="text" class="txt" size="25" name="newicon">',
  258. ''
  259. ));
  260. showsubmit('bbcodessubmit', 'submit', 'del');
  261. showtablefooter();
  262. showformfooter();
  263. } elseif(submitcheck('bbcodessubmit')) {
  264. $delete = $_GET['delete'];
  265. if(is_array($delete)) {
  266. C::t('forum_bbcode')->delete($delete);
  267. }
  268. $tagnew = $_GET['tagnew'];
  269. $displaynew = $_GET['displaynew'];
  270. $displayordernew = $_GET['displayordernew'];
  271. $iconnew = $_GET['iconnew'];
  272. if(is_array($tagnew)) {
  273. $custom_ids = array();
  274. foreach(C::t('forum_bbcode')->fetch_all_by_available_icon() as $bbcode) {
  275. $custom_ids[] = $bbcode['id'];
  276. }
  277. $availablenew = $_GET['availablenew'];
  278. foreach($tagnew as $id => $val) {
  279. if(in_array($id, $custom_ids) && !preg_match("/^[0-9a-z]+$/i", $tagnew[$id]) && strlen($tagnew[$id]) < 20) {
  280. cpmsg('dzcode_edit_tag_invalid', '', 'error');
  281. }
  282. $availablenew[$id] = in_array($id, $custom_ids) ? $availablenew[$id] : 1;
  283. $availablenew[$id] = $availablenew[$id] && $displaynew[$id] ? 2 : $availablenew[$id];
  284. $data = array(
  285. 'available' => $availablenew[$id],
  286. 'displayorder' => $displayordernew[$id]
  287. );
  288. if(in_array($id, $custom_ids)) {
  289. $data['tag'] = $tagnew[$id];
  290. $data['icon'] = $iconnew[$id];
  291. }
  292. C::t('forum_bbcode')->update($id, $data);
  293. }
  294. }
  295. $newtag = $_GET['newtag'];
  296. if($newtag != '') {
  297. if(!preg_match("/^[0-9a-z]+$/i", $newtag && strlen($newtag) < 20)) {
  298. cpmsg('dzcode_edit_tag_invalid', '', 'error');
  299. }
  300. $data = array(
  301. 'tag' => $newtag,
  302. 'icon' => $_GET['newicon'],
  303. 'available' => 0,
  304. 'displayorder' => $_GET['newdisplayorder'],
  305. 'params' => 1,
  306. 'nest' => 1,
  307. );
  308. C::t('forum_bbcode')->insert($data);
  309. }
  310. updatecache(array('bbcodes', 'bbcodes_display'));
  311. cpmsg('dzcode_edit_succeed', 'action=misc&operation=bbcode', 'succeed');
  312. } elseif($edit) {
  313. $bbcode = C::t('forum_bbcode')->fetch($edit);
  314. if(!$bbcode) {
  315. cpmsg('bbcode_not_found', '', 'error');
  316. }
  317. if(!submitcheck('editsubmit')) {
  318. $bbcode['perm'] = explode("\t", $bbcode['perm']);
  319. $query = C::t('common_usergroup')->range_orderby_credit();
  320. $groupselect = array();
  321. foreach($query as $group) {
  322. $group['type'] = $group['type'] == 'special' && $group['radminid'] ? 'specialadmin' : $group['type'];
  323. $groupselect[$group['type']] .= '<option value="'.$group['groupid'].'"'.(@in_array($group['groupid'], $bbcode['perm']) ? ' selected' : '').'>'.$group['grouptitle'].'</option>';
  324. }
  325. $select = '<select name="permnew[]" size="10" multiple="multiple"><option value=""'.(@in_array('', $var['value']) ? ' selected' : '').'>'.cplang('plugins_empty').'</option>'.
  326. '<optgroup label="'.$lang['usergroups_member'].'">'.$groupselect['member'].'</optgroup>'.
  327. ($groupselect['special'] ? '<optgroup label="'.$lang['usergroups_special'].'">'.$groupselect['special'].'</optgroup>' : '').
  328. ($groupselect['specialadmin'] ? '<optgroup label="'.$lang['usergroups_specialadmin'].'">'.$groupselect['specialadmin'].'</optgroup>' : '').
  329. '<optgroup label="'.$lang['usergroups_system'].'">'.$groupselect['system'].'</optgroup></select>';
  330. $bbcode['prompt'] = str_replace("\t", "\n", $bbcode['prompt']);
  331. shownav('style', 'nav_posting_bbcode');
  332. showsubmenu($lang['misc_bbcode_edit'].' - '.$bbcode['tag']);
  333. showformheader("misc&operation=bbcode&edit=$edit");
  334. showtableheader();
  335. showsetting('misc_bbcode_edit_tag', 'tagnew', $bbcode['tag'], 'text');
  336. showsetting('misc_bbcode_edit_replacement', 'replacementnew', $bbcode['replacement'], 'textarea');
  337. showsetting('misc_bbcode_edit_example', 'examplenew', $bbcode['example'], 'text');
  338. showsetting('misc_bbcode_edit_explanation', 'explanationnew', $bbcode['explanation'], 'text');
  339. showsetting('misc_bbcode_edit_params', 'paramsnew', $bbcode['params'], 'text');
  340. showsetting('misc_bbcode_edit_prompt', 'promptnew', $bbcode['prompt'], 'textarea');
  341. showsetting('misc_bbcode_edit_nest', 'nestnew', $bbcode['nest'], 'text');
  342. showsetting('misc_bbcode_edit_usergroup', '', '', $select);
  343. showsubmit('editsubmit');
  344. showtablefooter();
  345. showformfooter();
  346. } else {
  347. $tagnew = trim($_GET['tagnew']);
  348. $paramsnew = $_GET['paramsnew'];
  349. $nestnew = $_GET['nestnew'];
  350. $replacementnew = $_GET['replacementnew'];
  351. $examplenew = $_GET['examplenew'];
  352. $explanationnew = $_GET['explanationnew'];
  353. $promptnew = $_GET['promptnew'];
  354. $permnew = implode("\t", $_GET['permnew']);
  355. if(!preg_match("/^[0-9a-z]+$/i", $tagnew)) {
  356. cpmsg('dzcode_edit_tag_invalid', '', 'error');
  357. } elseif($paramsnew < 1 || $paramsnew > 3 || $nestnew < 1 || $nestnew > 3) {
  358. cpmsg('dzcode_edit_range_invalid', '', 'error');
  359. }
  360. $promptnew = trim(str_replace(array("\t", "\r", "\n"), array('', '', "\t"), $promptnew));
  361. C::t('forum_bbcode')->update($edit, array('tag'=>$tagnew, 'replacement'=>$replacementnew, 'example'=>$examplenew, 'explanation'=>$explanationnew, 'params'=>$paramsnew, 'prompt'=>$promptnew, 'nest'=>$nestnew, 'perm'=>$permnew));
  362. updatecache(array('bbcodes', 'bbcodes_display'));
  363. cpmsg('dzcode_edit_succeed', 'action=misc&operation=bbcode', 'succeed');
  364. }
  365. }
  366. } elseif($operation == 'censor') {
  367. $ppp = 30;
  368. $addcensors = isset($_GET['addcensors']) ? trim($_GET['addcensors']) : '';
  369. if($do == 'export') {
  370. ob_end_clean();
  371. dheader('Cache-control: max-age=0');
  372. dheader('Expires: '.gmdate('D, d M Y H:i:s', TIMESTAMP - 31536000).' GMT');
  373. dheader('Content-Encoding: none');
  374. dheader('Content-Disposition: attachment; filename=CensorWords.txt');
  375. dheader('Content-Type: text/plain');
  376. foreach(C::t('common_word_type')->fetch_all() as $result) {
  377. $result['used'] = 0;
  378. $word_type[$result['id']] = $result;
  379. }
  380. foreach(C::t('common_word')->fetch_all_order_type_find() as $censor) {
  381. $censor['replacement'] = str_replace('*', '', $censor['replacement']) <> '' ? $censor['replacement'] : '';
  382. if($word_type[$censor['type']]['used'] == 0 && $word_type[$censor['type']]) {
  383. if($temp_type == 1) {
  384. echo "[/type]\n";
  385. }
  386. echo "\n[type:".$word_type[$censor['type']]['typename']."]\n";
  387. $temp_type = 1;
  388. $word_type[$censor['type']]['used'] = 1;
  389. }
  390. echo $censor['find'].($censor['replacement'] != '' ? '='.$censor['replacement'] : '')."\n";
  391. }
  392. if($temp_type == 1) {
  393. echo "[/type]\n";
  394. unset($temp_type);
  395. }
  396. define('FOOTERDISABLED' , 1);
  397. exit();
  398. } elseif(submitcheck('addcensorsubmit') && $addcensors != '') {
  399. $oldwords = array();
  400. if($_G['adminid'] == 1 && $_GET['overwrite'] == 2) {
  401. C::t('common_word')->truncate();
  402. } else {
  403. foreach(C::t('common_word')->fetch_all() as $censor) {
  404. $oldwords[md5($censor['find'])] = $censor['admin'];
  405. }
  406. }
  407. $typesearch = "\[type\:(.+?)\](.+?)\[\/type\]";
  408. preg_match_all("/($typesearch)/is", $addcensors, $wordmatch);
  409. $wordmatch[3][] = preg_replace("/($typesearch)/is", '', $addcensors);
  410. $updatecount = $newcount = $ignorecount = 0;
  411. foreach($wordmatch[3] AS $key => $val) {
  412. $word_type = 0;
  413. if($wordmatch[2][$key] && !$wordtype_used[$key]) {
  414. $row = C::t('common_word_type')->fetch_by_typename($wordmatch[2][$key]);
  415. if(empty($row)) {
  416. $word_type = C::t('common_word_type')->insert(array('typename' => $wordmatch[2][$key]), true);
  417. } else {
  418. $word_type = $row['id'];
  419. }
  420. $wordtype_used[$key] = 1;
  421. }
  422. $word_type = $word_type ? $word_type : 0 ;
  423. $censorarray = explode("\n", $val);
  424. foreach($censorarray as $censor) {
  425. list($newfind, $newreplace) = array_map('trim', explode('=', $censor));
  426. $newreplace = $newreplace <> '' ? daddslashes(str_replace("\\\'", '\'', $newreplace), 1) : '**';
  427. if(strlen($newfind) < 3) {
  428. if($newfind != '') {
  429. $ignorecount ++;
  430. }
  431. continue;
  432. } elseif(isset($oldwords[md5($newfind)])) {
  433. if($_GET['overwrite'] && ($_G['adminid'] == 1 || $oldwords[md5($newfind)] == $_G['member']['username'])) {
  434. $updatecount ++;
  435. C::t('common_word')->update_by_find($newfind, array(
  436. 'replacement' => $newreplace,
  437. 'type' => ($word_type ? $word_type : (intval($_GET['wordtype_select']) ? intval($_GET['wordtype_select']) : 0))
  438. ));
  439. } else {
  440. $ignorecount ++;
  441. }
  442. } else {
  443. $newcount ++;
  444. C::t('common_word')->insert(array(
  445. 'admin' => $_G['username'],
  446. 'find' => $newfind,
  447. 'replacement' => $newreplace,
  448. 'type' => ($word_type ? $word_type : (intval($_GET['wordtype_select']) ? intval($_GET['wordtype_select']) : 0))
  449. ));
  450. $oldwords[md5($newfind)] = $_G['member']['username'];
  451. }
  452. }
  453. }
  454. updatecache('censor');
  455. cpmsg('censor_batch_add_succeed', "action=misc&operation=censor&anchor=import", 'succeed', array('newcount' => $newcount, 'updatecount' => $updatecount, 'ignorecount' => $ignorecount));
  456. } elseif(submitcheck('wordtypesubmit')) {
  457. if(is_array($_GET['delete'])) {
  458. $_GET['delete'] = array_map('intval', (array)$_GET['delete']);
  459. C::t('common_word_type')->delete($_GET['delete']);
  460. C::t('common_word')->update_by_type($_GET['delete'], array('type'=>0));
  461. }
  462. if(is_array($_GET['typename'])) {
  463. foreach($_GET['typename'] AS $key => $val) {
  464. if(!$_GET['delete'][$key] && !empty($val)) {
  465. DB::update("common_word_type", array('typename' => $val), "`id` = '$key'");
  466. }
  467. }
  468. }
  469. if($_GET['newtypename']) {
  470. foreach($_GET['newtypename'] AS $key => $val) {
  471. $val = trim($val);
  472. if(!empty($val)) {
  473. C::t('common_word_type')->insert(array('typename' => $val));
  474. }
  475. }
  476. }
  477. cpmsg('censor_wordtype_edit', 'action=misc&operation=censor&anchor=wordtype', 'succeed');
  478. } elseif(!submitcheck('censorsubmit')) {
  479. $ftype = $ffind = null;
  480. if(!empty($_GET['censor_search_type'])) {
  481. $ftype = $_GET['censor_search_type'];
  482. }
  483. $ffind = !empty($_GET['censorkeyword']) ? $_GET['censorkeyword'] : null;
  484. if($_POST['censorkeyword']) {
  485. $page = 1;
  486. }
  487. $ppp = 50;
  488. $startlimit = ($page - 1) * $ppp;
  489. foreach(C::t('common_word_type')->fetch_all() as $result) {
  490. $result['typename'] = dhtmlspecialchars($result['typename']);
  491. $word_type[$result['id']] = $result;
  492. $word_type_option .= "<option value=\"{$result['id']}\">{$result['typename']}</option>";
  493. if(!empty($_GET['censor_search_type'])) {
  494. $word_type_option_search .= "<option value=\"{$result['id']}\"".($_GET['censor_search_type'] == $result['id'] ? 'selected' : '' ).">{$result['typename']}</option>";
  495. }
  496. }
  497. shownav('topic', 'nav_posting_censor');
  498. $anchor = in_array($_GET['anchor'], array('list', 'import', 'wordtype', 'showanchor')) ? $_GET['anchor'] : 'list';
  499. showsubmenuanchors('nav_posting_censor', array(
  500. array('admin', 'list', $anchor == 'list'),
  501. array('misc_censor_batch_add', 'import', $anchor == 'import'),
  502. array('misc_censor_wordtype_edit', 'wordtype', $anchor == 'wordtype'),
  503. ));
  504. showtips('misc_censor_tips', 'list_tips', $anchor == 'list');
  505. showtips('misc_censor_batch_add_tips', 'import_tips', $anchor == 'import');
  506. showtips('misc_censor_wordtype_tips', 'wordtype_tips', $anchor == 'wordtype');
  507. showtagheader('div', 'list', $anchor == 'list');
  508. showformheader("misc&operation=censor&page=$page", '', 'keywordsearch');
  509. showtableheader();
  510. echo '<br /><br /><form method="post">'. $lang['keywords'].': <input type="text" name="censorkeyword" value="'.$_GET['censorkeyword'].'" /> &nbsp; <select name="censor_search_type"><option value = "">'.cplang("misc_censor_wordtype_search").'</option><option value="0">'.cplang('misc_censor_word_default_typename').'</option>'.($word_type_option_search ? $word_type_option_search : $word_type_option).'</select> &nbsp;<input type="submit" name="censor_search" value="'.$lang[search].'" class="btn" /> </form>';
  511. showtablefooter();
  512. showformheader("misc&operation=censor&page=$page", '', 'listform');
  513. showtableheader('', 'fixpadding');
  514. showsubtitle(array('', 'misc_censor_word', 'misc_censor_replacement', 'misc_censor_type', 'operator'));
  515. $multipage = '';
  516. $totalcount = C::t('common_word')->count_by_type_find($ftype, $ffind);
  517. if($totalcount) {
  518. $multipage = multi($totalcount, $ppp, $page, ADMINSCRIPT."?action=misc&operation=censor".($ffind ? "&censorkeyword=".$ffind : '' ).($_GET['censor_search_type'] ? "&censor_search_type=".$_GET['censor_search_type'] : '' ));
  519. foreach(C::t('common_word')->fetch_all_by_type_find($ftype, $ffind, $startlimit, $ppp) as $censor) {
  520. $censor['replacement'] = $censor['replacement'];
  521. $censor['replacement'] = dhtmlspecialchars($censor['replacement']);
  522. $censor['find'] = dhtmlspecialchars($censor['find']);
  523. $disabled = $_G['adminid'] != 1 && $censor['admin'] != $_G['member']['username'] ? 'disabled' : NULL;
  524. if(in_array($censor['replacement'], array('{BANNED}', '{MOD}'))) {
  525. $replacedisplay = 'style="display:none"';
  526. $optionselected = array();
  527. foreach(array('{BANNED}', '{MOD}') as $option) {
  528. $optionselected[$option] = $censor['replacement'] == $option ? 'selected' : '';
  529. }
  530. } else {
  531. $optionselected['{REPLACE}'] = 'selected';
  532. $replacedisplay = '';
  533. }
  534. $word_type_tmp = "<select name='wordtype_select[{$censor['id']}]' id='wordtype_select'><option value='0'>".cplang('misc_censor_word_default_typename')."</option>";
  535. foreach($word_type AS $key => $val) {
  536. if($censor['type'] == $val['id']) {
  537. $word_type_tmp .= "<option value='{$val['id']}' selected>{$val['typename']}</option>";
  538. } else {
  539. $word_type_tmp .= "<option value='{$val['id']}'>{$val['typename']}</option>";
  540. }
  541. }
  542. $word_type_tmp .= "</select>";
  543. showtablerow('', array('class="td25"', '', '', 'class="td26"'), array(
  544. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$censor[id]\" $disabled>",
  545. "<input type=\"text\" class=\"txt\" size=\"30\" name=\"find[$censor[id]]\" value=\"$censor[find]\" $disabled>",
  546. '<select name="replace['.$censor['id'].']" onchange="if(this.options[this.options.selectedIndex].value==\'{REPLACE}\'){$(\'divbanned'.$censor['id'].'\').style.display=\'\';$(\'divbanned'.$censor['id'].'\').value=\'\';}else{$(\'divbanned'.$censor['id'].'\').style.display=\'none\';}" '.$disabled.'>
  547. <option value="{BANNED}" '.$optionselected['{BANNED}'].'>'.cplang('misc_censor_word_banned').'</option><option value="{MOD}" '.$optionselected['{MOD}'].'>'.cplang('misc_censor_word_moderated').'</option><option value="{REPLACE}" '.$optionselected['{REPLACE}'].'>'.cplang('misc_censor_word_replaced').'</option></select>
  548. <input class="txt" type="text" size="10" name="replacecontent['.$censor['id'].']" value="'.$censor['replacement'].'" id="divbanned'.$censor['id'].'" '.$replacedisplay.' '.$disabled.'>',
  549. $word_type_tmp,
  550. $censor['admin']
  551. ));
  552. }
  553. }
  554. $misc_censor_word_banned = cplang('misc_censor_word_banned');
  555. $misc_censor_word_moderated = cplang('misc_censor_word_moderated');
  556. $misc_censor_word_replaced = cplang('misc_censor_word_replaced');
  557. $misc_censor_word_newtypename = cplang('misc_censor_word_newtypename');
  558. $misc_censor_word_default_typename = cplang('misc_censor_word_default_typename');
  559. echo <<<EOT
  560. <script type="text/JavaScript">
  561. var rowtypedata = [
  562. [
  563. [1,''],
  564. [1,'<input type="text" class="txt" size="30" name="newfind[]">'], [1, ' <select onchange="if(this.options[this.options.selectedIndex].value==\'{REPLACE}\'){this.nextSibling.style.display=\'\';}else{this.nextSibling.style.display=\'none\';}" name="newreplace[]" $disabled><option value="{BANNED}">$misc_censor_word_banned</option><option value="{MOD}">$misc_censor_word_moderated</option><option value="{REPLACE}">$misc_censor_word_replaced</option></select><input class="txt" type="text" size="15" name="newreplacecontent[]" style="display:none;">']
  565. EOT;
  566. if($word_type_option) {
  567. echo ", [1,' <select onchange=\"if(this.options[this.options.selectedIndex].value==\'0\'){this.nextSibling.style.display=\'\';}else{this.nextSibling.style.display=\'none\';}\" name=\"newwordtype[]\" id=\"newwordtype[]\"><option value=\"0\" selected>{$misc_censor_word_default_typename}</option>{$word_type_option}</select><input class=\"txt\" type=\"text\" size=\"10\" name=\"newtypename[]\" >']";
  568. }
  569. echo <<<EOT
  570. , [1,'']
  571. ],
  572. [
  573. [1,''],
  574. [1,'<input type="text" class="txt" size="30" name="newtypename[]">']
  575. ]
  576. ];
  577. </script>
  578. EOT;
  579. echo '<tr><td></td><td colspan="4"><div><a href="###" onclick="addrow(this, 0)" class="addtr">'.$lang['add_new'].'</a></div></td></tr>';
  580. showsubmit('censorsubmit', 'submit', 'del', '', $multipage, false);
  581. showtablefooter();
  582. showformfooter();
  583. showtagfooter('div');
  584. showtagheader('div', 'import', $anchor == 'import');
  585. showformheader("misc&operation=censor&page=$page", 'fixpadding');
  586. showtableheader('', 'fixpadding', 'importform');
  587. showtablerow('', 'class="vtop rowform"', "<select name=\"wordtype_select\"><option value='0'>".cplang('misc_censor_word_default_typename')."</option>$word_type_option</select>");
  588. showtablerow('', 'class="vtop rowform"', '<br /><textarea name="addcensors" class="tarea" rows="10" cols="80" onkeyup="textareasize(this)" onkeydown="textareakey(this, event)"></textarea><br /><br />'.mradio('overwrite', array(
  589. 0 => cplang('misc_censor_batch_add_no_overwrite'),
  590. 1 => cplang('misc_censor_batch_add_overwrite'),
  591. 2 => cplang('misc_censor_batch_add_clear')
  592. ), '', FALSE));
  593. showsubmit('addcensorsubmit');
  594. showtablefooter();
  595. showformfooter();
  596. showtagfooter('div');
  597. showtagheader('div', 'wordtype', $anchor == 'wordtype');
  598. showformheader("misc&operation=censor", 'fixpadding');
  599. showtableheader('', 'fixpadding', 'wordtypeform');
  600. showsubtitle(array('', 'misc_censor_wordtype_name'));
  601. if($wordtypecount = C::t('common_word_type')->count()) {
  602. foreach(C::t('common_word_type')->fetch_all() as $result) {
  603. showtablerow('', array('class="td25"', ''), array("<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"{$result['id']}\" $disabled>", "<input type=\"text\" class=\"txt\" size=\"10\" name=\"typename[{$result['id']}]\" value=\"{$result['typename']}\">"));
  604. }
  605. }
  606. echo '<tr><td></td><td colspan="2"><div><a href="###" onclick="addrow(this, 1)" class="addtr">'.$lang['add_new'].'</a></div></td></tr>';
  607. showsubmit('wordtypesubmit', 'submit', 'del', '', '', false);
  608. showtablefooter();
  609. showformfooter();
  610. showtagfooter('div');
  611. } else {
  612. if($ids = dimplode($_GET['delete'])) {
  613. DB::delete('common_word', "id IN ($ids) AND ('{$_G['adminid']}'='1' OR admin='{$_G['username']}')");
  614. }
  615. if(is_array($_GET['find'])) {
  616. foreach($_GET['find'] as $id => $val) {
  617. $_GET['find'][$id] = $val = trim(str_replace('=', '', $_GET['find'][$id]));
  618. if(strlen($val) < 3) {
  619. cpmsg('censor_keywords_tooshort', '', 'error');
  620. }
  621. $_GET['replace'][$id] = $_GET['replace'][$id] == '{REPLACE}' ? $_GET['replacecontent'][$id] : $_GET['replace'][$id];
  622. $_GET['replace'][$id] = daddslashes(str_replace("\\\'", '\'', $_GET['replace'][$id]), 1);
  623. DB::update('common_word', array(
  624. 'find' => $_GET['find'][$id],
  625. 'replacement' => $_GET['replace'][$id],
  626. 'type' => $_GET['wordtype_select'][$id],
  627. ), "id='$id' AND ('{$_G['adminid']}'='1' OR admin='{$_G['username']}')");
  628. }
  629. }
  630. $newfind_array = !empty($_GET['newfind']) ? $_GET['newfind'] : array();
  631. $newreplace_array = !empty($_GET['newreplace']) ? $_GET['newreplace'] : array();
  632. $newreplacecontent_array = !empty($_GET['newreplacecontent']) ? $_GET['newreplacecontent'] : array();
  633. $newwordtype = !empty($_GET['newwordtype']) ? $_GET['newwordtype'] : array();
  634. $newtypename = !empty($_GET['newtypename']) ? $_GET['newtypename'] : array();
  635. foreach($newfind_array as $key => $value) {
  636. $newfind = trim(str_replace('=', '', $newfind_array[$key]));
  637. $newreplace = trim($newreplace_array[$key]);
  638. if($newfind != '') {
  639. if(strlen($newfind) < 3) {
  640. cpmsg('censor_keywords_tooshort', '', 'error');
  641. }
  642. if($newreplace == '{REPLACE}') {
  643. $newreplace = daddslashes(str_replace("\\\'", '\'', $newreplacecontent_array[$key]), 1);
  644. }
  645. if($newtypename) {
  646. $newtypename = daddslashes($newtypename);
  647. }
  648. if($newwordtype) {
  649. $newwordtype[$key] = intval($newwordtype[$key]);
  650. }
  651. if($newwordtype[$key] == 0) {
  652. if(!empty($newtypename[$key])) {
  653. $newwordtype[$key] = C::t('common_word_type')->insert(array('typename' => $newtypename[$key]), true);
  654. }
  655. }
  656. if($oldcenser = C::t('common_word')->fetch_by_find($newfind)) {
  657. cpmsg('censor_keywords_existence', '', 'error');
  658. } else {
  659. C::t('common_word')->insert(array(
  660. 'admin' => $_G['username'],
  661. 'find' => $newfind,
  662. 'replacement' => $newreplace,
  663. 'type' => $newwordtype[$key],
  664. ));
  665. }
  666. }
  667. }
  668. updatecache('censor');
  669. cpmsg('censor_succeed', "action=misc&operation=censor&page=$page", 'succeed');
  670. }
  671. } elseif($operation == 'stamp') {
  672. if(!submitcheck('stampsubmit')) {
  673. $anchor = in_array($_GET['anchor'], array('list', 'llist', 'add')) ? $_GET['anchor'] : 'list';
  674. shownav('style', 'nav_thread_stamp');
  675. showsubmenuanchors('nav_thread_stamp', array(
  676. array('misc_stamp_thread', 'list', $anchor == 'list'),
  677. array('misc_stamp_list', 'llist', $anchor == 'llist'),
  678. array('add', 'add', $anchor == 'add')
  679. ));
  680. showtagheader('div', 'list', $anchor == 'list');
  681. showtips('misc_stamp_listtips');
  682. showformheader('misc&operation=stamp');
  683. showhiddenfields(array('anchor' => 'list'));
  684. showtableheader();
  685. showsubtitle(array('', 'misc_stamp_id', 'misc_stamp_name', 'smilies_edit_image', 'smilies_edit_filename', 'misc_stamp_icon', 'misc_stamp_option'));
  686. $imgfilter = $stamplist = $stamplistfiles = $stampicons = array();
  687. foreach(C::t('common_smiley')->fetch_all_by_type('stamplist') as $smiley) {
  688. $stamplistfiles[$smiley['url']] = $smiley['id'];
  689. $stampicons[$smiley['url']] = $smiley['typeid'];
  690. $stamplist[] = $smiley;
  691. }
  692. $tselect = '<select><option value="0">'.cplang('none').'</option><option value="1">'.cplang('misc_stamp_option_stick').'</option><option value="2">'.cplang('misc_stamp_option_digest').'</option><option value="3">'.cplang('misc_stamp_option_recommend').'</option><option value="4">'.cplang('misc_stamp_option_recommendto').'</option></select>';
  693. foreach(C::t('common_smiley')->fetch_all_by_type('stamp') as $smiley) {
  694. $s = $r = array();
  695. $s[] = '<select>';
  696. $r[] = '<select name="typeidnew['.$smiley['id'].']">';
  697. if($smiley['typeid']) {
  698. $s[] = '<option value="'.$smiley['typeid'].'">';
  699. $r[] = '<option value="'.$smiley['typeid'].'" selected="selected">';
  700. $s[] = '<option value="0">';
  701. $r[] = '<option value="-1">';
  702. }
  703. $tselectrow = str_replace($s, $r, $tselect);
  704. $dot = strrpos($smiley['url'], '.');
  705. $fn = substr($smiley['url'], 0, $dot);
  706. $ext = substr($smiley['url'], $dot + 1);
  707. $stampicon = $fn.'.small.'.$ext;
  708. $small = array_key_exists($stampicon, $stamplistfiles);
  709. showtablerow('', array('class="td25"', 'class="td25"', 'class="td23"'), array(
  710. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$smiley[id]\">",
  711. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"displayorder[$smiley[id]]\" value=\"$smiley[displayorder]\">",
  712. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"code[$smiley[id]]\" value=\"$smiley[code]\">",
  713. "<img src=\"static/image/stamp/$smiley[url]\">",
  714. $smiley['url'],
  715. ($small ? '<input class="checkbox" type="checkbox" name="stampicon['.$smiley['id'].']"'.($smiley['id'] == $stampicons[$stampicon] ? ' checked="checked"' : '').' value="'.$stamplistfiles[$stampicon].'" /><img class="vmiddle" src="static/image/stamp/'.$stampicon.'">': ''),
  716. $tselectrow,
  717. ));
  718. $imgfilter[] = $smiley['url'];
  719. }
  720. showsubmit('stampsubmit', 'submit', 'del');
  721. showtablefooter();
  722. showformfooter();
  723. showtagfooter('div');
  724. showtagheader('div', 'llist', $anchor == 'llist');
  725. showtips('misc_stamp_listtips');
  726. showformheader('misc&operation=stamp&type=list');
  727. showhiddenfields(array('anchor' => 'llist'));
  728. showtableheader();
  729. showsubtitle(array('', 'misc_stamp_id', 'misc_stamp_listname', 'smilies_edit_image', 'smilies_edit_filename'));
  730. foreach($stamplist as $smiley) {
  731. showtablerow('', array('class="td25"', 'class="td25"', 'class="td23"'), array(
  732. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$smiley[id]\">",
  733. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"displayorder[$smiley[id]]\" value=\"$smiley[displayorder]\">",
  734. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"code[$smiley[id]]\" value=\"$smiley[code]\">",
  735. "<img src=\"static/image/stamp/$smiley[url]\">",
  736. $smiley['url']
  737. ));
  738. $imgfilter[] = $smiley['url'];
  739. }
  740. showsubmit('stampsubmit', 'submit', 'del');
  741. showtablefooter();
  742. showformfooter();
  743. showtagfooter('div');
  744. showtagheader('div', 'add', $anchor == 'add');
  745. showformheader('misc&operation=stamp');
  746. showtips('misc_stamp_addtips');
  747. showtableheader();
  748. showsubtitle(array('add', 'misc_stamp_type', 'misc_stamp_id', 'misc_stamp_imagename', 'smilies_edit_image', 'smilies_edit_filename'));
  749. $newid = 0;
  750. $imgextarray = array('png', 'gif');
  751. $stampsdir = dir(DISCUZ_ROOT.'./static/image/stamp');
  752. while($entry = $stampsdir->read()) {
  753. if(in_array(strtolower(fileext($entry)), $imgextarray) && !in_array($entry, $imgfilter) && is_file(DISCUZ_ROOT.'./static/image/stamp/'.$entry)) {
  754. showtablerow('', array('class="td25"', 'class="td28 td24 rowform"', 'class="td23"'), array(
  755. "<input type=\"checkbox\" name=\"addcheck[$newid]\" id=\"addcheck_$newid\" class=\"checkbox\">",
  756. "<ul onmouseover=\"altStyle(this);\">".
  757. "<li class=\"checked\"><input type=\"radio\" name=\"addtype[$newid]\" value=\"0\" checked=\"checked\" class=\"radio\">".cplang('misc_stamp_thread')."</li>".
  758. "<li><input type=\"radio\" name=\"addtype[$newid]\" value=\"1\" class=\"radio\" onclick=\"$('addcheck_$newid').checked='true'\">".cplang('misc_stamp_list')."</li>".
  759. "</ul>",
  760. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"adddisplayorder[$newid]\" value=\"0\">",
  761. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"addcode[$newid]\" value=\"\">",
  762. "<img src=\"static/image/stamp/$entry\" />",
  763. "<input type=\"hidden\" class=\"txt\" size=\"35\" name=\"addurl[$newid]\" value=\"$entry\">$entry"
  764. ));
  765. $newid ++;
  766. }
  767. }
  768. $stampsdir->close();
  769. if(!$newid) {
  770. showtablerow('', array('class="td25"', 'colspan="3"'), array('', cplang('misc_stamp_tips')));
  771. } else {
  772. showsubmit('stampsubmit', 'submit', '<input type="checkbox" class="checkbox" name="chkall2" id="chkall2" onclick="checkAll(\'prefix\', this.form, \'addcheck\', \'chkall2\')"><label for="chkall2">'.cplang('select_all').'</label>');
  773. }
  774. showtablefooter();
  775. showformfooter();
  776. showtagfooter('div');
  777. } else {
  778. if($_GET['delete']) {
  779. C::t('common_smiley')->delete($_GET['delete']);
  780. }
  781. if(is_array($_GET['displayorder'])) {
  782. $typeidset = array();
  783. foreach($_GET['displayorder'] as $id => $val) {
  784. $_GET['displayorder'][$id] = intval($_GET['displayorder'][$id]);
  785. if($_GET['displayorder'][$id] >= 0 && $_GET['displayorder'][$id] < 100) {
  786. $typeidadd = '';
  787. if($_GET['typeidnew'][$id]) {
  788. if(!isset($typeidset[$_GET['typeidnew'][$id]])) {
  789. $_GET['typeidnew'][$id] = $_GET['typeidnew'][$id] > 0 ? $_GET['typeidnew'][$id] : 0;
  790. $typeidadd = ",typeid='{$_GET['typeidnew'][$id]}'";
  791. $typeidset[$_GET['typeidnew'][$id]] = TRUE;
  792. } else {
  793. $_GET['typeidnew'][$id] = 0;
  794. }
  795. }
  796. C::t('common_smiley')->update($id, array(
  797. 'displayorder' => $_GET['displayorder'][$id],
  798. 'code' => $_GET['code'][$id],
  799. 'typeid' => $_GET['typeidnew'][$id],
  800. ));
  801. }
  802. }
  803. }
  804. if(is_array($_GET['addurl'])) {
  805. $count = C::t('common_smiley')->count_by_type(array('stamp','stamplist'));
  806. if($count < 100) {
  807. foreach($_GET['addurl'] as $k => $v) {
  808. if($_GET['addcheck'][$k] && $_GET['addcode'][$k]) {
  809. $count++;
  810. C::t('common_smiley')->insert(array(
  811. 'displayorder' => '0',
  812. 'type' => (!$_GET['addtype'][$k] ? 'stamp' : 'stamplist'),
  813. 'url' => $_GET['addurl'][$k],
  814. 'code' => $_GET['addcode'][$k],
  815. ));
  816. }
  817. }
  818. }
  819. }
  820. C::t('common_smiley')->update_by_type('stamplist', array('typeid' => 0));
  821. if(is_array($_GET['stampicon'])) {
  822. foreach($_GET['stampicon'] as $k => $v) {
  823. if($_GET['typeidnew'][$k]) {
  824. $k = 0;
  825. }
  826. C::t('common_smiley')->update_by_id_type($v, 'stamplist', array('typeid' => $k));
  827. }
  828. }
  829. updatecache('stamps');
  830. updatecache('stamptypeid');
  831. cpmsg('thread_stamp_succeed', "action=misc&operation=stamp&anchor=$_GET[anchor]", 'succeed');
  832. }
  833. } elseif($operation == 'attachtype') {
  834. if(!submitcheck('typesubmit')) {
  835. $attachtypes = '';
  836. $query = DB::query("SELECT * FROM ".DB::table('forum_attachtype')." WHERE fid='0'");
  837. while($type = DB::fetch($query)) {
  838. $type['maxsize'] = round($type['maxsize'] / 1024);
  839. $attachtypes .= showtablerow('', array('class="td25"', 'class="td24"'), array(
  840. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$type[id]\" />",
  841. "<input type=\"text\" class=\"txt\" size=\"10\" name=\"extension[$type[id]]\" value=\"$type[extension]\" />",
  842. "<input type=\"text\" class=\"txt\" size=\"15\" name=\"maxsize[$type[id]]\" value=\"$type[maxsize]\" />"
  843. ), TRUE);
  844. }
  845. ?>
  846. <script type="text/JavaScript">
  847. var rowtypedata = [
  848. [
  849. [1,'', 'td25'],
  850. [1,'<input name="newextension[]" type="text" class="txt" size="10">', 'td24'],
  851. [1,'<input name="newmaxsize[]" type="text" class="txt" size="15">']
  852. ]
  853. ];
  854. </script>
  855. <?php
  856. shownav('global', 'nav_posting_attachtype');
  857. showsubmenu('nav_posting_attachtype');
  858. showtips('misc_attachtype_tips');
  859. showformheader('misc&operation=attachtype');
  860. showtableheader();
  861. showtablerow('class="partition"', array('class="td25"', 'class="td24"'), array('', cplang('misc_attachtype_ext'), cplang('misc_attachtype_maxsize')));
  862. echo $attachtypes;
  863. echo '<tr><td></td><td colspan="2"><div><a href="###" onclick="addrow(this, 0)" class="addtr">'.$lang['misc_attachtype_add'].'</a></div></tr>';
  864. showsubmit('typesubmit', 'submit', 'del');
  865. showtablefooter();
  866. showformfooter();
  867. } else {
  868. if($ids = dimplode($_GET['delete'])) {
  869. DB::delete('forum_attachtype', "id IN ($ids) AND fid='0'");
  870. }
  871. if(is_array($_GET['extension'])) {
  872. foreach($_GET['extension'] as $id => $val) {
  873. DB::update('forum_attachtype', array(
  874. 'extension' => $_GET['extension'][$id],
  875. 'maxsize' => $_GET['maxsize'][$id] * 1024,
  876. ), "id='$id'");
  877. }
  878. }
  879. if(is_array($_GET['newextension'])) {
  880. foreach($_GET['newextension'] as $key => $value) {
  881. if($newextension1 = trim($value)) {
  882. if(C::t('forum_attachtype')->count_by_extension_fid($newextension1, 0)) {
  883. cpmsg('attachtypes_duplicate', '', 'error');
  884. }
  885. C::t('forum_attachtype')->insert(array(
  886. 'extension' => $newextension1,
  887. 'maxsize' => $_GET['newmaxsize'][$key] * 1024,
  888. 'fid' => 0
  889. ));
  890. }
  891. }
  892. }
  893. updatecache('attachtype');
  894. cpmsg('attachtypes_succeed', 'action=misc&operation=attachtype', 'succeed');
  895. }
  896. } elseif($operation == 'cron') {
  897. if(empty($_GET['edit']) && empty($_GET['run'])) {
  898. if(!submitcheck('cronssubmit')) {
  899. shownav('tools', 'misc_cron');
  900. showsubmenu('nav_misc_cron');
  901. showtips('misc_cron_tips');
  902. showformheader('misc&operation=cron');
  903. showtableheader('', 'fixpadding');
  904. showsubtitle(array('', 'name', 'available', 'type', 'time', 'misc_cron_last_run', 'misc_cron_next_run', ''));
  905. $query = DB::query("SELECT * FROM ".DB::table('common_cron')." ORDER BY type DESC");
  906. while($cron = DB::fetch($query)) {
  907. $disabled = $cron['weekday'] == -1 && $cron['day'] == -1 && $cron['hour'] == -1 && $cron['minute'] == '' ? 'disabled' : '';
  908. if($cron['day'] > 0 && $cron['day'] < 32) {
  909. $cron['time'] = cplang('misc_cron_permonth').$cron['day'].cplang('misc_cron_day');
  910. } elseif($cron['weekday'] >= 0 && $cron['weekday'] < 7) {
  911. $cron['time'] = cplang('misc_cron_perweek').cplang('misc_cron_week_day_'.$cron['weekday']);
  912. } elseif($cron['hour'] >= 0 && $cron['hour'] < 24) {
  913. $cron['time'] = cplang('misc_cron_perday');
  914. } else {
  915. $cron['time'] = cplang('misc_cron_perhour');
  916. }
  917. $cron['time'] .= $cron['hour'] >= 0 && $cron['hour'] < 24 ? sprintf('%02d', $cron[hour]).cplang('misc_cron_hour') : '';
  918. if(!in_array($cron['minute'], array(-1, ''))) {
  919. foreach($cron['minute'] = explode("\t", $cron['minute']) as $k => $v) {
  920. $cron['minute'][$k] = sprintf('%02d', $v);
  921. }
  922. $cron['minute'] = implode(',', $cron['minute']);
  923. $cron['time'] .= $cron['minute'].cplang('misc_cron_minute');
  924. } else {
  925. $cron['time'] .= '00'.cplang('misc_cron_minute');
  926. }
  927. $cron['lastrun'] = $cron['lastrun'] ? dgmdate($cron['lastrun'], $_G['setting']['dateformat']."<\b\\r />".$_G['setting']['timeformat']) : '<b>N/A</b>';
  928. $cron['nextcolor'] = $cron['nextrun'] && $cron['nextrun'] + $_G['setting']['timeoffset'] * 3600 < TIMESTAMP ? 'style="color: #ff0000"' : '';
  929. $cron['nextrun'] = $cron['nextrun'] ? dgmdate($cron['nextrun'], $_G['setting']['dateformat']."<\b\\r />".$_G['setting']['timeformat']) : '<b>N/A</b>';
  930. $cron['run'] = $cron['available'];
  931. $efile = explode(':', $cron['filename']);
  932. if(count($efile) > 1 && !in_array($efile[0], $_G['setting']['plugins']['available'])) {
  933. $cron['run'] = 0;
  934. }
  935. showtablerow('', array('class="td25"', 'class="crons"', 'class="td25"', 'class="td25"', 'class="td23"', 'class="td23"', 'class="td23"', 'class="td25"'), array(
  936. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$cron[cronid]\" ".($cron['type'] == 'system' ? 'disabled' : '').">",
  937. "<input type=\"text\" class=\"txt\" name=\"namenew[$cron[cronid]]\" size=\"20\" value=\"$cron[name]\"><br /><b>$cron[filename]</b>",
  938. "<input class=\"checkbox\" type=\"checkbox\" name=\"availablenew[$cron[cronid]]\" value=\"1\" ".($cron['available'] ? 'checked' : '')." $disabled>",
  939. cplang($cron['type'] == 'system' ? 'inbuilt' : ($cron['type'] == 'plugin' ? 'plugin' : 'custom')),
  940. $cron[time],
  941. $cron[lastrun],
  942. $cron[nextrun],
  943. "<a href=\"".ADMINSCRIPT."?action=misc&operation=cron&edit=$cron[cronid]\" class=\"act\">$lang[edit]</a><br />".
  944. ($cron['run'] ? " <a href=\"".ADMINSCRIPT."?action=misc&operation=cron&run=$cron[cronid]\" class=\"act\">$lang[misc_cron_run]</a>" : " <a href=\"###\" class=\"act\" disabled>$lang[misc_cron_run]</a>")
  945. ));
  946. }
  947. showtablerow('', array('','colspan="10"'), array(
  948. cplang('add_new'),
  949. '<input type="text" class="txt" name="newname" value="" size="20" />'
  950. ));
  951. showsubmit('cronssubmit', 'submit', 'del');
  952. showtablefooter();
  953. showformfooter();
  954. } else {
  955. if($ids = dimplode($_GET['delete'])) {
  956. DB::delete('common_cron', "cronid IN ($ids) AND type='user'");
  957. }
  958. if(is_array($_GET['namenew'])) {
  959. foreach($_GET['namenew'] as $id => $name) {
  960. $newcron = array(
  961. 'name' => dhtmlspecialchars($_GET['namenew'][$id]),
  962. 'available' => $_GET['availablenew'][$id]
  963. );
  964. if(empty($_GET['availablenew'][$id])) {
  965. $newcron['nextrun'] = '0';
  966. }
  967. DB::update('common_cron', $newcron, "cronid='$id'");
  968. }
  969. }
  970. if($newname = trim($_GET['newname'])) {
  971. DB::insert('common_cron', array(
  972. 'name' => dhtmlspecialchars($newname),
  973. 'type' => 'user',
  974. 'available' => '0',
  975. 'weekday' => '-1',
  976. 'day' => '-1',
  977. 'hour' => '-1',
  978. 'minute' => '',
  979. 'nextrun' => $_G['timestamp'],
  980. ));
  981. }
  982. $query = DB::query("SELECT cronid, filename FROM ".DB::table('common_cron'));
  983. while($cron = DB::fetch($query)) {
  984. $efile = explode(':', $cron['filename']);
  985. $pluginid = '';
  986. if(count($efile) > 1 && ispluginkey($efile[0])) {
  987. $pluginid = $efile[0];
  988. $cron['filename'] = $efile[1];
  989. }
  990. if(!$pluginid) {
  991. if(!file_exists(DISCUZ_ROOT.'./source/include/cron/'.$cron['filename'])) {
  992. DB::update('common_cron', array(
  993. 'available' => '0',
  994. 'nextrun' => '0',
  995. ), "cronid='$cron[cronid]'");
  996. }
  997. } else {
  998. if(!file_exists(DISCUZ_ROOT.'./source/plugin/'.$pluginid.'/cron/'.$cron['filename'])) {
  999. DB::delete('common_cron', "cronid='$cron[cronid]'");
  1000. }
  1001. }
  1002. }
  1003. updatecache('setting');
  1004. cpmsg('crons_succeed', 'action=misc&operation=cron', 'succeed');
  1005. }
  1006. } else {
  1007. $cronid = empty($_GET['run']) ? $_GET['edit'] : $_GET['run'];
  1008. $cron = DB::fetch_first("SELECT * FROM ".DB::table('common_cron')." WHERE cronid='$cronid'");
  1009. if(!$cron) {
  1010. cpmsg('cron_not_found', '', 'error');
  1011. }
  1012. $cron['filename'] = str_replace(array('..', '/', '\\'), array('', '', ''), $cron['filename']);
  1013. $cronminute = str_replace("\t", ',', $cron['minute']);
  1014. $cron['minute'] = explode("\t", $cron['minute']);
  1015. if(!empty($_GET['edit'])) {
  1016. if(!submitcheck('editsubmit')) {
  1017. shownav('tools', 'misc_cron');
  1018. showsubmenu($lang['misc_cron_edit'].' - '.$cron['name']);
  1019. showtips('misc_cron_edit_tips');
  1020. $weekdayselect = $dayselect = $hourselect = '';
  1021. for($i = 0; $i <= 6; $i++) {
  1022. $weekdayselect .= "<option value=\"$i\" ".($cron['weekday'] == $i ? 'selected' : '').">".$lang['misc_cron_week_day_'.$i]."</option>";
  1023. }
  1024. for($i = 1; $i <= 31; $i++) {
  1025. $dayselect .= "<option value=\"$i\" ".($cron['day'] == $i ? 'selected' : '').">$i $lang[misc_cron_day]</option>";
  1026. }
  1027. for($i = 0; $i <= 23; $i++) {
  1028. $hourselect .= "<option value=\"$i\" ".($cron['hour'] == $i ? 'selected' : '').">$i $lang[misc_cron_hour]</option>";
  1029. }
  1030. shownav('tools', 'misc_cron');
  1031. showformheader("misc&operation=cron&edit=$cronid");
  1032. showtableheader();
  1033. showsetting('misc_cron_edit_weekday', '', '', "<select name=\"weekdaynew\"><option value=\"-1\">*</option>$weekdayselect</select>");
  1034. showsetting('misc_cron_edit_day', '', '', "<select name=\"daynew\"><option value=\"-1\">*</option>$dayselect</select>");
  1035. showsetting('misc_cron_edit_hour', '', '', "<select name=\"hournew\"><option value=\"-1\">*</option>$hourselect</select>");
  1036. showsetting('misc_cron_edit_minute', 'minutenew', $cronminute, 'text');
  1037. showsetting('misc_cron_edit_filename', 'filenamenew', $cron['filename'], 'text');
  1038. showsubmit('editsubmit');
  1039. showtablefooter();
  1040. showformfooter();
  1041. } else {
  1042. $daynew = $_GET['weekdaynew'] != -1 ? -1 : $_GET['daynew'];
  1043. if(strpos($_GET['minutenew'], ',') !== FALSE) {
  1044. $minutenew = explode(',', $_GET['minutenew']);
  1045. foreach($minutenew as $key => $val) {
  1046. $minutenew[$key] = $val = intval($val);
  1047. if($val < 0 || $var > 59) {
  1048. unset($minutenew[$key]);
  1049. }
  1050. }
  1051. $minutenew = array_slice(array_unique($minutenew), 0, 12);
  1052. $minutenew = implode("\t", $minutenew);
  1053. } else {
  1054. $minutenew = intval($_GET['minutenew']);
  1055. $minutenew = $minutenew >= 0 && $minutenew < 60 ? $minutenew : '';
  1056. }
  1057. $efile = explode(':', $_GET['filenamenew']);
  1058. $pluginid = '';
  1059. if(count($efile) > 1 && ispluginkey($efile[0])) {
  1060. $pluginid = $efile[0];
  1061. $_GET['filenamenew'] = $efile[1];
  1062. }
  1063. if(!$pluginid) {
  1064. if(preg_match("/[\\\\\/\:\*\?\"\<\>\|]+/", $_GET['filenamenew'])) {
  1065. cpmsg('crons_filename_illegal', '', 'error');
  1066. } elseif(!is_readable(DISCUZ_ROOT.($cronfile = "./source/include/cron/{$_GET['filenamenew']}"))) {
  1067. cpmsg('crons_filename_invalid', '', 'error', array('cronfile' => $cronfile));
  1068. } elseif($_GET['weekdaynew'] == -1 && $daynew == -1 && $_GET['hournew'] == -1 && $minutenew === '') {
  1069. cpmsg('crons_time_invalid', '', 'error');
  1070. }
  1071. } else {
  1072. if(preg_match("/[\\\\\/\:\*\?\"\<\>\|]+/", $_GET['filenamenew'])) {
  1073. cpmsg('crons_filename_illegal', '', 'error');
  1074. } elseif(!is_readable(DISCUZ_ROOT.($cronfile = "./source/plugin/$pluginid/cron/{$_GET['filenamenew']}"))) {
  1075. cpmsg('crons_filename_invalid', '', 'error', array('cronfile' => $cronfile));
  1076. } elseif($_GET['weekdaynew'] == -1 && $daynew == -1 && $_GET['hournew'] == -1 && $minutenew === '') {
  1077. cpmsg('crons_time_invalid', '', 'error');
  1078. }
  1079. $_GET['filenamenew'] = $pluginid.':'.$_GET['filenamenew'];
  1080. }
  1081. DB::update('common_cron', array(
  1082. 'weekday' => $_GET['weekdaynew'],
  1083. 'day' => $daynew,
  1084. 'hour' => $_GET['hournew'],
  1085. 'minute' => $minutenew,
  1086. 'filename' => trim($_GET['filenamenew']),
  1087. ), "cronid='$cronid'");
  1088. discuz_cron::run($cronid);
  1089. cpmsg('crons_succeed', 'action=misc&operation=cron', 'succeed');
  1090. }
  1091. } else {
  1092. $efile = explode(':', $cron['filename']);
  1093. if(count($efile) > 1 && ispluginkey($efile[0])) {
  1094. $cronfile = DISCUZ_ROOT.'./source/plugin/'.$efile[0].'/cron/'.$efile[1];
  1095. } else {
  1096. $cronfile = DISCUZ_ROOT."./source/include/cron/$cron[filename]";
  1097. }
  1098. if(!file_exists($cronfile)) {
  1099. cpmsg('crons_run_invalid', '', 'error', array('cronfile' => $cronfile));
  1100. } else {
  1101. discuz_cron::run($cron['cronid']);
  1102. cpmsg('crons_run_succeed', 'action=misc&operation=cron', 'succeed');
  1103. }
  1104. }
  1105. }
  1106. } elseif($operation == 'focus') {
  1107. require_once libfile('function/post');
  1108. $focus = C::t('common_setting')->fetch('focus', true);
  1109. $focus_position_array = array(
  1110. array('portal', cplang('misc_focus_position_portal')),
  1111. array('home', cplang('misc_focus_position_home')),
  1112. array('member', cplang('misc_focus_position_member')),
  1113. array('forum', cplang('misc_focus_position_forum')),
  1114. array('group', cplang('misc_focus_position_group')),
  1115. array('search', cplang('misc_focus_position_search')),
  1116. array('userapp', cplang('misc_focus_position_userapp')),
  1117. );
  1118. if(!$do) {
  1119. if(!submitcheck('focussubmit')) {
  1120. shownav('extended', 'misc_focus');
  1121. showsubmenu('misc_focus', array(
  1122. array('config', 'misc&operation=focus&do=config', 0),
  1123. array('admin', 'misc&operation=focus', 1),
  1124. array('add', 'misc&operation=focus&do=add')
  1125. ));
  1126. showtips('misc_focus_tips');
  1127. showformheader('misc&operation=focus');
  1128. showtableheader('admin', 'fixpadding');
  1129. showsubtitle(array('', 'subject', 'available', ''));
  1130. if(is_array($focus['data'])) {
  1131. foreach($focus['data'] as $k => $v) {
  1132. showtablerow('', array('class="td25"','', 'class="td25"', 'class="td25"'), array(
  1133. "<input type=\"checkbox\" class=\"checkbox\" name=\"delete[]\" value=\"$k\">",
  1134. '<a href="'.$v['url'].'" target="_blank">'.$v[subject].'</a>',
  1135. "<input type=\"checkbox\" class=\"checkbox\" name=\"available[$k]\" value=\"1\" ".($v['available'] ? 'checked' : '').">",
  1136. "<a href=\"".ADMINSCRIPT."?action=misc&operation=focus&do=edit&id=$k\" class=\"act\">$lang[edit]</a>",
  1137. ));
  1138. }
  1139. }
  1140. showsubmit('focussubmit', 'submit', 'del');
  1141. showtablefooter();
  1142. showformfooter();
  1143. } else {
  1144. $newfocus = array();
  1145. $newfocus['title'] = $focus['title'];
  1146. $newfocus['data'] = array();
  1147. if(isset($focus['data']) && is_array($focus['data'])) foreach($focus['data'] as $k => $v) {
  1148. if(is_array($_GET['delete']) && in_array($k, $_GET['delete'])) {
  1149. unset($focus['data'][$k]);
  1150. } else {
  1151. $v['available'] = $_GET['available'][$k] ? 1 : 0;
  1152. $newfocus['data'][$k] = $v;
  1153. }
  1154. }
  1155. $newfocus['cookie'] = $focus['cookie'];
  1156. C::t('common_setting')->update('focus', $newfocus);
  1157. updatecache(array('setting', 'focus'));
  1158. cpmsg('focus_update_succeed', 'action=misc&operation=focus', 'succeed');
  1159. }
  1160. } elseif($do == 'add') {
  1161. if(count($focus['data']) >= 10) {
  1162. cpmsg('focus_add_num_limit', 'action=misc&operation=focus', 'error');
  1163. }
  1164. if(!submitcheck('addsubmit')) {
  1165. shownav('extended', 'misc_focus');
  1166. showsubmenu('misc_focus', array(
  1167. array('config', 'misc&operation=focus&do=config', 0),
  1168. array('admin', 'misc&operation=focus', 0),
  1169. array('add', 'misc&operation=focus&do=add', 1)
  1170. ));
  1171. showformheader('misc&operation=focus&do=add');
  1172. showtableheader('misc_focus_handadd', 'fixpadding');
  1173. showsetting('misc_focus_handurl', 'focus_url', '', 'text');
  1174. showsetting('misc_focus_handsubject' , 'focus_subject', '', 'text');
  1175. showsetting('misc_focus_handsummary', 'focus_summary', '', 'textarea');
  1176. showsetting('misc_focus_handimg', 'focus_image', '', 'text');
  1177. showsetting('misc_focus_position', array('focus_position', $focus_position_array), '', 'mcheckbox');
  1178. showsubmit('addsubmit', 'submit', '', '');
  1179. showtablefooter();
  1180. showformfooter();
  1181. } else {
  1182. if($_GET['focus_url'] && $_GET['focus_subject'] && $_GET['focus_summary']) {
  1183. if(is_array($focus['data'])) {
  1184. foreach($focus['data'] as $item) {
  1185. if($item['url'] == $_GET['focus_url']) {
  1186. cpmsg('focus_topic_exists', 'action=misc&operation=focus', 'error');
  1187. }
  1188. }
  1189. }
  1190. $focus['data'][] = array(
  1191. 'url' => $_GET['focus_url'],
  1192. 'available' => '1',
  1193. 'subject' => cutstr($_GET['focus_subject'], 80),
  1194. 'summary' => $_GET['focus_summary'],
  1195. 'image' => $_GET['focus_image'],
  1196. 'aid' => 0,
  1197. 'filename' => basename($_GET['focus_image']),
  1198. 'position' => $_GET['focus_position'],
  1199. );
  1200. C::t('common_setting')->update('focus', $focus);
  1201. updatecache(array('setting', 'focus'));
  1202. } else {
  1203. cpmsg('focus_topic_addrequired', '', 'error');
  1204. }
  1205. cpmsg('focus_add_succeed', 'action=misc&operation=focus', 'succeed');
  1206. }
  1207. } elseif($do == 'edit') {
  1208. $id = intval($_GET['id']);
  1209. if(!$item = $focus['data'][$id]) {
  1210. cpmsg('focus_topic_noexists', 'action=misc&operation=focus', 'error');
  1211. }
  1212. if(!submitcheck('editsubmit')) {
  1213. shownav('extended', 'misc_focus');
  1214. showsubmenu('misc_focus', array(
  1215. array('config', 'misc&operation=focus&do=config', 0),
  1216. array('admin', 'misc&operation=focus', 0),
  1217. array('add', 'misc&operation=focus&do=add', 0)
  1218. ));
  1219. showformheader('misc&operation=focus&do=edit&id='.$id);
  1220. showtableheader('misc_focus_edit', 'fixpadding');
  1221. showsetting('misc_focus_handurl', 'focus_url', $item['url'], 'text');
  1222. showsetting('misc_focus_handsubject' , 'focus_subject', $item['subject'], 'text');
  1223. showsetting('misc_focus_handsummary', 'focus_summary', $item['summary'], 'textarea');
  1224. showsetting('misc_focus_handimg', 'focus_image', $item['image'], 'text');
  1225. showsetting('misc_focus_position', array('focus_position', $focus_position_array), $item['position'], 'mcheckbox');
  1226. showsubmit('editsubmit', 'submit');
  1227. showtablefooter();
  1228. showformfooter();
  1229. } else {
  1230. if($_GET['focus_url'] && $_GET['focus_subject'] && $_GET['focus_summary']) {
  1231. if($item['type'] == 'thread') {
  1232. $_GET['focus_url'] = $item['url'];
  1233. } else {
  1234. $focus_filename = basename($_GET['focus_image']);
  1235. }
  1236. $item = array(
  1237. 'url' => $_GET['focus_url'],
  1238. 'tid' => $item['tid'],
  1239. 'available' => '1',
  1240. 'subject' => cutstr($_GET['focus_subject'], 80),
  1241. 'summary' => $_GET['focus_summary'],
  1242. 'image' => $_GET['focus_image'],
  1243. 'aid' => 0,
  1244. 'filename' => $focus_filename,
  1245. 'position' => $_GET['focus_position'],
  1246. );
  1247. $focus['data'][$id] = $item;
  1248. C::t('common_setting')->update('focus', $focus);
  1249. updatecache(array('setting', 'focus'));
  1250. }
  1251. cpmsg('focus_edit_succeed', 'action=misc&operation=focus', 'succeed');
  1252. }
  1253. } elseif($do == 'config') {
  1254. if(!submitcheck('confsubmit')) {
  1255. shownav('extended', 'misc_focus');
  1256. showsubmenu('misc_focus', array(
  1257. array('config', 'misc&operation=focus&do=config', 1),
  1258. array('admin', 'misc&operation=focus', 0),
  1259. array('add', 'misc&operation=focus&do=add', 0)
  1260. ));
  1261. showformheader('misc&operation=focus&do=config');
  1262. showtableheader('config', 'fixpadding');
  1263. showsetting('misc_focus_area_title', 'focus_title', empty($focus['title']) ? cplang('misc_focus') : $focus['title'], 'text');
  1264. showsetting('misc_focus_area_cookie', 'focus_cookie', empty($focus['cookie']) ? 0 : $focus['cookie'], 'text');
  1265. showsubmit('confsubmit', 'submit');
  1266. showtablefooter();
  1267. showformfooter();
  1268. } else {
  1269. $focus['title'] = trim($_GET['focus_title']);
  1270. $focus['title'] = empty($focus['title']) ? cplang('misc_focus') : $focus['title'];
  1271. $focus['cookie'] = trim(intval($_GET['focus_cookie']));
  1272. $focus['cookie'] = empty($focus['cookie']) ? 0 : $focus['cookie'];
  1273. C::t('common_setting')->update('focus', $focus);
  1274. updatecache(array('setting', 'focus'));
  1275. cpmsg('focus_conf_succeed', 'action=misc&operation=focus&do=config', 'succeed');
  1276. }
  1277. }
  1278. } elseif($operation == 'checkstat') {
  1279. if($statid && $statkey) {
  1280. $q = "statid=$statid&statkey=$statkey";
  1281. $q=rawurlencode(base64_encode($q));
  1282. $url = 'http://stat.discuz.com/stat_ins.php?action=checkstat&q='.$q;
  1283. $key = dfsockopen($url);
  1284. $newstatdisable = $key == $statkey ? 0 : 1;
  1285. if($newstatdisable != $statdisable) {
  1286. C::t('common_setting')->update('statdisable', $newstatdisable);
  1287. require_once libfile('function/cache');
  1288. updatecache('setting');
  1289. }
  1290. }
  1291. } elseif($operation == 'custommenu') {
  1292. if(!$do) {
  1293. if(!submitcheck('optionsubmit')) {
  1294. $mpp = 10;
  1295. $startlimit = ($page - 1) * $mpp;
  1296. $num = C::t('common_admincp_cmenu')->count_by_uid($_G['uid']);
  1297. $multipage = multi($num, $mpp, $page, ADMINSCRIPT.'?action=misc&operation=custommenu');
  1298. $optionlist = $ajaxoptionlist = '';
  1299. foreach(C::t('common_admincp_cmenu')->fetch_all_by_uid($_G['uid'], $startlimit, $mpp) as $custom) {
  1300. $custom['url'] = rawurldecode($custom['url']);
  1301. $optionlist .= showtablerow('', array('class="td25"', 'class="td28"', '', 'class="td26"'), array(
  1302. "<input type=\"checkbox\" class=\"checkbox\" name=\"delete[]\" value=\"$custom[id]\">",
  1303. "<input type=\"text\" class=\"txt\" size=\"3\" name=\"displayordernew[$custom[id]]\" value=\"$custom[displayorder]\">",
  1304. "<input type=\"text\" class=\"txt\" size=\"25\" name=\"titlenew[$custom[id]]\" value=\"".cplang($custom['title'])."\"><input type=\"hidden\" name=\"langnew[$custom[id]]\" value=\"$custom[title]\">",
  1305. "<input type=\"text\" class=\"txt\" size=\"40\" name=\"urlnew[$custom[id]]\" value=\"$custom[url]\">"
  1306. ), TRUE);
  1307. $ajaxoptionlist .= '<li><a href="'.$custom['url'].'" target="'.(substr(rawurldecode($custom['url']), 0, 17) == ADMINSCRIPT.'?action=' ? 'main' : '_blank').'">'.cplang($custom['title']).'</a></li>';
  1308. }
  1309. echo <<<EOT
  1310. <script type="text/JavaScript">
  1311. var rowtypedata = [
  1312. [
  1313. [1,'', 'td25'],
  1314. [1,'<input type="text" class="txt" name="newdisplayorder[]" size="3">', 'td28'],
  1315. [1,'<input type="text" class="txt" name="newtitle[]" size="25">'],
  1316. [1,'<input type="text" class="txt" name="newurl[]" size="40">', 'td26']
  1317. ]
  1318. ];
  1319. </script>
  1320. EOT;
  1321. shownav('tools', 'nav_custommenu');
  1322. showsubmenu('nav_custommenu');
  1323. showformheader('misc&operation=custommenu');
  1324. showtableheader();
  1325. showsubtitle(array('', 'display_order', 'name', 'URL'));
  1326. echo $optionlist;
  1327. echo '<tr><td></td><td colspan="3"><div><a href="###" onclick="addrow(this, 0)" class="addtr">'.$lang['custommenu_add'].'</a></div></td></tr>';
  1328. showsubmit('optionsubmit', 'submit', 'del', '', $multipage);
  1329. showtablefooter();
  1330. showformfooter();
  1331. } else {
  1332. if($ids = dimplode($_GET['delete'])) {
  1333. C::t('common_admincp_cmenu')->delete($_GET['delete'], $_G['uid']);
  1334. }
  1335. if(is_array($_GET['titlenew'])) {
  1336. foreach($_GET['titlenew'] as $id => $title) {
  1337. $_GET['urlnew'][$id] = rawurlencode($_GET['urlnew'][$id]);
  1338. $title = dhtmlspecialchars($_GET['langnew'][$id] && lang($_GET['langnew'][$id], false) ? $_GET['langnew'][$id] : $title);
  1339. $ordernew = intval($_GET['displayordernew'][$id]);
  1340. C::t('common_admincp_cmenu')->update($id, array('title' => $title, 'displayorder' => $ordernew, 'url' => dhtmlspecialchars($_GET['urlnew'][$id])));
  1341. }
  1342. }
  1343. if(is_array($_GET['newtitle'])) {
  1344. foreach($_GET['newtitle'] as $k => $v) {
  1345. $_GET['urlnew'][$k] = rawurlencode($_GET['urlnew'][$k]);
  1346. C::t('common_admincp_cmenu')->insert(array(
  1347. 'title' => dhtmlspecialchars($v),
  1348. 'displayorder' => intval($_GET['newdisplayorder'][$k]),
  1349. 'url' => dhtmlspecialchars($_GET['newurl'][$k]),
  1350. 'sort' => 1,
  1351. 'uid' => $_G['uid'],
  1352. ));
  1353. }
  1354. }
  1355. updatemenu('index');
  1356. cpmsg('custommenu_edit_succeed', 'action=misc&operation=custommenu', 'succeed');
  1357. }
  1358. } elseif($do == 'add') {
  1359. if($_GET['title'] && $_GET['url']) {
  1360. admincustom($_GET['title'], dhtmlspecialchars($_GET['url']), 1);
  1361. updatemenu('index');
  1362. cpmsg('custommenu_add_succeed', rawurldecode($_GET['url']), 'succeed', array('title' => cplang($_GET['title'])));
  1363. } else {
  1364. cpmsg('parameters_error', '', 'error');
  1365. }
  1366. }
  1367. }
  1368. ?>