unserver-unify
Version:
383 lines (377 loc) • 12 kB
JavaScript
;
// coffeescript's for in loop
var __indexOf = [].indexOf || function(item) {
for (var i = 0, l = this.length; i < l; i++) {
if (i in this && this[i] === item) return i;
}
return -1;
};
angular.module('bamboo.setting').controller('SignupCtrl', function($scope, $rootScope, ApiService,AppConfig, CommonService, loginService, $state, $stateParams, $timeout, formService, $localStorage, localStorageHelper, $translate) {
this.userCredentials = {};
this.company = {};
var self = this;
$scope.datePicker = {};
this.companycategory = ApiService.companycategory;
console.log(this.companycategory);
var _vrr;
var _vtitle = {};
$scope.regex = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/;
/**
* get local footer register data
*/
if (localStorageHelper.get('FOOTER_SIGNUP_DATA')) {
self.userCredentials = localStorageHelper.get('FOOTER_SIGNUP_DATA');
}
/**
* get local normal register data
*/
if (localStorageHelper.get('REGISTER_INFO')) {
self.userCredentials = localStorageHelper.get('REGISTER_INFO');
}
self.regWizardstep = 1;
this.smsVerify = false;
if(ApiService.school.smsVerification){
self.regWizardstep = 0;
self.smsVerify = true;
}
function getArray(obj, level, parent, flag) {
if ((typeof obj) === "object") {
for (var key in obj) {
var fullkey;
if (parent == '' || flag) {
fullkey = key;
} else {
fullkey = parent + "," + key;
}
var _i = {
key: fullkey,
value: level,
title: key,
};
_vtitle[fullkey] = key;
_vrr.push(_i);
var info = obj[key];
if (typeof info === "object") {
getArray(info, level + 1, fullkey, flag);
}
}
}
}
function getKeysArray(obj, callback, _flag) {
_vrr = [];
getArray(obj, 0, '', _flag);
var _rrr = {};
for (var i = 0; i < _vrr.length; i++) {
var info = _vrr[i];
var key = info.key;
_rrr[key] = [];
_rrr[key].push(key); // first value will be key itself
for (var j = i + 1; j < _vrr.length; j++) { // search all the item until the same level key found
var next = _vrr[j];
if (info.value < next.value) {
_rrr[key].push(_vrr[j].key);
} else {
break;
}
}
}
callback(_vrr, _rrr);
}
getKeysArray(self.companycategory, function(vrr, rrr) {
self.CompanyTypes = vrr;
console.log(self.CompanyTypes);
});
$scope.submitted = false;
this.role = $stateParams.role;
if (this.role == 'comadmin') {
this.userCredentials.companyUser = true;
}
console.log(this.role);
$scope.userTypes = g_userTypes;
$scope.edus = g_edus;
$scope.jobTitles = g_jobTitles;
$scope.provinces = g_provinces;
this.wizardstep = 0;
this.maxstep = 0;
this.backtostep = function(step) {
self.wizardstep = step;
if (self.wizardstep > self.maxstep) {
self.maxstep = self.wizardstep;
}
}
this.nextfrombasic = function(form) {
$scope.submitted = true;
console.log(form);
if (form.$invalid) {
$scope.shaking = true;
$timeout(function() {
$scope.shaking = false;
}, 500);
console.log(form.$invalid);
return;
}
$scope.submitted = false;
self.wizardstep = 1;
if (self.wizardstep > self.maxstep) {
self.maxstep = self.wizardstep;
}
}
var nurseProfile = isNurseProfile($rootScope.currentSchool);
if (nurseProfile) {
this.userCredentials.user_profiles = getInitNurseProfile();
$scope.userProfiles = this.userCredentials.user_profiles;
}
var userProfiledoc = loginService.school.userProfiledoc;
console.log(userProfiledoc);
if (userProfiledoc) {
ApiService.get('/schooldoc/' + userProfiledoc).then(function(result) {
console.log(result);
if (result.data.success) {
self.userProfiles = result.data.data.content;
console.log(self.userProfiles);
}
});
}
$rootScope.$watch('currentLanguage', function(newValue, oldValue) {
if (nurseProfile) {
notifyLocaleChanged($scope.userProfiles);
}
});
formService.initFormDate();
this.registerWithCompany = function(form) {
$scope.submitted = true;
if ($scope.form.$invalid) {
$scope.shaking = true;
$timeout(function() {
$scope.shaking = false;
}, 500);
return;
}
var info = self.userCredentials;
info.companyUser = true;
info.company = self.company;
info.url = ApiService.HOST + "#/active_account";
info.ownername = loginService.school.name;
console.log(info);
ApiService.post('/signup', info).then(function(result) {
//console.log(result);
if (result.data.success) {
CommonService.showInfo(" " + result.data.success);
$state.go('index.home');
} else {
if (result.data.errorCode && AppConfig.ErrorSignUp[result.data.errorCode]) {
// console.log(window.sessionStorage.language);
var _err = AppConfig.ErrorSignUp[result.data.errorCode];
if (window.sessionStorage.language == 'Chinese') {
CommonService.showError(_err.cn);
} else {
CommonService.showError(_err.en);
}
} else {
CommonService.showError(result.data.error);
}
return;
}
});
}
this.register = function(flag) {
$scope.submitted = true;
this.userCredentials.user_profiles = formService.getFormData();
if (!flag) {
if ($scope.form.$invalid) {
$scope.shaking = true;
$timeout(function() {
$scope.shaking = false;
}, 500);
return;
}
}
var info = self.userCredentials;
console.info(info);
if (info.pass != info.re_pass) {
CommonService.showError("Password not matched");
return;
}
info.url = ApiService.HOST + "#/active_account";
info.ownername = loginService.school.name;
console.log(info);
var serverPath = '/signup';
if(ApiService.school.smsVerification){
serverPath = '/smssignup';
}
ApiService.post(serverPath, info).then(function(result) {
//console.log(result);
if (result.data.success) {
//CommonService.showInfo(" " + result.data.success);
if(ApiService.school.smsVerification){
CommonService.showInfo($translate.instant('Account is created successfully'),function(){
$state.go('index.home');
})
} else {
$state.go('index.setting.signuplink');
}
} else {
if (result.data.errorCode && AppConfig.ErrorSignUp[result.data.errorCode]) {
// console.log(window.sessionStorage.language);
var _err = AppConfig.ErrorSignUp[result.data.errorCode];
if (window.sessionStorage.language == 'Chinese') {
CommonService.showError(_err.cn);
} else {
CommonService.showError(_err.en);
}
} else {
CommonService.showError(result.data.error);
}
return;
}
});
};
$scope.showDatePicker = function(event, key) {
event.preventDefault();
event.stopPropagation();
$scope.datePicker[key] = true;
};
$scope.readTerms = function(form) {
console.log(self.userCredentials);
localStorageHelper.put('REGISTER_INFO', self.userCredentials);
console.log($localStorage);
$state.go('index.agreement');
}
this.requestToken = function() {
if (!self.userCredentials.mobile || self.userCredentials.mobile.length < 8) {
CommonService.showError($translate.instant('Invalid Mobile Number'));
return;
}
var isnum = /^\d+$/.test(self.userCredentials.mobile);
if (!isnum) {
CommonService.showError($translate.instant('Invalid Mobile Number'));
return;
}
var info = {
action: 'verifymobile',
mobile: self.userCredentials.mobile,
}
ApiService.post('/messages', info).then(function(result) {
console.log(result);
if (result.data.success) {
//self.showTab = 'tab2';
self.disableReq = true;
} else {
CommonService.showNoBlockInfo(result.data.error);
}
});
}
this.verifyToken = function() {
if (!self.userCredentials.verifycode || self.userCredentials.verifycode.length < 6) {
CommonService.showError($translate.instant('Invalid Mobile Number'));
return;
}
var isnum = /^\d+$/.test(self.userCredentials.verifycode);
if (!isnum) {
CommonService.showError($translate.instant('Invalid Code'));
return;
}
var info = {
action: 'checkverification',
mobile: self.userCredentials.mobile,
code:self.userCredentials.verifycode
}
ApiService.post('/messages', info).then(function(result) {
console.log(result);
if (result.data.success) {
self.regWizardstep = 1;
} else {
CommonService.showError($translate.instant('Invalid Code'));
}
});
}
}).service('formService', function() {
var formData = {};
return {
initFormDate: function() {
formData = {};
return;
},
saveFormData: function(newformdata) {
angular.forEach(newformdata, function(value, key) {
formData[key] = value;
})
return;
},
getFormData: function() {
return formData;
}
}
}).directive('formDirective', function() {
return {
controller: function($scope) {
$scope.submit = function() {
alert('Form submitted..');
$scope.form.submitted = true;
}
$scope.cancel = function() {
alert('Form canceled..');
}
},
templateUrl: 'assets/directive-templates/form/form.html',
restrict: 'E',
scope: {
form: '='
}
};
}).directive('fieldDirective', function($http, $compile, formService) {
var getTemplateUrl = function(field) {
var type = field.field_type;
var templateUrl = 'assets/directive-templates/field/';
var supported_fields = ['textfield', 'email', 'textarea', 'checkbox', 'date', 'dropdown', 'hidden', 'password', 'radio', 'numberinput']
if (__indexOf.call(supported_fields, type) >= 0) {
return templateUrl += type + '.html';
}
}
var linker = function(scope, element) {
// GET template content from path
var templateUrl = getTemplateUrl(scope.field);
$http.get(templateUrl).then(function(data) {
element.html(data);
$compile(element.contents())(scope);
if (scope.field.field_type == 'numberinput') {
scope.$watch('field.field_number', function(newVal, oldVal) {
if (newVal != oldVal) {
var key = scope.field.field_title;
var value = scope.field.field_number;
var obj = {};
obj[key] = value;
formService.saveFormData(obj);
}
})
} else {
scope.$watch('field.field_value', function(newVal, oldVal) {
if (newVal != oldVal) {
var key = scope.field.field_title;
var value = scope.field.field_value;
var obj = {};
obj[key] = value;
formService.saveFormData(obj);
}
})
}
});
}
return {
controller: function($scope) {
// logic function for datepicker
$scope.opened = false;
$scope.open = function(e) {
e.preventDefault();
e.stopPropagation();
$scope.opened = true;
}
},
template: '<div ng-bind="field"></div>',
restrict: 'E',
scope: {
field: '='
},
link: linker
};
});