X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContact%2FBAO%2FRelationship.php;h=941f183f356a0146c56b6afc81eaca0e3f8ce616;hb=96025800fa500fbbd71288fa1b0bc459f17c5bcc;hp=ec2407a6784c886e72d7fc1155936a7197921866;hpb=7ecf62753884d9c9ae982f458023ea76d4d408e7;p=civicrm-core.git diff --git a/CRM/Contact/BAO/Relationship.php b/CRM/Contact/BAO/Relationship.php index ec2407a678..941f183f35 100644 --- a/CRM/Contact/BAO/Relationship.php +++ b/CRM/Contact/BAO/Relationship.php @@ -47,7 +47,7 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { * and this is new in 4.6 * All existing calls have been changed to createMultiple except the api call - however, it is recommended * that you call that as the end to end testing here is based on the api & refactoring may still be done - * @param $params + * @param array $params * @return \CRM_Contact_BAO_Relationship * @throws \CRM_Core_Exception */ @@ -57,25 +57,31 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { throw new CRM_Core_Exception('Duplicate Relationship'); } if (self::checkValidRelationship($params, $params, 0)) { - throw new CRM_Core_Exception('Invalide Relationship'); + throw new CRM_Core_Exception('Invalid Relationship'); } $relationship = self::add($params); + if (!empty($params['contact_id_a'])) { + $ids = array('contactTarget' => $relationship->contact_id_b, 'contact' => $params['contact_id_a']); + CRM_Contact_BAO_Relationship::relatedMemberships($params['contact_id_a'], $values, $ids, (empty($params['id']) ? CRM_Core_Action::ADD : CRM_Core_Action::UPDATE)); + } self::addRecent($params, $relationship); return $relationship; } + /** * Takes an associative array and creates a relationship object * @deprecated For single creates use the api instead (it's tested). * For multiple a new variant of this function needs to be written and migrated to as this is a bit * nasty * - * @param array $params (reference ) an assoc array of name/value pairs - * @param array $ids the array that holds all the db ids - * per http://wiki.civicrm.org/confluence/display/CRM/Database+layer + * @param array $params + * (reference ) an assoc array of name/value pairs. + * @param array $ids + * The array that holds all the db ids. + * per http://wiki.civicrm.org/confluence/display/CRM/Database+layer * "we are moving away from the $ids param " * - * @return CRM_Contact_BAO_Relationship object - * @static + * @return CRM_Contact_BAO_Relationship */ public static function createMultiple(&$params, $ids = array()) { $valid = $invalid = $duplicate = $saved = 0; @@ -83,11 +89,11 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { $relationshipId = CRM_Utils_Array::value('relationship', $ids, CRM_Utils_Array::value('id', $params)); //CRM-9015 - the hooks are called here & in add (since add doesn't call create) // but in future should be tidied per ticket - if(empty($relationshipId)){ + if (empty($relationshipId)) { $hook = 'create'; $action = CRM_Core_Action::ADD; } - else{ + else { $hook = 'edit'; $action = CRM_Core_Action::UPDATE; } @@ -116,12 +122,12 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { } if ( - self::checkDuplicateRelationship( - $params, - CRM_Utils_Array::value('contact', $ids), - // step 2 - $key - ) + self::checkDuplicateRelationship( + $params, + CRM_Utils_Array::value('contact', $ids), + // step 2 + $key + ) ) { $duplicate++; continue; @@ -142,12 +148,12 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { // it seems doubtful any of this is relevant if the contact fields & relationship // type fields are not set if ( - self::checkDuplicateRelationship( - $params, - CRM_Utils_Array::value('contact', $ids), - $ids['contactTarget'], - $relationshipId - ) + self::checkDuplicateRelationship( + $params, + CRM_Utils_Array::value('contact', $ids), + $ids['contactTarget'], + $relationshipId + ) ) { $duplicate++; return array($valid, $invalid, $duplicate, $saved, NULL); @@ -181,23 +187,24 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { /** * This is the function that check/add if the relationship created is valid * - * @param array $params (reference ) an assoc array of name/value pairs - * @param integer $contactId this is contact id for adding relationship - * @param array $ids the array that holds all the db ids + * @param array $params + * (reference ) an assoc array of name/value pairs. + * @param array $ids + * The array that holds all the db ids. + * @param int $contactId + * This is contact id for adding relationship. * * @return CRM_Contact_BAO_Relationship - * @static */ public static function add(&$params, $ids = array(), $contactId = NULL) { - $relationshipId = - CRM_Utils_Array::value('relationship', $ids, CRM_Utils_Array::value('id', $params)); + $relationshipId = CRM_Utils_Array::value('relationship', $ids, CRM_Utils_Array::value('id', $params)); $hook = 'create'; - if($relationshipId) { + if ($relationshipId) { $hook = 'edit'; } //@todo hook are called from create and add - remove one - CRM_Utils_Hook::pre($hook , 'Relationship', $relationshipId, $params); + CRM_Utils_Hook::pre($hook, 'Relationship', $relationshipId, $params); self::setContactABFromIDs($params); $relationshipTypes = CRM_Utils_Array::value('relationship_type_id', $params); @@ -223,19 +230,19 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { $dateFields = array('end_date', 'start_date'); - foreach (self::getdefaults() as $defaultField => $defaultValue){ - if(isset($params[$defaultField])){ - if(in_array($defaultField, $dateFields)){ + foreach (self::getdefaults() as $defaultField => $defaultValue) { + if (isset($params[$defaultField])) { + if (in_array($defaultField, $dateFields)) { $relationship->$defaultField = CRM_Utils_Date::format(CRM_Utils_Array::value($defaultField, $params)); - if(!$relationship->$defaultField){ + if (!$relationship->$defaultField) { $relationship->$defaultField = 'NULL'; } } - else{ + else { $relationship->$defaultField = $params[$defaultField]; } } - elseif(!$relationshipId){ + elseif (!$relationshipId) { $relationship->$defaultField = $defaultValue; } } @@ -294,7 +301,7 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { /** * Resolve passed in contact IDs to contact_id_a & contact_id_b - * @param $params + * @param array $params * @param array $ids * @param null $contactID * @throws \CRM_Core_Exception @@ -307,9 +314,16 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { if (!empty($params['id'])) { //let's load the missing ids here since other things tend to rely on them. $fieldsToFill = array('contact_id_a', 'contact_id_b', 'relationship_type_id'); - $result = CRM_Core_DAO::executeQuery("SELECT " . implode(',', $fieldsToFill) . " FROM civicrm_relationship WHERE id = %1", array('Integer', $params['id']))->fetchRow(); - foreach ($fieldsToFill as $field) { - $params[$field] = !empty($params[$field]) ? $params[$field] : $result->$field; + $result = CRM_Core_DAO::executeQuery("SELECT " . implode(',', $fieldsToFill) . " FROM civicrm_relationship WHERE id = %1", array( + 1 => array( + $params['id'], + 'Integer', + ), + )); + while ($result->fetch()) { + foreach ($fieldsToFill as $field) { + $params[$field] = !empty($params[$field]) ? $params[$field] : $result->$field; + } } return; } @@ -335,8 +349,8 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { /** * Specifiy defaults for creating a relationship * - * @return array $defaults array of defaults for creating relationship - * @static + * @return array + * array of defaults for creating relationship */ public static function getdefaults() { return array( @@ -354,10 +368,10 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { /** * Check if there is data to create the object * - * @param array $params (reference ) an assoc array of name/value pairs + * @param array $params + * (reference ) an assoc array of name/value pairs. * - * @return boolean - * @static + * @return bool */ public static function dataExists(&$params) { // return if no data present @@ -370,22 +384,30 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { /** * Get get list of relationship type based on the contact type. * - * @param int $contactId this is the contact id of the current contact. + * @param int $contactId + * This is the contact id of the current contact. * @param null $contactSuffix - * @param string $relationshipId the id of the existing relationship if any - * @param string $contactType contact type - * @param boolean $all if true returns relationship types in both the direction - * @param string $column name/label that going to retrieve from db. + * @param string $relationshipId + * The id of the existing relationship if any. + * @param string $contactType + * Contact type. + * @param bool $all + * If true returns relationship types in both the direction. + * @param string $column + * Name/label that going to retrieve from db. * @param bool $biDirectional - * @param string $contactSubType includes relationshiptypes between this subtype - * @param boolean $onlySubTypeRelationTypes if set only subtype which is passed by $contactSubType + * @param string $contactSubType + * Includes relationshiptypes between this subtype. + * @param bool $onlySubTypeRelationTypes + * If set only subtype which is passed by $contactSubType. * related relationshiptypes get return * - * @static * - * @return array - array reference of all relationship types with context to current contact. + * @return array + * array reference of all relationship types with context to current contact. */ - static function getContactRelationshipType($contactId = NULL, + public static function getContactRelationshipType( + $contactId = NULL, $contactSuffix = NULL, $relationshipId = NULL, $contactType = NULL, @@ -396,7 +418,7 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { $onlySubTypeRelationTypes = FALSE ) { $allRelationshipType = array(); - $relationshipType = array(); + $relationshipType = array(); $allRelationshipType = CRM_Core_PseudoConstant::relationshipType($column); $otherContactType = NULL; @@ -489,27 +511,28 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { if (($action & CRM_Core_Action::DISABLE) || ($action & CRM_Core_Action::DELETE)) { $relTypes = CRM_Utils_Array::index(array('name_a_b'), CRM_Core_PseudoConstant::relationshipType('name')); if ($relationship->relationship_type_id == $relTypes['Employee of']['id'] || - $relationship->relationship_type_id == $relTypes['Household Member of']['id']) { + $relationship->relationship_type_id == $relTypes['Household Member of']['id'] + ) { $sharedContact = new CRM_Contact_DAO_Contact(); $sharedContact->id = $relationship->contact_id_a; $sharedContact->find(TRUE); - if ($relationship->relationship_type_id == 4 && $relationship->contact_id_b == $sharedContact->employer_id) { + if ($relationship->relationship_type_id == 4 && $relationship->contact_id_b == $sharedContact->employer_id) { CRM_Contact_BAO_Contact_Utils::clearCurrentEmployer($relationship->contact_id_a); } } } - return $relationship; + return $relationship; } /** * Delete the relationship * - * @param int $id relationship id + * @param int $id + * Relationship id. * * @return null * - * @static */ public static function del($id) { // delete from relationship table @@ -553,12 +576,11 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { /** * Disable/enable the relationship * - * @param int $id relationship id + * @param int $id + * Relationship id. * * @param $action * - * @return null - * @static */ public static function disableEnableRelationship($id, $action) { $relationship = self::clearCurrentEmployer($id, $action); @@ -596,10 +618,10 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { /** * Delete the object records that are associated with this contact * - * @param int $contactId id of the contact to delete + * @param int $contactId + * Id of the contact to delete. * * @return void - * @static */ public static function deleteContact($contactId) { $relationship = new CRM_Contact_DAO_Relationship(); @@ -616,12 +638,12 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { /** * Get the other contact in a relationship * - * @param int $id relationship id + * @param int $id + * Relationship id. * * $returns returns the contact ids in the realtionship * * @return \CRM_Contact_DAO_Relationship - * @static */ public static function getContactIds($id) { $relationship = new CRM_Contact_DAO_Relationship(); @@ -637,12 +659,15 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { /** * Check if the relationship type selected between two contacts is correct * - * @param int $contact_a 1st contact id - * @param int $contact_b 2nd contact id - * @param int $relationshipTypeId relationship type id + * @param int $contact_a + * 1st contact id. + * @param int $contact_b + * 2nd contact id. + * @param int $relationshipTypeId + * Relationship type id. * - * @return boolean true if it is valid relationship else false - * @static + * @return bool + * true if it is valid relationship else false */ public static function checkRelationshipType($contact_a, $contact_b, $relationshipTypeId) { $relationshipType = new CRM_Contact_DAO_RelationshipType(); @@ -659,11 +684,11 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { if (((!$relationshipType->contact_type_a) || ($relationshipType->contact_type_a == $contact_type_a)) && ((!$relationshipType->contact_type_b) || ($relationshipType->contact_type_b == $contact_type_b)) && ((!$relationshipType->contact_sub_type_a) || (in_array($relationshipType->contact_sub_type_a, - $contact_sub_type_a - ))) && + $contact_sub_type_a + ))) && ((!$relationshipType->contact_sub_type_b) || (in_array($relationshipType->contact_sub_type_b, - $contact_sub_type_b - ))) + $contact_sub_type_b + ))) ) { return TRUE; } @@ -677,13 +702,14 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { /** * This function does the validtion for valid relationship * - * @param array $params this array contains the values there are subitted by the form - * @param array $ids the array that holds all the db ids - * @param integer $contactId this is contact id for adding relationship + * @param array $params + * This array contains the values there are subitted by the form. + * @param array $ids + * The array that holds all the db ids. + * @param int $contactId + * This is contact id for adding relationship. * * @return string - @access public - * @static */ public static function checkValidRelationship($params, $ids, $contactId) { $errors = ''; @@ -702,17 +728,21 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { /** * This function checks for duplicate relationship * - * @param array $params (reference ) an assoc array of name/value pairs - * @param integer $id this the id of the contact whom we are adding relationship - * @param integer $contactId this is contact id for adding relationship - * @param integer $relationshipId this is relationship id for the contact + * @param array $params + * (reference ) an assoc array of name/value pairs. + * @param int $id + * This the id of the contact whom we are adding relationship. + * @param int $contactId + * This is contact id for adding relationship. + * @param int $relationshipId + * This is relationship id for the contact. * - * @return boolean true if record exists else false - * @static + * @return bool + * true if record exists else false */ public static function checkDuplicateRelationship(&$params, $id, $contactId = 0, $relationshipId = 0) { $relationshipTypeId = CRM_Utils_Array::value('relationship_type_id', $params); - list($type, $first, $second) = explode('_', $relationshipTypeId); + list($type) = explode('_', $relationshipTypeId); $queryString = " SELECT id @@ -732,9 +762,9 @@ WHERE relationship_type_id = " . CRM_Utils_Type::escape($type, 'Integer'); */ $dateFields = array('end_date', 'start_date'); - foreach ($dateFields as $dateField){ - if(array_key_exists($dateField, $params)) { - if (empty($params[$dateField]) || $params[$dateField] == 'null'){ + foreach ($dateFields as $dateField) { + if (array_key_exists($dateField, $params)) { + if (empty($params[$dateField]) || $params[$dateField] == 'null') { //this is most likely coming from an api call & probably loaded // from the DB to deal with some of the // other myriad of excessive checks still in place both in @@ -742,7 +772,7 @@ WHERE relationship_type_id = " . CRM_Utils_Type::escape($type, 'Integer'); $queryString .= " AND $dateField IS NULL"; continue; } - elseif (is_array($params[$dateField])){ + elseif (is_array($params[$dateField])) { $queryString .= " AND $dateField = " . CRM_Utils_Type::escape(CRM_Utils_Date::format($params[$dateField]), 'Date'); } @@ -778,12 +808,14 @@ WHERE relationship_type_id = " . CRM_Utils_Type::escape($type, 'Integer'); /** * Update the is_active flag in the db * - * @param int $id id of the database record - * @param boolean $is_active value we want to set the is_active field + * @param int $id + * Id of the database record. + * @param bool $is_active + * Value we want to set the is_active field. * * @throws CiviCRM_API3_Exception - * @return Object DAO object on success, null otherwise - * @static + * @return Object + * DAO object on success, null otherwise */ public static function setIsActive($id, $is_active) { // as both the create & add functions have a bunch of logic in them that @@ -812,11 +844,13 @@ WHERE relationship_type_id = " . CRM_Utils_Type::escape($type, 'Integer'); * Given the list of params in the params array, fetch the object * and store the values in the values array * - * @param array $params input parameters to find object - * @param array $values output values of the object + * @param array $params + * Input parameters to find object. + * @param array $values + * Output values of the object. * - * @return array (reference) the values that could be potentially assigned to smarty - * @static + * @return array + * (reference) the values that could be potentially assigned to smarty */ public static function &getValues(&$params, &$values) { if (empty($params)) { @@ -844,19 +878,23 @@ WHERE relationship_type_id = " . CRM_Utils_Type::escape($type, 'Integer'); /** * Helper function to form the sql for relationship retrieval * - * @param int $contactId contact id - * @param int $status (check const at top of file) - * @param int $numRelationship no of relationships to display (limit) - * @param int $count get the no of relationships + * @param int $contactId + * Contact id. + * @param int $status + * (check const at top of file). + * @param int $numRelationship + * No of relationships to display (limit). + * @param int $count + * Get the no of relationships. * $param int $relationshipId relationship id * @param int $relationshipId - * @param string $direction the direction we are interested in a_b or b_a - * @param array $params array of extra values including relationship_type_id per api spec - * - * return string the query for this diretion + * @param string $direction + * The direction we are interested in a_b or b_a. + * @param array $params + * Array of extra values including relationship_type_id per api spec. * * @return array - * @static + * [select, from, where] */ public static function makeURLClause($contactId, $status, $numRelationship, $count, $relationshipId, $direction, $params = array()) { $select = $from = $where = ''; @@ -961,12 +999,12 @@ LEFT JOIN civicrm_country ON (civicrm_address.country_id = civicrm_country.id) // CRM-6181 $where .= ' AND civicrm_contact.is_deleted = 0'; - if(!empty($params['membership_type_id']) && empty($params['relationship_type_id'])) { + if (!empty($params['membership_type_id']) && empty($params['relationship_type_id'])) { $where .= self::membershipTypeToRelationshipTypes($params, $direction); } - if(!empty($params['relationship_type_id'])) { - if(is_array($params['relationship_type_id'])) { - $where .= " AND " . CRM_Core_DAO::createSQLFilter('relationship_type_id', $params['relationship_type_id'], 'Integer'); + if (!empty($params['relationship_type_id'])) { + if (is_array($params['relationship_type_id'])) { + $where .= " AND " . CRM_Core_DAO::createSQLFilter('relationship_type_id', $params['relationship_type_id'], 'Integer'); } else { $where .= ' AND relationship_type_id = ' . CRM_Utils_Type::escape($params['relationship_type_id'], 'Positive'); @@ -983,31 +1021,33 @@ LEFT JOIN civicrm_country ON (civicrm_address.country_id = civicrm_country.id) } /** - * This is the function to get the list of relationships + * Get a list of relationships * - * @param int $contactId contact id - * @param int $status 1: Past 2: Disabled 3: Current - * @param int $numRelationship no of relationships to display (limit) - * @param int $count get the no of relationships - * $param int $relationshipId relationship id - * $param array $links the list of links to display - * $param int $permissionMask the permission mask to be applied for the actions - * $param boolean $permissionedContact to return only permissioned Contact - * $param array $params array of variables consistent with filters supported by the api - * return array $values relationship records + * @param int $contactId + * Contact id. + * @param int $status + * 1: Past 2: Disabled 3: Current. + * @param int $numRelationship + * No of relationships to display (limit). + * @param int $count + * Get the no of relationships. * @param int $relationshipId - * @param null $links - * @param null $permissionMask + * @param array $links + * the list of links to display + * @param int $permissionMask + * the permission mask to be applied for the actions * @param bool $permissionedContact + * to return only permissioned Contact * @param array $params * * @return array|int - * @static + * relationship records */ - static function getRelationship($contactId = NULL, - $status = 0, $numRelationship = 0, - $count = 0, $relationshipId = 0, - $links = NULL, $permissionMask = NULL, + public static function getRelationship( + $contactId = NULL, + $status = 0, $numRelationship = 0, + $count = 0, $relationshipId = 0, + $links = NULL, $permissionMask = NULL, $permissionedContact = FALSE, $params = array() ) { @@ -1194,10 +1234,11 @@ LEFT JOIN civicrm_country ON (civicrm_address.country_id = civicrm_country.id) /** * Get get list of relationship type based on the target contact type. * - * @param string $targetContactType it's valid contact tpye(may be Individual , Organization , Household) - * - * @return array - array reference of all relationship types with context to current contact type . + * @param string $targetContactType + * It's valid contact tpye(may be Individual , Organization , Household). * + * @return array + * array reference of all relationship types with context to current contact type . */ public function getRelationType($targetContactType) { $relationshipType = array(); @@ -1220,18 +1261,20 @@ LEFT JOIN civicrm_country ON (civicrm_address.country_id = civicrm_country.id) * membership is is extedned by the same relationship type to that * of the existing relationship. * - * @param $contactId Int contact id - * @param $params array array of values submitted by POST - * @param $ids array array of ids + * @param int $contactId + * contact id. + * @param array $params + * array of values submitted by POST. + * @param array $ids + * array of ids. * @param \const|\which $action which action called this function * * @param bool $active * - * @static */ public static function relatedMemberships($contactId, &$params, $ids, $action = CRM_Core_Action::ADD, $active = TRUE) { // Check the end date and set the status of the relationship - // accrodingly. + // accordingly. $status = self::CURRENT; if (!empty($params['end_date'])) { @@ -1254,8 +1297,15 @@ LEFT JOIN civicrm_country ON (civicrm_address.country_id = civicrm_country.id) $rel = explode('_', $params['relationship_type_id']); - $relTypeId = $rel[0]; - $relDirection = "_{$rel[1]}_{$rel[2]}"; + $relTypeId = $rel[0]; + if (!empty($rel[1])) { + $relDirection = "_{$rel[1]}_{$rel[2]}"; + } + else { + // this call is coming from somewhere where the direction was resolved early on (e.g an api call) + // so we can assume _a_b + $relDirection = "_a_b"; + } $targetContact = array(); if (($action & CRM_Core_Action::ADD) || ($action & CRM_Core_Action::DELETE) @@ -1397,7 +1447,10 @@ SELECT relationship_type_id, relationship_direction $membershipValues['skipStatusCal'] = TRUE; } foreach (array( - 'join_date', 'start_date', 'end_date') as $dateField) { + 'join_date', + 'start_date', + 'end_date', + ) as $dateField) { if (!empty($membershipValues[$dateField])) { $membershipValues[$dateField] = CRM_Utils_Date::processDate($membershipValues[$dateField]); } @@ -1441,8 +1494,6 @@ SELECT count(*) * Helper function to check whether to delete the membership or * not. * - * @static - * */ public static function isDeleteRelatedMembership($relTypeIds, $contactId, $mainRelatedContactId, $relTypeId, $relIds) { if (in_array($relTypeId, $relTypeIds)) { @@ -1453,19 +1504,20 @@ SELECT count(*) return FALSE; } - $relParamas = array(1 => array($contactId, 'Integer'), + $relParamas = array( + 1 => array($contactId, 'Integer'), 2 => array($mainRelatedContactId, 'Integer'), ); if ($contactId == $mainRelatedContactId) { - $recordsFound = (int)CRM_Core_DAO::singleValueQuery("SELECT COUNT(*) FROM civicrm_relationship WHERE relationship_type_id IN ( " . implode(',', $relTypeIds) . " ) AND contact_id_a IN ( %1 ) OR contact_id_b IN ( %1 ) AND id IN (" . implode(',', $relIds) . ")", $relParamas); + $recordsFound = (int) CRM_Core_DAO::singleValueQuery("SELECT COUNT(*) FROM civicrm_relationship WHERE relationship_type_id IN ( " . implode(',', $relTypeIds) . " ) AND contact_id_a IN ( %1 ) OR contact_id_b IN ( %1 ) AND id IN (" . implode(',', $relIds) . ")", $relParamas); if ($recordsFound) { return FALSE; } return TRUE; } - $recordsFound = (int)CRM_Core_DAO::singleValueQuery("SELECT COUNT(*) FROM civicrm_relationship WHERE relationship_type_id IN ( " . implode(',', $relTypeIds) . " ) AND contact_id_a IN ( %1, %2 ) AND contact_id_b IN ( %1, %2 ) AND id NOT IN (" . implode(',', $relIds) . ")", $relParamas); + $recordsFound = (int) CRM_Core_DAO::singleValueQuery("SELECT COUNT(*) FROM civicrm_relationship WHERE relationship_type_id IN ( " . implode(',', $relTypeIds) . " ) AND contact_id_a IN ( %1, %2 ) AND contact_id_b IN ( %1, %2 ) AND id NOT IN (" . implode(',', $relIds) . ")", $relParamas); if ($recordsFound) { return FALSE; @@ -1477,9 +1529,11 @@ SELECT count(*) /** * Get Current Employer for Contact * - * @param $contactIds Contact Ids + * @param $contactIds + * Contact Ids. * - * @return array $currentEmployer array of the current employer@static + * @return array + * array of the current employer */ public static function getCurrentEmployer($contactIds) { $contacts = implode(',', $contactIds); @@ -1503,14 +1557,15 @@ WHERE id IN ( {$contacts} ) /** * Return list of permissioned employer for a given contact. * - * @param $contactID int contact id whose employers - * are to be found. - * @param $name string employers sort name + * @param int $contactID + * contact id whose employers. + * are to be found. + * @param string $name + * employers sort name. * - * @static - * - * @return array array of employers. * + * @return array + * array of employers. */ public static function getPermissionedEmployer($contactID, $name = NULL) { //get the relationship id @@ -1522,17 +1577,19 @@ WHERE id IN ( {$contacts} ) } - /** - * Function to return list of permissioned contacts for a given contact and relationship type - * - * @param $contactID int contact id whose permissioned contacts are to be found. - * @param $relTypeId string one or more relationship type id's - * @param $name string - * - * @static - * - * @return array of contacts - */ + /** + * Function to return list of permissioned contacts for a given contact and relationship type + * + * @param int $contactID + * contact id whose permissioned contacts are to be found. + * @param string $relTypeId + * one or more relationship type id's. + * @param string $name + * + * + * @return array + * Array of contacts + */ public static function getPermissionedContacts($contactID, $relTypeId, $name = NULL) { $contacts = array(); @@ -1550,13 +1607,13 @@ cc.id = cr.contact_id_b AND cc.is_deleted = 0"; if (!empty($name)) { - $name = CRM_Utils_Type::escape($name, 'String'); + $name = CRM_Utils_Type::escape($name, 'String'); $query .= " AND cc.sort_name LIKE '%$name%'"; } $args = array(1 => array($contactID, 'Integer'), 2 => array($relTypeId, 'String')); - $dao = CRM_Core_DAO::executeQuery($query, $args); + $dao = CRM_Core_DAO::executeQuery($query, $args); while ($dao->fetch()) { $contacts[$dao->id] = array( @@ -1572,13 +1629,15 @@ AND cc.sort_name LIKE '%$name%'"; * Merge relationships from otherContact to mainContact * Called during contact merge operation * - * @param int $mainId contact id of main contact record. - * @param int $otherId contact id of record which is going to merge. - * @param array $sqls (reference) array of sql statements to append to. + * @param int $mainId + * Contact id of main contact record. + * @param int $otherId + * Contact id of record which is going to merge. + * @param array $sqls + * (reference) array of sql statements to append to. * * @see CRM_Dedupe_Merger::cpTables() * - * @static */ public static function mergeRelationships($mainId, $otherId, &$sqls) { // Delete circular relationships @@ -1612,7 +1671,8 @@ AND cc.sort_name LIKE '%$name%'"; /** * Set 'is_valid' field to false for all relationships whose end date is in the past, ie. are expired. * - * @return True on success, false if error is encountered. + * @return bool + * True on success, false if error is encountered. */ public static function disableExpiredRelationships() { $query = "SELECT id FROM civicrm_relationship WHERE is_active = 1 AND end_date < CURDATE()"; @@ -1634,41 +1694,45 @@ AND cc.sort_name LIKE '%$name%'"; * and to add clauses to limit the return to those relationships which COULD inherit a membership type * (as opposed to those who inherit a particular membership * - * @param array $params api input array + * @param array $params + * Api input array. * @param null $direction * - * @return array + * @return array|void */ public static function membershipTypeToRelationshipTypes(&$params, $direction = NULL) { - $membershipType = civicrm_api3('membership_type', 'getsingle', array('id' => $params['membership_type_id'], 'return' => 'relationship_type_id, relationship_direction')); + $membershipType = civicrm_api3('membership_type', 'getsingle', array( + 'id' => $params['membership_type_id'], + 'return' => 'relationship_type_id, relationship_direction', + )); $relationshipTypes = $membershipType['relationship_type_id']; - if(empty($relationshipTypes)) { - return; + if (empty($relationshipTypes)) { + return NULL; } // if we don't have any contact data we can only filter on type - if(empty($params['contact_id']) && empty($params['contact_id_a']) && empty($params['contact_id_a'])) { + if (empty($params['contact_id']) && empty($params['contact_id_a']) && empty($params['contact_id_a'])) { $params['relationship_type_id'] = array('IN' => $relationshipTypes); - return; + return NULL; } else { $relationshipDirections = (array) $membershipType['relationship_direction']; // if we have contact_id_a OR contact_id_b we can make a call here // if we have contact?? foreach ($relationshipDirections as $index => $mtdirection) { - if(isset($params['contact_id_a']) && $mtdirection == 'a_b' || $direction == 'a_b') { + if (isset($params['contact_id_a']) && $mtdirection == 'a_b' || $direction == 'a_b') { $types[] = $relationshipTypes[$index]; } - if(isset($params['contact_id_b']) && $mtdirection == 'b_a' || $direction == 'b_a') { + if (isset($params['contact_id_b']) && $mtdirection == 'b_a' || $direction == 'b_a') { $types[] = $relationshipTypes[$index]; } } - if(!empty($types)) { + if (!empty($types)) { $params['relationship_type_id'] = array('IN' => $types); } - elseif(!empty($clauses)) { + elseif (!empty($clauses)) { return explode(' OR ', $clauses); } - else{ + else { // effectively setting it to return no results $params['relationship_type_id'] = 0; } @@ -1677,16 +1741,18 @@ AND cc.sort_name LIKE '%$name%'"; /** - * This function is a wrapper for contact relationship selector + * wrapper for contact relationship selector * - * @param array $params associated array for params record id. + * @param array $params + * Associated array for params record id. * - * @return array $contactRelationships associated array of contact relationships + * @return array + * associated array of contact relationships */ public static function getContactRelationshipSelector(&$params) { // format the params - $params['offset'] = ($params['page'] - 1) * $params['rp']; - $params['sort'] = CRM_Utils_Array::value('sortBy', $params); + $params['offset'] = ($params['page'] - 1) * $params['rp']; + $params['sort'] = CRM_Utils_Array::value('sortBy', $params); if ($params['context'] == 'past') { $relationshipStatus = CRM_Contact_BAO_Relationship::INACTIVE; @@ -1728,7 +1794,7 @@ AND cc.sort_name LIKE '%$name%'"; // get the total relationships if ($params['context'] != 'user') { $params['total'] = CRM_Contact_BAO_Relationship::getRelationship($params['contact_id'], - $relationshipStatus, 0, 1, 0, NULL, NULL, $permissionedContacts); + $relationshipStatus, 0, 1, 0, NULL, NULL, $permissionedContacts); } else { // FIX ME: we cannot directly determine total permissioned relationship, hence re-fire query @@ -1747,10 +1813,10 @@ AND cc.sort_name LIKE '%$name%'"; FALSE, $values['cid'] ); - $contactRelationships[$relationshipId]['name'] = $icon.' '.CRM_Utils_System::href( - $values['name'], - 'civicrm/contact/view', - "reset=1&cid={$values['cid']}"); + $contactRelationships[$relationshipId]['name'] = $icon . ' ' . CRM_Utils_System::href( + $values['name'], + 'civicrm/contact/view', + "reset=1&cid={$values['cid']}"); $contactRelationships[$relationshipId]['relation'] = CRM_Utils_System::href( $values['relation'],