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'), '#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; } /** * Form builder. */ 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'), ); $severity_classes = array( WATCHDOG_DEBUG => 'debug', WATCHDOG_INFO => 'info', WATCHDOG_NOTICE => 'notice', WATCHDOG_WARNING => 'warning', WATCHDOG_ERROR => 'error', WATCHDOG_CRITICAL => 'critical', WATCHDOG_ALERT => 'alert', WATCHDOG_EMERGENCY => 'emerg', ); // 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; $class = 'dblog-' . $severity_classes[$severity]; $rows[] = array( 'class' => array($class), 'data' => array( array( 'class' => 'icon', 'data' => NULL, 'title' => $severity . " = " . $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; return $form; } /** * Submit handler for Clear op. */ public function submitClear($form, &$form_state) { $this->reader->clear(); } /** * Submit handler for Apply Filter op. */ public function submitFilter($form, &$form_state) { $_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; } } } /** * Submit handler for Filter reset op. */ public function submitFilterReset($form, &$form_state) { $_SESSION['dblog_overview_filter'] = array(); } }