Пример #1
0
 /**
  * @param $value
  * @param $option
  * @param $html_type
  * @param $data_type
  * @param null $format
  * @param int $contactID
  * @param int $fieldID
  *
  * @return array|mixed|null|string
  */
 public static function getDisplayValueCommon($value, &$option, $html_type, $data_type, $format = NULL, $contactID = NULL, $fieldID = NULL)
 {
     $display = $value;
     if ($fieldID && ($html_type == 'Radio' && $data_type != 'Boolean' || $html_type == 'Autocomplete-Select' && $data_type != 'ContactReference' || $html_type == 'Select' || $html_type == 'CheckBox' || $html_type == 'AdvMulti-Select' || $html_type == 'Multi-Select')) {
         CRM_Utils_Hook::customFieldOptions($fieldID, $option);
     }
     switch ($html_type) {
         case 'Radio':
             if ($data_type == 'Boolean') {
                 $options = array('No', 'Yes');
             } else {
                 $options = $option;
             }
             if (is_array($value)) {
                 $display = NULL;
                 foreach ($value as $data) {
                     $display .= $display ? ', ' . $options[$data] : $options[$data];
                 }
             } else {
                 $display = CRM_Utils_Array::value($value, $options);
             }
             break;
         case 'Autocomplete-Select':
             if ($data_type == 'ContactReference' && $value) {
                 $display = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $value, 'display_name');
             } elseif (is_array($value)) {
                 $display = NULL;
                 foreach ($value as $data) {
                     $display .= $display ? ', ' . $option[$data] : $option[$data];
                 }
             } else {
                 $display = CRM_Utils_Array::value($value, $option);
             }
             break;
         case 'Select':
             if (is_array($value)) {
                 $display = NULL;
                 foreach ($value as $data) {
                     $display .= $display ? ', ' . $option[$data] : $option[$data];
                 }
             } else {
                 $display = CRM_Utils_Array::value($value, $option);
             }
             break;
         case 'CheckBox':
         case 'AdvMulti-Select':
         case 'Multi-Select':
             if (is_array($value)) {
                 $checkedData = $value;
             } else {
                 $checkedData = explode(CRM_Core_DAO::VALUE_SEPARATOR, substr($value, 1, -1));
                 if ($html_type == 'CheckBox') {
                     $newData = array();
                     foreach ($checkedData as $v) {
                         $v = str_replace(CRM_Core_DAO::VALUE_SEPARATOR, '', $v);
                         $newData[] = $v;
                     }
                     $checkedData = $newData;
                 }
             }
             $v = array();
             foreach ($checkedData as $key => $val) {
                 $v[] = CRM_Utils_Array::value($val, $option);
             }
             if (!empty($v)) {
                 $display = implode(', ', $v);
             }
             break;
         case 'Select Date':
             if (is_array($value)) {
                 foreach ($value as $key => $val) {
                     $display[$key] = CRM_Utils_Date::customFormat($val);
                 }
             } else {
                 // remove time element display if time is not set
                 if (empty($option['attributes']['time_format'])) {
                     $value = substr($value, 0, 10);
                 }
                 $display = CRM_Utils_Date::customFormat($value);
             }
             break;
         case 'Select State/Province':
         case 'Multi-Select State/Province':
         case 'Select Country':
         case 'Multi-Select Country':
             if (strstr($html_type, 'State/Province')) {
                 $option = CRM_Core_PseudoConstant::stateProvince(FALSE, FALSE);
             } else {
                 $option = CRM_Core_PseudoConstant::country(FALSE, FALSE);
             }
             // process multi-select state/country field values
             if (!is_array($value)) {
                 $value = explode(CRM_Core_DAO::VALUE_SEPARATOR, $value);
             }
             $display = NULL;
             foreach ($value as $data) {
                 $display .= $display && !empty($option[$data]) ? ', ' . $option[$data] : $option[$data];
             }
             break;
         case 'File':
             // In the context of displaying a profile, show file/image
             if ($contactID && $value) {
                 $url = self::getFileURL($contactID, $fieldID, $value);
                 if ($url) {
                     $display = $url['file_url'];
                 }
             } elseif ($value) {
                 $icons = CRM_Core_BAO_File::paperIconAttachment('*', $value);
                 $display = $icons[$value];
             }
             break;
         case 'TextArea':
             if (empty($value)) {
                 $display = '';
             } else {
                 $display = is_array($value) ? nl2br(implode(', ', $value)) : nl2br($value);
             }
             break;
         case 'Link':
         case 'Text':
             if (empty($value)) {
                 $display = '';
             } else {
                 $display = is_array($value) ? implode(', ', $value) : $value;
             }
     }
     return $display ? $display : $value;
 }
