First commit
This commit is contained in:
commit
c6e2478c40
13918 changed files with 2303184 additions and 0 deletions
800
sites/all/modules/civicrm/CRM/Profile/Selector/Listings.php
Normal file
800
sites/all/modules/civicrm/CRM/Profile/Selector/Listings.php
Normal file
|
@ -0,0 +1,800 @@
|
|||
<?php
|
||||
/*
|
||||
+--------------------------------------------------------------------+
|
||||
| CiviCRM version 4.7 |
|
||||
+--------------------------------------------------------------------+
|
||||
| Copyright CiviCRM LLC (c) 2004-2017 |
|
||||
+--------------------------------------------------------------------+
|
||||
| This file is a part of CiviCRM. |
|
||||
| |
|
||||
| CiviCRM is free software; you can copy, modify, and distribute it |
|
||||
| under the terms of the GNU Affero General Public License |
|
||||
| Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
|
||||
| |
|
||||
| CiviCRM is distributed in the hope that it will be useful, but |
|
||||
| WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
|
||||
| See the GNU Affero General Public License for more details. |
|
||||
| |
|
||||
| You should have received a copy of the GNU Affero General Public |
|
||||
| License and the CiviCRM Licensing Exception along |
|
||||
| with this program; if not, contact CiviCRM LLC |
|
||||
| at info[AT]civicrm[DOT]org. If you have questions about the |
|
||||
| GNU Affero General Public License or the licensing of CiviCRM, |
|
||||
| see the CiviCRM license FAQ at http://civicrm.org/licensing |
|
||||
+--------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @package CRM
|
||||
* @copyright CiviCRM LLC (c) 2004-2017
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class is used to retrieve and display a range of
|
||||
* contacts that match the given criteria (specifically for
|
||||
* results of advanced search options.
|
||||
*
|
||||
*/
|
||||
class CRM_Profile_Selector_Listings extends CRM_Core_Selector_Base implements CRM_Core_Selector_API {
|
||||
|
||||
/**
|
||||
* Array of supported links, currently view and edit
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
static $_links = NULL;
|
||||
|
||||
/**
|
||||
* We use desc to remind us what that column is, name is used in the tpl
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
static $_columnHeaders;
|
||||
|
||||
/**
|
||||
* The sql params we use to get the list of contacts.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_params;
|
||||
|
||||
/**
|
||||
* The public visible fields to be shown to the user.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_fields;
|
||||
|
||||
/**
|
||||
* The custom fields for this domain.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_customFields;
|
||||
|
||||
/**
|
||||
* Cache the query object.
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
protected $_query;
|
||||
|
||||
/**
|
||||
* Cache the expanded options list if any.
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
protected $_options;
|
||||
|
||||
/**
|
||||
* The group id that we are editing.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $_gid;
|
||||
|
||||
/**
|
||||
* Do we enable mapping of users.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
protected $_map;
|
||||
|
||||
/**
|
||||
* Do we enable edit link.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
protected $_editLink;
|
||||
|
||||
/**
|
||||
* Should we link to the UF Profile.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
protected $_linkToUF;
|
||||
|
||||
/**
|
||||
* Store profile ids if multiple profile ids are passed using comma separated.
|
||||
* Currently lets implement this functionality only for dialog mode
|
||||
*/
|
||||
protected $_profileIds = array();
|
||||
|
||||
protected $_multiRecordTableName = NULL;
|
||||
|
||||
/**
|
||||
* Class constructor.
|
||||
*
|
||||
* @param array $params the params for the where clause
|
||||
* @param array $customFields
|
||||
* @param array $ufGroupIds
|
||||
* @param bool $map
|
||||
* @param bool $editLink
|
||||
* @param bool $linkToUF
|
||||
*
|
||||
* @return \CRM_Profile_Selector_Listings
|
||||
*/
|
||||
public function __construct(
|
||||
&$params,
|
||||
&$customFields,
|
||||
$ufGroupIds = NULL,
|
||||
$map = FALSE,
|
||||
$editLink = FALSE,
|
||||
$linkToUF = FALSE
|
||||
) {
|
||||
$this->_params = $params;
|
||||
|
||||
if (is_array($ufGroupIds)) {
|
||||
$this->_profileIds = $ufGroupIds;
|
||||
$this->_gid = $ufGroupIds[0];
|
||||
}
|
||||
else {
|
||||
$this->_profileIds = array($ufGroupIds);
|
||||
$this->_gid = $ufGroupIds;
|
||||
}
|
||||
|
||||
$this->_map = $map;
|
||||
$this->_editLink = $editLink;
|
||||
$this->_linkToUF = $linkToUF;
|
||||
|
||||
//get the details of the uf group
|
||||
if ($this->_gid) {
|
||||
$groupId = CRM_Core_DAO::getFieldValue('CRM_Core_BAO_UFGroup',
|
||||
$this->_gid, 'limit_listings_group_id'
|
||||
);
|
||||
}
|
||||
|
||||
// add group id to params if a uf group belong to a any group
|
||||
if ($groupId) {
|
||||
if (!empty($this->_params['group'])) {
|
||||
$this->_params['group'][$groupId] = 1;
|
||||
}
|
||||
else {
|
||||
$this->_params['group'] = array($groupId => 1);
|
||||
}
|
||||
}
|
||||
|
||||
$this->_fields = CRM_Core_BAO_UFGroup::getListingFields(CRM_Core_Action::VIEW,
|
||||
CRM_Core_BAO_UFGroup::PUBLIC_VISIBILITY |
|
||||
CRM_Core_BAO_UFGroup::LISTINGS_VISIBILITY,
|
||||
FALSE, $this->_profileIds
|
||||
);
|
||||
|
||||
$this->_customFields = &$customFields;
|
||||
|
||||
$returnProperties = CRM_Contact_BAO_Contact::makeHierReturnProperties($this->_fields);
|
||||
$returnProperties['contact_type'] = 1;
|
||||
$returnProperties['contact_sub_type'] = 1;
|
||||
$returnProperties['sort_name'] = 1;
|
||||
|
||||
$queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_params, 1);
|
||||
$this->_query = new CRM_Contact_BAO_Query($queryParams, $returnProperties, $this->_fields);
|
||||
|
||||
//the below is done for query building for multirecord custom field listing
|
||||
//to show all the custom field multi valued records of a particular contact
|
||||
$this->setMultiRecordTableName($this->_fields);
|
||||
|
||||
$this->_options = &$this->_query->_options;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the links that are given for each search row.
|
||||
*
|
||||
* @param bool $map
|
||||
* @param bool $editLink
|
||||
* @param bool $ufLink
|
||||
* @param null $gids
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function &links($map = FALSE, $editLink = FALSE, $ufLink = FALSE, $gids = NULL) {
|
||||
if (!self::$_links) {
|
||||
self::$_links = array();
|
||||
|
||||
$viewPermission = TRUE;
|
||||
if ($gids) {
|
||||
// check view permission for each profile id, in case multiple profile ids are rendered
|
||||
// then view action is disabled if any profile returns false
|
||||
foreach ($gids as $profileId) {
|
||||
$viewPermission = CRM_Core_Permission::ufGroupValid($profileId, CRM_Core_Permission::VIEW);
|
||||
if (!$viewPermission) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($viewPermission) {
|
||||
self::$_links[CRM_Core_Action::VIEW] = array(
|
||||
'name' => ts('View'),
|
||||
'url' => 'civicrm/profile/view',
|
||||
'qs' => 'reset=1&id=%%id%%&gid=%%gid%%',
|
||||
'title' => ts('View Profile Details'),
|
||||
);
|
||||
}
|
||||
|
||||
if ($editLink) {
|
||||
self::$_links[CRM_Core_Action::UPDATE] = array(
|
||||
'name' => ts('Edit'),
|
||||
'url' => 'civicrm/profile/edit',
|
||||
'qs' => 'reset=1&id=%%id%%&gid=%%gid%%',
|
||||
'title' => ts('Edit'),
|
||||
);
|
||||
}
|
||||
|
||||
if ($ufLink) {
|
||||
self::$_links[CRM_Core_Action::PROFILE] = array(
|
||||
'name' => ts('Website Profile'),
|
||||
'url' => 'user/%%ufID%%',
|
||||
'qs' => ' ',
|
||||
'title' => ts('View Website Profile'),
|
||||
);
|
||||
}
|
||||
|
||||
if ($map) {
|
||||
self::$_links[CRM_Core_Action::MAP] = array(
|
||||
'name' => ts('Map'),
|
||||
'url' => 'civicrm/profile/map',
|
||||
'qs' => 'reset=1&cid=%%id%%&gid=%%gid%%',
|
||||
'title' => ts('Map'),
|
||||
);
|
||||
}
|
||||
}
|
||||
return self::$_links;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for array of the parameters required for creating pager.
|
||||
*
|
||||
* @param $action
|
||||
* @param array $params
|
||||
*/
|
||||
public function getPagerParams($action, &$params) {
|
||||
$status = CRM_Utils_System::isNull($this->_multiRecordTableName) ? ts('Contact %%StatusMessage%%') : ts('Contact Multi Records %%StatusMessage%%');
|
||||
$params['status'] = $status;
|
||||
$params['csvString'] = NULL;
|
||||
$params['rowCount'] = CRM_Utils_Pager::ROWCOUNT;
|
||||
|
||||
$params['buttonTop'] = 'PagerTopButton';
|
||||
$params['buttonBottom'] = 'PagerBottomButton';
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the column headers as an array of tuples:
|
||||
* (name, sortName (key to the sort array))
|
||||
*
|
||||
* @param string $action
|
||||
* The action being performed.
|
||||
* @param string $output
|
||||
* What should the result set include (web/email/csv).
|
||||
*
|
||||
* @return array
|
||||
* the column headers that need to be displayed
|
||||
*/
|
||||
public function &getColumnHeaders($action = NULL, $output = NULL) {
|
||||
static $skipFields = array('group', 'tag');
|
||||
$multipleFields = array('url');
|
||||
$direction = CRM_Utils_Sort::ASCENDING;
|
||||
$empty = TRUE;
|
||||
if (!isset(self::$_columnHeaders)) {
|
||||
self::$_columnHeaders = array(
|
||||
array('name' => ''),
|
||||
array(
|
||||
'name' => ts('Name'),
|
||||
'sort' => 'sort_name',
|
||||
'direction' => CRM_Utils_Sort::ASCENDING,
|
||||
'field_name' => 'sort_name',
|
||||
),
|
||||
);
|
||||
|
||||
$locationTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id');
|
||||
|
||||
foreach ($this->_fields as $name => $field) {
|
||||
// skip pseudo fields
|
||||
if (substr($name, 0, 9) == 'phone_ext') {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!empty($field['in_selector']) &&
|
||||
!in_array($name, $skipFields)
|
||||
) {
|
||||
|
||||
if (strpos($name, '-') !== FALSE) {
|
||||
$value = explode('-', $name);
|
||||
$fieldName = CRM_Utils_Array::value(0, $value);
|
||||
$lType = CRM_Utils_Array::value(1, $value);
|
||||
$type = CRM_Utils_Array::value(2, $value);
|
||||
|
||||
if (!in_array($fieldName, $multipleFields)) {
|
||||
if ($lType == 'Primary') {
|
||||
$locationTypeName = 1;
|
||||
}
|
||||
else {
|
||||
$locationTypeName = $locationTypes[$lType];
|
||||
}
|
||||
|
||||
if (in_array($fieldName, array(
|
||||
'phone',
|
||||
'im',
|
||||
'email',
|
||||
))) {
|
||||
if ($type) {
|
||||
$name = "`$locationTypeName-$fieldName-$type`";
|
||||
}
|
||||
else {
|
||||
$name = "`$locationTypeName-$fieldName`";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$name = "`$locationTypeName-$fieldName`";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$name = "website-{$lType}-{$fieldName}";
|
||||
}
|
||||
}
|
||||
|
||||
self::$_columnHeaders[] = array(
|
||||
'name' => $field['title'],
|
||||
'sort' => $name,
|
||||
'direction' => $direction,
|
||||
'field_name' => CRM_Core_BAO_UFField::isValidFieldName($name) ? $name : $fieldName,
|
||||
);
|
||||
|
||||
$direction = CRM_Utils_Sort::DONTCARE;
|
||||
$empty = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// if we don't have any valid columns, don't add the implicit ones
|
||||
// this allows the template to check on emptiness of column headers
|
||||
if ($empty) {
|
||||
self::$_columnHeaders = array();
|
||||
}
|
||||
else {
|
||||
self::$_columnHeaders[] = array('desc' => ts('Actions'));
|
||||
}
|
||||
}
|
||||
return self::$_columnHeaders;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns total number of rows for the query.
|
||||
*
|
||||
* @param int $action
|
||||
*
|
||||
* @return int
|
||||
* Total number of rows
|
||||
*/
|
||||
public function getTotalCount($action) {
|
||||
$additionalWhereClause = 'contact_a.is_deleted = 0';
|
||||
$additionalFromClause = NULL;
|
||||
$returnQuery = NULL;
|
||||
|
||||
if ($this->_multiRecordTableName &&
|
||||
!array_key_exists($this->_multiRecordTableName, $this->_query->_whereTables)
|
||||
) {
|
||||
$additionalFromClause = CRM_Utils_Array::value($this->_multiRecordTableName, $this->_query->_tables);
|
||||
$returnQuery = TRUE;
|
||||
}
|
||||
|
||||
$countVal = $this->_query->searchQuery(0, 0, NULL, TRUE, NULL, NULL, NULL,
|
||||
$returnQuery, $additionalWhereClause, NULL, $additionalFromClause
|
||||
);
|
||||
|
||||
if (!$returnQuery) {
|
||||
return $countVal;
|
||||
}
|
||||
|
||||
if ($returnQuery) {
|
||||
$sql = preg_replace('/DISTINCT/', '', $countVal);
|
||||
return CRM_Core_DAO::singleValueQuery($sql);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the qill for this selector.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getQill() {
|
||||
return $this->_query->qill();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all the rows in the given offset and rowCount.
|
||||
*
|
||||
* @param string $action
|
||||
* The action being performed.
|
||||
* @param int $offset
|
||||
* The row number to start from.
|
||||
* @param int $rowCount
|
||||
* The number of rows to return.
|
||||
* @param string $sort
|
||||
* The sql string that describes the sort order.
|
||||
* @param string $output
|
||||
* What should the result set include (web/email/csv).
|
||||
*
|
||||
* @param string $extraWhereClause
|
||||
*
|
||||
* @return int
|
||||
* the total number of rows for this action
|
||||
*/
|
||||
public function &getRows($action, $offset, $rowCount, $sort, $output = NULL, $extraWhereClause = NULL) {
|
||||
|
||||
$multipleFields = array('url');
|
||||
//$sort object processing for location fields
|
||||
if ($sort) {
|
||||
$vars = $sort->_vars;
|
||||
$varArray = array();
|
||||
foreach ($vars as $key => $field) {
|
||||
$field = $vars[$key];
|
||||
$fieldArray = explode('-', $field['name']);
|
||||
$fieldType = CRM_Utils_Array::value('2', $fieldArray);
|
||||
if (is_numeric(CRM_Utils_Array::value('1', $fieldArray))) {
|
||||
if (!in_array($fieldType, $multipleFields)) {
|
||||
$locationType = new CRM_Core_DAO_LocationType();
|
||||
$locationType->id = $fieldArray[1];
|
||||
$locationType->find(TRUE);
|
||||
if ($fieldArray[0] == 'email' || $fieldArray[0] == 'im' || $fieldArray[0] == 'phone') {
|
||||
$field['name'] = "`" . $locationType->name . "-" . $fieldArray[0] . "-1`";
|
||||
}
|
||||
else {
|
||||
$field['name'] = "`" . $locationType->name . "-" . $fieldArray[0] . "`";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$field['name'] = "`website-" . $fieldArray[1] . "-{$fieldType}`";
|
||||
}
|
||||
}
|
||||
$varArray[$key] = $field;
|
||||
}
|
||||
$sort->_vars = $varArray;
|
||||
}
|
||||
|
||||
$additionalWhereClause = 'contact_a.is_deleted = 0';
|
||||
|
||||
if ($extraWhereClause) {
|
||||
$additionalWhereClause .= " AND {$extraWhereClause}";
|
||||
}
|
||||
|
||||
$returnQuery = NULL;
|
||||
if ($this->_multiRecordTableName) {
|
||||
$returnQuery = TRUE;
|
||||
}
|
||||
$this->_query->_useGroupBy = TRUE;
|
||||
$result = $this->_query->searchQuery($offset, $rowCount, $sort, NULL, NULL,
|
||||
NULL, NULL, $returnQuery, $additionalWhereClause
|
||||
);
|
||||
|
||||
if ($returnQuery) {
|
||||
$resQuery = preg_replace('/GROUP BY contact_a.id[\s]+ORDER BY/', ' ORDER BY', $result);
|
||||
$result = CRM_Core_DAO::executeQuery($resQuery);
|
||||
}
|
||||
|
||||
// process the result of the query
|
||||
$rows = array();
|
||||
|
||||
// check if edit is configured in profile settings
|
||||
if ($this->_gid) {
|
||||
$editLink = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_UFGroup', $this->_gid, 'is_edit_link');
|
||||
}
|
||||
|
||||
//FIXME : make sure to handle delete separately. CRM-4418
|
||||
$mask = CRM_Core_Action::mask(array(CRM_Core_Permission::getPermission()));
|
||||
if ($editLink && ($mask & CRM_Core_Permission::EDIT)) {
|
||||
// do not allow edit for anon users in joomla frontend, CRM-4668
|
||||
$config = CRM_Core_Config::singleton();
|
||||
if (!$config->userFrameworkFrontend) {
|
||||
$this->_editLink = TRUE;
|
||||
}
|
||||
}
|
||||
$links = self::links($this->_map, $this->_editLink, $this->_linkToUF, $this->_profileIds);
|
||||
|
||||
$locationTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id');
|
||||
|
||||
$names = array();
|
||||
static $skipFields = array('group', 'tag');
|
||||
|
||||
foreach ($this->_fields as $key => $field) {
|
||||
// skip pseudo fields
|
||||
if (substr($key, 0, 9) == 'phone_ext') {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!empty($field['in_selector']) &&
|
||||
!in_array($key, $skipFields)
|
||||
) {
|
||||
if (strpos($key, '-') !== FALSE) {
|
||||
$value = explode('-', $key);
|
||||
$fieldName = CRM_Utils_Array::value(0, $value);
|
||||
$id = CRM_Utils_Array::value(1, $value);
|
||||
$type = CRM_Utils_Array::value(2, $value);
|
||||
|
||||
if (!in_array($fieldName, $multipleFields)) {
|
||||
$locationTypeName = NULL;
|
||||
if (is_numeric($id)) {
|
||||
$locationTypeName = CRM_Utils_Array::value($id, $locationTypes);
|
||||
}
|
||||
else {
|
||||
if ($id == 'Primary') {
|
||||
$locationTypeName = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$locationTypeName) {
|
||||
continue;
|
||||
}
|
||||
$locationTypeName = str_replace(' ', '_', $locationTypeName);
|
||||
if (in_array($fieldName, array(
|
||||
'phone',
|
||||
'im',
|
||||
'email',
|
||||
))) {
|
||||
if ($type) {
|
||||
$names[] = "{$locationTypeName}-{$fieldName}-{$type}";
|
||||
}
|
||||
else {
|
||||
$names[] = "{$locationTypeName}-{$fieldName}";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$names[] = "{$locationTypeName}-{$fieldName}";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$names[] = "website-{$id}-{$fieldName}";
|
||||
}
|
||||
}
|
||||
elseif ($field['name'] == 'id') {
|
||||
$names[] = 'contact_id';
|
||||
}
|
||||
else {
|
||||
$names[] = $field['name'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$multipleSelectFields = array('preferred_communication_method' => 1);
|
||||
$multiRecordTableId = NULL;
|
||||
if ($this->_multiRecordTableName) {
|
||||
$multiRecordTableId = "{$this->_multiRecordTableName}_id";
|
||||
}
|
||||
|
||||
// we need to determine of overlay profile should be shown
|
||||
$showProfileOverlay = CRM_Core_BAO_UFGroup::showOverlayProfile();
|
||||
|
||||
while ($result->fetch()) {
|
||||
$this->_query->convertToPseudoNames($result);
|
||||
|
||||
if (isset($result->country)) {
|
||||
// the query returns the untranslated country name
|
||||
$i18n = CRM_Core_I18n::singleton();
|
||||
$result->country = $i18n->translate($result->country);
|
||||
}
|
||||
$row = array();
|
||||
$empty = TRUE;
|
||||
$row[] = CRM_Contact_BAO_Contact_Utils::getImage($result->contact_sub_type ? $result->contact_sub_type : $result->contact_type,
|
||||
FALSE,
|
||||
$result->contact_id,
|
||||
$showProfileOverlay
|
||||
);
|
||||
if ($result->sort_name) {
|
||||
$row[] = $result->sort_name;
|
||||
$empty = FALSE;
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($names as $name) {
|
||||
if ($cfID = CRM_Core_BAO_CustomField::getKeyID($name)) {
|
||||
$row[] = CRM_Core_BAO_CustomField::displayValue($result->$name,
|
||||
$cfID,
|
||||
$result->contact_id
|
||||
);
|
||||
}
|
||||
elseif (substr($name, -4) == '-url' &&
|
||||
!empty($result->$name)
|
||||
) {
|
||||
$url = CRM_Utils_System::fixURL($result->$name);
|
||||
$typeId = substr($name, 0, -4) . "-website_type_id";
|
||||
$typeName = CRM_Core_PseudoConstant::getLabel('CRM_Core_DAO_Website', 'website_type_id', $result->$typeId);
|
||||
if ($typeName) {
|
||||
$row[] = "<a href=\"$url\">{$result->$name} (${typeName})</a>";
|
||||
}
|
||||
else {
|
||||
$row[] = "<a href=\"$url\">{$result->$name}</a>";
|
||||
}
|
||||
}
|
||||
elseif ($name == 'preferred_language') {
|
||||
$row[] = CRM_Core_PseudoConstant::getLabel('CRM_Contact_DAO_Contact', 'preferred_language', $result->$name);
|
||||
}
|
||||
elseif ($multipleSelectFields &&
|
||||
array_key_exists($name, $multipleSelectFields)
|
||||
) {
|
||||
$paramsNew = array($name => $result->$name);
|
||||
$name = array($name => array('newName' => $name, 'groupName' => $name));
|
||||
|
||||
CRM_Core_OptionGroup::lookupValues($paramsNew, $name, FALSE);
|
||||
$row[] = $paramsNew[$key];
|
||||
}
|
||||
elseif (strpos($name, '-im')) {
|
||||
if (!empty($result->$name)) {
|
||||
$providerId = $name . "-provider_id";
|
||||
$providerName = CRM_Core_PseudoConstant::getLabel('CRM_Core_DAO_IM', 'provider_id', $result->$providerId);
|
||||
$row[] = $result->$name . " ({$providerName})";
|
||||
}
|
||||
else {
|
||||
$row[] = '';
|
||||
}
|
||||
}
|
||||
elseif (strpos($name, '-phone-')) {
|
||||
$phoneExtField = str_replace('phone', 'phone_ext', $name);
|
||||
if (isset($result->$phoneExtField)) {
|
||||
$row[] = $result->$name . " (" . $result->$phoneExtField . ")";
|
||||
}
|
||||
else {
|
||||
$row[] = $result->$name;
|
||||
}
|
||||
}
|
||||
elseif (in_array($name, array(
|
||||
'addressee',
|
||||
'email_greeting',
|
||||
'postal_greeting',
|
||||
))) {
|
||||
$dname = $name . '_display';
|
||||
$row[] = $result->$dname;
|
||||
}
|
||||
elseif (in_array($name, array(
|
||||
'birth_date',
|
||||
'deceased_date',
|
||||
))) {
|
||||
$row[] = CRM_Utils_Date::customFormat($result->$name);
|
||||
}
|
||||
elseif (isset($result->$name)) {
|
||||
$row[] = $result->$name;
|
||||
}
|
||||
else {
|
||||
$row[] = '';
|
||||
}
|
||||
|
||||
if (!empty($result->$name)) {
|
||||
$empty = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
$newLinks = $links;
|
||||
$params = array(
|
||||
'id' => $result->contact_id,
|
||||
'gid' => implode(',', $this->_profileIds),
|
||||
);
|
||||
|
||||
// pass record id param to view url for multi record view
|
||||
if ($multiRecordTableId && $newLinks) {
|
||||
if ($result->$multiRecordTableId) {
|
||||
if ($newLinks[CRM_Core_Action::VIEW]['url'] == 'civicrm/profile/view') {
|
||||
$newLinks[CRM_Core_Action::VIEW]['qs'] .= "&multiRecord=view&recordId=%%recordId%%&allFields=1";
|
||||
$params['recordId'] = $result->$multiRecordTableId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->_linkToUF) {
|
||||
$ufID = CRM_Core_BAO_UFMatch::getUFId($result->contact_id);
|
||||
if (!$ufID) {
|
||||
unset($newLinks[CRM_Core_Action::PROFILE]);
|
||||
}
|
||||
else {
|
||||
$params['ufID'] = $ufID;
|
||||
}
|
||||
}
|
||||
|
||||
$row[] = CRM_Core_Action::formLink($newLinks,
|
||||
$mask,
|
||||
$params,
|
||||
ts('more'),
|
||||
FALSE,
|
||||
'profile.selector.row',
|
||||
'Contact',
|
||||
$result->contact_id
|
||||
);
|
||||
|
||||
if (!$empty) {
|
||||
$rows[] = $row;
|
||||
}
|
||||
}
|
||||
return $rows;
|
||||
}
|
||||
|
||||
/**
|
||||
* Name of export file.
|
||||
*
|
||||
* @param string $output
|
||||
* Type of output.
|
||||
*
|
||||
* @return string
|
||||
* name of the file
|
||||
*/
|
||||
public function getExportFileName($output = 'csv') {
|
||||
return ts('CiviCRM Profile Listings');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the _multiRecordTableName to display the result set.
|
||||
*
|
||||
* (according to multi record custom field values).
|
||||
*
|
||||
* @param array $fields
|
||||
*/
|
||||
public function setMultiRecordTableName($fields) {
|
||||
$customGroupId = $multiRecordTableName = NULL;
|
||||
$selectorSet = FALSE;
|
||||
|
||||
foreach ($fields as $field => $properties) {
|
||||
if (!CRM_Core_BAO_CustomField::getKeyID($field)) {
|
||||
continue;
|
||||
}
|
||||
if ($cgId = CRM_Core_BAO_CustomField::isMultiRecordField($field)) {
|
||||
$customGroupId = CRM_Utils_System::isNull($customGroupId) ? $cgId : $customGroupId;
|
||||
|
||||
//if the field is submitted set multiRecordTableName
|
||||
if ($customGroupId) {
|
||||
$isSubmitted = FALSE;
|
||||
foreach ($this->_query->_params as $key => $value) {
|
||||
//check the query params 'where' element
|
||||
if ($value[0] == $field) {
|
||||
$isSubmitted = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($isSubmitted) {
|
||||
$this->_multiRecordTableName
|
||||
= $multiRecordTableName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $customGroupId, 'table_name');
|
||||
if ($multiRecordTableName) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($properties['in_selector'])) {
|
||||
$selectorSet = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($customGroupId) || !$customGroupId) {
|
||||
return;
|
||||
}
|
||||
|
||||
//if the field is in selector and not a searchable field
|
||||
//get the proper custom value table name
|
||||
if ($selectorSet) {
|
||||
$this->_multiRecordTableName
|
||||
= $multiRecordTableName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $customGroupId, 'table_name');
|
||||
}
|
||||
} //func close
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue