PageRenderTime 57ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/source/admincp/admincp_logs.php

https://github.com/kuaileshike/upload
PHP | 1106 lines | 989 code | 111 blank | 6 comment | 168 complexity | a4d72a098e89d98b3b9a1bf892ff7fe4 MD5 | raw 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_logs.php 29236 2012-03-30 05:34:47Z chenmengshu $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. cpheader();
  12. $lpp = empty($_GET['lpp']) ? 20 : $_GET['lpp'];
  13. $checklpp = array();
  14. $checklpp[$lpp] = 'selected="selected"';
  15. $extrainput = '';
  16. $operation = in_array($operation, array('illegal', 'rate', 'credit', 'mods', 'medal', 'ban', 'cp', 'magic', 'error', 'invite', 'payment', 'warn', 'crime', 'sendmail')) ? $operation : 'illegal';
  17. $logdir = DISCUZ_ROOT.'./data/log/';
  18. $logfiles = get_log_files($logdir, $operation.($operation == 'sendmail' ? '' : 'log'));
  19. $logs = array();
  20. $lastkey = count($logfiles) - 1;
  21. $lastlog = $logfiles[$lastkey];
  22. krsort($logfiles);
  23. if($logfiles) {
  24. if(!isset($_GET['day']) || strexists($_GET['day'], '_')) {
  25. list($_GET['day'], $_GET['num']) = explode('_', $_GET['day']);
  26. $logs = file(($_GET['day'] ? $logdir.$_GET['day'].'_'.$operation.($operation == 'sendmail' ? '' : 'log').($_GET['num'] ? '_'.$_GET['num'] : '').'.php' : $logdir.$lastlog));
  27. } else {
  28. $logs = file($logdir.$_GET['day'].'_'.$operation.($operation == 'sendmail' ? '' : 'log').'.php');
  29. }
  30. }
  31. $start = ($page - 1) * $lpp;
  32. $logs = array_reverse($logs);
  33. if(empty($_GET['keyword']) && empty($_GET['filteract'])) {
  34. $num = count($logs);
  35. $multipage = multi($num, $lpp, $page, ADMINSCRIPT."?action=logs&operation=$operation&lpp=$lpp".(!empty($_GET['day']) ? '&day='.$_GET['day'] : ''), 0, 3);
  36. $logs = array_slice($logs, $start, $lpp);
  37. } else {
  38. foreach($logs as $key => $value) {
  39. if(!empty($_GET['filteract'])) {
  40. $log = explode("\t", $value);
  41. preg_match("/operation=(.[^;]*)/i", $log[6], $operationInfo);
  42. $logExplain = $operationInfo[1] ? rtrim($log[5]).'_'.$operationInfo[1] : rtrim($log[5]) ;
  43. $logPostion = strpos($logExplain, $_GET['filteract']);
  44. if($logPostion === false || $logPostion != 0) {
  45. unset($logs[$key]);
  46. }
  47. }
  48. if(!empty($_GET['keyword']) && strpos($value, $_GET['keyword']) === FALSE) {
  49. unset($logs[$key]);
  50. }
  51. }
  52. $multipage = '';
  53. }
  54. $usergroup = array();
  55. if(in_array($operation, array('rate', 'mods', 'ban', 'cp'))) {
  56. foreach(C::t('common_usergroup')->range() as $group) {
  57. $usergroup[$group['groupid']] = $group['grouptitle'];
  58. }
  59. }
  60. shownav('tools', 'nav_logs', 'nav_logs_'.$operation);
  61. if($logfiles) {
  62. $sel = '<select class="right" style="margin-right:20px;" onchange="location.href=\''.ADMINSCRIPT.'?action=logs&operation='.$operation.'&keyword='.$_GET['keyword'].'&day=\'+this.value">';
  63. foreach($logfiles as $logfile) {
  64. list($date, $logtype, $num) = explode('_', $logfile);
  65. if(is_numeric($date)) {
  66. $num = intval($num);
  67. $sel .= '<option value="'.$date.'_'.$num.'"'.($date.'_'.$num == $_GET['day'].'_'.intval($_GET['num']) ? ' selected="selected"' : '').'>'.($num ? '&nbsp;&nbsp;'.$date.' '.cplang('logs_archive').' '.$num : $date).'</option>';
  68. } else {
  69. list($logtype) = explode('.', $logtype);
  70. $sel .= '<option value="'.$logtype.'"'.($logtype == $_GET['day'] ? ' selected="selected"' : '').'>'.$logtype.'</option>';
  71. }
  72. }
  73. $sel .= '</select>';
  74. } else {
  75. $sel = '';
  76. }
  77. showsubmenu('nav_logs', array(
  78. array(array('menu' => 'nav_logs_member', 'submenu' => array(
  79. array('nav_logs_illegal', 'logs&operation=illegal'),
  80. array('nav_logs_ban', 'logs&operation=ban'),
  81. array('nav_logs_mods', 'logs&operation=mods'),
  82. )), '', in_array($operation, array('illegal', 'ban', 'mods'))),
  83. array(array('menu' => 'nav_logs_system', 'submenu' => array(
  84. array('nav_logs_cp', 'logs&operation=cp'),
  85. array('nav_logs_error', 'logs&operation=error'),
  86. array('nav_logs_sendmail', 'logs&operation=sendmail'),
  87. )), '', in_array($operation, array('cp', 'error'))),
  88. array(array('menu' => 'nav_logs_extended', 'submenu' => array(
  89. array('nav_logs_rate', 'logs&operation=rate'),
  90. array('nav_logs_warn', 'logs&operation=warn'),
  91. array('nav_logs_credit', 'logs&operation=credit'),
  92. array('nav_logs_magic', 'logs&operation=magic'),
  93. array('nav_logs_medal', 'logs&operation=medal'),
  94. array('nav_logs_invite', 'logs&operation=invite'),
  95. array('nav_logs_payment', 'logs&operation=payment'),
  96. )), '', in_array($operation, array('rate', 'credit', 'magic', 'medal', 'invite', 'payment'))),
  97. array(array('menu' => 'nav_logs_crime', 'submenu' => array(
  98. array('nav_logs_crime_delpost', 'logs&operation=crime&crimeactions=crime_delpost'),
  99. array('nav_logs_crime_warnpost', 'logs&operation=crime&crimeactions=crime_warnpost'),
  100. array('nav_logs_crime_banpost', 'logs&operation=crime&crimeactions=crime_banpost'),
  101. array('nav_logs_crime_banspeak', 'logs&operation=crime&crimeactions=crime_banspeak'),
  102. array('nav_logs_crime_banvisit', 'logs&operation=crime&crimeactions=crime_banvisit'),
  103. array('nav_logs_crime_banstatus', 'logs&operation=crime&crimeactions=crime_banstatus'),
  104. array('nav_logs_crime_avatar', 'logs&operation=crime&crimeactions=crime_avatar'),
  105. array('nav_logs_crime_sightml', 'logs&operation=crime&crimeactions=crime_sightml'),
  106. array('nav_logs_crime_customstatus', 'logs&operation=crime&crimeactions=crime_customstatus'),
  107. )), '', in_array($operation, array('crime'))),
  108. ), $sel);
  109. if($operation == 'illegal') {
  110. showtips('logs_tips_illegal');
  111. } elseif($operation == 'ban') {
  112. showtips('logs_tips_ban');
  113. }
  114. if($operation == 'crime') {
  115. showformheader("logs", null, null, 'get');
  116. } else {
  117. showformheader("logs&operation=$operation");
  118. }
  119. showtableheader('', 'fixpadding" style="table-layout: fixed');
  120. $filters = '';
  121. if($operation == 'illegal') {
  122. showtablerow('class="header"', array('class="td23"','class="td24"','class="td23"','class="td23"','class="td23"'), array(
  123. cplang('time'),
  124. cplang('ip'),
  125. cplang('logs_passwd_username'),
  126. cplang('logs_passwd_password'),
  127. cplang('logs_passwd_security')
  128. ));
  129. foreach($logs as $logrow) {
  130. $log = explode("\t", $logrow);
  131. if(empty($log[1])) {
  132. continue;
  133. }
  134. $log[1] = dgmdate($log[1], 'y-n-j H:i');
  135. if(strtolower($log[2]) == strtolower($_G['member']['username'])) {
  136. $log[2] = "<b>$log[2]</b>";
  137. }
  138. $log[5] = $_G['group']['allowviewip'] ? $log[5] : '-';
  139. showtablerow('', array('class="smallefont"', 'class="smallefont"', 'class="bold"', 'class="smallefont"', 'class="smallefont"'), array(
  140. $log[1],
  141. $log[5],
  142. $log[2],
  143. $log[3],
  144. $log[4]
  145. ));
  146. }
  147. } elseif($operation == 'sendmail') {
  148. showtablerow('class="header"', array('class="td23"','class="td23"','class="td23"'), array(
  149. cplang('time'),
  150. cplang('username'),
  151. cplang('email'),
  152. ));
  153. $logarr = $logemail = array();
  154. foreach($logs as $logrow) {
  155. $log = explode("\t", $logrow);
  156. if(empty($log[1])) {
  157. continue;
  158. }
  159. $log[5] = trim(str_replace('sendmail failed.', '', $log[5]));
  160. if(!$log[5]) {
  161. continue;
  162. }
  163. $logemail[] = $log[5];
  164. $logarr[] = $log;
  165. }
  166. $members = C::t('common_member')->fetch_all_by_email($logemail);
  167. foreach($logarr as $log) {
  168. $log[6] = $members[$log[5]]['username'];
  169. if(strtolower($log[6]) == strtolower($_G['member']['username'])) {
  170. $log[6] = "<b>$log[6]</b>";
  171. }
  172. showtablerow('', array('class="smallefont"', 'class="bold"', 'class="smallefont"'), array(
  173. $log[1],
  174. '<a href="home.php?mod=space&username='.$log[6].'" target="_blank">'.$log[6].'</a>',
  175. $log[5]
  176. ));
  177. }
  178. } elseif($operation == 'rate') {
  179. showtablerow('class="header"', array('class="td23"','class="td23"','class="td23"','class="td23"','class="td23"','class="td24"'), array(
  180. cplang('username'),
  181. cplang('usergroup'),
  182. cplang('time'),
  183. cplang('logs_rating_username'),
  184. cplang('logs_rating_rating'),
  185. cplang('subject'),
  186. cplang('reason'),
  187. ));
  188. foreach($logs as $logrow) {
  189. $log = explode("\t", $logrow);
  190. if(empty($log[1])) {
  191. continue;
  192. }
  193. $log[1] = dgmdate($log[1], 'y-n-j H:i');
  194. $log[2] = "<a href=\"home.php?mod=space&username=".rawurlencode($log[2])."\" target=\"_blank\">$log[2]</a>";
  195. $log[3] = $usergroup[$log[3]];
  196. if($log[4] == $_G['member']['username']) {
  197. $log[4] = "<b>$log[4]</b>";
  198. }
  199. $log[4] = "<a href=\"home.php?mod=space&username=".rawurlencode($log[4])."\" target=\"_blank\">$log[4]</a>";
  200. $log[6] = $_G['setting']['extcredits'][$log[5]]['title'].' '.($log[6] < 0 ? "<b>$log[6]</b>" : "+$log[6]").' '.$_G['setting']['extcredits'][$log[5]]['unit'];
  201. $log[7] = $log[7] ? "<a href=\"./forum.php?mod=viewthread&tid=$log[7]\" target=\"_blank\" title=\"$log[8]\">".cutstr($log[8], 20)."</a>" : "<i>$lang[logs_rating_manual]</i>";
  202. showtablerow('', array('class="bold"'), array(
  203. $log[2],
  204. $log[3],
  205. $log[1],
  206. $log[4],
  207. (trim($log[10]) == 'D' ? $lang['logs_rating_delete'] : '').$log[6],
  208. $log[7],
  209. $log[9]
  210. ));
  211. }
  212. } elseif($operation == 'warn') {
  213. showtablerow('class="header"', array('class="td28"','class="td23"','class="td23"','class="td23"'), array(
  214. cplang('warn_info'),
  215. cplang('members_warn'),
  216. cplang('members_access_adminuser'),
  217. cplang('members_access_dateline'),
  218. ));
  219. $warncount = C::t('forum_warning')->count_by_author($_GET['keyword'] ? explode(',', $_GET['keyword']) : null);
  220. C::t('forum_warning')->fetch_all_by_author(($_GET['keyword'] ? explode(',', $_GET['keyword']) : null), $start, $lpp);
  221. foreach(C::t('forum_warning')->fetch_all_by_author(($_GET['keyword'] ? explode(',', $_GET['keyword']) : null), $start, $lpp) as $row) {
  222. showtablerow('', array('class="td28"', 'class=""', '', 'class="td26"', ''), array(
  223. '<b>'.cplang('warn_url').'</b><a href="forum.php?mod=redirect&goto=findpost&pid='.$row['pid'].'" target="_blank">'.$_G['siteurl'].'forum.php?mod=redirect&goto=findpost&pid='.$row['pid'].'</a><br><b>'.cplang('warn_reason').'</b>'.$row['reason'],
  224. '<a href="home.php?mod=space&uid='.$row['authorid'].'">'.$row['author'].'</a>',
  225. '<a href="home.php?mod=space&uid='.$row['operatorid'].'">'.$row['operator'].'</a>',
  226. dgmdate($row['dateline'], 'y-m-d H:i'),
  227. ));
  228. }
  229. $multipage = multi($warncount, $lpp, $page, ADMINSCRIPT."?action=logs&operation=$operation&keyword=".rawurlencode($_GET['keyword'])."&lpp=$lpp", 0, 3);
  230. } elseif($operation == 'crime') {
  231. include_once libfile('function/member');
  232. if($_GET['crimeactions']) {
  233. $_GET['crimeaction'] = array_search($_GET['crimeactions'], crime('actions'));
  234. }
  235. $operator = trim($_GET['operator']);
  236. $crimeaction = intval($_GET['crimeaction']);
  237. $username = trim($_GET['username']);
  238. $starttime = trim($_GET['starttime']);
  239. $endtime = trim($_GET['endtime']);
  240. $keyword = trim($_GET['keyword']);
  241. $_GET['crimesearch'] = 1;
  242. foreach(crime('actions') as $key => $value) {
  243. $crimeactionselect .= '<option value="'.$key.'"'.($key == $crimeaction ? ' selected' : '').'>'.$lang[$value].'</option>';
  244. }
  245. print <<<SEARCH
  246. <script src="static/js/calendar.js"></script>
  247. <input type="hidden" name="operation" value="$operation">
  248. <input type="hidden" name="action" value="$action">
  249. <table cellspacing="3" cellpadding="3">
  250. <tr>
  251. <th>$lang[crime_operator]: </th><td width="160"><input type="text" class="txt" name="operator" value="$operator" /></td>
  252. <th>$lang[crime_action]: </th><td><select name="crimeaction">$crimeactionselect</select></td>
  253. </tr>
  254. <tr>
  255. <th>$lang[crime_user]: </th><td><input type="text" class="txt" name="username" value="$username" /></td>
  256. <th>$lang[startendtime]: </th><td><input type="text" onclick="showcalendar(event, this)" style="width: 80px; margin-right: 5px;" value="$starttime" name="starttime" class="txt" /> -- <input type="text" onclick="showcalendar(event, this)" style="width: 80px; margin-left: 5px;" value="$endtime" name="endtime" class="txt" /></td>
  257. </tr>
  258. <tr>
  259. <th>$lang[keywords]: </th><td><input type="text" class="txt" name="keyword" value="$keyword" /></td>
  260. <th><input type="submit" name="crimesearch" value="$lang[search]" class="btn" /></th><td></td>
  261. </tr>
  262. </table>
  263. SEARCH;
  264. if(submitcheck('crimesearch', 1)) {
  265. include_once libfile('function/member');
  266. list($count, $clist) = crime('search', $crimeaction, $username, $operator, $startime, $endtime, $keyword, $start, $lpp);
  267. showtablefooter();
  268. showtableheader($lang[members_ban_crime_record], 'fixpadding', '', 5);
  269. if($clist) {
  270. showtablerow('class="header"', array('class="td24"','class="td24"','class="td31"','','class="td24"'), array($lang['crime_user'], $lang['crime_action'], $lang['crime_dateline'], $lang['crime_reason'], $lang['crime_operator']));
  271. foreach($clist as $crime) {
  272. showtablerow('', '', array('<a href="home.php?mod=space&uid='.$crime['uid'].'" target="_blank">'.$crime['username'].'</a>', $lang[$crime['action']], date('Y-m-d H:i:s', $crime['dateline']), $crime['reason'], '<a href="home.php?mod=space&uid='.$crime['operatorid'].'" target="_blank">'.$crime['operator'].'</a>'));
  273. }
  274. $multipage = multi($count, $lpp, $page, ADMINSCRIPT."?action=logs&operation=$operation&keyword=".rawurlencode($_GET['keyword'])."&starttime=$starttime&endtime=$endtime&username=".rawurlencode($username)."&operator=".rawurlencode($operator)."&crimeaction=$crimeaction&lpp=$lpp&crimesearch=yes");
  275. } else {
  276. showtablerow('', 'colspan=5', array($lang['none']));
  277. }
  278. }
  279. } elseif($operation == 'credit') {
  280. $operationlist = array('TRC', 'RTC', 'RAC', 'MRC', 'TFR', 'RCV', 'CEC', 'ECU', 'SAC', 'BAC', 'PRC', 'RSC', 'STC', 'BTC', 'AFD', 'UGP', 'RPC', 'ACC', 'RCT', 'RCA', 'RCB', 'CDC', 'RKC', 'BME', 'RPR', 'RPZ');
  281. $rdata = array(
  282. 'task' => array('TRC'),
  283. 'thread' => array('RTC', 'RAC', 'STC', 'BTC', 'ACC', 'RCT', 'RCA', 'RCB'),
  284. 'member' => array('TFR', 'RCV', 'CEC', 'ECU', 'AFD', 'CDC', 'RKC', 'RPR', 'RPZ'),
  285. 'attach' => array('BAC', 'SAC'),
  286. 'magic' => array('MRC', 'BGC', 'RGC', 'AGC', 'BMC'),
  287. 'medal' => array('BME'),
  288. 'post' => array('PRC', 'RSC'),
  289. 'usergroup' => array('UGP'),
  290. 'report' => array('RPC'),
  291. );
  292. $perpage = max(50, empty($_GET['perpage']) ? 50 : intval($_GET['perpage']));
  293. $start_limit = ($page - 1) * $perpage;
  294. $where = '1';
  295. $pageadd = '';
  296. $begintime = $endtime = $uid = 0;
  297. if($srch_uid = trim($_GET['srch_uid'])) {
  298. if($uid = max(0, intval($srch_uid))) {
  299. $where .= " AND l.`uid`='$uid'";
  300. $pageadd .= '&srch_uid='.$uid;
  301. } else {
  302. $srch_uid = '';
  303. }
  304. } elseif($srch_username = trim($_GET['srch_username'])) {
  305. $uid = ($uid = C::t('common_member')->fetch_uid_by_username($srch_username)) ? $uid : C::t('common_member_archive')->fetch_uid_by_username($srch_username);
  306. if($uid) {
  307. $where .= " AND l.`uid`='$uid'";
  308. $pageadd .= '&srch_username='.rawurlencode($srch_username);
  309. } else {
  310. $srch_username = '';
  311. }
  312. }
  313. if(($srch_rtype = trim($_GET['srch_rtype'])) && array_key_exists($srch_rtype, $rdata) && isset($_GET['srch_rid']) && ($srch_rid = max(0, intval($_GET['srch_rid'])))) {
  314. $where .= " AND l.`relatedid`='$srch_rid'";
  315. $pageadd .= '&srch_rtype='.$srch_rtype.'&srch_rid='.$srch_rid;
  316. }
  317. $optype = '';
  318. if($srch_operation = trim($_GET['srch_operation'])) {
  319. if(in_array($srch_operation, $operationlist)) {
  320. $where .= " AND l.`operation`='$srch_operation'";
  321. $optype = $srch_operation;
  322. $pageadd .= '&srch_operation='.$srch_operation;
  323. }
  324. }
  325. if($srch_starttime = trim($_GET['srch_starttime'])) {
  326. if($starttime = strtotime($srch_starttime)) {
  327. $where .= " AND l.`dateline`>'$starttime'";
  328. $begintime = $starttime;
  329. $pageadd .= '&srch_starttime='.$srch_starttime;
  330. } else {
  331. $srch_starttime = '';
  332. }
  333. }
  334. if($srch_endtime = trim($_GET['srch_endtime'])) {
  335. if($endtime = strtotime($srch_endtime)) {
  336. $where .= " AND l.`dateline`<'$endtime'";
  337. $pageadd .= '&srch_endtime='.$srch_endtime;
  338. } else {
  339. $srch_endtime = '';
  340. }
  341. }
  342. $select_operation_html = '<select name="srch_operation">';
  343. $select_operation_html .= '<option>'.cplang('logs_select_operation').'</option>';
  344. foreach($operationlist as $row) {
  345. $select_operation_html .= '<option value="'.$row.'"'.($row == $srch_operation ? ' selected="selected"' : '').'>'.cplang('logs_credit_update_'.$row).'</option>';
  346. }
  347. $select_operation_html .= '</select>';
  348. $select_rid_html = '<select name="srch_rtype"><option value="">'.$lang['logs_select_ridtype'].'</option>';
  349. foreach($rdata as $k => $v) {
  350. $select_rid_html .= '<option value="'.$k.'"'.($srch_rtype == $k ? ' selected="selected"' : '').'>'.$lang['logs_'.$k.'_id'].'</option>';
  351. }
  352. $select_rid_html .= '</select>';
  353. showtableheader('search', 'fixpadding');
  354. showtablerow('', array('class="td23"', 'width="150"', 'class="td23"'),
  355. array(
  356. cplang('username'), '<input type="text" name="srch_username" class="txt" value="'.$srch_username.'" />',
  357. cplang('logs_credit_relatedid'), $select_rid_html.'&nbsp;<input type="text" name="srch_rid" class="txt" value="'.$srch_rid.'" />',
  358. )
  359. );
  360. showtablerow('', array('class="td23"', 'width="150"', 'class="td23"'),
  361. array(
  362. cplang('uid'), '<input type="text" name="srch_uid" class="txt" value="'.$srch_uid.'" />',
  363. cplang('time'), '<input type="text" name="srch_starttime" class="txt" value="'.$srch_starttime.'" onclick="showcalendar(event, this)" />- <input type="text" name="srch_endtime" class="txt" value="'.$srch_endtime.'" onclick="showcalendar(event, this)" />',
  364. )
  365. );
  366. showtablerow('', array('class="td23"', 'width="150"', 'class="td23"'),
  367. array(
  368. cplang('logs_lpp'), '<input type="text" name="perpage" class="txt" value="'.$perpage.'" size="5" /></label>',
  369. cplang('type'), $select_operation_html,
  370. )
  371. );
  372. showtablerow('', array('colspan="4"'), array('<input type="submit" name="srchlogbtn" class="btn" value="'.$lang['search'].'" />'));
  373. showtablefooter();
  374. echo '<script src="static/js/calendar.js" type="text/javascript"></script>';
  375. showtableheader('', 'fixpadding');
  376. showtablerow('class="header"', array('class="td23"','class="td23"','class="td23"','class="td24"','class="td24"'), array(
  377. cplang('username'),
  378. cplang('time'),
  379. cplang('type'),
  380. cplang('logs_credits_log_update'),
  381. cplang('logs_credit_relatedid'),
  382. ));
  383. $num = C::t('common_credit_log')->count_by_search($uid, $optype, $begintime, $endtime, 0, 0, array(), $srch_rid);
  384. $mpurl = ADMINSCRIPT."?action=logs&operation=$operation".$pageadd;
  385. $multipage = multi($num, $perpage, $page, $mpurl, 0, 3);
  386. $logs = C::t('common_credit_log')->fetch_all_by_search($uid, $optype, $begintime, $endtime, 0, 0, array(), $start_limit, $perpage, $srch_rid);
  387. $luid = array();
  388. foreach($logs as $log) {
  389. $luid[$log['uid']] = $log['uid'];
  390. }
  391. $members = C::t('common_member')->fetch_all($luid);
  392. foreach($logs as $log) {
  393. $log['username'] = $members[$log['uid']]['username'];
  394. $log['dateline'] = dgmdate($log['dateline'], 'y-n-j H:i');
  395. $log['update'] = '';
  396. foreach($_G['setting']['extcredits'] as $id => $credit) {
  397. if($log['extcredits'.$id]) {
  398. if($log['operation'] == 'RPZ') {
  399. $log['update'] .= $credit['title'].$lang['logs_credit_update_reward_clean'].'&nbsp;';
  400. } else {
  401. $log['update'] .= $credit['title'].($log['extcredits'.$id] > 0 ? '+' : '').$log['extcredits'.$id].$credit['unit'].'&nbsp;';
  402. }
  403. }
  404. }
  405. $related = '';
  406. if(in_array($log['operation'], $rdata['task'])) {
  407. $rtype = 'task';
  408. $related = '<a href="home.php?mod=task&do=view&id='.$log['relatedid'].'" target="_blank">'.cplang('logs_task_id').':'.$log['relatedid'].'</a>';
  409. } elseif(in_array($log['operation'], $rdata['thread'])) {
  410. $rtype = 'thread';
  411. $related = '<a href="forum.php?mod=viewthread&tid='.$log['relatedid'].'" target="_blank">'.cplang('logs_thread_id').':'.$log['relatedid'].'</a>';
  412. } elseif(in_array($log['operation'], $rdata['magic'])) {
  413. $rtype = 'magic';
  414. $related = cplang('logs_magic_id').':'.$log['relatedid'];
  415. } elseif(in_array($log['operation'], $rdata['medal'])) {
  416. $rtype = 'medal';
  417. $related = cplang('logs_medal_id').':'.$log['relatedid'];
  418. } elseif(in_array($log['operation'], $rdata['member'])) {
  419. $rtype = 'member';
  420. $related = '<a href="home.php?mod=space&uid='.$log['relatedid'].'&do=profile" target="_blank">'.cplang('uid').':'.$log['relatedid'].'</a>';
  421. } elseif(in_array($log['operation'], $rdata['attach'])) {
  422. $rtype = 'attach';
  423. $aid = aidencode($log['relatedid']);
  424. $related = '<a href="forum.php?mod=attachment&aid='.$aid.'&findpost=yes" target="_blank">'.cplang('logs_attach_id').':'.$log['relatedid'].'</a>';
  425. } elseif(in_array($log['operation'], $rdata['post'])) {
  426. $rtype = 'post';
  427. $related = '<a href="forum.php?mod=redirect&goto=findpost&pid='.$log['relatedid'].'" target="_blank">'.cplang('logs_post_id').':'.$log['relatedid'].'</a>';
  428. } elseif(in_array($log['operation'], $rdata['usergroup'])) {
  429. $rtype = 'usergroup';
  430. $related = $_G['cache']['group'][$log['relatedid']]['grouptitle'];
  431. } elseif(in_array($log['operation'], $rdata['report'])) {
  432. $rtype = 'report';
  433. $related = cplang('logs_report_id').':'.$log['relatedid'];
  434. }
  435. showtablerow('', array('class="bold"'), array(
  436. "<a href=\"home.php?mod=space&uid=$log[uid]\" target=\"_blank\">$log[username]",
  437. $log['dateline'],
  438. cplang('logs_credit_update_'.$log['operation']),
  439. $log['update'],
  440. $related.'&nbsp;&nbsp;<a href="'.ADMINSCRIPT.'?action=logs&operation=credit&srch_rtype='.$rtype.'&srch_rid='.$log['relatedid'].'" target="_blank">'.cplang('sameinfo').'</a>',
  441. ));
  442. }
  443. showsubmit('', '', '', '', $multipage);
  444. } elseif($operation == 'mods') {
  445. $modactioncode = lang('forum/modaction');
  446. showtablerow('class="header"', array('class="td23"','class="td23"','class="td24"','class="td23"','class="td24"','class="td24"','class="td23"'), array(
  447. cplang('operator'),
  448. cplang('usergroup'),
  449. cplang('ip'),
  450. cplang('time'),
  451. cplang('forum'),
  452. cplang('thread'),
  453. cplang('action'),
  454. cplang('reason'),
  455. ));
  456. foreach($logs as $logrow) {
  457. $log = explode("\t", $logrow);
  458. if(empty($log[1])) {
  459. continue;
  460. }
  461. $log[1] = dgmdate($log[1], 'y-n-j H:i');
  462. $log[2] = $log[2];
  463. $log[3] = $usergroup[$log[3]];
  464. $log[4] = $_G['group']['allowviewip'] ? $log[4] : '-';
  465. $log[6] = "<a href=\"./forum.php?mod=forumdisplay&fid=$log[5]\" target=\"_blank\">$log[6]</a>";
  466. if(!empty($log[11])) {
  467. $log[6] .= " -> <a href=\"./forum.php?mod=forumdisplay&fid=$log[11]\" target=\"_blank\">$log[12]</a>";
  468. }
  469. $log[8] = "<a href=\"./forum.php?mod=viewthread&tid=$log[7]\" target=\"_blank\" title=\"$log[8]\">".cutstr($log[8], 15)."</a>";
  470. $log[9] = $modactioncode[trim($log[9])];
  471. showtablerow('', array('class="bold"'), array(
  472. "<a href=\"home.php?mod=space&username=".rawurlencode($log[2])."\" target=\"_blank\">".($log[2] != $_G['member']['username'] ? "<b>$log[2]</b>" : $log[2]),
  473. $log[3],
  474. $log[4],
  475. $log[1],
  476. $log[6],
  477. $log[8],
  478. $log[9],
  479. $log[10],
  480. ));
  481. }
  482. } elseif($operation == 'ban') {
  483. showtablerow('class="header"', array('class="td24"', 'class="td23"', 'class="td23"', 'class="td23"', 'class="td25"', 'style="width:160px"', 'class="td23"'), array(
  484. cplang('operator'),
  485. cplang('ip'),
  486. cplang('time'),
  487. cplang('username'),
  488. cplang('operation'),
  489. cplang('logs_banned_group'),
  490. cplang('validity'),
  491. cplang('reason'),
  492. ));
  493. $operations = array(1 => '<b>'.$lang['logs_lock'].'</b>', 2 => '<b>'.$lang['logs_unlock'].'</b>', 3 => '<i>'.$lang['logs_banned_unban'].'</i>', 4 => '<b>'.$lang['logs_banned_ban'].'</b>');
  494. $extrainput = '&nbsp;'.cplang('operation').': <select name="filter"><option></option>';
  495. foreach($operations as $k => $v) {
  496. $extrainput .= '<option value="'.$k.'"'.($_GET['filter'] == $k ? ' selected="selected"' : '').'>'.strip_tags($v).'</option>';
  497. }
  498. $extrainput .= '</select>';
  499. foreach($logs as $logrow) {
  500. $log = explode("\t", $logrow);
  501. if(empty($log[1])) {
  502. continue;
  503. }
  504. $log[1] = dgmdate($log[1], 'y-n-j H:i');
  505. $log[2] = "<a href=\"home.php?mod=space&username=".rawurlencode($log[2])."\" target=\"_blank\">$log[2]</a> <span class=\"normal\">".$usergroup[$log[3]]."</span>";
  506. $log[4] = $_G['group']['allowviewip'] ? $log[4] : '-';
  507. $log[5] = "<a href=\"home.php?mod=space&username=".rawurlencode($log[5])."\" target=\"_blank\">$log[5]</a>";
  508. $log[8] = trim($log[8]) ? dgmdate($log[8], 'y-n-j') : '';
  509. if($log[10] == -1) {
  510. $operation = 1;
  511. } else {
  512. if($log[6] == $log[7]) {
  513. $operation = 2;
  514. } else {
  515. $operation = (in_array($log[6], array(4, 5)) && !in_array($log[7], array(4, 5))) ? 3 : 4;
  516. }
  517. }
  518. if(!empty($_GET['filter']) && $_GET['filter'] != $operation) {
  519. continue;
  520. }
  521. $operation = $operations[$operation];
  522. showtablerow('', array('class="bold"','class="smallefont"','class="smallefont"','','','','class="smallefont"',''), array(
  523. $log[2],
  524. $log[4],
  525. $log[1],
  526. $log[5],
  527. $operation,
  528. "{$usergroup[$log[6]]} / {$usergroup[$log[7]]}",
  529. $log[8],
  530. $log[9]
  531. ));
  532. }
  533. } elseif($operation == 'cp') {
  534. showtablerow('class="header"', array('class="td23"','class="td23"','class="td24"','class="td24"','class="td24"', ''), array(
  535. cplang('operator'),
  536. cplang('usergroup'),
  537. cplang('ip'),
  538. cplang('time'),
  539. cplang('action'),
  540. cplang('other')
  541. ));
  542. echo <<<EOD
  543. <script type="text/javascript">
  544. function togglecplog(k) {
  545. var cplogobj = $('cplog_'+k);
  546. if(cplogobj.style.display == 'none') {
  547. cplogobj.style.display = '';
  548. } else {
  549. cplogobj.style.display = 'none';
  550. }
  551. }
  552. </script>
  553. EOD;
  554. $data = getactionarray();
  555. $selectOperationOptions = "<option value=''>".cplang('all')."</option>";
  556. foreach($data['cats'] as $topkey) {
  557. if(!$data['actions'][$topkey]) {
  558. continue;
  559. }
  560. $selectOperationOptions .= "<optgroup label='".cplang('header_'.$topkey)."'>";
  561. foreach($data['actions'][$topkey] as $k => $item) {
  562. if(!$item) {
  563. continue;
  564. }
  565. $explainAction[$item[1]] = cplang($item[0]);
  566. if ($item[1]) {
  567. $checkedhere = $_GET['filteract'] == $item[1] ? " selected='true'" : '';
  568. $selectOperationOptions .= "<option value='$item[1]'{$checkedhere}>{$explainAction[$item[1]]}</option>";
  569. }
  570. }
  571. $selectOperationOptions .= "</optgroup>";
  572. }
  573. unset($explainAction['']);
  574. foreach($logs as $k => $logrow) {
  575. $log = explode("\t", $logrow);
  576. if(empty($log[1])) {
  577. continue;
  578. }
  579. $log[1] = dgmdate($log[1], 'y-n-j H:i');
  580. $log[2] = $log[2];
  581. $log[2] = "<a href=\"home.php?mod=space&username=".rawurlencode($log[2])."\" target=\"_blank\">".($log[2] != $_G['member']['username'] ? "<b>$log[2]</b>" : $log[2])."</a>";
  582. $log[3] = $usergroup[$log[3]];
  583. $log[4] = $_G['group']['allowviewip'] ? $log[4] : '-';
  584. preg_match("/operation=(.[^;]*)/i", $log[6], $operationInfo);
  585. $logExplain = $explainAction[rtrim($log[5]).'_'.$operationInfo[1]] ? $explainAction[rtrim($log[5]).'_'.$operationInfo[1]] : $explainAction[rtrim($log[5])] ;
  586. $log[5] = $logExplain ? $logExplain : rtrim($log[5]);
  587. showtablerow('', array('class="bold"'), array($log[2], $log[3], $log[4], $log[1], $log[5], '<a href="javascript:;" onclick="togglecplog('.$k.')">'.cutstr($log[6], 200).'</a>'));
  588. echo '<tbody id="cplog_'.$k.'" style="display:none;">';
  589. echo '<tr><td colspan="6">'.$log[6].'</td></tr>';
  590. echo '</tbody>';
  591. }
  592. } elseif($operation == 'error') {
  593. showtablerow('class="header"', array('class="td23"', 'class=""'), array(
  594. cplang('time'),
  595. cplang('message'),
  596. ));
  597. foreach($logs as $logrow) {
  598. $log = explode("\t", $logrow);
  599. if(empty($log[1])) {
  600. continue;
  601. }
  602. showtablerow('', array('class="bold"'), array(
  603. dgmdate($log[1], 'Y-m-d H:i:s'),
  604. $log[2].'<br>'.$log[4].'<br>'.$log[5]
  605. ));
  606. }
  607. } elseif($operation == 'invite') {
  608. if(!submitcheck('invitesubmit')) {
  609. $where = '1';
  610. $pageadd = '';
  611. $uid = $fuid = 0;
  612. if($srch_uid = trim($_GET['srch_uid'])) {
  613. if($uid = max(0, intval($srch_uid))) {
  614. $where .= " AND i.`uid`='$uid'";
  615. $pageadd .= '&srch_uid='.$uid;
  616. } else {
  617. $srch_uid = '';
  618. }
  619. } elseif($srch_username = trim($_GET['srch_username'])) {
  620. $uid = ($uid = C::t('common_member')->fetch_uid_by_username($srch_username)) ? $uid : C::t('common_member_archive')->fetch_uid_by_username($srch_username);
  621. if($uid) {
  622. $where .= " AND i.`uid`='$uid'";
  623. $pageadd .= '&srch_username='.rawurlencode($srch_username);
  624. } else {
  625. $srch_username = '';
  626. }
  627. }
  628. if($srch_fuid = trim($_GET['srch_fuid'])) {
  629. if($fuid = max(0, intval($srch_fuid))) {
  630. $where .= " AND i.`fuid`='$fuid'";
  631. $pageadd .= '&srch_fuid='.$fuid;
  632. } else {
  633. $srch_fuid = '';
  634. }
  635. }
  636. if($srch_fusername = trim($_GET['srch_fusername'])) {
  637. $where .= " AND i.`fusername`='$srch_fusername'";
  638. $pageadd .= '&srch_fusername='.rawurlencode($srch_fusername);
  639. }
  640. if($srch_buydate_start = trim($_GET['srch_buydate_start'])) {
  641. if($buydate_start = strtotime($srch_buydate_start)) {
  642. $where .= " AND i.`dateline`>'$buydate_start'";
  643. $pageadd .= '&srch_buydate_start='.$srch_buydate_start;
  644. } else {
  645. $srch_buydate_start = '';
  646. }
  647. }
  648. if($srch_buydate_end = trim($_GET['srch_buydate_end'])) {
  649. if($buydate_end = strtotime($srch_buydate_end)) {
  650. $where .= " AND i.`dateline`<'$buydate_end'";
  651. $pageadd .= '&srch_buydate_end='.$srch_buydate_end;
  652. } else {
  653. $srch_buydate_end = '';
  654. }
  655. }
  656. if($srch_ip = trim($_GET['srch_ip'])) {
  657. $pageadd .= '&srch_ip='.rawurlencode($srch_ip);
  658. $inviteip = str_replace('*', '%', addcslashes($srch_ip, '%_'));
  659. $srch_ip = dhtmlspecialchars($srch_ip);
  660. $where .= " AND i.`inviteip` LIKE '$inviteip%'";
  661. }
  662. if($srch_code = trim($_GET['srch_code'])) {
  663. $pageadd .= '&srch_ip='.rawurlencode($srch_code);
  664. $where .= " AND i.`code`='$srch_code'";
  665. $srch_code = dhtmlspecialchars($srch_code);
  666. }
  667. showtableheader('search', 'fixpadding');
  668. showtablerow('', array('class="td23"', 'width="150"', 'class="td23"'),
  669. array(
  670. cplang('username'), '<input type="text" name="srch_username" class="txt" value="'.$srch_username.'" />',
  671. cplang('logs_invite_ip'), '<input type="text" name="srch_ip" class="txt" value="'.$srch_ip.'" size="5" />',
  672. )
  673. );
  674. showtablerow('', array('class="td23"', 'width="150"', 'class="td23"'),
  675. array(
  676. cplang('uid'), '<input type="text" name="srch_uid" class="txt" value="'.$srch_uid.'" />',
  677. cplang('logs_invite_code'), '<input type="text" name="srch_code" class="txt" value="'.$srch_code.'" size="5" />',
  678. )
  679. );
  680. showtablerow('', array('class="td23"', 'width="150"', 'class="td23"'),
  681. array(
  682. cplang('logs_invite_target'), '<input type="text" name="srch_fusername" class="txt" value="'.$srch_fusername.'" />',
  683. cplang('logs_invite_buydate'), '<input type="text" name="srch_buydate_start" class="txt" value="'.$srch_buydate_start.'" onclick="showcalendar(event, this)" />- <input type="text" name="srch_buydate_end" class="txt" value="'.$srch_buydate_end.'" onclick="showcalendar(event, this)" />',
  684. )
  685. );
  686. showtablerow('', array('class="td23"', 'width="150"', 'class="td23"'),
  687. array(
  688. cplang('logs_invite_target').cplang('uid'), '<input type="text" name="srch_fuid" class="txt" value="'.$srch_fuid.'" />',
  689. '', '',
  690. )
  691. );
  692. showtablerow('', array('colspan="4"'), array('<input type="submit" name="srchlogbtn" class="btn" value="'.$lang['search'].'" />'));
  693. showtablefooter();
  694. echo '<script src="static/js/calendar.js" type="text/javascript"></script>';
  695. showtableheader('', 'fixpadding');
  696. showtablerow('class="header"', array('width="35"','class="td23"','class="td24"','class="td24"','class="td23"','class="td24"','class="td24"'), array(
  697. '',
  698. cplang('logs_invite_buyer'),
  699. cplang('logs_invite_buydate'),
  700. cplang('logs_invite_expiration'),
  701. cplang('logs_invite_ip'),
  702. cplang('logs_invite_code'),
  703. cplang('logs_invite_status'),
  704. ));
  705. $tpp = $_GET['lpp'] ? intval($_GET['lpp']) : $_G['tpp'];
  706. $start_limit = ($page - 1) * $tpp;
  707. $dels = array();
  708. $invitecount = C::t('common_invite')->count_by_search($uid, $fuid, $srch_fusername, $buydate_start, $buydate_end, $inviteip, $srch_code);
  709. if($invitecount) {
  710. $multipage = multi($invitecount, $tpp, $page, ADMINSCRIPT."?action=logs&operation=invite&lpp=$lpp$pageadd", 0, 3);
  711. $invitearr = C::t('common_invite')->fetch_all_by_search($uid, $fuid, $srch_fusername, $buydate_start, $buydate_end, $inviteip, $srch_code, $start_limit, $tpp);
  712. $members = C::t('common_member')->fetch_all(C::t('common_invite')->get_uids());
  713. foreach($invitearr as $invite) {
  714. $invite['username'] = $members[$invite['uid']]['username'];
  715. if(!$invite['fuid'] && $_G['timestamp'] > $invite['endtime']) {
  716. $dels[] = $invite['id'];
  717. continue;
  718. }
  719. $invite['statuslog'] = $lang['logs_invite_status_'.$invite['status']];
  720. $username = "<a href=\"home.php?mod=space&uid=$invite[uid]\">$invite[username]</a>";
  721. $invite['dateline'] = dgmdate($invite['dateline'], 'Y-n-j H:i');
  722. $invite['expiration'] = dgmdate($invite['endtime'], 'Y-n-j H:i');
  723. $stats = $invite['statuslog'].($invite['status'] == 2 ? '&nbsp;[<a href="home.php?mod=space&uid='.$invite['fuid'].'" target="_blank">'.$lang['logs_invite_target'].':'.$invite['fusername'].'</a>]' : '');
  724. showtablerow('', array('', 'class="bold"'), array(
  725. '<input type="checkbox" class="checkbox" name="delete[]" value="'.$invite['id'].'" />',
  726. $username,
  727. $invite['dateline'],
  728. $invite['expiration'],
  729. $invite['inviteip'],
  730. $invite['code'],
  731. $stats
  732. ));
  733. }
  734. showhiddenfields(array('pageadd' => $pageadd));
  735. if($dels) {
  736. C::t('common_invite')->delete($dels);
  737. }
  738. }
  739. } else {
  740. if($_GET['delete']) {
  741. C::t('common_invite')->delete($_GET['delete']);
  742. }
  743. header("Location: $_G[siteurl]".ADMINSCRIPT."?action=logs&operation=invite&lpp=$_GET[lpp]$_GET[pageadd]");
  744. }
  745. } elseif($operation == 'magic') {
  746. loadcache('magics');
  747. $lpp = empty($_GET['lpp']) ? 20 : $_GET['lpp'];
  748. $start_limit = ($page - 1) * $lpp;
  749. $mpurl = ADMINSCRIPT."?action=logs&operation=magic&lpp=$lpp";
  750. $wheresql = '';
  751. $wherearr = array();
  752. $magicid = $action = 0;
  753. if(in_array($_GET['opt'], array('1', '2', '3', '4', '5'))) {
  754. $wherearr[] = "ma.action='{$_GET['opt']}'";
  755. $action = $_GET['opt'];
  756. $mpurl .= '&opt='.$_GET['opt'];
  757. }
  758. if(!empty($_GET['magicid'])) {
  759. $wherearr[] = "ma.magicid='".intval($_GET['magicid'])."'";
  760. $magicid = intval($_GET['magicid']);
  761. $mpurl .= '&magicid='.$_GET['magicid'];
  762. }
  763. $wheresql = !empty($wherearr) && is_array($wherearr) ? ' WHERE '.implode(' AND ', $wherearr) : '';
  764. $check1 = $check2 = array();
  765. $check1[$_GET['magicid']] = 'selected="selected"';
  766. $check2[$_GET['opt']] = 'selected="selected"';
  767. $filters .= '<select onchange="window.location=\''.ADMINSCRIPT.'?action=logs&operation=magic&opt='.$_GET['opt'].'&lpp='.$lpp.'&opt='.$_GET['opt'].'&magicid=\'+this.options[this.selectedIndex].value"><option value="">'.$lang['magics_type'].'</option>';
  768. foreach($_G['cache']['magics'] as $id => $magic) {
  769. $filters .= '<option value="'.$id.'" '.$check1[$id].'>'.$magic['name'].'</option>';
  770. }
  771. $filters .= '</select>';
  772. $filters .= '<select onchange="window.location=\''.ADMINSCRIPT.'?action=logs&operation=magic&magicid='.$magicid.'&lpp='.$lpp.'&magicid='.$_GET['magicid'].'&opt=\'+this.options[this.selectedIndex].value"><option value="">'.$lang['all'].'</option>';
  773. foreach(array('1', '2', '3', '4', '5') as $o) {
  774. $filters .= '<option value="'.$o.'" '.$check2[$o].'>'.$lang['logs_magic_operation_'.$o].'</option>';
  775. }
  776. $filters .= '</select>';
  777. showtablerow('class="header"', array('class="td23"', 'class="td23"', 'class="td24"', 'class="td23"', 'class="td23"', 'class="td24"'), array(
  778. cplang('username'),
  779. cplang('name'),
  780. cplang('time'),
  781. cplang('num'),
  782. cplang('price'),
  783. cplang('action')
  784. ));
  785. $num = C::t('common_magiclog')->count_by_magicid_action($magicid, $action);
  786. if($num) {
  787. $multipage = multi($num, $lpp, $page, $mpurl, 0, 3);
  788. $luids = $targetuids = $logs = array();
  789. $mlogs = C::t('common_magiclog')->fetch_all_by_magicid_action($magicid, $action, $start_limit, $lpp);
  790. foreach($mlogs as $log) {
  791. $luids[$log['uid']] = $log['uid'];
  792. }
  793. $members = C::t('common_member')->fetch_all($luids);
  794. foreach($mlogs as $log) {
  795. $log['username'] = $members[$log['uid']]['username'];
  796. $log['name'] = $_G['cache']['magics'][$log['magicid']]['name'];
  797. $log['dateline'] = dgmdate($log['dateline'], 'Y-n-j H:i');
  798. if($log['action'] == 3) {
  799. $targetuids[] = $log['targetuid'];
  800. }
  801. $logs[] = $log;
  802. }
  803. if($targetuids) {
  804. $targetuids = C::t('common_member')->fetch_all_username_by_uid($targetuids);
  805. }
  806. foreach($logs as $log) {
  807. showtablerow('', array('class="bold"'), array(
  808. "<a href=\"home.php?mod=space&username=".rawurlencode($log['username'])."\" target=\"_blank\">$log[username]",
  809. $log['name'],
  810. $log['dateline'],
  811. $log['amount'],
  812. $log['price'],
  813. $lang['logs_magic_operation_'.$log['action']].($log['action'] == 3 ? '<a href="home.php?mod=space&uid='.$log['targetuid'].'" target="_blank">'.$targetuids[$log['targetuid']].'</a>' : ''),
  814. ));
  815. }
  816. }
  817. } elseif($operation == 'medal') {
  818. loadcache('medals');
  819. $lpp = empty($_GET['lpp']) ? 50 : $_GET['lpp'];
  820. $start_limit = ($page - 1) * $lpp;
  821. $mpurl = ADMINSCRIPT."?action=logs&operation=medal&lpp=$lpp";
  822. $type = $medalid = '';
  823. if(in_array($_GET['opt'], array('0', '1', '2', '3'))) {
  824. $type = $_GET['opt'];
  825. $mpurl .= '&opt='.$_GET['opt'];
  826. }
  827. if(!empty($_GET['medalid'])) {
  828. $medalid = $_GET['medalid'];
  829. $mpurl .= '&medalid='.$_GET['medalid'];
  830. }
  831. $wheresql = !empty($wherearr) && is_array($wherearr) ? ' WHERE '.implode(' AND ', $wherearr) : '';
  832. $check1 = $check2 = array();
  833. $check1[$_GET['medalid']] = 'selected="selected"';
  834. $check2[$_GET['opt']] = 'selected="selected"';
  835. $filters .= '<select onchange="window.location=\''.ADMINSCRIPT.'?action=logs&operation=medal&opt='.$_GET['opt'].'&lpp='.$lpp.'&medalid=\'+this.options[this.selectedIndex].value"><option value="">'.$lang['medals'].'</option><option value="">'.$lang['all'].'</option>';
  836. foreach($_G['cache']['medals'] as $id => $medal) {
  837. $filters .= '<option value="'.$id.'" '.$check1[$id].'>'.$medal['name'].'</option>';
  838. }
  839. $filters .= '</select>';
  840. $filters .= '<select onchange="window.location=\''.ADMINSCRIPT.'?action=logs&operation=medal&medalid='.$_GET['medalid'].'&lpp='.$lpp.'&opt=\'+this.options[this.selectedIndex].value"><option value="">'.$lang['all'].'</option>';
  841. foreach(array('0', '1', '2', '3') as $o) {
  842. $filters .= '<option value="'.$o.'" '.$check2[$o].'>'.$lang['logs_medal_operation_'.$o].'</option>';
  843. }
  844. $filters .= '</select>';
  845. showtablerow('class="header"', array('class="td23"', 'class="td24"', 'class="td23"', 'class="td23"'), array(
  846. cplang('username'),
  847. cplang('logs_medal_name'),
  848. cplang('type'),
  849. cplang('time'),
  850. cplang('logs_medal_expiration')
  851. ));
  852. $num = C::t('forum_medallog')->count_by_type_medalid($type, $medalid);
  853. if($num) {
  854. $multipage = multi($num, $lpp, $page, $mpurl, 0, 3);
  855. $uids = array();
  856. $logs = C::t('forum_medallog')->fetch_all_by_type_medalid($type, $medalid, $start_limit, $lpp);
  857. foreach($logs as $log) {
  858. $uids[] = $log['uid'];
  859. }
  860. $users = C::t('common_member')->fetch_all_username_by_uid($uids);
  861. foreach($logs as $log) {
  862. $log['name'] = $_G['cache']['medals'][$log['medalid']]['name'];
  863. $log['dateline'] = dgmdate($log['dateline'], 'Y-n-j H:i');
  864. $log['expiration'] = empty($log['expiration']) ? cplang('logs_noexpire') : dgmdate($log['expiration'], 'Y-n-j H:i');
  865. showtablerow('', array('class="td23"', 'class="td24"', 'class="td23"', 'class="td24"'), array(
  866. "<a href=\"home.php?mod=space&uid=".$log['uid']."\" target=\"_blank\">".$users[$log['uid']],
  867. $log['name'],
  868. $lang['logs_medal_operation_'.$log['type']],
  869. $log['dateline'],
  870. $log['expiration']
  871. ));
  872. }
  873. }
  874. } elseif($operation == 'payment') {
  875. showtablerow('class="header"', array('width="30%"','class="td23"','class="td23"','class="td24"','class="td23"','class="td24"','class="td24"'), array(
  876. cplang('subject'),
  877. cplang('logs_payment_amount'),
  878. cplang('logs_payment_seller'),
  879. cplang('logs_payment_buyer'),
  880. cplang('logs_payment_dateline'),
  881. cplang('logs_payment_buydateline'),
  882. ));
  883. $tpp = $_GET['lpp'] ? intval($_GET['lpp']) : $_G['tpp'];
  884. $start_limit = ($page - 1) * $tpp;
  885. $threadcount = C::t('common_credit_log')->count_by_operation('BTC');
  886. if($threadcount) {
  887. $multipage = multi($threadcount, $tpp, $page, ADMINSCRIPT."?action=logs&operation=payment&lpp=$lpp", 0, 3);
  888. $logs = C::t('common_credit_log')->fetch_all_by_operation('BTC', $start_limit, $tpp);
  889. $ltids = $luid = array();
  890. foreach($logs as $log) {
  891. $luid[$log['uid']] = $log['uid'];
  892. $ltids[$log['relatedid']] = $log['relatedid'];
  893. }
  894. $members = C::t('common_member')->fetch_all($luid);
  895. $threads = C::t('forum_thread')->fetch_all($ltids);
  896. foreach($logs as $paythread) {
  897. $thread = $threads[$paythread['relatedid']];
  898. $paythread['username'] = $members[$paythread['uid']]['username'];
  899. $paythread['tid'] = $thread['tid'];
  900. $paythread['subject'] = $thread['subject'];
  901. $paythread['postdateline'] = $thread['dateline'];
  902. $paythread['author'] = $thread['author'];
  903. $paythread['tauthorid'] = $thread['authorid'];
  904. $paythread['seller'] = $paythread['tauthorid'] ? "<a href=\"home.php?mod=space&uid=$paythread[tauthorid]\">$paythread[author]</a>" : cplang('logs_payment_del')."(<a href=\"home.php?mod=space&uid=$paythread[authorid]\">".cplang('logs_payment_view')."</a>)";
  905. $paythread['buyer'] = "<a href=\"home.php?mod=space&uid=$paythread[uid]\">$paythread[username]</a>";
  906. $paythread['subject'] = $paythread['subject'] ? "<a href=\"forum.php?mod=viewthread&tid=$paythread[tid]\">$paythread[subject]</a>" : cplang('logs_payment_del');
  907. $paythread['dateline'] = dgmdate($paythread['dateline'], 'Y-n-j H:i');
  908. $paythread['postdateline'] = $paythread['postdateline'] ? dgmdate($paythread['postdateline'], 'Y-n-j H:i') : cplang('logs_payment_del');
  909. foreach($_G['setting']['extcredits'] as $id => $credits) {
  910. if($paythread['extcredits'.$id]) {
  911. $paythread['amount'] = $credits['title'].':'.abs($paythread['extcredits'.$id]);
  912. break;
  913. }
  914. }
  915. showtablerow('', array('', 'class="bold"'), array(
  916. $paythread['subject'],
  917. $paythread['amount'],
  918. $paythread['seller'],
  919. $paythread['buyer'],
  920. $paythread['postdateline'],
  921. $paythread['dateline']
  922. ));
  923. }
  924. }
  925. }
  926. function getactionarray() {
  927. $isfounder = true;
  928. require './source/admincp/admincp_menu.php';
  929. require './source/admincp/admincp_perm.php';
  930. unset($topmenu['index'], $menu['index']);
  931. $actioncat = $actionarray = array();
  932. $actioncat[] = 'setting';
  933. $actioncat = array_merge($actioncat, array_keys($topmenu));
  934. foreach($menu as $tkey => $items) {
  935. foreach($items as $item) {
  936. $actionarray[$tkey][] = $item;
  937. }
  938. }
  939. return array('actions' => $actionarray, 'cats' => $actioncat);
  940. }
  941. function get_log_files($logdir = '', $action = 'action') {
  942. $dir = opendir($logdir);
  943. $files = array();
  944. while($entry = readdir($dir)) {
  945. $files[] = $entry;
  946. }
  947. closedir($dir);
  948. if($files) {
  949. sort($files);
  950. $logfile = $action;
  951. $logfiles = array();
  952. $ym = '';
  953. foreach($files as $file) {
  954. if(strpos($file, $logfile) !== FALSE) {
  955. if(substr($file, 0, 6) != $ym) {
  956. $ym = substr($file, 0, 6);
  957. }
  958. $logfiles[$ym][] = $file;
  959. }
  960. }
  961. if($logfiles) {
  962. $lfs = array();
  963. foreach($logfiles as $ym => $lf) {
  964. $lastlogfile = $lf[0];
  965. unset($lf[0]);
  966. $lf[] = $lastlogfile;
  967. $lfs = array_merge($lfs, $lf);
  968. }
  969. return $lfs;
  970. }
  971. return array();
  972. }
  973. return array();
  974. }
  975. showtablefooter();
  976. showtableheader('', 'fixpadding');
  977. if($operation != 'credit') {
  978. if(empty($_GET['keyword']) && empty($_GET['filteract'])) {
  979. showhiddenfields(array('lpp' => $lpp));
  980. }
  981. if(!empty($_GET['day'])) {
  982. showhiddenfields(array('day' => $_GET['day']));
  983. }
  984. if($operation == 'cp') {
  985. $selectOperation = '<select onchange="this.form.filteract.value = this.options[this.selectedIndex].value;this.form.submit();">';
  986. $selectOperation .= $selectOperationOptions;
  987. $selectOperation .= '</select> ';
  988. } else {
  989. $selectOperation = '';
  990. }
  991. showsubmit($operation == 'invite' ? 'invitesubmit' : '', 'submit', 'del', $filters, $multipage.(empty($_GET['keyword']) && empty($_GET['filteract']) ? cplang('logs_lpp').':<select onchange="if(this.options[this.selectedIndex].value != \'\') {this.form.lpp.value = this.options[this.selectedIndex].value;this.form.submit(); }"><option value="20" '.$checklpp[20].'> 20 </option><option value="40" '.$checklpp[40].'> 40 </option><option value="80" '.$checklpp[80].'> 80 </option></select>' : '').$extrainput.'&nbsp;'.($operation == 'warn' ? cplang('warn_user').': ' : '').$selectOperation.($logfiles || $operation == 'warn' ? '<input type="text" class="txt" name="keyword" value="'.$_GET['keyword'].'" />'.($_GET['day'] ? '<input type="hidden" class="btn" value="'.$_GET['day'].'" />' : '').'<input type="hidden" name="filteract" value="'.$_GET['filteract'].'" /><input type="submit" class="btn" value="'.$lang['search'].'" />' : ''));
  992. }
  993. showtablefooter();
  994. showformfooter();
  995. ?>