536 lines
20 KiB
JavaScript
536 lines
20 KiB
JavaScript
// <editor-fold desc="LISTA AZIENDE" defaultstate="collapsed">
|
|
const _arr_aziende = [
|
|
{n: "agricoper"},
|
|
{n: "auricchio", sub: ["auricchio_miki"]},
|
|
{n: "biolevante"},
|
|
{n: "carelli", sub: ["chiuso", "gestfood", "murgia", "panimal", "format", "winact"]},
|
|
{n: "cosmapack"},
|
|
{n: "didesi"},
|
|
{n: "didonna"},
|
|
{n: "dolce_bo"},
|
|
{n: "dulciar"},
|
|
{n: "florapulia"},
|
|
{n: "folliesgroup"},
|
|
{n: "frudis"},
|
|
{n: "giovmaggio", sub: ["maggioSRL"]},
|
|
{n: "gramm"},
|
|
{n: "ime_te"},
|
|
{n: "ime_ba"},
|
|
{n: "lamonarca"},
|
|
{n: "levanplast"},
|
|
{n: "licor"},
|
|
{n: "loredana"},
|
|
{n: "maggioSRL"},
|
|
{n: "medsol"},
|
|
{n: "midel"},
|
|
{n: "morgante"},
|
|
{n: "mysrl"},
|
|
{n: "new_life"},
|
|
{n: "of_demo"},
|
|
{n: "produzione"},
|
|
{n: "risto_cash"},
|
|
{n: "rossogargano"},
|
|
{n: "sapori_veri", sub: ["dispensa"]},
|
|
{n: "smetar"},
|
|
{n: "suit", sub: ["santantonio", "carni_sardegna", "valpietro"]},
|
|
{n: "tosca_ce"},
|
|
{n: "tosca_ba"},
|
|
{n: "tosca_mi"},
|
|
{n: "tosca_rm"},
|
|
{n: "tosca_rg"},
|
|
{n: "tosca_vr"},
|
|
{n: "tosca_cz"},
|
|
{n: "tosca_fc"},
|
|
{n: "twobrothers"},
|
|
{n: "vgalimenti", sub: ["salpar"]},
|
|
{n: "vinella"}
|
|
];
|
|
// </editor-fold >
|
|
|
|
module.exports = function (grunt) {
|
|
grunt.initConfig({
|
|
pkg: grunt.file.readJSON("package.json"),
|
|
clean: {
|
|
tmp: {
|
|
src: ["exports/tmp/*", "!exports/tmp/assets", "!exports/tmp/vendor"]
|
|
},
|
|
default: {
|
|
src: ["exports"]
|
|
},
|
|
build: {
|
|
src: ["public_html/build", "public_html/build.json", "exports/**/scriptList.json"]
|
|
}
|
|
},
|
|
|
|
copy: copy_getValues(grunt),
|
|
|
|
compress: compress_getValues(),
|
|
|
|
rename: rename_export_folder_script(),
|
|
|
|
prompt: {
|
|
newmodule: {
|
|
options: {
|
|
questions: [
|
|
{
|
|
config: "moduleName", // arbitrary name or config for any other grunt task
|
|
type: "input", // list, checkbox, confirm, input, password
|
|
message: "ID modulo:", // Question to ask the user, function needs to return a string,
|
|
default: "", // default value if nothing is entered
|
|
validate: function (moduleID) {
|
|
if (typeof (moduleID) === "undefined" || !moduleID.length) {
|
|
return "Valore vuoto non ammesso";
|
|
} else {
|
|
moduleID = format_id(moduleID);
|
|
const moduleList = get_listModuli();
|
|
if (moduleID in moduleList) {
|
|
return "ID già esistente. Specificarne un altro";
|
|
}
|
|
//console.log(moduleList);
|
|
}
|
|
return true;
|
|
}
|
|
// choices: 'Array|function(answers)',
|
|
// validate: function(value), // return true if valid, error message if invalid. works only with type:input
|
|
// filter: function(value), // modify the answer
|
|
// when: function(answers) // only ask this question when this function returns true
|
|
},
|
|
{
|
|
config: "moduleTitle", // arbitrary name or config for any other grunt task
|
|
type: "input", // list, checkbox, confirm, input, password
|
|
message: "Titolo modulo:", // Question to ask the user, function needs to return a string,
|
|
default: "" // default value if nothing is entered
|
|
/*
|
|
validate: function(value){
|
|
if(typeof(value) === "undefined" || !value.length){
|
|
return "Valore vuoto non ammesso";
|
|
}
|
|
return true;
|
|
},*/
|
|
// choices: 'Array|function(answers)',
|
|
// validate: function(value), // return true if valid, error message if invalid. works only with type:input
|
|
// filter: function(value), // modify the answer
|
|
// when: function(answers) // only ask this question when this function returns true
|
|
}
|
|
],
|
|
then: function (results) {
|
|
const moduleName = format_id(results.moduleName);
|
|
let moduleTitle = results.moduleTitle;
|
|
if (moduleTitle.length === 0) {
|
|
moduleTitle = results.moduleName;
|
|
}
|
|
moduleTitle = ucwords(moduleTitle.replace("_", " ").toLowerCase());
|
|
const moduleNameCC = ucfirst(toCamelCase(moduleName));
|
|
|
|
// console.log(grunt.config("moduleName"));
|
|
|
|
grunt.config.set("mkdir.newmodule.options.create", ["public_html/gest-lib/" + moduleName]);
|
|
grunt.config.set("copy.newmodule_folder.dest", "public_html/gest-lib/" + moduleName);
|
|
|
|
grunt.config.set("copy.newmodule_homephp.files", [{
|
|
src: "public_html/empty_section.php",
|
|
dest: "public_html/" + moduleName + ".php"
|
|
}]);
|
|
grunt.config.set("rename.newmodule.files", [{
|
|
src: "public_html/gest-lib/" + moduleName + "/classes/EmptySection.class.php",
|
|
dest: "public_html/gest-lib/" + moduleName + "/classes/" + moduleNameCC + ".class.php"
|
|
}]);
|
|
|
|
|
|
const e = {};
|
|
e[moduleName] = {
|
|
title: moduleTitle,
|
|
pages: moduleName + ".php",
|
|
position: [],
|
|
children: [],
|
|
icon: "icon.png",
|
|
libs: ["std-pkg"],
|
|
requirePermission: true
|
|
};
|
|
grunt.config.set("merge-append-json.newmodule.append", e);
|
|
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"merge-append-json": {
|
|
newmodule: {
|
|
src: "public_html/config-menu.json",
|
|
append: {},
|
|
dest: "public_html/config-menu.json"
|
|
}
|
|
},
|
|
|
|
uglify: {
|
|
options: {
|
|
mangle: false
|
|
},
|
|
build: {
|
|
files: {
|
|
"public_html/dist/build/js/application.min.js": get_listScriptFile(),
|
|
"public_html/dist/build/js/login.min.js": get_listScriptFileLogin()
|
|
}
|
|
}
|
|
},
|
|
|
|
cssmin: {
|
|
options: {
|
|
mergeIntoShorthands: false,
|
|
roundingPrecision: -1
|
|
},
|
|
build: {
|
|
files: {
|
|
"public_html/build/css/main/main.min.css": [
|
|
"public_html/css/main/fonts.css",
|
|
"public_html/css/main/*.css",
|
|
],
|
|
"public_html/build/css/addons.min.css": ["public_html/css/addons/*.css"],
|
|
"public_html/build/css/login.min.css": ["public_html/css/main/layout.css", "public_html/css/addons/bootstrap-hooks.css"]
|
|
}
|
|
}
|
|
},
|
|
|
|
"file-creator": fileCreator_getValues()
|
|
});
|
|
|
|
grunt.loadNpmTasks("grunt-contrib-copy");
|
|
grunt.loadNpmTasks("grunt-contrib-clean");
|
|
grunt.loadNpmTasks("grunt-contrib-compress");
|
|
grunt.loadNpmTasks("grunt-open");
|
|
grunt.loadNpmTasks("grunt-prompt");
|
|
grunt.loadNpmTasks("grunt-contrib-rename");
|
|
grunt.loadNpmTasks("grunt-merge-append-json");
|
|
grunt.loadNpmTasks("grunt-contrib-cssmin");
|
|
grunt.loadNpmTasks("grunt-contrib-uglify");
|
|
grunt.loadNpmTasks("grunt-file-creator");
|
|
|
|
|
|
grunt.registerTask("build", "Salva file di build", function (arg1) {
|
|
const date = new Date();
|
|
const build = {
|
|
name: cleanName(arg1),
|
|
build: {
|
|
date: date.toLocaleString(),
|
|
timestamp: date.getTime()
|
|
}
|
|
};
|
|
grunt.file.write("public_html/build.json", JSON.stringify(build));
|
|
});
|
|
_arr_aziende.forEach(azienda => {
|
|
let nomeAzienda = azienda.n.toLowerCase();
|
|
grunt.registerTask(nomeAzienda, [
|
|
//"uglify",
|
|
//"cssmin",
|
|
//"copy:build_folder",
|
|
//"copy:assets",
|
|
"build:" + cleanName(nomeAzienda),
|
|
"copy:" + cleanName(nomeAzienda),
|
|
"file-creator:" + cleanName(nomeAzienda),
|
|
//"clean:build",
|
|
"compress:" + cleanName(nomeAzienda),
|
|
//"rename:" + cleanName(nomeAzienda),
|
|
"clean:tmp"
|
|
|
|
]);
|
|
});
|
|
|
|
const arr_taskBuildAll = [];
|
|
// arr_taskBuildAll.push("clean:default");
|
|
arr_taskBuildAll.push("uglify");
|
|
arr_taskBuildAll.push("cssmin");
|
|
arr_taskBuildAll.push("copy:build_folder");
|
|
arr_taskBuildAll.push("copy:assets");
|
|
arr_taskBuildAll.push("compress:assets");
|
|
|
|
_arr_aziende.forEach(item => {
|
|
const nomeAzienda = item.n.toLowerCase();
|
|
|
|
arr_taskBuildAll.push(nomeAzienda);
|
|
|
|
// arr_taskBuildAll.push("clean:tmp");
|
|
// arr_taskBuildAll.push("build:" + cleanName(nomeAzienda));
|
|
// arr_taskBuildAll.push("copy:" + cleanName(nomeAzienda));
|
|
// arr_taskBuildAll.push("file-creator:" + cleanName(nomeAzienda));
|
|
// arr_taskBuildAll.push("compress:" + cleanName(nomeAzienda));
|
|
// arr_taskBuildAll.push("rename:" + cleanName(nomeAzienda));
|
|
});
|
|
|
|
// arr_taskBuildAll.push("clean:build");
|
|
|
|
grunt.registerTask("BuildAll", arr_taskBuildAll);
|
|
|
|
grunt.registerTask("Nuovo modulo", ["prompt:newmodule", "copy:newmodule_folder", "copy:newmodule_homephp", "rename:newmodule", "merge-append-json:newmodule"]);
|
|
};
|
|
|
|
function format_id(s) {
|
|
return s.replace(/ /g, "_").toLowerCase();
|
|
}
|
|
|
|
function cleanName(s) {
|
|
return s.replace(/-/g, "");
|
|
}
|
|
|
|
function fileCreator_getValues() {
|
|
const ret = {};
|
|
|
|
const _getFunc = function (_nomeAzienda) {
|
|
return function (fs, fd, done) {
|
|
fs.writeSync(fd, _nomeAzienda);
|
|
done();
|
|
};
|
|
};
|
|
|
|
_arr_aziende.forEach(item => {
|
|
const nomeAzienda = cleanName(item.n).toUpperCase();
|
|
const nomeAziendaLower = nomeAzienda.toLowerCase();
|
|
const path = "exports/tmp/nome_azienda.txt";
|
|
ret[nomeAziendaLower] = {};
|
|
ret[nomeAziendaLower][path] = _getFunc(nomeAzienda);
|
|
});//log(ret)
|
|
return ret;
|
|
}
|
|
|
|
function compress_getValues() {
|
|
const ret = {};
|
|
_arr_aziende.forEach(azienda => {
|
|
const nomeAzienda = cleanName(azienda.n).toUpperCase();
|
|
const nomeAziendaLower = nomeAzienda.toLowerCase();
|
|
ret[nomeAziendaLower] = {
|
|
options: {archive: "exports/" + nomeAziendaLower + ".zip"},
|
|
expand: true,
|
|
cwd: "exports/tmp", // + nomeAzienda + "/",
|
|
src: ["**/*"],
|
|
dest: "/",
|
|
dot: true
|
|
};
|
|
});
|
|
|
|
ret["assets"] = {
|
|
options: {archive: "exports/_base.zip"},
|
|
expand: true,
|
|
cwd: "exports/_base",
|
|
src: ["**/*"],
|
|
dest: "/"
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
function rename_export_folder_script() {
|
|
const ret = {};
|
|
_arr_aziende.forEach(azienda => {
|
|
const nomeAzienda = cleanName(azienda.n).toUpperCase();
|
|
const nomeAziendaLower = nomeAzienda.toLowerCase();
|
|
ret[nomeAziendaLower] = {
|
|
src: "exports/tmp",
|
|
dest: "exports/" + nomeAziendaLower + "/"
|
|
};
|
|
});
|
|
return ret;
|
|
}
|
|
|
|
function get_listModuli() {
|
|
return require("./public_html/config-menu.json");
|
|
}
|
|
|
|
function log(v) {
|
|
console.log(v);
|
|
}
|
|
|
|
function get_listScriptFile() {
|
|
const root = "public_html/";
|
|
const arr_scripts = require("./" + root + "include/scriptList.json");
|
|
for (let i = 0; i < arr_scripts.length; i++) {
|
|
arr_scripts[i] = root + "dist/" + arr_scripts[i];
|
|
}
|
|
return arr_scripts;
|
|
}
|
|
|
|
function get_listScriptFileLogin() {
|
|
const root = "public_html/";
|
|
const arr_scripts = require("./" + root + "gest-lib/login/" + "include/scriptList.json");
|
|
for (let i = 0; i < arr_scripts.length; i++) {
|
|
arr_scripts[i] = root + "dist/" + arr_scripts[i];
|
|
}
|
|
return arr_scripts;
|
|
}
|
|
|
|
// <editor-fold desc="copy_getValues" defaultstate="collapsed">
|
|
function copy_getValues(grunt) {
|
|
const ret = {};
|
|
try {
|
|
const arr_systemFile = [
|
|
"config.php", "flushcache.php", "functions.php", "image.php", "download.php",
|
|
"include_login.php", "index.php", "logout.php", "obj-json-b64-codecs.php", "firebase-messaging-sw.js"
|
|
];
|
|
|
|
//const moduleList = get_listModuli();
|
|
|
|
_arr_aziende.forEach(azienda => {
|
|
const nomeAzienda = cleanName(azienda.n).toLowerCase();
|
|
const arr_profiles = [nomeAzienda];
|
|
if (typeof azienda.sub != "undefined") {
|
|
azienda.sub.forEach(profile => arr_profiles.push(profile));
|
|
}
|
|
|
|
//const arr_gestAzi = [];
|
|
|
|
//const data = require("./public_html/config_aziende/" + nomeAzienda.toUpperCase() + "/gestioni.json");
|
|
//data.forEach(gestione => arr_gestAzi.push(gestione.name));
|
|
|
|
//arr_gestAzi.push("tasks_launcher", "impostazioni", "index", "report_area", "associazione_report", "phpinfo", "login", "emailcheck", "user_settings", "messenger", "logs", "notifiche", "i18n", "weather", "allegati");
|
|
|
|
// Metto in build tutti i moduli
|
|
// const arr_moduleIDToCopy = [];
|
|
// for (const moduleID in moduleList) {
|
|
// if (!moduleList.hasOwnProperty(moduleID)) continue;
|
|
// if (arr_gestAzi.indexOf(moduleID) >= 0) {
|
|
// arr_moduleIDToCopy.push(moduleID);
|
|
//
|
|
// const module = moduleList[moduleID];
|
|
// if ("children" in module && module.children != null) {
|
|
// module.children.forEach(childModuleName => {
|
|
// if (arr_moduleIDToCopy.indexOf(childModuleName) < 0 && childModuleName in moduleList) {
|
|
// arr_moduleIDToCopy.push(childModuleName);
|
|
// }
|
|
// })
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
let arr_gestFileAzi = [];
|
|
// Object.entries(moduleList).forEach(([moduleID]) => {
|
|
// const module = moduleList[moduleID];
|
|
// const basename = moduleID.split("-")[0];
|
|
//
|
|
// // AGGIUNGE FILE PHP GESTIONE IN ROOT
|
|
// const page = module.pages.split("?")[0]; // es. "colli_aperti.php?spedizione" -> "colli_aperti.php", "spedizione"
|
|
// arr_gestFileAzi.push(page);
|
|
//
|
|
// // AGGIUNGE FILE SFUSI SPECIFICATI IN gestione.include
|
|
// if (typeof module.include != "undefined") {
|
|
// arr_gestFileAzi = arr_gestFileAzi.concat(module.include);
|
|
// }
|
|
//
|
|
// // AGGIUNGE DIRECTORY GESTIONI SOTTO gest-lib
|
|
// arr_gestFileAzi.push("gest-lib/" + basename + "/**");
|
|
//
|
|
// // NON COPIA SCSS IN gest-lib
|
|
// arr_gestFileAzi.push("!gest-lib/" + basename + "/scss/**");
|
|
|
|
// AGGIUNGE FILE CONFIGURAZIONE AZIENDA
|
|
arr_profiles.forEach(profile => {
|
|
//arr_gestFileAzi.push("!config_aziende/"+item.toUpperCase()+"/login-bg/**"); // non funziona
|
|
arr_gestFileAzi.push("config_aziende/" + profile.toUpperCase() + "/**");
|
|
arr_gestFileAzi.push("config_aziende/" + profile.toLowerCase() + ".config.json");
|
|
});
|
|
// });
|
|
|
|
arr_gestFileAzi.push("config_aziende/.htaccess");
|
|
|
|
let arr_copyValues = []; //["**", "!*.php", "!*.js", "!js/**", "!css/**", "!scss/**", "!assets/**", "!vendor/**", "!gest-lib/**", "!cache/**", "!config_aziende/**"];
|
|
|
|
//arr_copyValues = arr_copyValues.concat(arr_systemFile);
|
|
arr_copyValues = arr_copyValues.concat(arr_gestFileAzi);
|
|
//arr_copyValues.push("!**/old/**");
|
|
|
|
/*
|
|
arr_copyValues = a.filter(function(item, pos){ // rimuove eventuali doppioni
|
|
return a.indexOf(item) == pos;
|
|
});*/
|
|
|
|
ret[nomeAzienda] = {
|
|
files: [
|
|
{
|
|
cwd: "public_html",
|
|
src: arr_copyValues.concat("!**/*.js", "!**/*.ts"),
|
|
dest: "exports/tmp", // + nomeAzienda.toUpperCase(),
|
|
expand: true,
|
|
options: {timestamp: true}
|
|
},
|
|
{
|
|
cwd: "public_html",
|
|
src: arr_profiles.map(profile => `dist/config_aziende/${profile.toUpperCase()}/**`),
|
|
dest: "exports/tmp",
|
|
expand: true,
|
|
options: {timestamp: true}
|
|
}
|
|
]
|
|
};
|
|
});
|
|
|
|
ret["assets"] = {
|
|
cwd: "public_html",
|
|
src: ["**", "!config_aziende/**", "!js/**", "!scss/**", "!css/**", "!gest-lib/**/*.js", "!dist/config_aziende/**"],
|
|
dest: "exports/_base", // + nomeAzienda.toUpperCase(),
|
|
expand: true,
|
|
options: {timestamp: true}
|
|
};
|
|
|
|
ret.build_folder = {
|
|
cwd: "public_html/",
|
|
src: ["css/**", "!css/*/*.css", "!css/addons/**", "!**/*.css.map"],
|
|
dest: "public_html/build/",
|
|
expand: true,
|
|
options: {timestamp: true}
|
|
};
|
|
|
|
ret.newmodule_folder = {
|
|
cwd: "public_html/gest-lib/empty_section",
|
|
src: "**",
|
|
dest: "",
|
|
expand: true,
|
|
options: {
|
|
timestamp: true,
|
|
processContent: function (content, srcpath) { // nelle versioni piu recenti si chiama 'process'
|
|
const moduleNameCCLower = toCamelCase(format_id(grunt.config("moduleName")));
|
|
const moduleNameCC = ucfirst(moduleNameCCLower);
|
|
content = content.replace(/EmptySection/g, moduleNameCC);
|
|
content = content.replace(/emptySection/g, moduleNameCCLower);
|
|
return content;
|
|
}
|
|
}
|
|
};
|
|
|
|
ret.newmodule_homephp = {
|
|
options: {
|
|
expand: true,
|
|
flatten: true,
|
|
processContent: function (content, srcpath) { // nelle versioni piu recenti si chiama 'process'
|
|
const moduleName = format_id(grunt.config("moduleName"));
|
|
const moduleNameCC = ucfirst(toCamelCase(moduleName));
|
|
//console.log(moduleName+" "+moduleNameCC);
|
|
return content.replace(/EmptySection/i, moduleNameCC);
|
|
}
|
|
},
|
|
files: []
|
|
};
|
|
|
|
} catch (e) {
|
|
console.log(e.message);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
// </editor-fold>
|
|
|
|
function toCamelCase(s) {
|
|
return s.replace(/(\_[a-z])/g, function ($1) {
|
|
return $1.toUpperCase().replace("_", "");
|
|
});
|
|
}
|
|
|
|
function ucfirst(s) {
|
|
return s !== null ? s.charAt(0).toUpperCase() + s.slice(1) : null;
|
|
}
|
|
|
|
function ucwords(s) {
|
|
if (s !== null) {
|
|
s = s.toLowerCase();
|
|
return s.replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g,
|
|
function (s) {
|
|
return s.toUpperCase();
|
|
});
|
|
}
|
|
return null;
|
|
} |