/** * Validate profile and provided activity Id. * * @param int $activityId * @param int $contactId * @param int $gid * * @return array */ public static function validateContactActivityProfile($activityId, $contactId, $gid) { $errors = array(); if (!$activityId) { $errors[] = 'Profile is using one or more activity fields, and is missing the activity Id (aid) in the URL.'; return $errors; } $activityDetails = array(); $activityParams = array('id' => $activityId); CRM_Activity_BAO_Activity::retrieve($activityParams, $activityDetails); if (empty($activityDetails)) { $errors[] = 'Invalid Activity Id (aid).'; return $errors; } $profileActivityTypes = CRM_Core_BAO_UFGroup::groupTypeValues($gid, 'Activity'); if (!empty($profileActivityTypes['Activity']) && !in_array($activityDetails['activity_type_id'], $profileActivityTypes['Activity']) || !in_array($contactId, $activityDetails['assignee_contact']) && !in_array($contactId, $activityDetails['target_contact'])) { $errors[] = 'This activity cannot be edited or viewed via this profile.'; } return $errors; }
/** * Validation rule for custom data extends entity column values. * * @param Object $customField * Custom field. * @param int $gid * Group Id. * @param string $fieldType * Group type of the field. * @param array $errors * Collect errors. * * @return array * list of errors to be posted back to the form */ public static function formRuleCustomDataExtentColumnValue($customField, $gid, $fieldType, &$errors) { // fix me : check object $customField if (in_array($fieldType, array('Participant', 'Contribution', 'Membership', 'Activity', 'Case'))) { $params = array('id' => $customField->custom_group_id); $customGroup = array(); CRM_Core_BAO_CustomGroup::retrieve($params, $customGroup); if ($fieldType != CRM_Utils_Array::value('extends', $customGroup) || empty($customGroup['extends_entity_column_value'])) { return $errors; } $extendsColumnValues = array(); foreach (explode(CRM_Core_DAO::VALUE_SEPARATOR, $customGroup['extends_entity_column_value']) as $val) { if ($val) { $extendsColumnValues[] = $val; } } if (empty($extendsColumnValues)) { return $errors; } $fieldTypeValues = CRM_Core_BAO_UFGroup::groupTypeValues($gid, $fieldType); if (empty($fieldTypeValues[$fieldType])) { return; } $disallowedTypes = array_diff($extendsColumnValues, $fieldTypeValues[$fieldType]); if (!empty($disallowedTypes)) { $errors['field_name'] = ts('Profile is already having custom fields extending different group types, you can not add or update this custom field.'); } } }