PageRenderTime 26ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/IWstats/Api/Admin.php

https://github.com/intraweb-modules13/IWstats
PHP | 225 lines | 163 code | 38 blank | 24 comment | 30 complexity | 46ea09a5945297fa027deb91a2130270 MD5 | raw file
  1. <?php
  2. class IWstats_Api_Admin extends Zikula_AbstractApi {
  3. public function reset($args) {
  4. // Security check
  5. if (!SecurityUtil::checkPermission('IWstats::', '::', ACCESS_DELETE)) {
  6. throw new Zikula_Exception_Forbidden();
  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 = DBUtil::getTables();
  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. public function deleteIp($args) {
  20. // Security check
  21. if (!SecurityUtil::checkPermission('IWstats::', '::', ACCESS_DELETE)) {
  22. throw new Zikula_Exception_Forbidden();
  23. }
  24. $table = DBUtil::getTables();
  25. $where = "";
  26. $c = $table['IWstats_column'];
  27. $where = "$c[ip] = '$args[ip]'";
  28. $items = array('skipped' => 1);
  29. if (!DBUtil::updateObject($items, 'IWstats', $where)) {
  30. return LogUtil::registerError($this->__('Error! Sorry! Deletion attempt failed.'));
  31. }
  32. return true;
  33. }
  34. public function skipModules($args) {
  35. // Security check
  36. if (!SecurityUtil::checkPermission('IWstats::', '::', ACCESS_EDIT)) {
  37. throw new Zikula_Exception_Forbidden();
  38. }
  39. $table = DBUtil::getTables();
  40. $c = $table['IWstats_column'];
  41. $where = "1=1";
  42. $items = array('skippedModule' => 0);
  43. if (!DBUTil::updateObject($items, 'IWstats', $where)) {
  44. return LogUtil::registerError($this->__('Error! Update attempt failed.'));
  45. }
  46. $items = array('skippedModule' => 1);
  47. foreach ($args['moduleId'] as $module) {
  48. $where = "$c[moduleid] = $module";
  49. if (!DBUTil::updateObject($items, 'IWstats', $where)) {
  50. return LogUtil::registerError($this->__('Error! Update attempt failed.'));
  51. }
  52. }
  53. return true;
  54. }
  55. public function summary($args) {
  56. // get the last record in summary table
  57. $table = DBUtil::getTables();
  58. $c = $table['IWstats_summary_column'];
  59. $d = $table['IWstats_column'];
  60. // get first record datetime
  61. $orderby = "$d[summarised] asc";
  62. $last = DBUtil::selectObjectArray('IWstats', '', $orderby, -1, 1);
  63. $time = DateUtil::makeTimestamp($last[0]['datetime']);
  64. $toDateTimeStamp = $time + $args['days'] * 24 * 60 * 60;
  65. // calc the period
  66. $fromDate = date('d-m-Y', $time);
  67. $toDate = date('d-m-Y', $toDateTimeStamp);
  68. $records = ModUtil::apiFunc('IWstats', 'user', 'getAllRecords', array('fromDate' => $fromDate,
  69. 'toDate' => $toDate,
  70. 'all' => 1,
  71. ));
  72. $recordsArray = array();
  73. foreach ($records as $record) {
  74. if (key_exists(substr($record['datetime'], 0, 10), $recordsArray)) {
  75. // add new information in array element
  76. $recordsArray[substr($record['datetime'], 0, 10)]['nRecords']++;
  77. if (($record['uid'] > 0))
  78. $recordsArray[substr($record['datetime'], 0, 10)]['registered']++;
  79. if (key_exists($record['moduleid'], $recordsArray[substr($record['datetime'], 0, 10)]['users'][$record['uid']]['modules'])) {
  80. $recordsArray[substr($record['datetime'], 0, 10)]['users'][$record['uid']]['modules'][$record['moduleid']]++;
  81. } else {
  82. // add a new user in users array field
  83. $recordsArray[substr($record['datetime'], 0, 10)]['users'][$record['uid']]['modules'][$record['moduleid']] = 1;
  84. }
  85. if (key_exists($record['moduleid'], $recordsArray[substr($record['datetime'], 0, 10)]['modules'])) {
  86. $recordsArray[substr($record['datetime'], 0, 10)]['modules'][$record['moduleid']]++;
  87. } else {
  88. $recordsArray[substr($record['datetime'], 0, 10)]['modules'][$record['moduleid']] = 1;
  89. }
  90. if (($record['skipped'] == 1))
  91. $recordsArray[substr($record['datetime'], 0, 10)]['skipped']++;
  92. if (($record['skippedModule'] == 1))
  93. $recordsArray[substr($record['datetime'], 0, 10)]['skippedModule']++;
  94. if (($record['isadmin'] == 1))
  95. $recordsArray[substr($record['datetime'], 0, 10)]['isadmin']++;
  96. if (!in_array($record['ip'], $recordsArray[substr($record['datetime'], 0, 10)]['ips'])) {
  97. $recordsArray[substr($record['datetime'], 0, 10)]['ips'][] = $record['ip'];
  98. }
  99. } else {
  100. // add a new element into the array
  101. $recordsArray[substr($record['datetime'], 0, 10)]['nRecords'] = 1;
  102. $recordsArray[substr($record['datetime'], 0, 10)]['registered'] = ($record['uid'] > 0) ? 1 : 0;
  103. $recordsArray[substr($record['datetime'], 0, 10)]['users'][$record['uid']]['modules'][$record['moduleid']] = 1;
  104. $recordsArray[substr($record['datetime'], 0, 10)]['ips'][] = $record['ip'];
  105. $recordsArray[substr($record['datetime'], 0, 10)]['datetime'] = substr($record['datetime'], 0, 10) . ' 00:00:00';
  106. $recordsArray[substr($record['datetime'], 0, 10)]['modules'][$record['moduleid']] = 1;
  107. $recordsArray[substr($record['datetime'], 0, 10)]['skipped'] = ($record['skipped'] == 1) ? 1 : 0;
  108. $recordsArray[substr($record['datetime'], 0, 10)]['skippedModule'] = ($record['skippedModule'] == 1) ? 1 : 0;
  109. $recordsArray[substr($record['datetime'], 0, 10)]['isadmin'] = ($record['isadmin'] == 1) ? 1 : 0;
  110. }
  111. }
  112. ksort($recordsArray);
  113. // print_r($recordsArray);die();
  114. // save records in ddbb
  115. foreach ($recordsArray as $record) {
  116. $usersArray = array();
  117. foreach ($record['users'] as $key => $value) {
  118. $usersString = $key . '|';
  119. $usersModulesArray = array();
  120. foreach ($value['modules'] as $k => $v) {
  121. $usersModulesArray[] = $k . '=' . $v;
  122. }
  123. $usersModulesString = implode('#', $usersModulesArray);
  124. $usersArray[] = $usersString . $usersModulesString;
  125. }
  126. $users = '$' . implode('$$', $usersArray) . '$';
  127. $modulesArray = array();
  128. foreach ($record['modules'] as $key => $value) {
  129. $modulesArray[] = $key . '|' . $value;
  130. }
  131. $modules = '$' . implode('$$', $modulesArray) . '$';
  132. $item = array(
  133. 'datetime' => $record['datetime'],
  134. 'nrecords' => $record['nRecords'],
  135. 'registered' => $record['registered'],
  136. 'modules' => $modules,
  137. 'skipped' => $record['skipped'],
  138. 'skippedModule' => $record['skippedModule'],
  139. 'isadmin' => $record['isadmin'],
  140. 'users' => $users,
  141. 'nips' => count($record['ips']),
  142. );
  143. // checks if value exists in database. If exists update it. If not create it
  144. $summaryValue = DBUtil::selectObject('IWstats_summary', "$c[datetime]='$record[datetime]'");
  145. if ($summaryValue) {
  146. if (!DBUtil::updateObject($item, 'IWstats_summary', "$c[datetime]='$record[datetime]'")) {
  147. return LogUtil::registerError($this->__('Error! Creation attempt failed.'));
  148. }
  149. } else {
  150. if (!DBUtil::insertObject($item, 'IWstats_summary')) {
  151. return LogUtil::registerError($this->__('Error! Creation attempt failed.'));
  152. }
  153. }
  154. $keepDays = $this->getVar('keepDays');
  155. if (!is_numeric($keepDays) || $keepDays <= 0)
  156. $keepDays = 90;
  157. $time = time() - $keepDays * 24 * 60 * 60;
  158. $keepTime = date('Y-m-d 23:59:59', $time);
  159. $delDate = str_replace('00:00:00', '23:59:59', $record['datetime']);
  160. // set records as summarised
  161. $item = array('summarised' => 1);
  162. $where = "$d[datetime] <= '$delDate'";
  163. DBUtil::updateObject($item, 'IWstats', $where);
  164. // delete old records
  165. $where = "$d[datetime] <= '$delDate' and $d[datetime] <= '$keepTime'";
  166. DBUtil::deleteWhere('IWstats', $where);
  167. }
  168. return true;
  169. }
  170. /**
  171. * get available admin panel links
  172. *
  173. * @author Mark West
  174. * @return array array of admin links
  175. */
  176. public function getlinks() {
  177. $links = array();
  178. if (SecurityUtil::checkPermission('IWstats::', '::', ACCESS_ADMIN)) {
  179. $links[] = array('url' => ModUtil::url('IWstats', 'admin', 'view'), 'text' => $this->__('View visited pages'));
  180. $links[] = array('url' => ModUtil::url('IWstats', 'admin', 'viewStats'), 'text' => $this->__('View stats'));
  181. $links[] = array('url' => ModUtil::url('IWstats', 'admin', 'reset'), 'text' => $this->__('Reset'));
  182. $links[] = array('url' => ModUtil::url('IWstats', 'admin', 'modifyconfig'), 'text' => $this->__('Settings'));
  183. $links[] = array('url' => ModUtil::url('IWstats', 'admin', 'summary'), 'text' => $this->__('Summary'));
  184. }
  185. return $links;
  186. }
  187. }