Переглянути джерело

- Now supports query deletion with a safer redirect after deletion
- Configurable notification to users whose query is redirected by an admin

Frederic G. Marand 16 роки тому
батько
коміт
9789a3f744
1 змінених файлів з 59 додано та 5 видалено
  1. 59 5
      qbf.module

+ 59 - 5
qbf.module

@@ -12,7 +12,7 @@
  * @package QBF
  */
 
-// $Id: qbf.module,v 1.9.2.3 2008-10-03 17:40:40 marand Exp $
+// $Id: qbf.module,v 1.9.2.4 2008-10-04 17:01:32 marand Exp $
 
 /**
  * Saved error reporting level.
@@ -60,6 +60,10 @@ define('QBF_PATH_MAIN',              'qbf');
  * @ingroup paths
  */
 define('QBF_PATH_AC',                'qbf/ac');
+/**
+ * The path to the QBF settings page
+ */
+define('QBF_PATH_SETTINGS',          'admin/settings/qbf');
 
 /**
  * Authorize use of QBF searches
@@ -474,6 +478,7 @@ function qbf_load($qid) {
   else
     {
     $ret->query = unserialize($ret->query);
+    //dsm($ret);
     }
   return $ret;
 }
@@ -551,10 +556,28 @@ function _qbf_save($form_id, $form_values) {
     }
   else
     {
+    $arRemoved = array
+      (
+      'form_id',
+      'form_token',
+      'form_build_id',
+      'op',
+      );
+
+    $arValues = array();
+    foreach ($form_values as $key => $value)
+      {
+    	if (empty($value) || in_array($key, $arRemoved))
+    	  {
+    	  continue;
+    	  }
+    	$arValues[$key] = $value;
+      }
+dsm($arValues);
     $sq = 'INSERT INTO {%s} (qid, uid, name, query) '
          ."VALUES           (%d,  %d,  '%s', '%s' ) ";
     $ret = db_next_id('qbf_qid');
-    $q = db_query($sq, QBF_TABLE_NAME, $ret, $user->uid, $form_values['save-name'], serialize($form_values));
+    $q = db_query($sq, QBF_TABLE_NAME, $ret, $user->uid, $form_values['save-name'], serialize($arValues));
     }
 
   return $ret;
@@ -571,6 +594,15 @@ function qbf_menu($may_cache) {
   $items = array();
   if ($may_cache)
     {
+    $items[] = array
+      (
+      'path'               => QBF_PATH_SETTINGS,
+      'title'              => t('Query-By-Form'),
+      'access'             => user_access(QBF_PERM_ADMIN),
+      'callback'           => 'drupal_get_form',
+      'callback arguments' => 'qbf_admin_settings',
+      'type'               => MENU_NORMAL_ITEM,
+      );
     }
   else
     {
@@ -609,8 +641,8 @@ function _qbf_query_delete($qid) {
   $link = l($qid, QBF_PATH_MAIN . '/' . $qid . '/delete');
 
   // @todo Check safety, this seem dangerous
-  $usArgs = func_get_args();
-  $path = implode('/', array_slice($usArgs, 1));
+  //$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)))
@@ -624,6 +656,16 @@ function _qbf_query_delete($qid) {
       ));
     drupal_set_message($message, 'status');
     watchdog('qbf', $message, WATCHDOG_NOTICE, $link);
+    if (variable_get(QBF_VAR_NOTIFY_DELETE, QBF_DEF_NOTIFY_DELETE) && $query->uid != $user->uid)
+      {
+      $ret = drupal_mail(__FUNCTION__, $user->mail, $message, $message, $user->mail);
+      $account = user_load(array('uid' => $query->uid));
+      drupal_set_message(t('User !link has been informed', array
+        (
+        '!link' => l($account->name, 'user/' . $query->uid),
+        )));
+      dsm($ret);
+      }
     }
   else
     {
@@ -634,7 +676,19 @@ function _qbf_query_delete($qid) {
     drupal_set_message($message, 'error');
     watchdog('qbf', $message, WATCHDOG_ERROR, $link);
     }
-  drupal_goto($path);
+  drupal_goto();
+}
+
+function qbf_admin_settings() {
+
+  $form = array();
+  $form[QBF_VAR_NOTIFY_DELETE] = array
+    (
+    '#type'          => 'checkbox',
+    '#default_value' => variable_get(QBF_VAR_NOTIFY_DELETE, QBF_DEF_NOTIFY_DELETE),
+    '#title'         => t('Notify users when one of their saved searches has been deleted'),
+    );
+  return system_settings_form($form);
 }
 
 error_reporting($_qbf_er);