Пример #2
0
 /**
  * Recursive function to get all descendent notes of the note with given ID.
  *
  * @param int $parentId
  *   ID of the note to start from.
  * @param int $maxDepth
  *   Maximum number of levels to descend into the tree; if not given, will include all descendents.
  * @param bool $snippet
  *   If TRUE, returned values will be pre-formatted for display in a table of notes.
  * @param array $tree
  *   (Reference) Variable to store all found descendents.
  * @param int $depth
  *   Depth of current iteration within the descendent tree (used for comparison against maxDepth).
  *
  * @return array
  *   Nested associative array beginning with direct children of given note.
  */
 private static function buildNoteTree($parentId, $maxDepth = 0, $snippet = FALSE, &$tree = array(), $depth = 0)
 {
     if ($maxDepth && $depth > $maxDepth) {
         return FALSE;
     }
     // get direct children of given parentId note
     $note = new CRM_Core_DAO_Note();
     $note->entity_table = 'civicrm_note';
     $note->entity_id = $parentId;
     $note->orderBy('modified_date asc');
     $note->find();
     while ($note->fetch()) {
         // foreach child, call this function, unless the child is private/hidden
         if (!self::getNotePrivacyHidden($note)) {
             CRM_Core_DAO::storeValues($note, $tree[$note->id]);
             // get name of user that created this note
             $contact = new CRM_Contact_DAO_Contact();
             $createdById = $note->contact_id;
             $contact->id = $createdById;
             $contact->find();
             $contact->fetch();
             $tree[$note->id]['createdBy'] = $contact->display_name;
             $tree[$note->id]['createdById'] = $createdById;
             $tree[$note->id]['modified_date'] = CRM_Utils_Date::customFormat($tree[$note->id]['modified_date']);
             // paper icon view for attachments part
             $paperIconAttachmentInfo = CRM_Core_BAO_File::paperIconAttachment('civicrm_note', $note->id);
             $tree[$note->id]['attachment'] = $paperIconAttachmentInfo ? implode('', $paperIconAttachmentInfo) : '';
             if ($snippet) {
                 $tree[$note->id]['note'] = nl2br($tree[$note->id]['note']);
                 $tree[$note->id]['note'] = smarty_modifier_mb_truncate($tree[$note->id]['note'], 80, '...', TRUE);
                 CRM_Utils_Date::customFormat($tree[$note->id]['modified_date']);
             }
             self::buildNoteTree($note->id, $maxDepth, $snippet, $tree[$note->id]['child'], $depth + 1);
         }
     }
     return $tree;
 }
 /**
  * Return an array of all custom values associated with an entity.
  *
  * @param int         $entityID      Identification number of the entity
  * @param string      $entityType    Type of entity that the entityID corresponds to, specified
  *                                   as a string with format "'<EntityName>'". Comma separated
  *                                   list may be used to specify OR matches. Allowable values
  *                                   are enumerated types in civicrm_custom_group.extends field.
  *                                   Optional. Default value assumes entityID references a
  *                                   contact entity.
  * @param array       $fieldIDs      optional list of fieldIDs that we want to retrieve. If this
  *                                   is set the entityType is ignored
  *
  * @return array      $fields        Array of custom values for the entity with key=>value
  *                                   pairs specified as civicrm_custom_field.id => custom value.
  *                                   Empty array if no custom values found.
  * @access public
  * @static
  */
 public static function &getEntityValues($entityID, $entityType = NULL, $fieldIDs = NULL, $formatMultiRecordField = FALSE)
 {
     if (!$entityID) {
         // adding this here since an empty contact id could have serious repurcussions
         // like looping forever
         CRM_Core_Error::fatal('Please file an issue with the backtrace');
         return NULL;
     }
     $cond = array();
     if ($entityType) {
         $cond[] = "cg.extends IN ( '{$entityType}' )";
     }
     if ($fieldIDs && is_array($fieldIDs)) {
         $fieldIDList = implode(',', $fieldIDs);
         $cond[] = "cf.id IN ( {$fieldIDList} )";
     }
     if (empty($cond)) {
         $cond[] = "cg.extends IN ( 'Contact', 'Individual', 'Household', 'Organization' )";
     }
     $cond = implode(' AND ', $cond);
     // first find all the fields that extend this type of entity
     $query = "\nSELECT cg.table_name,\n       cg.id as groupID,\n       cg.is_multiple,\n       cf.column_name,\n       cf.id as fieldID,\n       cf.data_type as fieldDataType\nFROM   civicrm_custom_group cg,\n       civicrm_custom_field cf\nWHERE  cf.custom_group_id = cg.id\nAND    cg.is_active = 1\nAND    cf.is_active = 1\nAND    {$cond}\n";
     $dao = CRM_Core_DAO::executeQuery($query);
     $select = $fields = $isMultiple = array();
     while ($dao->fetch()) {
         if (!array_key_exists($dao->table_name, $select)) {
             $fields[$dao->table_name] = array();
             $select[$dao->table_name] = array();
         }
         $fields[$dao->table_name][] = $dao->fieldID;
         $select[$dao->table_name][] = "{$dao->column_name} AS custom_{$dao->fieldID}";
         $isMultiple[$dao->table_name] = $dao->is_multiple ? TRUE : FALSE;
         $file[$dao->table_name][$dao->fieldID] = $dao->fieldDataType;
     }
     $result = array();
     foreach ($select as $tableName => $clauses) {
         $query = "SELECT id, " . implode(', ', $clauses) . " FROM {$tableName} WHERE entity_id = {$entityID}";
         $dao = CRM_Core_DAO::executeQuery($query);
         while ($dao->fetch()) {
             foreach ($fields[$tableName] as $fieldID) {
                 $fieldName = "custom_{$fieldID}";
                 if ($isMultiple[$tableName]) {
                     if ($formatMultiRecordField) {
                         if ($file[$tableName][$fieldID] == 'File') {
                             if ($fileid = $dao->{$fieldName}) {
                                 $fileurl = CRM_Core_BAO_File::paperIconAttachment($tableName, $entityID);
                                 $result["{$dao->id}"]["{$fieldID}"] = $fileurl[$dao->{$fieldName}];
                             }
                         } else {
                             $result["{$dao->id}"]["{$fieldID}"] = $dao->{$fieldName};
                         }
                     } else {
                         $result["{$fieldID}_{$dao->id}"] = $dao->{$fieldName};
                     }
                 } else {
                     if ($file[$tableName][$fieldID] == 'File') {
                         if ($fileid = $dao->{$fieldName}) {
                             $fileurl = CRM_Core_BAO_File::paperIconAttachment($tableName, $entityID);
                             $result[$fieldID] = $fileurl[$dao->{$fieldName}];
                         }
                     } else {
                         $result[$fieldID] = $dao->{$fieldName};
                     }
                 }
             }
         }
     }
     return $result;
 }
Пример #4
0
 /**
  * @param $value
  * @param $option
  * @param $html_type
  * @param $data_type
  * @param null $format
  * @param int $contactID
  * @param int $fieldID
  *
  * @return array|mixed|null|string
  */
 public static function getDisplayValueCommon($value, &$option, $html_type, $data_type, $format = NULL, $contactID = NULL, $fieldID = NULL)
 {
     $display = $value;
     if ($fieldID && ($html_type == 'Radio' && $data_type != 'Boolean' || $html_type == 'Autocomplete-Select' && $data_type != 'ContactReference' || $html_type == 'Select' || $html_type == 'CheckBox' || $html_type == 'AdvMulti-Select' || $html_type == 'Multi-Select')) {
         CRM_Utils_Hook::customFieldOptions($fieldID, $option);
     }
     switch ($html_type) {
         case 'Radio':
             if ($data_type == 'Boolean') {
                 // Do not assume that if not yes means no.
                 $display = '';
                 if ($value) {
                     $display = ts('Yes');
                 } elseif ((string) $value === '0') {
                     $display = ts('No');
                 }
             } else {
                 $display = CRM_Utils_Array::value($value, $option);
             }
             break;
         case 'Autocomplete-Select':
             if ($data_type == 'ContactReference' && $value) {
                 $display = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $value, 'display_name');
             } else {
                 $display = CRM_Utils_Array::value($value, $option);
             }
             break;
         case 'Select':
             $display = CRM_Utils_Array::value($value, $option);
             break;
         case 'CheckBox':
         case 'AdvMulti-Select':
         case 'Multi-Select':
             if (is_array($value)) {
                 $checkedData = $value;
             } else {
                 $checkedData = explode(CRM_Core_DAO::VALUE_SEPARATOR, substr($value, 1, -1));
                 if ($html_type == 'CheckBox') {
                     $newData = array();
                     foreach ($checkedData as $v) {
                         $newData[$v] = 1;
                     }
                     $checkedData = $newData;
                 }
             }
             $v = array();
             $p = array();
             foreach ($checkedData as $key => $val) {
                 if ($html_type == 'CheckBox') {
                     if ($val) {
                         $p[] = $key;
                         $v[] = CRM_Utils_Array::value($key, $option);
                     }
                 } else {
                     $p[] = $val;
                     $v[] = CRM_Utils_Array::value($val, $option);
                 }
             }
             if (!empty($v)) {
                 $display = implode(', ', $v);
             }
             break;
         case 'Select Date':
             if (is_array($value)) {
                 foreach ($value as $key => $val) {
                     $display[$key] = CRM_Utils_Date::customFormat($val);
                 }
             } else {
                 // remove time element display if time is not set
                 if (empty($option['attributes']['time_format'])) {
                     $value = substr($value, 0, 10);
                 }
                 $display = CRM_Utils_Date::customFormat($value);
             }
             break;
         case 'Select State/Province':
             if (empty($value)) {
                 $display = '';
             } else {
                 $display = CRM_Core_PseudoConstant::stateProvince($value);
             }
             break;
         case 'Multi-Select State/Province':
             if (is_array($value)) {
                 $checkedData = $value;
             } else {
                 $checkedData = explode(CRM_Core_DAO::VALUE_SEPARATOR, substr($value, 1, -1));
             }
             $states = CRM_Core_PseudoConstant::stateProvince();
             $display = NULL;
             foreach ($checkedData as $stateID) {
                 if ($display) {
                     $display .= ', ';
                 }
                 $display .= $states[$stateID];
             }
             break;
         case 'Select Country':
             if (empty($value)) {
                 $display = '';
             } else {
                 $display = CRM_Core_PseudoConstant::country($value);
             }
             break;
         case 'Multi-Select Country':
             if (is_array($value)) {
                 $checkedData = $value;
             } else {
                 $checkedData = explode(CRM_Core_DAO::VALUE_SEPARATOR, substr($value, 1, -1));
             }
             $countries = CRM_Core_PseudoConstant::country();
             $display = NULL;
             foreach ($checkedData as $countryID) {
                 if ($display) {
                     $display .= ', ';
                 }
                 $display .= $countries[$countryID];
             }
             break;
         case 'File':
             // In the context of displaying a profile, show file/image
             if ($contactID && $value) {
                 $url = self::getFileURL($contactID, $fieldID, $value);
                 if ($url) {
                     $display = $url['file_url'];
                 }
             } elseif ($value) {
                 $icons = CRM_Core_BAO_File::paperIconAttachment('*', $value);
                 $display = $icons[$value];
             }
             break;
         case 'TextArea':
             if (empty($value)) {
                 $display = '';
             } else {
                 $display = nl2br($value);
             }
             break;
         case 'Link':
             if (empty($value)) {
                 $display = '';
             } else {
                 $display = $value;
             }
     }
     return $display ? $display : $value;
 }
Пример #5
0
 /**
  * Lower-level logic for rendering a custom field value
  *
  * @param string|array $value
  * @param array $field
  * @param int|null $entityId
  *
  * @return string
  */
 private static function formatDisplayValue($value, $field, $entityId = NULL)
 {
     if (self::isSerialized($field) && !is_array($value)) {
         $value = CRM_Utils_Array::explodePadded($value);
     }
     // CRM-12989 fix
     if ($field['html_type'] == 'CheckBox') {
         CRM_Utils_Array::formatArrayKeys($value);
     }
     $display = is_array($value) ? implode(', ', $value) : (string) $value;
     switch ($field['html_type']) {
         case 'Select':
         case 'Autocomplete-Select':
         case 'Radio':
         case 'Select Country':
         case 'Select State/Province':
         case 'CheckBox':
         case 'AdvMulti-Select':
         case 'Multi-Select':
         case 'Multi-Select State/Province':
         case 'Multi-Select Country':
             if ($field['data_type'] == 'ContactReference' && $value) {
                 $display = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $value, 'display_name');
             } elseif (is_array($value)) {
                 $v = array();
                 foreach ($value as $key => $val) {
                     $v[] = CRM_Utils_Array::value($val, $field['options']);
                 }
                 $display = implode(', ', $v);
             } else {
                 $display = CRM_Utils_Array::value($value, $field['options'], '');
             }
             break;
         case 'Select Date':
             $customFormat = NULL;
             // FIXME: Are there any legitimate reasons why $value would be an array?
             // Or should we throw an exception here if it is?
             $value = is_array($value) ? CRM_Utils_Array::first($value) : $value;
             $actualPHPFormats = CRM_Core_SelectValues::datePluginToPHPFormats();
             $format = CRM_Utils_Array::value('date_format', $field);
             if ($format) {
                 if (array_key_exists($format, $actualPHPFormats)) {
                     $customTimeFormat = (array) $actualPHPFormats[$format];
                     switch (CRM_Utils_Array::value('time_format', $field)) {
                         case 1:
                             $customTimeFormat[] = 'g:iA';
                             break;
                         case 2:
                             $customTimeFormat[] = 'G:i';
                             break;
                         default:
                             // if time is not selected remove time from value
                             $value = substr($value, 0, 10);
                     }
                     $customFormat = implode(" ", $customTimeFormat);
                 }
             }
             $display = CRM_Utils_Date::processDate($value, NULL, FALSE, $customFormat);
             break;
         case 'File':
             // In the context of displaying a profile, show file/image
             if ($value) {
                 if ($entityId) {
                     $url = self::getFileURL($entityId, $field['id']);
                     if ($url) {
                         $display = $url['file_url'];
                     }
                 } else {
                     // In other contexts show a paperclip icon
                     if (CRM_Utils_Rule::integer($value)) {
                         $icons = CRM_Core_BAO_File::paperIconAttachment('*', $value);
                         $display = $icons[$value];
                     } else {
                         //CRM-18396, if filename is passed instead
                         $display = $value;
                     }
                 }
             }
             break;
         case 'TextArea':
             $display = nl2br($display);
             break;
         case 'Text':
             if ($field['data_type'] == 'Money' && isset($value)) {
                 //$value can also be an array(while using IN operator from search builder or api).
                 foreach ((array) $value as $val) {
                     $disp[] = CRM_Utils_Money::format($val);
                 }
                 $display = implode(', ', $disp);
             }
             break;
     }
     return $display;
 }
