/** * When changing the value of an option this is called to update all corresponding custom data * * @param int $optionId * @param string $newValue */ public static function updateValue($optionId, $newValue) { $optionValue = new CRM_Core_DAO_OptionValue(); $optionValue->id = $optionId; $optionValue->find(TRUE); $oldValue = $optionValue->value; if ($oldValue == $newValue) { return; } $customField = new CRM_Core_DAO_CustomField(); $customField->option_group_id = $optionValue->option_group_id; $customField->find(); while ($customField->fetch()) { $customGroup = new CRM_Core_DAO_CustomGroup(); $customGroup->id = $customField->custom_group_id; $customGroup->find(TRUE); if (CRM_Core_BAO_CustomField::isSerialized($customField)) { $params = array(1 => array(CRM_Utils_Array::implodePadded($oldValue), 'String'), 2 => array(CRM_Utils_Array::implodePadded($newValue), 'String'), 3 => array('%' . CRM_Utils_Array::implodePadded($oldValue) . '%', 'String')); } else { $params = array(1 => array($oldValue, 'String'), 2 => array($newValue, 'String'), 3 => array($oldValue, 'String')); } $sql = "UPDATE `{$customGroup->table_name}` SET `{$customField->column_name}` = REPLACE(`{$customField->column_name}`, %1, %2) WHERE `{$customField->column_name}` LIKE %3"; $customGroup->free(); CRM_Core_DAO::executeQuery($sql, $params); } $customField->free(); }
/** * Browse all custom data groups. * * @param string $action the action to be invoked * * @return void * @access public */ function browse($action = NULL) { // get all custom groups sorted by weight $customGroup = array(); $dao = new CRM_Core_DAO_CustomGroup(); $dao->orderBy('weight, title'); $dao->find(); while ($dao->fetch()) { $customGroup[$dao->id] = array(); CRM_Core_DAO::storeValues($dao, $customGroup[$dao->id]); // form all action links $action = array_sum(array_keys($this->actionLinks())); // update enable/disable links depending on custom_group properties. if ($dao->is_active) { $action -= CRM_Core_Action::ENABLE; } else { $action -= CRM_Core_Action::DISABLE; } $customGroup[$dao->id]['order'] = $customGroup[$dao->id]['weight']; $customGroup[$dao->id]['action'] = CRM_Core_Action::formLink(self::actionLinks(), $action, array('id' => $dao->id)); } $customGroupExtends = CRM_Core_SelectValues::customGroupExtends(); foreach ($customGroup as $key => $array) { CRM_Core_DAO_CustomGroup::addDisplayEnums($customGroup[$key]); $customGroup[$key]['extends_display'] = $customGroupExtends[$customGroup[$key]['extends']]; } //fix for Displaying subTypes $subTypes = array(); $subTypes['Activity'] = CRM_Core_PseudoConstant::activityType(FALSE, TRUE, FALSE, 'label', TRUE); $subTypes['Contribution'] = CRM_Contribute_PseudoConstant::contributionType(); $subTypes['Membership'] = CRM_Member_BAO_MembershipType::getMembershipTypes(FALSE); $subTypes['Event'] = CRM_Core_OptionGroup::values('event_type'); $subTypes['Grant'] = CRM_Core_OptionGroup::values('grant_type'); $subTypes['Campaign'] = CRM_Campaign_PseudoConstant::campaignType(); $subTypes['Participant'] = array(); $subTypes['ParticipantRole'] = CRM_Core_OptionGroup::values('participant_role'); $subTypes['ParticipantEventName'] = CRM_Event_PseudoConstant::event(); $subTypes['ParticipantEventType'] = CRM_Core_OptionGroup::values('event_type'); $subTypes['Individual'] = CRM_Contact_BAO_ContactType::subTypePairs('Individual', FALSE, NULL); $subTypes['Household'] = CRM_Contact_BAO_ContactType::subTypePairs('Household', FALSE, NULL); $subTypes['Organization'] = CRM_Contact_BAO_ContactType::subTypePairs('Organization', FALSE, NULL); $relTypeInd = CRM_Contact_BAO_Relationship::getContactRelationshipType(NULL, 'null', NULL, 'Individual'); $relTypeOrg = CRM_Contact_BAO_Relationship::getContactRelationshipType(NULL, 'null', NULL, 'Organization'); $relTypeHou = CRM_Contact_BAO_Relationship::getContactRelationshipType(NULL, 'null', NULL, 'Household'); $allRelationshipType = array(); $allRelationshipType = array_merge($relTypeInd, $relTypeOrg); $allRelationshipType = array_merge($allRelationshipType, $relTypeHou); //adding subtype specific relationships CRM-5256 $relSubType = CRM_Contact_BAO_ContactType::subTypeInfo(); foreach ($relSubType as $subType => $val) { $subTypeRelationshipTypes = CRM_Contact_BAO_Relationship::getContactRelationshipType(NULL, NULL, NULL, $val['parent'], FALSE, 'label', TRUE, $subType); $allRelationshipType = array_merge($allRelationshipType, $subTypeRelationshipTypes); } $subTypes['Relationship'] = $allRelationshipType; $cSubTypes = CRM_Core_Component::contactSubTypes(); $contactSubTypes = array(); foreach ($cSubTypes as $key => $value) { $contactSubTypes[$key] = $key; } $subTypes['Contact'] = $contactSubTypes; CRM_Core_BAO_CustomGroup::getExtendedObjectTypes($subTypes); foreach ($customGroup as $key => $values) { $subValue = CRM_Utils_Array::value('extends_entity_column_value', $customGroup[$key]); $subName = CRM_Utils_Array::value('extends_entity_column_id', $customGroup[$key]); $type = CRM_Utils_Array::value('extends', $customGroup[$key]); if ($subValue) { $subValue = explode(CRM_Core_DAO::VALUE_SEPARATOR, substr($subValue, 1, -1)); $colValue = NULL; foreach ($subValue as $sub) { if ($sub) { if ($type == 'Participant') { if ($subName == 1) { $colValue = $colValue ? $colValue . ', ' . $subTypes['ParticipantRole'][$sub] : $subTypes['ParticipantRole'][$sub]; } elseif ($subName == 2) { $colValue = $colValue ? $colValue . ', ' . $subTypes['ParticipantEventName'][$sub] : $subTypes['ParticipantEventName'][$sub]; } elseif ($subName == 3) { $colValue = $colValue ? $colValue . ', ' . $subTypes['ParticipantEventType'][$sub] : $subTypes['ParticipantEventType'][$sub]; } } elseif ($type == 'Relationship') { $colValue = $colValue ? $colValue . ', ' . $subTypes[$type][$sub . '_a_b'] : $subTypes[$type][$sub . '_a_b']; if (isset($subTypes[$type][$sub . '_b_a'])) { $colValue = $colValue ? $colValue . ', ' . $subTypes[$type][$sub . '_b_a'] : $subTypes[$type][$sub . '_b_a']; } } else { $colValue = $colValue ? $colValue . (isset($subTypes[$type][$sub]) ? ', ' . $subTypes[$type][$sub] : '') : (isset($subTypes[$type][$sub]) ? $subTypes[$type][$sub] : ''); } } } $customGroup[$key]["extends_entity_column_value"] = $colValue; } else { if (is_array(CRM_Utils_Array::value($type, $subTypes))) { $customGroup[$key]["extends_entity_column_value"] = ts("Any"); } } } $returnURL = CRM_Utils_System::url('civicrm/admin/custom/group', "reset=1&action=browse"); CRM_Utils_Weight::addOrder($customGroup, 'CRM_Core_DAO_CustomGroup', 'id', $returnURL); $this->assign('rows', $customGroup); }
/** * Use this API to delete an existing group. * * @param array $params * * @return array */ function civicrm_api3_custom_group_delete($params) { $values = new CRM_Core_DAO_CustomGroup(); $values->id = $params['id']; $values->find(TRUE); $result = CRM_Core_BAO_CustomGroup::deleteGroup($values, TRUE); return $result ? civicrm_api3_create_success() : civicrm_api3_create_error('Error while deleting custom group'); }
/** * Process the form when submitted * * @return void * @access public */ public function postProcess() { $group = new CRM_Core_DAO_CustomGroup(); $group->id = $this->_id; $group->find(TRUE); $wt = CRM_Utils_Weight::delWeight('CRM_Core_DAO_CustomGroup', $this->_id); CRM_Core_BAO_CustomGroup::deleteGroup($group); CRM_Core_Session::setStatus(ts("The Group '%1' has been deleted.", array(1 => $group->title)), '', 'success'); }
function upgrade_3_3_alpha1($rev) { $config = CRM_Core_Config::singleton(); if ($config->userSystem->is_drupal) { // CRM-6426 - make civicrm profiles permissioned on drupal my account $config->userSystem->updateCategories(); } // CRM-6846 // insert name column for custom field table. // make sure name for custom field, group and // profile should be unique and properly munged. $colQuery = 'ALTER TABLE `civicrm_custom_field` ADD `name` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL AFTER `custom_group_id` '; CRM_Core_DAO::executeQuery($colQuery, CRM_Core_DAO::$_nullArray, TRUE, NULL, FALSE, FALSE); $customFldCntQuery = 'select count(*) from civicrm_custom_field where name like %1 and id != %2'; $customField = new CRM_Core_DAO_CustomField(); $customField->selectAdd(); $customField->selectAdd('id, label'); $customField->find(); while ($customField->fetch()) { $name = CRM_Utils_String::munge($customField->label, '_', 64); $fldCnt = CRM_Core_DAO::singleValueQuery($customFldCntQuery, array(1 => array($name, 'String'), 2 => array($customField->id, 'Integer')), TRUE, FALSE); if ($fldCnt) { $name = CRM_Utils_String::munge("{$name}_" . rand(), '_', 64); } $customFieldQuery = "\nUpdate `civicrm_custom_field`\nSET `name` = %1\nWHERE id = %2\n"; $customFieldParams = array(1 => array($name, 'String'), 2 => array($customField->id, 'Integer')); CRM_Core_DAO::executeQuery($customFieldQuery, $customFieldParams, TRUE, NULL, FALSE, FALSE); } $customField->free(); $customGrpCntQuery = 'select count(*) from civicrm_custom_group where name like %1 and id != %2'; $customGroup = new CRM_Core_DAO_CustomGroup(); $customGroup->selectAdd(); $customGroup->selectAdd('id, title'); $customGroup->find(); while ($customGroup->fetch()) { $name = CRM_Utils_String::munge($customGroup->title, '_', 64); $grpCnt = CRM_Core_DAO::singleValueQuery($customGrpCntQuery, array(1 => array($name, 'String'), 2 => array($customGroup->id, 'Integer'))); if ($grpCnt) { $name = CRM_Utils_String::munge("{$name}_" . rand(), '_', 64); } CRM_Core_DAO::setFieldValue('CRM_Core_DAO_CustomGroup', $customGroup->id, 'name', $name); } $customGroup->free(); $ufGrpCntQuery = 'select count(*) from civicrm_uf_group where name like %1 and id != %2'; $ufGroup = new CRM_Core_DAO_UFGroup(); $ufGroup->selectAdd(); $ufGroup->selectAdd('id, title'); $ufGroup->find(); while ($ufGroup->fetch()) { $name = CRM_Utils_String::munge($ufGroup->title, '_', 64); $ufGrpCnt = CRM_Core_DAO::singleValueQuery($ufGrpCntQuery, array(1 => array($name, 'String'), 2 => array($ufGroup->id, 'Integer'))); if ($ufGrpCnt) { $name = CRM_Utils_String::munge("{$name}_" . rand(), '_', 64); } CRM_Core_DAO::setFieldValue('CRM_Core_DAO_UFGroup', $ufGroup->id, 'name', $name); } $ufGroup->free(); $upgrade = new CRM_Upgrade_Form(); $upgrade->processSQL($rev); // now modify the config so that the directories are stored in option group/value // CRM-6914 // require_once 'CRM/Core/BAO/ConfigSetting.php'; // $params = array( ); // CRM_Core_BAO_ConfigSetting::add( $parambs ); }
/** * @return array */ public static function getMultipleFieldGroup() { $multipleGroup = array(); $dao = new CRM_Core_DAO_CustomGroup(); $dao->is_multiple = 1; $dao->find(); while ($dao->fetch()) { $multipleGroup[$dao->id] = $dao->title; } return $multipleGroup; }
/** * Move a custom data field from one group (table) to another * * @param int $fieldID * FK to civicrm_custom_field. * @param int $newGroupID * FK to civicrm_custom_group. * * @return void */ public static function moveField($fieldID, $newGroupID) { $validation = self::_moveFieldValidate($fieldID, $newGroupID); if (TRUE !== $validation) { CRM_Core_Error::fatal(implode(' ', $validation)); } $field = new CRM_Core_DAO_CustomField(); $field->id = $fieldID; $field->find(TRUE); $newGroup = new CRM_Core_DAO_CustomGroup(); $newGroup->id = $newGroupID; $newGroup->find(TRUE); $oldGroup = new CRM_Core_DAO_CustomGroup(); $oldGroup->id = $field->custom_group_id; $oldGroup->find(TRUE); $add = clone $field; $add->custom_group_id = $newGroup->id; self::createField($add, 'add'); $sql = "INSERT INTO {$newGroup->table_name} (entity_id, {$field->column_name})\n SELECT entity_id, {$field->column_name} FROM {$oldGroup->table_name}\n ON DUPLICATE KEY UPDATE {$field->column_name} = {$oldGroup->table_name}.{$field->column_name}\n "; CRM_Core_DAO::executeQuery($sql); $del = clone $field; $del->custom_group_id = $oldGroup->id; self::createField($del, 'delete'); $add->save(); CRM_Utils_System::flushCache(); }
public function postProcess() { // get the acl clauses built before we assemble the query $this->buildACLClause($this->_aliases['civicrm_contact']); $this->beginPostProcess(); // CRM-18312 - display soft_credits and soft_credits_for column // when 'Contribution or Soft Credit?' column is not selected if (empty($this->_params['fields']['contribution_or_soft'])) { $this->_params['fields']['contribution_or_soft'] = 1; $this->noDisplayContributionOrSoftColumn = TRUE; } if (CRM_Utils_Array::value('contribution_or_soft_value', $this->_params) == 'contributions_only' && !empty($this->_params['fields']['soft_credit_type_id'])) { unset($this->_params['fields']['soft_credit_type_id']); if (!empty($this->_params['soft_credit_type_id_value'])) { $this->_params['soft_credit_type_id_value'] = array(); } } // 1. use main contribution query to build temp table 1 $sql = $this->buildQuery(); $tempQuery = 'CREATE TEMPORARY TABLE civireport_contribution_detail_temp1 AS ' . $sql; CRM_Core_DAO::executeQuery($tempQuery); $this->setPager(); // 2. customize main contribution query for soft credit, and build temp table 2 with soft credit contributions only $this->from(TRUE); // also include custom group from if included // since this might be included in select $this->customDataFrom(); $select = str_ireplace('contribution_civireport.total_amount', 'contribution_soft_civireport.amount', $this->_select); $select = str_ireplace("'Contribution' as", "'Soft Credit' as", $select); // we inner join with temp1 to restrict soft contributions to those in temp1 table $sql = "{$select} {$this->_from} {$this->_where} {$this->_groupBy}"; $tempQuery = 'CREATE TEMPORARY TABLE civireport_contribution_detail_temp2 AS ' . $sql; CRM_Core_DAO::executeQuery($tempQuery); if (CRM_Utils_Array::value('contribution_or_soft_value', $this->_params) == 'soft_credits_only') { // revise pager : prev, next based on soft-credits only $this->setPager(); } // copy _from for later use of stats calculation for soft credits, and reset $this->_from to main query $this->_softFrom = $this->_from; // simple reset of ->_from $this->from(); // also include custom group from if included // since this might be included in select $this->customDataFrom(); // 3. Decide where to populate temp3 table from if (CRM_Utils_Array::value('contribution_or_soft_value', $this->_params) == 'contributions_only') { $tempQuery = "(SELECT * FROM civireport_contribution_detail_temp1)"; } elseif (CRM_Utils_Array::value('contribution_or_soft_value', $this->_params) == 'soft_credits_only') { $tempQuery = "(SELECT * FROM civireport_contribution_detail_temp2)"; } else { $tempQuery = "\n(SELECT * FROM civireport_contribution_detail_temp1)\nUNION ALL\n(SELECT * FROM civireport_contribution_detail_temp2)"; } // 4. build temp table 3 $sql = "CREATE TEMPORARY TABLE civireport_contribution_detail_temp3 AS {$tempQuery}"; CRM_Core_DAO::executeQuery($sql); // 5. Re-construct order-by to make sense for final query on temp3 table $orderBy = ''; if (!empty($this->_orderByArray)) { $aliases = array_flip($this->_aliases); $orderClause = array(); foreach ($this->_orderByArray as $clause) { list($alias, $rest) = explode('.', $clause); // CRM-17280 -- In case, we are ordering by custom fields // modify $rest to match the alias used for them in temp3 table $grp = new CRM_Core_DAO_CustomGroup(); $grp->table_name = $aliases[$alias]; if ($grp->find()) { list($fld, $order) = explode(' ', $rest); foreach ($this->_columns[$aliases[$alias]]['fields'] as $fldName => $value) { if ($value['name'] == $fld) { $fld = $fldName; } } $rest = "{$fld} {$order}"; } $orderClause[] = $aliases[$alias] . "_" . $rest; } $orderBy = !empty($orderClause) ? "ORDER BY " . implode(', ', $orderClause) : ''; } // 6. show result set from temp table 3 $rows = array(); $sql = "SELECT * FROM civireport_contribution_detail_temp3 {$orderBy}"; $this->buildRows($sql, $rows); // format result set. $this->formatDisplay($rows, FALSE); // assign variables to templates $this->doTemplateAssignment($rows); // do print / pdf / instance stuff if needed $this->endPostProcess($rows); }
/** * Delete Contact SubTypes. * * @param int $contactTypeId * ID of the Contact Subtype to be deleted. * * @return bool */ public static function del($contactTypeId) { if (!$contactTypeId) { return FALSE; } $params = array('id' => $contactTypeId); self::retrieve($params, $typeInfo); $name = $typeInfo['name']; // check if any custom group $custom = new CRM_Core_DAO_CustomGroup(); $custom->whereAdd("extends_entity_column_value LIKE '%" . CRM_Core_DAO::VALUE_SEPARATOR . $name . CRM_Core_DAO::VALUE_SEPARATOR . "%'"); if ($custom->find()) { return FALSE; } // remove subtype for existing contacts $sql = "\nUPDATE civicrm_contact SET contact_sub_type = NULL\nWHERE contact_sub_type = '{$name}'"; CRM_Core_DAO::executeQuery($sql); // remove subtype from contact type table $contactType = new CRM_Contact_DAO_ContactType(); $contactType->id = $contactTypeId; $contactType->delete(); // remove navigation entry if any if ($name) { $sql = "\nDELETE\nFROM civicrm_navigation\nWHERE name = %1"; $params = array(1 => array("New {$name}", 'String')); $dao = CRM_Core_DAO::executeQuery($sql, $params); CRM_Core_BAO_Navigation::resetNavigation(); } return TRUE; }
/** * Determine if given entity (sub)type has any custom groups * * @param string $extends e.g. "Individual", "Activity" * @param int $columnId e.g. custom-group matching mechanism (usu NULL for matching on sub type-id); see extends_entity_column_id * @param string $columnValue e.g. "Student" or "3" or "3\05"; see extends_entity_column_value */ public static function hasCustomGroup($extends, $columnId, $columnValue) { $dao = new CRM_Core_DAO_CustomGroup(); $dao->extends = $extends; $dao->extends_entity_column_id = $columnId; $escapedValue = CRM_Core_DAO::VALUE_SEPARATOR . CRM_Core_DAO::escapeString($columnValue) . CRM_Core_DAO::VALUE_SEPARATOR; $dao->whereAdd("extends_entity_column_value LIKE \"%{$escapedValue}%\""); //$dao->extends_entity_column_value = $columnValue; return $dao->find() ? TRUE : FALSE; }
/** * Use this API to delete an existing group. * * @param array id of the group to be deleted * * @return Null if success * @access public **/ function civicrm_custom_group_delete($params) { _civicrm_initialize(); if (!is_array($params)) { return civicrm_create_error('Params is not an array'); } if (!CRM_Utils_Array::value('id', $params)) { return civicrm_create_error('Invalid or no value for Custom group ID'); } // convert params array into Object require_once 'CRM/Core/DAO/CustomGroup.php'; $values = new CRM_Core_DAO_CustomGroup(); $values->id = $params['id']; $values->find(true); require_once 'CRM/Core/BAO/CustomGroup.php'; $result = CRM_Core_BAO_CustomGroup::deleteGroup($values); return $result ? civicrm_create_success() : civicrm_error('Error while deleting custom group'); }