Created
April 13, 2011 10:40
-
-
Save boombatower/917337 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
commit a67d2577941e1b2b00fb1583e8bde4dc944794ae | |
Author: Jimmy Berry <jimmy@boombatower.com> | |
Date: Wed Apr 13 05:33:56 2011 -0500 | |
Support libraries API. | |
diff --git geshifilter.admin.inc geshifilter.admin.inc | |
index 1ddd524..29da716 100644 | |
--- geshifilter.admin.inc | |
+++ geshifilter.admin.inc | |
@@ -58,7 +58,7 @@ function geshifilter_admin_general_settings($form, &$form_state) { | |
$form = array(); | |
// Try to load GeSHi library and get version if successful. | |
- $geshi_library = _geshifilter_check_geshi_library(); | |
+ $geshi_library = libraries_load('geshi'); | |
// GeSHi library settings (constant GESHI_VERSION is defined in GeSHi library) | |
$form['geshifilter_library'] = array( | |
@@ -67,15 +67,8 @@ function geshifilter_admin_general_settings($form, &$form_state) { | |
'#description' => t('The GeSHi filter requires the GeSHi library (which needs to be <a href="!geshi">downloaded</a> and installed seperately).', | |
array('!geshi' => url('http://qbnz.com/highlighter/'))), | |
'#collapsible' => TRUE, | |
- '#collapsed' => $geshi_library['success'], | |
+ '#collapsed' => $geshi_library['loaded'], | |
); | |
- $form['geshifilter_library']['geshifilter_geshi_dir'] = array( | |
- '#type' => 'textfield', | |
- '#title' => t('Path to GeSHi library'), | |
- '#default_value' => _geshifilter_get_geshi_dir(), | |
- '#description' => t('Specify the path to the GeSHi library directory (which contains a file called <em>geshi.php</em>).') | |
- ); | |
- $form['geshifilter_library']['#after_build'] = array('geshifilter_admin_general_settings_after_build'); | |
// If the GeSHi library is loaded, show all the options and settings. | |
if ($geshi_library['loaded']) { | |
@@ -233,17 +226,6 @@ function geshifilter_admin_general_settings($form, &$form_state) { | |
} | |
/** | |
- * After build function for admin settings | |
- */ | |
-function geshifilter_admin_general_settings_after_build($form, &$form_state) { | |
- $geshi_library = _geshifilter_check_geshi_library(FALSE, $form_state['values']['geshifilter_geshi_dir'], FALSE); | |
- if (!$geshi_library['success']) { | |
- form_set_error('geshifilter_geshi_dir', $geshi_library['message']); | |
- } | |
- return $form; | |
-} | |
- | |
-/** | |
* Validate function for admin settings | |
*/ | |
function geshifilter_admin_general_settings_validate($form, &$form_state) { | |
@@ -257,15 +239,6 @@ function geshifilter_admin_general_settings_validate($form, &$form_state) { | |
* Submit function for admin settings | |
*/ | |
function geshifilter_admin_general_settings_submit($form, &$form_state) { | |
- // Cache of available languages should be cleared when GeSHi library dir changes | |
- // _geshifilter_get_geshi_dir() returns the new value set by | |
- // system_settings_form_submit() which runs before | |
- // geshifilter_admin_general_settings_submit(), | |
- // $form['geshifilter_library']['geshifilter_geshi_dir']['#default_value'] is | |
- // the old value | |
- if (_geshifilter_get_geshi_dir() != $form['geshifilter_library']['geshifilter_geshi_dir']['#default_value']) { | |
- variable_del('geshifilter_available_languages_cache'); | |
- } | |
// Regenerate language_css | |
// Note the use of variable_get('geshifilter_css_mode') which is alread set | |
// to $form_state['values']['geshifilter_css_mode'] by | |
@@ -283,9 +256,9 @@ function geshifilter_admin_general_settings_submit($form, &$form_state) { | |
function geshifilter_admin_per_language_settings($form_state, $view = 'enabled') { | |
$form = array(); | |
// check if GeSHi library is available | |
- $geshi_library = _geshifilter_check_geshi_library(); | |
- if (!$geshi_library['success']) { | |
- drupal_set_message($geshi_library['message'], 'error'); | |
+ $geshi_library = libraries_load('geshi'); | |
+ if (!$geshi_library['loaded']) { | |
+ drupal_set_message($geshi_library['error message'], 'error'); | |
return; | |
} | |
$add_checkbox = TRUE; | |
@@ -549,7 +522,7 @@ function _geshifilter_clear_filter_cache() { | |
*/ | |
function _geshifilter_generate_languages_css_rules() { | |
$output = ''; | |
- $geshi_library = _geshifilter_check_geshi_library(); | |
+ $geshi_library = libraries_load('geshi'); | |
if ($geshi_library['loaded']) { | |
require_once drupal_get_path('module', 'geshifilter') .'/geshifilter.pages.inc'; | |
$languages = _geshifilter_get_enabled_languages(); | |
diff --git geshifilter.conflicts.inc geshifilter.conflicts.inc | |
index 1890449..13b2d1a 100644 | |
--- geshifilter.conflicts.inc | |
+++ geshifilter.conflicts.inc | |
@@ -12,14 +12,14 @@ require_once drupal_get_path('module', 'geshifilter') .'/geshifilter.inc'; | |
*/ | |
function geshifilter_admin_filter_conflicts($check_only=FALSE) { | |
global $user; | |
- | |
+ | |
// start | |
$output = ''; | |
// check if GeSHi library is available | |
- $geshi_library = _geshifilter_check_geshi_library(); | |
- if (!$geshi_library['success']) { | |
+ $geshi_library = libraries_load('geshi'); | |
+ if (!$geshi_library['loaded']) { | |
if (!$check_only) { | |
- drupal_set_message($geshi_library['message'], 'error'); | |
+ drupal_set_message($geshi_library['error message'], 'error'); | |
} | |
return $output; | |
} | |
diff --git geshifilter.inc geshifilter.inc | |
index c75fb60..c3b1c96 100644 | |
--- geshifilter.inc | |
+++ geshifilter.inc | |
@@ -5,61 +5,6 @@ | |
* General GeSHi filter helper functions. | |
*/ | |
-function _geshifilter_get_geshi_dir() { | |
- // TODO: change the default value to something like 'sites/all/libraries/geshi' (possibly using the Libraries API module) | |
- return variable_get('geshifilter_geshi_dir', drupal_get_path('module', 'geshifilter') .'/geshi'); | |
-} | |
- | |
-/** | |
- * Helper function for loading/checking the GeSHi library v 1.0.x (if not already) | |
- * Returns an array with keys 'success', 'loaded' and 'message' | |
- */ | |
-function _geshifilter_check_geshi_library($use_cache=TRUE, $geshi_dir=NULL, $load_when_found=TRUE) { | |
- static $geshi_library_cache = NULL; | |
- if ($use_cache && $geshi_library_cache !== NULL) { | |
- // get from cache | |
- $geshi_library = $geshi_library_cache; | |
- } | |
- else { | |
- // initialisation | |
- $geshi_library = array('success' => NULL, 'loaded' => FALSE, 'message' => NULL); | |
- // no cache | |
- if (!$geshi_dir) { | |
- $geshi_dir = _geshifilter_get_geshi_dir(); | |
- } | |
- if (!is_dir($geshi_dir)) { | |
- $geshi_library['success'] = FALSE; | |
- $geshi_library['message'] = t('GeSHi library error: %dir is not a directory.', array('%dir' => $geshi_dir)); | |
- } | |
- elseif (is_file($geshi_dir .'/geshi.php')) { | |
- // GeSHi 1.0.x found (probably, we can only be sure by loading it) | |
- $geshi_library['success'] = TRUE; | |
- if ($load_when_found) { | |
- require_once($geshi_dir .'/geshi.php'); | |
- // check version | |
- $geshi_library_version = explode('.', GESHI_VERSION); | |
- if (!($geshi_library_version[0] == '1' && $geshi_library_version[1] == '0')) { | |
- $geshi_library['success'] = FALSE; | |
- $geshi_library['loaded'] = FALSE; | |
- $geshi_library['message'] = t('GeSHi library error: The detected version of GeSHi library (%version) is not supported. A version from the 1.0.x branch is required.', array('%version' => GESHI_VERSION)); | |
- } | |
- else { | |
- $geshi_library['loaded'] = TRUE; | |
- } | |
- } | |
- } | |
- else { | |
- $geshi_library['success'] = FALSE; | |
- $geshi_library['message'] = t('GeSHi library error: Could not find a known version of the GeSHi library in directory %dir.' , array('%dir' => $geshi_dir)); | |
- } | |
- // store in cache if needed | |
- if ($use_cache) { | |
- $geshi_library_cache = $geshi_library; | |
- } | |
- } | |
- return $geshi_library; | |
-} | |
- | |
/** | |
* List of available languages. | |
* @return an array mapping language code to array with the language path and full language name | |
@@ -69,10 +14,10 @@ function _geshifilter_get_available_languages() { | |
$available_languages = variable_get('geshifilter_available_languages_cache', NULL); | |
if ($available_languages === NULL) { | |
// not in cache: build the array of available_languages | |
- $geshi_library = _geshifilter_check_geshi_library(); | |
+ $geshi_library = libraries_load('geshi'); | |
$available_languages = array(); | |
- if ($geshi_library['success']) { | |
- $dirs = array(_geshifilter_get_geshi_dir() .'/geshi', drupal_get_path('module', 'geshifilter') .'/geshi-extra'); | |
+ if ($geshi_library['loaded']) { | |
+ $dirs = array($geshi_library['library path'] .'/geshi', drupal_get_path('module', 'geshifilter') .'/geshi-extra'); | |
foreach ($dirs as $dir) { | |
foreach (file_scan_directory($dir, '/.[pP][hH][pP]$/i') as $filename => $fileinfo) { | |
// short name | |
diff --git geshifilter.install geshifilter.install | |
index 9d5b8b8..1486f13 100644 | |
--- geshifilter.install | |
+++ geshifilter.install | |
@@ -28,4 +28,11 @@ function geshifilter_install() { | |
function geshifilter_uninstall() { | |
db_query("DELETE FROM {variable} WHERE name LIKE 'geshifilter_%'"); | |
cache_clear_all('variables', 'cache'); | |
-} | |
\ No newline at end of file | |
+} | |
+ | |
+/** | |
+ * Remove 'geshifilter_geshi_dir' since it is replaced by libraries API. | |
+ */ | |
+function geshifilter_update_7100() { | |
+ variable_del('geshifilter_geshi_dir'); | |
+} | |
diff --git geshifilter.module geshifilter.module | |
index 708c49a..c118614 100644 | |
--- geshifilter.module | |
+++ geshifilter.module | |
@@ -228,13 +228,19 @@ function geshifilter_requirements($phase) { | |
if ($phase == 'runtime') { | |
require_once drupal_get_path('module', 'geshifilter') .'/geshifilter.inc'; | |
// check if GeSHi library is available | |
- $geshi_library = _geshifilter_check_geshi_library(); | |
+ $geshi_library = libraries_load('geshi'); | |
if (!$geshi_library['loaded']) { | |
$requirements[] = array( | |
'title' => 'GeSHi filter', | |
'value' => t('GeSHi library not found.'), | |
- 'description' => t('You should install the GeSHi library and set its path in the <a href="!geshisettings">GeSHi settings</a>.', | |
- array('!geshisettings' => url('admin/config/content/geshifilter'))), | |
+ 'severity' => REQUIREMENT_ERROR, | |
+ ); | |
+ } | |
+ elseif (($version = explode('.', GESHI_VERSION)) && !($version[0] == '1' && $version[1] == '0')) { | |
+ $requirements[] = array( | |
+ 'title' => 'GeSHi filter', | |
+ 'value' => t('GeSHi library invalid version.'), | |
+ 'description' => t('The detected version of GeSHi library (%version) is not supported. A version from the 1.0.x branch is required.', array('%version' => GESHI_VERSION)), | |
'severity' => REQUIREMENT_ERROR, | |
); | |
} | |
@@ -272,6 +278,28 @@ function geshifilter_requirements($phase) { | |
return $requirements; | |
} | |
+/** | |
+ * Implements hook_libraries_info() | |
+ */ | |
+function geshifilter_libraries_info() { | |
+ return array( | |
+ 'geshi' => array( | |
+ 'title' => 'GeSHi - Generic Syntax Highlighter for PHP', | |
+ 'vendor url' => 'http://sourceforge.net/projects/geshi', | |
+ 'download url' => 'http://sourceforge.net/projects/geshi/files/geshi', | |
+ 'version arguments' => array( | |
+ 'file' => 'geshi.php', | |
+ 'pattern' => "/define\('GESHI_VERSION', '(.*)'\);/", | |
+ 'lines' => 50, | |
+ ), | |
+ 'files' => array( | |
+ 'php' => array( | |
+ 'geshi.php', | |
+ ), | |
+ ), | |
+ ), | |
+ ); | |
+} | |
/** | |
* Helper function for checking if an automatically managed style sheet is possible | |
diff --git geshifilter.pages.inc geshifilter.pages.inc | |
index 7b3e9c1..1b7a935 100644 | |
--- geshifilter.pages.inc | |
+++ geshifilter.pages.inc | |
@@ -211,9 +211,9 @@ function _geshifilter_prepare_php_callback($match) { | |
*/ | |
function _geshifilter_process($format, $text) { | |
// load GeSHi library (if not already) | |
- $geshi_library = _geshifilter_check_geshi_library(); | |
- if (!$geshi_library['success']) { | |
- drupal_set_message($geshi_library['message'], 'error'); | |
+ $geshi_library = libraries_load('geshi'); | |
+ if (!$geshi_library['loaded']) { | |
+ drupal_set_message($geshi_library['error message'], 'error'); | |
return $text; | |
} | |
// get the available tags | |
@@ -325,9 +325,9 @@ function geshifilter_process_sourcecode($source_code, $lang, $line_numbering=0, | |
*/ | |
function geshifilter_geshi_process($source_code, $lang, $line_numbering=0, $linenumbers_start=1, $inline_mode=FALSE, $title = NULL) { | |
// load GeSHi library (if not already) | |
- $geshi_library = _geshifilter_check_geshi_library(); | |
+ $geshi_library = libraries_load('geshi'); | |
if (!$geshi_library['loaded']) { | |
- drupal_set_message($geshi_library['message'], 'error'); | |
+ drupal_set_message($geshi_library['error message'], 'error'); | |
return $source_code; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment