2015-08-18 21:44:36 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
// Forms controller
|
2017-10-28 07:45:04 +00:00
|
|
|
angular.module('forms').controller('AdminFormController', ['$rootScope', '$window', '$scope', '$stateParams', '$state', 'Forms', 'CurrentForm', '$http', '$uibModal', 'myForm', '$filter', '$translate',
|
|
|
|
function($rootScope, $window, $scope, $stateParams, $state, Forms, CurrentForm, $http, $uibModal, myForm, $filter, $translate) {
|
2017-07-28 21:47:09 +00:00
|
|
|
|
|
|
|
//Set active tab to Create
|
|
|
|
$scope.activePill = 0;
|
|
|
|
|
|
|
|
$scope.copied = false;
|
|
|
|
$scope.onCopySuccess = function (e) {
|
|
|
|
$scope.copied = true;
|
|
|
|
};
|
|
|
|
|
|
|
|
$scope = $rootScope;
|
|
|
|
$scope.animationsEnabled = true;
|
|
|
|
$scope.myform = myForm;
|
|
|
|
$rootScope.saveInProgress = false;
|
2017-10-07 07:27:03 +00:00
|
|
|
$scope.oldForm = _.cloneDeep($scope.myform);
|
2017-07-28 21:47:09 +00:00
|
|
|
|
|
|
|
CurrentForm.setForm($scope.myform);
|
|
|
|
|
|
|
|
$scope.formURL = '/#!/forms/' + $scope.myform._id;
|
|
|
|
|
|
|
|
if ($scope.myform.isLive) {
|
|
|
|
if ($window.subdomainsDisabled === true) {
|
|
|
|
$scope.actualFormURL = window.location.protocol + '//' + window.location.host + '/view' + $scope.formURL;
|
|
|
|
} else {
|
|
|
|
if (window.location.host.split('.').length < 3) {
|
|
|
|
$scope.actualFormURL = window.location.protocol + '//' + $scope.myform.admin.username + '.' + window.location.host + $scope.formURL;
|
|
|
|
} else {
|
|
|
|
$scope.actualFormURL = window.location.protocol + '//' + $scope.myform.admin.username + '.' + window.location.host.split('.').slice(1, 3).join('.') + $scope.formURL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$scope.actualFormURL = window.location.protocol + '//' + window.location.host + $scope.formURL;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var refreshFrame = $scope.refreshFrame = function(){
|
|
|
|
if(document.getElementById('iframe')) {
|
|
|
|
document.getElementById('iframe').contentWindow.location.reload();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2017-10-07 07:27:03 +00:00
|
|
|
$scope.tabData = [
|
2015-11-06 17:25:30 +00:00
|
|
|
{
|
2016-06-16 00:38:22 +00:00
|
|
|
heading: $filter('translate')('CONFIGURE_TAB'),
|
2017-07-28 21:47:09 +00:00
|
|
|
templateName: 'configure'
|
2017-10-02 10:18:47 +00:00
|
|
|
}
|
2015-11-06 17:25:30 +00:00
|
|
|
];
|
2015-09-15 22:21:49 +00:00
|
|
|
|
2017-10-07 07:27:03 +00:00
|
|
|
$scope.designTabActive = false
|
|
|
|
|
|
|
|
$scope.deactivateDesignTab = function(){
|
|
|
|
$scope.designTabActive = false
|
|
|
|
}
|
|
|
|
|
|
|
|
$scope.activateDesignTab = function(){
|
|
|
|
$scope.designTabActive = true
|
|
|
|
}
|
|
|
|
|
2015-08-18 21:44:36 +00:00
|
|
|
$scope.setForm = function(form){
|
|
|
|
$scope.myform = form;
|
|
|
|
};
|
2017-03-10 18:25:35 +00:00
|
|
|
|
2015-08-18 21:44:36 +00:00
|
|
|
$rootScope.resetForm = function(){
|
|
|
|
$scope.myform = Forms.get({
|
|
|
|
formId: $stateParams.formId
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2016-04-29 06:00:41 +00:00
|
|
|
/*
|
|
|
|
** DeleteModal Functions
|
2015-08-18 21:44:36 +00:00
|
|
|
*/
|
|
|
|
$scope.openDeleteModal = function(){
|
2015-11-06 21:37:18 +00:00
|
|
|
$scope.deleteModal = $uibModal.open({
|
2017-07-28 21:47:09 +00:00
|
|
|
animation: $scope.animationsEnabled,
|
|
|
|
templateUrl: 'formDeleteModal.html',
|
|
|
|
controller: 'AdminFormController',
|
|
|
|
resolve: {
|
|
|
|
myForm: function(){
|
|
|
|
return $scope.myform;
|
|
|
|
}
|
|
|
|
}
|
2015-11-06 21:37:18 +00:00
|
|
|
});
|
|
|
|
$scope.deleteModal.result.then(function (selectedItem) {
|
2017-07-28 21:47:09 +00:00
|
|
|
$scope.selected = selectedItem;
|
2015-08-18 21:44:36 +00:00
|
|
|
});
|
|
|
|
};
|
2015-11-06 21:37:18 +00:00
|
|
|
|
2015-08-18 21:44:36 +00:00
|
|
|
$scope.cancelDeleteModal = function(){
|
2015-08-19 22:29:01 +00:00
|
|
|
if($scope.deleteModal){
|
|
|
|
$scope.deleteModal.dismiss('cancel');
|
2015-08-18 21:44:36 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// Remove existing Form
|
2015-08-19 22:29:01 +00:00
|
|
|
$scope.removeCurrentForm = function() {
|
|
|
|
if($scope.deleteModal && $scope.deleteModal.opened){
|
2015-08-18 21:44:36 +00:00
|
|
|
|
2015-08-19 22:29:01 +00:00
|
|
|
$scope.deleteModal.close();
|
2016-04-29 06:00:41 +00:00
|
|
|
|
2015-08-19 22:29:01 +00:00
|
|
|
var form_id = $scope.myform._id;
|
|
|
|
if(!form_id) throw new Error('Error - removeCurrentForm(): $scope.myform._id does not exist');
|
2016-04-29 06:00:41 +00:00
|
|
|
|
2015-08-19 22:29:01 +00:00
|
|
|
$http.delete('/forms/'+form_id)
|
2017-03-27 20:32:06 +00:00
|
|
|
.then(function(response){
|
2017-10-02 10:18:47 +00:00
|
|
|
$state.go('listForms', {}, {reload: true})
|
2017-03-27 20:32:06 +00:00
|
|
|
}, function(error){
|
2015-08-18 21:44:36 +00:00
|
|
|
console.error(error);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2017-10-07 07:27:03 +00:00
|
|
|
$scope.updateDesign = function(updateImmediately, data, shouldDiff, refreshAfterUpdate){
|
|
|
|
$scope.update(updateImmediately, data, shouldDiff, refreshAfterUpdate, function(){
|
|
|
|
refreshFrame();
|
|
|
|
});
|
|
|
|
}
|
2015-08-19 22:29:01 +00:00
|
|
|
|
2017-10-07 07:27:03 +00:00
|
|
|
// Update existing Form
|
|
|
|
$scope.update = $rootScope.update = function(updateImmediately, data, shouldDiff, refreshAfterUpdate, cb){
|
2015-08-18 21:44:36 +00:00
|
|
|
var continueUpdate = true;
|
2015-08-19 22:29:01 +00:00
|
|
|
if(!updateImmediately){
|
|
|
|
continueUpdate = !$rootScope.saveInProgress;
|
2015-08-18 21:44:36 +00:00
|
|
|
}
|
2016-04-29 06:00:41 +00:00
|
|
|
|
2017-10-07 07:27:03 +00:00
|
|
|
//Update form **if we are not in the middle of an update** or if **shouldUpdateNow flag is set**
|
2017-03-10 19:26:07 +00:00
|
|
|
if(continueUpdate) {
|
2017-07-28 21:47:09 +00:00
|
|
|
var err = null;
|
|
|
|
|
|
|
|
if (!updateImmediately) {
|
|
|
|
$rootScope.saveInProgress = true;
|
|
|
|
}
|
|
|
|
|
2017-10-07 07:27:03 +00:00
|
|
|
if (shouldDiff) {
|
|
|
|
//Do this so we can create duplicate fields
|
|
|
|
var checkForValidId = new RegExp('^[0-9a-fA-F]{24}$');
|
|
|
|
for(var i=0; i < $scope.myform.form_fields.length; i++){
|
|
|
|
var field = $scope.myform.form_fields[i];
|
|
|
|
if(!checkForValidId.exec(field._id+'')){
|
|
|
|
delete $scope.myform.form_fields[i]._id;
|
|
|
|
delete $scope.myform.form_fields[i].id;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var data = DeepDiff.diff($scope.oldForm, $scope.myform);
|
|
|
|
|
2017-07-28 21:47:09 +00:00
|
|
|
$scope.updatePromise = $http.put('/forms/' + $scope.myform._id, {changes: data})
|
|
|
|
.then(function (response) {
|
2017-10-02 10:18:47 +00:00
|
|
|
if (refreshAfterUpdate) {
|
|
|
|
$rootScope.myform = $scope.myform = response.data;
|
2017-10-07 07:27:03 +00:00
|
|
|
$scope.oldForm = _.cloneDeep($scope.myform);
|
2017-10-02 10:18:47 +00:00
|
|
|
}
|
2017-07-28 21:47:09 +00:00
|
|
|
}).catch(function (response) {
|
|
|
|
err = response.data;
|
2017-10-02 10:18:47 +00:00
|
|
|
console.error(err);
|
2017-07-28 21:47:09 +00:00
|
|
|
}).finally(function () {
|
|
|
|
if (!updateImmediately) {
|
|
|
|
$rootScope.saveInProgress = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((typeof cb) === 'function') {
|
|
|
|
return cb(err);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
var dataToSend = data;
|
|
|
|
if(dataToSend.analytics && dataToSend.analytics.visitors){
|
|
|
|
delete dataToSend.analytics.visitors;
|
|
|
|
}
|
|
|
|
if(dataToSend.submissions){
|
|
|
|
delete dataToSend.submissions;
|
|
|
|
}
|
|
|
|
|
2017-10-07 07:27:03 +00:00
|
|
|
if(dataToSend.visible_form_fields){
|
|
|
|
delete dataToSend.visible_form_fields;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(dataToSend.analytics){
|
|
|
|
delete dataToSend.analytics.visitors;
|
|
|
|
delete dataToSend.analytics.fields;
|
|
|
|
delete dataToSend.analytics.submissions;
|
|
|
|
delete dataToSend.analytics.views;
|
|
|
|
delete dataToSend.analytics.conversionRate;
|
|
|
|
}
|
|
|
|
|
|
|
|
delete dataToSend.created;
|
|
|
|
delete dataToSend.lastModified;
|
|
|
|
delete dataToSend.__v;
|
|
|
|
|
2017-07-28 21:47:09 +00:00
|
|
|
$scope.updatePromise = $http.put('/forms/' + $scope.myform._id, {form: dataToSend})
|
|
|
|
.then(function (response) {
|
2017-10-02 10:18:47 +00:00
|
|
|
if (refreshAfterUpdate) {
|
|
|
|
$rootScope.myform = $scope.myform = response.data;
|
|
|
|
}
|
2017-07-28 21:47:09 +00:00
|
|
|
|
|
|
|
}).catch(function (response) {
|
|
|
|
err = response.data;
|
2017-10-02 10:18:47 +00:00
|
|
|
console.error(err);
|
2017-07-28 21:47:09 +00:00
|
|
|
}).finally(function () {
|
|
|
|
if (!updateImmediately) {
|
|
|
|
$rootScope.saveInProgress = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((typeof cb) === 'function') {
|
|
|
|
return cb(err);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2015-08-18 21:44:36 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2015-10-30 18:40:02 +00:00
|
|
|
|
2017-07-28 21:47:09 +00:00
|
|
|
}
|
|
|
|
]);
|