log_filter.module 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?php
  2. /**
  3. * @file
  4. * Drupal Log Filter module
  5. */
  6. /**
  7. * Implements hook_permission().
  8. *
  9. * Define permission types (Drupal API function).
  10. *
  11. * @return array
  12. */
  13. function log_filter_permission() {
  14. return array(
  15. 'log_filter administer' => array(
  16. 'title' => t('Administer log filtering'),
  17. 'restrict access' => TRUE,
  18. ),
  19. 'log_filter edit filters' => array(
  20. 'title' => t('Create/edit/delete saveable log filters'),
  21. ),
  22. 'log_filter remove logs' => array(
  23. 'title' => t('Remove logs'),
  24. 'restrict access' => TRUE,
  25. ),
  26. );
  27. }
  28. /**
  29. * Implements hook_menu().
  30. *
  31. * Declares configuration page.
  32. *
  33. * @return array
  34. */
  35. function log_filter_menu() {
  36. $items = array(
  37. // Settings page.
  38. 'admin/config/system/log_filter' => array(
  39. 'title' => 'Log Filter',
  40. 'description' => 'Configure Log Filtering',
  41. 'page callback' => 'drupal_get_form', // hook to implement
  42. 'page arguments' => array('_log_filter_admin_form'), // name of implementing function
  43. 'access arguments' => array('log_filter administer'), // permission required
  44. 'file' => 'admin/log_filter.admin.inc',
  45. 'type' => MENU_NORMAL_ITEM,
  46. 'theme callback' => 'log_filter_use_admin_theme',
  47. ),
  48. // AJAX callback.
  49. 'log_filter/ajax/%' => array( // % ~ action
  50. 'page callback' => 'log_filter_ajax_callback',
  51. 'page arguments' => array(2), // start at that bucket index
  52. 'access callback' => TRUE,
  53. 'access arguments' => array('access site reports'), // Permission required.
  54. 'type' => MENU_CALLBACK,
  55. ),
  56. );
  57. // NB: Accessing a saved filter is done via an extra url argument after admin/reports/dblog/log_filter; see LogFilter::FILTER_NAME_ARG.
  58. // And accessing a log event is done by adding /NUMBER to the end of url (saved filter or not).
  59. // Take over the url of dblog's default viewer.
  60. $i = 0;
  61. // Overwrite dblog's default viewer.
  62. $items['admin/reports/dblog'] = array(
  63. 'title' => 'Recent log messages',
  64. 'description' => 'View logged events using filters',
  65. 'page callback' => 'drupal_get_form', // Hook to implement.
  66. 'page arguments' => array('log_filter_form'), // Name of implementing function.
  67. 'access arguments' => array('access site reports'), // Permission required.
  68. 'type' => MENU_NORMAL_ITEM,
  69. 'theme callback' => 'log_filter_use_admin_theme', // Do always administrative theme, if set so.
  70. 'weight' => -1,
  71. );
  72. $items['admin/reports/dblog/log_filter'] = array(
  73. 'type' => MENU_DEFAULT_LOCAL_TASK,
  74. 'title' => 'Recent log messages',
  75. 'weight' => ++$i,
  76. );
  77. $items['admin/reports/dblog/log_filter_settings'] = array(
  78. 'title' => 'Log filter settings',
  79. 'description' => 'Configure Log Filtering',
  80. 'page callback' => 'drupal_get_form', // hook to implement
  81. 'page arguments' => array('_log_filter_admin_form'), // name of implementing function
  82. 'access arguments' => array('log_filter administer'), // permission required
  83. 'file' => 'admin/log_filter.admin.inc',
  84. 'type' => MENU_LOCAL_TASK,
  85. 'theme callback' => 'log_filter_use_admin_theme', // Do always administrative theme, if set so.
  86. 'weight' => ++$i,
  87. );
  88. // Add dblog's default viewer as a tab.
  89. if (module_exists('dblog')) {
  90. $items['admin/reports/dblog/dblog_view'] = array(
  91. 'title' => 'Standard dblog view',
  92. 'description' => 'View events that have recently been logged.',
  93. 'page callback' => 'dblog_overview',
  94. 'access arguments' => array('access site reports'),
  95. 'type' => MENU_LOCAL_TASK,
  96. 'file path' => drupal_get_path('module', 'dblog'),
  97. 'file' => 'dblog.admin.inc',
  98. 'theme callback' => 'log_filter_use_admin_theme', // Do always administrative theme, if set so.
  99. 'weight' => ++$i,
  100. );
  101. }
  102. return $items;
  103. }
  104. /**
  105. * Forces administrative on log view pages, unless this feature has been turned off on this module's settings page.
  106. *
  107. * @return string
  108. */
  109. function log_filter_use_admin_theme() {
  110. return variable_get('log_filter_admintheme', TRUE) ? variable_get('admin_theme') : (
  111. !empty($GLOBALS['user']->theme) ? $GLOBALS['user']->theme : variable_get('theme_default', 'seven')
  112. );
  113. }
  114. /**
  115. * Removes clear log form from standard dblog log view page.
  116. *
  117. * @param array &$form
  118. * @param array &$form_state
  119. * @return void
  120. */
  121. function log_filter_form_dblog_clear_log_form_alter(&$form, &$form_state) {
  122. $form['dblog_clear'] = array();
  123. }
  124. /**
  125. * Defines log viewer form and GUI.
  126. *
  127. * Function name not underscore prefixed to prevent html form id starting with hyphen (unhealthy naming).
  128. *
  129. * @param array $form
  130. * @param array &$form_state
  131. * @return array
  132. */
  133. function log_filter_form($form, &$form_state) {
  134. module_load_include('inc', 'log_filter', 'LogFilter');
  135. return LogFilter::viewerForm($form, $form_state);
  136. }
  137. /**
  138. * Called when log viewer form submits.
  139. *
  140. * @param array $form
  141. * @param array &$form_state
  142. * @return void
  143. */
  144. function _log_filter_form_submit($form, &$form_state) {
  145. module_load_include('inc', 'log_filter', 'LogFilter');
  146. LogFilter::viewerFormSubmit($form, $form_state);
  147. }
  148. /**
  149. * @param array $form
  150. * @param array &$form_state
  151. * @return void
  152. */
  153. function log_filter_admin_form_submit($form, &$form_state) {
  154. module_load_include('inc', 'log_filter', 'log_filter.admin');
  155. _log_filter_admin_form_submit($form, $form_state);
  156. }
  157. /**
  158. * Access permission: 'access site reports'.
  159. *
  160. * @see LogFilter::ajaxCallback()
  161. * @param string $action
  162. * @param string $arg
  163. * Default: empty.
  164. * @return void
  165. * Sends 403 header if the expected POST vars arent set or their sanitized values evaluates to empty.
  166. */
  167. function log_filter_ajax_callback($action, $arg = '') {
  168. module_load_include('inc', 'log_filter', 'LogFilter');
  169. LogFilter::ajaxCallback($action, $arg);
  170. }