Bläddra i källkod

- Make form transformation form-independent (change call format)
- Remove auto hooks array for form builders
- Add args for form builders
- Define the query search entry point
- Works with AUP job 1.5

Frederic G. Marand 16 år sedan
förälder
incheckning
bcc689800b
1 ändrade filer med 53 tillägg och 35 borttagningar
  1. 53 35
      qbf.module

+ 53 - 35
qbf.module

@@ -7,7 +7,7 @@
  *
  * @copyright 2008 Ouest Systemes Informatiques (OSInet)
  * @author Frederic G. MARAND
- * @version $Id: qbf.module,v 1.2 2008-08-25 15:03:33 marand Exp $
+ * @version $Id: qbf.module,v 1.3 2008-08-25 17:40:53 marand Exp $
  * @license CeCILL 2.0
  * @package QBF
  */
@@ -51,50 +51,28 @@ function qbf_rewrite_form($form)
  * This function obtains the form array using Forms API, and transforms it by
  * modifying widgets to other types where needed.
  *
- * The $arHooks array contains hooks to be invoked, indexed by hook name, with
- * their arguments
+ * Any additional parameter passed to the function is transmitted to the form
+ * generating function.
  *
  * @param string $form_id
- * @param array $arHooks
  * @return array
  */
-function qbf_transform_form($form_id, $arHooks = array())
+function qbf_transform_form($form_id)
   {
-  // Fetch the basic form and rename it
-  $form = drupal_retrieve_form($form_id, NULL);
+  $arArgs = func_get_args();
+
+  // Fetch the basic form and rename it, passing it the caller's arguments
+  $form = call_user_func_array('drupal_retrieve_form', $arArgs);
   $newFormId = "qbf_$form_id";
 
-  // Invoke the optional hooks extending it
-  foreach ($arHooks as $hookName => $arHookArguments)
+  // Only keep the children of the form and QBF properties on the form itself
+  $elements = array();
+  $newForm = array();
+  if (in_array('#qbf', element_properties($form)))
     {
-    // dsm("Firing $hookName");
-
-    foreach (module_implements($hookName) as $module)
-      {
-      $function = $module .'_'. $hookName;
-      switch ($hookName)
-        {
-        case 'form':
-          // @todo FIXME needs node with type property set
-          // $formAdditions = node_invoke(new stdClass(), $hookName, $arHookArguments);
-          break;
-        default:
-          $formAdditions = module_invoke_all($hookName, $arHookArguments);
-          break;
-        }
-      // dsm(array($function => $formAdditions));
-      }
-
-  	if (is_array($formAdditions))
-  	  {
-  	  $form = array_merge_recursive($form, $formAdditions);
-  	  }
+    $newForm += $form['#qbf'];
     }
 
-  // Only keep the children of the form
-  $elements = array();
-  $newForm = array();
-  $form['mark'] = array('#type' => 'textarea', '#value' => 'goo');
   foreach (element_children($form) as $key)
     {
     // dsm("Transforming $key, type " . $form[$key]['#type']);
@@ -168,9 +146,15 @@ function _qbf_transform_element($key, array $element)
 
   // Transform type
   $sourceType = $element['#type'];
+  // .. Default transformation
   $destType = array_key_exists($sourceType, $arDefaultTypeTransformations)
     ? $arDefaultTypeTransformations[$sourceType]
     : $sourceType;
+  // .. Apply type override
+  if (isset($element['#qbf']['#type']))
+    {
+    $destType = $element['#qbf']['#type'];
+    }
 
   if (is_null($destType))
     {
@@ -232,4 +216,38 @@ function _qbf_transform_element($key, array $element)
 
   //dsm(array('key' => $key, 'transformed element' => $ret));
   return $ret;
+  }
+
+function qbf_search()
+  {
+  dsm('qs');
+  }
+
+function qbf_perm()
+  {
+  $ret = array('use qbf search functions');
+  return $ret;
+  }
+
+function qbf_menu($may_cache)
+  {
+  $items = array();
+
+  if ($may_cache)
+    {
+    $items[] = array
+      (
+      'path'      => 'qbf/query',
+      'access'    => user_access('use qbf search functions'),
+      'callback'  => 'qbf_query',
+      );
+    }
+
+  return $items;
+  }
+
+function qbf_query($form_id)
+  {
+  dsm("qq $form_id");
+  return "QQ $form_id";
   }