public static function LogFilter::viewerFormSubmit in Log Filter 7
Called when log viewer form submits.
Parameters
array $form:
array &$form_state:
Return value
void
1 call to LogFilter::viewerFormSubmit()
- _log_filter_form_submit in ./
log_filter.module - Called when log viewer form submits.
File
- ./
LogFilter.inc, line 895 - Drupal Log Filter module
Class
- LogFilter
- @file Drupal Log Filter module
Code
public static function viewerFormSubmit($form, &$form_state) {
try {
$values =& $form_state['values'];
$prefix = 'log_filter_';
$messages = array();
$settings = array(
'only_own' => !array_key_exists($prefix . 'only_own', $values) ? FALSE : $values[$prefix . 'only_own'],
'delete_logs_max' => !array_key_exists($prefix . 'delete_logs_max', $values) ? '' : $values[$prefix . 'delete_logs_max'],
'translate' => $values[$prefix . 'translate'],
'only_own' => !array_key_exists($prefix . 'only_own', $values) ? FALSE : $values[$prefix . 'only_own'],
'pager_range' => ($v = (int) $values[$prefix . 'pager_range']) > -1 ? $v > self::PAGE_RANGE_MAX ? self::PAGE_RANGE_MAX : $v : variable_get('log_filter_pgrng', self::PAGE_RANGE_DEFAULT),
);
$submitted = array(
'mode' => $values[$prefix . 'mode'],
'filter' => array(
'name' => '',
'origin' => '',
'name_suggest' => '',
'description' => '',
'require_admin' => !array_key_exists($prefix . 'require_admin', $values) ? FALSE : $values[$prefix . 'require_admin'],
),
);
$use_form_values = $save = FALSE;
switch ($mode = $submitted['mode']) {
case 'default':
// Use default values.
break;
case 'adhoc':
// Get specs from form.
$use_form_values = TRUE;
$submitted['filter']['origin'] = $values[$prefix . 'origin'];
// ~ Hidden field.
break;
case 'stored':
// Saved filter.
// Just get filter name; in stored mode we do absolutely nothing at submission but establishing the filter's name.
// Whether the filter require_admin and user has that permission will be checked at form build - no reason to check twice.
if (!($submitted['filter']['name'] = $filter_name = $values[$prefix . 'name'])) {
throw new Exception('Mode[' . $mode . '], empty name[' . $filter_name . '].', self::$_errorCodes['filter_name_composition']);
}
break;
case 'create':
// Always AJAX-handled.
throw new Exception('Mode[' . $mode . '] not allowed at form submission.', self::$_errorCodes['algo']);
break;
case 'edit':
case 'delete_filter':
// Get name.
if (!($submitted['filter']['name'] = $filter_name = $values[$prefix . 'name'])) {
throw new Exception('Mode[' . $mode . '], empty name[' . $filter_name . '].', self::$_errorCodes['filter_name_composition']);
}
$success = TRUE;
// Check CRUD permission.
if (!user_access('log_filter edit filters')) {
$success = FALSE;
// Horrible; have to make almost exactly same message, because of shortcomings of the localization regime.
switch ($mode) {
case 'edit':
watchdog('log_filter', 'Won\'t edit the filter \'!name\' because user !user doesn\'t have \'log_filter edit filters\' permission.', array(
'!name' => $filter_name,
'!user' => $GLOBALS['user']->name,
), WATCHDOG_WARNING);
drupal_set_message(t('Cannot edit the filter \'!name\', because you don\'t have permission to edit log filters.', array(
'!name' => $filter_name,
)), 'warning');
break;
default:
// delete
watchdog('log_filter', 'Won\'t delete the filter \'!name\' because user !user doesn\'t have \'log_filter edit filters\' permission.', array(
'!name' => $filter_name,
'!user' => $GLOBALS['user']->name,
), WATCHDOG_WARNING);
drupal_set_message(t('Cannot delete the filter \'!name\', because you don\'t have permission to edit log filters.', array(
'!name' => $filter_name,
)), 'warning');
}
}
elseif (!($require_admin = db_select('log_filter')
->fields('log_filter', array(
'require_admin',
))
->condition('name', $filter_name, '=')
->execute()
->fetchField())) {
if ($require_admin === FALSE) {
// Doesn't exist.
$success = FALSE;
/* drupal_set_message(
t('The filter \'!name\' doesn\'t exist.', array('!name' => $filter_name)),
'warning'
); */
$messages[] = array(
t('The filter \'!name\' doesn\'t exist.', array(
'!name' => $filter_name,
)),
'warning',
);
}
// else... the filter doesnt require admin permission.
}
elseif (!user_access('log_filter administer')) {
$success = FALSE;
}
if ($success) {
switch ($mode) {
case 'edit':
// Get specs from form, and save to database.
$use_form_values = TRUE;
$save = TRUE;
$submitted['filter']['description'] = $values[$prefix . 'description'];
// Change mode.
$submitted['mode'] = $mode = 'stored';
break;
default:
// delete
global $user;
db_delete('log_filter')
->condition('name', $filter_name, '=')
->execute();
watchdog('log_filter', 'User (%uid) %name deleted the log filter \'!filter\'.', array(
'%uid' => $user->uid,
'%name' => $user->name,
'!filter' => $filter_name,
), WATCHDOG_INFO);
$messages[] = array(
t('Deleted the filter \'!name\'.', array(
'!name' => $filter_name,
)),
);
// Change mode.
$submitted['mode'] = $mode = 'default';
}
}
else {
$use_form_values = $save = FALSE;
// Change mode.
$submitted['mode'] = $mode = 'default';
}
break;
default:
throw new Exception('Unsupported mode[' . $mode . '].', self::$_errorCodes['algo']);
}
// Load values from form.
if ($use_form_values) {
$fields_conditions =& self::$_fields['conditions'];
$conditions = array();
foreach ($fields_conditions as $name) {
switch ($name) {
case 'time_range':
$conditions[$name] = ($v = trim($values[$prefix . $name])) ? $v : '';
break;
case 'role':
$conditions[$name] = ($v = trim($values[$prefix . $name])) > 0 ? $v : -1;
break;
case 'uid':
// Accepts zero.
$conditions[$name] = ($v = trim($values[$prefix . $name])) > 0 || $v === '0' || $v === 0 ? $v : -1;
break;
case 'time_from':
$conditions[$name] = $conditions['time_range'] ? '' : (($v = trim($values[$prefix . $name])) ? $v : '');
break;
case 'time_from_proxy':
if (!$save) {
// Because save doesnt use the proxy field.
$conditions[$name] = !$conditions['time_from'] ? '' : $values[$prefix . $name];
}
break;
case 'time_to':
$conditions[$name] = $conditions['time_range'] ? '' : (($v = trim($values[$prefix . $name])) ? $v : '');
break;
case 'time_to_proxy':
if (!$save) {
// Because save doesnt use the proxy field.y
$conditions[$name] = !$conditions['time_to'] ? '' : $values[$prefix . $name];
}
break;
case 'severity':
$arr = $values[$prefix . $name];
$vals = array();
foreach ($arr as $k => $v) {
if ($v) {
if ('' . $k == '-1') {
$vals = array();
break;
}
else {
$vals[] = $k;
}
}
}
$conditions[$name] = $vals;
break;
case 'type_wildcard':
$conditions[$name] = $values[$prefix . $name] ? TRUE : FALSE;
break;
case 'type':
// Dont remember type list (may be very long), if wildcard on.
$conditions[$name] = $conditions['type_wildcard'] ? array() : array_combine($a = explode("\n", str_replace("\r", '', $values[$prefix . $name])), $a);
if ($save) {
unset($conditions['type_wildcard']);
}
break;
default:
$conditions[$name] = trim($values[$prefix . $name]);
}
}
unset($fields_conditions);
$submitted['conditions'] =& $conditions;
$fields_order_by =& self::$_fields['order_by'];
$order_by = array();
for ($i = 1; $i < 10; $i++) {
if (array_key_exists($key = $prefix . $fields_order_by[0] . $i, $values)) {
if ($key = $values[$key]) {
if (!$save) {
$order_by[] = array(
$key,
$values[$prefix . $fields_order_by[1] . $i],
);
}
else {
$order_by[] = array(
$key,
$values[$prefix . $fields_order_by[1] . $i] ? 'DESC' : 'ASC',
);
}
}
}
else {
break;
}
}
$submitted['order_by'] =& $order_by;
unset($order_by, $fields_order_by);
}
if ($save) {
// edit mode.
$success = TRUE;
try {
self::_saveFilter($filter_name, $submitted);
} catch (Exception $xc) {
self::_errorHandler($xc);
$success = FALSE;
$messages[] = array(
t('Failed to update filter \'!name\'.', array(
'!name' => $filter_name,
)),
'warning',
);
}
// Change mode.
if ($success) {
$submitted['mode'] = $mode = 'stored';
}
else {
$submitted['mode'] = $mode = 'default';
}
}
// Clear conditions and order_by from vars to be passed to session, unless adhoc filter.
if ($mode != 'adhoc') {
unset($submitted['conditions'], $submitted['order_by']);
}
// Pass to session.
$session = array(
'settings' => $settings,
'submitted' => $submitted,
);
if ($messages) {
$session['messages'] = $messages;
}
if (module_exists('state')) {
State::sessionSet('module', 'log_filter', $session);
}
else {
drupal_session_start();
if (!isset($_SESSION['module'])) {
$_SESSION['module'] = array(
'log_filter' => $session,
);
}
else {
$_SESSION['module']['log_filter'] = $session;
}
}
} catch (Exception $xc) {
self::_errorHandler($xc);
drupal_set_message($xc
->getMessage(), 'error');
}
}