Пример #6
0
 /**
  * @return array
  */
 public function summary()
 {
     $this->initialize();
     $summary = array();
     foreach ($this->_partialQueries as $partialQuery) {
         /** @var $partialQuery CRM_Contact_Form_Search_Custom_FullText_AbstractPartialQuery */
         $summary[$partialQuery->getName()] = array();
     }
     // now iterate through the table and add entries to the relevant section
     $sql = "SELECT * FROM {$this->_tableName}";
     if ($this->_table) {
         $sql .= " {$this->toLimit($this->_limitRowClause)} ";
     }
     $dao = CRM_Core_DAO::executeQuery($sql);
     $activityTypes = CRM_Core_PseudoConstant::activityType(TRUE, TRUE);
     $roleIds = CRM_Event_PseudoConstant::participantRole();
     while ($dao->fetch()) {
         $row = array();
         foreach ($this->_tableFields as $name => $dontCare) {
             if ($name != 'activity_type_id') {
                 $row[$name] = $dao->{$name};
             } else {
                 $row['activity_type'] = CRM_Utils_Array::value($dao->{$name}, $activityTypes);
             }
         }
         if (isset($row['participant_role'])) {
             $participantRole = explode(CRM_Core_DAO::VALUE_SEPARATOR, $row['participant_role']);
             $viewRoles = array();
             foreach ($participantRole as $v) {
                 $viewRoles[] = $roleIds[$v];
             }
             $row['participant_role'] = implode(', ', $viewRoles);
         }
         if (!empty($row['file_ids'])) {
             $fileIds = explode(',', $row['file_ids']);
             $fileHtml = '';
             foreach ($fileIds as $fileId) {
                 $paperclip = CRM_Core_BAO_File::paperIconAttachment('*', $fileId);
                 if ($paperclip) {
                     $fileHtml .= implode('', $paperclip);
                 }
             }
             $row['fileHtml'] = $fileHtml;
         }
         $summary[$dao->table_name][] = $row;
     }
     $summary['Count'] = array();
     foreach (array_keys($summary) as $table) {
         $summary['Count'][$table] = CRM_Utils_Array::value($table, $this->_foundRows);
         if ($summary['Count'][$table] >= self::LIMIT) {
             $summary['addShowAllLink'][$table] = TRUE;
         } else {
             $summary['addShowAllLink'][$table] = FALSE;
         }
     }
     return $summary;
 }
