X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContact%2FPage%2FAJAX.php;h=b2d2ed0c07d3fa9484a777209dcd973b66fc89d5;hb=015bf0da7674cd8f35f8252c1534e2472acf7c3f;hp=21dbe7ef0d6dcab09fa45daff59281b9f8695aa0;hpb=9974506a133755000dc4bdbc7b4c895cd14956eb;p=civicrm-core.git diff --git a/CRM/Contact/Page/AJAX.php b/CRM/Contact/Page/AJAX.php index 21dbe7ef0d..b2d2ed0c07 100644 --- a/CRM/Contact/Page/AJAX.php +++ b/CRM/Contact/Page/AJAX.php @@ -1,9 +1,9 @@ $val) { if (empty($val) || in_array($param, $excludeGet) || @@ -139,12 +153,12 @@ class CRM_Contact_Page_AJAX { } /** - * Function to fetch PCP ID by PCP Supporter sort_name, also displays PCP title and associated Contribution Page title + * Fetch PCP ID by PCP Supporter sort_name, also displays PCP title and associated Contribution Page title */ - static function getPCPList() { - $name = CRM_Utils_Array::value('term', $_GET); - $name = CRM_Utils_Type::escape($name, 'String'); - $limit = '10'; + public static function getPCPList() { + $name = CRM_Utils_Array::value('term', $_GET); + $name = CRM_Utils_Type::escape($name, 'String'); + $limit = $max = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'search_autocomplete_count', NULL, 10); $where = ' AND pcp.page_id = cp.id AND pcp.contact_id = cc.id'; @@ -167,8 +181,11 @@ class CRM_Contact_Page_AJAX { $whereClause = " WHERE ( sort_name LIKE '$strSearch' $includeNickName ) {$where} "; } - if (!empty($_GET['limit'])) { - $limit = CRM_Utils_Type::escape($_GET['limit'], 'Positive'); + $offset = $count = 0; + if (!empty($_GET['page'])) { + $page = (int) $_GET['page']; + $offset = $limit * ($page - 1); + $limit++; } $select = 'cc.sort_name, pcp.title, cp.title'; @@ -184,23 +201,28 @@ class CRM_Contact_Page_AJAX { FROM civicrm_pcp pcp, civicrm_event cp, civicrm_contact cc {$includeEmailFrom} {$whereClause} AND pcp.page_type = 'event' - LIMIT 0, {$limit} ) t ORDER BY sort_name + LIMIT $offset, $limit "; $dao = CRM_Core_DAO::executeQuery($query); - $results = array(); + $output = array('results' => array(), 'more' => FALSE); while ($dao->fetch()) { - $results[] = array('id' => $dao->id, 'text' => $dao->data); + if (++$count > $max) { + $output['more'] = TRUE; + } + else { + $output['results'][] = array('id' => $dao->id, 'text' => $dao->data); + } } - CRM_Utils_JSON::output($results); + CRM_Utils_JSON::output($output); } - static function relationship() { + public static function relationship() { $relType = CRM_Utils_Request::retrieve('rel_type', 'Positive', CRM_Core_DAO::$_nullObject, TRUE); $relContactID = CRM_Utils_Request::retrieve('rel_contact', 'Positive', CRM_Core_DAO::$_nullObject, TRUE); - $relationshipID = CRM_Utils_Array::value('rel_id', $_REQUEST); // this used only to determine add or update mode + $relationshipID = CRM_Utils_Request::retrieve('rel_id', 'Positive', CRM_Core_DAO::$_nullObject); // this used only to determine add or update mode $caseID = CRM_Utils_Request::retrieve('case_id', 'Positive', CRM_Core_DAO::$_nullObject, TRUE); // check if there are multiple clients for this case, if so then we need create @@ -211,7 +233,7 @@ class CRM_Contact_Page_AJAX { $ret = array('is_error' => 0); - foreach($clientList as $sourceContactID) { + foreach ($clientList as $sourceContactID) { $relationParams = array( 'relationship_type_id' => $relType . '_a_b', 'contact_check' => array($relContactID => 1), @@ -231,7 +253,7 @@ class CRM_Contact_Page_AJAX { $caseRelationships->contact_id_a = $sourceContactID; $caseRelationships->find(); - while($caseRelationships->fetch()) { + while ($caseRelationships->fetch()) { $relationIds['relationship'] = $caseRelationships->id; $relationIds['contactTarget'] = $relContactID; } @@ -239,7 +261,7 @@ class CRM_Contact_Page_AJAX { } // create new or update existing relationship - $return = CRM_Contact_BAO_Relationship::create($relationParams, $relationIds); + $return = CRM_Contact_BAO_Relationship::legacyCreateMultiple($relationParams, $relationIds); if (!empty($return[4][0])) { $relationshipID = $return[4][0]; @@ -251,7 +273,7 @@ class CRM_Contact_Page_AJAX { $ret = array( 'is_error' => 1, 'error_message' => ts('The relationship type definition for the case role is not valid for the client and / or staff contact types. You can review and edit relationship types at Administer >> Option Lists >> Relationship Types.', - array(1 => CRM_Utils_System::url('civicrm/admin/reltype', 'reset=1'))) + array(1 => CRM_Utils_System::url('civicrm/admin/reltype', 'reset=1'))), ); } } @@ -260,19 +282,19 @@ class CRM_Contact_Page_AJAX { } /** - * Function to fetch the custom field help + * Fetch the custom field help. */ - static function customField() { - $fieldId = CRM_Utils_Type::escape($_REQUEST['id'], 'Integer'); - $params = array('id' => $fieldId); + public static function customField() { + $fieldId = CRM_Utils_Type::escape($_REQUEST['id'], 'Integer'); + $params = array('id' => $fieldId); $returnProperties = array('help_pre', 'help_post'); - $values = array(); + $values = array(); CRM_Core_DAO::commonRetrieve('CRM_Core_DAO_CustomField', $params, $values, $returnProperties); CRM_Utils_JSON::output($values); } - static function groupTree() { + public static function groupTree() { header('Content-Type: application/json'); $gids = CRM_Utils_Type::escape($_GET['gids'], 'String'); echo CRM_Contact_BAO_GroupNestingCache::json($gids); @@ -280,18 +302,16 @@ class CRM_Contact_Page_AJAX { } /** - * Function to delete custom value - * + * Delete custom value. */ - static function deleteCustomValue() { + public static function deleteCustomValue() { header('Content-Type: text/plain'); $customValueID = CRM_Utils_Type::escape($_REQUEST['valueID'], 'Positive'); $customGroupID = CRM_Utils_Type::escape($_REQUEST['groupID'], 'Positive'); - + $contactId = CRM_Utils_Request::retrieve('contactId', 'Positive', CRM_Core_DAO::$_nullObject); CRM_Core_BAO_CustomValue::deleteCustomValue($customValueID, $customGroupID); - $contactId = CRM_Utils_Array::value('contactId', $_REQUEST); if ($contactId) { - echo CRM_Contact_BAO_Contact::getCountComponent('custom_' . $_REQUEST['groupID'], $contactId); + echo CRM_Contact_BAO_Contact::getCountComponent('custom_' . $customGroupID, $contactId); } // reset the group contact cache for this group @@ -300,66 +320,23 @@ class CRM_Contact_Page_AJAX { } /** - * Function to perform enable / disable actions on record. - * + * check the CMS username. */ - static function enableDisable() { - $op = CRM_Utils_Type::escape($_REQUEST['op'], 'String'); - $recordID = CRM_Utils_Type::escape($_REQUEST['recordID'], 'Positive'); - $recordBAO = CRM_Utils_Type::escape($_REQUEST['recordBAO'], 'String'); - - $isActive = NULL; - if ($op == 'disable-enable') { - $isActive = TRUE; - } - elseif ($op == 'enable-disable') { - $isActive = FALSE; - } - $status = array('status' => 'record-updated-fail'); - if (isset($isActive)) { - // first munge and clean the recordBAO and get rid of any non alpha numeric characters - $recordBAO = CRM_Utils_String::munge($recordBAO); - $recordClass = explode('_', $recordBAO); - - // make sure recordClass is namespaced (we cant check CRM since extensions can also use this) - // but it should be at least 3 levels deep - if (count($recordClass) >= 3) { - require_once (str_replace('_', DIRECTORY_SEPARATOR, $recordBAO) . ".php"); - $method = 'setIsActive'; - - if (method_exists($recordBAO, $method)) { - $updated = call_user_func_array(array($recordBAO, $method), - array($recordID, $isActive) - ); - if ($updated) { - $status = array('status' => 'record-updated-success'); - } - - // call hook enableDisable - CRM_Utils_Hook::enableDisable($recordBAO, $recordID, $isActive); - } - } - CRM_Utils_JSON::output($status); - } - } - - /** - *Function to check the CMS username - * - */ static public function checkUserName() { $signer = new CRM_Utils_Signer(CRM_Core_Key::privateKey(), array('for', 'ts')); + $sig = CRM_Utils_Request::retrieve('sig', 'String', CRM_Core_DAO::$_nullObject); + $for = CRM_Utils_Request::retrieve('for', 'String', CRM_Core_DAO::$_nullObject); if ( CRM_Utils_Time::getTimeRaw() > $_REQUEST['ts'] + self::CHECK_USERNAME_TTL - || $_REQUEST['for'] != 'civicrm/ajax/cmsuser' - || !$signer->validate($_REQUEST['sig'], $_REQUEST) + || $for != 'civicrm/ajax/cmsuser' + || !$signer->validate($sig, $_REQUEST) ) { $user = array('name' => 'error'); CRM_Utils_JSON::output($user); } $config = CRM_Core_Config::singleton(); - $username = trim($_REQUEST['cms_name']); + $username = trim(CRM_Utils_Type::escape($_REQUEST['cms_name'], 'String')); $params = array('name' => $username); @@ -382,9 +359,9 @@ class CRM_Contact_Page_AJAX { } /** - * Function to get email address of a contact + * Function to get email address of a contact. */ - static function getContactEmail() { + public static function getContactEmail() { if (!empty($_REQUEST['contact_id'])) { $contactID = CRM_Utils_Type::escape($_REQUEST['contact_id'], 'Positive'); if (!CRM_Contact_BAO_Contact_Permission::allow($contactID, CRM_Core_Permission::EDIT)) { @@ -392,7 +369,7 @@ class CRM_Contact_Page_AJAX { } list($displayName, $userEmail - ) = CRM_Contact_BAO_Contact_Location::getEmailDetails($contactID); + ) = CRM_Contact_BAO_Contact_Location::getEmailDetails($contactID); header('Content-Type: text/plain'); if ($userEmail) { @@ -413,15 +390,15 @@ class CRM_Contact_Page_AJAX { } } else { - $cid = CRM_Utils_Array::value('cid', $_GET); - if ($cid) { - //check cid for interger + $cid = CRM_Utils_Array::value('cid', $_GET); + if ($cid) { + //check cid for integer $contIDS = explode(',', $cid); foreach ($contIDS as $contID) { CRM_Utils_Type::escape($contID, 'Integer'); } $queryString = " cc.id IN ( $cid )"; - } + } } if ($queryString) { @@ -448,8 +425,8 @@ LIMIT {$offset}, {$rowCount} // send query to hook to be modified if needed CRM_Utils_Hook::contactListQuery($query, $name, - CRM_Utils_Array::value('context', $_GET), - CRM_Utils_Array::value('cid', $_GET) + CRM_Utils_Request::retrieve('context', 'String', CRM_Core_DAO::$_nullObject), + CRM_Utils_Request::retrieve('cid', 'Positive', CRM_Core_DAO::$_nullObject) ); $dao = CRM_Core_DAO::executeQuery($query); @@ -473,15 +450,14 @@ LIMIT {$offset}, {$rowCount} // send query to hook to be modified if needed CRM_Utils_Hook::contactListQuery($query, $name, - CRM_Utils_Array::value('context', $_GET), - CRM_Utils_Array::value('cid', $_GET) + CRM_Utils_Request::retrieve('context', 'String', CRM_Core_DAO::$_nullObject), + CRM_Utils_Request::retrieve('cid', 'Positive', CRM_Core_DAO::$_nullObject) ); - $dao = CRM_Core_DAO::executeQuery($query); while ($dao->fetch()) { - //working here + //working here $result[] = array( 'text' => '"' . $dao->name . '" <' . $dao->email . '>', 'id' => (CRM_Utils_Array::value('id', $_GET)) ? "{$dao->id}::{$dao->email}" : '"' . $dao->name . '" <' . $dao->email . '>', @@ -496,7 +472,7 @@ LIMIT {$offset}, {$rowCount} CRM_Utils_System::civiExit(); } - static function getContactPhone() { + public static function getContactPhone() { $queryString = NULL; //check for mobile type @@ -509,8 +485,8 @@ LIMIT {$offset}, {$rowCount} $queryString = " ( cc.sort_name LIKE '%$name%' OR cp.phone LIKE '%$name%' ) "; } else { - $cid = CRM_Utils_Array::value('cid', $_GET); - if ($cid) { + $cid = CRM_Utils_Array::value('cid', $_GET); + if ($cid) { //check cid for interger $contIDS = explode(',', $cid); foreach ($contIDS as $contID) { @@ -545,8 +521,8 @@ LIMIT {$offset}, {$rowCount} // send query to hook to be modified if needed CRM_Utils_Hook::contactListQuery($query, $name, - CRM_Utils_Array::value('context', $_GET), - CRM_Utils_Array::value('cid', $_GET) + CRM_Utils_Request::retrieve('context', 'String', CRM_Core_DAO::$_nullObject), + CRM_Utils_Request::retrieve('cid', 'Positive', CRM_Core_DAO::$_nullObject) ); $dao = CRM_Core_DAO::executeQuery($query); @@ -566,8 +542,8 @@ LIMIT {$offset}, {$rowCount} } - static function buildSubTypes() { - $parent = CRM_Utils_Array::value('parentId', $_REQUEST); + public static function buildSubTypes() { + $parent = CRM_Utils_Request::retrieve('parentId', 'Positive', CRM_Core_DAO::$_nullObject); switch ($parent) { case 1: @@ -588,8 +564,8 @@ LIMIT {$offset}, {$rowCount} CRM_Utils_JSON::output($subTypes); } - static function buildDedupeRules() { - $parent = CRM_Utils_Array::value('parentId', $_REQUEST); + public static function buildDedupeRules() { + $parent = CRM_Utils_Request::retrieve('parentId', 'Positive', CRM_Core_DAO::$_nullObject); switch ($parent) { case 1: @@ -611,9 +587,9 @@ LIMIT {$offset}, {$rowCount} } /** - * Function used for CiviCRM dashboard operations + * Function used for CiviCRM dashboard operations. */ - static function dashboard() { + public static function dashboard() { $operation = CRM_Utils_Type::escape($_REQUEST['op'], 'String'); switch ($operation) { @@ -643,12 +619,12 @@ LIMIT {$offset}, {$rowCount} } /** - * Function to retrieve signature based on email id + * Retrieve signature based on email id. */ - static function getSignature() { + public static function getSignature() { $emailID = CRM_Utils_Type::escape($_REQUEST['emailID'], 'Positive'); - $query = "SELECT signature_text, signature_html FROM civicrm_email WHERE id = {$emailID}"; - $dao = CRM_Core_DAO::executeQuery($query); + $query = "SELECT signature_text, signature_html FROM civicrm_email WHERE id = {$emailID}"; + $dao = CRM_Core_DAO::executeQuery($query); $signatures = array(); while ($dao->fetch()) { @@ -662,13 +638,12 @@ LIMIT {$offset}, {$rowCount} } /** - * Function to process dupes. - * + * Process dupes. */ - static function processDupes() { + public static function processDupes() { $oper = CRM_Utils_Type::escape($_REQUEST['op'], 'String'); - $cid = CRM_Utils_Type::escape($_REQUEST['cid'], 'Positive'); - $oid = CRM_Utils_Type::escape($_REQUEST['oid'], 'Positive'); + $cid = CRM_Utils_Type::escape($_REQUEST['cid'], 'Positive'); + $oid = CRM_Utils_Type::escape($_REQUEST['oid'], 'Positive'); if (!$oper || !$cid || !$oid) { return; @@ -694,26 +669,25 @@ LIMIT {$offset}, {$rowCount} CRM_Utils_JSON::output(array('status' => ($status) ? $oper : $status)); } - static function getDedupes() { + public static function getDedupes() { - $sEcho = CRM_Utils_Type::escape($_REQUEST['sEcho'], 'Integer'); - $offset = isset($_REQUEST['iDisplayStart']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayStart'], 'Integer') : 0; - $rowCount = isset($_REQUEST['iDisplayLength']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayLength'], 'Integer') : 25; - $sort = 'sort_name'; + $sEcho = CRM_Utils_Type::escape($_REQUEST['sEcho'], 'Integer'); + $offset = isset($_REQUEST['iDisplayStart']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayStart'], 'Integer') : 0; + $rowCount = isset($_REQUEST['iDisplayLength']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayLength'], 'Integer') : 25; + $sort = 'sort_name'; $sortOrder = isset($_REQUEST['sSortDir_0']) ? CRM_Utils_Type::escape($_REQUEST['sSortDir_0'], 'String') : 'asc'; - $gid = isset($_REQUEST['gid']) ? CRM_Utils_Type::escape($_REQUEST['gid'], 'Integer') : 0; - $rgid = isset($_REQUEST['rgid']) ? CRM_Utils_Type::escape($_REQUEST['rgid'], 'Integer') : 0; + $gid = isset($_REQUEST['gid']) ? CRM_Utils_Type::escape($_REQUEST['gid'], 'Integer') : 0; + $rgid = isset($_REQUEST['rgid']) ? CRM_Utils_Type::escape($_REQUEST['rgid'], 'Integer') : 0; $contactType = ''; if ($rgid) { $contactType = CRM_Core_DAO::getFieldValue('CRM_Dedupe_DAO_RuleGroup', $rgid, 'contact_type'); } - $cacheKeyString = "merge {$contactType}_{$rgid}_{$gid}"; - $searchRows = array(); + $cacheKeyString = "merge {$contactType}_{$rgid}_{$gid}"; + $searchRows = array(); $selectorElements = array('src', 'dst', 'weight', 'actions'); - $join = "LEFT JOIN civicrm_dedupe_exception de ON ( pn.entity_id1 = de.contact_id1 AND pn.entity_id2 = de.contact_id2 )"; $where = "de.id IS NULL"; @@ -732,8 +706,8 @@ LIMIT {$offset}, {$rowCount} $mergeParams .= "&gid={$gid}"; } - $searchRows[$mainId]['actions'] = CRM_Utils_System::href(ts('merge'), 'civicrm/contact/merge', $mergeParams); - $searchRows[$mainId]['actions'] .= " |  " . ts('not a duplicate') . ""; + $searchRows[$mainId]['actions'] = '' . ts('merge') . ''; + $searchRows[$mainId]['actions'] .= "" . ts('not a duplicate') . ""; } else { $searchRows[$mainId]['actions'] = '' . ts('Insufficient access rights - cannot merge') . ''; @@ -747,9 +721,9 @@ LIMIT {$offset}, {$rowCount} } /** - * Function to retrieve a PDF Page Format for the PDF Letter form + * Retrieve a PDF Page Format for the PDF Letter form. */ - function pdfFormat() { + public function pdfFormat() { $formatId = CRM_Utils_Type::escape($_REQUEST['formatId'], 'Integer'); $pdfFormat = CRM_Core_BAO_PdfFormat::getById($formatId); @@ -758,9 +732,9 @@ LIMIT {$offset}, {$rowCount} } /** - * Function to retrieve Paper Size dimensions + * Retrieve Paper Size dimensions. */ - static function paperSize() { + public static function paperSize() { $paperSizeName = CRM_Utils_Type::escape($_REQUEST['paperSizeName'], 'String'); $paperSize = CRM_Core_BAO_PaperSize::getByName($paperSizeName); @@ -768,10 +742,13 @@ LIMIT {$offset}, {$rowCount} CRM_Utils_JSON::output($paperSize); } - static function selectUnselectContacts() { - $name = CRM_Utils_Array::value('name', $_REQUEST); - $cacheKey = CRM_Utils_Array::value('qfKey', $_REQUEST); - $state = CRM_Utils_Array::value('state', $_REQUEST, 'checked'); + /** + * Used to store selected contacts across multiple pages in advanced search. + */ + public static function selectUnselectContacts() { + $name = CRM_Utils_Array::value('name', $_REQUEST); + $cacheKey = CRM_Utils_Array::value('qfKey', $_REQUEST); + $state = CRM_Utils_Array::value('state', $_REQUEST, 'checked'); $variableType = CRM_Utils_Array::value('variableType', $_REQUEST, 'single'); $actionToPerform = CRM_Utils_Array::value('action', $_REQUEST, 'select'); @@ -803,28 +780,27 @@ LIMIT {$offset}, {$rowCount} } /** - * @param $name + * @param string $name * * @return string */ - static function _convertToId($name) { + public static function _convertToId($name) { if (substr($name, 0, CRM_Core_Form::CB_PREFIX_LEN) == CRM_Core_Form::CB_PREFIX) { $cId = substr($name, CRM_Core_Form::CB_PREFIX_LEN); } return $cId; } - static function getAddressDisplay() { - $contactId = CRM_Utils_Array::value('contact_id', $_REQUEST); + public static function getAddressDisplay() { + $contactId = CRM_Utils_Request::retrieve('contact_id', 'Positive', CRM_Core_DAO::$_nullObject); if (!$contactId) { $addressVal["error_message"] = "no contact id found"; } else { - $entityBlock = - array( - 'contact_id' => $contactId, - 'entity_id' => $contactId, - ); + $entityBlock = array( + 'contact_id' => $contactId, + 'entity_id' => $contactId, + ); $addressVal = CRM_Core_BAO_Address::getValues($entityBlock); } @@ -832,11 +808,13 @@ LIMIT {$offset}, {$rowCount} } /** - * Function to retrieve contact relationships + * Retrieve contact relationships. */ public static function getContactRelationships() { $contactID = CRM_Utils_Type::escape($_GET['cid'], 'Integer'); $context = CRM_Utils_Type::escape($_GET['context'], 'String'); + $relationship_type_id = CRM_Utils_Type::escape(CRM_Utils_Array::value('relationship_type_id', $_GET), 'Integer', + FALSE); if (!CRM_Contact_BAO_Contact_Permission::allow($contactID)) { return CRM_Utils_System::permissionDenied(); @@ -856,10 +834,10 @@ LIMIT {$offset}, {$rowCount} 10 => '', ); - $sEcho = CRM_Utils_Type::escape($_REQUEST['sEcho'], 'Integer'); - $offset = isset($_REQUEST['iDisplayStart']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayStart'], 'Integer') : 0; - $rowCount = isset($_REQUEST['iDisplayLength']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayLength'], 'Integer') : 25; - $sort = isset($_REQUEST['iSortCol_0']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_REQUEST['iSortCol_0'], 'Integer'), $sortMapper) : NULL; + $sEcho = CRM_Utils_Type::escape($_REQUEST['sEcho'], 'Integer'); + $offset = isset($_REQUEST['iDisplayStart']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayStart'], 'Integer') : 0; + $rowCount = isset($_REQUEST['iDisplayLength']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayLength'], 'Integer') : 25; + $sort = isset($_REQUEST['iSortCol_0']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_REQUEST['iSortCol_0'], 'Integer'), $sortMapper) : NULL; $sortOrder = isset($_REQUEST['sSortDir_0']) ? CRM_Utils_Type::escape($_REQUEST['sSortDir_0'], 'String') : 'asc'; $params = $_POST; @@ -872,6 +850,9 @@ LIMIT {$offset}, {$rowCount} $params['contact_id'] = $contactID; $params['context'] = $context; + if ($relationship_type_id) { + $params['relationship_type_id'] = $relationship_type_id; + } // get the contact relationships $relationships = CRM_Contact_BAO_Relationship::getContactRelationshipSelector($params); @@ -895,4 +876,5 @@ LIMIT {$offset}, {$rowCount} echo CRM_Utils_JSON::encodeDataTableSelector($relationships, $sEcho, $iTotal, $iFilteredTotal, $selectorElements); CRM_Utils_System::civiExit(); } + }