function createField($params, $fields = null) { if (empty($params)) { $params = array('custom_group_id' => $fields['groupId'], 'label' => 'test_' . $fields['dataType'], 'html_type' => $fields['htmlType'], 'data_type' => $fields['dataType'], 'weight' => 4, 'is_required' => 1, 'is_searchable' => 0, 'is_active' => 1); } $customFieldBAO =& new CRM_Core_BAO_CustomField(); $customFieldBAO->copyValues($params); $customField = $customFieldBAO->save(); $customFieldBAO->column_name = 'test_' . $params['data_type'] . '_' . $customField->id; $customFieldObject = $customFieldBAO; $customField = $customFieldBAO->save(); require_once 'CRM/Core/BAO/CustomField.php'; $createField = CRM_Core_BAO_CustomField::createField($customFieldObject, 'add'); return $customField; }
/** * @param $xml * @param $idMap */ public function customFields(&$xml, &$idMap) { // Re-index by group id so we can build out the custom fields one table // at a time, and then rebuild the table triggers at the end, rather than // rebuilding the table triggers after each field is added (which is // painfully slow). $fields_indexed_by_group_id = array(); foreach ($xml->CustomFields as $customFieldsXML) { $total = count($customFieldsXML->CustomField); foreach ($customFieldsXML->CustomField as $customFieldXML) { $id = $idMap['custom_group'][(string) $customFieldXML->custom_group_name]; $fields_indexed_by_group_id[$id][] = $customFieldXML; } } while (list($group_id, $fields) = each($fields_indexed_by_group_id)) { $total = count($fields); $count = 0; while (list(, $customFieldXML) = each($fields)) { $count++; $customField = new CRM_Core_DAO_CustomField(); $customField->custom_group_id = $group_id; $skipStore = FALSE; if (!$this->copyData($customField, $customFieldXML, FALSE, 'label')) { $skipStore = TRUE; } if (empty($customField->option_group_id) && isset($customFieldXML->option_group_name)) { $customField->option_group_id = $idMap['option_group'][(string) $customFieldXML->option_group_name]; } if ($skipStore) { continue; } $customField->save(); // Only rebuild the table's trigger on the last field added to avoid un-necessary // and slow rebuilds when adding many fields at the same time. $triggerRebuild = FALSE; if ($count == $total) { $triggerRebuild = TRUE; } $indexExist = FALSE; CRM_Core_BAO_CustomField::createField($customField, 'add', $indexExist, $triggerRebuild); } } }
function customFields(&$xml, &$idMap) { require_once 'CRM/Core/BAO/CustomField.php'; foreach ($xml->CustomFields as $customFieldsXML) { foreach ($customFieldsXML->CustomField as $customFieldXML) { $customField = new CRM_Core_DAO_CustomField(); $customField->custom_group_id = $idMap['custom_group'][(string) $customFieldXML->custom_group_name]; $skipStore = false; if (!$this->copyData($customField, $customFieldXML, false, 'label')) { $skipStore = true; } if (empty($customField->option_group_id) && isset($customFieldXML->option_group_name)) { $customField->option_group_id = $idMap['option_group'][(string) $customFieldXML->option_group_name]; } if ($skipStore) { continue; } $customField->save(); CRM_Core_BAO_CustomField::createField($customField, 'add'); } } }
/** * Test civicrm_activity_get() with a good activity ID which * has associated custom data */ function testActivityGetGoodIDCustom() { // Insert rows in civicrm_activity creating activities 4 and // 13 $op = new PHPUnit_Extensions_Database_Operation_Insert(); $op->execute($this->_dbconn, new PHPUnit_Extensions_Database_DataSet_XMLDataSet(dirname(__FILE__) . '/dataset/activity_4_13.xml')); // Insert rows in civicrm_custom_group and civicrm_custom_field // creating Activity Custom to extend activity type 5 $op = new PHPUnit_Extensions_Database_Operation_Insert(); $op->execute($this->_dbconn, new PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet(dirname(__FILE__) . '/dataset/custom_group_activity_type_5.xml')); // Drop and create table civicrm_value_activity_custom_9 $query = 'DROP TABLE IF EXISTS civicrm_value_activity_custom_9'; AllTests::$utils->do_query($query); $group = new CRM_Core_DAO_CustomGroup(); $group->extends = "Activity"; $group->table_name = 'civicrm_value_activity_custom_9'; $group->is_multiple = 0; $group->is_active = 1; CRM_Core_BAO_CustomGroup::createTable($group); // Add column activity_custom_11 to the custom table $customField =& new CRM_Core_DAO_CustomField(); $customField->column_name = 'activity_custom_11'; $customField->custom_group_id = 9; $customField->is_required = 0; $customField->is_active = 1; $customField->data_type = 'String'; $customField->text_length = 255; CRM_Core_BAO_CustomField::createField($customField, 'add'); // Insert a test value into the new table $query = "INSERT INTO civicrm_value_activity_custom_9" . "( entity_id, activity_custom_11 )" . " VALUES ( 4, 'bite my test data' )"; AllTests::$utils->do_query($query); // Retrieve the test value $params = array('activity_id' => 4, 'activity_type_id' => 5); $result = civicrm_activity_get($params, true); $this->assertEquals(0, $result['is_error'], "Error message: " . $result['error_message']); $this->assertEquals(4, $result['result']['id'], 'In line ' . __LINE__); $this->assertEquals(17, $result['result']['source_contact_id'], 'In line ' . __LINE__); $this->assertEquals(5, $result['result']['activity_type_id'], 'In line ' . __LINE__); $this->assertEquals('test activity type id', $result['result']['subject'], 'In line ' . __LINE__); $this->assertEquals('bite my test data', $result['result']['custom_11_1'], 'In line ' . __LINE__); }
function customFields(&$xml, &$idMap) { require_once 'CRM/Core/BAO/CustomField.php'; foreach ($xml->CustomFields as $customFieldsXML) { foreach ($customFieldsXML->CustomField as $customFieldXML) { $customField = new CRM_Core_DAO_CustomField(); $this->copyData($customField, $customFieldXML, false); $customField->custom_group_id = $idMap['custom_group'][(string) $customFieldXML->custom_group_title]; if (isset($customFieldXML->option_group_label)) { $customField->option_group_id = $idMap['option_group'][(string) $customFieldXML->option_group_label]; } $customField->save(); // fix column name $customField->table_name = strtolower(CRM_Utils_String::munge($customField->label, '_', 32)) . "_{$customField->id}"; $customField->save(); CRM_Core_BAO_CustomField::createField($customField, 'add'); } } }