/** * Build the form object. * * * @return void */ public function buildQuickForm() { $this->applyFilter('__ALL__', 'trim'); $attributes = CRM_Core_DAO::getAttribute('CRM_Core_DAO_CustomGroup'); //title $this->add('text', 'title', ts('Set Name'), $attributes['title'], TRUE); //Fix for code alignment, CRM-3058 $contactTypes = array('Contact', 'Individual', 'Household', 'Organization'); $this->assign('contactTypes', json_encode($contactTypes)); $sel1 = array("" => ts("- select -")) + CRM_Core_SelectValues::customGroupExtends(); $sel2 = array(); $activityType = CRM_Core_PseudoConstant::activityType(FALSE, TRUE, FALSE, 'label', TRUE); $eventType = CRM_Core_OptionGroup::values('event_type'); $grantType = CRM_Core_OptionGroup::values('grant_type'); $campaignTypes = CRM_Campaign_PseudoConstant::campaignType(); $membershipType = CRM_Member_BAO_MembershipType::getMembershipTypes(FALSE); $participantRole = CRM_Core_OptionGroup::values('participant_role'); $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'); ksort($sel1); asort($activityType); asort($eventType); asort($grantType); asort($membershipType); asort($participantRole); $allRelationshipType = array(); $allRelationshipType = array_merge($relTypeInd, $relTypeOrg); $allRelationshipType = array_merge($allRelationshipType, $relTypeHou); //adding subtype specific relationships CRM-5256 $subTypes = CRM_Contact_BAO_ContactType::subTypeInfo(); foreach ($subTypes as $subType => $val) { $subTypeRelationshipTypes = CRM_Contact_BAO_Relationship::getContactRelationshipType(NULL, NULL, NULL, $val['parent'], FALSE, 'label', TRUE, $subType); $allRelationshipType = array_merge($allRelationshipType, $subTypeRelationshipTypes); } $sel2['Event'] = $eventType; $sel2['Grant'] = $grantType; $sel2['Activity'] = $activityType; $sel2['Campaign'] = $campaignTypes; $sel2['Membership'] = $membershipType; $sel2['ParticipantRole'] = $participantRole; $sel2['ParticipantEventName'] = CRM_Event_PseudoConstant::event(NULL, FALSE, "( is_template IS NULL OR is_template != 1 )"); $sel2['ParticipantEventType'] = $eventType; $sel2['Contribution'] = CRM_Contribute_PseudoConstant::financialType(); $sel2['Relationship'] = $allRelationshipType; $sel2['Individual'] = CRM_Contact_BAO_ContactType::subTypePairs('Individual', FALSE, NULL); $sel2['Household'] = CRM_Contact_BAO_ContactType::subTypePairs('Household', FALSE, NULL); $sel2['Organization'] = CRM_Contact_BAO_ContactType::subTypePairs('Organization', FALSE, NULL); CRM_Core_BAO_CustomGroup::getExtendedObjectTypes($sel2); foreach ($sel2 as $main => $sub) { if (!empty($sel2[$main])) { if ($main == 'Relationship') { $relName = self::getFormattedList($sel2[$main]); $sel2[$main] = array('' => ts("- Any -")) + $relName; } else { $sel2[$main] = array('' => ts("- Any -")) + $sel2[$main]; } } } $cSubTypes = CRM_Core_Component::contactSubTypes(); if (!empty($cSubTypes)) { $contactSubTypes = array(); foreach ($cSubTypes as $key => $value) { $contactSubTypes[$key] = $key; } $sel2['Contact'] = array("" => "- Any -") + $contactSubTypes; } else { if (!isset($this->_id)) { $formName = 'document.forms.' . $this->_name; $js = "<script type='text/javascript'>\n"; $js .= "{$formName}['extends_1'].style.display = 'none';\n"; $js .= "</script>"; $this->assign('initHideBlocks', $js); } } $sel =& $this->add('hierselect', 'extends', ts('Used For'), array('name' => 'extends[0]', 'style' => 'vertical-align: top;'), TRUE); $sel->setOptions(array($sel1, $sel2)); if (is_a($sel->_elements[1], 'HTML_QuickForm_select')) { // make second selector a multi-select - $sel->_elements[1]->setMultiple(TRUE); $sel->_elements[1]->setSize(5); } if ($this->_action == CRM_Core_Action::UPDATE) { $subName = CRM_Utils_Array::value('extends_entity_column_id', $this->_defaults); if ($this->_defaults['extends'] == 'Participant') { if ($subName == 1) { $this->_defaults['extends'] = 'ParticipantRole'; } elseif ($subName == 2) { $this->_defaults['extends'] = 'ParticipantEventName'; } elseif ($subName == 3) { $this->_defaults['extends'] = 'ParticipantEventType'; } } //allow to edit settings if custom set is empty CRM-5258 $this->_isGroupEmpty = CRM_Core_BAO_CustomGroup::isGroupEmpty($this->_id); if (!$this->_isGroupEmpty) { if (!empty($this->_subtypes)) { // we want to allow adding / updating subtypes for this case, // and therefore freeze the first selector only. $sel->_elements[0]->freeze(); } else { // freeze both the selectors $sel->freeze(); } } $this->assign('isCustomGroupEmpty', $this->_isGroupEmpty); $this->assign('gid', $this->_id); } $this->assign('defaultSubtypes', json_encode($this->_subtypes)); // help text $this->add('wysiwyg', 'help_pre', ts('Pre-form Help'), $attributes['help_pre']); $this->add('wysiwyg', 'help_post', ts('Post-form Help'), $attributes['help_post']); // weight $this->add('text', 'weight', ts('Order'), $attributes['weight'], TRUE); $this->addRule('weight', ts('is a numeric field'), 'numeric'); // display style $this->add('select', 'style', ts('Display Style'), CRM_Core_SelectValues::customGroupStyle()); // is this set collapsed or expanded ? $this->addElement('checkbox', 'collapse_display', ts('Collapse this set on initial display')); // is this set collapsed or expanded ? in advanced search $this->addElement('checkbox', 'collapse_adv_display', ts('Collapse this set in Advanced Search')); // is this set active ? $this->addElement('checkbox', 'is_active', ts('Is this Custom Data Set active?')); // does this set have multiple record? $multiple = $this->addElement('checkbox', 'is_multiple', ts('Does this Custom Field Set allow multiple records?'), NULL); // $min_multiple = $this->add('text', 'min_multiple', ts('Minimum number of multiple records'), $attributes['min_multiple'] ); // $this->addRule('min_multiple', ts('is a numeric field') , 'numeric'); $max_multiple = $this->add('text', 'max_multiple', ts('Maximum number of multiple records'), $attributes['max_multiple']); $this->addRule('max_multiple', ts('is a numeric field'), 'numeric'); //allow to edit settings if custom set is empty CRM-5258 $this->assign('isGroupEmpty', $this->_isGroupEmpty); if (!$this->_isGroupEmpty) { $multiple->freeze(); //$min_multiple->freeze(); $max_multiple->freeze(); } $this->assign('showStyle', FALSE); $this->assign('showMultiple', FALSE); $buttons = array(array('type' => 'next', 'name' => ts('Save'), 'spacing' => ' ', 'isDefault' => TRUE), array('type' => 'cancel', 'name' => ts('Cancel'))); if (!$this->_isGroupEmpty && !empty($this->_subtypes)) { $buttons[0]['class'] = 'crm-warnDataLoss'; } $this->addButtons($buttons); // TODO: Is this condition ever true? Can this code be removed? if ($this->_action & CRM_Core_Action::VIEW) { $this->freeze(); $this->addElement('button', 'done', ts('Done'), array('onclick' => "location.href='civicrm/admin/custom/group?reset=1&action=browse'")); } }
/** * Function to actually build the form * * @param null * * @return void * @access public */ public function buildQuickForm() { $this->applyFilter('__ALL__', 'trim'); $attributes = CRM_Core_DAO::getAttribute('CRM_Core_DAO_CustomGroup'); //title $this->add('text', 'title', ts('Group Name'), $attributes['title'], true); $this->addRule('title', ts('Name already exists in Database.'), 'objectExists', array('CRM_Core_DAO_CustomGroup', $this->_id, 'title')); //Fix for code alignment, CRM-3058 require_once "CRM/Contribute/PseudoConstant.php"; require_once "CRM/Member/BAO/MembershipType.php"; require_once 'CRM/Event/PseudoConstant.php'; require_once "CRM/Contact/BAO/Relationship.php"; require_once 'CRM/Core/OptionGroup.php'; require_once 'CRM/Contact/BAO/ContactType.php'; $contactTypes = array('Contact', 'Individual', 'Household', 'Organization'); $this->assign('contactTypes', json_encode($contactTypes)); $sel1 = array("" => "- select -") + CRM_Core_SelectValues::customGroupExtends(); $sel2 = array(); $activityType = CRM_Core_PseudoConstant::activityType(false, true); $eventType = CRM_Core_OptionGroup::values('event_type'); $membershipType = CRM_Member_BAO_MembershipType::getMembershipTypes(false); $participantRole = CRM_Core_OptionGroup::values('participant_role'); $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'); ksort($sel1); asort($activityType); asort($eventType); asort($membershipType); asort($participantRole); $allRelationshipType = array(); $allRelationshipType = array_merge($relTypeInd, $relTypeOrg); $allRelationshipType = array_merge($allRelationshipType, $relTypeHou); //adding subtype specific relationships CRM-5256 $subTypes = CRM_Contact_BAO_ContactType::subTypeInfo(); foreach ($subTypes as $subType => $val) { $subTypeRelationshipTypes = CRM_Contact_BAO_Relationship::getContactRelationshipType(null, null, null, $val['parent'], false, 'label', true, $subType); $allRelationshipType = array_merge($allRelationshipType, $subTypeRelationshipTypes); } $sel2['Event'] = $eventType; $sel2['Activity'] = $activityType; $sel2['Membership'] = $membershipType; $sel2['ParticipantRole'] = $participantRole; $sel2['ParticipantEventName'] = CRM_Event_PseudoConstant::event(null, false, "( is_template IS NULL OR is_template != 1 )"); $sel2['ParticipantEventType'] = $eventType; $sel2['Contribution'] = CRM_Contribute_PseudoConstant::contributionType(); $sel2['Relationship'] = $allRelationshipType; $sel2['Individual'] = CRM_Contact_BAO_ContactType::subTypePairs('Individual', false, null); $sel2['Household'] = CRM_Contact_BAO_ContactType::subTypePairs('Household', false, null); $sel2['Organization'] = CRM_Contact_BAO_ContactType::subTypePairs('Organization', false, null); foreach ($sel2 as $main => $sub) { if (!empty($sel2[$main])) { $sel2[$main] = array('' => ts("- Any -")) + $sel2[$main]; } } require_once "CRM/Core/Component.php"; $cSubTypes = CRM_Core_Component::contactSubTypes(); if (!empty($cSubTypes)) { $contactSubTypes = array(); foreach ($cSubTypes as $key => $value) { $contactSubTypes[$key] = $key; } $sel2['Contact'] = array("" => "-- Any --") + $contactSubTypes; } else { if (!isset($this->_id)) { $formName = 'document.forms.' . $this->_name; $js = "<script type='text/javascript'>\n"; $js .= "{$formName}['extends[1]'].style.display = 'none';\n"; $js .= "</script>"; $this->assign('initHideBlocks', $js); } } $sel =& $this->add('hierselect', 'extends', ts('Used For'), array('onClick' => 'showHideStyle();', 'name' => 'extends[0]', 'style' => 'vertical-align: top;'), true); $sel->setOptions(array($sel1, $sel2)); if (is_a($sel->_elements[1], 'HTML_QuickForm_select')) { // make second selector a multi-select - $sel->_elements[1]->setMultiple(true); $sel->_elements[1]->setSize(5); } if ($this->_action == CRM_Core_Action::UPDATE) { //allow to edit settings if custom group is empty CRM-5258 $this->_isGroupEmpty = CRM_Core_BAO_CustomGroup::isGroupEmpty($this->_id); if (!$this->_isGroupEmpty) { if (!empty($this->_subtypes) && count(array_intersect($this->_subtypes, $sel2[$this->_defaults['extends']])) < count($sel2[$this->_defaults['extends']])) { // we want to allow adding subtypes for this case, // and therefore freeze the first selector only. $sel->_elements[0]->freeze(); } else { // freeze both the selectors $sel->freeze(); } } $this->assign('gid', $this->_id); } // help text $this->addWysiwyg('help_pre', ts('Pre-form Help'), $attributes['help_pre']); $this->addWysiwyg('help_post', ts('Post-form Help'), $attributes['help_post']); // weight $this->add('text', 'weight', ts('Order'), $attributes['weight'], true); $this->addRule('weight', ts('is a numeric field'), 'numeric'); // display style $this->add('select', 'style', ts('Display Style'), CRM_Core_SelectValues::customGroupStyle()); // is this group collapsed or expanded ? $this->addElement('checkbox', 'collapse_display', ts('Collapse this group on initial display')); // is this group collapsed or expanded ? in advanced search $this->addElement('checkbox', 'collapse_adv_display', ts('Collapse this group in Advanced Search')); // is this group active ? $this->addElement('checkbox', 'is_active', ts('Is this Custom Data Group active?')); // does this group have multiple record? $multiple = $this->addElement('checkbox', 'is_multiple', ts('Does this Custom Data Group allow multiple records?'), null, array('onclick' => "showRange();")); // $min_multiple = $this->add('text', 'min_multiple', ts('Minimum number of multiple records'), $attributes['min_multiple'] ); // $this->addRule('min_multiple', ts('is a numeric field') , 'numeric'); $max_multiple = $this->add('text', 'max_multiple', ts('Maximum number of multiple records'), $attributes['max_multiple']); $this->addRule('max_multiple', ts('is a numeric field'), 'numeric'); //allow to edit settings if custom group is empty CRM-5258 $this->assign('isGroupEmpty', $this->_isGroupEmpty); if (!$this->_isGroupEmpty) { $multiple->freeze(); //$min_multiple->freeze(); $max_multiple->freeze(); } $this->assign('showStyle', false); $this->assign('showMultiple', false); $this->addButtons(array(array('type' => 'next', 'name' => ts('Save'), 'spacing' => ' ', 'isDefault' => true), array('type' => 'cancel', 'name' => ts('Cancel')))); // views are implemented as frozen form if ($this->_action & CRM_Core_Action::VIEW) { $this->freeze(); $this->addElement('button', 'done', ts('Done'), array('onclick' => "location.href='civicrm/admin/custom/group?reset=1&action=browse'")); } }
/** * 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->is_reserved = FALSE; $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), ts('more'), FALSE, 'customGroup.row.actions', 'CustomGroup', $dao->id); } $customGroupExtends = CRM_Core_SelectValues::customGroupExtends(); $customGroupStyle = CRM_Core_SelectValues::customGroupStyle(); foreach ($customGroup as $key => $array) { $customGroup[$key]['style_display'] = $customGroupStyle[$customGroup[$key]['style']]; $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::financialType(); $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); }
/** * Function to actually build the form * * @param null * * @return void * @access public */ function buildQuickForm() { $this->applyFilter('__ALL__', 'trim'); // title $this->add('text', 'title', ts('Group Name'), CRM_Core_DAO::getAttribute('CRM_Core_DAO_CustomGroup', 'title'), true); $this->addRule('title', ts('Name already exists in Database.'), 'objectExists', array('CRM_Core_DAO_CustomGroup', $this->_id, 'title')); // which entity is this custom data group for ? // for update action only allowed if there are no custom values present for this group. $extendsElement = $this->add('select', 'extends', ts('Used For'), CRM_Core_SelectValues::customGroupExtends()); if ($this->_action == CRM_CORE_ACTION_UPDATE) { $extendsElement->freeze(); $this->assign('gid', $this->_id); } // help text $this->add('textarea', 'help_pre', ts('Pre-form Help'), CRM_Core_DAO::getAttribute('CRM_Core_DAO_CustomGroup', 'help_pre')); $this->add('textarea', 'help_post', ts('Post-form Help'), CRM_Core_DAO::getAttribute('CRM_Core_DAO_CustomGroup', 'help_post')); // weight $this->add('text', 'weight', ts('Weight'), CRM_Core_DAO::getAttribute('CRM_Core_DAO_CustomGroup', 'weight'), true); $this->addRule('weight', ts(' is a numeric field'), 'numeric'); // display style $this->add('select', 'style', ts('Display Style'), CRM_Core_SelectValues::customGroupStyle()); // is this group collapsed or expanded ? $this->addElement('checkbox', 'collapse_display', ts('Collapse this group on initial display')); // is this group active ? $this->addElement('checkbox', 'is_active', ts('Is this Custom Data Group active?')); $this->addButtons(array(array('type' => 'next', 'name' => ts('Save'), 'spacing' => ' ', 'isDefault' => true), array('type' => 'cancel', 'name' => ts('Cancel')))); // views are implemented as frozen form if ($this->_action & CRM_CORE_ACTION_VIEW) { $this->freeze(); $this->addElement('button', 'done', ts('Done'), array('onClick' => "location.href='civicrm/admin/custom/group?reset=1&action=browse'")); } }