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,18 +4,27 @@
|
|||
* 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) {
|
||||
|
||||
//si on charge le StaticRepo
|
||||
if(strpos($class, 'StaticRepo') !== FALSE){
|
||||
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'repositories'.DIRECTORY_SEPARATOR.$class . '.php';
|
||||
}
|
||||
//si on charge un Repo
|
||||
elseif(strpos($class, 'Repo') !== FALSE){
|
||||
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'repositories'.DIRECTORY_SEPARATOR.'repos'.DIRECTORY_SEPARATOR.$class . '.php';
|
||||
//si on charge le StaticRepo
|
||||
if(strpos($class, 'StaticRepo') !== FALSE){
|
||||
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'repositories'.DIRECTORY_SEPARATOR.$class . '.php';
|
||||
}
|
||||
//si on charge un Repo
|
||||
elseif(strpos($class, 'Repo') !== FALSE){
|
||||
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';
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//enregistrememnt de la fonction tout en bas de la pile pour ne pas casser l'autoloader de phpUnit
|
||||
|
|
|
@ -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