Index: simplenews.rules.inc =================================================================== RCS file: simplenews.rules.inc diff -N simplenews.rules.inc 0a1,247 > // $Id: simplenews.rules.inc,v 1.0 2010/01/19 20:36:49 criz Exp $ > > /** > * @file > * Rules actions for the Simplenews newsletter module. > * > * @addtogroup rules > * @{ > */ > > > /** > * Implementation of hook_rules_action_info(). > */ > function simplenews_rules_action_info() { > return array( > 'simplenews_rules_action_subscribe_email' => array( > 'label' => t('Subscribe an e-mail adress to a newsletter'), > 'module' => 'Simple News', > 'eval input' => array('email', 'newsletter', 'advanced_options|tids', 'confirmation'), > ), > 'simplenews_rules_action_subscribe_user' => array( > 'label' => t('Subscribe an User to a newsletter'), > 'arguments' => array( > 'user' => array('type' => 'user', 'label' => t('User')), > ), > 'module' => 'Simple News', > 'eval input' => array('newsletter', 'advanced_options|tids', 'confirmation'), > ), > 'simplenews_rules_action_unsubscribe_email' => array( > 'label' => t('Unsubscribe an e-mail adress'), > 'module' => 'Simple News', > 'eval input' => array('email', 'newsletter', 'advanced_options|tids', 'confirmation'), > ), > 'simplenews_rules_action_unsubscribe_user' => array( > 'label' => t('Unsubscribe an User'), > 'arguments' => array( > 'user' => array('type' => 'user', 'label' => t('User')), > ), > 'module' => 'Simple News', > 'eval input' => array('newsletter', 'advanced_options|tids', 'confirmation'), > ), > ); > } > > /** > * Action Implementation: Subscribe an e-mail adress to a Simplenews newsletter > */ > function simplenews_rules_action_subscribe_email($settings) { > //validate settings > $settings = simplenews_rules_action_validate($settings); > //set newsletters > $tids = $settings['newsletter']; > if (!empty($settings['email']) && !empty($tids)) { > foreach ($settings['email'] as $email) { > foreach ($tids as $tid) { > $status = simplenews_subscribe_user($email, $tid, $settings['confirmation']); > } > } > } > if (!empty($status)) { > $newsletter_all = simplenews_rules_action_get_newsletters(); > foreach ($tids as $tid) { > $newsletters[] = $newsletter_all[$tid]; > } > watchdog('rules', 'E-mail %email subscribed to newsletter %newsletter.', array('%email' => implode(', ', $settings['email']), '%newsletter' => implode(', ', $newsletters))); > } > } > > /** > * Action Implementation: Subscribe an User to a Simplenews newsletter > */ > function simplenews_rules_action_subscribe_user($user, $settings) { > //validate settings > $settings = simplenews_rules_action_validate($settings); > //set newsletters > $tids = $settings['newsletter']; > if ($user->mail && !empty($tids)) { > foreach ($tids as $tid) { > $status = simplenews_subscribe_user($user->mail, $tid, $settings['confirmation']); > } > } > if (!empty($status)) { > $newsletter_all = simplenews_rules_action_get_newsletters(); > foreach ($tids as $tid) { > $newsletters[] = $newsletter_all[$tid]; > } > watchdog('rules', 'E-mail %email subscribed to newsletter %newsletter.', array('%email' => $user->mail, '%newsletter' => implode(', ', $newsletters))); > } > } > > /** > * Action Implementation: Subscribe an e-mail adress from a Simplenews newsletter > */ > function simplenews_rules_action_unsubscribe_email($settings) { > //validate settings > $settings = simplenews_rules_action_validate($settings); > //set newsletters > $tids = $settings['newsletter']; > if (!empty($settings['email']) && !empty($tids)) { > foreach ($settings['email'] as $email) { > foreach ($tids as $tid) { > $status = simplenews_unsubscribe_user($email, $tid, $settings['confirmation']); > } > } > } > if (!empty($status)) { > $newsletter_all = simplenews_rules_action_get_newsletters(); > foreach ($tids as $tid) { > $newsletters[] = $newsletter_all[$tid]; > } > watchdog('rules', 'E-mail %email unsubscribed from newsletter %newsletter.', array('%email' => implode(', ', $settings['email']), '%newsletter' => implode(', ', $newsletters))); > } > } > > /** > * Action Implementation: Unsubscribe an User from a Simplenews newsletter > */ > function simplenews_rules_action_unsubscribe_user($user, $settings) { > //validate settings > $settings = simplenews_rules_action_validate($settings); > //set newsletters > $tids = $settings['newsletter']; > if ($user->mail && !empty($tids)) { > foreach ($tids as $tid) { > $status = simplenews_unsubscribe_user($user->mail, $tid, $settings['confirmation']); > } > } > if (!empty($status)) { > $newsletter_all = simplenews_rules_action_get_newsletters(); > foreach ($tids as $tid) { > $newsletters[] = $newsletter_all[$tid]; > } > watchdog('rules', 'E-mail %email unsubscribed from newsletter %newsletter.', array('%email' => $user->mail, '%newsletter' => implode(', ', $newsletters))); > } > } > > /** > * Action "Subscribe an User to a Simplenews newsletter" configuration form > */ > function simplenews_rules_action_subscribe_user_form($settings = array(), &$form) { > $settings += array('newsletter' => array(), 'advanced_options' => array('tids' => ''), 'confirmation' => ''); > $form['settings']['newsletter'] = array( > '#type' => 'checkboxes', > '#title' => t('Simplenews newsletter'), > '#options' => simplenews_rules_action_get_newsletters(), > '#default_value' => $settings['newsletter'], > '#description' => t("The Simplenews newsletter series the e-mail will be subscribed to or unsubscribed from."), > '#required' => TRUE, > '#weight' => -2, > ); > // Advanced: PHP code. > $form['settings']['advanced_options'] = array( > '#type' => 'fieldset', > '#title' => t('Advanced: Specify the newsletter IDs manually'), > '#collapsible' => TRUE, > '#collapsed' => empty($settings['advanced_options']['tids']), > '#weight' => -1, > ); > $form['settings']['advanced_options']['tids'] = array( > '#type' => 'textarea', > '#title' => t('Advanced: Newsletter Term IDs'), > '#default_value' => $settings['advanced_options']['tids'], > '#description' => t("Here you can specify the Newsletters as Term IDs. You may separate multiple entries with ','. Above checkbox entries will be overwritten!"), > '#weight' => -1, > //'#tree' => FALSE, > ); > $form['settings']['confirmation'] = array( > '#type' => 'checkbox', > '#title' => t('Send Simplenews confirmation mail'), > '#default_value' => $settings['confirmation'], > '#description' => t("Check this box to send the Simplenews confirmation e-mail. The User receives an email to verify the address and complete the subscription/unsubscription."), > '#required' => FALSE, > '#weight' => 0, > ); > } > > /** > * Action "Subscribe an e-mail adress to a Simplenews newsletter" configuration form > */ > function simplenews_rules_action_subscribe_email_form($settings = array(), &$form) { > $settings += array('email' => ''); > $form['settings']['email'] = array( > '#type' => 'textfield', > '#title' => t('E-mail address'), > '#default_value' => $settings['email'], > '#description' => t("The e-mail addresses you want to subscribe or unsubscribe. You may separate multiple addresses with ','."), > '#required' => TRUE, > '#weight' => -5, > ); > //add rest of the form > simplenews_rules_action_subscribe_user_form($settings, $form); > } > > /** > * Action "Subscribe an User to a Simplenews newsletter" configuration form > */ > function simplenews_rules_action_unsubscribe_user_form($settings = array(), &$form) { > //we have the same forms for the unsubscribe actions > simplenews_rules_action_subscribe_user_form($settings, $form); > } > /** > * Action "Subscribe an User to a Simplenews newsletter" configuration form > */ > function simplenews_rules_action_unsubscribe_email_form($settings = array(), &$form) { > //we have the same forms for the unsubscribe actions > simplenews_rules_action_subscribe_email_form($settings, &$form); > } > > /** > * Helper function: Load all available newsletters. > */ > function simplenews_rules_action_get_newsletters() { > $tree = taxonomy_get_tree(variable_get('simplenews_vid', '')); > $terms = array(); > foreach ($tree as $newsletter) { > $terms[$newsletter->tid] = $newsletter->name; > } > return $terms; > } > > /* > * Helper function for validating form settings on execution time, so that tokens/input evaluators apply > */ > function simplenews_rules_action_validate($settings) { > $settings['email'] = empty($settings['email']) ? array() : explode(',', $settings['email']); > foreach ($settings['email'] as $key => $address) { > if (valid_email_address($address)) { > $settings['email'][$key] = str_replace(array("\r", "\n"), '', trim($address)); > } > } > if ($settings['advanced_options']['tids']) { > $tids = explode(',', $settings['advanced_options']['tids']); > foreach ($tids as $tid) { > $newsletter_tids[] = str_replace(array("\r", "\n"), '', trim($tid)); > } > } > $settings['newsletter'] = array_filter($settings['newsletter']); > //overwrite with tid values if given > $settings['newsletter'] = $newsletter_tids ? $newsletter_tids : $settings['newsletter']; > return $settings; > } > > /** > * @} > */