Skip to content
Snippets Groups Projects
Unverified Commit 9ae46942 authored by Seamus Lee's avatar Seamus Lee Committed by GitHub
Browse files

Merge pull request #18623 from eileenmcnaughton/rene

#1790 - Contact Card - Email Links
parents 5f019b82 b7edabe8
No related branches found
No related tags found
No related merge requests found
......@@ -80,7 +80,7 @@ class CRM_Contact_BAO_Contact_Utils {
}
$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>';
......
......@@ -9,6 +9,8 @@
+--------------------------------------------------------------------+
*/
use Civi\Api4\Email;
/**
*
* @package CRM
......@@ -78,6 +80,13 @@ class CRM_Profile_Page_Dynamic extends CRM_Core_Page {
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
......@@ -97,15 +106,18 @@ class CRM_Profile_Page_Dynamic extends CRM_Core_Page {
* @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);
......@@ -315,6 +327,11 @@ class CRM_Profile_Page_Dynamic extends CRM_Core_Page {
$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,
......@@ -416,4 +433,47 @@ class CRM_Profile_Page_Dynamic extends CRM_Core_Page {
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;
}
}
......@@ -35,6 +35,13 @@ class CRM_Profile_Page_View extends CRM_Core_Page {
*/
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.
......@@ -44,6 +51,7 @@ class CRM_Profile_Page_View extends CRM_Core_Page {
$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');
......@@ -77,7 +85,7 @@ class CRM_Profile_Page_View extends CRM_Core_Page {
$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();
......
......@@ -38,7 +38,7 @@ class CRM_Activity_Form_SearchTest extends CiviUnitTestCase {
$this->assertEquals([
[
'contact_id' => '3',
'contact_type' => '<a href="/index.php?q=civicrm/profile/view&amp;reset=1&amp;gid=7&amp;id=3&amp;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&amp;reset=1&amp;gid=7&amp;id=3&amp;snippet=4&amp;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',
......
......@@ -33,7 +33,7 @@ class CRM_Financial_Page_AjaxTest extends CiviUnitTestCase {
$_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&amp;reset=1&amp;gid=7&amp;id=3&amp;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&amp;reset=1&amp;gid=7&amp;id=3&amp;snippet=4&amp;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&amp;reset=1&amp;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&amp;reset=1&amp;id=1&amp;cid=3&amp;action=view&amp;context=contribution&amp;'
. 'selectedChild=contribute\" class=\"action-item crm-hover-button\" title=\'View Contribution\' >View</a></span>"]] }');
......
......@@ -35,7 +35,7 @@ class CRM_Member_Selector_SearchTest extends CiviUnitTestCase {
$this->assertEquals([
'contact_id' => $this->_contactID,
'membership_id' => $membershipID,
'contact_type' => '<a href="/index.php?q=civicrm/profile/view&amp;reset=1&amp;gid=7&amp;id=' . $this->_contactID . '&amp;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&amp;reset=1&amp;gid=7&amp;id=' . $this->_contactID . '&amp;snippet=4&amp;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'),
......
......@@ -53,7 +53,7 @@ class CRM_Pledge_Form_SearchTest extends CiviUnitTestCase {
'pledge_status_name' => 'Pending Label**',
'checkbox' => 'mark_x_1',
'action' => '<span><a href="/index.php?q=civicrm/contact/view/pledge&amp;reset=1&amp;id=1&amp;cid=3&amp;action=view&amp;context=search&amp;selectedChild=pledge&amp;key=' . $qfKey . '" class="action-item crm-hover-button" title=' . "'" . 'View Pledge' . "'" . ' >View</a><a href="/index.php?q=civicrm/contact/view/pledge&amp;reset=1&amp;action=update&amp;id=1&amp;cid=3&amp;context=search&amp;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&amp;reset=1&amp;action=detach&amp;id=1&amp;cid=3&amp;context=search&amp;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&amp;reset=1&amp;action=delete&amp;id=1&amp;cid=3&amp;context=search&amp;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&amp;reset=1&amp;gid=7&amp;id=3&amp;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&amp;reset=1&amp;gid=7&amp;id=3&amp;snippet=4&amp;is_show_email_task=1" class="crm-summary-link"><div class="icon crm-icon Individual-icon"></div></a>',
], $rows[0]);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment