diff --git a/src/components/AgentTableFR.vue b/src/components/AgentTableFR.vue new file mode 100644 index 00000000..f2487da4 --- /dev/null +++ b/src/components/AgentTableFR.vue @@ -0,0 +1,553 @@ + + + diff --git a/src/components/AlertsIconFR.vue b/src/components/AlertsIconFR.vue new file mode 100644 index 00000000..ae1cedd8 --- /dev/null +++ b/src/components/AlertsIconFR.vue @@ -0,0 +1,184 @@ + + + diff --git a/src/components/FileBarFR.vue b/src/components/FileBarFR.vue new file mode 100644 index 00000000..f17b9907 --- /dev/null +++ b/src/components/FileBarFR.vue @@ -0,0 +1,401 @@ + + + diff --git a/src/components/SubTableTabsFR.vue b/src/components/SubTableTabsFR.vue new file mode 100644 index 00000000..4f57b3fc --- /dev/null +++ b/src/components/SubTableTabsFR.vue @@ -0,0 +1,220 @@ + + + diff --git a/src/components/accounts/ResetPassFR.vue b/src/components/accounts/ResetPassFR.vue new file mode 100644 index 00000000..a2b832c7 --- /dev/null +++ b/src/components/accounts/ResetPassFR.vue @@ -0,0 +1,75 @@ + + + diff --git a/src/components/agents/AgentActionMenuFR.vue b/src/components/agents/AgentActionMenuFR.vue new file mode 100644 index 00000000..1021f6cb --- /dev/null +++ b/src/components/agents/AgentActionMenuFR.vue @@ -0,0 +1,504 @@ + + + diff --git a/src/components/clients/DeploymentTableFR.vue b/src/components/clients/DeploymentTableFR.vue new file mode 100644 index 00000000..1524bc8b --- /dev/null +++ b/src/components/clients/DeploymentTableFR.vue @@ -0,0 +1,231 @@ + + + diff --git a/src/components/clients/NewDeploymentFR.vue b/src/components/clients/NewDeploymentFR.vue new file mode 100644 index 00000000..a7389a8a --- /dev/null +++ b/src/components/clients/NewDeploymentFR.vue @@ -0,0 +1,156 @@ + + + diff --git a/src/components/modals/agents/BulkActionFR.vue b/src/components/modals/agents/BulkActionFR.vue new file mode 100644 index 00000000..3a23ee1b --- /dev/null +++ b/src/components/modals/agents/BulkActionFR.vue @@ -0,0 +1,436 @@ + + + diff --git a/src/components/modals/alerts/AlertTemplateFormFR.vue b/src/components/modals/alerts/AlertTemplateFormFR.vue new file mode 100644 index 00000000..91fcf84a --- /dev/null +++ b/src/components/modals/alerts/AlertTemplateFormFR.vue @@ -0,0 +1,893 @@ + + + diff --git a/src/components/modals/core/ServerMaintenanceFR.vue b/src/components/modals/core/ServerMaintenanceFR.vue new file mode 100644 index 00000000..f74395e3 --- /dev/null +++ b/src/components/modals/core/ServerMaintenanceFR.vue @@ -0,0 +1,107 @@ + + + diff --git a/src/components/modals/coresettings/UserPreferencesFR.vue b/src/components/modals/coresettings/UserPreferencesFR.vue new file mode 100644 index 00000000..bab86740 --- /dev/null +++ b/src/components/modals/coresettings/UserPreferencesFR.vue @@ -0,0 +1,283 @@ + + + diff --git a/src/layouts/MainLayoutFR.vue b/src/layouts/MainLayoutFR.vue new file mode 100644 index 00000000..dbbf6524 --- /dev/null +++ b/src/layouts/MainLayoutFR.vue @@ -0,0 +1,344 @@ + + diff --git a/src/mixins/dataFR.js b/src/mixins/dataFR.js new file mode 100644 index 00000000..844e1230 --- /dev/null +++ b/src/mixins/dataFR.js @@ -0,0 +1,84 @@ +const scheduledTimes = [ + { label: "0h", value: 0 }, + { label: "1h", value: 1 }, + { label: "2h", value: 2 }, + { label: "3h", value: 3 }, + { label: "4h", value: 4 }, + { label: "5h", value: 5 }, + { label: "6h", value: 6 }, + { label: "7h", value: 7 }, + { label: "8h", value: 8 }, + { label: "9h", value: 9 }, + { label: "10h", value: 10 }, + { label: "11h", value: 11 }, + { label: "12h", value: 12 }, + { label: "13h", value: 13 }, + { label: "14h", value: 14 }, + { label: "15h", value: 15 }, + { label: "16h", value: 16 }, + { label: "17h", value: 17 }, + { label: "18h", value: 18 }, + { label: "19h", value: 19 }, + { label: "20h", value: 20 }, + { label: "21h", value: 21 }, + { label: "22h", value: 22 }, + { label: "23h", value: 23 }, +]; + +const monthDays = [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31", +]; + +const loadingBarColors = [ + "rouge", + "rose", + "violet", + "violet foncé", + "indigo", + "bleu", + "bleu clair", + "cyan", + "sarcelle", + "vert", + "vert clair", + "écru", + "jaune", + "ambre", + "orange", + "orange foncé", + "marron", + "gris", + "gris bleu", +]; + +export { scheduledTimes, monthDays, loadingBarColors }; diff --git a/src/mixins/mixinsFR.js b/src/mixins/mixinsFR.js new file mode 100644 index 00000000..f0219340 --- /dev/null +++ b/src/mixins/mixinsFR.js @@ -0,0 +1,237 @@ +import { Notify, date } from "quasar"; +import axios from "axios"; + +import { formatAgentOptions } from "@/utils/format"; + +function getTimeLapse(unixtime) { + var previous = unixtime * 1000; + var current = new Date(); + var msPerMinute = 60 * 1000; + var msPerHour = msPerMinute * 60; + var msPerDay = msPerHour * 24; + var msPerMonth = msPerDay * 30; + var msPerYear = msPerDay * 365; + var elapsed = current - previous; + if (elapsed < msPerMinute) { + return Math.round(elapsed / 1000) + " secondes"; + } else if (elapsed < msPerHour) { + return Math.round(elapsed / msPerMinute) + " minutes"; + } else if (elapsed < msPerDay) { + return Math.round(elapsed / msPerHour) + " heures"; + } else if (elapsed < msPerMonth) { + return Math.round(elapsed / msPerDay) + " jours"; + } else if (elapsed < msPerYear) { + return Math.round(elapsed / msPerMonth) + " mois"; + } else { + return Math.round(elapsed / msPerYear) + " ans"; + } +} + +export default { + methods: { + bootTime(unixtime) { + return getTimeLapse(unixtime); + }, + alertTime(unixtime) { + return getTimeLapse(unixtime); + }, + notifySuccess(msg, timeout = 2000) { + Notify.create({ + type: "positive", + message: msg, + timeout: timeout, + }); + }, + notifyError(msg, timeout = 2000) { + Notify.create({ + type: "negative", + message: msg, + timeout: timeout, + }); + }, + notifyWarning(msg, timeout = 2000) { + Notify.create({ + type: "warning", + message: msg, + timeout: timeout, + }); + }, + notifyInfo(msg, timeout = 2000) { + Notify.create({ + type: "info", + message: msg, + timeout: timeout, + }); + }, + + isValidThreshold(warning, error, diskcheck = false) { + if (warning === 0 && error === 0) { + Notify.create({ + type: "negative", + timeout: 2000, + message: "Warning Threshold or Error Threshold need to be set", + }); + return false; + } + + if (!diskcheck && warning > error && warning > 0 && error > 0) { + Notify.create({ + type: "negative", + timeout: 2000, + message: "Warning Threshold must be less than Error Threshold", + }); + return false; + } + + if (diskcheck && warning < error && warning > 0 && error > 0) { + Notify.create({ + type: "negative", + timeout: 2000, + message: "Warning Threshold must be more than Error Threshold", + }); + return false; + } + + return true; + }, + isValidEmail(val) { + const email = + /^(?=[a-zA-Z0-9@._%+-]{6,254}$)[a-zA-Z0-9._%+-]{1,64}@(?:[a-zA-Z0-9-]{1,63}\.){1,8}[a-zA-Z]{2,63}$/; + return email.test(val); + }, + unixToString(timestamp) { + if (!timestamp) return ""; + + let t = new Date(timestamp * 1000); + return date.formatDate(t, "MMM-D-YYYY - HH:mm"); + }, + dateStringToUnix(drfString) { + if (!drfString) return 0; + const d = date.extractDate(drfString, "MM DD YYYY HH:mm"); + return parseInt(date.formatDate(d, "X")); + }, + formatDjangoDate(drfString) { + if (!drfString) return ""; + const d = date.extractDate(drfString, "MM DD YYYY HH:mm"); + return date.formatDate(d, "MMM-DD-YYYY - HH:mm"); + }, + formatClientOptions(clients) { + return clients.map((client) => ({ + label: client.name, + value: client.id, + sites: client.sites, + })); + }, + formatSiteOptions(sites) { + return sites.map((site) => ({ label: site.name, value: site.id })); + }, + capitalize(string) { + return string[0].toUpperCase() + string.substring(1); + }, + getCustomFields(model) { + return axios.patch("/core/customfields/", { model: model }); + }, + getAgentCount(data, type, id) { + if (type === "client") { + return data.find((i) => id === i.id).agent_count; + } else { + const sites = data.map((i) => i.sites); + for (let i of sites) { + for (let k of i) { + if (k.id === id) return k.agent_count; + } + } + return 0; + } + }, + formatCustomFields(fields, values) { + let tempArray = []; + + for (let field of fields) { + if (field.type === "multiple") { + tempArray.push({ + multiple_value: values[field.name], + field: field.id, + }); + } else if (field.type === "checkbox") { + tempArray.push({ bool_value: values[field.name], field: field.id }); + } else { + tempArray.push({ string_value: values[field.name], field: field.id }); + } + } + return tempArray; + }, + async getScriptOptions(showCommunityScripts = false) { + let options = []; + const { data } = await axios.get("/scripts/"); + let scripts; + if (showCommunityScripts) { + scripts = data; + } else { + scripts = data.filter((i) => i.script_type !== "builtin"); + } + + let categories = []; + let create_unassigned = false; + scripts.forEach((script) => { + if (!!script.category && !categories.includes(script.category)) { + categories.push(script.category); + } else if (!script.category) { + create_unassigned = true; + } + }); + + if (create_unassigned) categories.push("Unassigned"); + + categories.sort().forEach((cat) => { + options.push({ category: cat }); + let tmp = []; + scripts.forEach((script) => { + if (script.category === cat) { + tmp.push({ + label: script.name, + value: script.id, + timeout: script.default_timeout, + args: script.args, + env_vars: script.env_vars, + }); + } else if (cat === "Unassigned" && !script.category) { + tmp.push({ + label: script.name, + value: script.id, + timeout: script.default_timeout, + args: script.args, + env_vars: script.env_vars, + }); + } + }); + const sorted = tmp.sort((a, b) => a.label.localeCompare(b.label)); + options.push(...sorted); + }); + + return options; + }, + async getAgentOptions(value_field = "agent_id") { + const { data } = await axios.get("/agents/?detail=false"); + + return formatAgentOptions(data, false, value_field); + }, + getNextAgentUpdateTime() { + const d = new Date(); + let ret; + if (d.getMinutes() <= 35) { + ret = d.setMinutes(35); + } else { + ret = date.addToDate(d, { hours: 1 }); + ret.setMinutes(35); + } + const a = date.formatDate(ret, "MMM D, YYYY"); + const b = date.formatDate(ret, "h:mm A"); + return `${a} at ${b}`; + }, + truncateText(txt) { + if (txt) return txt.length >= 60 ? txt.substring(0, 60) + "..." : txt; + else return ""; + }, + }, +}; diff --git a/src/views/DashboardViewFR.vue b/src/views/DashboardViewFR.vue new file mode 100644 index 00000000..cad1dd2a --- /dev/null +++ b/src/views/DashboardViewFR.vue @@ -0,0 +1,875 @@ + + + + +