Browse Source

- remove menu entry for obsolete qbf/demo path
- qbf/<base form> path now displays the QBF form for a base node form
- qbf path now points to a list of available query type, or jumps to the single query form if only one exists
- reordered out of order functions
- renamed _qbf_transform_element() to _qbf_transform()
- fixed a few phpdocs.

Frederic G. Marand 15 years ago
parent
commit
4e3ca2c688
1 changed files with 88 additions and 44 deletions
  1. 88 44
      qbf.module

+ 88 - 44
qbf.module

@@ -12,7 +12,7 @@
  * @package QBF
  */
 
-// $Id: qbf.module,v 1.9.4.9 2009-03-22 10:22:59 marand Exp $
+// $Id: qbf.module,v 1.9.4.10 2009-03-22 11:26:54 marand Exp $
 
 /**
  * Saved error reporting level.
@@ -132,14 +132,17 @@ class Qbf_Query
    * @param array $ar_values
    * @return void
    */
-  public function __construct($type, $name, $ar_values)
+  public function __construct($type, $name = NULL, $ar_values = NULL)
     {
     global $user;
     $this->qid = 0; // will be autoset by the DB serial
     $this->uid = $user->uid;
     $this->type = $type;
     $this->name = $name;
-    $this->query = serialize($ar_values);
+    if (!empty($ar_values))
+      {
+      $this->query = serialize($ar_values);
+      }
     $this->created = $this->updated = time();
     }
 
@@ -330,15 +333,44 @@ function _qbf_query_delete($query)
 /**
  * Main query page.
  *
+ * This returns the query form if a valid query id or query type is specified,
+ * or the list of available query types if several exisit, or jumps to the single
+ * available query type if only one exists.
+ *
  * @param object $query
  *   Valid query, loaded by qbf_query_load().
  * @return string
  */
-function _qbf_query_form($query)
+function _qbf_query_form($query = NULL )
   {
-  $qbf_form_id = 'qbf_' . $query->type;
-  $form = drupal_get_form($qbf_form_id, $query);
-  return $form;
+  if (!empty($query))
+    {
+    $qbf_form_id = 'qbf_' . $query->type;
+    $ret = drupal_get_form($qbf_form_id, $query);
+    }
+  else
+    {
+    $ar_forms = qbf_forms();
+    $arRet = array();
+    foreach ($ar_forms as $qbf_form_id => $form_info)
+      {
+      $form_id = $form_info['callback arguments'][0]['form'];
+      $arRet[QBF_PATH_MAIN . "/$form_id"] = l($form_info['callback arguments'][0]['label'],
+          QBF_PATH_MAIN . "/$form_id");
+      }
+
+    // If there is only one form type, no need to ask the user.
+    if (count($arRet) == 1)
+      {
+      reset($arRet);
+      drupal_goto(key($arRet));
+      }
+    else
+      {
+      $ret = theme('item_list', $arRet, t('Choose a query type'));
+      }
+    }
+  return $ret;
   }
 
 /**
@@ -404,7 +436,7 @@ function _qbf_save($form_id, $form_state)
  * @param array $element
  * @return void
  */
