}
$profileURL = CRM_Utils_System::url('civicrm/profile/view',
- "reset=1&gid={$summaryOverlayProfileId}&id={$contactId}&snippet=4"
+ "reset=1&gid={$summaryOverlayProfileId}&id={$contactId}&snippet=4&is_show_email_task=1"
);
$imageInfo[$contactType]['summary-link'] = '<a href="' . $profileURL . '" class="crm-summary-link">' . $imageInfo[$contactType]['image'] . '</a>';
+--------------------------------------------------------------------+
*/
+use Civi\Api4\Email;
+
/**
*
* @package CRM
protected $_recordId = NULL;
+ /**
+ * Should the primary email be converted into a link, if emailabe.
+ *
+ * @var bool
+ */
+ protected $isShowEmailTaskLink = FALSE;
+
/**
*
* fetch multirecord as well as non-multirecord fields
* @param bool $skipPermission
* @param null $profileIds
*
- * @return \CRM_Profile_Page_Dynamic
+ * @param bool $isShowEmailTaskLink
+ *
+ * @throws \CRM_Core_Exception
*/
- public function __construct($id, $gid, $restrict, $skipPermission = FALSE, $profileIds = NULL) {
+ public function __construct($id, $gid, $restrict, $skipPermission = FALSE, $profileIds = NULL, $isShowEmailTaskLink = FALSE) {
parent::__construct();
$this->_id = $id;
$this->_gid = $gid;
$this->_restrict = $restrict;
$this->_skipPermission = $skipPermission;
+ $this->isShowEmailTaskLink = $isShowEmailTaskLink;
if (!array_key_exists('multiRecord', $_GET)) {
$this->set('multiRecord', NULL);
$labels[$index] = preg_replace('/\s+|\W+/', '_', $name);
}
+ if ($this->isShowEmailTaskLink) {
+ foreach ($this->getEmailFields($fields) as $fieldName) {
+ $values[$fields[$fieldName]['title']] = $this->getLinkedEmail($values[$fields[$fieldName]['title']]);
+ }
+ }
foreach ($values as $title => $value) {
$profileFields[$labels[$title]] = [
'label' => $title,
return $fileName ? $fileName : parent::overrideExtraTemplateFileName();
}
+ /**
+ * Get the email field as a task link, if not on hold or set to do_not_email.
+ *
+ * @param string $email
+ *
+ * @return string
+ * @throws \API_Exception
+ * @throws \Civi\API\Exception\UnauthorizedException
+ */
+ protected function getLinkedEmail($email): string {
+ if (!$email) {
+ return '';
+ }
+ $emailID = Email::get()->setOrderBy(['is_primary' => 'DESC'])->setWhere([['contact_id', '=', $this->_id], ['email', '=', $email], ['on_hold', '=', FALSE], ['contact.is_deceased', '=', FALSE], ['contact.is_deleted', '=', FALSE], ['contact.do_not_email', '=', FALSE]])->execute()->first()['id'];
+ if (!$emailID) {
+ return $email;
+ }
+ $emailPopupUrl = CRM_Utils_System::url('civicrm/activity/email/add', [
+ 'action' => 'add',
+ 'reset' => '1',
+ 'email_id' => $emailID,
+ ], TRUE);
+
+ return '<a class="crm-popup" href="' . $emailPopupUrl . '">' . $email . '</a>';
+ }
+
+ /**
+ * Get the email fields from within the fields array.
+ *
+ * @param array $fields
+ */
+ protected function getEmailFields(array $fields): array {
+ $emailFields = [];
+ foreach (array_keys($fields) as $fieldName) {
+ if (substr($fieldName, 0, 6) === 'email-'
+ && (is_numeric(substr($fieldName, 6)) || substr($fieldName, 6) ===
+ 'Primary')) {
+ $emailFields[] = $fieldName;
+ }
+ }
+ return $emailFields;
+ }
+
}
*/
protected $_gid;
+ /**
+ * Should the primary email be converted into a link, if emailabe.
+ *
+ * @var bool
+ */
+ protected $isShowEmailTaskLink = FALSE;
+
/**
* Heart of the viewing process. The runner gets all the meta data for
* the contact and calls the appropriate type of page to view.
$this->_id = CRM_Utils_Request::retrieve('id', 'Positive',
$this, FALSE
);
+ $this->isShowEmailTaskLink = CRM_Utils_Request::retrieve('is_show_email_task', 'Positive', $this);
if (!$this->_id) {
$session = CRM_Core_Session::singleton();
$this->_id = $session->get('userID');
$anyContent = TRUE;
if ($this->_gid) {
- $page = new CRM_Profile_Page_Dynamic($this->_id, $this->_gid, 'Profile', FALSE, $profileIds);
+ $page = new CRM_Profile_Page_Dynamic($this->_id, $this->_gid, 'Profile', FALSE, $profileIds, $this->isShowEmailTaskLink);
$profileGroup = [];
$profileGroup['title'] = NULL;
$profileGroup['content'] = $page->run();
$this->assertEquals([
[
'contact_id' => '3',
- 'contact_type' => '<a href="/index.php?q=civicrm/profile/view&reset=1&gid=7&id=3&snippet=4" class="crm-summary-link"><div class="icon crm-icon Individual-icon"></div></a>',
+ 'contact_type' => '<a href="/index.php?q=civicrm/profile/view&reset=1&gid=7&id=3&snippet=4&is_show_email_task=1" class="crm-summary-link"><div class="icon crm-icon Individual-icon"></div></a>',
'sort_name' => 'Anderson, Anthony',
'display_name' => 'Mr. Anthony Anderson II',
'activity_id' => '1',
$_REQUEST['return'] = TRUE;
$json = CRM_Financial_Page_AJAX::getFinancialTransactionsList();
$json = str_replace(rtrim(CIVICRM_UF_BASEURL, '/'), 'http://FIX ME', $json);
- $this->assertEquals($json, '{"sEcho": 1, "iTotalRecords": 1, "iTotalDisplayRecords": 1, "aaData": [ ["","<a href=\"/index.php?q=civicrm/profile/view&reset=1&gid=7&id=3&snippet=4\" class=\"crm-summary-link\"><div'
+ $this->assertEquals($json, '{"sEcho": 1, "iTotalRecords": 1, "iTotalDisplayRecords": 1, "aaData": [ ["","<a href=\"/index.php?q=civicrm/profile/view&reset=1&gid=7&id=3&snippet=4&is_show_email_task=1\" class=\"crm-summary-link\"><div'
. ' class=\"icon crm-icon Individual-icon\"></div></a>","<a href=/index.php?q=civicrm/contact/view&reset=1&cid=3>Anderson, Anthony</a>","$ 100.00","12345","' . CRM_Utils_Date::customFormat(date('Ymd')) . ' 12:00 AM","' . CRM_Utils_Date::customFormat(date('Ymd')) . ' 12:00 AM",'
. '"Credit Card","Completed","Donation","<span><a href=\"/index.php?q=civicrm/contact/view/contribution&reset=1&id=1&cid=3&action=view&context=contribution&'
. 'selectedChild=contribute\" class=\"action-item crm-hover-button\" title=\'View Contribution\' >View</a></span>"]] }');
$this->assertEquals([
'contact_id' => $this->_contactID,
'membership_id' => $membershipID,
- 'contact_type' => '<a href="/index.php?q=civicrm/profile/view&reset=1&gid=7&id=' . $this->_contactID . '&snippet=4" class="crm-summary-link"><div class="icon crm-icon Individual-icon"></div></a>',
+ 'contact_type' => '<a href="/index.php?q=civicrm/profile/view&reset=1&gid=7&id=' . $this->_contactID . '&snippet=4&is_show_email_task=1" class="crm-summary-link"><div class="icon crm-icon Individual-icon"></div></a>',
'sort_name' => 'Anderson, Anthony',
'membership_type' => 'General',
'membership_join_date' => date('Y-m-d'),
'pledge_status_name' => 'Pending Label**',
'checkbox' => 'mark_x_1',
'action' => '<span><a href="/index.php?q=civicrm/contact/view/pledge&reset=1&id=1&cid=3&action=view&context=search&selectedChild=pledge&key=' . $qfKey . '" class="action-item crm-hover-button" title=' . "'" . 'View Pledge' . "'" . ' >View</a><a href="/index.php?q=civicrm/contact/view/pledge&reset=1&action=update&id=1&cid=3&context=search&key=' . $qfKey . '" class="action-item crm-hover-button" title=' . "'" . 'Edit Pledge' . "'" . ' >Edit</a></span><span class=' . "'" . 'btn-slide crm-hover-button' . "'" . '>more<ul class=' . "'" . 'panel' . "'" . '><li><a href="/index.php?q=civicrm/contact/view/pledge&reset=1&action=detach&id=1&cid=3&context=search&key=' . $qfKey . '" class="action-item crm-hover-button" title=' . "'" . 'Cancel Pledge' . "'" . ' onclick = "return confirm(' . "'" . 'Cancelling this pledge will also cancel any scheduled (and not completed) pledge payments. This action cannot be undone. Do you want to continue?' . "'" . ');">Cancel</a></li><li><a href="/index.php?q=civicrm/contact/view/pledge&reset=1&action=delete&id=1&cid=3&context=search&key=' . $qfKey . '" class="action-item crm-hover-button small-popup" title=' . "'" . 'Delete Pledge' . "'" . ' >Delete</a></li></ul></span>',
- 'contact_type' => '<a href="/index.php?q=civicrm/profile/view&reset=1&gid=7&id=3&snippet=4" class="crm-summary-link"><div class="icon crm-icon Individual-icon"></div></a>',
+ 'contact_type' => '<a href="/index.php?q=civicrm/profile/view&reset=1&gid=7&id=3&snippet=4&is_show_email_task=1" class="crm-summary-link"><div class="icon crm-icon Individual-icon"></div></a>',
], $rows[0]);
}