You are here

datereminder.rules.inc in Date Reminder 7

DateReminder rules.

File

datereminder.rules.inc
View source
<?php

/**
 * @file
 * 
 * DateReminder rules.
 *
 */
function datereminder_rules_action_info() {
  $actions = array(
    'datereminder_rules_action_set_reminder' => array(
      'label' => t('Set a reminder'),
      'group' => t('Date Reminder'),
      'parameter' => array(
        'node' => array(
          'type' => 'node',
          'label' => t('Node'),
          'save' => true,
        ),
        'user' => array(
          'type' => 'user',
          'label' => t('User'),
        ),
        'leadtime' => array(
          'type' => 'integer',
          'label' => t('Reminder lead time'),
          'options list' => 'datereminder_rules_type_leadtime_list',
        ),
      ),
    ),
    'datereminder_rules_action_delete_all_node_reminders' => array(
      'label' => t('Delete all reminders for node'),
      'group' => t('Date Reminder'),
      'access callback' => 'datereminder_access_can_administer_reminders',
      'parameter' => array(
        'node' => array(
          'type' => 'node',
          'label' => t('Node'),
          'save' => true,
        ),
      ),
    ),
    'datereminder_rules_action_set_enable_reminder' => array(
      'label' => t('Set reminder enable on node'),
      'group' => t('Date Reminder'),
      'parameter' => array(
        'node' => array(
          'type' => 'node',
          'label' => t('Node'),
          'save' => true,
        ),
        'enabled' => array(
          'type' => 'boolean',
          'label' => t('Enable setting'),
        ),
      ),
    ),
  );
  return $actions;
}
function datereminder_rules_condition_info() {
  $conditions = array(
    'datereminder_rules_condition_reminder_enabled' => array(
      'label' => t('Node allows reminders'),
      'group' => t('Date Reminder'),
      'parameter' => array(
        'node' => array(
          'type' => 'node',
          'label' => t('Node'),
          'save' => false,
        ),
      ),
    ),
    'datereminder_rules_condition_user_may_set' => array(
      'label' => t('User may set reminder on node'),
      'group' => t('Date Reminder'),
      'parameter' => array(
        'node' => array(
          'type' => 'node',
          'label' => t('Node'),
          'save' => false,
        ),
        'user' => array(
          'type' => 'user',
          'label' => t('User'),
          'save' => false,
        ),
      ),
    ),
  );
  return $conditions;
}

/**
 * Return set of allowed reminder values for the set reminder rule.
 * @return type
 */
function datereminder_rules_type_leadtime_list() {
  module_load_include('inc', 'datereminder', 'includes/datereminder_form');
  return _datereminder_leadtime_list();
}

/**
 * Called as a rule action to set a reminder on the given node.
 * @param type $node
 * @param type $user
 * @param type $lead
 */
function datereminder_rules_action_set_reminder($node, $user, $lead) {
  if (!datereminder_rules_condition_user_may_set($node, $user)) {
    return;
  }
  module_load_include('inc', 'datereminder', 'includes/db7');

  // Get existing reminders so we can check for redundancy.
  $selector = array(
    'nid' => $node->nid,
    'uid' => $user->uid,
  );
  $reminders = _datereminder_load_reminders($selector, $node);
  foreach ($reminders as $r) {
    if ($r->leadtime == $lead) {

      // Reminder is already set.
      return;
    }
  }

  // Create new reminder.
  $r = (object) array();
  $r->rid = -1;
  $r->leadtime = $lead;
  $r->nid = $node->nid;
  $r->uid = $user->uid;
  $r->email = NULL;
  $r->next_due = NULL;
  module_load_include('inc', 'datereminder', 'includes/node');
  _datereminder_get_next_reminder($r);
  $reminders[] = $r;
  _datereminder_set_reminders($reminders);
}

/**
 * Check if reminders are possible for node.
 * @param type $node
 */
function datereminder_rules_condition_reminder_enabled($node) {
  module_load_include('inc', 'datereminder', 'includes/defines');
  if (!isset($node) || $node->datereminder_enabled != DATEREMINDER_TYPE_ON) {
    return false;
  }

  // Does node have any future dates?
  module_load_include('inc', 'datereminder', 'includes/date');
  $datefield = _datereminder_get_node_datefield($node);
  $rtime = _datereminder_get_next_occurance($datefield);
  if (!isset($rtime)) {

    // Date has passed.
    return false;
  }
  return true;
}

/**
 * Can the given user set reminders on this node?
 * @param type $node
 * @param type $user
 * @return boolean
 */
function datereminder_rules_condition_user_may_set($node, $user) {
  if (!isset($user) || $user->uid == 0) {
    return false;
  }
  if (!isset($user)) {
    return false;
  }
  if (!datereminder_rules_condition_reminder_enabled($node)) {
    return false;
  }
  if (!user_access(DATEREMINDER_REQUEST_REMINDER, $user)) {
    return false;
  }
  return true;
}
function datereminder_rules_action_set_enable_reminder($node, $enable) {
  if (!isset($node)) {
    return;
  }
  $type_enabled = _datereminder_type_enabled($node->type);
  if ($type_enabled >= DATEREMINDER_TYPE_ALLOWED) {
    $node->datereminder_enabled = $enable ? DATEREMINDER_TYPE_ON : DATEREMINDER_TYPE_RETAIN;
  }
}

/**
 * Delete all reminders for a node.
 *
 * @param type $node
 */
function datereminder_rules_action_delete_all_node_reminders($node) {
  if (isset($node)) {
    module_load_include('inc', 'datereminder', 'includes/db7');
    _datereminder_clean_node_reminders($node->nid);
  }
}

Functions

Namesort descending Description
datereminder_rules_action_delete_all_node_reminders Delete all reminders for a node.
datereminder_rules_action_info @file
datereminder_rules_action_set_enable_reminder
datereminder_rules_action_set_reminder Called as a rule action to set a reminder on the given node.
datereminder_rules_condition_info
datereminder_rules_condition_reminder_enabled Check if reminders are possible for node.
datereminder_rules_condition_user_may_set Can the given user set reminders on this node?
datereminder_rules_type_leadtime_list Return set of allowed reminder values for the set reminder rule.