You are here

function geshifilter_admin_filter_conflicts in GeSHi Filter for syntax highlighting 7

Same name and namespace in other branches
  1. 5.2 geshifilter.module \geshifilter_admin_filter_conflicts()
  2. 6 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
Implements hook_requirements().
1 string reference to 'geshifilter_admin_filter_conflicts'
geshifilter_menu in ./geshifilter.module
Implements hook_menu().

File

./geshifilter.conflicts.inc, line 13

Code

function geshifilter_admin_filter_conflicts($check_only = FALSE) {
  global $user;

  // start
  $output = '';

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

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

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

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

        // does this filter exist in the text 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/config/content/formats/{$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', array(
      'header' => $header,
      'rows' => $alerts,
    ));
    return $output;
  }
}