|
@@ -12,7 +12,7 @@
|
|
* @package QBF
|
|
* @package QBF
|
|
*/
|
|
*/
|
|
|
|
|
|
-// $Id: qbf.module,v 1.9.2.2 2008-10-03 13:48:59 marand Exp $
|
|
|
|
|
|
+// $Id: qbf.module,v 1.9.2.3 2008-10-03 17:40:40 marand Exp $
|
|
|
|
|
|
/**
|
|
/**
|
|
* Saved error reporting level.
|
|
* Saved error reporting level.
|
|
@@ -46,8 +46,13 @@ define('QBF_LEVEL_OPTIONAL', 2);
|
|
define('QBF_LEVEL_REQUIRED', 3);
|
|
define('QBF_LEVEL_REQUIRED', 3);
|
|
|
|
|
|
/**
|
|
/**
|
|
- * The main QBF path
|
|
|
|
|
|
+ * The main QBF path.
|
|
|
|
+ *
|
|
|
|
+ * It MUST be a single component path, without a "/", otherwise qbf_menu() will
|
|
|
|
+ * need to be changed.
|
|
|
|
+ *
|
|
* @ingroup paths
|
|
* @ingroup paths
|
|
|
|
+ * @see qbf_menu()
|
|
*/
|
|
*/
|
|
define('QBF_PATH_MAIN', 'qbf');
|
|
define('QBF_PATH_MAIN', 'qbf');
|
|
/**
|
|
/**
|
|
@@ -70,6 +75,15 @@ define('QBF_PERM_ADMIN', 'administer QBF');
|
|
*/
|
|
*/
|
|
define('QBF_TABLE_NAME', 'qbf_queries');
|
|
define('QBF_TABLE_NAME', 'qbf_queries');
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * Notify owner about saved query deletions, variable name.
|
|
|
|
+ */
|
|
|
|
+define('QBF_VAR_NOTIFY_DELETE', 'qbf_notify_delete');
|
|
|
|
+/**
|
|
|
|
+ * Notify owner about saved query deletions, default value.
|
|
|
|
+ */
|
|
|
|
+define('QBF_DEF_NOTIFY_DELETE', FALSE);
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Transform a form array for QBF.
|
|
* Transform a form array for QBF.
|
|
*
|
|
*
|
|
@@ -447,13 +461,13 @@ function qbf_import_values($element, $form_values) {
|
|
* @return array A form_values array usable by qbf_import_values
|
|
* @return array A form_values array usable by qbf_import_values
|
|
*/
|
|
*/
|
|
function qbf_load($qid) {
|
|
function qbf_load($qid) {
|
|
- $sq = 'SELECT qq.qid, qq.uid, qq.query '
|
|
|
|
|
|
+ $sq = 'SELECT qq.qid, qq.uid, qq.query, qq.name '
|
|
. 'FROM {%s} qq '
|
|
. 'FROM {%s} qq '
|
|
. 'WHERE qq.qid = %d ';
|
|
. 'WHERE qq.qid = %d ';
|
|
// db_rewrite_sql does not apply here until we add more advanced support for access control
|
|
// db_rewrite_sql does not apply here until we add more advanced support for access control
|
|
$q = db_query($sq, QBF_TABLE_NAME, $qid);
|
|
$q = db_query($sq, QBF_TABLE_NAME, $qid);
|
|
$ret = db_fetch_object($q); // 0 or 1 row: we are querying on the primary key
|
|
$ret = db_fetch_object($q); // 0 or 1 row: we are querying on the primary key
|
|
- if ($ret === FALSE)
|
|
|
|
|
|
+ if ($ret === NULL) // FALSE does not happen
|
|
{
|
|
{
|
|
$ret = NULL;
|
|
$ret = NULL;
|
|
}
|
|
}
|
|
@@ -546,4 +560,81 @@ function _qbf_save($form_id, $form_values) {
|
|
return $ret;
|
|
return $ret;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * Implement hook_menu().
|
|
|
|
+ *
|
|
|
|
+ * @param $may_cache boolean
|
|
|
|
+ * @return array
|
|
|
|
+ */
|
|
|
|
+function qbf_menu($may_cache) {
|
|
|
|
+
|
|
|
|
+ $items = array();
|
|
|
|
+ if ($may_cache)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ if ((arg(0) == QBF_PATH_MAIN) && is_numeric(arg(1)) && arg(1) > 0 && arg(2) == 'delete')
|
|
|
|
+ {
|
|
|
|
+ $qid = arg(1);
|
|
|
|
+ $querorAccess = user_access(QBF_PERM_QUERY);
|
|
|
|
+ $items[] = array
|
|
|
|
+ (
|
|
|
|
+ 'path' => QBF_PATH_MAIN . '/' . $qid . '/delete',
|
|
|
|
+ 'type' => MENU_CALLBACK,
|
|
|
|
+ 'access' => $querorAccess,
|
|
|
|
+ 'callback' => '_qbf_query_delete',
|
|
|
|
+ 'callback arguments' => array($qid),
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $items;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * Delete a query by qid
|
|
|
|
+ *
|
|
|
|
+ * $qid has been tested in qbf_menu() to be a positive integer, so it is a safe
|
|
|
|
+ * number, but we still need to know more about it.
|
|
|
|
+ *
|
|
|
|
+ * @param $qid integer
|
|
|
|
+ */
|
|
|
|
+function _qbf_query_delete($qid) {
|
|
|
|
+
|
|
|
|
+ global $user;
|
|
|
|
+
|
|
|
|
+ $query = qbf_load($qid);
|
|
|
|
+ $notify = variable_get(QBF_VAR_NOTIFY_DELETE, QBF_DEF_NOTIFY_DELETE);
|
|
|
|
+ $link = l($qid, QBF_PATH_MAIN . '/' . $qid . '/delete');
|
|
|
|
+
|
|
|
|
+ // @todo Check safety, this seem dangerous
|
|
|
|
+ $usArgs = func_get_args();
|
|
|
|
+ $path = implode('/', array_slice($usArgs, 1));
|
|
|
|
+
|
|
|
|
+ // only valid if valid query, and owner or admin
|
|
|
|
+ if (isset($query->uid) && (($query->uid == $user->uid) || user_access(QBF_PERM_ADMIN)))
|
|
|
|
+ {
|
|
|
|
+ $sq = 'DELETE FROM %s WHERE qid = %d ';
|
|
|
|
+ $q = db_query($sq, QBF_TABLE_NAME, $qid);
|
|
|
|
+ $message = t('Query @id "@name" has been deleted.', array
|
|
|
|
+ (
|
|
|
|
+ '@id' => $qid,
|
|
|
|
+ '@name' => $query->name,
|
|
|
|
+ ));
|
|
|
|
+ drupal_set_message($message, 'status');
|
|
|
|
+ watchdog('qbf', $message, WATCHDOG_NOTICE, $link);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ $message = t('Failed attempt to delete query @qid. Administrators has been alerted.', array
|
|
|
|
+ (
|
|
|
|
+ '@qid' => $qid,
|
|
|
|
+ ));
|
|
|
|
+ drupal_set_message($message, 'error');
|
|
|
|
+ watchdog('qbf', $message, WATCHDOG_ERROR, $link);
|
|
|
|
+ }
|
|
|
|
+ drupal_goto($path);
|
|
|
|
+}
|
|
|
|
+
|
|
error_reporting($_qbf_er);
|
|
error_reporting($_qbf_er);
|