/** * Use this API to create a new group. The 'extends' value accepts an array or a comma separated string. * e.g array( 'Individual','Contact') or 'Individual,Contact' * See the CRM Data Model for custom_group property definitions * $params['class_name'] is a required field, class being extended. * * @param $params array Associative array of property name/value pairs to insert in group. * {@getfields CustomGroup_create} * * @return Newly create custom_group object * @todo $params['extends'] is array format - is that std compatible * @access public */ function civicrm_api3_custom_group_create($params) { if (isset($params['extends']) && is_string($params['extends'])) { $extends = explode(",", $params['extends']); unset($params['extends']); $params['extends'] = $extends; } if (!isset($params['extends'][0]) || !trim($params['extends'][0])) { return civicrm_api3_create_error("First item in params['extends'] must be a class name (e.g. 'Contact')."); } if (isset($params['extends_entity_column_value']) && !is_array($params['extends_entity_column_value'])) { // BAO fails if this is a string, but API getFields says this must be a string, so we'll do a double backflip $params['extends_entity_column_value'] = CRM_Utils_Array::explodePadded($params['extends_entity_column_value']); } $customGroup = CRM_Core_BAO_CustomGroup::create($params); _civicrm_api3_object_to_array($customGroup, $values[$customGroup->id]); return civicrm_api3_create_success($values, $params, 'custom_group', $customGroup); }
/** * Use this API to create a new group. The 'extends' value accepts an array or a comma separated string. * e.g array( 'Individual','Contact') or 'Individual,Contact' * See the CRM Data Model for custom_group property definitions * $params['class_name'] is a required field, class being extended. * * @param $params array Associative array of property name/value pairs to insert in group. * {@getfields CustomGroup_create} * * @return Newly create custom_group object * @todo $params['extends'] is array format - is that std compatible * @todo review custom field create if 'html' approx line 110 * @access public */ function civicrm_api3_custom_group_create($params) { if (is_string($params['extends'])) { $extends = explode(",", $params['extends']); unset($params['extends']); $params['extends'] = $extends; } if (!isset($params['extends'][0]) || !trim($params['extends'][0])) { return civicrm_api3_create_error("First item in params['extends'] must be a class name (e.g. 'Contact')."); } $customGroup = CRM_Core_BAO_CustomGroup::create($params); _civicrm_api3_object_to_array($customGroup, $values[$customGroup->id]); if (CRM_Utils_Array::value('html_type', $params)) { $fparams = array('custom_group_id' => $customGroup->id, 'version' => $params['version'], 'label' => 'api created field'); require_once 'api/v3/CustomField.php'; $fieldValues = civicrm_api3_custom_field_create($fparams); $values[$fieldValues['id']] = array_merge($values[$customGroup->id], $fieldValues['values'][$fieldValues['id']]); } return civicrm_api3_create_success($values, $params, 'custom_group', $customGroup); }
function testCreate() { $params = array('title' => 'Test_Group_1', 'name' => 'test_group_1', 'extends' => array('Individual'), 'weight' => 4, 'collapse_display' => 1, 'style' => 'Inline', 'help_pre' => 'This is Pre Help For Test Group 1', 'help_post' => 'This is Post Help For Test Group 1', 'is_active' => 1); require_once 'CRM/Core/BAO/CustomGroup.php'; $customGroup = CRM_Core_BAO_CustomGroup::create($params); $dbCustomGroupTitle = $this->assertDBNotNull('CRM_Core_DAO_CustomGroup', $customGroup->id, 'title', 'id', 'Database check for custom group record.'); $this->assertEquals($params['title'], $dbCustomGroupTitle); Custom::deleteGroup($customGroup); }
/** * Test create() given a table_name */ public function testCreateTableName() { $params = array('title' => 'Test_Group_2', 'name' => 'test_group_2', 'table_name' => 'test_otherTableName', 'extends' => array(0 => 'Individual', 1 => array()), 'weight' => 4, 'collapse_display' => 1, 'style' => 'Inline', 'help_pre' => 'This is Pre Help For Test Group 1', 'help_post' => 'This is Post Help For Test Group 1', 'is_active' => 1, 'version' => 3); $customGroup = CRM_Core_BAO_CustomGroup::create($params); $dbCustomGroupTitle = $this->assertDBNotNull('CRM_Core_DAO_CustomGroup', $customGroup->id, 'title', 'id', 'Database check for custom group record.'); $this->assertEquals($params['title'], $dbCustomGroupTitle); $dbCustomGroupTableName = $this->assertDBNotNull('CRM_Core_DAO_CustomGroup', $customGroup->id, 'table_name', 'id', 'Database check for custom group record.'); $this->assertEquals($params['table_name'], $dbCustomGroupTableName); Custom::deleteGroup($customGroup); }
/** * Use this API to create a new group. See the CRM Data Model for custom_group property definitions * * @param $class_name String Which class is being extended. * * @param $params array Associative array of property name/value pairs to insert in group. * * @return Newly create custom_group object * * @access public */ function crm_create_custom_group($class_name, $params) { _crm_initialize(); if (!trim($class_name)) { return _crm_error("class_name is not set"); } if (!is_array($params)) { return _crm_error("params is not an array "); } $params['extends'] = $class_name; $error = _crm_check_required_fields($params, 'CRM_Core_DAO_CustomGroup'); if (is_a($error, 'CRM_Core_Error')) { return $error; } require_once 'CRM/Core/BAO/CustomGroup.php'; $customGroup = CRM_Core_BAO_CustomGroup::create($params); return $customGroup; }
/** * Process the form. * * * @return void */ public function postProcess() { // get the submitted form values. $params = $this->controller->exportValues('Group'); $params['overrideFKConstraint'] = 0; if ($this->_action & CRM_Core_Action::UPDATE) { $params['id'] = $this->_id; if ($this->_defaults['extends'][0] != $params['extends'][0]) { $params['overrideFKConstraint'] = 1; } if (!empty($this->_subtypes)) { $subtypesToBeRemoved = array_diff($this->_subtypes, array_intersect($this->_subtypes, $params['extends'][1])); CRM_Contact_BAO_ContactType::deleteCustomRowsOfSubtype($this->_id, $subtypesToBeRemoved); } } elseif ($this->_action & CRM_Core_Action::ADD) { //new custom set , so lets set the created_id $session = CRM_Core_Session::singleton(); $params['created_id'] = $session->get('userID'); $params['created_date'] = date('YmdHis'); } $group = CRM_Core_BAO_CustomGroup::create($params); // reset the cache CRM_Core_BAO_Cache::deleteGroup('contact fields'); if ($this->_action & CRM_Core_Action::UPDATE) { CRM_Core_Session::setStatus(ts('Your custom field set \'%1 \' has been saved.', array(1 => $group->title)), ts('Saved'), 'success'); } else { // Jump directly to adding a field if popups are disabled $action = CRM_Core_Resources::singleton()->ajaxPopupsEnabled ? '' : '/add'; $url = CRM_Utils_System::url("civicrm/admin/custom/group/field{$action}", 'reset=1&new=1&gid=' . $group->id . '&action=' . ($action ? 'add' : 'browse')); CRM_Core_Session::setStatus(ts("Your custom field set '%1' has been added. You can add custom fields now.", array(1 => $group->title)), ts('Saved'), 'success'); $session = CRM_Core_Session::singleton(); $session->replaceUserContext($url); } // prompt Drupal Views users to update $db_prefix in settings.php, if necessary global $db_prefix; $config = CRM_Core_Config::singleton(); if (is_array($db_prefix) && $config->userSystem->is_drupal && module_exists('views')) { // get table_name for each custom group $tables = array(); $sql = "SELECT table_name FROM civicrm_custom_group WHERE is_active = 1"; $result = CRM_Core_DAO::executeQuery($sql); while ($result->fetch()) { $tables[$result->table_name] = $result->table_name; } // find out which tables are missing from the $db_prefix array $missingTableNames = array_diff_key($tables, $db_prefix); if (!empty($missingTableNames)) { CRM_Core_Session::setStatus(ts("To ensure that all of your custom data groups are available to Views, you may need to add the following key(s) to the db_prefix array in your settings.php file: '%1'.", array(1 => implode(', ', $missingTableNames))), ts('Note'), 'info'); } } }
/** * Use this API to create a new group. See the CRM Data Model for custom_group property definitions * $params['class_name'] is a required field, class being extended. * * @param $params array Associative array of property name/value pairs to insert in group. * * * @return Newly create custom_group object * * @access public */ function civicrm_custom_group_create($params) { _civicrm_initialize(); if (!is_array($params)) { return civicrm_create_error("params is not an array"); } // Require either param['class_name'] (string) - for backwards compatibility - OR parm['extends'] (array) // If passing extends array - set class_name (e.g. 'Contact', 'Participant'...) as extends[0]. You may optionally // pass an extends_entity_column_value as extends[1] (e.g. an Activity Type ID). if (isset($params['class_name']) && trim($params['class_name'])) { $params['extends'][0] = trim($params['class_name']); } else { if (!isset($params['extends']) || !is_array($params['extends'])) { return civicrm_create_error("Params must include either 'class_name' (string) or 'extends' (array)."); } else { if (!isset($params['extends'][0]) || !trim($params['extends'][0])) { return civicrm_create_error("First item in params['extends'] must be a class name (e.g. 'Contact')."); } } } $error = _civicrm_check_required_fields($params, 'CRM_Core_DAO_CustomGroup'); require_once 'CRM/Utils/String.php'; if (!isset($params['title']) || !trim($params['title'])) { return civicrm_create_error("Title parameter is required."); } if (!isset($params['style']) || !trim($params['style'])) { $params['style'] = 'Inline'; } if (is_a($error, 'CRM_Core_Error')) { return civicrm_create_error($error->_errors[0]['message']); } require_once 'CRM/Core/BAO/CustomGroup.php'; $customGroup = CRM_Core_BAO_CustomGroup::create($params); _civicrm_object_to_array($customGroup, $values); if (is_a($customGroup, 'CRM_Core_Error')) { return civicrm_create_error($customGroup->_errors[0]['message']); } else { $values['is_error'] = 0; } if (CRM_Utils_Array::value('html_type', $params)) { $params['custom_group_id'] = $customGroup->id; $fieldValues = civicrm_custom_field_create($params); $values = array_merge($values, $fieldValues['result']); } return $values; }
/** * Process the form * * @param null * * @return void * @access public */ public function postProcess() { // get the submitted form values. $params = $this->controller->exportValues('Group'); $params['overrideFKConstraint'] = 0; if ($this->_action & CRM_Core_Action::UPDATE) { $params['id'] = $this->_id; if ($this->_defaults['extends'][0] != $params['extends'][0]) { $params['overrideFKConstraint'] = 1; } } elseif ($this->_action & CRM_Core_Action::ADD) { //new custom set , so lets set the created_id $session = CRM_Core_Session::singleton(); $params['created_id'] = $session->get('userID'); $params['created_date'] = date('YmdHis'); } $group = CRM_Core_BAO_CustomGroup::create($params); // reset the cache require_once 'CRM/Core/BAO/Cache.php'; CRM_Core_BAO_Cache::deleteGroup('contact fields'); if ($this->_action & CRM_Core_Action::UPDATE) { CRM_Core_Session::setStatus(ts('Your custom field set \'%1 \' has been saved.', array(1 => $group->title))); } else { $url = CRM_Utils_System::url('civicrm/admin/custom/group/field/add', 'reset=1&action=add&gid=' . $group->id); CRM_Core_Session::setStatus(ts('Your custom field set \'%1\' has been added. You can add it custom fields now.', array(1 => $group->title))); $session = CRM_Core_Session::singleton(); $session->replaceUserContext($url); } // prompt Drupal Views users to update $db_prefix in settings.php, if necessary global $db_prefix; if (is_array($db_prefix) && CIVICRM_UF == 'Drupal' && module_exists('views')) { // get table_name for each custom group $tables = array(); $sql = "SELECT table_name FROM civicrm_custom_group WHERE is_active = 1"; $result = CRM_Core_DAO::executeQuery($sql); while ($result->fetch()) { $tables[$result->table_name] = $result->table_name; } // find out which tables are missing from the $db_prefix array $missingTableNames = array_diff_key($tables, $db_prefix); if (!empty($missingTableNames)) { CRM_Core_Session::setStatus('<br />' . ts('Note:To ensure that all of your custom data groups are available to Views, you may need to add the following key(s) to the $db_prefix array in your settings.php file: \'%1\'.', array(1 => implode(', ', $missingTableNames)))); } } }
/** * Process the form * * @param null * * @return void * @access public */ public function postProcess() { // get the submitted form values. $params = $this->controller->exportValues('Group'); $params['overrideFKConstraint'] = 0; if ($this->_action & CRM_Core_Action::UPDATE) { $params['id'] = $this->_id; if ($this->_defaults['extends'][0] != $params['extends'][0]) { $params['overrideFKConstraint'] = 1; } } elseif ($this->_action & CRM_Core_Action::ADD) { //new custom group, so lets set the created_id $session =& CRM_Core_Session::singleton(); $params['created_id'] = $session->get('userID'); $params['created_date'] = date('YmdHis'); } $group = CRM_Core_BAO_CustomGroup::create($params); // reset the cache require_once 'CRM/Core/BAO/Cache.php'; CRM_Core_BAO_Cache::deleteGroup('contact fields'); if ($this->_action & CRM_Core_Action::UPDATE) { CRM_Core_Session::setStatus(ts('Your custom data group \'%1 \' has been saved.', array(1 => $group->title))); } else { $url = CRM_Utils_System::url('civicrm/admin/custom/group/field', 'reset=1&action=add&gid=' . $group->id); CRM_Core_Session::setStatus(ts('Your custom data group \'%1\' has been added. You can add custom fields to this group now.', array(1 => $group->title))); $session =& CRM_Core_Session::singleton(); $session->replaceUserContext($url); } }