Exemple #1
0
 /**
  * Return custom data tables for specified entity / extends.
  */
 public function entityCustomDataLogTables($extends)
 {
     $customGroupTables = array();
     $customGroupDAO = CRM_Core_BAO_CustomGroup::getAllCustomGroupsByBaseEntity($extends);
     $customGroupDAO->find();
     while ($customGroupDAO->fetch()) {
         $customGroupTables[$customGroupDAO->table_name] = $this->logs[$customGroupDAO->table_name];
     }
     return $customGroupTables;
 }
 /**
  * FIXME: Move to somewhere more useful
  * FIXME: Do real mapping of "types"
  *
  * @param string $extends
  *   Entity type; note: "Individual" means "Individual|Contact"; "Household" means "Household|Contact".
  * @param string $title
  *   A string to use in section headers.
  * @param array $availableFields
  *   List of fields that are allowed in profiles, e.g. $availableFields['my_field']['field_type'].
  * @return array
  *   with keys 'sections' and 'schema'
  * @see js/model/crm.core.js
  * @see js/model/crm.mappedcore.js
  */
 public static function convertCiviModelToBackboneModel($extends, $title, $availableFields)
 {
     $locationFields = CRM_Core_BAO_UFGroup::getLocationFields();
     $result = array('schema' => array(), 'sections' => array());
     // build field list
     foreach ($availableFields as $fieldName => $field) {
         switch ($extends) {
             case 'Individual':
             case 'Organization':
             case 'Household':
                 if ($field['field_type'] != $extends && $field['field_type'] != 'Contact' && !in_array($field['field_type'], CRM_Contact_BAO_ContactType::subTypes($extends))) {
                     continue 2;
                 }
                 break;
             default:
                 if ($field['field_type'] != $extends) {
                     continue 2;
                 }
         }
         $result['schema'][$fieldName] = array('type' => 'Text', 'title' => $field['title'], 'civiFieldType' => $field['field_type']);
         if (in_array($fieldName, $locationFields)) {
             $result['schema'][$fieldName]['civiIsLocation'] = TRUE;
         }
         if ($fieldName == 'url') {
             $result['schema'][$fieldName]['civiIsWebsite'] = TRUE;
         }
         if (in_array($fieldName, array('phone', 'phone_and_ext'))) {
             // FIXME what about phone_ext?
             $result['schema'][$fieldName]['civiIsPhone'] = TRUE;
         }
     }
     // build section list
     $result['sections']['default'] = array('title' => $title, 'is_addable' => FALSE);
     $customGroup = CRM_Core_BAO_CustomGroup::getAllCustomGroupsByBaseEntity($extends);
     $customGroup->orderBy('weight');
     $customGroup->is_active = 1;
     $customGroup->find();
     while ($customGroup->fetch()) {
         $sectionName = 'cg_' . $customGroup->id;
         $section = array('title' => ts('%1: %2', array(1 => $title, 2 => $customGroup->title)), 'is_addable' => $customGroup->is_reserved ? FALSE : TRUE, 'custom_group_id' => $customGroup->id, 'extends_entity_column_id' => $customGroup->extends_entity_column_id, 'extends_entity_column_value' => CRM_Utils_Array::explodePadded($customGroup->extends_entity_column_value), 'is_reserved' => $customGroup->is_reserved ? TRUE : FALSE);
         $result['sections'][$sectionName] = $section;
     }
     // put fields in their sections
     $fields = CRM_Core_BAO_CustomField::getFields($extends);
     foreach ($fields as $fieldId => $field) {
         $sectionName = 'cg_' . $field['custom_group_id'];
         $fieldName = 'custom_' . $fieldId;
         if (isset($result['schema'][$fieldName])) {
             $result['schema'][$fieldName]['section'] = $sectionName;
             $result['schema'][$fieldName]['civiIsMultiple'] = (bool) CRM_Core_BAO_CustomField::isMultiRecordField($fieldId);
         }
     }
     return $result;
 }
 /**
  * Get a list of triggers for the contact table.
  *
  * @see hook_civicrm_triggerInfo
  * @see CRM_Core_DAO::triggerRebuild
  * @see http://issues.civicrm.org/jira/browse/CRM-10554
  *
  * @param $info
  * @param null $tableName
  */
 public static function triggerInfo(&$info, $tableName = NULL)
 {
     //during upgrade, first check for valid version and then create triggers
     //i.e the columns created_date and modified_date are introduced in 4.3.alpha1 so dont create triggers for older version
     if (CRM_Core_Config::isUpgradeMode()) {
         $currentVer = CRM_Core_BAO_Domain::version(TRUE);
         //if current version is less than 4.3.alpha1 dont create below triggers
         if (version_compare($currentVer, '4.3.alpha1') < 0) {
             return;
         }
     }
     // Update timestamp for civicrm_contact itself
     if ($tableName == NULL || $tableName == self::getTableName()) {
         $info[] = array('table' => array(self::getTableName()), 'when' => 'BEFORE', 'event' => array('INSERT'), 'sql' => "\nSET NEW.created_date = CURRENT_TIMESTAMP;\n");
     }
     // Update timestamp when modifying closely related core tables
     $relatedTables = array('civicrm_address', 'civicrm_email', 'civicrm_im', 'civicrm_phone', 'civicrm_website');
     self::generateTimestampTriggers($info, $tableName, $relatedTables, 'contact_id');
     // Update timestamp when modifying related custom-data tables
     $customGroupTables = array();
     $customGroupDAO = CRM_Core_BAO_CustomGroup::getAllCustomGroupsByBaseEntity('Contact');
     $customGroupDAO->is_multiple = 0;
     $customGroupDAO->find();
     while ($customGroupDAO->fetch()) {
         $customGroupTables[] = $customGroupDAO->table_name;
     }
     if (!empty($customGroupTables)) {
         self::generateTimestampTriggers($info, $tableName, $customGroupTables, 'entity_id');
     }
     // Update phone table to populate phone_numeric field
     if (!$tableName || $tableName == 'civicrm_phone') {
         // Define stored sql function needed for phones
         CRM_Core_DAO::executeQuery(self::DROP_STRIP_FUNCTION_43);
         CRM_Core_DAO::executeQuery(self::CREATE_STRIP_FUNCTION_43);
         $info[] = array('table' => array('civicrm_phone'), 'when' => 'BEFORE', 'event' => array('INSERT', 'UPDATE'), 'sql' => "\nSET NEW.phone_numeric = civicrm_strip_non_numeric(NEW.phone);\n");
     }
 }
Exemple #4
0
 /**
  * Add custom tables that extend contacts to the list of contact references.
  *
  * CRM_Core_BAO_CustomGroup::getAllCustomGroupsByBaseEntity seems like a safe-ish
  * function to be sure all are retrieved & we don't miss subtypes or inactive or multiples
  * - the down side is it is not cached.
  *
  * Further changes should be include tests in the CRM_Core_MergerTest class
  * to ensure that disabled, subtype, multiple etc groups are still captured.
  *
  * @param array $cidRefs
  */
 public static function addCustomTablesExtendingContactsToCidRefs(&$cidRefs)
 {
     $customValueTables = CRM_Core_BAO_CustomGroup::getAllCustomGroupsByBaseEntity('Contact');
     $customValueTables->find();
     while ($customValueTables->fetch()) {
         $cidRefs[$customValueTables->table_name] = array('entity_id');
     }
 }