WikiLerni/models/Tag.js

65 lines
1.8 KiB
JavaScript
Raw Normal View History

"use strict";
const striptags = require("striptags");
const slugify = require('slugify');
const tool = require("../tools/main");
const config = require("../config/main.js");
const txt = require("../lang/"+config.adminLang+"/tag");
module.exports = (sequelize, DataTypes) =>
{
const Tag = sequelize.define('Tag',
{
name:
{
type:DataTypes.STRING(100), allowNull: false,
unique:
{
args: true,
msg: txt.needUniqueName
},
set(value) { this.setDataValue('name', tool.trimIfNotNull(striptags(value))); },
validate:
{
notNull: { msg: txt.needName },
len:
{
args: [1, 100],
msg: txt.needNotTooLongName
}
}
},
slug:
{
type: DataTypes.STRING(100), allowNull: false,
unique:
{
args: true,
msg: txt.needUniqueUrl
},
set(value)
{
value=tool.trimIfNotNull(striptags(value));
if(value!==null)
this.setDataValue("slug", slugify(value.substring(0,100), { lower:true, strict:true }));
else if(this.name!==null)
this.setDataValue("slug", slugify(this.name.substring(0,100), { lower:true, strict:true }));
},
validate:
{
notNull: { msg: txt.needUrl }
}
}
},
{
charset: "utf8mb4",
collate: "utf8mb4_unicode_ci"
});
Tag.associate = function(models)
{
Tag.belongsToMany(models.Questionnaire, { through: models.QuestionnaireClassification });
};
return Tag;
};