Skip to content
Snippets Groups Projects
Commit a56f80c7 authored by Kurund Jalmi's avatar Kurund Jalmi
Browse files

Merge pull request #2405 from kurund/profile-builder

Profile builder
parents 2ffa0207 8d82d04a
Branches
Tags
No related merge requests found
......@@ -46,7 +46,7 @@ class CRM_Contribute_Form_ContributionPage_Custom extends CRM_Contribute_Form_Co
*/
public function buildQuickForm() {
// Register 'contact_1'
// Register 'contact_1' model
$entities = array();
$entities[] = array('entity_name' => 'contact_1', 'entity_type' => 'IndividualModel');
$allowCoreTypes = array_merge(array('Contact', 'Individual'), CRM_Contact_BAO_ContactType::subTypes('Individual'));
......
......@@ -222,20 +222,17 @@ class CRM_Contribute_Form_ContributionPage_Settings extends CRM_Contribute_Form_
);
$entities = array(
array('entity_name' => 'contact_1',
'entity_type' => 'IndividualModel'
),
array('entity_name' => 'organization_1',
'entity_type' => 'OrganizationModel'
),
array('entity_name' => 'household_1',
'entity_type' => 'HouseholdModel'
array(
'entity_name' => 'contact_1',
'entity_type' => 'IndividualModel',
),
);
$allowCoreTypes = array_merge(array('Contact', 'Individual', 'Organization', 'Household'), CRM_Contact_BAO_ContactType::subTypes('Individual'));
$allowSubTypes = array();
$this->addProfileSelector('honoree_profile', ts('Honoree Profile'), $allowCoreTypes, $allowSubTypes, $entities);
CRM_UF_Page_ProfileEditor::registerSchemas(array('OrganizationModel','HouseholdModel'));
if (!empty($this->_submitValues['honor_block_is_active'])) {
$this->addRule('soft_credit_types', ts('At least one value must be selected if Honor Section is active'), 'required');
......
......@@ -77,11 +77,9 @@
switch (field_type) {
case 'Contact':
case 'Individual':
return 'contact_1';
case 'Organization':
return 'organization_1';
case 'Household':
return 'household_1';
return 'contact_1';
case 'Activity':
return 'activity_1';
case 'Contribution':
......@@ -684,17 +682,56 @@
});
return allMatched;
},
getUFGroupModel: function() {
var ufGroupModel = this;
// set proper entity model based on selected profile
var contactTypes = ['Individual', 'Household', 'Organization'];
var profileType = ufGroupModel.get('group_type');
profileType = profileType.split(',');
var ufEntityModel;
_.each(profileType, function (ptype) {
if ($.inArray(ptype, contactTypes) > -1) {
ufEntityModel = ptype + 'Model';
return true;
}
});
return ufEntityModel;
},
setUFGroupModel: function(entityType, allEntityModels) {
var ufGroupModel = this;
var newUfEntityModels = [];
_.each(allEntityModels, function (values) {
if (values.entity_name == 'contact_1') {
values.entity_type = entityType;
}
newUfEntityModels.push(new CRM.UF.UFEntityModel(values));
});
ufGroupModel.getRel('ufEntityCollection').reset(newUfEntityModels);
},
resetEntities: function() {
var ufGroupModel = this;
var deleteFieldList = [];
ufGroupModel.getRel('ufFieldCollection').each(function(ufFieldModel){
if (!ufFieldModel.getFieldSchema()) {
CRM.alert(ts('The data model no longer includes field "%1"! All references to the field have been removed.', {
1: ufFieldModel.get('entity_name') + "." + ufFieldModel.get('field_name')
CRM.alert(ts('This profile no longer includes field "%1"! All references to the field have been removed.', {
1: ufFieldModel.get('label')
}), '', 'alert', {expires: false});
ufFieldModel.destroyLocal();
deleteFieldList.push(ufFieldModel);
}
});
_.each(deleteFieldList, function(ufFieldModel) {
ufFieldModel.destroyLocal();
});
this.getRel('paletteFieldCollection').reset(this.buildPaletteFields());
// reset to redraw the cancel after entity type is updated.
ufGroupModel.getRel('ufFieldCollection').reset(ufGroupModel.getRel('ufFieldCollection').toJSON());
},
/**
*
......
......@@ -293,6 +293,7 @@
openTreeNodes: [],
events: {
'keyup .crm-designer-palette-search input': 'doSearch',
'change .crm-contact-types': 'doSetPaletteEntity',
'click .crm-designer-palette-clear-search': 'clearSearch',
'click .crm-designer-palette-toggle': 'toggleAll',
'click .crm-designer-palette-add button': 'doNewCustomFieldDialog',
......@@ -324,6 +325,14 @@
paletteView.model.getRel('ufEntityCollection').each(function(ufEntityModel){
_.each(ufEntityModel.getSections(), function(section, sectionKey){
var defaultValue = paletteView.selectedContactType;
if (!defaultValue) {
defaultValue = paletteView.model.getUFGroupModel();
}
// set selected option as default, since we are rebuilding palette
paletteView.$('.crm-contact-types').val(defaultValue).prop('selected','selected');
var entitySection = ufEntityModel.get('entity_name') + '-' + sectionKey;
var items = [];
if (paletteFieldsByEntitySection[entitySection]) {
......@@ -397,6 +406,19 @@
doSearch: function(event) {
$('.crm-designer-palette-tree').jstree("search", $(event.target).val());
},
doSetPaletteEntity: function(event) {
this.selectedContactType = $('.crm-contact-types :selected').val();
// loop through entity collection and remove non-valid entity section's
var newUfEntityModels = [];
this.model.getRel('ufEntityCollection').each(function(oldUfEntityModel){
var values = oldUfEntityModel.toJSON();
if (values.entity_name == 'contact_1') {
values.entity_type = $('.crm-contact-types :selected').val();
}
newUfEntityModels.push(new CRM.UF.UFEntityModel(values));
});
this.model.getRel('ufEntityCollection').reset(newUfEntityModels);
},
doAddToCanvas: function(event) {
var paletteFieldModel = this.model.getRel('paletteFieldCollection').get($(event.currentTarget).attr('data-plm-cid'));
paletteFieldModel.addToUFCollection(this.model.getRel('ufFieldCollection'));
......@@ -453,7 +475,9 @@
var paletteFieldCollection = this.model.getRel('paletteFieldCollection');
var paletteFieldModel = paletteFieldCollection.getFieldByName(ufFieldModel.get('entity_name'), ufFieldModel.get('field_name'));
var isAddable = ufFieldCollection.isAddable(ufFieldModel);
this.$('[data-plm-cid='+paletteFieldModel.cid+']').toggleClass('disabled', !isAddable);
if (paletteFieldModel) {
this.$('[data-plm-cid='+paletteFieldModel.cid+']').toggleClass('disabled', !isAddable);
}
},
toggleAll: function(event) {
if ($('.crm-designer-palette-search input').val() == '') {
......@@ -481,13 +505,15 @@
this.model.getRel('ufFieldCollection')
.on('add', this.updatePlaceholder, this)
.on('remove', this.updatePlaceholder, this)
.on('add', this.addUFFieldView, this);
.on('add', this.addUFFieldView, this)
.on('reset', this.render, this);
},
onClose: function() {
this.model.getRel('ufFieldCollection')
.off('add', this.updatePlaceholder, this)
.off('remove', this.updatePlaceholder, this)
.off('add', this.addUFFieldView, this);
.off('add', this.addUFFieldView, this)
.off('reset', this.render, this);
},
render: function() {
var ufFieldCanvasView = this;
......
......@@ -115,7 +115,7 @@
success: function(formData) {
// Note: With chaining, API returns some extraneous keys that aren't part of UFGroupModel
var ufGroupModel = new CRM.UF.UFGroupModel(_.pick(formData, _.keys(CRM.UF.UFGroupModel.prototype.schema)));
ufGroupModel.getRel('ufEntityCollection').reset(profileSelectorView.options.ufEntities);
ufGroupModel.setUFGroupModel(ufGroupModel.getUFGroupModel(), profileSelectorView.options.ufEntities);
ufGroupModel.getRel('ufFieldCollection').reset(_.values(formData["api.UFField.get"].values));
options.onLoad(ufGroupModel);
}
......@@ -137,7 +137,7 @@
success: function(formData) {
// Note: With chaining, API returns some extraneous keys that aren't part of UFGroupModel
var ufGroupModel = new CRM.UF.UFGroupModel(_.pick(formData, _.keys(CRM.UF.UFGroupModel.prototype.schema)));
ufGroupModel.getRel('ufEntityCollection').reset(profileSelectorView.options.ufEntities);
ufGroupModel.setUFGroupModel(ufGroupModel.getUFGroupModel(), profileSelectorView.options.ufEntities);
ufGroupModel.getRel('ufFieldCollection').reset(_.values(formData["api.UFField.get"].values));
options.onLoad(ufGroupModel.deepCopy());
}
......
......@@ -25,6 +25,16 @@
<script type="text/template" id="palette_template">
<div class="crm-designer-palette">
<div class="crm-designer-palette-search">
<div class="crm-filter-objects">
<span>{ts}Contact Type{/ts}:
<select class="crm-contact-types">
<option value="IndividualModel">{ts}Individual{/ts}</option>
<option value="OrganizationModel">{ts}Organization{/ts}</option>
<option value="HouseholdModel">{ts}Household{/ts}</option>
</select>
</span>
</div>
<hr>
<input type="text" placeholder="{ts}Search Fields{/ts}" />
<a class="crm-designer-palette-clear-search" href="#" title="{ts}Clear search{/ts}"><img src="{$config->resourceBase}i/close.png" class="action-icon" alt="X" /></a>
<div class="crm-designer-palette-controls">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment