PageRenderTime 60ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/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

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

  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: 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]))

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