Пример #7
0
 /**
  * called when action is browse.
  */
 public function browse()
 {
     $note = new CRM_Core_DAO_Note();
     $note->entity_table = 'civicrm_contact';
     $note->entity_id = $this->_contactId;
     $note->orderBy('modified_date desc');
     //CRM-4418, handling edit and delete separately.
     $permissions = array($this->_permission);
     if ($this->_permission == CRM_Core_Permission::EDIT) {
         //previously delete was subset of edit
         //so for consistency lets grant delete also.
         $permissions[] = CRM_Core_Permission::DELETE;
     }
     $mask = CRM_Core_Action::mask($permissions);
     $values = array();
     $links = self::links();
     $action = array_sum(array_keys($links)) & $mask;
     $note->find();
     while ($note->fetch()) {
         if (!CRM_Core_BAO_Note::getNotePrivacyHidden($note)) {
             CRM_Core_DAO::storeValues($note, $values[$note->id]);
             $values[$note->id]['action'] = CRM_Core_Action::formLink($links, $action, array('id' => $note->id, 'cid' => $this->_contactId), ts('more'), FALSE, 'note.selector.row', 'Note', $note->id);
             $contact = new CRM_Contact_DAO_Contact();
             $contact->id = $note->contact_id;
             $contact->find();
             $contact->fetch();
             $values[$note->id]['createdBy'] = $contact->display_name;
             $values[$note->id]['comment_count'] = CRM_Core_BAO_Note::getChildCount($note->id);
             // paper icon view for attachments part
             $paperIconAttachmentInfo = CRM_Core_BAO_File::paperIconAttachment('civicrm_note', $note->id);
             $values[$note->id]['attachment'] = $paperIconAttachmentInfo;
         }
     }
     $this->assign('notes', $values);
     $commentLinks = self::commentLinks();
     $action = array_sum(array_keys($commentLinks)) & $mask;
     $commentAction = CRM_Core_Action::formLink($commentLinks, $action, array('id' => $note->id, 'pid' => $note->entity_id, 'cid' => $note->entity_id), ts('more'), FALSE, 'note.comment.action', 'Note', $note->id);
     $this->assign('commentAction', $commentAction);
     $this->ajaxResponse['tabCount'] = CRM_Contact_BAO_Contact::getCountComponent('note', $this->_contactId);
 }