Skip to content

Commit

Permalink
dev/core#1790 - Contact Card - Email Links
Browse files Browse the repository at this point in the history
Alternate to #17517

The current PR stalled on the issue that passing 'email' to the email task could load up
the wrong contact. This gets around that by doing a separate (but hopefully quick) lookup
to grab the email id. I also made it dependent on the url having is_show_email_task=1 in
it. I went back & forwards on that vs is_backoffice
  • Loading branch information
eileenmcnaughton committed Sep 28, 2020
1 parent 5653540 commit 764dadf
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 9 deletions.
2 changes: 1 addition & 1 deletion CRM/Contact/BAO/Contact/Utils.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public static function getImage($contactType, $urlOnly = FALSE, $contactId = NUL
}

$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>';
Expand Down
47 changes: 44 additions & 3 deletions CRM/Profile/Page/Dynamic.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
+--------------------------------------------------------------------+
*/

use Civi\Api4\Email;

/**
*
* @package CRM
Expand Down Expand Up @@ -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
Expand All @@ -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);
Expand Down Expand Up @@ -314,7 +326,10 @@ public function run() {

$labels[$index] = preg_replace('/\s+|\W+/', '_', $name);
}

$this->isShowEmailTaskLink = 1;
if ($this->isShowEmailTaskLink && !empty($fields['email-Primary'])) {
$values[$fields['email-Primary']['title']] = $this->getLinkedEmail($values[$fields['email-Primary']['title']]);
}
foreach ($values as $title => $value) {
$profileFields[$labels[$title]] = [
'label' => $title,
Expand Down Expand Up @@ -416,4 +431,30 @@ public function overrideExtraTemplateFileName() {
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()->setWhere([['contact_id', '=', $this->_id], ['is_primary', '=', TRUE], ['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>';
}

}
10 changes: 9 additions & 1 deletion CRM/Profile/Page/View.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -44,6 +51,7 @@ public function preProcess() {
$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');
Expand Down Expand Up @@ -77,7 +85,7 @@ public function preProcess() {

$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();
Expand Down
2 changes: 1 addition & 1 deletion tests/phpunit/CRM/Activity/Form/SearchTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public function testSearch() {
$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',
Expand Down
2 changes: 1 addition & 1 deletion tests/phpunit/CRM/Financial/Page/AjaxTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public function testGetFinancialTransactionsList() {
$_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>"]] }');
Expand Down
2 changes: 1 addition & 1 deletion tests/phpunit/CRM/Member/Selector/SearchTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public function testSelectorGetRows() {
$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'),
Expand Down
2 changes: 1 addition & 1 deletion tests/phpunit/CRM/Pledge/Form/SearchTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public function testSearch() {
'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]);
}

Expand Down

0 comments on commit 764dadf

Please sign in to comment.