array( 'node' => array('type' => 'node', 'label' => t('Content')), 'user' => array('type' => 'user', 'label' => t('User')), 'type' => array( 'type' => 'text', 'label' => t('Subscription type'), 'optional' => TRUE, 'options list' => 'subscriptions_rules_type_list', 'default value' => 'node', ), ), 'group' => t('Subscriptions'), 'access callback' => 'subscriptions_add_user_content_access', ); // Action subsribe a user to a content $items['subscriptions_add_user_content'] = $base + array( 'label' => t('Subscribe user to content'), 'base' => 'subscriptions_add_user_content_callback', ); // Action unsubsribe a user to a content $items['subscriptions_remove_user_content'] = $base + array( 'label' => t('Unsubscribe user to content'), 'base' => 'subscriptions_remove_user_content_callback', ); return $items; } /** * Rule subscriptions_add_user_content callback */ function subscriptions_add_user_content_callback($node, $user, $type = 'node') { $args = array ( 0 => 'node', 1 => 'nid', 2 => $node->nid, 3 => -1, // DEBUG $node->uid, 4 => $user->uid, 5 => _subscriptions_get_setting('send_interval', $user), 6 => $type == 'node', 7 => $type == 'comment', // Comments ); return call_user_func_array('subscriptions_write_subscription', $args); } /** * Rule subscriptions_remove_user_content callback */ function subscriptions_remove_user_content_callback($node, $user, $type = 'node') { $ret = db_delete('subscriptions') ->condition('module', 'node') ->condition('field', 'nid') ->condition('value', $node->nid) ->condition('author_uid', -1) ->condition('recipient_uid', $user->uid); if ($type == 'node') { $ret->condition('send_updates', 1); } if ($type == 'comment') { $ret->condition('send_comments', 1); } return $ret->execute(); } /** * TODO: user_access */ function subscriptions_add_user_content_access() { return TRUE; } /** * Options list callback for the operation parameter of condition user has role. */ function subscriptions_rules_type_list() { return array( 'node' => t('Node'), 'comment' => t('Comment'), ); }