modifications mineures
This commit is contained in:
commit
ee160a9f74
|
@ -0,0 +1,41 @@
|
||||||
|
<?php session_start(); ?>
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Tableau de bord</title>
|
||||||
|
|
||||||
|
<meta charset='utf-8'/>
|
||||||
|
<meta name='description' value='Site de test'/>
|
||||||
|
<meta name='author' value='{xdrm} & SeekDaSky'/>
|
||||||
|
|
||||||
|
<link rel='stylesheet' href='css/global.css'/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<!-- WRAPPER DE LA PAGE -->
|
||||||
|
<div id='WRAPPER'>
|
||||||
|
|
||||||
|
<!-- MENU DE LA PAGE -->
|
||||||
|
<nav id='MENU'>
|
||||||
|
<div id='ICON'></div>
|
||||||
|
<a id='dashboard'>Tableau de bord</a>
|
||||||
|
<a id='consultations'>Nouvelle consultation</a>
|
||||||
|
<a>Médecins</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- CONTAINER DE LA PAGE -->
|
||||||
|
<section id='CONTAINER'>
|
||||||
|
|
||||||
|
<!-- FIL D'ARIANE -->
|
||||||
|
<div id='BREADCRUMB'><a href='Dashboard.php'>Accueil</a> <a href='Test1.php'>Test1</a> <a href='test2.php'>test2</a> </div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,84 @@
|
||||||
|
-- MySQL Workbench Forward Engineering
|
||||||
|
|
||||||
|
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
|
||||||
|
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
|
||||||
|
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
|
||||||
|
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
-- Schema projetphp
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
-- Schema projetphp
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
CREATE SCHEMA IF NOT EXISTS `projetphp` DEFAULT CHARACTER SET utf8 ;
|
||||||
|
USE `projetphp` ;
|
||||||
|
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
-- Table `projetphp`.`Medecin`
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `projetphp`.`Medecin` (
|
||||||
|
`id` INT NOT NULL AUTO_INCREMENT,
|
||||||
|
`Civilite` CHAR(1) NOT NULL,
|
||||||
|
`Prenom` VARCHAR(45) NOT NULL,
|
||||||
|
`Nom` VARCHAR(45) NOT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
UNIQUE INDEX `id_UNIQUE` (`id` ASC))
|
||||||
|
ENGINE = InnoDB;
|
||||||
|
|
||||||
|
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
-- Table `projetphp`.`Patient`
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `projetphp`.`Patient` (
|
||||||
|
`Civilite` CHAR(1) NOT NULL,
|
||||||
|
`Nom` VARCHAR(45) CHARACTER SET 'big5' NOT NULL,
|
||||||
|
`Prenom` VARCHAR(45) NOT NULL,
|
||||||
|
`Adresse` VARCHAR(100) NOT NULL,
|
||||||
|
`Ville` VARCHAR(50) NOT NULL,
|
||||||
|
`CodePostal` SMALLINT(4) NOT NULL,
|
||||||
|
`DateNaissance` DATE NOT NULL,
|
||||||
|
`LieuNaissance` VARCHAR(50) NOT NULL,
|
||||||
|
`NumSecuriteSociale` INT(15) NOT NULL,
|
||||||
|
`Id` INT NOT NULL AUTO_INCREMENT,
|
||||||
|
`MedecinTraitant` INT NULL,
|
||||||
|
UNIQUE INDEX `NumSecuriteSociale_UNIQUE` (`NumSecuriteSociale` ASC),
|
||||||
|
PRIMARY KEY (`Id`),
|
||||||
|
UNIQUE INDEX `Id_UNIQUE` (`Id` ASC),
|
||||||
|
INDEX `fk_Patient_Medecin_idx` (`MedecinTraitant` ASC),
|
||||||
|
CONSTRAINT `fk_Patient_Medecin`
|
||||||
|
FOREIGN KEY (`MedecinTraitant`)
|
||||||
|
REFERENCES `projetphp`.`Medecin` (`id`)
|
||||||
|
ON DELETE NO ACTION
|
||||||
|
ON UPDATE NO ACTION)
|
||||||
|
ENGINE = InnoDB;
|
||||||
|
|
||||||
|
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
-- Table `projetphp`.`RDV`
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `projetphp`.`RDV` (
|
||||||
|
`id` INT NOT NULL,
|
||||||
|
`DateRDV` TIMESTAMP NULL,
|
||||||
|
`Duree` TIME NULL,
|
||||||
|
`Patient_Id` INT NOT NULL,
|
||||||
|
`Medecin_id` INT NOT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
INDEX `fk_RDV_Patient1_idx` (`Patient_Id` ASC),
|
||||||
|
INDEX `fk_RDV_Medecin1_idx` (`Medecin_id` ASC),
|
||||||
|
CONSTRAINT `fk_RDV_Patient1`
|
||||||
|
FOREIGN KEY (`Patient_Id`)
|
||||||
|
REFERENCES `projetphp`.`Patient` (`Id`)
|
||||||
|
ON DELETE NO ACTION
|
||||||
|
ON UPDATE NO ACTION,
|
||||||
|
CONSTRAINT `fk_RDV_Medecin1`
|
||||||
|
FOREIGN KEY (`Medecin_id`)
|
||||||
|
REFERENCES `projetphp`.`Medecin` (`id`)
|
||||||
|
ON DELETE NO ACTION
|
||||||
|
ON UPDATE NO ACTION)
|
||||||
|
ENGINE = InnoDB;
|
||||||
|
|
||||||
|
|
||||||
|
SET SQL_MODE=@OLD_SQL_MODE;
|
||||||
|
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
|
||||||
|
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
|
Binary file not shown.
|
@ -4,6 +4,9 @@
|
||||||
* fonction d'autoloading : prend en paramètre le nom de la classe et s'occupe d'inclure les fichiers correspondant aux classes
|
* fonction d'autoloading : prend en paramètre le nom de la classe et s'occupe d'inclure les fichiers correspondant aux classes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
//pour l'inclusion dans le dossier src
|
||||||
|
$GLOBALS['managers_dir'] = dirname(__FILE__).DIRECTORY_SEPARATOR.'src';
|
||||||
|
|
||||||
function autoloader($class) {
|
function autoloader($class) {
|
||||||
|
|
||||||
//si on charge le StaticRepo
|
//si on charge le StaticRepo
|
||||||
|
@ -15,6 +18,12 @@ function autoloader($class) {
|
||||||
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'repositories'.DIRECTORY_SEPARATOR.'repos'.DIRECTORY_SEPARATOR.$class . '.php';
|
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'repositories'.DIRECTORY_SEPARATOR.'repos'.DIRECTORY_SEPARATOR.$class . '.php';
|
||||||
|
|
||||||
//cas particuliers pas identifiable par nom de classe
|
//cas particuliers pas identifiable par nom de classe
|
||||||
|
}else{
|
||||||
|
//si on charge un manager
|
||||||
|
if(is_file(dirname(__FILE__).DIRECTORY_SEPARATOR.'src'.DIRECTORY_SEPARATOR.$class . '.php')){
|
||||||
|
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'src'.DIRECTORY_SEPARATOR.$class . '.php';
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,185 @@
|
||||||
|
*{ margin: 0; padding: 0; }
|
||||||
|
|
||||||
|
a{
|
||||||
|
/* remove-a default properties */
|
||||||
|
text-decoration: none;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
body{
|
||||||
|
/* position */
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
/* background */
|
||||||
|
background-color: #e8e8e8;
|
||||||
|
|
||||||
|
/* foreground */
|
||||||
|
font-size: 14px;
|
||||||
|
font-family: 'Open Sans', 'sans serif';
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* WRAPPER DE LA PAGE */
|
||||||
|
#WRAPPER{
|
||||||
|
/* position */
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 1em;
|
||||||
|
left: calc( 50% - 512px - 1em );
|
||||||
|
width: 1024px;
|
||||||
|
min-height: 50%;
|
||||||
|
margin: 2em;
|
||||||
|
|
||||||
|
/* border */
|
||||||
|
border: 1px solid #e2e2e2;
|
||||||
|
box-shadow: 0 0 5px #e2e2e2;
|
||||||
|
|
||||||
|
/* background */
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* MENU DE LA PAGE */
|
||||||
|
#WRAPPER > #MENU{
|
||||||
|
/* position */
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 225px;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
/* border */
|
||||||
|
border-right: 1px solid #e2e2e2;
|
||||||
|
border-bottom: 1px solid #e2e2e2;
|
||||||
|
|
||||||
|
/* background */
|
||||||
|
background-color: #fafafa;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* LOGO DANS LE MENU */
|
||||||
|
#WRAPPER > #MENU > #ICON{
|
||||||
|
/* position */
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100px;
|
||||||
|
|
||||||
|
/* background */
|
||||||
|
background-color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LES LIENS DU MENU */
|
||||||
|
#WRAPPER > #MENU > a{
|
||||||
|
/* position */
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
width: calc( 100% - 3em );
|
||||||
|
padding-left: 3em;
|
||||||
|
padding-bottom: 1px;
|
||||||
|
|
||||||
|
/* background */
|
||||||
|
background-color: transparent;
|
||||||
|
|
||||||
|
/* foreground */
|
||||||
|
line-height: 2.5em;
|
||||||
|
|
||||||
|
/* extra */
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* :hover / .active */
|
||||||
|
#WRAPPER > #MENU > a:hover,
|
||||||
|
#WRAPPER > #MENU > a.active{
|
||||||
|
background-color: #efefef !important;
|
||||||
|
color: #818181;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @first/@last */
|
||||||
|
#WRAPPER > #MENU > a:nth-child(2){ margin-top: 1em; }
|
||||||
|
#WRAPPER > #MENU > a:last-child{ margin-bottom: 1em; }
|
||||||
|
|
||||||
|
|
||||||
|
/* icones associées aux liens */
|
||||||
|
#WRAPPER > #MENU > a#consultations{
|
||||||
|
background: url(../src/consultation.svg) left 1em center no-repeat;
|
||||||
|
background-size: auto 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#WRAPPER > #MENU > a#doctor{
|
||||||
|
background: url(../src/doctor.svg) left 1em center no-repeat;
|
||||||
|
background-size: auto 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#WRAPPER > #MENU > a#dashboard{
|
||||||
|
background: url(../src/dashboard.svg) left 1em center no-repeat;
|
||||||
|
background-size: auto 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************/
|
||||||
|
/* CONTAINER */
|
||||||
|
/*************/
|
||||||
|
#WRAPPER > #CONTAINER{
|
||||||
|
/* position */
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 225px;
|
||||||
|
width: calc( 100% - 225px );
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* FIL D'ARIANE */
|
||||||
|
#WRAPPER > #CONTAINER > #BREADCRUMB{
|
||||||
|
/* position */
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
width: calc( 100% - 2*2em - 2*.6em );
|
||||||
|
margin: 2em;
|
||||||
|
padding: .6em;
|
||||||
|
|
||||||
|
/* background */
|
||||||
|
background-color: #eee;
|
||||||
|
|
||||||
|
/* foreground */
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
#WRAPPER > #CONTAINER > #BREADCRUMB a:hover{
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* chevrons */
|
||||||
|
#WRAPPER > #CONTAINER > #BREADCRUMB a:before{
|
||||||
|
content: '';
|
||||||
|
/* position */
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
width: 1em;
|
||||||
|
height: .7em;
|
||||||
|
|
||||||
|
background: url(../src/right-arrow.svg) center center no-repeat;
|
||||||
|
background-size: 40% auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* premier: maison au lien de chevron */
|
||||||
|
#WRAPPER > #CONTAINER > #BREADCRUMB a:first-child:before{
|
||||||
|
margin-right: 1em;
|
||||||
|
height: 1em;
|
||||||
|
background-image: url(../src/home.svg);
|
||||||
|
background-size: auto 100%;
|
||||||
|
}
|
|
@ -0,0 +1,128 @@
|
||||||
|
/*******************************/
|
||||||
|
/*** RECTIFICATIONS GLOBALES ***/
|
||||||
|
/*******************************/
|
||||||
|
*{ margin: 0; padding: 0; }
|
||||||
|
|
||||||
|
body{
|
||||||
|
/* position */
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
/* background */
|
||||||
|
background-color: #233342;
|
||||||
|
|
||||||
|
/* foreground */
|
||||||
|
font: 16px 'Open Sans';
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************/
|
||||||
|
/*** FORMULAIRES ***/
|
||||||
|
/*******************/
|
||||||
|
form{
|
||||||
|
/* position */
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
left: calc( 50% - 20em/2 );
|
||||||
|
width: 20em;
|
||||||
|
height: auto;
|
||||||
|
margin: 2em;
|
||||||
|
padding: 2em;
|
||||||
|
|
||||||
|
/* border */
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: inset 0 0 10px #0a0f14;
|
||||||
|
|
||||||
|
/* background */
|
||||||
|
background-color: #151f28;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************/
|
||||||
|
/*** CHAMPS DE SAISIE ***/
|
||||||
|
/************************/
|
||||||
|
input{
|
||||||
|
/* position */
|
||||||
|
display: inline-block;
|
||||||
|
padding: 1em 2em;
|
||||||
|
margin: 1em;
|
||||||
|
width: calc( 100% - 2*2em - 5px - 2*1em );
|
||||||
|
|
||||||
|
/* border */
|
||||||
|
border-radius: 3px 0 0 3px;
|
||||||
|
border: 0;
|
||||||
|
border-right: 5px solid #aaa;
|
||||||
|
|
||||||
|
/* background */
|
||||||
|
background-color: #ddd;
|
||||||
|
|
||||||
|
/* animation */
|
||||||
|
transition: all .2s ease-in-out;
|
||||||
|
-moz-transition: all .2s ease-in-out;
|
||||||
|
-webkit-transition: all .2s ease-in-out;
|
||||||
|
-ms-transition: all .2s ease-in-out;
|
||||||
|
-o-transition: all .2s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @hover */
|
||||||
|
input:focus { background-color: #fff; }
|
||||||
|
input:nth-child(4n+0):focus{ border-right-color: #f45b2a; }
|
||||||
|
input:nth-child(4n+1):focus{ border-right-color: #1b84db; }
|
||||||
|
input:nth-child(4n+2):focus{ border-right-color: #f4b92a; }
|
||||||
|
input:nth-child(4n+3):focus{ border-right-color: #b62af4; }
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************/
|
||||||
|
/*** BOUTONS DE VALIDATION ***/
|
||||||
|
/*****************************/
|
||||||
|
input[type=submit],
|
||||||
|
input[type=button]{
|
||||||
|
/* position */
|
||||||
|
width: auto;
|
||||||
|
float: right;
|
||||||
|
|
||||||
|
/* foreground */
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=submit]:hover,
|
||||||
|
input[type=button]:hover{
|
||||||
|
|
||||||
|
/* border */
|
||||||
|
border-right-color: #1b84db;
|
||||||
|
|
||||||
|
/* background */
|
||||||
|
background-color: #fff;
|
||||||
|
|
||||||
|
/* foreground */
|
||||||
|
color: #1b84db;
|
||||||
|
|
||||||
|
/* extra */
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/****************/
|
||||||
|
/*** MESSAGES ***/
|
||||||
|
/****************/
|
||||||
|
.error{
|
||||||
|
font-size: .8em;
|
||||||
|
padding: 1em 1em;
|
||||||
|
color: #f14973;
|
||||||
|
text-shadow: 1px 1px 0 #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.success{
|
||||||
|
font-size: .8em;
|
||||||
|
padding: 1em 1em;
|
||||||
|
color: #49f16b;
|
||||||
|
text-shadow: 1px 1px 0 #000;
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
petite explication : on démarre le systeme de session de php, on inclu notre authentification
|
||||||
|
, on appelle la fonction que vérifie le login et role de l'utilisateur (voir source pour la doc)
|
||||||
|
si l'utilisateur est logué, on le redirige vers la page d'accueil de l'outil
|
||||||
|
*/
|
||||||
|
session_start();
|
||||||
|
require('autoloader.php');
|
||||||
|
|
||||||
|
if(isset($_POST['co'])){
|
||||||
|
$Auth = new Authentification();
|
||||||
|
$Auth->authentification($_POST['username'],$_POST['password']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Authentification::checkUser(0)){
|
||||||
|
header("Location: http://".$_SERVER['HTTP_HOST']."/Dashboard.php");
|
||||||
|
die();
|
||||||
|
};
|
||||||
|
?>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Tests php</title>
|
||||||
|
|
||||||
|
<meta charset='utf-8'/>
|
||||||
|
<meta name='description' value='Site de test'/>
|
||||||
|
<meta name='author' value='{xdrm} & SeekDaSky'/>
|
||||||
|
|
||||||
|
|
||||||
|
<link rel='stylesheet' href='globalstylesheet.css'/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
|
||||||
|
<?php /* [1] AFFICHAGE DIFFÉRÉ SI CONNECTÉ
|
||||||
|
==============================================*/
|
||||||
|
|
||||||
|
echo "<form action='#auth' method='POST'>";
|
||||||
|
|
||||||
|
/* AFFICHAGE D'ERREURS */
|
||||||
|
if( $postVariablesAreSet ){ // si formulaire soumis
|
||||||
|
if( !$postVariablesNEmpty )
|
||||||
|
echo '<span class=error>Certains champs requis sont vides.</span>';
|
||||||
|
elseif( !$usernameCheck )
|
||||||
|
echo '<span class=error>Nom d\'utilisateur incorrect. (3 car. min)</span>';
|
||||||
|
elseif( !$mailCheck )
|
||||||
|
echo '<span class=error>Adresse mail incorrecte.</span>';
|
||||||
|
elseif( !$passwordCheck )
|
||||||
|
echo '<span class=error>Mot de passe incorrect. (8 car. min)</span>';
|
||||||
|
elseif( connected($user) )
|
||||||
|
echo '<span class=success>Vous êtes connectés.</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<input type='text' name='username' placeholder='username'>";
|
||||||
|
echo "<input type='password' name='password' placeholder='password'>";
|
||||||
|
echo "<input type='submit' name='co' value='Me connecter'>";
|
||||||
|
echo "</form>";
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,87 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class Authentification{
|
||||||
|
|
||||||
|
private $users;
|
||||||
|
|
||||||
|
public function __construct(){
|
||||||
|
$this->users = json_decode(file_get_contents($GLOBALS['managers_dir'].DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'users.json'),true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* méthode d'authentification, utilise param['identifiant'] et param['mdp'] et les comparent à
|
||||||
|
* nos utilisateurs enregistrés puis créer une session securisée par token
|
||||||
|
* @param array $param contiens les infomations de connection
|
||||||
|
* @return json json contenant le résultat de l'authentification (true si authentification correcte, sinon non)
|
||||||
|
*/
|
||||||
|
public function authentification($user,$mdp){
|
||||||
|
foreach($this->users as $utilisateur=>$infos){
|
||||||
|
if($utilisateur == $user and $infos['password'] == $mdp){
|
||||||
|
$this->createSecureSession($user,$infos['role']);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* déconnecte l'utilisateur en détruisant la session et le cookie
|
||||||
|
* @return json renvoie true, il n'y aucune raison que ça foire
|
||||||
|
*/
|
||||||
|
public function deconnection(){
|
||||||
|
$this->destroySecureSession();
|
||||||
|
Response::quickResponse(200,json_encode(['result' => true]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* créer une session sécurisé , protégé du vol de session par identification de l'utilisateur par navigateur/ip/cookie
|
||||||
|
* @param String $user nom d'utilisateur
|
||||||
|
* @param String $role role de l'utilisateur (0=administrateur, 1= prof, 2=scolarité,3=élève)
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function createSecureSession($user,$role){
|
||||||
|
$id = uniqid();
|
||||||
|
$_SESSION['id'] = $id;
|
||||||
|
$_SESSION['token'] = sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$id);
|
||||||
|
setcookie('UserId',$id,time()+10*60,'/');
|
||||||
|
|
||||||
|
$_SESSION['user'] = $user;
|
||||||
|
$_SESSION['role'] = $role;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Détruit une session
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function destroySecureSession(){
|
||||||
|
session_destroy();
|
||||||
|
setcookie('token',time()-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Vérifie qu'un utilisateur donné a les droits demandés (passés en paramètres)
|
||||||
|
* @param int $role role minimum
|
||||||
|
* @param boolean $strict si strict vaut true, seul les utilisateurs avec le role précis seront acceptés, sinon tout les utilisateurs
|
||||||
|
* avec un role superieur le seront
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public static function checkUser($role, $strict=false){
|
||||||
|
if(isset($_SESSION['token'])){
|
||||||
|
foreach($_SESSION['role'] as $roleUser){
|
||||||
|
if(($strict and $roleUser == $role) or (!$strict and $roleUser<= $role)){
|
||||||
|
if($_SESSION['token'] == sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$_SESSION['id'])){
|
||||||
|
setcookie('UserId',$_COOKIE['UserId'],time()+10*60,'/');
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getCurrentUser(){
|
||||||
|
return $_SESSION['user'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,202 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* La classe Response permet de gérer la réponse envoyée au client (status, contenu, type, encodage)
|
||||||
|
* son utilitée principale est de pouvoir d'envoyer un pseudo-flux de donnée au client et permettre ainsi de suivre le déroulement
|
||||||
|
* d'une opération côté serveur par exemple. Son second aventage est qu'une fois la réponse envoyée et féermée, le script PHP peut continuer de s'executer
|
||||||
|
* permettant ainsi une sensation de vitesse au niveau du client (inutile d'attendre la fin des insertions en base de donnée pour avoir la réponse par exemple)
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Response{
|
||||||
|
|
||||||
|
private $status;
|
||||||
|
private $headers = [];
|
||||||
|
private $config = [];
|
||||||
|
|
||||||
|
private $response = "";
|
||||||
|
|
||||||
|
private $Messages = array(
|
||||||
|
//Informational 1xx
|
||||||
|
100 => '100 Continue',
|
||||||
|
101 => '101 Switching Protocols',
|
||||||
|
//Successful 2xx
|
||||||
|
200 => '200 OK',
|
||||||
|
201 => '201 Created',
|
||||||
|
202 => '202 Accepted',
|
||||||
|
203 => '203 Non-Authoritative Information',
|
||||||
|
204 => '204 No Content',
|
||||||
|
205 => '205 Reset Content',
|
||||||
|
206 => '206 Partial Content',
|
||||||
|
226 => '226 IM Used',
|
||||||
|
//Redirection 3xx
|
||||||
|
300 => '300 Multiple Choices',
|
||||||
|
301 => '301 Moved Permanently',
|
||||||
|
302 => '302 Found',
|
||||||
|
303 => '303 See Other',
|
||||||
|
304 => '304 Not Modified',
|
||||||
|
305 => '305 Use Proxy',
|
||||||
|
306 => '306 (Unused)',
|
||||||
|
307 => '307 Temporary Redirect',
|
||||||
|
//Client Error 4xx
|
||||||
|
400 => '400 Bad Request',
|
||||||
|
401 => '401 Unauthorized',
|
||||||
|
402 => '402 Payment Required',
|
||||||
|
403 => '403 Forbidden',
|
||||||
|
404 => '404 Not Found',
|
||||||
|
405 => '405 Method Not Allowed',
|
||||||
|
406 => '406 Not Acceptable',
|
||||||
|
407 => '407 Proxy Authentication Required',
|
||||||
|
408 => '408 Request Timeout',
|
||||||
|
409 => '409 Conflict',
|
||||||
|
410 => '410 Gone',
|
||||||
|
411 => '411 Length Required',
|
||||||
|
412 => '412 Precondition Failed',
|
||||||
|
413 => '413 Request Entity Too Large',
|
||||||
|
414 => '414 Request-URI Too Long',
|
||||||
|
415 => '415 Unsupported Media Type',
|
||||||
|
416 => '416 Requested Range Not Satisfiable',
|
||||||
|
417 => '417 Expectation Failed',
|
||||||
|
418 => '418 I\'m a teapot',
|
||||||
|
422 => '422 Unprocessable Entity',
|
||||||
|
423 => '423 Locked',
|
||||||
|
426 => '426 Upgrade Required',
|
||||||
|
428 => '428 Precondition Required',
|
||||||
|
429 => '429 Too Many Requests',
|
||||||
|
431 => '431 Request Header Fields Too Large',
|
||||||
|
//Server Error 5xx
|
||||||
|
500 => '500 Internal Server Error',
|
||||||
|
501 => '501 Not Implemented',
|
||||||
|
502 => '502 Bad Gateway',
|
||||||
|
503 => '503 Service Unavailable',
|
||||||
|
504 => '504 Gateway Timeout',
|
||||||
|
505 => '505 HTTP Version Not Supported',
|
||||||
|
506 => '506 Variant Also Negotiates',
|
||||||
|
510 => '510 Not Extended',
|
||||||
|
511 => '511 Network Authentication Required'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur de la Response
|
||||||
|
* @param int $status status HTTP de la réponse (404,200,500, etc)
|
||||||
|
* @param bool|false $stream Si la réponse est un stream (avtive/désactive les méthodes send/stream()
|
||||||
|
* @param string $type type HTTP des données de retour
|
||||||
|
* @param bool|true $clearBuffer si activé, vide le buffer avant chaque envoi de donnée (a pour effet de ne pas afficher les echo/printf)
|
||||||
|
*/
|
||||||
|
public function __construct($status = 200,$stream = false,$type = 'application/json', $clearBuffer = false)
|
||||||
|
{
|
||||||
|
$this->status = $status;
|
||||||
|
array_push($this->headers,['Content-Type',$type]);
|
||||||
|
|
||||||
|
$this->config['clearBuffer'] = $clearBuffer;
|
||||||
|
$this->config['stream'] = $stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Ajoute du contenu a la réponse qui sera envoyé (par stream() ou par send() )
|
||||||
|
* @param $content contenu a ajouter a la réponse
|
||||||
|
*/
|
||||||
|
public function write($content){
|
||||||
|
$this->response .= $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Envoie une partie de réponse au client (doit être récupéré en ajax, aucun intéret sinon), chaque bloc de donéne envoyé est séparé par
|
||||||
|
* un délimiteur ("//Block//" par défaut).ATTENTION: stream() vide la réponse (si on write() puis stream(), la réponse qu'il restera dans l'objet sera vide)
|
||||||
|
* @param string $content contenu a envoyer (optionnel car on peut utiliser la méthode write pour le faire)
|
||||||
|
* @throws Exception si la réponse n'est pas un stream
|
||||||
|
*/
|
||||||
|
public function stream($content="",$delimiter = "//Block//"){
|
||||||
|
//vérification que la réponse est un stream
|
||||||
|
if(!$this->config['stream']){
|
||||||
|
throw new Exception("Stream d'une réponse synchrone");
|
||||||
|
}
|
||||||
|
//si les headers ne sont pas encore envoyés, on le fait
|
||||||
|
if(!headers_sent()){
|
||||||
|
$this->sendHeader();
|
||||||
|
}
|
||||||
|
//si demandé, on clear le buffer avant d'envoyer
|
||||||
|
if($this->config['clearBuffer']){
|
||||||
|
ob_end_clean();
|
||||||
|
if($GLOBALS['compression']){
|
||||||
|
ob_start("ob_gzhandler");
|
||||||
|
}else{
|
||||||
|
ob_start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//on envoi le contenu de response et la variable content
|
||||||
|
if($this->response!=""){
|
||||||
|
echo $delimiter.$this->response;
|
||||||
|
}if($content != ""){
|
||||||
|
echo $delimiter.$content;
|
||||||
|
}
|
||||||
|
ob_flush();flush();
|
||||||
|
$this->response = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Envoi les headers de la réponse (status et ceux potentiellement défnini par l'utilisateur)
|
||||||
|
*/
|
||||||
|
public function sendHeader(){
|
||||||
|
//envoie le status de la requete (petit trick suivant l'architecture de PHP)
|
||||||
|
if (strpos(PHP_SAPI, 'cgi') === 0) {
|
||||||
|
header(sprintf('Status: %s', $this->Messages[$this->status]));
|
||||||
|
} else {
|
||||||
|
header(sprintf('HTTP/1.1 %s', $this->Messages[$this->status]));
|
||||||
|
}
|
||||||
|
//les autres headers
|
||||||
|
foreach($this->headers as $header){
|
||||||
|
header(sprintf('%s: %s',$header[0],$header[1]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Défini un header qui sera envoyé
|
||||||
|
* @param $header Nom du header
|
||||||
|
* @param $value Valeur du header
|
||||||
|
*/
|
||||||
|
public function setHeader($header,$value){
|
||||||
|
array_push($this->headers,[$header,$value]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Envoi la réponse et ferme la communication
|
||||||
|
* @throws Exception si la réponse est un stream
|
||||||
|
*/
|
||||||
|
public function send(){
|
||||||
|
//vérification que la réponse n'est pas un stream
|
||||||
|
if($this->config['stream']){
|
||||||
|
throw new Exception("Envoi synchrone d'une réponse stream");
|
||||||
|
}
|
||||||
|
//si les headers ne sont pas encore envoyés, on le fait
|
||||||
|
if(!headers_sent()){
|
||||||
|
$this->sendHeader();
|
||||||
|
}
|
||||||
|
//si demandé, on clear le buffer avant d'envoyer
|
||||||
|
if($this->config['clearBuffer']){
|
||||||
|
ob_end_clean();
|
||||||
|
if($GLOBALS['compression']){
|
||||||
|
ob_start("ob_gzhandler");
|
||||||
|
}else{
|
||||||
|
ob_start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//envoi de la réponse
|
||||||
|
echo $this->response;
|
||||||
|
//fermeture de la communication
|
||||||
|
header('Connection: close');
|
||||||
|
header('Content-Length: '.ob_get_length());
|
||||||
|
ob_end_flush();
|
||||||
|
ob_flush();
|
||||||
|
flush();
|
||||||
|
//permet au reste du script de s'executer même si la réponse a été envoyé et que l'utilisateur interromp le script (changement de page, etc...)
|
||||||
|
ignore_user_abort(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $status status HTTP de la réponse (404,200,500, etc)
|
||||||
|
* @param $content
|
||||||
|
* @param string $type
|
||||||
|
*/
|
||||||
|
public static function quickResponse($status,$content,$type = 'application/json'){
|
||||||
|
$response = new Response($status,false,$type);
|
||||||
|
$response->write($content);
|
||||||
|
$response->send();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"secretaire": {
|
||||||
|
"password":"thecakeisalie",
|
||||||
|
"role":[0]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,84 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="500"
|
||||||
|
height="500"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="Nouveau document 1">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.98994949"
|
||||||
|
inkscape:cx="-28.667829"
|
||||||
|
inkscape:cy="386.34941"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:snap-page="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1056"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="24"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Calque 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-114.28125,-307.375)">
|
||||||
|
<g
|
||||||
|
id="g3272"
|
||||||
|
transform="matrix(0.99258024,0,0,0.99258024,0.84793854,0.43583907)">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3212"
|
||||||
|
d="m 226.78125,582.375 c -35.23822,0 -66.68483,16.20229 -87.3125,41.5625 L 325.3125,749.21875 c 8.90501,-16.1099 13.96875,-34.63376 13.96875,-54.34375 0,-62.13204 -50.36797,-112.5 -112.5,-112.5 z m -98.5,58.15625 c -8.90639,16.11083 -14,34.63212 -14,54.34375 0,62.13203 50.36796,112.5 112.5,112.5 35.23562,0 66.68475,-16.20551 87.3125,-41.5625 L 128.28125,640.53125 z"
|
||||||
|
style="fill:#f7a93b;fill-opacity:1;stroke:none" />
|
||||||
|
<g
|
||||||
|
transform="matrix(0.90377336,0.42801134,-0.42801134,0.90377336,-245.92875,-350.08603)"
|
||||||
|
id="g3268">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="fill:#f04b36;fill-opacity:1;stroke:none"
|
||||||
|
d="m 782.84375,377.28125 c -61.94433,-0.35946 -112.10929,49.24317 -112.46875,111.1875 -0.35946,61.94433 49.21192,112.07804 111.15625,112.4375 l 127.59375,0.75 0,-223.625 -126.28125,-0.75 z"
|
||||||
|
id="path3266" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="fill:#cfd0d1;fill-opacity:1;stroke:none"
|
||||||
|
d="m 934.375,378.15625 0,223.65625 129.5,0.75 c 61.9444,0.35946 112.1093,-49.21192 112.4688,-111.15625 0.3594,-61.94433 -49.2432,-112.10929 -111.1876,-112.46875 L 934.375,378.15625 z"
|
||||||
|
id="rect3235" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
|
@ -0,0 +1,146 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="127.99999"
|
||||||
|
height="127.99999"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="dashboard.svg">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.959798"
|
||||||
|
inkscape:cx="-16.221622"
|
||||||
|
inkscape:cy="69.562511"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="g3363"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1056"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="24"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Calque 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-923.62577,-394.41087)">
|
||||||
|
<g
|
||||||
|
id="g3363"
|
||||||
|
transform="matrix(1.0096696,0,0,1.0096696,-8.9311221,-5.0515213)">
|
||||||
|
<path
|
||||||
|
style="fill:#e04f5f;fill-opacity:1;stroke:none"
|
||||||
|
d="M 64 0 C 28.653772 0 0 28.653795 0 64 C 0 99.346228 28.653772 128 64 128 C 99.346228 128 128 99.346228 128 64 C 128 28.653795 99.346228 0 64 0 z M 64 14.28125 C 91.465893 14.28125 113.71875 36.534125 113.71875 64 C 113.71875 91.465893 91.465893 113.71875 64 113.71875 C 36.534107 113.71875 14.28125 91.465893 14.28125 64 C 14.28125 36.534125 36.534107 14.28125 64 14.28125 z "
|
||||||
|
transform="matrix(0.99042301,0,0,0.99042301,923.6258,395.63674)"
|
||||||
|
id="path3273" />
|
||||||
|
<g
|
||||||
|
id="g3082"
|
||||||
|
transform="matrix(1.3608093,0,0,1.3608093,-356.12442,-166.23032)">
|
||||||
|
<rect
|
||||||
|
style="fill:#afb5b6;fill-opacity:1;stroke:none"
|
||||||
|
id="rect3275"
|
||||||
|
width="2.3359859"
|
||||||
|
height="9.1545153"
|
||||||
|
x="985.84497"
|
||||||
|
y="479.85825" />
|
||||||
|
<g
|
||||||
|
id="g3335"
|
||||||
|
transform="translate(-100,0)">
|
||||||
|
<path
|
||||||
|
id="path3333"
|
||||||
|
d="m 1087,431.03125 c -4.5419,0 -8.8204,1.10262 -12.625,3 l 5.9688,12.28125 c 1.9914,-1.05672 4.2421,-1.6875 6.6562,-1.6875 7.95,0 14.4065,6.4563 14.4062,14.40625 0,0.13763 -0.027,0.26954 -0.031,0.40625 l 14.0625,0 c 0,-15.69071 -12.7468,-28.40625 -28.4375,-28.40625 z"
|
||||||
|
style="fill:#facb1b;fill-opacity:1;stroke:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path3311"
|
||||||
|
d="m 1073.25,434.625 c -0.1431,0.0795 -0.2959,0.13687 -0.4375,0.21875 -8.4925,4.91058 -14.2187,14.07648 -14.2187,24.59375 l 14.0624,0 c 0,-0.13671 -0.031,-0.26862 -0.031,-0.40625 0,-5.0704 2.6362,-9.49668 6.5938,-12.0625 L 1073.25,434.625 z"
|
||||||
|
style="fill:#fa5655;fill-opacity:1;stroke:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g3343"
|
||||||
|
transform="translate(140,0)">
|
||||||
|
<path
|
||||||
|
transform="translate(0.49107143,-0.80357143)"
|
||||||
|
d="m 852.00894,459.72824 c 0,2.78608 -2.25857,5.04464 -5.04465,5.04464 -2.78607,0 -5.04464,-2.25856 -5.04464,-5.04464 0,-2.78608 2.25857,-5.04464 5.04464,-5.04464 2.78608,0 5.04465,2.25856 5.04465,5.04464 z"
|
||||||
|
sodipodi:ry="5.0446429"
|
||||||
|
sodipodi:rx="5.0446429"
|
||||||
|
sodipodi:cy="459.72824"
|
||||||
|
sodipodi:cx="846.96429"
|
||||||
|
id="path3339"
|
||||||
|
style="fill:#3e3e3f;fill-opacity:1;stroke:none"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3341"
|
||||||
|
d="m 843.96061,455.29731 15.99475,-13.29227 -7.87787,18.95473 z"
|
||||||
|
style="fill:#3e3e3f;fill-opacity:1;stroke:none"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
<rect
|
||||||
|
y="1039.9066"
|
||||||
|
x="375.2605"
|
||||||
|
height="9.1545153"
|
||||||
|
width="2.3359859"
|
||||||
|
id="rect3347"
|
||||||
|
style="fill:#afb5b6;fill-opacity:1;stroke:none"
|
||||||
|
transform="matrix(0.71343865,-0.7007177,0.7007177,0.71343865,0,0)" />
|
||||||
|
<rect
|
||||||
|
transform="matrix(0.00899507,-0.99995954,0.99995954,0.00899507,0,0)"
|
||||||
|
style="fill:#afb5b6;fill-opacity:1;stroke:none"
|
||||||
|
id="rect3349"
|
||||||
|
width="2.3359859"
|
||||||
|
height="9.1545153"
|
||||||
|
x="-460.62106"
|
||||||
|
y="1006.1044" />
|
||||||
|
<rect
|
||||||
|
transform="matrix(-0.71343865,-0.7007177,-0.7007177,0.71343865,0,0)"
|
||||||
|
style="fill:#afb5b6;fill-opacity:1;stroke:none"
|
||||||
|
id="rect3359"
|
||||||
|
width="2.3359859"
|
||||||
|
height="9.1545153"
|
||||||
|
x="-1032.8519"
|
||||||
|
y="-343.09863" />
|
||||||
|
<rect
|
||||||
|
y="-967.51373"
|
||||||
|
x="-478.37454"
|
||||||
|
height="9.1545153"
|
||||||
|
width="2.3359859"
|
||||||
|
id="rect3361"
|
||||||
|
style="fill:#afb5b6;fill-opacity:1;stroke:none"
|
||||||
|
transform="matrix(-0.00899507,-0.99995954,-0.99995954,0.00899507,0,0)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.6 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 32 32" height="32px" id="Layer_1" version="1.1" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><polygon fill="#D0D3D6" points="16,31 28,31 28,15 16,5.7 "/><polygon fill="#EEEDED" points="16,31 4,31 4,15 16,5.7 "/><rect fill="#B6312E" height="8" width="8" x="12" y="20"/><path d="M16,6.4l13.5,9.9l2.5-3.3L16,1" fill="#B6312E"/><path d="M16,1L0,13.1l2.5,3.3L16,6.4" fill="#DF4937"/></g></svg>
|
After Width: | Height: | Size: 634 B |
|
@ -0,0 +1,71 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="40.608002"
|
||||||
|
height="70.991997"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="Nouveau document 1">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="5.6"
|
||||||
|
inkscape:cx="-21.876364"
|
||||||
|
inkscape:cy="-22.977195"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1056"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="24"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Calque 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(79.704273,-522.0936)">
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:144px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;font-family:Latin Modern Mono Light Cond;-inkscape-font-specification:Latin Modern Mono Light Cond"
|
||||||
|
x="-84.600273"
|
||||||
|
y="601.5816"
|
||||||
|
id="text3146"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan3148"
|
||||||
|
x="-84.600273"
|
||||||
|
y="601.5816">></tspan></text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
Loading…
Reference in New Issue