/** * Unsubscribe a contact from the domain. * * @param int $job_id * The job ID. * @param int $queue_id * The Queue Event ID of the recipient. * @param string $hash * The hash. * * @return bool * Was the contact successfully unsubscribed? */ public static function unsub_from_domain($job_id, $queue_id, $hash) { $q = CRM_Mailing_Event_BAO_Queue::verify($job_id, $queue_id, $hash); if (!$q) { return FALSE; } $transaction = new CRM_Core_Transaction(); $now = date('YmdHis'); if (CRM_Core_BAO_Email::isMultipleBulkMail()) { $email = new CRM_Core_BAO_Email(); $email->id = $q->email_id; if ($email->find(TRUE)) { $sql = "\nUPDATE civicrm_email\nSET on_hold = 2,\n hold_date = %1\nWHERE email = %2\n"; $sqlParams = array(1 => array($now, 'Timestamp'), 2 => array($email->email, 'String')); CRM_Core_DAO::executeQuery($sql, $sqlParams); } } else { $contact = new CRM_Contact_BAO_Contact(); $contact->id = $q->contact_id; $contact->is_opt_out = TRUE; $contact->save(); } $ue = new CRM_Mailing_Event_BAO_Unsubscribe(); $ue->event_queue_id = $queue_id; $ue->org_unsubscribe = 1; $ue->time_stamp = $now; $ue->save(); $shParams = array('contact_id' => $q->contact_id, 'group_id' => NULL, 'status' => 'Removed', 'method' => 'Email', 'tracking' => $ue->id); CRM_Contact_BAO_SubscriptionHistory::create($shParams); $transaction->commit(); return TRUE; }
/** * Unsubscribe a contact from the domain * * @param int $job_id The job ID * @param int $queue_id The Queue Event ID of the recipient * @param string $hash The hash * @return boolean Was the contact succesfully unsubscribed? * @access public * @static */ public static function unsub_from_domain($job_id, $queue_id, $hash) { $q =& CRM_Mailing_Event_BAO_Queue::verify($job_id, $queue_id, $hash); if (!$q) { return false; } require_once 'CRM/Core/Transaction.php'; $transaction = new CRM_Core_Transaction(); $contact = new CRM_Contact_BAO_Contact(); $contact->id = $q->contact_id; $contact->is_opt_out = true; $contact->save(); $ue = new CRM_Mailing_Event_BAO_Unsubscribe(); $ue->event_queue_id = $queue_id; $ue->org_unsubscribe = 1; $ue->time_stamp = date('YmdHis'); $ue->save(); $shParams = array('contact_id' => $q->contact_id, 'group_id' => null, 'status' => 'Removed', 'method' => 'Email', 'tracking' => $ue->id); CRM_Contact_BAO_SubscriptionHistory::create($shParams); $transaction->commit(); return true; }
/** * process the form after the input has been submitted and validated * * @access public * * @return void */ public function postProcess() { //get the submitted values in an array $params = $this->controller->exportValues($this->_name); $actionTypeOption = CRM_Utils_Array::value('actionTypeOption', $params, NULL); // If remove option has been selected set new privacy value to "false" $privacyValueNew = empty($actionTypeOption); // check if any privay option has been checked if (!empty($params['pref'])) { $privacyValues = $params['pref']; $count = 0; foreach ($this->_contactIds as $contact_id) { $contact = new CRM_Contact_BAO_Contact(); $contact->id = $contact_id; foreach ($privacyValues as $privacy_key => $privacy_value) { $contact->{$privacy_key} = $privacyValueNew; } $contact->save(); $count++; } // Status message $privacyOptions = CRM_Core_SelectValues::privacy(); $status = array(); foreach ($privacyValues as $privacy_key => $privacy_value) { $label = $privacyOptions[$privacy_key]; $status[] = $privacyValueNew ? ts("Added '%1'", array(1 => $label)) : ts("Removed '%1'", array(1 => $label)); } $status = '<ul><li>' . implode('</li><li>', $status) . '</li></ul>'; if ($count > 1) { $title = ts('%1 Contacts Updated', array(1 => $count)); } else { $name = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $contact_id, 'display_name'); $title = ts('%1 Updated', array(1 => $name)); } CRM_Core_Session::setStatus($status, $title, 'success'); } }
/** * Regenerates display_name for contacts with given prefixes/suffixes. * * @param array $ids * The array with the prefix/suffix id governing which contacts to regenerate. * @param int $action * The action describing whether prefix/suffix was UPDATED or DELETED. */ public static function updateDisplayNames(&$ids, $action) { // get the proper field name (prefix_id or suffix_id) and its value $fieldName = ''; foreach ($ids as $key => $value) { switch ($key) { case 'individualPrefix': $fieldName = 'prefix_id'; $fieldValue = $value; break 2; case 'individualSuffix': $fieldName = 'suffix_id'; $fieldValue = $value; break 2; } } if ($fieldName == '') { return; } // query for the affected individuals $fieldValue = CRM_Utils_Type::escape($fieldValue, 'Integer'); $contact = new CRM_Contact_BAO_Contact(); $contact->{$fieldName} = $fieldValue; $contact->find(); // iterate through the affected individuals and rebuild their display_names while ($contact->fetch()) { $contact = new CRM_Contact_BAO_Contact(); $contact->id = $contact->contact_id; if ($action == CRM_Core_Action::DELETE) { $contact->{$fieldName} = 'NULL'; $contact->save(); } $contact->display_name = $contact->displayName(); $contact->save(); } }