Merge branch 'nmorin' into develop

pull/5/head
nmorin 3 years ago
commit e7964aa035

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,485 @@
/*!
* Bootstrap Reboot v5.1.3 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
:root {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg-rgb: 255, 255, 255;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-bg: #fff;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
background-color: currentColor;
border: 0;
opacity: 0.25;
}
hr:not([size]) {
height: 1px;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-bs-original-title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-left: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.2em;
background-color: #fcf8e3;
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: #0d6efd;
text-decoration: underline;
}
a:hover {
color: #0a58ca;
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
direction: ltr /* rtl:ignore */;
unicode-bidi: bidi-override;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: #d63384;
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.2rem 0.4rem;
font-size: 0.875em;
color: #fff;
background-color: #212529;
border-radius: 0.2rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
font-weight: 700;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: #6c757d;
text-align: left;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]::-webkit-calendar-picker-indicator {
display: none;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: left;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: left;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
/* rtl:raw:
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
}
::file-selector-button {
font: inherit;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,482 @@
/*!
* Bootstrap Reboot v5.1.3 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
:root {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg-rgb: 255, 255, 255;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-bg: #fff;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
background-color: currentColor;
border: 0;
opacity: 0.25;
}
hr:not([size]) {
height: 1px;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-bs-original-title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-right: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-right: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.2em;
background-color: #fcf8e3;
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: #0d6efd;
text-decoration: underline;
}
a:hover {
color: #0a58ca;
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
direction: ltr ;
unicode-bidi: bidi-override;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: #d63384;
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.2rem 0.4rem;
font-size: 0.875em;
color: #fff;
background-color: #212529;
border-radius: 0.2rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
font-weight: 700;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: #6c757d;
text-align: right;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]::-webkit-calendar-picker-indicator {
display: none;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: right;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: right;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
}
::file-selector-button {
font: inherit;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,18 +1,28 @@
/* Style concernant la confirmation de suppression d'un alias virtuel */ /* Style concernant la confirmation de suppression d'un alias virtuel */
.confirmation-suppression { .confirmation-suppression {
display: none; display: none;
color: #e23026; color: #fff;
text-align: center;
text-decoration: none;
background-color: #dc3545;
} }
.confirmation-suppression:hover {
color: #fff;
background-color: #bb2d3b;
border-color: #b02a37;
}
.input-checkbox-supprimer-valeur:checked ~ .confirmation-suppression { .input-checkbox-supprimer-valeur:checked ~ .confirmation-suppression {
display: inline; display: inline;
} }
.input-label-supprimer-valeur { /*.input-label-supprimer-valeur {
color: #ffffff; color: #ffffff;
background: #e23026; background: #e23026;
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
border-radius: 0.5rem; border-radius: 0.5rem;
} }*/
.visuellement-cache { .visuellement-cache {
position: absolute; position: absolute;

@ -0,0 +1,49 @@
.champ-interrupteur {
display: flex;
overflow: hidden;
}
.champ-interrupteur input {
position: absolute !important;
clip: rect(0, 0, 0, 0);
height: 1px;
width: 1px;
border: 0;
overflow: hidden;
}
.champ-interrupteur label {
background-color: #e4e4e4;
border: 1px solid rgba(0, 0, 0, 0.2);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1);
transition: all 0.1s ease-in-out;
width: 38px;
height: 34px;
}
.champ-interrupteur label:hover {
cursor: pointer;
}
.champ-interrupteur input:checked + .interrupteur-allumer {
background-color: #0d6efd;
box-shadow: none;
}
.champ-interrupteur input:checked + .interrupteur-eteint {
background-color: #dc3545;
box-shadow: none;
}
.champ-interrupteur label:first-of-type {
border-radius: 4px 0 0 4px;
}
.champ-interrupteur label:last-of-type {
border-radius: 0 4px 4px 0;
}
.champ-interrupteur.disabled {
pointer-events: none;
opacity: .65;
}

@ -0,0 +1,76 @@
body {
background-color: #eee;
margin-bottom: 100px;
}
#contenu_auth {
max-width: 380px;
margin: auto;
}
#contenu_auth #envoyer {
width: 100%;
}
#logo-accueil {
text-align: center;
margin: 50px;
}
#logo-accueil img {
width: 200px;
}
#logo-accueil h1 {
color: #FFF;
font-size: 40pt;
}
.alert img {
height: 1.5em;
margin-right: 0.3em;
}
.alert {
padding: 10px;
}
.bouton-flotant {
position: fixed;
bottom: 20px;
right: 20px;
background-color: #0d6efd;
color: white;
border-radius: 50%;
width: 60px;
height: 60px;
border: 2px solid #0d6efd;
}
.contour-pastille {
margin-top: 5px;
}
.interieur-pastille {
margin: 10px;
}
.titre-pastille {
width: calc(100% - 122px);
text-align: center;
padding-top: 4px;
padding-left: 10px;
padding-right: 10px;
}
.bouton-ajout{
padding: .375rem .475rem;
}
.alert {
margin-bottom: 0;
}
.interieur-pastille-bleu {
background-color: #cfe2ff;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -7,21 +7,21 @@
**/ **/
function filtreValeurs() { function filtreValeurs() {
// Déclaration des variables // Déclaration des variables
var input, filter, ul, li, a, i, txtValue; var input, filter, divgroupe, divunitaire, a, i, txtValue;
input = document.getElementById('nom_pour_filtre'); input = document.getElementById('nom_pour_filtre');
filter = input.value.toUpperCase(); filter = input.value.toUpperCase();
ul = document.getElementById("liste_pour_filtre"); divgroupe = document.getElementById("liste_pour_filtre");
li = ul.getElementsByTagName('li'); divunitaire = divgroupe.getElementsByClassName('col-md-6');
// Pour chaque "<li>", comparer le contenu (actualisé à chaque frappe) du "<input>" "nom_alias" avec le texte du "<p>" qu'il contient // Pour chaque "divunitaire", comparer le contenu (actualisé à chaque frappe) du "<input>" "nom_alias" avec le texte du "<p>" qu'il contient
// Si le contenu du champ de texte est vide, n'en masquer aucun. Si le motif correspond, masquer les autres // Si le contenu du champ de texte est vide, n'en masquer aucun. Si le motif correspond, masquer les autres
for (i = 0; i < li.length; i++) { for (i = 0; i < divunitaire.length; i++) {
a = li[i].getElementsByTagName("p")[0]; a = divunitaire[i].getElementsByTagName("span")[0];
txtValue = a.textContent || a.innerText; txtValue = a.textContent || a.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) { if (txtValue.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = ""; divunitaire[i].style.display = "";
} else { } else {
li[i].style.display = "none"; divunitaire[i].style.display = "none";
} }
} }
} }

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#664d03" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-triangle"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>

After

Width:  |  Height:  |  Size: 419 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#842029" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-triangle"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>

After

Width:  |  Height:  |  Size: 419 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0f5132" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-check-circle"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>

After

Width:  |  Height:  |  Size: 323 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-corner-down-right"><polyline points="15 10 20 15 15 20"></polyline><path d="M4 4v7a4 4 0 0 0 4 4h12"></path></svg>

After

Width:  |  Height:  |  Size: 318 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#084298" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-info"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>

After

Width:  |  Height:  |  Size: 342 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>

After

Width:  |  Height:  |  Size: 371 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>

After

Width:  |  Height:  |  Size: 354 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-plus"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>

After

Width:  |  Height:  |  Size: 296 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-save"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"></path><polyline points="17 21 17 13 7 13 7 21"></polyline><polyline points="7 3 7 8 15 8"></polyline></svg>

After

Width:  |  Height:  |  Size: 384 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-send"><line x1="22" y1="2" x2="11" y2="13"></line><polygon points="22 2 15 22 11 13 2 9 22 2"></polygon></svg>

