wejsv2old-plugin-cdp-profile
Version:
We.js plugin wejsv2old-plugin-cdp-profile
242 lines (211 loc) • 6.07 kB
JavaScript
/**
* modelsAlter hook
*
* run after we.js load all plugin resources and after sails.js process the model schemes
* use it to alter a model or insert extra attributes in other plugin module
*
* @param {object} sails current sails.js object
* @param {Function} cb callback
*/
var _ = require('lodash');
module.exports = function modelsAlter(sails, cb) {
// models scheme are avaible in sails.models['model-name']
// --- REQUIRED MODEL CHECK
var errMsg;
if (!sails.models.user || !sails.models.term) {
errMsg = 'User model is required for we-plugin-cdp-profile';
sails.log.error(errMsg, Object.keys(sails.models));
return cb(errMsg);
}
sails.models.user.types = _.defaults(sails.models.user.types || {}, {
isCPF: function (strCPF) {
var Soma;
var Resto;
Soma = 0;
var strRegex = new RegExp(/(^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$)/);
if (!strRegex.test(strCPF)) {
return false;
}
strCPF = strCPF.replace(/\.|-/g, '');
if (strCPF == '00000000000') {
return false;
}
for (i = 1; i <= 9; i++) {
Soma = Soma + parseInt(strCPF.substring(i - 1, i)) * (11 - i);
}
Resto = (Soma * 10) % 11;
if ((Resto == 10) || (Resto == 11)) {
Resto = 0;
}
if (Resto != parseInt(strCPF.substring(9, 10))) {
return false;
}
Soma = 0;
for (i = 1; i <= 10; i++) {
Soma = Soma + parseInt(strCPF.substring(i - 1, i)) * (12 - i);
}
Resto = (Soma * 10) % 11;
if ((Resto == 10) || (Resto == 11)) {
Resto = 0;
}
if (Resto != parseInt(strCPF.substring(10, 11))) {
return false;
}
if (strCPF.length > 11) return false;
return true;
}
});
_.defaults(sails.models.user.attributes, {
//CPF
cpf: {
type: 'string',
required: true,
unique: true,
isCPF: true
},
fullName: 'string',
//Formação educacional
major: 'string',
//Formação
grade: 'string',
//Perfis nas redes
fbprofile: 'text',
instprofile: 'text',
lkinprofile: 'text',
twitprofile: 'text',
youtbprofile: 'text',
otherprofile: 'text',
//Lattes
lattes: 'string',
//Interesses
interests: {
collection: 'term',
via: 'interestsCat',
dominant: true
},
interestsAjd: {
collection: 'term',
via: 'interestsAjdCat',
dominant: true
},
//Show BirthDay
showBday: {
type: 'boolean',
defaultsTo: true
},
//Show Genre
showGenre: {
type: 'boolean',
defaultsTo: true
},
course: {
collection: 'Course',
via: 'user'
},
aboutMe: {
type: 'boolean',
defaultsTo: false
}
});
sails.models.user.attributes.toJSON = function (preserve) {
var req = this.req;
delete this.req;
var self = this;
var cpf = self.cpf
var email = self.email;
var obj = self;
// remove password hash from view
delete obj.password;
// delete context cache
delete obj._context;
// delete cpf
delete obj.cpf;
// delete email
delete obj.email;
if (!obj.displayName) {
obj.displayName = obj.username;
}
if (req) {
sails.acl.can('view_all_profile_data', req.user, self, function (err, can) {
if (err) return sails.log.error('Some unkwnon error happened trying to define user permissions, error -->', err);
if (!can) {
if (!obj.showGenre) delete obj.gender;
if (!obj.showBday) delete obj.birthDate;
} else {
obj.email = email;
obj.cpf = cpf;
}
});
} else {
if (!obj.showGenre) delete obj.gender;
if (!obj.showBday) delete obj.birthDate;
}
if (obj.birthDate !== undefined){
obj.birthDate = new Date(obj.birthDate).toDateString();
};
// ember data type
obj.type = 'user';
return obj;
},
// Lifecycle Callbacks
sails.models.user.beforeCreate = function (user, next) {
// never save consumers on create
delete user.consumers;
// dont allow to set admin and moderator flags
delete user.isAdmin;
delete user.isModerator;
// sanitize
user = SanitizeHtmlService.sanitizeAllAttr(user);
// regex para limpar o cpf do usuário
if (user.cpf) {
user.cpf = user.cpf.replace(/[\.-]/g, '');
}
// optional password
if (user.password) {
this.generatePassword(user.password, function (err, hash) {
if (err) return next(err);
user.password = hash;
return next();
});
} else {
// ensures that user password are undefined
delete user.password;
next();
}
}
sails.models.user.beforeUpdate = function (user, next) {
var aboutMeCheck = Boolean(user.displayName && user.fullName && user.birthDate && user.gender && user.locationState && user.city && user.major);
if (aboutMeCheck) user.aboutMe = aboutMeCheck;
// regex para limpar o cpf do usuário
if (user.cpf) {
user.cpf = user.cpf.replace(/[^\0-9]/, '');
}
// sanitize
user = SanitizeHtmlService.sanitizeAllAttr(user);
// if has user.newPassword generate the new password
if (user.newPassword) {
return this.generatePassword(user.newPassword, function (err, hash) {
if (err) return next(err);
// delete newPassword variable
delete user.newPassword;
// set new password
user.password = hash;
return next();
});
} else {
return next();
}
},
_.defaults(sails.models.term.attributes, {
interestsCat: {
collection: 'user',
via: 'interests'
},
interestsAjdCat: {
collection: 'user',
via: 'interestsAjd'
}
});
// Always remember to run the callback
cb();
};