You are here

function geshifilter_admin_filter_conflicts in GeSHi Filter for syntax highlighting 6

Same name and namespace in other branches
  1. 5.2 geshifilter.module \geshifilter_admin_filter_conflicts()
  2. 7 geshifilter.conflicts.inc \geshifilter_admin_filter_conflicts()

Menu callback for filter conflicts page

1 call to geshifilter_admin_filter_conflicts()
geshifilter_requirements in ./geshifilter.module
Implementation of hook_requirements().
1 string reference to 'geshifilter_admin_filter_conflicts'
geshifilter_menu in ./geshifilter.module
Implementation of hook_menu().

File

./geshifilter.conflicts.inc, line 13

Code

function geshifilter_admin_filter_conflicts($check_only = FALSE) {

  // start
  $output = '';

  // check if GeSHi library is available
  $geshi_library = _geshifilter_check_geshi_library();
  if (!$geshi_library['success']) {
    if (!$check_only) {
      drupal_set_message($geshi_library['message'], 'error');
    }
    return $output;
  }
  $alerts = array();
  $conflict_detectors = array(
    'filter/0' => '_geshifilter_htmlfilter_conflicts',
    'codefilter/0' => '_geshifilter_codefilter_conflicts',
  );
  foreach (filter_formats() as $format => $input_format) {

    // Get the filters in this input format
    $filters = filter_list_format($format);

    // look if GeSHi is enabled in this input format
    if (isset($filters['geshifilter/0'])) {
      $geshifilter = $filters['geshifilter/0'];

      // Check if possibly conflicting filters are also present in input format
      foreach ($conflict_detectors as $filter_key => $conflict_detector) {

        // does this filter exist in the input format?
        if (array_key_exists($filter_key, $filters)) {
          $cfilter = $filters[$filter_key];
          $conflicts = $conflict_detector($format, $cfilter, $geshifilter);
          foreach ($conflicts as $conflict) {
            $alerts[] = array(
              l(t($input_format->name), "admin/settings/filters/{$format}"),
              $cfilter->name,
              $conflict['description'],
              $conflict['solution'],
            );
          }
        }
      }
    }
  }
  if ($check_only) {
    return count($alerts);
  }
  else {

    // show alerts
    if (count($alerts) == 0) {
      $alerts[] = array(
        array(
          'data' => t('No known filter conflicts were detected.'),
          'colspan' => 4,
        ),
      );
    }
    $header = array(
      t('Input format'),
      t('Filter'),
      t('Description'),
      t('Possible solutions'),
    );
    $output .= theme('table', $header, $alerts);
    return $output;
  }
}