You are here

function geshifilter_per_filter_language_settings_validate in GeSHi Filter for syntax highlighting 7

Validate function for per filter language settings.

Check that language tags differ between languages and fro the generic tags.

1 string reference to 'geshifilter_per_filter_language_settings_validate'
geshifilter_form_filter_admin_format_form_alter in ./geshifilter.module

File

./geshifilter.admin.inc, line 337

Code

function geshifilter_per_filter_language_settings_validate($form, &$form_state) {

  // If we do not have per filter settings, skip all this validation.
  if (isset($form_state['values']['filters']['geshifilter']['settings']['per_language_settings'])) {

    // if we're coming from the _geshifilter_filter_settings (sub)form, we should
    // take the text format into account
    $format = isset($form_state['values']['format']) ? $form_state['values']['format'] : NULL;
    $f = $format === NULL ? '' : "_{$format}";

    // language tags should differ from each other
    $languages = _geshifilter_get_available_languages();
    $values = $form_state['values']['filters']['geshifilter']['settings']['per_language_settings']['table']['languages'];
    foreach ($languages as $language1 => $language_data1) {

      // iterate over the enabled languages: skip disabled ones
      $field = "geshifilter_language_enabled_{$language1}";
      if (!(isset($values[$language1][$field]) ? $values[$language1][$field] : variable_get($field, FALSE))) {
        continue;
      }

      // get the associated tags as $tags1
      $field = "geshifilter_language_tags_{$language1}{$f}";
      if (isset($values[$language1][$field])) {
        $tags1 = _geshifilter_tag_split($values[$language1][$field]);
      }
      else {
        $tags1 = _geshifilter_tag_split(geshifilter_language_tags($language1, $format));
      }

      // also include the generic tags
      $field = "geshifilter_tags{$f}";
      $generic_tags = isset($values[$language1][$field]) ? $values[$language1][$field] : geshifilter_tags($format);
      $tags1 = array_merge($tags1, _geshifilter_tag_split($generic_tags));

      // check that other languages do not use these tags
      foreach ($languages as $language2 => $language_data2) {

        // check these tags against the tags of other enabled languages
        $field = "geshifilter_language_enabled_{$language2}";
        if ($language1 == $language2 || !(isset($values[$language2][$field]) ? $values[$language2][$field] : variable_get($field, FALSE))) {
          continue;
        }

        // get tags for $language2, or skip when not in $form_state['values']
        $field = "geshifilter_language_tags_{$language2}{$f}";
        if (isset($values[$language2][$field])) {
          $tags2 = _geshifilter_tag_split($values[$language2][$field]);
        }
        else {
          continue;
        }

        // and now we can check tags1 against tags2
        foreach ($tags1 as $tag1) {
          foreach ($tags2 as $tag2) {
            if ($tag1 == $tag2) {
              form_set_error("filters][geshifilter][settings][per_language_settings][table][languages][{$language2}][geshifilter_language_tags_{$language2}{$f}", t('GeShi Filter: The language tags should differ between languages and from the generic tags.'));
            }
          }
        }
      }
    }
  }
  return $form;
}