admincp_medals.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  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_medals.php 31634 2012-09-17 06:43:39Z monkey $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. cpheader();
  12. if(!$operation) {
  13. if(!submitcheck('medalsubmit')) {
  14. shownav('extended', 'nav_medals', 'admin');
  15. showsubmenu('nav_medals', array(
  16. array('admin', 'medals', 1),
  17. array('nav_medals_confer', 'members&operation=confermedal', 0),
  18. array('nav_medals_mod', 'medals&operation=mod', 0)
  19. ));
  20. showtips('medals_tips');
  21. showformheader('medals');
  22. showtableheader('medals_list', 'fixpadding');
  23. showsubtitle(array('', 'display_order', 'available', 'name', 'description', 'medals_image', 'medals_type', ''));
  24. ?>
  25. <script type="text/JavaScript">
  26. var rowtypedata = [
  27. [
  28. [1,'', 'td25'],
  29. [1,'<input type="text" class="txt" name="newdisplayorder[]" size="3">', 'td28'],
  30. [1,'', 'td25'],
  31. [1,'<input type="text" class="txt" name="newname[]" size="10">'],
  32. [1,'<input type="text" class="txt" name="newdescription[]" size="30">'],
  33. [1,'<input type="text" class="txt" name="newimage[]" size="20">'],
  34. [1,'', 'td23'],
  35. [1,'', 'td25']
  36. ]
  37. ];
  38. </script>
  39. <?php
  40. foreach(C::t('forum_medal')->fetch_all_data() as $medal) {
  41. $checkavailable = $medal['available'] ? 'checked' : '';
  42. switch($medal['type']) {
  43. case 0:
  44. $medal['type'] = cplang('medals_adminadd');
  45. break;
  46. case 1:
  47. $medal['type'] = $medal['price'] ? cplang('medals_buy') : cplang('medals_register');
  48. break;
  49. case 2:
  50. $medal['type'] = cplang('modals_moderate');
  51. break;
  52. }
  53. showtablerow('', array('class="td25"', 'class="td25"', 'class="td25"', '', '', '', 'class="td23"', 'class="td25"'), array(
  54. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$medal[medalid]\">",
  55. "<input type=\"text\" class=\"txt\" size=\"3\" name=\"displayorder[$medal[medalid]]\" value=\"$medal[displayorder]\">",
  56. "<input class=\"checkbox\" type=\"checkbox\" name=\"available[$medal[medalid]]\" value=\"1\" $checkavailable>",
  57. "<input type=\"text\" class=\"txt\" size=\"10\" name=\"name[$medal[medalid]]\" value=\"$medal[name]\">",
  58. "<input type=\"text\" class=\"txt\" size=\"30\" name=\"description[$medal[medalid]]\" value=\"$medal[description]\">",
  59. "<input type=\"text\" class=\"txt\" size=\"20\" name=\"image[$medal[medalid]]\" value=\"$medal[image]\"><img style=\"vertical-align:middle\" src=\"static/image/common/$medal[image]\">",
  60. $medal[type],
  61. "<a href=\"".ADMINSCRIPT."?action=medals&operation=edit&medalid=$medal[medalid]\" class=\"act\">$lang[detail]</a>"
  62. ));
  63. }
  64. echo '<tr><td></td><td colspan="8"><div><a href="###" onclick="addrow(this, 0)" class="addtr">'.$lang['medals_addnew'].'</a></div></td></tr>';
  65. showsubmit('medalsubmit', 'submit', 'del');
  66. showtablefooter();
  67. showformfooter();
  68. } else {
  69. if(is_array($_GET['delete']) && $_GET['delete']) {
  70. $ids = array();
  71. foreach($_GET['delete'] as $id) {
  72. $ids[] = $id;
  73. }
  74. C::t('forum_medal')->delete($_GET['delete']);
  75. }
  76. if(is_array($_GET['name'])) {
  77. foreach($_GET['name'] as $id => $val) {
  78. $update = array(
  79. 'available' => $_GET['available'][$id],
  80. 'displayorder' => intval($_GET['displayorder'][$id])
  81. );
  82. if($_GET['name'][$id]) {
  83. $update['name'] = dhtmlspecialchars($_GET['name'][$id]);
  84. }
  85. if($_GET['description'][$id]) {
  86. $update['description'] = dhtmlspecialchars($_GET['description'][$id]);
  87. }
  88. if($_GET['image'][$id]) {
  89. $update['image'] = dhtmlspecialchars($_GET['image'][$id]);
  90. }
  91. C::t('forum_medal')->update($id, $update);
  92. }
  93. }
  94. if(is_array($_GET['newname'])) {
  95. foreach($_GET['newname'] as $key => $value) {
  96. if($value != '' && $_GET['newimage'][$key] != '') {
  97. $data = array('name' => dhtmlspecialchars($value),
  98. 'available' => $_GET['newavailable'][$key],
  99. 'image' => $_GET['newimage'][$key],
  100. 'displayorder' => intval($_GET['newdisplayorder'][$key]),
  101. 'description' => dhtmlspecialchars($_GET['newdescription'][$key]),
  102. );
  103. C::t('forum_medal')->insert($data);
  104. }
  105. }
  106. }
  107. updatecache('setting');
  108. updatecache('medals');
  109. cpmsg('medals_succeed', 'action=medals', 'succeed');
  110. }
  111. } elseif($operation == 'mod') {
  112. if(submitcheck('delmedalsubmit')) {
  113. if (is_array($_GET['delete']) && !empty($_GET['delete'])) {
  114. $ids = array();
  115. foreach($_GET['delete'] as $id) {
  116. $ids[] = $id;
  117. }
  118. C::t('forum_medallog')->update($ids, array('type' => 3));
  119. cpmsg('medals_invalidate_succeed', 'action=medals&operation=mod', 'succeed');
  120. } else {
  121. cpmsg('medals_please_input', 'action=medals&operation=mod', 'error');
  122. }
  123. } elseif(submitcheck('modmedalsubmit')) {
  124. if(is_array($_GET['delete']) && !empty($_GET['delete'])) {
  125. $ids = $comma = '';
  126. foreach($_GET['delete'] as $id) {
  127. $ids .= "$comma'$id'";
  128. $comma = ',';
  129. }
  130. $query = DB::query("SELECT me.id, me.uid, me.medalid, me.dateline, me.expiration, mf.medals
  131. FROM ".DB::table('forum_medallog')." me
  132. LEFT JOIN ".DB::table('common_member_field_forum')." mf USING (uid)
  133. WHERE id IN ($ids)");
  134. loadcache('medals');
  135. while($modmedal = DB::fetch($query)) {
  136. $modmedal['medals'] = empty($medalsnew[$modmedal['uid']]) ? $modmedal['medals'] : $medalsnew[$modmedal['uid']];
  137. foreach($modmedal['medals'] = explode("\t", $modmedal['medals']) as $key => $modmedalid) {
  138. list($medalid, $medalexpiration) = explode("|", $modmedalid);
  139. if(isset($_G['cache']['medals'][$medalid]) && (!$medalexpiration || $medalexpiration > TIMESTAMP)) {
  140. $medalsnew[$modmedal['uid']][$key] = $modmedalid;
  141. }
  142. }
  143. $medalstatus = empty($modmedal['expiration']) ? 0 : 1;
  144. $modmedal['expiration'] = $modmedal['expiration'] ? (TIMESTAMP + $modmedal['expiration'] - $modmedal['dateline']) : '';
  145. $medalsnew[$modmedal['uid']][] = $modmedal['medalid'].(empty($modmedal['expiration']) ? '' : '|'.$modmedal['expiration']);
  146. C::t('forum_medallog')->update($modmedal['id'], array('type' => 1, 'status' => $medalstatus, 'expiration' => $modmedal['expiration']));
  147. C::t('common_member_medal')->insert(array('uid' => $modmedal['uid'], 'medalid' => $modmedal['medalid']), 0, 1);
  148. }
  149. foreach ($medalsnew as $key => $medalnew) {
  150. $medalnew = array_unique($medalnew);
  151. $medalnew = implode("\t", $medalnew);
  152. C::t('common_member_field_forum')->update($key, array('medals' => $medalnew));
  153. }
  154. cpmsg('medals_validate_succeed', 'action=medals&operation=mod', 'succeed');
  155. } else {
  156. cpmsg('medals_please_input', 'action=medals&operation=mod', 'error');
  157. }
  158. } else {
  159. $medals = '';
  160. $medallogs = $medalids = $uids = array();
  161. foreach(C::t('forum_medallog')->fetch_all_by_type(2) as $id => $medal) {
  162. $medal['dateline'] = dgmdate($medal['dateline'], 'Y-m-d H:i');
  163. $medal['expiration'] = empty($medal['expiration']) ? $lang['medals_forever'] : dgmdate($medal['expiration'], 'Y-m-d H:i');
  164. $medalids[$medal['medalid']] = $medal['medalid'];
  165. $uids[$medal['uid']] = $medal['uid'];
  166. $medallogs[$id] = $medal;
  167. }
  168. $medalnames = C::t('forum_medal')->fetch_all($medalids);
  169. $medalusers = C::t('common_member')->fetch_all($uids);
  170. foreach($medallogs as $id => $medal) {
  171. $medals .= showtablerow('', '', array(
  172. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$id\">",
  173. "<a href=\"home.php?mod=space&username=".rawurlencode($medalusers[$medal['uid']]['username'])."\" target=\"_blank\">{$medalusers[$medal[uid]][username]}</a>",
  174. $medalnames[$medal['medalid']]['name'],
  175. $medal['dateline'],
  176. $medal['expiration']
  177. ), TRUE);
  178. }
  179. shownav('extended', 'nav_medals', 'nav_medals_mod');
  180. showsubmenu('nav_medals', array(
  181. array('admin', 'medals', 0),
  182. array('nav_medals_confer', 'members&operation=confermedal', 0),
  183. array('nav_medals_mod', 'medals&operation=mod', 1)
  184. ));
  185. showformheader('medals&operation=mod');
  186. showtableheader('medals_mod');
  187. showtablerow('', '', array(
  188. '',
  189. cplang('medals_user'),
  190. cplang('medals_name'),
  191. cplang('medals_date'),
  192. cplang('medals_expr'),
  193. ));
  194. echo $medals;
  195. showsubmit('modmedalsubmit', 'medals_modpass', 'select_all', '<input type="submit" class="btn" value="'.cplang('medals_modnopass').'" name="delmedalsubmit"> ');
  196. showtablefooter();
  197. showformfooter();
  198. }
  199. } elseif($operation == 'edit') {
  200. $medalid = intval($_GET['medalid']);
  201. if(!submitcheck('medaleditsubmit')) {
  202. $medal = C::t('forum_medal')->fetch($medalid);
  203. $medal['permission'] = dunserialize($medal['permission']);
  204. $medal['usergroupallow'] = $medal['permission']['usergroupallow'];
  205. $medal['usergroups'] = (array)$medal['permission']['usergroups'];
  206. $medal['permission'] = $medal['permission'][0];
  207. $credits = array();
  208. $credits[] = array(0, $lang['default']);
  209. foreach($_G['setting']['extcredits'] as $i => $extcredit) {
  210. $credits[] = array($i, $extcredit['title']);
  211. }
  212. $groupselect = array();
  213. foreach(C::t('common_usergroup')->range_orderby_credit() as $group) {
  214. $groupselect[$group['type']] .= '<option value="'.$group['groupid'].'"'.(@in_array($group['groupid'], $medal['usergroups']) ? ' selected' : '').'>'.$group['grouptitle'].'</option>';
  215. }
  216. $usergroups = '<select name="usergroupsnew[]" size="10" multiple="multiple">'.
  217. '<optgroup label="'.$lang['usergroups_member'].'">'.$groupselect['member'].'</optgroup>'.
  218. ($groupselect['special'] ? '<optgroup label="'.$lang['usergroups_special'].'">'.$groupselect['special'].'</optgroup>' : '').
  219. ($groupselect['specialadmin'] ? '<optgroup label="'.$lang['usergroups_specialadmin'].'">'.$groupselect['specialadmin'].'</optgroup>' : '').
  220. '<optgroup label="'.$lang['usergroups_system'].'">'.$groupselect['system'].'</optgroup></select>';
  221. shownav('extended', 'nav_medals', 'admin');
  222. showsubmenu('nav_medals', array(
  223. array('admin', 'medals', 1),
  224. array('nav_medals_confer', 'members&operation=confermedal', 0),
  225. array('nav_medals_mod', 'medals&operation=mod', 0)
  226. ));
  227. showformheader("medals&operation=edit&medalid=$medalid");
  228. showtableheader(cplang('medals_edit').' - '.$medal['name'], 'nobottom');
  229. showsetting('medals_name1', 'namenew', $medal['name'], 'text');
  230. showsetting('medals_img', '', '', '<input type="text" class="txt" size="30" name="imagenew" value="'.$medal['image'].'" ><img src="static/image/common/'.$medal['image'].'">');
  231. showsetting('medals_type1', array('typenew', array(
  232. array(0, $lang['medals_adminadd'], array('creditdiv' => 'none')),
  233. array(1, $lang['medals_apply_auto'], array('creditdiv' => '')),
  234. array(2, $lang['medals_apply_noauto'], array('creditdiv' => 'none'))
  235. )), $medal['type'], 'mradio');
  236. showtagheader('tbody', 'creditdiv', $medal['type'] == 1, 'sub');
  237. showsetting('medals_credit', array('creditnew', $credits), $medal['credit'], 'select');
  238. showsetting('medals_price', 'pricenew', $medal['price'], 'text');
  239. showtagfooter('tbody');
  240. showsetting('medals_usergroups_allow', 'usergroupallow', $medal['usergroupallow'], 'radio', 0, 1);
  241. showsetting('medals_usergroups', '', '', $usergroups);
  242. showtagfooter('tbody');
  243. showsetting('medals_expr1', 'expirationnew', $medal['expiration'], 'text');
  244. showsetting('medals_memo', 'descriptionnew', $medal['description'], 'text');
  245. showtablefooter();
  246. showtableheader('medals_perm', 'notop');
  247. $formulareplace .= '\'<u>'.$lang['setting_credits_formula_digestposts'].'</u>\',\'<u>'.$lang['setting_credits_formula_posts'].'</u>\',\'<u>'.$lang['setting_credits_formula_oltime'].'</u>\',\'<u>'.$lang['setting_credits_formula_pageviews'].'</u>\'';
  248. ?>
  249. <script type="text/JavaScript">
  250. function medalsinsertunit(text, textend) {
  251. insertunit($('formulapermnew'), text, textend);
  252. formulaexp();
  253. }
  254. var formulafind = new Array('digestposts', 'posts', 'threads');
  255. var formulareplace = new Array(<?php echo $formulareplace;?>);
  256. function formulaexp() {
  257. var result = $('formulapermnew').value;
  258. <?php
  259. $extcreditsbtn = '';
  260. for($i = 1; $i <= 8; $i++) {
  261. $extcredittitle = $_G['setting']['extcredits'][$i]['title'] ? $_G['setting']['extcredits'][$i]['title'] : $lang['setting_credits_formula_extcredits'].$i;
  262. echo 'result = result.replace(/extcredits'.$i.'/g, \'<u>'.$extcredittitle.'</u>\');';
  263. $extcreditsbtn .= '<a href="###" onclick="medalsinsertunit(\'extcredits'.$i.'\')">'.$extcredittitle.'</a> &nbsp;';
  264. }
  265. echo 'result = result.replace(/regdate/g, \'<u>'.cplang('forums_edit_perm_formula_regdate').'</u>\');';
  266. echo 'result = result.replace(/regday/g, \'<u>'.cplang('forums_edit_perm_formula_regday').'</u>\');';
  267. echo 'result = result.replace(/regip/g, \'<u>'.cplang('forums_edit_perm_formula_regip').'</u>\');';
  268. echo 'result = result.replace(/lastip/g, \'<u>'.cplang('forums_edit_perm_formula_lastip').'</u>\');';
  269. echo 'result = result.replace(/buyercredit/g, \'<u>'.cplang('forums_edit_perm_formula_buyercredit').'</u>\');';
  270. echo 'result = result.replace(/sellercredit/g, \'<u>'.cplang('forums_edit_perm_formula_sellercredit').'</u>\');';
  271. echo 'result = result.replace(/digestposts/g, \'<u>'.$lang['setting_credits_formula_digestposts'].'</u>\');';
  272. echo 'result = result.replace(/posts/g, \'<u>'.$lang['setting_credits_formula_posts'].'</u>\');';
  273. echo 'result = result.replace(/threads/g, \'<u>'.$lang['setting_credits_formula_threads'].'</u>\');';
  274. echo 'result = result.replace(/oltime/g, \'<u>'.$lang['setting_credits_formula_oltime'].'</u>\');';
  275. echo 'result = result.replace(/and/g, \'&nbsp;&nbsp;'.$lang['setting_credits_formulaperm_and'].'&nbsp;&nbsp;\');';
  276. echo 'result = result.replace(/or/g, \'&nbsp;&nbsp;'.$lang['setting_credits_formulaperm_or'].'&nbsp;&nbsp;\');';
  277. echo 'result = result.replace(/>=/g, \'&ge;\');';
  278. echo 'result = result.replace(/<=/g, \'&le;\');';
  279. ?>
  280. $('formulapermexp').innerHTML = result;
  281. }
  282. </script>
  283. <tr><td colspan="2"><div class="extcredits">
  284. <?php echo $extcreditsbtn;?>
  285. <a href="###" onclick="medalsinsertunit(' regdate ')">&nbsp;<?php echo cplang('forums_edit_perm_formula_regdate')?>&nbsp;</a>&nbsp;
  286. <a href="###" onclick="medalsinsertunit(' regday ')">&nbsp;<?php echo cplang('forums_edit_perm_formula_regday')?>&nbsp;</a>&nbsp;
  287. <a href="###" onclick="medalsinsertunit(' regip ')">&nbsp;<?php echo cplang('forums_edit_perm_formula_regip')?>&nbsp;</a>&nbsp;
  288. <a href="###" onclick="medalsinsertunit(' lastip ')">&nbsp;<?php echo cplang('forums_edit_perm_formula_lastip')?>&nbsp;</a>&nbsp;
  289. <a href="###" onclick="medalsinsertunit(' buyercredit ')">&nbsp;<?php echo cplang('forums_edit_perm_formula_buyercredit')?>&nbsp;</a>&nbsp;
  290. <a href="###" onclick="medalsinsertunit(' sellercredit ')">&nbsp;<?php echo cplang('forums_edit_perm_formula_sellercredit')?>&nbsp;</a>&nbsp;
  291. <a href="###" onclick="medalsinsertunit(' digestposts ')"><?php echo $lang['setting_credits_formula_digestposts'];?></a>&nbsp;
  292. <a href="###" onclick="medalsinsertunit(' posts ')"><?php echo $lang['setting_credits_formula_posts'];?></a>&nbsp;
  293. <a href="###" onclick="medalsinsertunit(' threads ')"><?php echo $lang['setting_credits_formula_threads'];?></a>&nbsp;
  294. <a href="###" onclick="medalsinsertunit(' oltime ')"><?php echo $lang['setting_credits_formula_oltime'];?></a>&nbsp;
  295. <a href="###" onclick="medalsinsertunit(' + ')">&nbsp;+&nbsp;</a>&nbsp;
  296. <a href="###" onclick="medalsinsertunit(' - ')">&nbsp;-&nbsp;</a>&nbsp;
  297. <a href="###" onclick="medalsinsertunit(' * ')">&nbsp;*&nbsp;</a>&nbsp;
  298. <a href="###" onclick="medalsinsertunit(' / ')">&nbsp;/&nbsp;</a>&nbsp;
  299. <a href="###" onclick="medalsinsertunit(' > ')">&nbsp;>&nbsp;</a>&nbsp;
  300. <a href="###" onclick="medalsinsertunit(' >= ')">&nbsp;>=&nbsp;</a>&nbsp;
  301. <a href="###" onclick="medalsinsertunit(' < ')">&nbsp;<&nbsp;</a>&nbsp;
  302. <a href="###" onclick="medalsinsertunit(' <= ')">&nbsp;<=&nbsp;</a>&nbsp;
  303. <a href="###" onclick="medalsinsertunit(' == ')">&nbsp;=&nbsp;</a>&nbsp;
  304. <a href="###" onclick="medalsinsertunit(' (', ') ')">&nbsp;(&nbsp;)&nbsp;</a>&nbsp;
  305. <a href="###" onclick="medalsinsertunit(' and ')">&nbsp;<?php echo $lang['setting_credits_formulaperm_and'];?>&nbsp;</a>&nbsp;
  306. <a href="###" onclick="medalsinsertunit(' or ')">&nbsp;<?php echo $lang['setting_credits_formulaperm_or'];?>&nbsp;</a>&nbsp;<br />
  307. </div><div id="formulapermexp" class="marginbot diffcolor2"><?php echo $formulapermexp;?></div>
  308. <textarea name="formulapermnew" id="formulapermnew" style="width: 80%" rows="3" onkeyup="formulaexp()" onkeydown="textareakey(this, event)"><?php echo dhtmlspecialchars($medal['permission']);?></textarea>
  309. <br /><span class="smalltxt"><?php echo $lang['medals_permformula'];?></span>
  310. <br /><?php echo $lang['creditwizard_current_formula_notice'];?>
  311. <script type="text/JavaScript">formulaexp()</script>
  312. </td></tr>
  313. <?php
  314. showsubmit('medaleditsubmit');
  315. showtablefooter();
  316. showformfooter();
  317. } else {
  318. if(!checkformulaperm($_GET['formulapermnew'])) {
  319. cpmsg('forums_formulaperm_error', '', 'error');
  320. }
  321. $formulapermary[0] = $_GET['formulapermnew'];
  322. $formulapermary[1] = preg_replace(
  323. array("/(digestposts|posts|threads|oltime|extcredits[1-8])/", "/(regdate|regday|regip|lastip|buyercredit|sellercredit|field\d+)/"),
  324. array("getuserprofile('\\1')", "\$memberformula['\\1']"),
  325. $_GET['formulapermnew']);
  326. $formulapermary['usergroupallow'] = $_GET['usergroupallow'];
  327. $formulapermary['usergroups'] = (array)$_GET['usergroupsnew'];
  328. $formulapermnew = serialize($formulapermary);
  329. $update = array(
  330. 'type' => $_GET['typenew'],
  331. 'description' => dhtmlspecialchars($_GET['descriptionnew']),
  332. 'expiration' => intval($_GET['expirationnew']),
  333. 'permission' => $formulapermnew,
  334. 'image' => $_GET['imagenew'],
  335. 'credit' => $_GET['creditnew'],
  336. 'price' => $_GET['pricenew'],
  337. );
  338. if($_GET['namenew']) {
  339. $update['name'] = dhtmlspecialchars($_GET['namenew']);
  340. }
  341. C::t('forum_medal')->update($medalid, $update);
  342. updatecache('medals');
  343. cpmsg('medals_succeed', 'action=medals&do=editmedals', 'succeed');
  344. }
  345. }
  346. ?>