--- sites/all/modules/subscriptions/subscriptions.module 2009-07-20 17:22:21.000000000 -0400 +++ sites/all/modules/subscriptions/subscriptions.module.new 2009-07-26 16:25:02.000000000 -0400 @@ -243,7 +243,7 @@ function subscriptions_user($type, $edit case 'delete': db_query("DELETE FROM {subscriptions_user} WHERE uid = %d", $account->uid); - db_query("DELETE FROM {subscriptions} WHERE recipient_uid = %d", $account->uid); + subscriptions_delete_subscription(array('recipient_uid' => $account->uid)); break; } } @@ -373,13 +373,40 @@ function subscriptions_get_full_subscrip * Create a subscription. */ function subscriptions_write_subscription($module, $field, $value, $author_uid, $recipient_uid, $send_interval = 1, $send_updates = 0, $send_comments = 0) { + $record = array('module' => $module, 'field' => $field, 'value' => $value, 'author_uid' => $author_uid, 'recipient_uid' => $recipient_uid, 'send_interval' => $send_interval, 'send_updates' => $send_updates, 'send_comments' => $send_comments); + module_invoke_all('subscriptions_write', 'update', $record); db_query("UPDATE {subscriptions} SET send_interval = %d, send_updates = %d, send_comments = %d WHERE module = '%s' AND field ='%s' AND value='%s' AND recipient_uid = %d AND author_uid = %d", $send_interval, $send_updates, $send_comments, $module, $field, $value, $recipient_uid, $author_uid); if (!db_affected_rows()) { + module_invoke_all('subscriptions_write', 'insert', $record); @db_query("INSERT INTO {subscriptions} (module, field, value, author_uid, recipient_uid, send_interval, send_updates, send_comments) VALUES ('%s', '%s', '%s', %d, %d, %d, %d, %d)", $module, $field, $value, $author_uid, $recipient_uid, $send_interval, $send_updates, $send_comments); } } /** + * Delete a subscription. + */ +function subscriptions_delete_subscription($condition = array()) { + $empty_record = array( + 'module' => "module = '%s'", + 'field' => "field = '%s'", + 'value' => "value = '%s'", + 'author_uid' => 'author_uid = %d', + 'recipient_uid' => 'recipient_uid = %d', + 'send_interval' => 'send_interval = %d', + 'send_updates' => 'send_updates = %d', + 'send_comments' => 'send_comments = %d', + ); + $condition = array_intersect_key($condition, $empty_record); + $fields = array_intersect_key($empty_record, $condition); + $where = implode(' AND ', $fields); + if ($where) { + $where = ' WHERE '. $where; + } + module_invoke_all('subscriptions_write', 'delete', $condition); + db_query("DELETE FROM {subscriptions} $where", $condition); +} + +/** * Provide the form definition for deleting subscriptions via * s/del/... (aka subscriptions/rem/...) link. * @@ -412,7 +439,8 @@ function subscriptions_delete_form(&$for * Delete Subscription form submit handler. */ function subscriptions_delete_form_submit($form, &$form_state) { - db_query("DELETE FROM {subscriptions} WHERE module = '%s' AND field = '%s' AND value = '%s' AND author_uid = %d AND recipient_uid = %d", $form_state['values']['data']); + $record = array('module' => $form_state['values']['data'][0], 'field' => $form_state['values']['data'][1], 'value' => $form_state['values']['data'][2], 'author_uid' => $form_state['values']['data'][3], 'recipient_uid' => $form_state['values']['data'][4]); + subscriptions_delete_subscription($record); drupal_set_message(t('Your subscription was deactivated.')); $form_state['redirect'] = ''; }