/pnadminapi.php

https://github.com/intraweb-modules12/IWstats · PHP · 216 lines · 159 code · 42 blank · 15 comment · 33 complexity · ad9a3261d2371321361f640e6d44e7c0 MD5 · raw file

  1. <?php
  2. function IWstats_adminapi_reset($args) {
  3. $dom = ZLanguage::getModuleDomain('IWstats');
  4. // Security check
  5. if (!SecurityUtil::checkPermission('IWstats::', '::', ACCESS_DELETE)) {
  6. return LogUtil::registerError(__('Sorry! No authorization to access this module.', $dom));
  7. }
  8. // delete records from database
  9. $delete = DateUtil::getDatetime(time() - $args['deleteFromDays'] * 24 * 60 * 60);
  10. // get the last record in summary table
  11. $table = pnDBGetTables();
  12. $c = $table['IWstats_column'];
  13. $where = "$c[datetime] < '$delete'";
  14. DBUtil::deleteWhere('IWstats', $where);
  15. // Return the id of the newly created item to the calling process
  16. return true;
  17. }
  18. // skipped value to 1 for IP
  19. function IWstats_adminapi_deleteIp($args) {
  20. $dom = ZLanguage::getModuleDomain('IWstats');
  21. // Security check
  22. if (!SecurityUtil::checkPermission('IWstats::', '::', ACCESS_DELETE)) {
  23. return LogUtil::registerError(__('Sorry! No authorization to access this module.', $dom));
  24. }
  25. $table = pnDBGetTables();
  26. $where = "";
  27. $c = $table['IWstats_column'];
  28. $where = "$c[ip] = '$args[ip]'";
  29. $items = array('skipped' => 1);
  30. if (!DBUtil::updateObject($items, 'IWstats', $where)) {
  31. return LogUtil::registerError(__('Error! Sorry! Deletion attempt failed.', $dom));
  32. }
  33. return true;
  34. }
  35. function IWstats_adminapi_skipModules($args) {
  36. $dom = ZLanguage::getModuleDomain('IWstats');
  37. // Security check
  38. if (!SecurityUtil::checkPermission('IWstats::', '::', ACCESS_EDIT)) {
  39. return LogUtil::registerError(__('Sorry! No authorization to access this module.', $dom));
  40. }
  41. $table = pnDBGetTables();
  42. $c = $table['IWstats_column'];
  43. $where = "1=1";
  44. $items = array('skippedModule' => 0);
  45. if (!DBUTil::updateObject($items, 'IWstats', $where)) {
  46. return LogUtil::registerError(__('Error! Update attempt failed.', $dom));
  47. }
  48. $items = array('skippedModule' => 1);
  49. foreach ($args['moduleId'] as $module) {
  50. $where = "$c[moduleid] = $module";
  51. if (!DBUTil::updateObject($items, 'IWstats', $where)) {
  52. return LogUtil::registerError(__('Error! Update attempt failed.', $dom));
  53. }
  54. }
  55. return true;
  56. }
  57. function IWstats_adminapi_summary($args) {
  58. $dom = ZLanguage::getModuleDomain('IWstats');
  59. // get the last record in summary table
  60. $table = pnDBGetTables();
  61. $c = $table['IWstats_summary_column'];
  62. $orderby = "$c[datetime] desc";
  63. $last = array();
  64. if (!isset($args['last'])) {
  65. $last = DBUtil::selectObjectArray('IWstats_summary', '', $orderby, -1, 1);
  66. if ($last === false) {
  67. return LogUtil::registerError(__('Error! Could not load data.', $dom));
  68. }
  69. } else {
  70. $last[0]['datetime'] = $args['last'];
  71. }
  72. if (count($last) == 0 && !isset($args['last'])) {
  73. $last[0]['datetime'] = "2011-05-10 00:00:00";
  74. }
  75. $time = DateUtil::makeTimestamp($last[0]['datetime']);
  76. $toDateTimeStamp = $time + $args['days'] * 24 * 60 * 60;
  77. // calc the period
  78. $fromDate = date('d-m-Y', $time + 24 * 60 * 60);
  79. $toDate = date('d-m-Y', $toDateTimeStamp);
  80. if ($toDateTimeStamp > time() - 24 * 60 * 60)
  81. $toDate = date('d-m-Y', time() - 24 * 60 * 60);
  82. $records = pnModAPIFunc('IWstats', 'user', 'getAllRecords', array('fromDate' => $fromDate,
  83. 'toDate' => $toDate,
  84. 'all' => 1,
  85. ));
  86. // to aviod stop due to periods with zero visits
  87. if (!$records && DateUtil::makeTimestamp($last[0]['datetime']) < time()) {
  88. $last = date('Y-m-d 00:00:00', DateUtil::makeTimestamp($last[0]['datetime']) + $args['days'] * 24 * 60 * 60);
  89. pnModAPIFunc('IWstats', 'admin', 'summary', array('last' => $last,
  90. 'days' => $args['days'],
  91. 'deleteFromDays' => $args['deleteFromDays'],
  92. ));
  93. }
  94. $recordsArray = array();
  95. foreach ($records as $record) {
  96. if (key_exists(substr($record['datetime'], 0, 10), $recordsArray)) {
  97. // add new information in array element
  98. $recordsArray[substr($record['datetime'], 0, 10)]['nRecords']++;
  99. if (($record['uid'] > 0))
  100. $recordsArray[substr($record['datetime'], 0, 10)]['registered']++;
  101. if (key_exists($record['moduleid'], $recordsArray[substr($record['datetime'], 0, 10)]['users'][$record['uid']]['modules'])) {
  102. $recordsArray[substr($record['datetime'], 0, 10)]['users'][$record['uid']]['modules'][$record['moduleid']]++;
  103. } else {
  104. // add a new user in users array field
  105. $recordsArray[substr($record['datetime'], 0, 10)]['users'][$record['uid']]['modules'][$record['moduleid']] = 1;
  106. }
  107. if (key_exists($record['moduleid'], $recordsArray[substr($record['datetime'], 0, 10)]['modules'])) {
  108. $recordsArray[substr($record['datetime'], 0, 10)]['modules'][$record['moduleid']]++;
  109. } else {
  110. $recordsArray[substr($record['datetime'], 0, 10)]['modules'][$record['moduleid']] = 1;
  111. }
  112. if (($record['skipped'] == 1))
  113. $recordsArray[substr($record['datetime'], 0, 10)]['skipped']++;
  114. if (($record['skippedModule'] == 1))
  115. $recordsArray[substr($record['datetime'], 0, 10)]['skippedModule']++;
  116. if (($record['isadmin'] == 1))
  117. $recordsArray[substr($record['datetime'], 0, 10)]['isadmin']++;
  118. if (!in_array($record['ip'], $recordsArray[substr($record['datetime'], 0, 10)]['ips'])) {
  119. $recordsArray[substr($record['datetime'], 0, 10)]['ips'][] = $record['ip'];
  120. }
  121. } else {
  122. // add a new element into array
  123. $recordsArray[substr($record['datetime'], 0, 10)]['nRecords'] = 1;
  124. $recordsArray[substr($record['datetime'], 0, 10)]['registered'] = ($record['uid'] > 0) ? 1 : 0;
  125. $recordsArray[substr($record['datetime'], 0, 10)]['users'][$record['uid']]['modules'][$record['moduleid']] = 1;
  126. $recordsArray[substr($record['datetime'], 0, 10)]['ips'][] = $record['ip'];
  127. $recordsArray[substr($record['datetime'], 0, 10)]['datetime'] = substr($record['datetime'], 0, 10) . ' 00:00:00';
  128. $recordsArray[substr($record['datetime'], 0, 10)]['modules'][$record['moduleid']] = 1;
  129. $recordsArray[substr($record['datetime'], 0, 10)]['skipped'] = ($record['skipped'] == 1) ? 1 : 0;
  130. $recordsArray[substr($record['datetime'], 0, 10)]['skippedModule'] = ($record['skippedModule'] == 1) ? 1 : 0;
  131. $recordsArray[substr($record['datetime'], 0, 10)]['isadmin'] = ($record['isadmin'] == 1) ? 1 : 0;
  132. }
  133. }
  134. ksort($recordsArray);
  135. // save records in ddbb
  136. foreach ($recordsArray as $record) {
  137. $usersArray = array();
  138. foreach ($record['users'] as $key => $value) {
  139. $usersString = $key . '|';
  140. $usersModulesArray = array();
  141. foreach ($value['modules'] as $k => $v) {
  142. $usersModulesArray[] = $k . '=' . $v;
  143. }
  144. $usersModulesString = implode('#', $usersModulesArray);
  145. $usersArray[] = $usersString . $usersModulesString;
  146. }
  147. $users = '$' . implode('$$', $usersArray) . '$';
  148. $modulesArray = array();
  149. foreach ($record['modules'] as $key => $value) {
  150. $modulesArray[] = $key . '|' . $value;
  151. }
  152. $modules = '$' . implode('$$', $modulesArray) . '$';
  153. $item = array(
  154. 'datetime' => $record['datetime'],
  155. 'nrecords' => $record['nRecords'],
  156. 'registered' => $record['registered'],
  157. 'modules' => $modules,
  158. 'skipped' => $record['skipped'],
  159. 'skippedModule' => $record['skippedModule'],
  160. 'isadmin' => $record['isadmin'],
  161. 'users' => $users,
  162. 'nips' => count($record['ips']),
  163. );
  164. if (!DBUtil::insertObject($item, 'IWstats_summary')) {
  165. return LogUtil::registerError(__('Error! Creation attempt failed.', $dom));
  166. }
  167. }
  168. // delete records from database
  169. $delete = DateUtil::getDatetime(time() - $args['deleteFromDays'] * 24 * 60 * 60);
  170. $c = $table['IWstats_column'];
  171. $where = "$c[datetime] < '$delete'";
  172. DBUtil::deleteWhere('IWstats', $where);
  173. return true;
  174. }