48 lines
1.3 KiB
JavaScript
48 lines
1.3 KiB
JavaScript
/**
|
|
* Dynamically-generated alternative to civi.core.js
|
|
*/
|
|
(function($, _) {
|
|
if (!CRM.Schema) CRM.Schema = {};
|
|
|
|
/**
|
|
* Data models used by the Civi form designer require more attributes than basic Backbone models:
|
|
* - sections: array of field-groupings
|
|
* - schema: array of fields, keyed by field name, per backbone-forms; extra attributes:
|
|
* + section: string, index to the 'sections' array
|
|
* + civiFieldType: string
|
|
*
|
|
* @see https://github.com/powmedia/backbone-forms
|
|
*/
|
|
|
|
CRM.Schema.BaseModel = CRM.Backbone.Model.extend({
|
|
initialize: function() {
|
|
}
|
|
});
|
|
|
|
CRM.Schema.loadModels = function(civiSchema) {
|
|
_.each(civiSchema, function(value, key, list) {
|
|
CRM.Schema[key] = CRM.Schema.BaseModel.extend(value);
|
|
});
|
|
};
|
|
|
|
CRM.Schema.reloadModels = function(options) {
|
|
return $
|
|
.ajax({
|
|
url: CRM.url("civicrm/profile-editor/schema"),
|
|
data: {
|
|
'entityTypes': _.keys(CRM.civiSchema).join(',')
|
|
},
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
success: function(data) {
|
|
if (data) {
|
|
CRM.civiSchema = data;
|
|
CRM.Schema.loadModels(CRM.civiSchema);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
CRM.Schema.loadModels(CRM.civiSchema);
|
|
})(CRM.$, CRM._);
|