summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2010-07-17 18:52:39 +0000
committerDries Buytaert <dries@buytaert.net>2010-07-17 18:52:39 +0000
commitecc7ce08754ca321110c25ca29567f9726813637 (patch)
treec9781c6024097514ee4de2babdd9ba63f06806c6 /includes
parent67317ecc01211d791697dfce662346ab621a31e3 (diff)
downloadbrdo-ecc7ce08754ca321110c25ca29567f9726813637.tar.gz
brdo-ecc7ce08754ca321110c25ca29567f9726813637.tar.bz2
- Patch #561226 by fago, effulgentsia, sun, YesCT, marcingy: orms (elements) need to able to specify include files to be loaded for building.
Diffstat (limited to 'includes')
-rw-r--r--includes/form.inc22
1 files changed, 16 insertions, 6 deletions
diff --git a/includes/form.inc b/includes/form.inc
index b214b673c..f41cce4a7 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -207,7 +207,10 @@ function drupal_get_form($form_id) {
* rebuild the form from cache when the original context may no longer be
* available:
* - args: An array of arguments to pass to the form builder.
- * - file: An optional include file that contains the form and is
+ * - files: An optional array defining include files that need to be loaded
+ * for building the form. Each array entry may be the path to a file or
+ * another array containing values for the parameters 'type', 'module' and
+ * 'name' as needed by module_load_include(). The files listed here are
* automatically loaded by form_get_cache(). Defaults to the current menu
* router item's 'file' definition, if existent.
* - rebuild: Normally, after the entire form processing is completed and
@@ -298,10 +301,10 @@ function drupal_build_form($form_id, &$form_state) {
// rebuilt from cache on a different path (such as 'system/ajax'). See
// form_get_cache().
// $menu_get_item() is not available at installation time.
- if (!isset($form_state['build_info']['file']) && !defined('MAINTENANCE_MODE')) {
+ if (!isset($form_state['build_info']['files']['menu']) && !defined('MAINTENANCE_MODE')) {
$item = menu_get_item();
if (!empty($item['include_file'])) {
- $form_state['build_info']['file'] = $item['include_file'];
+ $form_state['build_info']['files']['menu'] = $item['include_file'];
}
}
@@ -474,10 +477,17 @@ function form_get_cache($form_build_id, &$form_state) {
// Re-populate $form_state for subsequent rebuilds.
$form_state = $cached->data + $form_state;
- // If the original form is contained in an include file, load the file.
+ // If the original form is contained in include files, load the files.
// See drupal_build_form().
- if (!empty($form_state['build_info']['file']) && file_exists($form_state['build_info']['file'])) {
- require_once DRUPAL_ROOT . '/' . $form_state['build_info']['file'];
+ $form_state['build_info'] += array('files' => array());
+ foreach ($form_state['build_info']['files'] as $file) {
+ if (is_array($file)) {
+ $file += array('type' => 'inc', 'name' => $file['module']);
+ module_load_include($file['type'], $file['module'], $file['name']);
+ }
+ elseif (file_exists($file)) {
+ require_once DRUPAL_ROOT . '/' . $file;
+ }
}
}
return $form;