|
@@ -160,6 +160,56 @@ function tripal_field_is_empty($field, $items, $delta = 0) {
|
|
|
return FALSE;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Retrieves a list of all fields implementing Tripal Fields/Formatters/Widgets.
|
|
|
+ *
|
|
|
+ * The TripalField classes can be added by the site developer and should be
|
|
|
+ * placed in the [module]/includes/TripalFields directory. Tripal will support
|
|
|
+ * any field as long as:
|
|
|
+ * - it's in the [modules]/includes/TripalFields directory,
|
|
|
+ * - extends TripalField, TripalWidget or TripalFormatter,
|
|
|
+ * - matches the [cvname]__[termname] convention.
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ * An array of files containing Tripal fields, widgets or formatters where
|
|
|
+ * each element has a name, filename, and uri. The URI is relative to your
|
|
|
+ * drupal root.
|
|
|
+ */
|
|
|
+function tripal_get_tripalfield_files() {
|
|
|
+ $field_files = &drupal_static(__FUNCTION__);
|
|
|
+
|
|
|
+ if (!isset($field_files)) {
|
|
|
+ $field_files = array();
|
|
|
+
|
|
|
+ // Check module directories.
|
|
|
+ $modules = module_list(TRUE);
|
|
|
+ foreach ($modules as $module) {
|
|
|
+
|
|
|
+ // Only run this for modules that are enabled.
|
|
|
+ if (!module_exists($module)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Find all of the files in the tripal_chado/includes/fields directory.
|
|
|
+ $fields_path = drupal_get_path('module', $module) . '/includes/TripalFields';
|
|
|
+ $tmp = file_scan_directory($fields_path, '/.*__.*\.inc$/');
|
|
|
+ if (!empty($tmp)) {
|
|
|
+ $field_files = array_merge($field_files, $tmp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Check the library directory.
|
|
|
+ if (module_exists('libraries')) {
|
|
|
+ $library_path = libraries_get_path('TripalFields');
|
|
|
+ $fields_path = $library_path;
|
|
|
+ $tmp = file_scan_directory($fields_path, '/.*__.*\.inc$/');
|
|
|
+ if (!empty($tmp)) { $field_files = array_merge($field_files, $tmp); }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $field_files;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* Retrieves a list of TripalField types.
|
|
|
*
|
|
@@ -178,51 +228,20 @@ function tripal_field_is_empty($field, $items, $delta = 0) {
|
|
|
function tripal_get_field_types() {
|
|
|
$types = array();
|
|
|
|
|
|
- $modules = module_list(TRUE);
|
|
|
- foreach ($modules as $module) {
|
|
|
-
|
|
|
- // Only run this for modules that are enabled.
|
|
|
- if (!module_exists($module)) {
|
|
|
+ $field_files = tripal_get_tripalfield_files();
|
|
|
+ // Iterate through the fields, include the file and run the info function.
|
|
|
+ foreach ($field_files as $file) {
|
|
|
+ // Ignore the formatter and widget classes for now.
|
|
|
+ if (preg_match('/_formatter|_widget/', $file->name)) {
|
|
|
continue;
|
|
|
}
|
|
|
- // Find all of the files in the tripal_chado/includes/TripalFields/ directory.
|
|
|
- $fields_path = drupal_get_path('module', $module) . '/includes/TripalFields';
|
|
|
- $field_files = file_scan_directory($fields_path, '/.*\.inc$/');
|
|
|
- // Iterate through the fields, include the file and run the info function.
|
|
|
- foreach ($field_files as $file) {
|
|
|
- // Ignore the formatter and widget classes for now.
|
|
|
- if (preg_match('/_formatter|_widget/', $file->name)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- $field_type = $file->name;
|
|
|
- module_load_include('inc', $module, 'includes/TripalFields/' . $field_type . '/' . $field_type);
|
|
|
- if (class_exists($field_type) and is_subclass_of($field_type, 'TripalField')) {
|
|
|
- $types[] = $field_type;
|
|
|
- }
|
|
|
+ $field_type = $file->name;
|
|
|
+ require_once($file->uri);
|
|
|
+ if (class_exists($field_type) and is_subclass_of($field_type, 'TripalField')) {
|
|
|
+ $types[] = $field_type;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // If the libraries module is enabled then we want to look for a TripalFields
|
|
|
- // library folder and see if our field exist there.
|
|
|
- if (module_exists('libraries')) {
|
|
|
- $library_path = libraries_get_path('TripalFields');
|
|
|
- $fields_path = realpath(".") . '/' . $library_path;
|
|
|
- $field_files = file_scan_directory($fields_path, '/.*\.inc$/');
|
|
|
- foreach ($field_files as $file) {
|
|
|
- // Ignore the formatter and widget classes for now.
|
|
|
- if (preg_match('/_formatter|_widget/', $file->name)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- $field_type = $file->name;
|
|
|
- $file_path = realpath(".") . '/' . $library_path .'/' . $field_type . '/' . $field_type . '.inc';
|
|
|
- if (file_exists($file_path)) {
|
|
|
- require_once($file_path);
|
|
|
- if (class_exists($field_type) and is_subclass_of($field_type, 'TripalField')) {
|
|
|
- $types[] = $field_type;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
return $types;
|
|
|
}
|
|
|
|
|
@@ -242,46 +261,18 @@ function tripal_get_field_types() {
|
|
|
function tripal_get_field_widgets() {
|
|
|
$widgets = array();
|
|
|
|
|
|
- $modules = module_list(TRUE);
|
|
|
- foreach ($modules as $module) {
|
|
|
-
|
|
|
- // Only run this for modules that are enabled.
|
|
|
- if (!module_exists($module)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- // Find all of the files in the tripal_chado/includes/fields directory.
|
|
|
- $fields_path = drupal_get_path('module', $module) . '/includes/TripalFields';
|
|
|
- $field_files = file_scan_directory($fields_path, '/.*_widget\.inc$/');
|
|
|
- // Iterate through the fields, include the file and run the info function.
|
|
|
- foreach ($field_files as $file) {
|
|
|
+ $field_files = tripal_get_tripalfield_files();
|
|
|
+ // Iterate through the fields, include the file and run the info function.
|
|
|
+ foreach ($field_files as $file) {
|
|
|
+ if (preg_match('/_widget/', $file->name)) {
|
|
|
$widget_type = $file->name;
|
|
|
- $field_type = preg_replace('/(^.*)_widget/', '$1', $widget_type);
|
|
|
- module_load_include('inc', $module, 'includes/TripalFields/' . $field_type . '/' . $widget_type);
|
|
|
+ require_once($file->uri);
|
|
|
if (class_exists($widget_type) and is_subclass_of($widget_type, 'TripalFieldWidget')) {
|
|
|
$widgets[] = $widget_type;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // If the libraries module is enabled then we want to look for a TripalFields
|
|
|
- // library folder and see if our field exist there.
|
|
|
- if (module_exists('libraries')) {
|
|
|
- $library_path = libraries_get_path('TripalFields');
|
|
|
- $fields_path = realpath(".") . '/' . $library_path;
|
|
|
- $field_files = file_scan_directory($fields_path, '/.*_widget\.inc$/');
|
|
|
- foreach ($field_files as $file) {
|
|
|
- $widget_type = $file->name;
|
|
|
- $field_type = preg_replace('/(^.*)_widget/', '$1', $widget_type);
|
|
|
- $file_path = realpath(".") . '/' . $library_path .'/' . $field_type . '/' . $widget_type . '.inc';
|
|
|
- if (file_exists($file_path)) {
|
|
|
- require_once($file_path);
|
|
|
- if (class_exists($widget_type) and is_subclass_of($widget_type, 'TripalFieldWidget')) {
|
|
|
- $widgets[] = $widget_type;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
return $widgets;
|
|
|
}
|
|
|
|
|
@@ -337,46 +328,18 @@ function tripal_get_field_field_formatters($field, $instance) {
|
|
|
function tripal_get_field_formatters() {
|
|
|
$formatters = array();
|
|
|
|
|
|
- $modules = module_list(TRUE);
|
|
|
- foreach ($modules as $module) {
|
|
|
-
|
|
|
- // Only run this for modules that are enabled.
|
|
|
- if (!module_exists($module)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- // Find all of the files in the tripal_chado/includes/fields directory.
|
|
|
- $fields_path = drupal_get_path('module', $module) . '/includes/TripalFields';
|
|
|
- $field_files = file_scan_directory($fields_path, '/.*_formatter\.inc$/');
|
|
|
- // Iterate through the fields, include the file and run the info function.
|
|
|
- foreach ($field_files as $file) {
|
|
|
+ $field_files = tripal_get_tripalfield_files();
|
|
|
+ // Iterate through the fields, include the file and run the info function.
|
|
|
+ foreach ($field_files as $file) {
|
|
|
+ if (preg_match('/_formatter/', $file->name)) {
|
|
|
$formatter_type = $file->name;
|
|
|
- $field_type = preg_replace('/(^.*)_formatter/', '$1', $formatter_type);
|
|
|
- module_load_include('inc', $module, 'includes/TripalFields/' . $field_type . '/' . $formatter_type);
|
|
|
+ require_once($file->uri);
|
|
|
if (class_exists($formatter_type) and is_subclass_of($formatter_type, 'TripalFieldFormatter')) {
|
|
|
$formatters[] = $formatter_type;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // If the libraries module is enabled then we want to look for a TripalFields
|
|
|
- // library folder and see if our field exist there.
|
|
|
- if (module_exists('libraries')) {
|
|
|
- $library_path = libraries_get_path('TripalFields');
|
|
|
- $fields_path = realpath(".") . '/' . $library_path;
|
|
|
- $field_files = file_scan_directory($fields_path, '/.*_formatter\.inc$/');
|
|
|
- foreach ($field_files as $file) {
|
|
|
- $formatter_type = $file->name;
|
|
|
- $field_type = preg_replace('/(^.*)_formatter/', '$1', $formatter_type);
|
|
|
- $file_path = realpath(".") . '/' . $library_path .'/' . $field_type . '/' . $formatter_type . '.inc';
|
|
|
- if (file_exists($file_path)) {
|
|
|
- require_once($file_path);
|
|
|
- if (class_exists($formatter_type) and is_subclass_of($formatter_type, 'TripalFieldFormatter')) {
|
|
|
- $formatters[] = $formatter_type;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
return $formatters;
|
|
|
}
|
|
|
/**
|