Browse Source

Refactored overview form to use an Overview form object. Filter persistence OK.

Frederic G. MARAND 9 years ago
parent
commit
305a350392
3 changed files with 223 additions and 132 deletions
  1. 199 0
      lib/Drupal/redis_logger/Form/Overview.php
  2. 22 132
      redis_logger.admin.inc
  3. 2 0
      redis_logger.info

+ 199 - 0
lib/Drupal/redis_logger/Form/Overview.php

@@ -0,0 +1,199 @@
+<?php
+/**
+ * @file
+ * Logger Overview form
+ */
+
+namespace Drupal\redis_logger\Form;
+
+
+use Redis\Logger\Reader;
+
+class Overview {
+
+  /**
+   * @var \Redis\Logger\Reader
+   */
+  protected $reader;
+
+  public function __construct(Reader $reader) {
+    $this->reader = $reader;
+  }
+
+  /**
+   * Helper for the Redis logger filter form builder.
+   *
+   * @param \Redis\Logger\Reader $reader
+   *
+   * @return array
+   */
+  protected function getFilters() {
+    $filters = array();
+
+    $filters['type'] = array(
+      'title' => t('Type'),
+      'options' => $this->reader->getChannels(),
+    );
+
+    $filters['severity'] = array(
+      'title' => t('Severity'),
+      'options' => $this->reader->getSettings()->getSeverityLevels(),
+    );
+
+    return $filters;
+  }
+
+  /**
+   * Form constructor for the form that clears out the log.
+   *
+   * TODO implement.
+   *
+   * @see dblog_clear_log_submit()
+   * @ingroup forms
+   */
+  protected function buildClear(array $form) {
+    $form['redis_logger_clear'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Clear log messages'),
+      '#description' => t('NOT IMPLEMENTED YET. This will permanently remove the log messages from the Redis store.'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+    );
+    $form['redis_logger_clear']['clear'] = array(
+      '#type' => 'submit',
+      '#value' => t('Clear log messages'),
+      '#submit' => array('redis_logger_clear_log_submit'),
+    );
+
+    return $form;
+  }
+
+  /**
+   * Build the filter form. Shares session status with DBLog.
+   *
+   * @param array $form
+   * @param \Redis\Logger\Reader $reader
+   *
+   * @return array
+   */
+  protected function buildFilter(array $form) {
+    $filters = $this->getFilters();
+
+    $form['filters'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Filter log messages'),
+      '#collapsible' => TRUE,
+      '#collapsed' => empty($_SESSION['dblog_overview_filter']),
+    );
+    foreach ($filters as $key => $filter) {
+      $form['filters']['status'][$key] = array(
+        '#title' => $filter['title'],
+        '#type' => 'select',
+        '#multiple' => TRUE,
+        '#size' => 8,
+        '#options' => $filter['options'],
+      );
+      if (!empty($_SESSION['dblog_overview_filter'][$key])) {
+        $form['filters']['status'][$key]['#default_value'] = $_SESSION['dblog_overview_filter'][$key];
+      }
+    }
+
+    $form['filters']['actions'] = array(
+      '#type' => 'actions',
+      '#attributes' => array('class' => array('container-inline')),
+    );
+    $form['filters']['actions']['submit'] = array(
+      '#type' => 'submit',
+      '#value' => t('Filter'),
+      '#submit' => array('redis_logger_filter_submit'),
+    );
+    if (!empty($_SESSION['dblog_overview_filter'])) {
+      $form['filters']['actions']['reset'] = array(
+        '#type' => 'submit',
+        '#value' => t('Reset'),
+        '#submit' => array('redis_logger_filter_reset_submit'),
+      );
+    }
+    return $form;
+  }
+
+  public function build($form, &$form_state) {
+    $reader = $this->reader;
+    $severity_levels = $reader->getSettings()->getSeverityLevels();
+
+    $base_form = $form;
+    $form['redis_logger_filter_form'] = $this->buildFilter($base_form);
+    $form['redis_logger_clear_log_form'] = $this->buildClear($base_form);
+
+    $header = array(
+      t('Level'),
+      t('Count'),
+      t('Type'),
+      t('Source'), // file + line
+      t('Message'),
+    );
+
+    // TODO pager
+    $templates = $reader->getTemplates();
+
+    $regex = $reader->getSettings()->getSplittingRegex();
+    $rows = array();
+    foreach ($templates as $template) {
+      preg_match($regex, $template, $matches);
+      list(, $channel, $severity, $template) = $matches;
+      $rows[] = array(
+        $severity_levels[$severity],
+        rand(1, 100),
+        $channel,
+        'somefile.module+' . rand(1, 500),
+        l($template, 'admin/reports/redis/logger/' . $template),
+      );
+    }
+
+    $form['redis_logger_table'] = array(
+      '#theme' => 'table',
+      '#header' => $header,
+      '#rows' => $rows,
+      '#attributes' => array('id' => 'admin-dblog'),
+      '#empty' => t('No log messages available.'),
+    );
+
+    $form_state['reader'] = $reader;
+    $form['#submit'][] = 'redis_logger_form_overview_submit';
+    $form['#validate'][] = 'redis_logger_form_overview_validate';
+    return $form;
+  }
+
+  public function validate($form, &$form_state) {
+    dsm(__METHOD__);
+  }
+
+  public function submit($form, &$form_state) {
+    dsm(__METHOD__);
+
+  }
+
+  public function submitClear($form, &$form_state) {
+    dsm(__METHOD__);
+
+  }
+
+  public function submitFilter($form, &$form_state) {
+    dsm($form_state, __METHOD__);
+    $_SESSION['dblog_overview_filter']['type'] = $_SESSION['dblog_overview_filter']['severity'] = array();
+    if (isset($form_state['values']['type'])) {
+      foreach ($form_state['values']['type'] as $channel) {
+        $_SESSION['dblog_overview_filter']['type'][$channel] = $channel;
+      }
+    }
+    if (isset($form_state['values']['severity'])) {
+      foreach ($form_state['values']['severity'] as $severity) {
+        $_SESSION['dblog_overview_filter']['severity'][$severity] = $severity;
+      }
+    }
+  }
+
+  public function submitFilterReset($form, &$form_state) {
+    $_SESSION['dblog_overview_filter'] = array();
+  }
+}

+ 22 - 132
redis_logger.admin.inc

@@ -1,4 +1,5 @@
 <?php
+use Drupal\redis_logger\Form\Overview;
 use Redis\Logger\Reader;
 
 /**
@@ -6,49 +7,34 @@ use Redis\Logger\Reader;
  * Administrative controllers for the Redis Logger module.
  */
 
-function redis_logger_form_overview($form, $form_state) {
+function redis_logger_form_overview($form, &$form_state) {
   $redis = Redis_Client::getClient();
   $reader = new Reader($redis);
-  $severity_levels = $reader->getSettings()->getSeverityLevels();
-
-  $base_form = $form;
-  $form['redis_logger_filter_form'] = _redis_logger_filter_form($base_form, $reader);
-  $form['redis_logger_clear_log_form'] = _redis_logger_clear_log_form($base_form);
+  $overview = new Overview($reader);
+  $form = $overview->build($form, $form_state);
+  return $form;
+}
 
-  $header = array(
-    t('Type'),
-    t('Level'),
-    t('Message template'),
-    t('Occurrences'),
-  );
+function redis_logger_form_overview_submit($form, &$form_state) {
+  dsm('Submitting overview');
+}
 
-  $templates = $reader->getTemplates();
-  dsm($templates);
-  $regex = $reader->getSettings()->getSplittingRegex();
-  $rows = array();
-  foreach ($templates as $template) {
-    preg_match($regex, $template, $matches);
-    list(, $channel, $severity, $template) = $matches;
-    $occurrences = l(t('Occurrences'), 'admin/reports/redis/logger/' . $template);
-    $rows[] = array(
-      $channel,
-      $severity_levels[$severity],
-      $template,
-      $occurrences,
-    );
-  }
+function redis_logger_form_overview_validate($form, &$form_state) {
+  dsm('Validating overview');
+}
 
-  $form['redis_logger_table'] = array(
-    '#theme' => 'table',
-    '#header' => $header,
-    '#rows' => $rows,
-    '#attributes' => array('id' => 'admin-dblog'),
-    '#empty' => t('No log messages available.'),
-  );
-  $build['dblog_pager'] = array('#theme' => 'pager');
+function redis_logger_clear_log_submit($form, &$form_state) {
+  dsm('Submitted clear');
+}
 
+function redis_logger_filter_submit($form, &$form_state) {
+  $overview = new Overview($form_state['reader']);
+  $overview->submitFilter($form, $form_state);
+}
 
-  return $form;
+function redis_logger_filter_reset_submit($form, &$form_state) {
+  $overview = new Overview($form_state['reader']);
+  $overview->submitFilterReset($form, $form_state);
 }
 
 /**
@@ -61,99 +47,3 @@ function redis_logger_form_overview($form, $form_state) {
 function redis_logger_page_event($template) {
   return check_plain($template);
 }
-
-/**
- * Form constructor for the form that clears out the log.
- *
- * TODO implement.
- *
- * @see dblog_clear_log_submit()
- * @ingroup forms
- */
-function _redis_logger_clear_log_form($form) {
-  $form['redis_logger_clear'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Clear log messages'),
-    '#description' => t('NOT IMPLEMENTED YET. This will permanently remove the log messages from the Redis store.'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-  );
-  $form['redis_logger_clear']['clear'] = array(
-    '#type' => 'submit',
-    '#value' => t('Clear log messages'),
-    '#submit' => array('redis_logger_clear_log_submit'),
-  );
-
-  return $form;
-}
-
-/**
- * Helper for the Redis logger filter form builder.
- *
- * @param \Redis\Logger\Reader $reader
- *
- * @return array
- */
-function _redis_logger_filters(Reader $reader) {
-  $filters = array();
-
-  $filters['type'] = array(
-    'title' => t('Type'),
-    'options' => $reader->getChannels(),
-  );
-
-  $filters['severity'] = array(
-    'title' => t('Severity'),
-    'options' => $reader->getSettings()->getSeverityLevels(),
-  );
-
-  return $filters;
-}
-
-/**
- * Build the filter form. Shares session status with DBLog.
- *
- * @param array $form
- * @param \Redis\Logger\Reader $reader
- *
- * @return mixed
- */
-function _redis_logger_filter_form($form, Reader $reader) {
-  $filters = _redis_logger_filters($reader);
-
-  $form['filters'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Filter log messages'),
-    '#collapsible' => TRUE,
-    '#collapsed' => empty($_SESSION['dblog_overview_filter']),
-  );
-  foreach ($filters as $key => $filter) {
-    $form['filters']['status'][$key] = array(
-      '#title' => $filter['title'],
-      '#type' => 'select',
-      '#multiple' => TRUE,
-      '#size' => 8,
-      '#options' => $filter['options'],
-    );
-    if (!empty($_SESSION['dblog_overview_filter'][$key])) {
-      $form['filters']['status'][$key]['#default_value'] = $_SESSION['dblog_overview_filter'][$key];
-    }
-  }
-
-  $form['filters']['actions'] = array(
-    '#type' => 'actions',
-    '#attributes' => array('class' => array('container-inline')),
-  );
-  $form['filters']['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Filter'),
-  );
-  if (!empty($_SESSION['dblog_overview_filter'])) {
-    $form['filters']['actions']['reset'] = array(
-      '#type' => 'submit',
-      '#value' => t('Reset')
-    );
-  }
-  return $form;
-
-}

+ 2 - 0
redis_logger.info

@@ -4,6 +4,8 @@ php = 5.4
 core = 7.x
 package = Performance and scalability
 
+; TODO remove before release
+dependencies[] = devel
 dependencies[] = xautoload
 
 configure = admin/reports/redis/logger