Search code examples
phpdrupalforeachdrupal-7watchdog

Checkboxes with watchdog_severity_levels()


I have this code that gets me out some checkboxes with the watchdog severities:

  /**
   * Checkbox for errors, alerts, e.t.c
   */
  foreach (watchdog_severity_levels() as $severity => $description) {
    $key = 'severity_errors' . $severity;
    $form['severity_errors'][$key] = array(
      '#type' => 'checkbox',
      '#title' => t('@description', array('@description' => drupal_ucfirst($description))),
      '#default_value' => variable_get($key, array()),  
    );
    return system_settings_form($form);
  }

I set this $key in my code as:

$key = array_filter(variable_get($key,array()));

I think this set is wrong as the drupal gets me out error. After that set of $key I call it with the following foreach statement could someone help me with that thing?

foreach ($key as $value) {
  if ($value == 'warning') {
    blablblablabla....
  }
  elseif ($value == 'notice') {
    blablablbalbal....
  }
}

Solution

  • Using your logic, you would store following keys severity_errors0, severity_errors1, severity_errors2, ... in the variable table because the $severity key of your foreach is just the index.

    Wouldn't it be easier to store an array of selected severity levels as one entry in the variable table?

    Here some example code which does the job for you:

    // Retrieve store variable
    $severity_levels = variable_get('severity_levels', array());
    
    // Declare empty options array
    $severity_options = array();
    
    // Loop through each severity level and push to options array for form
    foreach (watchdog_severity_levels() as $severity) {
        $severity_options[$severity] = t('@description', array(
            '@description' => drupal_ucfirst($severity),
        ));
    }
    
    // Generate checkbox list for given severity levels
    $form['severity_levels'] = array(
        '#type' => 'checkboxes',
        '#options' => $severity_options,
        '#default_value' => array_values($severity_levels),
    );
    
    return system_settings_form($form);
    

    Now to retrieve the selected severity levels, you do something like this:

    // Retrieve store variable
    $severity_levels = variable_get('severity_levels', array());
    
    foreach ($severity_levels as $level => $selected) {
        if (!$selected) {
            // Severity level is not selected
            continue;
        }
    
        // Severity level is selected, do your logic here
        // $level
    }