-function _qbf_transform_element($key, $element, $form_state, $query)
+function _qbf_transform($key, $element, $form_state, $query)
   {
   // dsm(array('key' => $key, 'element' => $element));
 
@@ -543,7 +575,7 @@ function _qbf_transform_element($key, $element, $form_state, $query)
       // Recursively transform children
       foreach (element_children($element) as $child_name)
         {
-        $child = _qbf_transform_element($child_name, $element[$child_name], $form_state, $query);
+        $child = _qbf_transform($child_name, $element[$child_name], $form_state, $query);
         if (is_null($child))
           {
           unset($ret[$child_name]);
@@ -608,7 +640,7 @@ function qbf_form(&$form_state, $query_info, $qbf_form_id, $query = NULL)
 
   foreach (element_children($form) as $key)
     {
-    $new_element = _qbf_transform_element($key, $form[$key], $form_state, $query);
+    $new_element = _qbf_transform($key, $form[$key], $form_state, $query);
     if (!is_null($new_element))
       {
       $qbf_form[$key] = $new_element;
@@ -697,7 +729,6 @@ function qbf_form(&$form_state, $query_info, $qbf_form_id, $query = NULL)
  * @ingroup forms
  * @ingroup hooks
  *
- * @param string $qbf_form_id
  * @param array $args
  * @return array
  */
@@ -759,6 +790,29 @@ function qbf_get_queries_by_user($uid = NULL)
   return $ret;
   }
 
+/**
+ * Implement hook_mail().
+ *
+ * @param string $key
+ * @param array $message
+ * @param array $params
+ * @return void
+ */
+function qbf_mail($key, &$message, $params)
+  {
+  // dsm(array('QBF_mail key' => $key, 'message' => $message, 'params' => $params));
+
+  $deletor_tokens = user_mail_tokens($params['deletor'], $params['language']->language);
+  $tokens = array_merge($deletor_tokens, array
+    (
+    '!qname' => $params['query']->name,
+    '!qid'   => $params['query']->qid,
+    ));
+
+  $message['subject'] = t('Effacement d\'une recherche !site enregistrée', $tokens);
+  $message['body'] = t("!date\n\nVotre recherche !qid: !qname\nsur le site !site vient d'être effacée par !username.", $tokens);
+  }
+
 /**
  * Implement hook_menu().
  *
@@ -768,14 +822,6 @@ function qbf_menu()
   {
   $items = array();
 
-  $items[QBF_PATH_MAIN . '/demo'] = array
-    (
-    'title'            => 'QBF Demo',
-    'access arguments' => array(QBF_PERM_QUERY),
-    'page callback'    => 'qbf_show',
-    'type'             => MENU_NORMAL_ITEM,
-    );
-
   $items[QBF_PATH_SETTINGS] = array
     (
     'title'            => 'Query-By-Form',
@@ -785,6 +831,13 @@ function qbf_menu()
     'type'             => MENU_NORMAL_ITEM,
     );
 
+  $items[QBF_PATH_MAIN] = array
+    (
+    'type'             => MENU_CALLBACK,
+    'access arguments' => array(QBF_PERM_QUERY),
+    'page callback'    => '_qbf_query_form',
+    );
+
   $items[QBF_PATH_MAIN . '/%qbf_query'] = array
     (
     'type'             => MENU_CALLBACK,
@@ -804,29 +857,6 @@ function qbf_menu()
   return $items;
   }
 
-/**
- * Implement hook_mail().
- *
- * @param string $key
- * @param array $message
- * @param array $params
- * @return void
- */
-function qbf_mail($key, &$message, $params)
-  {
-  // dsm(array('QBF_mail key' => $key, 'message' => $message, 'params' => $params));
-
-  $deletor_tokens = user_mail_tokens($params['deletor'], $params['language']->language);
-  $tokens = array_merge($deletor_tokens, array
-    (
-    '!qname' => $params['query']->name,
-    '!qid'   => $params['query']->qid,
-    ));
-
-  $message['subject'] = t('Effacement d\'une recherche !site enregistrée', $tokens);
-  $message['body'] = t("!date\n\nVotre recherche !qid: !qname\nsur le site !site vient d'être effacée par !username.", $tokens);
-  }
-
 /**
  * Implement hook_perm().
  *
@@ -848,7 +878,7 @@ function qbf_perm()
   }
 
 /**
- * Load a saved QBF query.
+ * Load a saved QBF query, or an empty query by type
  *
  * @link http://drupal.org/node/109153#load @endlink
  *
@@ -871,7 +901,21 @@ function qbf_query_load($us_qid)
     ? $us_qid
     : 0;
 
-  if (is_null($query))
+  // If this is not a saved query, it may be a QBF query type
+  if ($qid === 0)
+    {
+    $ar_forms = qbf_forms();
+    foreach ($ar_forms as $qbf_form_id => $form_info)
+      {
+      if ($us_qid === $form_info['callback arguments'][0]['form'])
+        {
+        $query = new Qbf_Query($us_qid);
+        break;
+        }
+      }
+    }
+
+  if (is_null($query) && $qid)
     {
     $sq = 'SELECT qq.qid, qq.uid, qq.type, qq.name, qq.query '
         . 'FROM {%s} qq '