|
@@ -12,7 +12,7 @@
|
|
* @package QBF
|
|
* @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.
|
|
* Saved error reporting level.
|
|
@@ -132,14 +132,17 @@ class Qbf_Query
|
|
* @param array $ar_values
|
|
* @param array $ar_values
|
|
* @return void
|
|
* @return void
|
|
*/
|
|
*/
|
|
- public function __construct($type, $name, $ar_values)
|
|
|
|
|
|
+ public function __construct($type, $name = NULL, $ar_values = NULL)
|
|
{
|
|
{
|
|
global $user;
|
|
global $user;
|
|
$this->qid = 0; // will be autoset by the DB serial
|
|
$this->qid = 0; // will be autoset by the DB serial
|
|
$this->uid = $user->uid;
|
|
$this->uid = $user->uid;
|
|
$this->type = $type;
|
|
$this->type = $type;
|
|
$this->name = $name;
|
|
$this->name = $name;
|
|
- $this->query = serialize($ar_values);
|
|
|
|
|
|
+ if (!empty($ar_values))
|
|
|
|
+ {
|
|
|
|
+ $this->query = serialize($ar_values);
|
|
|
|
+ }
|
|
$this->created = $this->updated = time();
|
|
$this->created = $this->updated = time();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -330,15 +333,44 @@ function _qbf_query_delete($query)
|
|
/**
|
|
/**
|
|
* Main query page.
|
|
* 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
|
|
* @param object $query
|
|
* Valid query, loaded by qbf_query_load().
|
|
* Valid query, loaded by qbf_query_load().
|
|
* @return string
|
|
* @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
|
|
* @param array $element
|
|
* @return void
|
|
* @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));
|
|
// dsm(array('key' => $key, 'element' => $element));
|
|
|
|
|
|
@@ -543,7 +575,7 @@ function _qbf_transform_element($key, $element, $form_state, $query)
|
|
// Recursively transform children
|
|
// Recursively transform children
|
|
foreach (element_children($element) as $child_name)
|
|
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))
|
|
if (is_null($child))
|
|
{
|
|
{
|
|
unset($ret[$child_name]);
|
|
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)
|
|
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))
|
|
if (!is_null($new_element))
|
|
{
|
|
{
|
|
$qbf_form[$key] = $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 forms
|
|
* @ingroup hooks
|
|
* @ingroup hooks
|
|
*
|
|
*
|
|
- * @param string $qbf_form_id
|
|
|
|
* @param array $args
|
|
* @param array $args
|
|
* @return array
|
|
* @return array
|
|
*/
|
|
*/
|
|
@@ -759,6 +790,29 @@ function qbf_get_queries_by_user($uid = NULL)
|
|
return $ret;
|
|
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().
|
|
* Implement hook_menu().
|
|
*
|
|
*
|
|
@@ -768,14 +822,6 @@ function qbf_menu()
|
|
{
|
|
{
|
|
$items = array();
|
|
$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
|
|
$items[QBF_PATH_SETTINGS] = array
|
|
(
|
|
(
|
|
'title' => 'Query-By-Form',
|
|
'title' => 'Query-By-Form',
|
|
@@ -785,6 +831,13 @@ function qbf_menu()
|
|
'type' => MENU_NORMAL_ITEM,
|
|
'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
|
|
$items[QBF_PATH_MAIN . '/%qbf_query'] = array
|
|
(
|
|
(
|
|
'type' => MENU_CALLBACK,
|
|
'type' => MENU_CALLBACK,
|
|
@@ -804,29 +857,6 @@ function qbf_menu()
|
|
return $items;
|
|
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().
|
|
* 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
|
|
* @link http://drupal.org/node/109153#load @endlink
|
|
*
|
|
*
|
|
@@ -871,7 +901,21 @@ function qbf_query_load($us_qid)
|
|
? $us_qid
|
|
? $us_qid
|
|
: 0;
|
|
: 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 '
|
|
$sq = 'SELECT qq.qid, qq.uid, qq.type, qq.name, qq.query '
|
|
. 'FROM {%s} qq '
|
|
. 'FROM {%s} qq '
|