After

Width:  |  Height:  |  Size: 309 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#FFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trash-2"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line></svg>

After

Width:  |  Height:  |  Size: 440 B

@ -1,37 +1,60 @@
<?php <?php
/** /**
* Page importé intégrant le menu de navigation dans la page d'administration centrale. * Page importé intégrant le menu de navigation dans la page d'administration centrale.
*/ */
echo <<<_HEREDOC_ if (isset($_GET['page']) && !empty($_GET['page'])) {
<div> ?>
<table>
<tr>
<td><a href="/pages/gestion/administration.php?page=accueil">Courtail</a></td>
<td><a href="/pages/gestion/administration.php?page=alias">Alias</a></td>
_HEREDOC_;
if (testPrivileges()=="administrateur") {
echo <<<_HEREDOC_
<td><a href="/pages/gestion/administration.php?page=domaines">Domaines</a></td>
<td><a href="/pages/gestion/administration.php?page=listes_noires">Listes noires</a></td>
_HEREDOC_;
}
echo <<<_HEREDOC_
<td><a href="/pages/gestion/administration.php?page=parametres">Paramètres</a></td>
<td><a href="/services/traitements/utilisateurs/deconnexion.php">Déconnexion</a></td>
</tr>
</table>
</div>
_HEREDOC_;
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #343a40;">
<div class="container-fluid">
<a class="navbar-brand" href="/pages/gestion/administration.php?page=accueil">Courtail</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link <?php if ($_GET['page'] == 'accueil' || $_GET['page'] == 'alias') {echo 'active';} ?>" href="/pages/gestion/administration.php?page=alias">Alias</a>
</li>
<?php if (testPrivileges()=="administrateur") { ?>
<li class="nav-item">
<a class="nav-link <?php if ($_GET['page'] == 'domaines') {echo 'active';} ?>" href="/pages/gestion/administration.php?page=domaines">Domaines</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="/pages/gestion/administration.php?page=listes_noires&sousPage=destinataires" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Listes noires
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="/pages/gestion/administration.php?page=listes_noires&sousPage=destinataires">Destinataires</a></li>
<li><a class="dropdown-item" href="/pages/gestion/administration.php?page=listes_noires&sousPage=expediteurs">Expéditeurs</a></li>
</ul>
</li>
<?php } ?>
</ul>
</div>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link <?php if ($_GET['page'] == 'parametres') {echo 'active';} ?>" href="/pages/gestion/administration.php?page=parametres">Paramètres</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/services/traitements/utilisateurs/deconnexion.php">Déconnexion</a>
</li>
</ul>
</div>
</div>
</nav>
if (isset($_GET['message']) && !empty($_GET['message'])) { <?php
}
/*if (isset($_GET['message']) && !empty($_GET['message'])) {
switch ($_GET['message']) { switch ($_GET['message']) {
case "bienvenue": case "bienvenue":
echo "<p class=\"messages_retour_ko\">Bienvenue ".$_SESSION['nom_utilisateur'].". Vous êtes authentifié en tant qu'".$_SESSION['privilege_utilisateur'].".</p>"; echo "<div class=\"alert alert-success\" role=\"alert\">Bienvenue ".$_SESSION['nom_utilisateur'].". Vous êtes authentifié en tant qu'".$_SESSION['privilege_utilisateur'].".</div>";
break; break;
} }
} }*/
?> ?>

@ -2,9 +2,12 @@
<html lang="fr"> <html lang="fr">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Courtail - Portail des courriels</title> <title>Courtail - Portail des courriels</title>
<link href="/fichiers/css/bootstrap.css" rel="stylesheet"> <link href="/fichiers/css/bootstrap.min.css" rel="stylesheet">
<link href="/fichiers/css/confirmation.css" rel="stylesheet"> <link href="/fichiers/css/confirmation.css" rel="stylesheet">
<link href="/fichiers/css/personalisation.css" rel="stylesheet">
<link href="/fichiers/css/interrupteurs.css" rel="stylesheet">
<link rel="icon" href="/fichiers/images/favicon.ico" /> <link rel="icon" href="/fichiers/images/favicon.ico" />
</head> </head>
<body> <body>

@ -1,3 +1,3 @@
<script src="/fichiers/js/bootstrap.js"></script> <script src="/fichiers/js/bootstrap.bundle.min.js"></script>
</body> </body>
</html> </html>

@ -1,31 +0,0 @@
-- Alias (ne doivent pas apparaître)
INSERT INTO postfix_alias (alias,destination,active) VALUES ("toto","test1",1);
INSERT INTO postfix_alias (alias,destination,active) VALUES ("tata","test2",0);
INSERT INTO postfix_alias (alias,destination,active) VALUES ("titi","test3",1);
-- Alias virtuels
INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES ("toto@toto.fr","comptable@toto.fr",1);
INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES ("toto@toto.fr","medecin@toto.fr",0);
INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES ("toto@toto.fr","supermacher@toto.fr",1);
INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES ("tata@toto.fr","fleuriste@toto.fr",0);
INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES ("tata@toto.fr","coiffeur@toto.fr",0);
INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES ("titi@toto.fr","promos@toto.fr",1);
-- Domaines secondaires
INSERT INTO postfix_domaines (domaine,active,defaut) VALUES ("toto.fr",1,1);
INSERT INTO postfix_domaines (domaine,active) VALUES ("tata.fr",1);
INSERT INTO postfix_domaines (domaine,active) VALUES ("titi.fr",0);
-- Listes noires destinataires
INSERT INTO postfix_liste_noire_destinataires (courriel,action,active) VALUES ("root@mail.exemple.fr","REJECT",1);
INSERT INTO postfix_liste_noire_destinataires (courriel,action,active) VALUES ("git@mail.exemple.fr","REJECT",1);
INSERT INTO postfix_liste_noire_destinataires (courriel,action,active) VALUES ("liste@mail.exemple.fr","REJECT",1);
-- Listes noires expéditeurs
INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES ("tata@toto.fr",554,"Parle à ma main, ma tête est malade.",0);
INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES ("bob@titi.fr",554,"Parle à ma main, ma tête est malade.",1);
INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES ("roland@tata.fr",554,"Parle à ma main, ma tête est malade.",1);
-- Listes utilisateurs
INSERT INTO postfix_utilisateurs (utilisateur,mot_de_passe,nom_complet,uid,gid,privilege,active) VALUES ("toto","toto","Alphonse Pastacaisse",5000,5000,"administrateur",1);
INSERT INTO postfix_utilisateurs (utilisateur,mot_de_passe,nom_complet,uid,gid,privilege, active) VALUES ("tata", "tata", "Jonathan Quesquiestjaune", 5000, 5000, "utilisateur", 1);

@ -2,11 +2,15 @@
chemin_script=$(dirname "$0") chemin_script=$(dirname "$0")
mkdir -p /etc/postfix/db mkdir -p /etc/postfix/bdd
rm -f /etc/postfix/db/postfix.sqlite rm -f /etc/postfix/bdd/postfix.sqlite
# Création des tables # Création des tables
sqlite3 /etc/postfix/db/postfix.sqlite < "${chemin_script}"/postfix.sql echo "CREATION TABLES"
sqlite3 /etc/postfix/bdd/postfix.sqlite < "${chemin_script}"/postfix_tables.sql
# Création des données # Création des données
sqlite3 /etc/postfix/db/postfix.sqlite < "${chemin_script}"/données.sql echo "CREATION DONNÉES"
sqlite3 /etc/postfix/bdd/postfix.sqlite < "${chemin_script}"/postfix_données.sql
chown -R www-data: /etc/postfix/bdd

@ -0,0 +1,34 @@
-- Alias (ne doivent pas apparaître)
INSERT INTO postfix_alias (alias,destination,active) VALUES ("toto","test1",1);
INSERT INTO postfix_alias (alias,destination,active) VALUES ("tata","test2",0);
INSERT INTO postfix_alias (alias,destination,active) VALUES ("titi","test3",1);
-- Alias virtuels
INSERT INTO postfix_alias_virtuels (destination,courriel,active) VALUES ("toto@exemple.fr","comptable@exemple.fr",1);
INSERT INTO postfix_alias_virtuels (destination,courriel,active) VALUES ("toto@exemple.fr","medecin@exemple.fr",0);
INSERT INTO postfix_alias_virtuels (destination,courriel,active) VALUES ("toto@exemple.fr","supermacher@exemple.fr",1);
INSERT INTO postfix_alias_virtuels (destination,courriel,active) VALUES ("tata@exemple.fr","fleuriste@exemple.fr",0);
INSERT INTO postfix_alias_virtuels (destination,courriel,active) VALUES ("tata@exemple.fr","coiffeur@exemple.fr",0);
INSERT INTO postfix_alias_virtuels (destination,courriel,active) VALUES ("titi@exemple.fr","promos@exemple.fr",1);
-- Domaines secondaires
INSERT INTO postfix_domaines (domaine,active,defaut) VALUES ("toto.fr",1,0);
INSERT INTO postfix_domaines (domaine,active,defaut) VALUES ("tata.fr",1,0);
INSERT INTO postfix_domaines (domaine,active,defaut) VALUES ("titi.fr",0,0);
-- Listes noires destinataires
INSERT INTO postfix_liste_noire_destinataires (courriel,action,active) VALUES ("root@mail.exemple.fr","REJECT",1);
INSERT INTO postfix_liste_noire_destinataires (courriel,action,active) VALUES ("git@mail.exemple.fr","REJECT",1);
INSERT INTO postfix_liste_noire_destinataires (courriel,action,active) VALUES ("liste@mail.exemple.fr","REJECT",1);
-- Listes noires expéditeurs
INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES ("tata@exemple.fr",554,"Parle à ma main, ma tête est malade.",0);
INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES ("bob@titi.fr",554,"Parle à ma main, ma tête est malade.",1);
INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES ("roland@tata.fr",554,"Parle à ma main, ma tête est malade.",1);
-- Listes utilisateurs
INSERT INTO postfix_utilisateurs (utilisateur,mot_de_passe,nom_complet,rep_perso,uid,gid,privilege,active) VALUES ("toto@exemple.fr","{SHA512-CRYPT}$6$xWfisyC6fLawFcBr$zLm4hfRfs6Pn0RKArnyWcgliBy6lpnRUkDHfHMkvskShfLiv4pRIU6XC5ry0ysd.DeKhoAiZUfnNdmwIai2k50","Toto
Dupont","exemple.fr/toto/",3000,3000,"administrateur",1);
INSERT INTO postfix_utilisateurs (utilisateur,mot_de_passe,nom_complet,rep_perso,uid,gid,privilege,prefixe,active) VALUES ("tata@exemple.fr","{SHA512-CRYPT}$6$xWfisyC6fLawFcBr$zLm4hfRfs6Pn0RKArnyWcgliBy6lpnRUkDHfHMkvskShfLiv4pRIU6XC5ry0ysd.DeKhoAiZUfnNdmwIai2k50","Toto
Dupont","exemple.fr/tata/",3000,3000,"utilisateur","ta.",1)

@ -6,14 +6,14 @@ CREATE TABLE IF NOT EXISTS postfix_alias (
); );
CREATE TABLE IF NOT EXISTS postfix_alias_virtuels ( CREATE TABLE IF NOT EXISTS postfix_alias_virtuels (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
courriel TEXT NOT NULL, courriel TEXT NOT NULL UNIQUE,
destination TEXT NOT NULL, destination TEXT NOT NULL,
active INTEGER active INTEGER
); );
CREATE TABLE IF NOT EXISTS postfix_domaines ( CREATE TABLE IF NOT EXISTS postfix_domaines (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
domaine TEXT NOT NULL UNIQUE, domaine TEXT NOT NULL UNIQUE,
defaut INTEGER UNIQUE, defaut BOOLEAN NOT NULL CHECK (defaut IN (0, 1)),
active INTEGER active INTEGER
); );
CREATE TABLE IF NOT EXISTS postfix_liste_noire_destinataires ( CREATE TABLE IF NOT EXISTS postfix_liste_noire_destinataires (
@ -29,13 +29,15 @@ CREATE TABLE IF NOT EXISTS postfix_liste_noire_expediteurs (
message TEXT NOT NULL, message TEXT NOT NULL,
active INTEGER active INTEGER
); );
CREATE TABLE IF NOT EXISTS postfix_utilisateurs ( CREATE TABLE postfix_utilisateurs (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
utilisateur TEXT NOT NULL UNIQUE, utilisateur TEXT NOT NULL UNIQUE,
mot_de_passe TEXT NOT NULL, mot_de_passe TEXT NOT NULL,
nom_complet TEXT, nom_complet TEXT,
rep_perso TEXT NOT NULL,
uid INTEGER NOT NULL, uid INTEGER NOT NULL,
gid INTEGER NOT NULL, gid INTEGER NOT NULL,
privilege TEXT NOT NULL, privilege TEXT NOT NULL,
prefixe TEXT,
active INTEGER active INTEGER
); );

@ -6,10 +6,10 @@
*/ */
session_start(); session_start();
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
testPrivileges(); testPrivileges();
require_once ($_SERVER["DOCUMENT_ROOT"]."/inclusions/entete.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/inclusions/entete.php");
require_once ($_SERVER["DOCUMENT_ROOT"]."/inclusions/barre_menu.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/inclusions/barre_menu.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/messages/messages.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/messages/messages.php");
@ -22,6 +22,11 @@ if (isset($_GET['erreur']) && !empty($_GET['erreur'])) {
elseif (isset($_GET['succes']) && !empty($_GET['succes'])) { elseif (isset($_GET['succes']) && !empty($_GET['succes'])) {
retourneMessage('succes',$_GET['succes']); retourneMessage('succes',$_GET['succes']);
} }
elseif (isset($_GET['message']) && !empty($_GET['message'])) {
retourneMessage('messages',$_GET['message']);
}
echo "<div class=\"container-fluid\">";
/** /**
* Permet d'importer les fonctions de la page demandée par l'utilisateur sur le portail d'administration. * Permet d'importer les fonctions de la page demandée par l'utilisateur sur le portail d'administration.
@ -53,6 +58,8 @@ else {
echo "<h1>Cette page n'existe pas.</h1>"; echo "<h1>Cette page n'existe pas.</h1>";
} }
echo "</div>";
require_once($_SERVER["DOCUMENT_ROOT"]."/inclusions/pied.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/inclusions/pied.php");
?> ?>

@ -6,7 +6,7 @@
* Elle ajoute à cette redirection un temps d'attente pour limiter la fréquence des tentatives ainsi qu'une variable dans l'URL permettant l'affichage d'un message d'explication sur la redirection. * Elle ajoute à cette redirection un temps d'attente pour limiter la fréquence des tentatives ainsi qu'une variable dans l'URL permettant l'affichage d'un message d'explication sur la redirection.
*/ */
header ("Refresh: 5;URL=/pages/visiteurs/formulaire_accueil.php?erreur=1"); header ("Refresh: 5;URL=/pages/visiteurs/formulaire_accueil.php?erreur=17");
?> ?>
@ -24,7 +24,7 @@ header ("Refresh: 5;URL=/pages/visiteurs/formulaire_accueil.php?erreur=1");
font-family: sans-serif; font-family: sans-serif;
font-size: 40px; font-size: 40px;
color: #FFF; color: #FFF;
background-color: #1F527D; background-color: #343a40;
text-align: center; } text-align: center; }
.chargements{ .chargements{

@ -1,48 +1,56 @@
<!-- Page d'accueil du portail. <?php
-- Impose une authentification du visiteur pour continuer.
-- Redirige les tentative d'identification pour traitement et test de légitimité. /**
--> * Page d'accueil du portail.
* Impose une authentification du visiteur pour continuer.
<div id="contenu" class="contenu"> * Redirige les tentative d'identification pour traitement et test de légitimité.
<div id="contenu_auth"> */
</br>
<table id="authentification"> require_once($_SERVER["DOCUMENT_ROOT"]."/inclusions/entete.php");
<form method="post" action="/services/traitements/utilisateurs/identification.php"> require_once($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/messages/messages.php");
<tr>
<td><label for="identifiant">Votre nom d'utilisateur :</label><br/></td>
<td><input type="email" name="identifiant" id="identifiant" required/></td>
</tr>
<tr>
<td><label for="mdp">Votre mot de passe :</label><br/></td>
<td><input type="password" name="mdp" id="mdp" required/></td>
</tr>
<tr>
<td><input class="envoyer" type="submit" value="envoyer"/></td>
</tr>
</form>
</table>
?>
<div id="contenu" class="contenu container">
<div id="logo-accueil" class="logo">
<img src="/fichiers/svg/send.svg" alt="courriel">
<h1>Courtail</h1>
</div>
<div class="card" id="contenu_auth">
<div class="card-body">
<?php <?php
if (isset($_GET['erreur']) && !empty($_GET['erreur'])){ /**
switch ($_GET['erreur']) { * Affichage d'une bannière d'état sur l'action précedemment effectuée.
case 1: */
echo "<p class=\"messages_retour_ko\">Identifiant ou mot de passe incorrecte.</p>"; if (isset($_GET['erreur']) && !empty($_GET['erreur'])) {
break; retourneMessage('erreurs',$_GET['erreur']);
case 2:
echo "<p class=\"messages_retour_ko\">Vous n'avez pas les privilèges nécessaires.</p>";
break;
}
}
elseif (isset($_GET['succes']) && !empty($_GET['succes'])){
switch ($_GET['succes']) {
case 1:
echo "<p class=\"messages_retour_ok\">Vous avez bien été déconnecté.</p>";
break;
} }
elseif (isset($_GET['succes']) && !empty($_GET['succes'])) {
retourneMessage('succes',$_GET['succes']);
} }
?> ?>
<form method="post" action="/services/traitements/utilisateurs/identification.php">
<div class="form-floating mb-3 mt-3">
<input type="email" name="identifiant" class="form-control" id="identifiant" placeholder="nom@example.fr" required/>
<label for="identifiant">Votre nom d'utilisateur</label>
</div>
<div class="form-floating mb-3">
<input type="password" name="mdp" class="form-control" id="mdp" placeholder="Mot de passe" required/>
<label for="mdp">Votre mot de passe</label>
</div>
<button id="envoyer" type="submit" class="btn btn-primary">envoyer</button>
</form>
</div>
</div> </div>
</div> </div>
<script>
const body = document.querySelector('body');
body.style.backgroundColor = '#343a40';
</script>
<?php
require_once($_SERVER["DOCUMENT_ROOT"]."/inclusions/pied.php");
?>

@ -32,7 +32,7 @@ function retournePrefixeUtilisateurPostfix($pdo) {
function listeAliasVirtuelsPostfix($pdo) { function listeAliasVirtuelsPostfix($pdo) {
try { try {
// Filtre des alias virtuels de l'utilisateur courant // Filtre des alias virtuels de l'utilisateur courant
$req = 'SELECT * FROM postfix_alias_virtuels WHERE destination=:destination'; $req = 'SELECT * FROM postfix_alias_virtuels WHERE destination=:destination ORDER BY courriel ASC';
$sql=$pdo->prepare($req); $sql=$pdo->prepare($req);
$sql->bindValue(':destination',$_SESSION['pseudo_utilisateur']); $sql->bindValue(':destination',$_SESSION['pseudo_utilisateur']);
$sql->execute(); $sql->execute();
@ -55,7 +55,7 @@ function ajoutAliasVirtuelsPostfix($pdo,$nom_alias_virtuel,$choix_domaine_alias_
$sql=$pdo->prepare($req); $sql=$pdo->prepare($req);
$sql->bindValue(':courriel',$_SESSION['pseudo_utilisateur']); $sql->bindValue(':courriel',$_SESSION['pseudo_utilisateur']);
$sql->bindValue(':alias_virtuel',substr(htmlspecialchars(retournePrefixeUtilisateurPostfix($pdo).$nom_alias_virtuel."@".$choix_domaine_alias_virtuel),0,49)); $sql->bindValue(':alias_virtuel',substr(htmlspecialchars(retournePrefixeUtilisateurPostfix($pdo).$nom_alias_virtuel."@".$choix_domaine_alias_virtuel),0,100));
$sql->execute(); $sql->execute();
if ($sql->rowCount() == 1){ if ($sql->rowCount() == 1){

@ -34,8 +34,17 @@ function retourneDomaineDefautPostfix($pdo) {
$sql=$pdo->prepare($req); $sql=$pdo->prepare($req);
$sql->execute(); $sql->execute();
$domaine_defaut = $sql->fetchAll(); $result = $sql ->fetchAll(PDO::FETCH_ASSOC);
return $domaine_defaut[0]['domaine']; $comptage = count($result);
if($comptage == 1){
$domaine_defaut = $result;
return $domaine_defaut[0]['domaine'];;
}
else {
$domaine_defaut = "";
return $domaine_defaut;
}
} }
catch (\Exception $e) { catch (\Exception $e) {
die ("Erreur de requête de selection des domaines pour \"$base\" : ".$e->getMessage()); die ("Erreur de requête de selection des domaines pour \"$base\" : ".$e->getMessage());
@ -88,7 +97,7 @@ function ajoutDomainePostfix($pdo,$nom_domaine) {
$req='INSERT INTO postfix_domaines (domaine,defaut,active) VALUES (:domaine,0,1)'; $req='INSERT INTO postfix_domaines (domaine,defaut,active) VALUES (:domaine,0,1)';
$sql=$pdo->prepare($req); $sql=$pdo->prepare($req);
$sql->bindValue(':domaine',substr(htmlspecialchars($nom_domaine),0,49)); $sql->bindValue(':domaine',substr(htmlspecialchars($nom_domaine),0,100));
$sql->execute(); $sql->execute();
if ($sql->rowCount() == 1){ if ($sql->rowCount() == 1){

@ -51,7 +51,7 @@ function ajoutEntreeListeNoireDstPostfix($pdo,$courriel_entree_liste_noire_dst,$
// Insertion de l'entrée de liste noire de destinataires renseignée par l'administrateur // Insertion de l'entrée de liste noire de destinataires renseignée par l'administrateur
$req='INSERT INTO postfix_liste_noire_destinataires (courriel,action,active) VALUES (:courriel,:action,1)'; $req='INSERT INTO postfix_liste_noire_destinataires (courriel,action,active) VALUES (:courriel,:action,1)';
$sql=$pdo->prepare($req); $sql=$pdo->prepare($req);
$sql->bindValue(':courriel',substr(htmlspecialchars($courriel_entree_liste_noire_dst),0,49)); $sql->bindValue(':courriel',substr(htmlspecialchars($courriel_entree_liste_noire_dst),0,100));
$sql->bindValue(':action',$action_entree_liste_noire_dst); $sql->bindValue(':action',$action_entree_liste_noire_dst);
$sql->execute(); $sql->execute();
@ -92,7 +92,7 @@ function ajoutEntreeListeNoireExpPostfix($pdo,$courriel_entree_liste_noire_exp,$
// Insertion de l'entrée de liste noire d'expéditeurs renseignée par l'administrateur // Insertion de l'entrée de liste noire d'expéditeurs renseignée par l'administrateur
$req='INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES (:courriel,:code_retour,"Votre message a été rejeté par le serveur car votre adresse est en liste noire.",1)'; $req='INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES (:courriel,:code_retour,"Votre message a été rejeté par le serveur car votre adresse est en liste noire.",1)';
$sql=$pdo->prepare($req); $sql=$pdo->prepare($req);
$sql->bindValue(':courriel',substr(htmlspecialchars($courriel_entree_liste_noire_exp),0,49)); $sql->bindValue(':courriel',substr(htmlspecialchars($courriel_entree_liste_noire_exp),0,100));
$sql->bindValue(':code_retour',$code_retour_entree_liste_noire_exp); $sql->bindValue(':code_retour',$code_retour_entree_liste_noire_exp);
$sql->execute(); $sql->execute();

@ -4,43 +4,67 @@
* Fonction affichant les messages de retour des traitements site lorsqu'elle est interrogée. * Fonction affichant les messages de retour des traitements site lorsqu'elle est interrogée.
*/ */
function retourneMessage($type_message,$num_message) { function retourneMessage($type_message,$num_message) {
if ($type_message=="succes" || $type_message=="erreurs" || $type_message=="messages") {
if (isset($_SESSION) && !empty($_SESSION['pseudo_utilisateur']) || !empty($_SESSION['nom_utilisateur']) || !empty($_SESSION['privilege_utilisateur'])) {
$pseudo_utilisateur=$_SESSION['pseudo_utilisateur'];
$nom_utilisateur=$_SESSION['nom_utilisateur'];
$privilege_utilisateur=$_SESSION['privilege_utilisateur'];
}
else {
$pseudo_utilisateur="visiteur";
$nom_utilisateur="visiteur";
$privilege_utilisateur="visiteur";
}
$liste_messages = array ( $liste_messages = array (
"succes" => array( "succes" => array(
1 => "<p class=\"message_succes\">Succès : alias virtuel créé avec succès.</p>", 1 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Alias virtuel créé avec succès.</div>",
2 => "<p class=\"message_succes\">Succès : alias virtuel modifiés avec succès.</p>", 2 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Alias virtuel modifiés avec succès.</div>",
3 => "<p class=\"message_succes\">Succès : alias virtuel supprimé avec succès.</p>", 3 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Alias virtuel supprimé avec succès.</div>",
4 => "<p class=\"message_succes\">Succès : utilisateur changé en ".$_SESSION['pseudo_utilisateur']." avec succès.</p>", 4 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Utilisateur changé en ".$pseudo_utilisateur." avec succès.</div>",
5 => "<p class=\"message_succes\">Succès : domaine créé avec succès.</p>", 5 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Domaine créé avec succès.</div>",
6 => "<p class=\"message_succes\">Succès : domaine modifiés avec succès.</p>", 6 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Domaine modifiés avec succès.</div>",
7 => "<p class=\"message_succes\">Succès : domaine supprimé avec succès.</p>", 7 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Domaine supprimé avec succès.</div>",
8 => "<p class=\"message_succes\">Succès : domaine défini par défaut avec succès.</p>", 8 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Domaine défini par défaut avec succès.</div>",
9 => "<p class=\"message_succes\">Succès : l'entrée de liste noire destiataires a été créée avec succès.</p>", 9 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'entrée de liste noire destiataires a été créée avec succès.</div>",
10 => "<p class=\"message_succes\">Succès : l'état de l'entrée de liste noire destiataires a été modifié avec succès.</p>", 10 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'état de l'entrée de liste noire destiataires a été modifié avec succès.</div>",
11 => "<p class=\"message_succes\">Succès : l'entrée de liste noire destinataires a été supprimée avec succès.</p>", 11 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'entrée de liste noire destinataires a été supprimée avec succès.</div>",
12 => "<p class=\"message_succes\">Succès : l'entrée de liste noire expéditeurs a été créée avec succès.</p>", 12 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'entrée de liste noire expéditeurs a été créée avec succès.</div>",
13 => "<p class=\"message_succes\">Succès : l'état de l'entrée de liste noire expéditeurs a été modifié avec succès.</p>", 13 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'état de l'entrée de liste noire expéditeurs a été modifié avec succès.</div>",
14 => "<p class=\"message_succes\">Succès : l'entrée de liste noire expéditeurs a été supprimée avec succès.</p>"), 14 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'entrée de liste noire expéditeurs a été supprimée avec succès.</div>",
15 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Vous avez bien été déconnecté.</div>"),
"erreurs" => array( "erreurs" => array(
1 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Aucun alias virtuel supprimé.</div>",
1 => "<p class=\"message_erreur\">Erreur : aucun alias virtuel supprimé.</p>", 2 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Aucun alias virtuel créé car une donnée est erronée ou manquante.</div>",
2 => "<p class=\"message_erreur\">Erreur : aucun alias virtuel créé car une donnée est erronée ou manquante.</p>", 3 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'alias virtuel est déjà existant.</div>",
3 => "<p class=\"message_erreur\">Erreur : L'alias virtuel est déjà existant.</p>", 4 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Code d'erreur générique (HY000) signifiant probablement que la base SQLite n'est pas accessible en écriture. Il faut que la base et le répertoire <i>bdd</i> appartiennent à <i>www-data</i>.</div>",
4 => "<p class=\"message_erreur\">Erreur : Code d'erreur générique (HY000) signifiant probablement que la base SQLite n'est pas accessible en écriture. Il faut que la base et le répertoire <i>bdd</i> appartiennent à <i>www-data</i>.</p>", 5 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Aucun domaine supprimé.</div>",
5 => "<p class=\"message_erreur\">Erreur : aucun domaine supprimé.</p>", 6 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Aucun domaine créé car une donnée est erronée ou manquante.</div>",
6 => "<p class=\"message_erreur\">Erreur : aucun domaine créé car une donnée est erronée ou manquante.</p>", 7 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Le domaine est déjà existant.</div>",
7 => "<p class=\"message_erreur\">Erreur : le domaine est déjà existant.</p>", 8 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Le domaine par défaut n'a pas été modifié.</div>",
8 => "<p class=\"message_erreur\">Erreur : le domaine par défaut n'a pas été modifié.</p>", 9 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'entrée de liste noire destinataires n'a pas été ajouté car une donnée est erronée ou manquante.</div>",
9 => "<p class=\"message_erreur\">Erreur : l'entrée de liste noire destinataires n'a pas été ajouté car une donnée est erronée ou manquante.</p>", 10 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'état de l'entrée de liste noire destinataires n'a pas été modifié.</div>",
10 => "<p class=\"message_erreur\">Erreur : l'état de l'entrée de liste noire destinataires n'a pas été modifié.</p>", 11 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'entrée de liste noire destinataires n'a pas été supprimée.</div>",
11 => "<p class=\"message_erreur\">Erreur : l'entrée de liste noire destinataires n'a pas été supprimée.</p>", 12 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'entrée de liste noire destinataires n'a pas été ajouté car elle est déjà existante.</div>",
12 => "<p class=\"message_erreur\">Erreur : l'entrée de liste noire destinataires n'a pas été ajouté car elle est déjà existante.</p>", 13 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'entrée de liste noire expéditeurs n'a pas été ajouté car une donnée est erronée ou manquante.</div>",
13 => "<p class=\"message_erreur\">Erreur : l'entrée de liste noire expéditeurs n'a pas été ajouté car une donnée est erronée ou manquante.</p>", 14 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'état de l'entrée de liste noire expéditeurs n'a pas été modifié.</div>",
14 => "<p class=\"message_erreur\">Erreur : l'état de l'entrée de liste noire expéditeurs n'a pas été modifié.</p>", 15 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'entrée de liste noire expéditeurs n'a pas été supprimée.</div>",
15 => "<p class=\"message_erreur\">Erreur : l'entrée de liste noire expéditeurs n'a pas été supprimée.</p>", 16 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'entrée de liste noire expéditeurs n'a pas été ajouté car elle est déjà existante.</div>",
16 => "<p class=\"message_erreur\">Erreur : l'entrée de liste noire expéditeurs n'a pas été ajouté car elle est déjà existante.</p>") 17 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Identifiant ou mot de passe incorrecte.</div>",
18 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Vous n'avez pas les privilèges nécessaires.</div>",
19 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Erreur non gérée.</div>"),
"messages" => array(
"bienvenue" => "<div class=\"alert alert-primary\" role=\"alert\"><img src=\"/fichiers/svg/info.svg\"/> Bienvenue ".$nom_utilisateur.". Vous êtes authentifié en tant qu'".$privilege_utilisateur.".</div>")
); );
$num_message=htmlspecialchars($num_message);
if (isset($liste_messages[$type_message][$num_message])) {
echo $liste_messages[$type_message][$num_message]; echo $liste_messages[$type_message][$num_message];
}
else {
echo $liste_messages['erreurs']['19'];
}
}
} }
?> ?>

@ -18,7 +18,7 @@ function testPrivileges(){
return "utilisateur"; return "utilisateur";
} }
else { else {
header("Location: /pages/visiteurs/formulaire_accueil.php?erreur=2"); header("Location: /pages/visiteurs/formulaire_accueil.php?erreur=18");
die(); die();
} }
} }

@ -17,11 +17,13 @@ $liste_alias_virtuels = listeAliasVirtuelsPostfix($pdo);
*/ */
if (testPrivileges()=="administrateur") { if (testPrivileges()=="administrateur") {
echo <<<_HEREDOC_ echo <<<_HEREDOC_
<div> <div class="row">
<div class="col-12 col-md-6">
<div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Choix de l'adresse</h5>
<form id="form_choix_utilisateur" action="/services/traitements/utilisateurs/changeUtilisateur.php" method="post"> <form id="form_choix_utilisateur" action="/services/traitements/utilisateurs/changeUtilisateur.php" method="post">
<div> <select class="form-select" name="choix_utilisateur" onchange="autoSoumission(this);">
<h1>Choix de l'adresse</h1>
<select name="choix_utilisateur" onchange="autoSoumission(this);">
_HEREDOC_; _HEREDOC_;
/** /**
@ -40,17 +42,21 @@ _HEREDOC_;
echo <<<_HEREDOC_ echo <<<_HEREDOC_
</select> </select>
</div>
</form> </form>
</div> </div>
</div>
</div>
_HEREDOC_; _HEREDOC_;
} }
?> ?>
<div> <div class="col-12 col-md-6">
<h1>Ajouter un alias virtuel</h1> <div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Ajouter un alias virtuel</h5>
<form action="/services/traitements/alias_virtuels/ajoutAliasVirtuels.php" method="post"> <form action="/services/traitements/alias_virtuels/ajoutAliasVirtuels.php" method="post">
<div class="input-group">
<?php <?php
/** /**
@ -58,13 +64,15 @@ _HEREDOC_;
*/ */
$prefixe_utilisateur=retournePrefixeUtilisateurPostfix($pdo); $prefixe_utilisateur=retournePrefixeUtilisateurPostfix($pdo);
if (!empty($prefixe_utilisateur)) { if (!empty($prefixe_utilisateur)) {
echo "<span>$prefixe_utilisateur</span>"; echo "<span class=\"input-group-text\">$prefixe_utilisateur</span>";
} }
?> ?>
<input type="text" id="nom_pour_filtre" name="nom_alias_virtuel" placeholder="alias*" onkeyup="filtreValeurs();" required> <input type="text" class="form-control" id="nom_pour_filtre" name="nom_alias_virtuel" placeholder="alias" onkeyup="filtreValeurs();" required>
<span>@</span> <span class="input-group-text">@</span>
<select name="choix_domaine_alias_virtuel"> <select class="form-select" name="choix_domaine_alias_virtuel">
<?php <?php
try { try {
foreach ($liste_domaines as $domaine_bdd => $domaine) { foreach ($liste_domaines as $domaine_bdd => $domaine) {
echo "<option value=\"".$domaine['domaine']."\">".$domaine['domaine']."</option>\n"; echo "<option value=\"".$domaine['domaine']."\">".$domaine['domaine']."</option>\n";
@ -80,13 +88,19 @@ _HEREDOC_;
<option value=\"".$domaine['domaine']."\">".$domaine['domaine']."</option> <option value=\"".$domaine['domaine']."\">".$domaine['domaine']."</option>
</select> </select>
<p id="domaine_alias"><?php //echo $liste_domaines[0]["domaine"]; ?></p>--> <p id="domaine_alias"><?php //echo $liste_domaines[0]["domaine"]; ?></p>-->
<p>vers <?php echo $_SESSION['pseudo_utilisateur'] ?></p> <button class="btn btn-primary bouton-ajout" type="submit"><img src="/fichiers/svg/plus.svg"/></button>
<input type="submit" value="Ajouter"> </div>
</form> </form>
</div>
</div>
</div>
</div>
<h1>Alias de <?php echo $_SESSION['pseudo_utilisateur']; ?></h1> <div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Alias de <?php echo $_SESSION['pseudo_utilisateur']; ?></h5>
<form class="" action="/services/traitements/alias_virtuels/editEtatAliasVirtuels.php" method="post"> <form class="" action="/services/traitements/alias_virtuels/editEtatAliasVirtuels.php" method="post">
<ul id="liste_pour_filtre"> <div class="row" id="liste_pour_filtre">
<?php <?php
/** /**
@ -94,11 +108,35 @@ _HEREDOC_;
*/ */
try { try {
foreach ($liste_alias_virtuels as $alias_virtuels_cles => $alias_virtuels_valeurs) { foreach ($liste_alias_virtuels as $alias_virtuels_cles => $alias_virtuels_valeurs) {
echo "<li><input type=\"radio\" name=\"".$alias_virtuels_valeurs['id']."\" value=\"1\""; if (isset($alias_virtuels_valeurs['active']) && $alias_virtuels_valeurs['active']=="1") {
if (isset($alias_virtuels_valeurs['active']) && !empty($alias_virtuels_valeurs['active']) && $alias_virtuels_valeurs['active']=="1") echo " checked"; $etat_interrupteur_allumer="checked";
echo "><input type=\"radio\" name=\"".$alias_virtuels_valeurs['id']."\" value=\"0\""; $etat_interrupteur_eteint="";
if (isset($alias_virtuels_valeurs['active']) && $alias_virtuels_valeurs['active']=="0") echo " checked"; } else {
echo "><p>".$alias_virtuels_valeurs['courriel']."</p><label class=\"input-label-supprimer-valeur\" for=\"supprimer-valeur-".$alias_virtuels_valeurs['id']."\">Supprimer</label><input type=\"checkbox\" class=\"input-checkbox-supprimer-valeur visuellement-cache\" id=\"supprimer-valeur-".$alias_virtuels_valeurs['id']."\"><a class=\"confirmation-suppression\" href=\"/services/traitements/alias_virtuels/supprAliasVirtuels.php?supprAliasVirtuel=".$alias_virtuels_valeurs['id']."\">Confirmer la suppression</a></li>\n"; $etat_interrupteur_eteint="checked";
$etat_interrupteur_allumer="";
}
echo <<<_HEREDOC_
<div class="col-md-6 col-xl-4">
<div class="card contour-pastille">
<div class="d-flex interieur-pastille">
<div class="champ-interrupteur">
<input type="radio" name="{$alias_virtuels_valeurs['id']}" id="allumer{$alias_virtuels_valeurs['id']}" value="1" {$etat_interrupteur_allumer}>
<label for="allumer{$alias_virtuels_valeurs['id']}" class="interrupteur-allumer"></label>
<input type="radio" name="{$alias_virtuels_valeurs['id']}" id="eteint{$alias_virtuels_valeurs['id']}" value="0" {$etat_interrupteur_eteint}>
<label for="eteint{$alias_virtuels_valeurs['id']}" class="interrupteur-eteint"></label>
</div>
<div class="titre-pastille">
<span>{$alias_virtuels_valeurs['courriel']}</span>
</div>
<div>
<label class="input-label-supprimer-valeur btn btn-danger btn-sm" for="supprimer-valeur-{$alias_virtuels_valeurs['id']}"><img src="/fichiers/svg/trash-2.svg"></label>
</div>
</div>
<input type="checkbox" class="input-checkbox-supprimer-valeur visuellement-cache" id="supprimer-valeur-{$alias_virtuels_valeurs['id']}">
<a class="confirmation-suppression card-footer" href="/services/traitements/alias_virtuels/supprAliasVirtuels.php?supprAliasVirtuel={$alias_virtuels_valeurs['id']}">Confirmer la suppression</a>
</div>
</div>
_HEREDOC_;
} }
} }
catch (\Exception $e) { catch (\Exception $e) {
@ -106,10 +144,10 @@ _HEREDOC_;
} }
?> ?>
</ul> </div>
<input type="submit" value="Appliquer"> <button class="bouton-flotant" type="submit"><img src="/fichiers/svg/save.svg"/></button>
</form> </form>
</div>
<script src="/fichiers/js/filtre.js"></script>
</div> </div>
<script src="/fichiers/js/filtre.js"></script>

@ -7,7 +7,7 @@
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php"); require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
if (testPrivileges()!="administrateur") { if (testPrivileges()!="administrateur") {
header("Location: /pages/visiteurs/formulaire_accueil.php?erreur=2"); header("Location: /pages/visiteurs/formulaire_accueil.php?erreur=18");
die(); die();
} }
@ -16,23 +16,26 @@ $liste_domaines = listeDomainesPostfix($pdo);
?> ?>
<!-- Affichage et changement du domaine par défaut --> <!-- Affichage et changement du domaine par défaut -->
<div> <div class="row">
<h1>Domaine par défaut</h1> <div class="col-12 col-md-6">
<p>Changer le domaine par défaut (actuellement <div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Domaine par défaut</h5>
<?php <?php
$domaine_defaut = retourneDomaineDefautPostfix($pdo); $domaine_defaut = retourneDomaineDefautPostfix($pdo);
if (!empty($domaine_defaut)) { if (empty($domaine_defaut)) {
echo "<b>$domaine_defaut</b>"; echo <<<_HEREDOC_
} <div class="alert alert-warning mb-2" role="alert"><img src="/fichiers/svg/alert-triangle-warning.svg"/>
else { Aucun domaine n'est défini par défaut. Ce paramètre permet de pré-selectionner le domaine utilisé par Postfix lors des créations d'alias virtuels.
echo "Attention : aucun domaine n'est défini par défaut. Ce paramètre permet de pré-selectionner le domaine utilisé par Postfix lors des créations d'alias virtuels"; </div>
_HEREDOC_;
} }
?> ?>
) :</p>
<form action="/services/traitements/domaines/changeDomaineDefaut.php" method="post"> <form action="/services/traitements/domaines/changeDomaineDefaut.php" method="post">
<select name="choix_domaine_defaut"> <div class="input-group">
<select class="form-select" name="choix_domaine_defaut">
<?php <?php
// Génération de la liste des domaines existants // Génération de la liste des domaines existants
@ -48,20 +51,32 @@ $liste_domaines = listeDomainesPostfix($pdo);
?> ?>
</select> </select>
<!-- Définition du domaine sélectionné comme étant par défaut --> <!-- Définition du domaine sélectionné comme étant par défaut -->
<input type="submit" value="Définir par défaut"> <button class="btn btn-primary" type="submit">Définir par défaut</button>
</div>
</form> </form>
</div> </div>
<div> </div>
<h1>Ajouter un domaine</h1> </div>
<div class="col-12 col-md-6">
<div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Ajouter un domaine</h5>
<form action="/services/traitements/domaines/ajoutDomaines.php" method="post"> <form action="/services/traitements/domaines/ajoutDomaines.php" method="post">
<input type="text" id="nom_pour_filtre" name="nom_domaine" placeholder="domaine.tld*" onkeyup="filtreValeurs();" required> <div class="input-group">
<input type="submit" value="Ajouter"> <input type="text" class="form-control" id="nom_pour_filtre" name="nom_domaine" onkeyup="filtreValeurs();" placeholder="domaine.tld" required/>
<button class="btn btn-primary bouton-ajout" type="submit"><img src="/fichiers/svg/plus.svg"/></button>
</div>
</form> </form>
</div>
</div>
</div>
</div>
<h1>Domaines du serveur de messagerie</h1> <div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Domaines du serveur de messagerie</h5>
<form class="" action="/services/traitements/domaines/editEtatDomaines.php" method="post"> <form class="" action="/services/traitements/domaines/editEtatDomaines.php" method="post">
<ul id="liste_pour_filtre"> <div class="row" id="liste_pour_filtre">
<?php <?php
/** /**
@ -69,32 +84,54 @@ $liste_domaines = listeDomainesPostfix($pdo);
*/ */
try { try {
foreach ($liste_domaines as $liste_domaines_cles => $liste_domaines_valeurs) { foreach ($liste_domaines as $liste_domaines_cles => $liste_domaines_valeurs) {
echo "<li>"; if (isset($liste_domaines_valeurs['active']) && $liste_domaines_valeurs['active']=="1") {
if (isset($liste_domaines_valeurs['defaut']) && $liste_domaines_valeurs['defaut']!="1") { $etat_interrupteur_allumer="checked";
echo "<input type=\"radio\" name=\"".$liste_domaines_valeurs['id']."\" value=\"1\""; $etat_interrupteur_eteint="";
if (isset($liste_domaines_valeurs['active']) && !empty($liste_domaines_valeurs['active']) && $liste_domaines_valeurs['active']=="1") echo " checked"; } else {
echo "><input type=\"radio\" name=\"".$liste_domaines_valeurs['id']."\" value=\"0\""; $etat_interrupteur_eteint="checked";
if (isset($liste_domaines_valeurs['active']) && $liste_domaines_valeurs['active']=="0") echo " checked"; $etat_interrupteur_allumer="";
echo ">";
} }
echo "<p>".$liste_domaines_valeurs['domaine']."</p>"; if (isset($liste_domaines_valeurs['defaut']) && $liste_domaines_valeurs['defaut']=="1") {
if (isset($liste_domaines_valeurs['defaut']) && $liste_domaines_valeurs['defaut']!="1") { $etat_bouton="disabled";
echo "<label class=\"input-label-supprimer-valeur\" for=\"supprimer-valeur-".$liste_domaines_valeurs['id']."\">Supprimer</label><input type=\"checkbox\" class=\"input-checkbox-supprimer-valeur visuellement-cache\" id=\"supprimer-valeur-".$liste_domaines_valeurs['id']."\"><a class=\"confirmation-suppression\" href=\"/services/traitements/domaines/supprDomaines.php?supprDomaine=".$liste_domaines_valeurs['id']."\">Confirmer la suppression</a></li>\n"; $bordure_pastille="border-primary interieur-pastille-bleu";
$post_texte=" <span class=\"text-primary\">(défaut)</span>";
} else {
$etat_bouton="";
$bordure_pastille="";
$post_texte="";
} }
else { echo <<<_HEREDOC_
echo "<p>Domaine en lecture seule tant que définit par défaut</p>"; <div class="col-md-6 col-xl-4">
} <div class="card contour-pastille {$bordure_pastille}">
<div class="d-flex interieur-pastille">
<div class="champ-interrupteur {$etat_bouton}">
<input type="radio" name="{$liste_domaines_valeurs['id']}" id="allumer{$liste_domaines_valeurs['id']}" value="1" {$etat_interrupteur_allumer}>
<label for="allumer{$liste_domaines_valeurs['id']}" class="interrupteur-allumer"></label>
<input type="radio" name="{$liste_domaines_valeurs['id']}" id="eteint{$liste_domaines_valeurs['id']}" value="0" {$etat_interrupteur_eteint}>
<label for="eteint{$liste_domaines_valeurs['id']}" class="interrupteur-eteint"></label>
</div>
<div class="titre-pastille">
<span>{$liste_domaines_valeurs['domaine']}{$post_texte}</span>
</div>
<div>
<label class="input-label-supprimer-valeur btn btn-danger btn-sm {$etat_bouton}" for="supprimer-valeur-{$liste_domaines_valeurs['id']}"><img src="/fichiers/svg/trash-2.svg"></label>
</div>
</div>
<input type="checkbox" class="input-checkbox-supprimer-valeur visuellement-cache" id="supprimer-valeur-{$liste_domaines_valeurs['id']}">
<a class="confirmation-suppression card-footer" href="/services/traitements/domaines/supprDomaines.php?supprDomaine={$liste_domaines_valeurs['id']}">Confirmer la suppression</a>
</div>
</div>
_HEREDOC_;
} }
} }
catch (\Exception $e) { catch (\Exception $e) {
die ("Erreur de requête de selection utilisateurs pour \"$base\" : ".$e->getMessage()); die ("Erreur de requête de selection utilisateurs pour \"$base\" : ".$e->getMessage());
} }
?> ?>
</ul> </div>
<input type="submit" value="Appliquer"> <button class="bouton-flotant" type="submit"><img src="/fichiers/svg/save.svg"/></button>
</form> </form>
</div>
<script src="/fichiers/js/filtre.js"></script>
</div> </div>
<script src="/fichiers/js/filtre.js"></script>

@ -1,3 +1,4 @@
<?php <?php
/** /**
@ -7,7 +8,7 @@
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php"); require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
if (testPrivileges()!="administrateur") { if (testPrivileges()!="administrateur") {
header("Location: /pages/visiteurs/formulaire_accueil.php?erreur=2"); header("Location: /pages/visiteurs/formulaire_accueil.php?erreur=18");
die(); die();
} }
@ -19,26 +20,25 @@ $liste_entrees_liste_noires_exp=listeEntreeListeNoireExpPostfix($pdo);
* Permet d'inclure la page d'administration des listes noires déstinataires ou expéditeurs dédiée. * Permet d'inclure la page d'administration des listes noires déstinataires ou expéditeurs dédiée.
*/ */
echo <<<_heredoc_
<div>
<h1>Choisissez un type de liste noire à éditer :</h1>
<a href="/pages/gestion/administration.php?page=listes_noires&sousPage=destinataires">Destinataires</a>
<a href="/pages/gestion/administration.php?page=listes_noires&sousPage=expediteurs">Expéditeurs</a>
_heredoc_;
if (isset($_GET['sousPage']) && !empty($_GET['sousPage'])) { if (isset($_GET['sousPage']) && !empty($_GET['sousPage'])) {
switch ($_GET['sousPage']) { switch ($_GET['sousPage']) {
case 'destinataires': case 'destinataires':
echo <<<_HEREDOC_ echo <<<_HEREDOC_
<h1>Ajouter une entrée dans la liste noire des destinataires</h1> <div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Ajouter une entrée dans la liste noire des destinataires</h5>
<form action="/services/traitements/liste_noire_dst/ajoutEntreeListeNoireDst.php" method="post"> <form action="/services/traitements/liste_noire_dst/ajoutEntreeListeNoireDst.php" method="post">
<input type="text" id="nom_pour_filtre" name="courriel_entree_liste_noire_dst" placeholder="utilisateur@domaine.tld*" onkeyup="filtreValeurs();" required> <div class="input-group">
<select name="choix_action_entree_liste_noire_dst"> <input type="text" class="form-control" id="nom_pour_filtre" name="courriel_entree_liste_noire_dst" placeholder="utilisateur@domaine.tld" onkeyup="filtreValeurs();" required>
<select class="form-select" name="choix_action_entree_liste_noire_dst">
<option value="REJECT">REJECT</option> <option value="REJECT">REJECT</option>
<option value="DEFER">DEFER</option> <option value="DEFER">DEFER</option>
</select> </select>
<input type="submit" value="Ajouter"> <button class="btn btn-primary bouton-ajout" type="submit"><img src="/fichiers/svg/plus.svg"/></button>
</div>
</form> </form>
</div>
</div>
<h1>Entrées de la liste noire des destinataires du serveur de messagerie</h1> <h1>Entrées de la liste noire des destinataires du serveur de messagerie</h1>
@ -68,14 +68,20 @@ _HEREDOC_;
break; break;
case 'expediteurs': case 'expediteurs':
echo <<<_HEREDOC_ echo <<<_HEREDOC_
<h1>Ajouter une entrée dans la liste noire des expéditeurs</h1> <div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Ajouter une entrée dans la liste noire des expéditeurs</h5>
<form action="/services/traitements/liste_noire_exp/ajoutEntreeListeNoireExp.php" method="post"> <form action="/services/traitements/liste_noire_exp/ajoutEntreeListeNoireExp.php" method="post">
<input type="text" id="nom_pour_filtre" name="courriel_entree_liste_noire_exp" placeholder="utilisateur@domaine.tld*" onkeyup="filtreValeurs();" required> <div class="input-group">
<select name="choix_code_retour_entree_liste_noire_exp"> <input type="text" class="form-control" id="nom_pour_filtre" name="courriel_entree_liste_noire_exp" placeholder="utilisateur@domaine.tld" onkeyup="filtreValeurs();" required>
<select class="form-select" name="choix_code_retour_entree_liste_noire_exp">
<option value="554">REJECT</option> <option value="554">REJECT</option>
</select> </select>
<input type="submit" value="Ajouter"> <button class="btn btn-primary bouton-ajout" type="submit"><img src="/fichiers/svg/plus.svg"/></button>
</div>
</form> </form>
</div>
</div>
<h1>Entrées de la liste noire des expéditeurs du serveur de messagerie</h1> <h1>Entrées de la liste noire des expéditeurs du serveur de messagerie</h1>

@ -15,7 +15,7 @@ if (testPrivileges()=="administrateur" && isset($_POST['choix_utilisateur']) &&
die(); die();
} }
else { else {
header ("Location: /pages/visiteurs/formulaire_accueil.php?erreur=2"); header ("Location: /pages/visiteurs/formulaire_accueil.php?erreur=18");
die(); die();
} }

@ -11,6 +11,6 @@
// Destruction de la session // Destruction de la session
session_destroy (); session_destroy ();
// Redirection de l'utilisateur vers la page d'authentifiaction // Redirection de l'utilisateur vers la page d'authentifiaction
header('location: /pages/visiteurs/formulaire_accueil.php?succes=1'); header('location: /pages/visiteurs/formulaire_accueil.php?succes=15');
?> ?>
Loading…
Cancel
Save