};
$scope.isSpecial = function(name) {
- var specialParams = ['select', 'fields', 'action', 'where', 'values', 'defaults', 'orderBy', 'chain', 'groupBy', 'having'];
- if ($scope.availableParams.limit && $scope.availableParams.offset) {
- specialParams.push('limit', 'offset');
- }
+ var specialParams = ['select', 'fields', 'action', 'where', 'values', 'defaults', 'orderBy', 'chain'];
return _.contains(specialParams, name);
};
deep: format === 'json'
});
}
- if (typeof objectParams[name] !== 'undefined' && name !== 'orderBy') {
- $scope.$watch('params.' + name, function (values) {
+ if (typeof objectParams[name] !== 'undefined') {
+ $scope.$watch('params.' + name, function(values) {
// Remove empty values
_.each(values, function (clause, index) {
if (!clause || !clause[0]) {
var field = value;
$timeout(function() {
if (field) {
- if (typeof objectParams[name] === 'undefined') {
- $scope.params[name].push(field);
- } else {
- var defaultOp = _.cloneDeep(objectParams[name]);
- if (name === 'chain') {
- var num = $scope.params.chain.length;
- defaultOp[0] = field;
- field = 'name_me_' + num;
- }
- $scope.params[name].push([field, defaultOp]);
+ var defaultOp = _.cloneDeep(objectParams[name]);
+ if (name === 'chain') {
+ var num = $scope.params.chain.length;
+ defaultOp[0] = field;
+ field = 'name_me_' + num;
}
+ $scope.params[name].push([field, defaultOp]);
$scope.controls[name] = null;
}
});
$scope.saveDoc = function() {
return {
description: ts('Save API call as a smart group.'),
- comment: ts('Allows you to create a SavedSearch containing the WHERE clause of this API call.'),
+ comment: ts('Create a SavedSearch using these API params to populate a smart group.') +
+ '\n\n' + ts('NOTE: you must select contact id as the only field.')
};
};
writeCode();
$scope.save = function() {
+ $scope.params.limit = $scope.params.offset = 0;
+ if ($scope.params.chain.length) {
+ CRM.alert(ts('Smart groups are not compatible with API chaining.'), ts('Error'), 'error', {expires: 5000});
+ return;
+ }
+ if ($scope.params.select.length !== 1 || !_.includes($scope.params.select[0], 'id')) {
+ CRM.alert(ts('To create a smart group, the API must select contact id and no other fields.'), ts('Error'), 'error', {expires: 5000});
+ return;
+ }
var model = {
title: '',
description: '',
params: JSON.parse(angular.toJson($scope.params))
};
model.params.version = 4;
- delete model.params.select;
delete model.params.chain;
delete model.params.debug;
delete model.params.limit;
+ delete model.params.offset;
+ delete model.params.orderBy;
delete model.params.checkPermissions;
var options = CRM.utils.adjustDialogDefaults({
width: '500px',