PageRenderTime 53ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/e107_plugins/log/admin_config.php

https://github.com/CasperGemini/e107
PHP | 845 lines | 825 code | 9 blank | 11 comment | 3 complexity | bf3515721310ee6a854fc0546b66281b MD5 | raw file
Possible License(s): GPL-2.0
  1. <?php
  2. /*
  3. * e107 website system
  4. *
  5. * Copyright (C) 2008-2013 e107 Inc (e107.org)
  6. * Released under the terms and conditions of the
  7. * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
  8. *
  9. * Stats logging plugin - admin functions
  10. *
  11. */
  12. require_once('../../class2.php');
  13. if (!getperms('P') || !e107::isInstalled('log'))
  14. {
  15. header('Location: '.e_BASE.'index.php');
  16. exit;
  17. }
  18. require_once(e_ADMIN.'auth.php');
  19. require_once(e_HANDLER.'userclass_class.php');
  20. $frm = e107::getForm();
  21. $mes = e107::getMessage();
  22. define('LogFlagFile', 'LogFlag.php');
  23. include_lan(e_PLUGIN.'log/languages/'.e_LANGUAGE.'_admin_log.php');
  24. if (e_QUERY)
  25. {
  26. $sl_qs = explode('.', e_QUERY);
  27. }
  28. $action = varset($sl_qs[0],'config');
  29. $params = varset($sl_qs[1],'');
  30. // List of the non-page-based info which is gathered - historically only 'all-time' stats, now we support monthly as well
  31. $stats_list = array('statBrowser'=>ADSTAT_L6,'statOs'=>ADSTAT_L7,'statScreen'=>ADSTAT_L8,'statDomain'=>ADSTAT_L9,'statReferer'=>ADSTAT_L10,'statQuery'=>ADSTAT_L11);
  32. $separator_list = array(1 => ADSTAT_L57, 2 => ADSTAT_L58);
  33. $separator_char = array(1 => ',', 2 => '|');
  34. $quote_list = array(1 => ADSTAT_L50, 2 => ADSTAT_L55, 3 => ADSTAT_L56);
  35. $quote_char = array(1 => '', 2 => "'", 3 => '"');
  36. //---------------------------------------------
  37. // Export data file
  38. //---------------------------------------------
  39. $export_filter = ''; // can be 'LIKE', 'REGEX', or simple equality
  40. $export_type = $tp->toDB(varset($_POST['export_type'],'page')); // Page data or one of the other bits of info
  41. $export_date = intval(varset($_POST['export_date'],1));
  42. $export2_date = intval(varset($_POST['export2_date'],3));
  43. $export_year = intval(varset($_POST['export_year'],date('Y')));
  44. $export_month = intval(varset($_POST['export_month'],date('m')));
  45. $export_day = intval(varset($_POST['export_day'],date('j')));
  46. $export_char = varset($_POST['export_char'], 1);
  47. $export_quote = varset($_POST['export_quote'], 1);
  48. $export_stripurl = varset($_POST['export_stripurl'], 0);
  49. if (isset($_POST['create_export']) && (($action == 'export') || ($action == 'datasets')))
  50. {
  51. $first_date = 0;
  52. $last_date = 0;
  53. $date_error = FALSE;
  54. if ($export_type == 'page')
  55. {
  56. switch ($export_date)
  57. {
  58. case '1' : // Single day
  59. $first_date = gmmktime(0,0,0,$export_month,$export_day,$export_year);
  60. $last_date = $first_date+86399;
  61. $export_filter = " `log_id`='".date("Y-m-j",$first_date)."'";
  62. break;
  63. case '2' : // Daily for a month
  64. $first_date = gmmktime(0,0,0,$export_month,1,$export_year);
  65. $last_date = gmmktime(0,0,0,$export_month+1,1,$export_year) - 1;
  66. $export_filter = " LEFT(`log_id`,8)='".gmstrftime("%Y-%m-",$first_date)."'";
  67. break;
  68. case '3' : // Monthly for a Year
  69. $first_date = gmmktime(0,0,0,1,1,$export_year);
  70. $last_date = gmmktime(0,0,0,1,1,$export_year+1) - 1;
  71. $export_filter = " LENGTH(`log_id`)=7 AND LEFT(`log_id`,5)='".gmstrftime("%Y-",$first_date)."'";
  72. break;
  73. case '4' : // Accumulated
  74. case '5' :
  75. $export_filter = "`log_id`='pageTotal'";
  76. $date_error = 'ignore';
  77. break;
  78. }
  79. }
  80. else
  81. { // Calculate strings for non-page sources
  82. $prefix_len = 0;
  83. $export_date = $export2_date;
  84. if (isset($stats_list[$export_type]))
  85. {
  86. $prefix_len = strlen($export_type) + 1;
  87. switch ($export2_date)
  88. {
  89. case '3' : // Monthly for a Year
  90. if ($prefix_len > 0)
  91. {
  92. $first_date = gmmktime(0,0,0,1,1,$export_year);
  93. $last_date = gmmktime(0,0,0,1,1,$export_year+1) - 1;
  94. $export_filter = " LENGTH(`log_id`)='".($prefix_len + 7)."' AND LEFT(`log_id`,".($prefix_len + 5).")='".$export_type.":".gmstrftime("%Y-",$first_date)."'";
  95. }
  96. break;
  97. case '4' : // Accumulated
  98. $export_filter = " `log_id`='".$export_type."'";
  99. $date_error = 'ignore';
  100. break;
  101. }
  102. }
  103. else
  104. {
  105. $message = ADSTAT_L54;
  106. }
  107. }
  108. if (($date_error != 'ignore') && (($first_date == 0) || ($last_date == 0) || $date_error))
  109. {
  110. $message = ADSTAT_L47;
  111. }
  112. }
  113. // Needed on Windoze platforms - not an ideal solution!
  114. if (!function_exists('nl_langinfo'))
  115. {
  116. define('MON_1',86400);
  117. define('MON_2',2764800);
  118. define('MON_3',5443200);
  119. define('MON_4',8035200);
  120. define('MON_5',10800000);
  121. define('MON_6',13392000);
  122. define('MON_7',15811200);
  123. define('MON_8',19008000);
  124. define('MON_9',21168000);
  125. define('MON_10',23760000);
  126. define('MON_11',26352000);
  127. define('MON_12',28944000);
  128. function nl_langinfo($mon)
  129. {
  130. return date('F',$mon);
  131. }
  132. }
  133. //---------------------------------------------
  134. // Remove page entries
  135. //---------------------------------------------
  136. if(isset($_POST['openRemPageD']))
  137. {
  138. $action = 'rempage';
  139. }
  140. if(isset($_POST['remSelP']))
  141. {
  142. $action = 'rempage';
  143. rempagego(); // Do the deletions - then redisplay the list of pages
  144. }
  145. //---------------------------------------------
  146. // Wipe accumulated stats
  147. //---------------------------------------------
  148. if(IsSet($_POST['wipeSubmit']))
  149. {
  150. $logStr = '';
  151. foreach($_POST['wipe'] as $key => $wipe)
  152. {
  153. switch($key)
  154. {
  155. case "statWipePage":
  156. $sql -> db_Update("logstats", "log_data='' WHERE log_id='pageTotal' ");
  157. $sql -> db_Update("logstats", "log_data='' WHERE log_id='statTotal' ");
  158. $sql -> db_Update("logstats", "log_data='' WHERE log_id='statUnique' ");
  159. break;
  160. case "statWipeBrowser":
  161. $sql -> db_Update("logstats", "log_data='' WHERE log_id='statBrowser' ");
  162. break;
  163. case "statWipeOs":
  164. $sql -> db_Update("logstats", "log_data='' WHERE log_id='statOs' ");
  165. break;
  166. case "statWipeScreen":
  167. $sql -> db_Update("logstats", "log_data='' WHERE log_id='statScreen' ");
  168. break;
  169. case "statWipeDomain":
  170. $sql -> db_Update("logstats", "log_data='' WHERE log_id='statDomain' ");
  171. break;
  172. case "statWipeRefer":
  173. $sql -> db_Update("logstats", "log_data='' WHERE log_id='statReferer' ");
  174. break;
  175. case "statWipeQuery":
  176. $sql -> db_Update("logstats", "log_data='' WHERE log_id='statQuery' ");
  177. break;
  178. }
  179. $logStr .= '[!br!]'.$key;
  180. }
  181. $admin_log->log_event('STAT_01',ADSTAT_L81.$logStr,'');
  182. //$message = ADSTAT_L25; // TODO:$emessage
  183. $mes->addSuccess(LAN_UPDATED);
  184. }
  185. if(!is_writable(e_LOG))
  186. {
  187. //$message = "<b>".ADSTAT_L38."</b>";
  188. $mes->addError(ADSTAT_L28);
  189. }
  190. if (isset($_POST['updatesettings']))
  191. {
  192. $statList = array( // Type = 0 for direct text, 1 for integer
  193. 'statActivate' => 0,
  194. 'statCountAdmin' => 0,
  195. 'statUserclass' => 0,
  196. 'statBrowser' => 1,
  197. 'statOs' => 1,
  198. 'statScreen' => 1,
  199. 'statDomain' => 1,
  200. 'statRefer' => 1,
  201. 'statQuery' => 1,
  202. 'statRecent' => 1,
  203. 'statDisplayNumber' => 0,
  204. 'statPrevMonth' => 1
  205. );
  206. $logStr = '';
  207. foreach ($statList as $k => $type)
  208. {
  209. switch ($type)
  210. {
  211. case 0 : $pref[$k] = $_POST[$k]; break;
  212. case 1 : $pref[$k] = intval($_POST[$k]); break;
  213. }
  214. $logStr .= "[!br!]{$k} => ".$pref[$k];
  215. }
  216. save_prefs();
  217. file_put_contents(e_LOG.LogFlagFile, "<?php\n\$logEnable={$pref['statActivate']};\n?>\n"); // Logging task uses to see if logging enabled
  218. $admin_log->log_event('STAT_02',ADSTAT_L82.$logStr,'');
  219. }
  220. $ns->tablerender($caption, $mes->render() . $text);
  221. function gen_select($prompt,$name,$value)
  222. {
  223. $ret = "<div class='control-group clearfix' >
  224. <span class='pull-left'>".$prompt."</span><span class='pull-right'><select name='{$name}' class='tbox'>\n
  225. <option value='0' ".($value == 0 ? " selected='selected'" : "").">".ADSTAT_L50."</option>\n
  226. <option value='1' ".($value == 1 ? " selected='selected'" : "").">".ADSTAT_L49."</option>\n
  227. <option value='2' ".($value == 2 ? " selected='selected'" : "").">".ADSTAT_L48."</option>\n
  228. </select></span></div>";
  229. return $ret;
  230. }
  231. function data_type_select($name,$value)
  232. {
  233. global $stats_list;
  234. $ret = "<select name='{$name}' class='tbox' onchange=\"settypebox(this.value);\">\n
  235. <option value='page' ".($value == 'page' ? " selected='selected'" : "").">".ADSTAT_L52."</option>\n";
  236. foreach ($stats_list as $k=>$v)
  237. {
  238. $ret .= "<option value='{$k}' ".($value == $k ? " selected='selected'" : "").">{$v}</option>\n";
  239. }
  240. $ret .= "</select>\n";
  241. return $ret;
  242. }
  243. switch ($action)
  244. {
  245. case 'config' :
  246. $text = "
  247. <form method='post' action='".e_SELF."'>
  248. <table class='table adminform'>
  249. <colgroup>
  250. <col style='width:40%' />
  251. <col style='width:60%' />
  252. </colgroup>
  253. <tr>
  254. <td>".ADSTAT_L4."</td>
  255. <td>".$frm->radio_switch('statActivate', $pref['statActivate'])."</td>
  256. </tr>
  257. <tr>
  258. <td>".ADSTAT_L18."</td>
  259. <td>".r_userclass("statUserclass", $pref['statUserclass'],'off','public, member, admin, classes')."</td>
  260. </tr>
  261. <tr>
  262. <td>".ADSTAT_L20."</td>
  263. <td>".$frm->radio_switch('statCountAdmin', $pref['statCountAdmin'])."</td>
  264. </tr>
  265. <tr>
  266. <td>".ADSTAT_L21."</td>
  267. <td><input class='tbox' type='text' name='statDisplayNumber' size='8' value='".$pref['statDisplayNumber']."' maxlength='3' /></td>
  268. </tr>
  269. <tr>
  270. <td>".ADSTAT_L5."</td>
  271. <td>
  272. ".gen_select(ADSTAT_L6, 'statBrowser',$pref['statBrowser'])
  273. .gen_select(ADSTAT_L7, 'statOs',$pref['statOs'])
  274. .gen_select(ADSTAT_L8, 'statScreen',$pref['statScreen'])
  275. .gen_select(ADSTAT_L9, 'statDomain',$pref['statDomain'])
  276. .gen_select(ADSTAT_L10, 'statRefer',$pref['statRefer'])
  277. .gen_select(ADSTAT_L11, 'statQuery',$pref['statQuery'])
  278. ."<div class='clearfix' style='padding-bottom: 4px'><span class='pull-left'>".ADSTAT_L19."</span><span class='pull-right'>
  279. ".$frm->radio_switch('statRecent', $pref['statRecent'])."</span></div>
  280. </td>
  281. </tr>
  282. <tr>
  283. <td>".ADSTAT_L78."</td>
  284. <td>".$frm->checkbox('statPrevMonth', 1, varset($pref['statPrevMonth'],0))."<span class='field-help'>".ADSTAT_L79."</span></td>
  285. </tr>
  286. <tr>
  287. <td>".ADSTAT_L12."</td>
  288. <td>
  289. ".$frm->checkbox('wipe[statWipePage]', 1, false, array('label'=> ADSTAT_L14 ))."
  290. ".$frm->checkbox('wipe[statWipeBrowser]', 1, false, array('label'=>ADSTAT_L6))."
  291. ".$frm->checkbox('wipe[statWipeOs]', 1, false, array('label'=> ADSTAT_L7 ))."
  292. ".$frm->checkbox('wipe[statWipeScreen]', 1, false, array('label'=> ADSTAT_L8 ))."
  293. ".$frm->checkbox('wipe[statWipeDomain]', 1, false, array('label'=> ADSTAT_L9 ))."
  294. ".$frm->checkbox('wipe[statWipeRefer]', 1, false, array('label'=> ADSTAT_L10 ))."
  295. ".$frm->checkbox('wipe[statWipeQuery]', 1, false, array('label'=> ADSTAT_L11 ))."
  296. <br />
  297. ".$frm->admin_button('wipeSubmit', LAN_RESET, 'delete')."<span class='field-help'>".ADSTAT_L13."</span>
  298. </td>
  299. </tr>
  300. <tr>
  301. <td>".ADSTAT_L26."</td>
  302. <td>".$frm->admin_button('openRemPageD', ADSTAT_L28, 'other')."<span class='field-help'>".ADSTAT_L27."</span> </td>
  303. </tr>
  304. </table>
  305. <div class='buttons-bar center'>
  306. ".$frm->admin_button('updatesettings', LAN_UPDATE, 'update')."
  307. </div>
  308. </form>";
  309. $ns->tablerender(ADSTAT_L16, $text);
  310. break; // case config
  311. case 'rempage' : // Remove pages
  312. rempage();
  313. break;
  314. case 'export' : // Export file
  315. case 'datasets' :
  316. //===========================================================
  317. // EXPORT DATA
  318. //===========================================================
  319. $text = "<div style='text-align:center'>";
  320. if ($action == 'export')
  321. {
  322. $text .= "<form method='post' action='".e_PLUGIN."log/stats_csv.php?export'>";
  323. }
  324. else
  325. {
  326. $text .= "<form method='post' action='".e_SELF."?datasets'>";
  327. }
  328. $text .= "<table class='table adminform'>
  329. <colgroup>
  330. <col style='width:50%' />
  331. <col style='width:50%' />
  332. </colgroup>
  333. ";
  334. if ($action == 'export')
  335. {
  336. $text .= "<tr><td colspan = '2'>".ADSTAT_L67."</td></tr>";
  337. }
  338. else
  339. {
  340. $text .= "<tr><td colspan = '2'>".ADSTAT_L68."</td></tr>";
  341. }
  342. // Type of output data - page data, browser stats....
  343. $text .= "<tr><td>".ADSTAT_L51."</td><td>\n".data_type_select('export_type',$export_type).'</td></tr>';
  344. // Period selection type for page data
  345. $text .= "<tr><td>".ADSTAT_L41."</td><td>\n
  346. <select class='tbox' name='export_date' id='export_date' onchange=\"setdatebox(this.value);\" ".($export_type=='page' ? "" : "style='display:none'" ).">\n
  347. <option value='1'".($export_date==1 ? " selected='selected'" : "").">".ADSTAT_L42."</option>\n
  348. <option value='2'".($export_date==2 ? " selected='selected'" : "").">".ADSTAT_L43."</option>\n
  349. <option value='3'".($export_date==3 ? " selected='selected'" : "").">".ADSTAT_L44."</option>\n
  350. <option value='4'".($export_date==4 ? " selected='selected'" : "").">".ADSTAT_L45."</option>\n
  351. <option value='5'".($export_date==5 ? " selected='selected'" : "").">".ADSTAT_L62."</option>\n
  352. </select>";
  353. // Period selection type for non-page data
  354. $text .= "
  355. <select class='tbox' name='export2_date' id='export2_date' onchange=\"setdatebox(this.value);\" ".($export_type=='page' ? "style='display:none'" : "").">\n
  356. <option value='3'".($export2_date==3 ? " selected='selected'" : "").">".ADSTAT_L44."</option>\n
  357. <option value='4'".($export2_date==4 ? " selected='selected'" : "").">".ADSTAT_L45."</option>\n
  358. </select>";
  359. $text .= "</td></tr>";
  360. $text .= "<tr><td>".ADSTAT_L46."</td><td>\n";
  361. // Now put the various dropdowns - their visibility is controlled by the export_type dropdown
  362. $text .= "<select class='tbox' name='export_day' id='export_day'>\n";
  363. for ($i = 1; $i < 32; $i++)
  364. {
  365. $selected = $export_day == $i ? " selected='selected'" : "";
  366. $text .= "<option value='{$i}'{$selected}>{$i}</option>\n";
  367. };
  368. $text .= "</select>\n&nbsp;&nbsp;&nbsp;";
  369. $text .= "<select class='tbox' name='export_month' id='export_month'>\n";
  370. for ($i = 1; $i < 13; $i++)
  371. {
  372. $selected = $export_month == $i ? " selected='selected'" : "";
  373. $text .= "<option value='{$i}'{$selected}>".nl_langinfo(constant('MON_'.$i))."</option>\n";
  374. };
  375. $text .= "</select>\n&nbsp;&nbsp;&nbsp;";
  376. $this_year = date("Y");
  377. $text .= "<select class='tbox' name='export_year' id='export_year'>\n";
  378. for ($i = $this_year; $i > $this_year - 6; $i--)
  379. {
  380. $selected = $export_year == $i ? " selected='selected'" : "";
  381. $text .= "<option value='{$i}'{$selected}>{$i}</option>\n";
  382. };
  383. $text .= "</select>\n&nbsp;&nbsp;&nbsp;";
  384. $text .= "<span id='export_cumulative' style='display: none'>".ADSTAT_L53."</span>\n";
  385. $text .= "</td></tr>";
  386. if ($action == 'export')
  387. {
  388. // Separators, quotes
  389. $text .= "<tr><td>".ADSTAT_L59."</td><td>\n
  390. <select class='tbox' name='export_char'>";
  391. foreach ($separator_list as $k=>$v)
  392. {
  393. $selected = $export_char == $k ? " selected='selected'" : "";
  394. $text .= "<option value='{$k}'{$selected}>{$v}</option>\n";
  395. }
  396. $text .= "</select>\n&nbsp;&nbsp;&nbsp;&nbsp;<select class='tbox' name='export_quote'>\n";
  397. foreach ($quote_list as $k=>$v)
  398. {
  399. $selected = $export_quote == $k ? " selected='selected'" : "";
  400. $text .= "<option value='{$k}'{$selected}>{$v}</option>\n";
  401. }
  402. $text .= "</select>\n</td></tr>";
  403. $text .= "<tr>
  404. <td>".ADSTAT_L60."</td>
  405. <td>".$frm->checkbox('export_stripurl', 1)."<span class='field-help'>".ADSTAT_L61."</span></td>
  406. </tr>";
  407. }
  408. if ($export_filter)
  409. {
  410. if (getperms('0')) $text .= "<tr><td>".ADSTAT_L65."</td><td>".$export_filter."</td></tr>";
  411. $sql -> db_Select("logstats", "log_id", "{$export_filter} ");
  412. $text .= "<tr><td>".ADSTAT_L64."</td><td>";
  413. while($row = $sql -> db_Fetch())
  414. {
  415. $text .= $row['log_id']."<br />";
  416. }
  417. $text .= "</td></tr>";
  418. }
  419. $text .= "
  420. </table>
  421. <div class='buttons-bar center'>
  422. ".$frm->admin_button('create_export', ($action == 'export' ? LAN_CREATE : ADSTAT_L66), 'update')."
  423. </div>
  424. </form>
  425. </div>";
  426. // Set up the date display boxes
  427. $text .= "<script type=\"text/javascript\"> settypebox('{$export_type}');</script>";
  428. $ns->tablerender(ADSTAT_L40, $text);
  429. break; // case 'export'
  430. case 'history' :
  431. //===========================================================
  432. // DELETE HISTORY
  433. //===========================================================
  434. $mes->addWarning(ADSTAT_L76);
  435. $text = "
  436. <form method='post' action='".e_SELF."?history'>
  437. <table class='table adminlist'>
  438. <colgroup>
  439. <col style='width:50%' />
  440. <col style='width:50%' />
  441. </colgroup>";
  442. $keep_month = varset($_POST['delete_month'],0);
  443. $keep_year = varset($_POST['delete_year'],0);
  444. if (isset($_POST['delete_history']))
  445. {
  446. $text .= "<tr><td>".ADSTAT_L72."</td><td>".nl_langinfo(constant('MON_'.$keep_month))." ".$keep_year."</td></tr>
  447. <tr><td colspan='2' style='text-align:center' class='forumheader'>
  448. <input type='hidden' name='delete_month' value='{$keep_month}' />
  449. <input type='hidden' name='delete_year' value='{$keep_year}' />
  450. ".$frm->admin_button('actually_delete', LAN_CONFDELETE, 'delete')."<br />".ADSTAT_L74."
  451. </td></tr>";
  452. $text .= "<tr><td>".ADSTAT_L75."</td><td>".implode("<br />",get_for_delete($keep_year,$keep_month))."</td></tr>";
  453. }
  454. else
  455. {
  456. if (isset($_POST['actually_delete']))
  457. {
  458. $delete_list = get_for_delete($keep_year,$keep_month);
  459. $logStr = '';
  460. // $text .= "<tr><td colspan='2'>Data notionally deleted {$keep_month}-{$keep_year}</td></tr>";
  461. $text .= "<tr><td>".ADSTAT_L77."</td><td>";
  462. foreach ($delete_list as $k => $v)
  463. {
  464. $sql->db_Delete('logstats',"log_id='{$k}'");
  465. $text .= $v."<br />";
  466. $logStr .= "[!br!]{$k} => ".$v;
  467. }
  468. $text .= "</td></tr>";
  469. $admin_log->log_event('STAT_04',ADSTAT_L83.$logStr,'');
  470. }
  471. $text .= "<tr><td>".ADSTAT_L70."</td>";
  472. $text .= "<td><select class='tbox' name='delete_month'>\n";
  473. $match_month = date("n");
  474. for ($i = 1; $i < 13; $i++)
  475. {
  476. $selected = $match_month == $i ? " selected='selected'" : "";
  477. $text .= "<option value='{$i}'{$selected}>".nl_langinfo(constant('MON_'.$i))."</option>\n";
  478. };
  479. $text .= "</select>\n&nbsp;&nbsp;&nbsp;";
  480. $this_year = date("Y");
  481. $text .= "<select class='tbox' name='delete_year' id='export_year'>\n";
  482. for ($i = $this_year; $i > $this_year - 6; $i--)
  483. {
  484. $selected = ($this_year - 2) == $i ? " selected='selected'" : "";
  485. $text .= "<option value='{$i}'{$selected}>{$i}</option>\n";
  486. };
  487. $text .= "</select>\n</td></tr>";
  488. }
  489. $text .= "</table>
  490. <div class='buttons-bar center'>
  491. ".$frm->admin_button('delete_history',LAN_DELETE,'delete')."
  492. </div>
  493. </form>";
  494. $ns->tablerender(ADSTAT_L69, $mes->render().$text);
  495. break; // case 'history'
  496. }
  497. require_once(e_ADMIN."footer.php");
  498. function headerjs()
  499. {
  500. $script_js = "<script type=\"text/javascript\">
  501. //<![CDATA[
  502. var names = new Array();
  503. names[0] = 'export_day';
  504. names[1] = 'export_month';
  505. names[2] = 'export_year';
  506. names[3] = 'export_cumulative';
  507. var dispinfo = new Array();
  508. dispinfo[1] = new Array(); // Single day
  509. dispinfo[1][0] = '';
  510. dispinfo[1][1] = '';
  511. dispinfo[1][2] = '';
  512. dispinfo[1][3] = 'none';
  513. dispinfo[2] = new Array(); // Month
  514. dispinfo[2][0] = 'none';
  515. dispinfo[2][1] = '';
  516. dispinfo[2][2] = '';
  517. dispinfo[2][3] = 'none';
  518. dispinfo[3] = new Array(); // Year
  519. dispinfo[3][0] = 'none';
  520. dispinfo[3][1] = 'none';
  521. dispinfo[3][2] = '';
  522. dispinfo[3][3] = 'none';
  523. dispinfo[4] = new Array(); // Specials
  524. dispinfo[4][0] = 'none';
  525. dispinfo[4][1] = 'none';
  526. dispinfo[4][2] = 'none';
  527. dispinfo[4][3] = '';
  528. function setdatebox(disptype)
  529. {
  530. var target;
  531. var j;
  532. if (disptype > 4) disptype = 4;
  533. for (j = 0; j < names.length; j++)
  534. {
  535. target = document.getElementById(names[j]).style;
  536. target.display = dispinfo[disptype][j];
  537. }
  538. }
  539. function settypebox(pagetype)
  540. {
  541. var newdateformat = 1;
  542. var target1 = document.getElementById('export_date');
  543. var target2 = document.getElementById('export2_date');
  544. if (pagetype == 'page')
  545. {
  546. target1.style.display = '';
  547. target2.style.display = 'none';
  548. newdateformat = target1.value;
  549. }
  550. else
  551. {
  552. target1.style.display = 'none';
  553. target2.style.display = '';
  554. newdateformat = target2.value;
  555. }
  556. setdatebox(newdateformat);
  557. }
  558. //]]>
  559. </script>\n";
  560. return $script_js;
  561. }
  562. function get_for_delete($keep_year,$keep_month = 1, $filter='*')
  563. {
  564. global $sql, $stats_list;
  565. $ret = array();
  566. // Its tedious, but the filter criteria are sufficiently tricky that its probably best to read all records and decide what can go
  567. if ($sql->db_Select('logstats','log_id'))
  568. {
  569. while ($row = $sql->db_Fetch())
  570. {
  571. $can_go = FALSE;
  572. $check = FALSE;
  573. $data_type = 'unknown';
  574. $date_info = $row['log_id'];
  575. if (($temp = strpos($date_info,':')) !== FALSE)
  576. { // its monthly browser stats and similar
  577. // echo "Checking {$date_info}, posn = {$temp} ";
  578. $data_type = substr($date_info,0,$temp);
  579. $date_info = substr($date_info,$temp+1);
  580. $check = TRUE;
  581. // echo "Date string: {$date_info}, data type: {$data_type}<br />";
  582. if (isset($stats_list[$data_type])) $data_type = $stats_list[$data_type];
  583. }
  584. list($poss_year,$poss_month,$poss_day) = explode('-',$date_info.'--',3);
  585. if (!$check)
  586. {
  587. if (is_numeric($poss_year))
  588. {
  589. $check = TRUE;
  590. if ($poss_day > 0) $data_type = 'daily'; else $data_type = 'monthly';
  591. }
  592. }
  593. if ($check)
  594. {
  595. if ($keep_year == $poss_year)
  596. {
  597. if (($poss_month > 0) && ($poss_month < $keep_month)) $can_go = TRUE;
  598. }
  599. elseif ($keep_year > $poss_year) $can_go = TRUE;
  600. }
  601. if ($can_go)
  602. {
  603. $ret[$row['log_id']] = $row['log_id']." - ".$data_type;
  604. }
  605. }
  606. }
  607. return $ret;
  608. }
  609. //---------------------------------------------
  610. // Remove page entries - prompt/list
  611. //---------------------------------------------
  612. function rempage()
  613. {
  614. $sql = e107::getDb();
  615. $ns = e107::getRender();
  616. $frm = e107::getForm();
  617. $logfile = e_LOG."logp_".date("z.Y", time()).".php";
  618. // $logfile = e_PLUGIN."log/logs/logp_".date("z.Y", time()).".php";
  619. if(is_readable($logfile))
  620. {
  621. require($logfile);
  622. }
  623. $sql -> db_Select("logstats", "*", "log_id='pageTotal' ");
  624. $row = $sql -> db_Fetch();
  625. $pageTotal = unserialize($row['log_data']);
  626. foreach($pageInfo as $url => $tmpcon) {
  627. $pageTotal[$url]['url'] = $tmpcon['url'];
  628. $pageTotal[$url]['ttlv'] += $tmpcon['ttl'];
  629. $pageTotal[$url]['unqv'] += $tmpcon['unq'];
  630. }
  631. $text = "
  632. <form method='post' action='".e_SELF."'>
  633. <table class='table adminlist'>
  634. <tr>
  635. <td style='width:30%' class='forumheader'>".ADSTAT_L29."</td>
  636. <td style='width:50%' class='forumheader'>URL</td>
  637. <td style='width:30%; text-align: center;'>".ADSTAT_L30." ...</td>
  638. </tr>
  639. ";
  640. foreach($pageTotal as $key => $page)
  641. {
  642. $text .= "
  643. <tr>
  644. <td style='width:30%'>{$key}</td>
  645. <td style='width:50%'>".$page['url']."</td>
  646. <td style='width:30%; text-align: center;'><input type='checkbox' name='remcb[]' value='{$key}' /></td>
  647. </tr>
  648. ";
  649. }
  650. $text .= "
  651. </table>
  652. <div class='buttons-bar center'>
  653. ".$frm->admin_button('remSelP', ADSTAT_L31, 'delete')."
  654. </form>
  655. ";
  656. $ns -> tablerender(ADSTAT_L32, $text);
  657. }
  658. //---------------------------------------------
  659. // Remove page entries - action
  660. //---------------------------------------------
  661. function rempagego()
  662. {
  663. global $sql, $admin_log;
  664. $sql -> db_Select("logstats", "*", "log_id='pageTotal' ");
  665. $row = $sql -> db_Fetch();
  666. $pageTotal = unserialize($row['log_data']);
  667. $logfile = e_LOG."logp_".date("z.Y", time()).".php";
  668. // $logfile = e_PLUGIN."log/logs/logp_".date("z.Y", time()).".php";
  669. if(is_readable($logfile))
  670. {
  671. require($logfile);
  672. }
  673. foreach($_POST['remcb'] as $page)
  674. {
  675. unset($pageInfo[$page]);
  676. unset($pageTotal[$page]);
  677. }
  678. $pagetotal = serialize($pageTotal);
  679. if(!$sql -> db_Update("logstats", "log_data='{$pagetotal}' WHERE log_id='pageTotal' "))
  680. {
  681. $sql -> db_Insert("logstats", "0, 'pageTotal', '{$pagetotal}' ");
  682. }
  683. $admin_log->log_event('STAT_03',ADSTAT_L80."[!br!]".implode("[!br!]",$_POST['remcb']),'');
  684. $varStart = chr(36);
  685. $quote = chr(34);
  686. $data = chr(60)."?php\n". chr(47)."* e107 website system: Log file: ".date("z:Y", time())." *". chr(47)."\n\n".
  687. $varStart."ipAddresses = ".$quote.$ipAddresses.$quote.";\n".
  688. $varStart."siteTotal = ".$quote.$siteTotal.$quote.";\n".
  689. $varStart."siteUnique = ".$quote.$siteUnique.$quote.";\n";
  690. $loop = FALSE;
  691. $data .= $varStart."pageInfo = array(\n";
  692. foreach($pageInfo as $info)
  693. {
  694. $page = preg_replace("/(\?.*)|(\_.*)|(\.php)|(\s)|(\')|(\")|(eself)|(&nbsp;)/", "", basename ($info['url']));
  695. $page = str_replace("\\", "", $page);
  696. $info['url'] = preg_replace("/(\s)|(\')|(\")|(eself)|(&nbsp;)/", "", $info['url']);
  697. $info['url'] = str_replace("\\", "", $info['url']);
  698. $page = trim($page);
  699. if($page && !strstr($page, "cache") && !strstr($page, "file:"))
  700. {
  701. if($loop){ $data .= ",\n"; }
  702. $data .= $quote.$page.$quote." => array('url' => '".$info['url']."', 'ttl' => ".$info['ttl'].", 'unq' => ".$info['unq'].")";
  703. $loop = 1;
  704. }
  705. }
  706. $data .= "\n);\n\n?". chr(62);
  707. if ($handle = fopen($logfile, 'w'))
  708. {
  709. fwrite($handle, $data);
  710. }
  711. fclose($handle);
  712. }
  713. function admin_config_adminmenu()
  714. {
  715. if (e_QUERY)
  716. {
  717. $tmp = explode(".", e_QUERY);
  718. $action = $tmp[0];
  719. }
  720. if (!isset($action) || ($action == "")) $action = "config";
  721. $var['config']['text'] = ADSTAT_L35;
  722. $var['config']['link'] = 'admin_config.php';
  723. $var['export']['text'] = ADSTAT_L36;
  724. $var['export']['link'] ='admin_config.php?export';
  725. // $var['datasets']['text'] = ADSTAT_L63;
  726. // $var['datasets']['link'] ='admin_config.php?datasets';
  727. $var['rempage']['text'] = ADSTAT_L26;
  728. $var['rempage']['link'] ='admin_config.php?rempage';
  729. $var['history']['text'] = ADSTAT_L69;
  730. $var['history']['link'] ='admin_config.php?history';
  731. show_admin_menu(ADSTAT_L39, $action, $var);
  732. }
  733. ?>