|
@@ -12,7 +12,7 @@
|
|
* @package QBF
|
|
* @package QBF
|
|
*/
|
|
*/
|
|
|
|
|
|
-// $Id: qbf.module,v 1.9.4.3 2009-03-17 18:48:53 marand Exp $
|
|
|
|
|
|
+// $Id: qbf.module,v 1.9.4.4 2009-03-19 17:30:24 marand Exp $
|
|
|
|
|
|
/**
|
|
/**
|
|
* Saved error reporting level.
|
|
* Saved error reporting level.
|
|
@@ -88,11 +88,15 @@ define('QBF_VAR_NOTIFY_DELETE', 'qbf_notify_delete');
|
|
*/
|
|
*/
|
|
define('QBF_DEF_NOTIFY_DELETE', FALSE);
|
|
define('QBF_DEF_NOTIFY_DELETE', FALSE);
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * A class wrapper for saved QBF queries
|
|
|
|
+ */
|
|
class Qbf_Query
|
|
class Qbf_Query
|
|
{
|
|
{
|
|
public $qid;
|
|
public $qid;
|
|
public $uid;
|
|
public $uid;
|
|
public $name;
|
|
public $name;
|
|
|
|
+ public $type;
|
|
public $query;
|
|
public $query;
|
|
public $created;
|
|
public $created;
|
|
public $updated;
|
|
public $updated;
|
|
@@ -104,11 +108,12 @@ class Qbf_Query
|
|
* @param array $ar_values
|
|
* @param array $ar_values
|
|
* @return void
|
|
* @return void
|
|
*/
|
|
*/
|
|
- public function __construct($name, $ar_values)
|
|
|
|
|
|
+ public function __construct($type, $name, $ar_values)
|
|
{
|
|
{
|
|
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->name = $name;
|
|
$this->name = $name;
|
|
$this->query = serialize($ar_values);
|
|
$this->query = serialize($ar_values);
|
|
$this->created = $this->updated = time();
|
|
$this->created = $this->updated = time();
|
|
@@ -124,12 +129,12 @@ class Qbf_Query
|
|
// Avoid duplicates
|
|
// Avoid duplicates
|
|
if (!empty($this->name))
|
|
if (!empty($this->name))
|
|
{
|
|
{
|
|
- $sq = "DELETE FROM {%s} WHERE name = '%s'";
|
|
|
|
- db_query($sq, QBF_TABLE_NAME, $name);
|
|
|
|
|
|
+ $sq = "DELETE FROM {%s} WHERE name = '%s' AND uid = '%d' ";
|
|
|
|
+ db_query($sq, QBF_TABLE_NAME, $this->name, $this->uid);
|
|
|
|
+ // $n = db_affected_rows(); // Know how many homonym queries we deleted
|
|
}
|
|
}
|
|
|
|
|
|
$ret = drupal_write_record(QBF_TABLE_NAME, $this); // no update param: we just deleted the previous version
|
|
$ret = drupal_write_record(QBF_TABLE_NAME, $this); // no update param: we just deleted the previous version
|
|
- dsm($this);
|
|
|
|
if ($ret) // has to be SAVED_NEW, by construction
|
|
if ($ret) // has to be SAVED_NEW, by construction
|
|
{
|
|
{
|
|
$ret = $this->qid; // from serial
|
|
$ret = $this->qid; // from serial
|
|
@@ -415,26 +420,49 @@ function qbf_admin_settings()
|
|
return system_settings_form($form);
|
|
return system_settings_form($form);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * Submit handler for qbf_form, Save search button.
|
|
|
|
+ *
|
|
|
|
+ * @param array $form
|
|
|
|
+ * @param array $form_state
|
|
|
|
+ * @return integer
|
|
|
|
+ * The id of the saved query.
|
|
|
|
+ */
|
|
|
|
+function qbf_form_save_submit($form, &$form_state)
|
|
|
|
+ {
|
|
|
|
+ $qid = _qbf_save($form_state['values']['form_id'], $form_state);
|
|
|
|
+ drupal_set_message(t('Your query was saved as "@name".',
|
|
|
|
+ array('@name' => $form_state['values']['qbf_save_name'])));
|
|
|
|
+ global $user;
|
|
|
|
+ $form_state['redirect'] = "user/$user->uid/qbf";
|
|
|
|
+ return $qid;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Implement hook_forms().
|
|
* Implement hook_forms().
|
|
*
|
|
*
|
|
|
|
+ * @link http://drupal.org/node/144132#hook-forms @endlink
|
|
|
|
+ *
|
|
* @ingroup forms
|
|
* @ingroup forms
|
|
* @ingroup hooks
|
|
* @ingroup hooks
|
|
|
|
+ * @param string $form_id
|
|
|
|
+ * @param array $args
|
|
* @return array
|
|
* @return array
|
|
*/
|
|
*/
|
|
-function qbf_forms()
|
|
|
|
|
|
+function qbf_forms($qbf_form_id, $args)
|
|
{
|
|
{
|
|
$hook_name = 'qbf_register';
|
|
$hook_name = 'qbf_register';
|
|
|
|
+ // dsm(array("QBF_forms $form_id" => $args));
|
|
|
|
|
|
// More efficient than using module_invoke_all: we avoid array-merging + re-looping
|
|
// More efficient than using module_invoke_all: we avoid array-merging + re-looping
|
|
foreach (module_implements($hook_name) as $module)
|
|
foreach (module_implements($hook_name) as $module)
|
|
{
|
|
{
|
|
- foreach (module_invoke($module, $hook_name) as $form_name)
|
|
|
|
|
|
+ foreach (module_invoke($module, $hook_name) as $form_id => $search_title)
|
|
{
|
|
{
|
|
- $forms["qbf_$form_name"] = array
|
|
|
|
|
|
+ $forms["qbf_$form_id"] = array
|
|
(
|
|
(
|
|
- 'callback' => 'qbf_transform_form',
|
|
|
|
- 'callback arguments' => array($form_name),
|
|
|
|
|
|
+ 'callback' => 'qbf_form',
|
|
|
|
+ 'callback arguments' => array($form_id, $qbf_form_id, $search_title, $args),
|
|
);
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -480,6 +508,14 @@ 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',
|
|
@@ -621,6 +657,7 @@ function qbf_query_mapper($ar_query_map = array(), $ar_defaults = array())
|
|
|
|
|
|
error_reporting($_qbf_er);
|
|
error_reporting($_qbf_er);
|
|
|
|
|
|
|
|
+function qbf___________________________________________________(){}
|
|
// ======== D6 LIMIT ==================================================================================================
|
|
// ======== D6 LIMIT ==================================================================================================
|
|
|
|
|
|
/* TODO Node previews and adding form fields to the node form.
|
|
/* TODO Node previews and adding form fields to the node form.
|
|
@@ -641,44 +678,51 @@ error_reporting($_qbf_er);
|
|
* Any additional parameter passed to the function is transmitted to the form
|
|
* Any additional parameter passed to the function is transmitted to the form
|
|
* generating function.
|
|
* generating function.
|
|
*
|
|
*
|
|
|
|
+ * $form_state is generally not used, but is passed in to match the usual FAPI
|
|
|
|
+ * signatures in Drupal 6.
|
|
|
|
+ *
|
|
* @ingroup forms
|
|
* @ingroup forms
|
|
* @param string $form_id
|
|
* @param string $form_id
|
|
|
|
+ * @param array $form_state
|
|
* @return array
|
|
* @return array
|
|
*/
|
|
*/
|
|
-function qbf_transform_form($form_id) {
|
|
|
|
-// @todo GW: function qbf_transform_form(&$form_state, $form_id) {
|
|
|
|
-
|
|
|
|
- $ar_args = func_get_args();
|
|
|
|
-//dsm(array('qtf' => $ar_args));
|
|
|
|
|
|
+function qbf_transform_form($form_state, $form_id)
|
|
|
|
+ {
|
|
// Fetch the basic form and rename it, passing it the caller's arguments
|
|
// Fetch the basic form and rename it, passing it the caller's arguments
|
|
- $form = call_user_func_array('drupal_retrieve_form', $ar_args);
|
|
|
|
|
|
+ $form = drupal_retrieve_form($form_id, $form_state, NULL, $form_state);
|
|
|
|
+ $node = new stdClass();
|
|
|
|
+ $form = $form_id($node, $form_state);
|
|
$new_form_id = "qbf_$form_id";
|
|
$new_form_id = "qbf_$form_id";
|
|
|
|
|
|
// Only keep the children of the form and QBF properties on the form itself
|
|
// Only keep the children of the form and QBF properties on the form itself
|
|
$elements = array();
|
|
$elements = array();
|
|
$new_form = array();
|
|
$new_form = array();
|
|
$new_form['#qbf_source_form_id'] = $form_id;
|
|
$new_form['#qbf_source_form_id'] = $form_id;
|
|
- if (in_array('#qbf', element_properties($form))) {
|
|
|
|
|
|
+ if (in_array('#qbf', element_properties($form)))
|
|
|
|
+ {
|
|
$new_form += $form['#qbf'];
|
|
$new_form += $form['#qbf'];
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- foreach (element_children($form) as $key) {
|
|
|
|
|
|
+ foreach (element_children($form) as $key)
|
|
|
|
+ {
|
|
// dsm("Transforming $key, type " . $form[$key]['#type']);
|
|
// dsm("Transforming $key, type " . $form[$key]['#type']);
|
|
$new_element = _qbf_transform_element($key, $form[$key]);
|
|
$new_element = _qbf_transform_element($key, $form[$key]);
|
|
- if (!is_null($new_element)) {
|
|
|
|
|
|
+ if (!is_null($new_element))
|
|
|
|
+ {
|
|
$new_form[$key] = $new_element;
|
|
$new_form[$key] = $new_element;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
$new_form['#id'] = $new_form_id;
|
|
$new_form['#id'] = $new_form_id;
|
|
- $new_form['#multistep'] = TRUE;
|
|
|
|
|
|
+ // @todo #multistep -> #rebuild au submit
|
|
|
|
+ // $new_form['#multistep'] = TRUE;
|
|
// Do not set #redirect, even to FALSE (submit handlers)
|
|
// Do not set #redirect, even to FALSE (submit handlers)
|
|
// $new_form['#redirect'] = FALSE;
|
|
// $new_form['#redirect'] = FALSE;
|
|
$new_form['#after_build'][] = 'qbf_after_build';
|
|
$new_form['#after_build'][] = 'qbf_after_build';
|
|
- $new_form['#submit'] = array('qbf_submit' => array());
|
|
|
|
-// dsm($new_form);
|
|
|
|
|
|
+ $new_form['#submit'] = array('qbf_submit');
|
|
|
|
+ // dsm($new_form);
|
|
return $new_form;
|
|
return $new_form;
|
|
-}
|
|
|
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
/**
|
|
* Insert the query results at the bottom of the query form.
|
|
* Insert the query results at the bottom of the query form.
|
|
@@ -764,15 +808,6 @@ function qbf_submit($form, &$form_state) {
|
|
$ret = FALSE;
|
|
$ret = FALSE;
|
|
break;
|
|
break;
|
|
|
|
|
|
- case t('Save query'):
|
|
|
|
- _qbf_save($form_id, $form_values);
|
|
|
|
-//@TODO GW _qbf_save($form_state['values']['form_id'], $form_state['values']);
|
|
|
|
- drupal_set_message(t('Your query was saved as "@name".',
|
|
|
|
- array('@name' => $form_values['save-name'])));
|
|
|
|
-//@TODO GW _qbf_save($form_state['values']['form_id'], $form_state['values']);
|
|
|
|
- global $user;
|
|
|
|
- $ret = "user/$user->uid/edit/job";;
|
|
|
|
- break;
|
|
|
|
}
|
|
}
|
|
//dsm(array('QS' => $form_values));
|
|
//dsm(array('QS' => $form_values));
|
|
return $ret;
|
|
return $ret;
|
|
@@ -804,11 +839,14 @@ function _qbf_save($form_id, $form_state)
|
|
{
|
|
{
|
|
// @FIXME check whether form_state is now needed. It wasn't in QBF for D5
|
|
// @FIXME check whether form_state is now needed. It wasn't in QBF for D5
|
|
$form = drupal_retrieve_form($form_id, $form_state);
|
|
$form = drupal_retrieve_form($form_id, $form_state);
|
|
- dsm($form, "retrieve");
|
|
|
|
|
|
+ // dsm($form, "retrieve");
|
|
drupal_prepare_form($form_id, $form, $form_state);
|
|
drupal_prepare_form($form_id, $form, $form_state);
|
|
- dsm($form, "prepare");
|
|
|
|
- $name = $form_state['post']['save-name'];
|
|
|
|
- $form_values = _qbf_extract_query($form, $form_state['post']);
|
|
|
|
|
|
+ // dsm($form, "prepare");
|
|
|
|
+ $name = $form_state['values']['qbf_save_name'];
|
|
|
|
+ $type = $form_state['values']['qbf_save_type'];
|
|
|
|
+ dsm($form_state);
|
|
|
|
+ $form_values = _qbf_extract_query($form, $form_state['values']);
|
|
|
|
+ dsm($form_values);
|
|
$ar_values = array();
|
|
$ar_values = array();
|
|
foreach ($form_values as $key => $value)
|
|
foreach ($form_values as $key => $value)
|
|
{
|
|
{
|
|
@@ -819,9 +857,108 @@ function _qbf_save($form_id, $form_state)
|
|
$ar_values[$key] = $value;
|
|
$ar_values[$key] = $value;
|
|
}
|
|
}
|
|
|
|
|
|
- $query = new Qbf_Query($name, $ar_values);
|
|
|
|
|
|
+ $query = new Qbf_Query($type, $name, $ar_values);
|
|
$ret = $query->save();
|
|
$ret = $query->save();
|
|
}
|
|
}
|
|
|
|
|
|
return $ret;
|
|
return $ret;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * The QBF form builder.
|
|
|
|
+ *
|
|
|
|
+ * @param array $form_state
|
|
|
|
+ * @param string $form_id
|
|
|
|
+ * The original form to transform
|
|
|
|
+ * @param string $qbf_form_id
|
|
|
|
+ * The QBF form itself
|
|
|
|
+ * @param strign $save_type
|
|
|
|
+ * Name of search type, to use when saving.
|
|
|
|
+ */
|
|
|
|
+function qbf_form($form_state, $form_id, $qbf_form_id, $save_type)
|
|
|
|
+ {
|
|
|
|
+ // dsm(array("QBF_Form" => "Base = [$form_id], QBF ID = [$qbf_form_id]", 'save_type' => $save_type));
|
|
|
|
+
|
|
|
|
+ $form = array();
|
|
|
|
+// $form['#validate'][] = 'qbf_form_validate';
|
|
|
|
+// $form['#submit'][] = 'qbf_form_submit';
|
|
|
|
+
|
|
|
|
+ $form['qbf'] = array
|
|
|
|
+ (
|
|
|
|
+ '#type' => 'fieldset',
|
|
|
|
+ '#title' => t('Query'),
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ $form['qbf']['qbf_save_type'] = array
|
|
|
|
+ (
|
|
|
|
+ '#type' => 'hidden',
|
|
|
|
+ '#value' => $save_type,
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ $form['qbf']['qbf_save_name'] = array
|
|
|
|
+ (
|
|
|
|
+ '#title' => t('Name of query in your save list'),
|
|
|
|
+ '#type' => 'textfield',
|
|
|
|
+ '#required' => TRUE,
|
|
|
|
+ '#default_value' => substr($form_id, 0, -5) . ' ' . format_date(time(), 'large'),
|
|
|
|
+ );
|
|
|
|
+ $form['qbf']['qbf_save'] = array
|
|
|
|
+ (
|
|
|
|
+ '#submit' => array('qbf_form_save_submit'),
|
|
|
|
+ '#validate' => array('qbf_form_save_validate'),
|
|
|
|
+ '#type' => 'submit',
|
|
|
|
+ '#value' => t('Save query'),
|
|
|
|
+ '#weight' => 5,
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ $form['qbf']['qbf_perform'] = array
|
|
|
|
+ (
|
|
|
|
+ '#submit' => array('qbf_form_perform_submit'),
|
|
|
|
+ '#validate' => array('qbf_form_perform_validate'),
|
|
|
|
+ '#type' => 'submit',
|
|
|
|
+ '#value' => t('Perform query'),
|
|
|
|
+ '#weight' => 4,
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ return $form;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * Submit handler for qbf_form, Perform search button.
|
|
|
|
+ *
|
|
|
|
+ * @param array $form
|
|
|
|
+ * @param array $form_state
|
|
|
|
+ */
|
|
|
|
+function qbf_form_perform_submit($form, &$form_state)
|
|
|
|
+ {
|
|
|
|
+ dsm('PERF SUB');
|
|
|
|
+ dsm($form);
|
|
|
|
+ dsm($form_state);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * Validate handler for qbf_form, Perform search button.
|
|
|
|
+ *
|
|
|
|
+ * @param array $form
|
|
|
|
+ * @param array $form_state
|
|
|
|
+ */
|
|
|
|
+function qbf_form_perform_validate($form, &$form_state)
|
|
|
|
+ {
|
|
|
|
+ dsm('PERF VAL');
|
|
|
|
+ dsm($form);
|
|
|
|
+ dsm($form_state);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+function qbf_form_submit($form, &$form_state)
|
|
|
|
+ {
|
|
|
|
+ dsm('FORM SUB');
|
|
|
|
+ dsm($form);
|
|
|
|
+ dsm($form_state);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+function qbf_form_validate($form, &$form_state)
|
|
|
|
+ {
|
|
|
|
+ dsm('FORM VAL');
|
|
|
|
+ dsm($form);
|
|
|
|
+ dsm($form_state);
|
|
|
|
+ }
|