Add a lot
This commit is contained in:
parent
d9e043c468
commit
561bfbf475
@ -10,12 +10,15 @@ RewriteRule ^ - [L]
|
|||||||
# RewriteCond %{HTTP_HOST} ^eldotravo.fr$
|
# RewriteCond %{HTTP_HOST} ^eldotravo.fr$
|
||||||
# RewriteRule ^(.*)$ http://www.eldotravo.fr/$1 [R=301,L,E=END:1]
|
# RewriteRule ^(.*)$ http://www.eldotravo.fr/$1 [R=301,L,E=END:1]
|
||||||
|
|
||||||
# Redirection des fichiers static pour contact.sanchez-mathieu.dev
|
# Redirection des fichiers static pour contact.sanchez-mathieu.test
|
||||||
RewriteCond %{HTTP_HOST} ^contact.sanchez-mathieu.dev$
|
RewriteCond %{HTTP_HOST} ^contact.sanchez-mathieu.test
|
||||||
RewriteCond %{DOCUMENT_ROOT}/static%{REQUEST_URI} -f
|
RewriteCond %{DOCUMENT_ROOT}/static%{REQUEST_URI} -f
|
||||||
RewriteRule ^(.*)$ static/$1 [L,E=END:1]
|
RewriteRule ^(.*)$ static/$1 [L,E=END:1]
|
||||||
|
|
||||||
# RewriteRule ^haute-garonne/toulouse/installation-entretien-climatisation /haute-garonne/toulouse/climatisation.php [L]
|
# Redirection des fichiers static pour contact.sanchez-mathieu.fr
|
||||||
|
RewriteCond %{HTTP_HOST} ^contact.sanchez-mathieu.fr
|
||||||
|
RewriteCond %{DOCUMENT_ROOT}/static%{REQUEST_URI} -f
|
||||||
|
RewriteRule ^(.*)$ static/$1 [L,E=END:1]
|
||||||
|
|
||||||
# Redirection de toutes les requêtes vers Index.php
|
# Redirection de toutes les requêtes vers Index.php
|
||||||
RewriteRule ^ index.php [L,E=END:1]
|
RewriteRule ^ index.php [L,E=END:1]
|
@ -35,7 +35,7 @@ if ( count( $pages ) > 1 && $pages[ count( $pages ) - 1 ] == '' ) {
|
|||||||
if ( $pages[0] == 'api' && isset( $pages[1] ) && preg_match( '#^([a-z]+)$#', $pages[1], $api1 ) && isset( $pages[2] ) && preg_match( '#^([a-z-]+)$#', $pages[2], $api2 ) ) {
|
if ( $pages[0] == 'api' && isset( $pages[1] ) && preg_match( '#^([a-z]+)$#', $pages[1], $api1 ) && isset( $pages[2] ) && preg_match( '#^([a-z-]+)$#', $pages[2], $api2 ) ) {
|
||||||
new APIRouter( $api1[0], $api2[0] );
|
new APIRouter( $api1[0], $api2[0] );
|
||||||
|
|
||||||
} else if ( preg_match( '#^test\.dev$#', $_SERVER['SERVER_NAME'] ) ) {
|
} else if ( preg_match( '#^contact.sanchez-mathieu\.test$#', $_SERVER[ 'SERVER_NAME' ] ) || preg_match( '#^contact.sanchez-mathieu\.fr#', $_SERVER[ 'SERVER_NAME' ] ) ) {
|
||||||
new SiteRouter( $pages );
|
new SiteRouter( $pages );
|
||||||
} else {
|
} else {
|
||||||
new Error( 404 );
|
new Error( 404 );
|
||||||
|
201
src/API/APIContact.php
Normal file
201
src/API/APIContact.php
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace CAUProject3Contact\API;
|
||||||
|
|
||||||
|
use CAUProject3Contact\Model\Contact;
|
||||||
|
|
||||||
|
class APIContact extends API {
|
||||||
|
|
||||||
|
private $declaredFunctions = [
|
||||||
|
'insert' => [
|
||||||
|
'method' => 'POST',
|
||||||
|
'params' => [
|
||||||
|
'firstName' => [
|
||||||
|
'required' => true,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'lastName' => [
|
||||||
|
'required' => true,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'surname' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'email' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'address' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'phoneNumber' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'birthday' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'delete' => [
|
||||||
|
'method' => 'POST',
|
||||||
|
'params' => [
|
||||||
|
'id' => [
|
||||||
|
'required' => true,
|
||||||
|
'type' => 'int'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'get-contacts' => [
|
||||||
|
'method' => 'GET',
|
||||||
|
'params' => []
|
||||||
|
],
|
||||||
|
'update' => [
|
||||||
|
'method' => 'POST',
|
||||||
|
'params' => [
|
||||||
|
'id' => [
|
||||||
|
'required' => true,
|
||||||
|
'type' => 'int'
|
||||||
|
],
|
||||||
|
'firstName' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'lastName' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'surname' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'email' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'address' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'phoneNumber' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
],
|
||||||
|
'birthday' => [
|
||||||
|
'required' => false,
|
||||||
|
'type' => 'string'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'search' => [
|
||||||
|
'method' => 'POST',
|
||||||
|
'params' => [
|
||||||
|
'query' => [
|
||||||
|
'required' => true,
|
||||||
|
'type' => 'string'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIContact constructor.
|
||||||
|
*
|
||||||
|
* @param array $declaredFunctions
|
||||||
|
*/
|
||||||
|
public function __construct() {
|
||||||
|
parent::__construct( $this->declaredFunctions );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getDeclaredFunctions() {
|
||||||
|
return $this->declaredFunctions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function insert( array $data ) {
|
||||||
|
|
||||||
|
$id = Contact::insertNewContact( $data[ "firstName" ], $data[ "lastName" ], $data[ "surname" ],
|
||||||
|
$data[ "email" ], $data[ "address" ], $data[ "phoneNumber" ], $data[ "birthday" ] );
|
||||||
|
|
||||||
|
$this->returnJson( json_encode( [
|
||||||
|
"status" => "success",
|
||||||
|
"data" => [
|
||||||
|
"id" => $id
|
||||||
|
]
|
||||||
|
] ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete( array $data ) {
|
||||||
|
Contact::deleteContact( $data[ "id" ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getContacts() {
|
||||||
|
$this->returnJson( json_encode( [
|
||||||
|
"contacts" => Contact::getAllContact()
|
||||||
|
] ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update( array $data ) {
|
||||||
|
$contact = Contact::getById( $data[ "id" ] );
|
||||||
|
|
||||||
|
$newData = [];
|
||||||
|
|
||||||
|
if ( $data[ "firstName" ] !== null && $data[ "firstName" ] !== "" ) {
|
||||||
|
$newData[ "first_name" ] = $data[ "firstName" ];
|
||||||
|
}
|
||||||
|
if ( $data[ "lastName" ] !== null && $data[ "lastName" ] !== "" ) {
|
||||||
|
$newData[ "last_name" ] = $data[ "lastName" ];
|
||||||
|
}
|
||||||
|
if ( $data[ "surname" ] !== null && $data[ "surname" ] !== "" ) {
|
||||||
|
$newData[ "surname" ] = $data[ "surname" ];
|
||||||
|
}
|
||||||
|
if ( $data[ "email" ] !== null && $data[ "email" ] !== "" ) {
|
||||||
|
$newData[ "email" ] = $data[ "email" ];
|
||||||
|
}
|
||||||
|
if ( $data[ "address" ] !== null && $data[ "address" ] !== "" ) {
|
||||||
|
$newData[ "address" ] = $data[ "address" ];
|
||||||
|
}
|
||||||
|
if ( $data[ "phoneNumber" ] !== null && $data[ "phoneNumber" ] !== "" ) {
|
||||||
|
$newData[ "phone_number" ] = $data[ "phoneNumber" ];
|
||||||
|
}
|
||||||
|
if ( $data[ "birthday" ] !== null && $data[ "birthday" ] !== "" ) {
|
||||||
|
$newData[ "birthday" ] = date( "Y-m-d", strtotime( $data[ "birthday" ] ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
$contact->updateContact( $newData );
|
||||||
|
$this->returnJson( json_encode( $contact ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function search( array $data ) {
|
||||||
|
if ( count_chars( $data[ "query" ] ) >= 3 ) {
|
||||||
|
$result = Contact::search( $data[ "query" ] );
|
||||||
|
if ( $result !== null ) {
|
||||||
|
$this->returnJson( [
|
||||||
|
"status" => "success",
|
||||||
|
"code" => 200,
|
||||||
|
"result" => $result,
|
||||||
|
] );
|
||||||
|
} else {
|
||||||
|
$this->returnJson( [
|
||||||
|
"status" => "error",
|
||||||
|
"code" => 404,
|
||||||
|
"message" => "Nothing find",
|
||||||
|
] );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->returnJson( [
|
||||||
|
"status" => "error",
|
||||||
|
"code" => 400,
|
||||||
|
"message" => "Need at least 3 chars",
|
||||||
|
] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -14,7 +14,8 @@ class APIError extends Controller {
|
|||||||
* @param string $publicMessage
|
* @param string $publicMessage
|
||||||
* @param string $code
|
* @param string $code
|
||||||
*/
|
*/
|
||||||
public function __construct( int $ErrCode = 500, string $devMessage = 'Erreur inconnue', string $publicMessage = 'Une erreur inconnue s\'est produite', string $code = '' ) {
|
public function __construct( int $ErrCode = 500, string $devMessage = 'Erreur inconnue',
|
||||||
|
string $publicMessage = 'Une erreur inconnue s\'est produite', string $code = '' ) {
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
|
|
||||||
$tabCode = [
|
$tabCode = [
|
||||||
@ -78,7 +79,7 @@ class APIError extends Controller {
|
|||||||
];
|
];
|
||||||
|
|
||||||
header( 'Content-Type: application/json' );
|
header( 'Content-Type: application/json' );
|
||||||
header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[ $ErrCode ]['label'] );
|
header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' ' . $tabCode[ $ErrCode ][ 'label' ] );
|
||||||
echo json_encode( [
|
echo json_encode( [
|
||||||
'status' => 'echec',
|
'status' => 'echec',
|
||||||
'msg' => $publicMessage,
|
'msg' => $publicMessage,
|
||||||
|
@ -24,7 +24,7 @@ class APIRouter {
|
|||||||
|
|
||||||
//On vérifie que la classe appelée existe
|
//On vérifie que la classe appelée existe
|
||||||
$fileName = 'API' . ucfirst( $file );
|
$fileName = 'API' . ucfirst( $file );
|
||||||
if ( ! file_exists( 'src/API/' . $fileName . '.php' ) ) {
|
if ( !file_exists( 'src/API/' . $fileName . '.php' ) ) {
|
||||||
new APIError( 404 );
|
new APIError( 404 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ class APIRouter {
|
|||||||
$class = new $class( $action );
|
$class = new $class( $action );
|
||||||
|
|
||||||
//On vérifie que l'action demandé est déclarée
|
//On vérifie que l'action demandé est déclarée
|
||||||
if ( ! array_key_exists( $action, $class->getDeclaredFunctions() ) ) {
|
if ( !array_key_exists( $action, $class->getDeclaredFunctions() ) ) {
|
||||||
new APIError( 404 );
|
new APIError( 404 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,25 +49,25 @@ class APIRouter {
|
|||||||
$function = implode( '', $array ); //le nom de la fonction
|
$function = implode( '', $array ); //le nom de la fonction
|
||||||
|
|
||||||
//On vérifie que la fonction existe dans la classe
|
//On vérifie que la fonction existe dans la classe
|
||||||
if ( ! method_exists( $class, $function ) ) {
|
if ( !method_exists( $class, $function ) ) {
|
||||||
new APIError( 500, 'La fonction ' . $function . ' n\'existe pas dans la classe ' . get_class( $class ) );
|
new APIError( 500, 'La fonction ' . $function . ' n\'existe pas dans la classe ' . get_class( $class ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
//On vérifie que la méthode d'envoie est référencée
|
//On vérifie que la méthode d'envoie est référencée
|
||||||
$method = $class->getDeclaredFunctions()[ $action ]['method'];
|
$method = $class->getDeclaredFunctions()[ $action ][ 'method' ];
|
||||||
if ( ! in_array( $method, self::HTTP_METHODS ) ) {
|
if ( !in_array( $method, self::HTTP_METHODS ) ) {
|
||||||
new APIError( 500, 'méthode http inconnue' );
|
new APIError( 500, 'méthode http inconnue' );
|
||||||
}
|
}
|
||||||
|
|
||||||
//On vérifie que la méthode requise et la mathode obtenue sont les même
|
//On vérifie que la méthode requise et la mathode obtenue sont les même
|
||||||
if ( $method != $_SERVER['REQUEST_METHOD'] ) {
|
if ( $method != $_SERVER[ 'REQUEST_METHOD' ] ) {
|
||||||
new APIError( 400, 'La méthode HTTP ne correspond pas à la méthode prévue' );
|
new APIError( 400, 'La méthode HTTP ne correspond pas à la méthode prévue' );
|
||||||
}
|
}
|
||||||
|
|
||||||
//On met les paramètres dans le tableau $data
|
//On met les paramètres dans le tableau $data
|
||||||
$params = $class->getDeclaredFunctions()[ $action ]['params'];
|
$params = $class->getDeclaredFunctions()[ $action ][ 'params' ];
|
||||||
$data = [];
|
$data = [];
|
||||||
if ( ! empty( $params ) ) {
|
if ( !empty( $params ) ) {
|
||||||
if ( $method == 'DELETE' || $method == 'PUT' ) {
|
if ( $method == 'DELETE' || $method == 'PUT' ) {
|
||||||
parse_str( file_get_contents( 'php://input' ), $data );
|
parse_str( file_get_contents( 'php://input' ), $data );
|
||||||
} else if ( $method == 'POST' ) {
|
} else if ( $method == 'POST' ) {
|
||||||
@ -78,47 +78,47 @@ class APIRouter {
|
|||||||
|
|
||||||
//On boucle sur les paramètres de la doc de la fonction
|
//On boucle sur les paramètres de la doc de la fonction
|
||||||
foreach ( $params as $p => $options ) {
|
foreach ( $params as $p => $options ) {
|
||||||
if ( ! isset( $options['required'] ) ) {
|
if ( !isset( $options[ 'required' ] ) ) {
|
||||||
$options['required'] = false;
|
$options[ 'required' ] = false;
|
||||||
}
|
}
|
||||||
//Si le paramètre est obligatoire et qu'il est vide ou non fourni on lève une erreur 400 BAD REQUEST
|
//Si le paramètre est obligatoire et qu'il est vide ou non fourni on lève une erreur 400 BAD REQUEST
|
||||||
if ( $options['required'] && ( ! array_key_exists( $p, $data ) || ( empty( $data[ $p ] ) && $data[ $p ] != '0' ) ) ) {
|
if ( $options[ 'required' ] && ( !array_key_exists( $p, $data ) || ( empty( $data[ $p ] ) && $data[ $p ] != '0' ) ) ) {
|
||||||
$devMsg = 'Paramètre ' . $p . ' manquant';
|
$devMsg = 'Paramètre ' . $p . ' manquant';
|
||||||
if ( isset( $options['devMsg'] ) ) {
|
if ( isset( $options[ 'devMsg' ] ) ) {
|
||||||
$devMsg = $options['devMsg'];
|
$devMsg = $options[ 'devMsg' ];
|
||||||
}
|
}
|
||||||
$publicMsg = 'Des paramètres obligatoires ne sont pas envoyés ou sont vides';
|
$publicMsg = 'Des paramètres obligatoires ne sont pas envoyés ou sont vides';
|
||||||
if ( isset( $options['publicMsg'] ) ) {
|
if ( isset( $options[ 'publicMsg' ] ) ) {
|
||||||
$publicMsg = $options['publicMsg'];
|
$publicMsg = $options[ 'publicMsg' ];
|
||||||
}
|
}
|
||||||
$code = '';
|
$code = '';
|
||||||
if ( isset( $options['code'] ) ) {
|
if ( isset( $options[ 'code' ] ) ) {
|
||||||
$code = $options['code'];
|
$code = $options[ 'code' ];
|
||||||
}
|
}
|
||||||
new APIError( 400, $devMsg, $publicMsg, $code );
|
new APIError( 400, $devMsg, $publicMsg, $code );
|
||||||
}
|
}
|
||||||
|
|
||||||
//On vérifie que le type donné correspond au typage requis
|
//On vérifie que le type donné correspond au typage requis
|
||||||
if ( isset( $options['type'] ) ) {
|
if ( isset( $options[ 'type' ] ) ) {
|
||||||
if ( $options['type'] == 'int' ) {
|
if ( $options[ 'type' ] == 'int' ) {
|
||||||
if ( ctype_digit( $data[ $p ] ) ) {
|
if ( ctype_digit( $data[ $p ] ) ) {
|
||||||
$data[ $p ] = (int) $data[ $p ];
|
$data[ $p ] = (int)$data[ $p ];
|
||||||
} else {
|
} else {
|
||||||
new APIError( 400, 'Le type donné ne correspond pas au type demandé pour le paramètre ' . $p . ' : string donné, ' . $options['type'] . ' requis' );
|
new APIError( 400, 'Le type donné ne correspond pas au type demandé pour le paramètre ' . $p . ' : string donné, ' . $options[ 'type' ] . ' requis' );
|
||||||
}
|
}
|
||||||
} else if ( $options['type'] == 'bool' ) {
|
} else if ( $options[ 'type' ] == 'bool' ) {
|
||||||
if ( $data[ $p ] == 'true' || $data[ $p ] == '1' ) {
|
if ( $data[ $p ] == 'true' || $data[ $p ] == '1' ) {
|
||||||
$data[ $p ] = true;
|
$data[ $p ] = true;
|
||||||
} else if ( $data[ $p ] == 'false' || $data[ $p ] == '0' ) {
|
} else if ( $data[ $p ] == 'false' || $data[ $p ] == '0' ) {
|
||||||
$data[ $p ] = false;
|
$data[ $p ] = false;
|
||||||
} else {
|
} else {
|
||||||
new APIError( 400, 'Le type donné ne correspond pas au type demandé pour le paramètre ' . $p . ' : string donné, ' . $options['type'] . ' requis' );
|
new APIError( 400, 'Le type donné ne correspond pas au type demandé pour le paramètre ' . $p . ' : string donné, ' . $options[ 'type' ] . ' requis' );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Si un paramètre non obligatoire n'est pas donné par l'utilisateur on lui donne la valeur par défaut d'une chaine vide
|
//Si un paramètre non obligatoire n'est pas donné par l'utilisateur on lui donne la valeur par défaut d'une chaine vide
|
||||||
if ( ! array_key_exists( $p, $data ) ) {
|
if ( !array_key_exists( $p, $data ) ) {
|
||||||
$data[ $p ] = '';
|
$data[ $p ] = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ class Autoloader {
|
|||||||
*/
|
*/
|
||||||
static function autoload( $class ) {
|
static function autoload( $class ) {
|
||||||
if ( preg_match( '#^' . Config::NAMESPACE . '\\\(.+)$#', $class, $matches ) ) {
|
if ( preg_match( '#^' . Config::NAMESPACE . '\\\(.+)$#', $class, $matches ) ) {
|
||||||
require 'src/' . str_replace( '\\', '/', $matches[1] ) . '.php';
|
require 'src/' . str_replace( '\\', '/', $matches[ 1 ] ) . '.php';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,12 +3,12 @@
|
|||||||
namespace CAUProject3Contact;
|
namespace CAUProject3Contact;
|
||||||
|
|
||||||
class Config {
|
class Config {
|
||||||
const SITE_JS_VERSION = '1.00';
|
const SITE_JS_VERSION = '0.01';
|
||||||
const SITE_CSS_VERSION = '1.00';
|
const SITE_CSS_VERSION = '0.01';
|
||||||
|
|
||||||
const TITLE_HEADER = 'Your contact';
|
const TITLE_HEADER = 'Your contact';
|
||||||
const DESCRIPTION_HEADER = 'Manage your contact easly';
|
const DESCRIPTION_HEADER = 'Manage your contact easly';
|
||||||
const NAMESPACE = 'CAUProject3Contact';
|
const NAMESPACE = 'CAUProject3Contact';
|
||||||
|
|
||||||
const FAVICON_PATH = '/img/favicon.png';
|
const FAVICON_PATH = '/img/favicon.ico';
|
||||||
}
|
}
|
@ -21,11 +21,11 @@ class ControllerSite {
|
|||||||
ob_start();
|
ob_start();
|
||||||
extract( $this->data );
|
extract( $this->data );
|
||||||
|
|
||||||
if ( empty( $this->head['title'] ) ) {
|
if ( empty( $this->head[ 'title' ] ) ) {
|
||||||
$this->head['title'] = Config::TITLE_HEADER;
|
$this->head[ 'title' ] = Config::TITLE_HEADER;
|
||||||
}
|
}
|
||||||
if ( empty( $this->head['description'] ) ) {
|
if ( empty( $this->head[ 'description' ] ) ) {
|
||||||
$this->head['description'] = Config::DESCRIPTION_HEADER;
|
$this->head[ 'description' ] = Config::DESCRIPTION_HEADER;
|
||||||
}
|
}
|
||||||
if ( $header ) {
|
if ( $header ) {
|
||||||
require 'src/View/Site/tpl/head.php';
|
require 'src/View/Site/tpl/head.php';
|
||||||
|
@ -75,22 +75,22 @@ class Error extends Controller {
|
|||||||
];
|
];
|
||||||
|
|
||||||
if ( isset( $tabCode[ $ErrCode ] ) ) {
|
if ( isset( $tabCode[ $ErrCode ] ) ) {
|
||||||
header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[ $ErrCode ]['label'] );
|
header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' ' . $tabCode[ $ErrCode ][ 'label' ] );
|
||||||
if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest' ) {
|
if ( isset( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) && strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) == 'xmlhttprequest' ) {
|
||||||
$this->throwError( $tabCode[ $ErrCode ]['msg'], 'Erreur_' . $ErrCode );
|
$this->throwError( $tabCode[ $ErrCode ][ 'msg' ], 'Erreur_' . $ErrCode );
|
||||||
}
|
}
|
||||||
$erreur = $tabCode[ $ErrCode ]['msg'];
|
$erreur = $tabCode[ $ErrCode ][ 'msg' ];
|
||||||
$this->addData( [ 'erreur' => $erreur ] );
|
$this->addData( [ 'erreur' => $erreur ] );
|
||||||
} else {
|
} else {
|
||||||
header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[500]['label'] );
|
header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' ' . $tabCode[ 500 ][ 'label' ] );
|
||||||
if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest' ) {
|
if ( isset( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) && strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) == 'xmlhttprequest' ) {
|
||||||
$this->throwError( $tabCode[500]['msg'], 'Erreur_500' );
|
$this->throwError( $tabCode[ 500 ][ 'msg' ], 'Erreur_500' );
|
||||||
}
|
}
|
||||||
$erreur = $tabCode[500]['msg'];
|
$erreur = $tabCode[ 500 ][ 'msg' ];
|
||||||
$this->addData( [ 'erreur' => $erreur ] );
|
$this->addData( [ 'erreur' => $erreur ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! empty( $message ) ) {
|
if ( !empty( $message ) ) {
|
||||||
$this->addData( [ 'message' => $message ] );
|
$this->addData( [ 'message' => $message ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace CAUProject3Contact\Controller\Site;
|
namespace CAUProject3Contact\Controller\Site;
|
||||||
|
|
||||||
use CAUProject3Contact\Controller\ControllerSite;
|
use CAUProject3Contact\Controller\ControllerSite;
|
||||||
|
use CAUProject3Contact\Model\Contact;
|
||||||
|
|
||||||
class Index extends ControllerSite {
|
class Index extends ControllerSite {
|
||||||
|
|
||||||
@ -12,14 +13,15 @@ class Index extends ControllerSite {
|
|||||||
public function __construct() {
|
public function __construct() {
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
|
|
||||||
$this->addHead( [
|
$this->addHead( [] );
|
||||||
|
|
||||||
|
$this->addFooter( [] );
|
||||||
|
|
||||||
|
$contacts = Contact::getAllContact();
|
||||||
|
|
||||||
|
$this->addData( [
|
||||||
|
"contacts" => $contacts
|
||||||
] );
|
] );
|
||||||
|
|
||||||
$this->addFooter( [
|
|
||||||
|
|
||||||
] );
|
|
||||||
|
|
||||||
$this->addData( [] );
|
|
||||||
$this->view();
|
$this->view();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,22 +76,22 @@ class SiteError extends ControllerSite {
|
|||||||
];
|
];
|
||||||
|
|
||||||
if ( isset( $tabCode[ $ErrCode ] ) ) {
|
if ( isset( $tabCode[ $ErrCode ] ) ) {
|
||||||
header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[ $ErrCode ]['label'] );
|
header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' ' . $tabCode[ $ErrCode ][ 'label' ] );
|
||||||
if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest' ) {
|
if ( isset( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) && strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) == 'xmlhttprequest' ) {
|
||||||
$this->throwError( 'Erreur ' . $tabCode[ $ErrCode ]['label'], 'Erreur_' . $ErrCode );
|
$this->throwError( 'Erreur ' . $tabCode[ $ErrCode ][ 'label' ], 'Erreur_' . $ErrCode );
|
||||||
}
|
}
|
||||||
$erreur = $tabCode[ $ErrCode ]['msg'];
|
$erreur = $tabCode[ $ErrCode ][ 'msg' ];
|
||||||
$this->addData( [ 'erreur' => $erreur ] );
|
$this->addData( [ 'erreur' => $erreur ] );
|
||||||
} else {
|
} else {
|
||||||
header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[500]['label'] );
|
header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' ' . $tabCode[ 500 ][ 'label' ] );
|
||||||
if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest' ) {
|
if ( isset( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) && strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) == 'xmlhttprequest' ) {
|
||||||
$this->throwError( 'Erreur ' . $tabCode[500]['label'], 'Erreur_500' );
|
$this->throwError( 'Erreur ' . $tabCode[ 500 ][ 'label' ], 'Erreur_500' );
|
||||||
}
|
}
|
||||||
$erreur = $tabCode[500]['msg'];
|
$erreur = $tabCode[ 500 ][ 'msg' ];
|
||||||
$this->addData( [ 'erreur' => $erreur ] );
|
$this->addData( [ 'erreur' => $erreur ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! empty( $message ) ) {
|
if ( !empty( $message ) ) {
|
||||||
$this->addData( [ 'message' => $message ] );
|
$this->addData( [ 'message' => $message ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ class SiteRouter {
|
|||||||
|
|
||||||
set_error_handler( 'errorHandler' );
|
set_error_handler( 'errorHandler' );
|
||||||
|
|
||||||
if ( $pages[0] == '' ) {
|
if ( $pages[ 0 ] == '' ) {
|
||||||
new Index();
|
new Index();
|
||||||
} else {
|
} else {
|
||||||
new SiteError( 404 );
|
new SiteError( 404 );
|
||||||
|
@ -6,10 +6,18 @@ use Exception;
|
|||||||
use PDO;
|
use PDO;
|
||||||
|
|
||||||
class BDD {
|
class BDD {
|
||||||
const SQL_SERVER = 'sql.sanchez-mathieu.fr'; // BDD Server
|
|
||||||
const SQL_LOGIN = 'why7n0_contact'; // BDD Login
|
// Server BDD
|
||||||
const SQL_PASSWORD = 'fC3c87Gy'; // BDD Password
|
// const SQL_SERVER = 'sql.sanchez-mathieu.fr'; // BDD Server
|
||||||
const SQL_DB = 'why7n0_contact'; // BDD Name
|
// const SQL_LOGIN = 'why7n0_contact'; // BDD Login
|
||||||
|
// const SQL_PASSWORD = 'fC3c87Gy'; // BDD Password
|
||||||
|
// const SQL_DB = 'why7n0_contact'; // BDD Name
|
||||||
|
|
||||||
|
// Local BDD
|
||||||
|
const SQL_SERVER = 'localhost'; // BDD Server
|
||||||
|
const SQL_LOGIN = 'root'; // BDD Login
|
||||||
|
const SQL_PASSWORD = ''; // BDD Password
|
||||||
|
const SQL_DB = 'contact'; // BDD Name
|
||||||
|
|
||||||
private static $bdd;
|
private static $bdd;
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ abstract class BDTables {
|
|||||||
// Ex : const ABONNEMENT = 'abonnement';
|
// Ex : const ABONNEMENT = 'abonnement';
|
||||||
|
|
||||||
const LOGS = "logs";
|
const LOGS = "logs";
|
||||||
|
const CONTACT = "contact";
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
220
src/Model/Contact.php
Normal file
220
src/Model/Contact.php
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace CAUProject3Contact\Model;
|
||||||
|
|
||||||
|
class Contact {
|
||||||
|
|
||||||
|
public $id;
|
||||||
|
public $firstName;
|
||||||
|
public $lastName;
|
||||||
|
public $surname;
|
||||||
|
public $email;
|
||||||
|
public $address;
|
||||||
|
public $phoneNumber;
|
||||||
|
public $birthday;
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
public function __construct( int $id = null, string $firstName = null, string $lastName = null,
|
||||||
|
string $surname = null, string $email = null, string $address = null,
|
||||||
|
string $phoneNumber = null, string $birthday = null ) {
|
||||||
|
if ( $id === null || $firstName === null || $lastName === null ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$this->id = $id;
|
||||||
|
$this->firstName = $firstName;
|
||||||
|
$this->lastName = $lastName;
|
||||||
|
$this->surname = $surname;
|
||||||
|
$this->email = $email;
|
||||||
|
$this->address = $address;
|
||||||
|
$this->phoneNumber = $phoneNumber;
|
||||||
|
$this->birthday = $birthday;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getById( int $id ) {
|
||||||
|
$req = BDD::instance()->prepare( "SELECT * FROM " . BDTables::CONTACT .
|
||||||
|
" WHERE `id` = :id" );
|
||||||
|
$req->execute( [ "id" => $id ] );
|
||||||
|
$d = $req->fetch();
|
||||||
|
return new Contact( $d[ "id" ], $d[ "first_name" ], $d[ "last_name" ], $d[ "surname" ],
|
||||||
|
$d[ "email" ], $d[ "address" ], $d[ "phone_number" ], $d[ "birthday" ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
|
||||||
|
public static function insertNewContact( string $firstName, string $lastName, string $surname = null,
|
||||||
|
string $email = null,
|
||||||
|
string $address = null, string $phoneNumber = null,
|
||||||
|
string $birthday = null ) {
|
||||||
|
$data = [
|
||||||
|
"first_name" => $firstName,
|
||||||
|
"last_name" => $lastName,
|
||||||
|
];
|
||||||
|
if ( $surname !== null && $surname !== "" ) {
|
||||||
|
$data[ "surname" ] = $surname;
|
||||||
|
}
|
||||||
|
if ( $email !== null && $email !== "" ) {
|
||||||
|
$data[ "email" ] = $email;
|
||||||
|
}
|
||||||
|
if ( $address !== null && $address !== "" ) {
|
||||||
|
$data[ "address" ] = $address;
|
||||||
|
}
|
||||||
|
if ( $phoneNumber !== null && $phoneNumber !== "" ) {
|
||||||
|
$data[ "phone_number" ] = $phoneNumber;
|
||||||
|
}
|
||||||
|
if ( $birthday !== null && $birthday !== "" ) {
|
||||||
|
$data[ "birthday" ] = date( "Y-m-d", strtotime( $birthday ) );
|
||||||
|
}
|
||||||
|
return Model::insert( BDTables::CONTACT, $data );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function deleteContact( int $id ) {
|
||||||
|
Model::delete( BDTables::CONTACT, [ "id" => $id ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getAllContact(): array {
|
||||||
|
$contacts = [];
|
||||||
|
$req = BDD::instance()->prepare( "SELECT * FROM " . BDTables::CONTACT );
|
||||||
|
$req->execute();
|
||||||
|
|
||||||
|
foreach ( $req->fetchAll() as $c ) {
|
||||||
|
$contacts[] = new Contact( $c[ "id" ], $c[ "first_name" ], $c[ "last_name" ], $c[ "surname" ],
|
||||||
|
$c[ "email" ], $c[ "address" ], $c[ "phone_number" ], $c[ "birthday" ] );
|
||||||
|
}
|
||||||
|
return ( count( $contacts ) > 0 ? $contacts : null );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function search( string $query ) {
|
||||||
|
$result = [];
|
||||||
|
$words = explode( " ", cleanString( $query ) );
|
||||||
|
|
||||||
|
$q1 = $q2 = $q3 = $q4 = "SELECT * FROM `" . BDTables::CONTACT . "` WHERE ";
|
||||||
|
|
||||||
|
$lastKey = endKey( $words );
|
||||||
|
foreach ( $words as $key => $word ) {
|
||||||
|
$normal = self::getQuerySearch( $word, [ "first_name", "last_name", "surname" ] );;
|
||||||
|
$hard = self::getQuerySearch( $word, [ "email", "address", "phone_number" ] );
|
||||||
|
$q1 .= $normal;
|
||||||
|
$q2 .= $normal;
|
||||||
|
$q3 .= $hard;
|
||||||
|
$q4 .= $hard;
|
||||||
|
if ( $key != $lastKey ) {
|
||||||
|
$q1 .= " AND ";
|
||||||
|
$q2 .= " OR ";
|
||||||
|
$q3 .= " AND ";
|
||||||
|
$q4 .= " OR ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$req1 = BDD::instance()->prepare( $q1 );
|
||||||
|
$req2 = BDD::instance()->prepare( $q2 );
|
||||||
|
$req3 = BDD::instance()->prepare( $q3 );
|
||||||
|
$req4 = BDD::instance()->prepare( $q4 );
|
||||||
|
|
||||||
|
$req1->execute();
|
||||||
|
$req2->execute();
|
||||||
|
$req3->execute();
|
||||||
|
$req4->execute();
|
||||||
|
|
||||||
|
$tmp1 = $req1->fetchAll();
|
||||||
|
$tmp2 = filterArrays( $tmp1, $req2->fetchAll() );
|
||||||
|
$tmp3 = filterArrays( $tmp1, filterArrays( $tmp2, $req3->fetchAll() ) );
|
||||||
|
$tmp4 = filterArrays( $tmp1, filterArrays( $tmp2, filterArrays( $tmp3, $req4->fetchAll() ) ) );
|
||||||
|
|
||||||
|
if ( count( $tmp1 ) > 0 || count( $tmp2 ) > 0 || count( $tmp3 ) > 0 || count( $tmp4 ) > 0 ) {
|
||||||
|
$result[ "1" ] = ( count( $tmp1 ) > 0 ? $tmp1 : null );
|
||||||
|
$result[ "2" ] = ( count( $tmp2 ) > 0 ? $tmp2 : null );
|
||||||
|
$result[ "3" ] = ( count( $tmp3 ) > 0 ? $tmp3 : null );
|
||||||
|
$result[ "4" ] = ( count( $tmp4 ) > 0 ? $tmp4 : null );
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function getQuerySearch( string $word, array $fields ): string {
|
||||||
|
$str = '';
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
|
foreach ( $fields as $field ) {
|
||||||
|
if ( $i === 0 ) {
|
||||||
|
$str .= "(";
|
||||||
|
} else {
|
||||||
|
$str .= " OR ";
|
||||||
|
}
|
||||||
|
$str .= "`" . $field . "` LIKE '%" . $word . "%'";
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
$str .= ')';
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getFirstName(): string {
|
||||||
|
return $this->firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getLastName(): string {
|
||||||
|
return $this->lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getSurname() {
|
||||||
|
return $this->surname;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getEmail() {
|
||||||
|
return $this->email;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static functions
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getAddress() {
|
||||||
|
return $this->address;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getPhoneNumber() {
|
||||||
|
return $this->phoneNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getBirthday() {
|
||||||
|
return $this->birthday;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateContact( array $data ) {
|
||||||
|
foreach ( $data as $key => $value ) {
|
||||||
|
$this->{$key} = $value;
|
||||||
|
}
|
||||||
|
Model::update( BDTables::CONTACT, $data, "id", $this->getId() );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getId(): int {
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
File diff suppressed because it is too large
Load Diff
@ -41,7 +41,8 @@ class Logs {
|
|||||||
* @param string|null $line
|
* @param string|null $line
|
||||||
* @param string|null $date
|
* @param string|null $date
|
||||||
*/
|
*/
|
||||||
public function __construct( int $id = null, string $level = null, string $message = null, string $file = null, string $line = null, string $date = null ) {
|
public function __construct( int $id = null, string $level = null, string $message = null, string $file = null,
|
||||||
|
string $line = null, string $date = null ) {
|
||||||
if ( $id === null ) {
|
if ( $id === null ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -81,7 +82,7 @@ class Logs {
|
|||||||
$return = [];
|
$return = [];
|
||||||
|
|
||||||
foreach ( $req->fetchAll() as $l ) {
|
foreach ( $req->fetchAll() as $l ) {
|
||||||
$log = new Logs( $l['id'], $l['level'], $l['message'], $l['file'], $l['line'], $l['date'] );
|
$log = new Logs( $l[ 'id' ], $l[ 'level' ], $l[ 'message' ], $l[ 'file' ], $l[ 'line' ], $l[ 'date' ] );
|
||||||
$return[] = $log;
|
$return[] = $log;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,6 +45,22 @@ class Model {
|
|||||||
$req = BDD::instance()->prepare( $reqStr );
|
$req = BDD::instance()->prepare( $reqStr );
|
||||||
$req->execute( $data );
|
$req->execute( $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function delete( string $tableName, array $conditions ) {
|
||||||
|
$reqStr = 'DELETE FROM ' . $tableName . ' WHERE ';
|
||||||
|
$lastKey = endKey( $conditions );
|
||||||
|
|
||||||
|
foreach ( $conditions as $key => $value ) {
|
||||||
|
$reqStr .= $key . ' = :' . $key;
|
||||||
|
if ( $key != $lastKey ) {
|
||||||
|
$reqStr .= ' AND ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$req = BDD::instance()->prepare( $reqStr );
|
||||||
|
$req->execute( $conditions );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
@ -1,3 +1,39 @@
|
|||||||
<div>
|
<div class="section scrollspy">
|
||||||
Bonjour 2
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col s12 main-container">
|
||||||
|
<table class="highlight centered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>First Name</th>
|
||||||
|
<th>Last Name</th>
|
||||||
|
<th>Surname</th>
|
||||||
|
<th>Email</th>
|
||||||
|
<th>Address</th>
|
||||||
|
<th>Phone Number</th>
|
||||||
|
<th>Birthday</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach ( $contacts as $contact ) {
|
||||||
|
echo "<tr>";
|
||||||
|
echo " <td>" . $contact->getFirstName() . "</td>";
|
||||||
|
echo " <td>" . $contact->getLastName() . "</td>";
|
||||||
|
echo " <td>" . ( $contact->getSurname() ? $contact->getSurname() : "" ) . "</td>";
|
||||||
|
echo " <td>" . ( $contact->getEmail() ? $contact->getEmail() : "" ) . "</td>";
|
||||||
|
echo " <td>" . ( $contact->getAddress() ? $contact->getAddress() : "" ) . "</td>";
|
||||||
|
echo " <td>" . ( $contact->getPhoneNumber() ? $contact->getPhoneNumber() : "" ) . "</td>";
|
||||||
|
echo " <td>" . ( $contact->getBirthday() ? date( "Y-m-d", strtotime( $contact->getBirthday() ) ) : "" ) . "</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
let contacts = <?= json_encode( $contacts ) ?>;
|
||||||
|
</script>
|
@ -1,5 +1,32 @@
|
|||||||
<script src="/js/jquery-3.2.1.min.js"></script>
|
</div>
|
||||||
<script src="/js/javascript.js?v=<?= CAUProject3Contact\Config::SITE_JS_VERSION ?>"></script>
|
</main>
|
||||||
|
|
||||||
|
<div id="modal" class="modal modal-fixed-footer">
|
||||||
|
<div class="modal-content">
|
||||||
|
<h4>Add new contact</h4>
|
||||||
|
<p>Test</p>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<a class="waves-effect waves-green btn-flat">Validate</a>
|
||||||
|
<a class="waves-effect waves-red btn-flat">Cancel</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="page-footer blue">
|
||||||
|
<div class="footer-copyright">
|
||||||
|
<div class="container">
|
||||||
|
Made by <a class="blue-text text-lighten-3" target="_blank" href="https://www.sanchez-mathieu.fr">Mathieu
|
||||||
|
Sanchez</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script src="/js/jquery-3.3.1.min.js"></script>
|
||||||
|
<script async src="/js/materialize.min.js"></script>
|
||||||
|
|
||||||
|
<script async src="/js/javascript.js?v=<?= CAUProject3Contact\Config::SITE_JS_VERSION ?>"></script>
|
||||||
|
|
||||||
|
<link href="/css/materialize.min.css" rel="stylesheet">
|
||||||
<link href="/css/style.css?v=<?= CAUProject3Contact\Config::SITE_CSS_VERSION ?>" rel="stylesheet">
|
<link href="/css/style.css?v=<?= CAUProject3Contact\Config::SITE_CSS_VERSION ?>" rel="stylesheet">
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
@ -1,41 +1,66 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<link rel="manifest" href="/manifest.json">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0"/>
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
|
|
||||||
|
<!-- <link rel="manifest" href="/manifest.json">-->
|
||||||
|
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" id="status-bar" content="white-translucent">
|
<meta name="apple-mobile-web-app-status-bar-style" id="status-bar" content="white-translucent">
|
||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
|
|
||||||
<meta name="author" content="Eldotravo">
|
<meta name="author" content="Mathieu Sanchez">
|
||||||
|
|
||||||
<title><?= $this->head['title'] ?></title>
|
<title><?= $this->head[ 'title' ] ?></title>
|
||||||
<meta name="description" content="<?= $this->head['description'] ?>">
|
<meta name="description" content="<?= $this->head[ 'description' ] ?>">
|
||||||
|
|
||||||
<meta property="og:title" content="<?= $this->head['title'] ?>"/>
|
<meta property="og:title" content="<?= $this->head[ 'title' ] ?>"/>
|
||||||
<meta property="og:description" content="<?= $this->head['description'] ?>"/>
|
<meta property="og:description" content="<?= $this->head[ 'description' ] ?>"/>
|
||||||
<meta property="og:url" content="https://<?= $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] ?>"/>
|
<meta property="og:url" content="https://<?= $_SERVER[ 'SERVER_NAME' ] . $_SERVER[ 'REQUEST_URI' ] ?>"/>
|
||||||
<meta property="og:image" content="https://<?= $_SERVER['SERVER_NAME'] . \CAUProject3Contact\Config::FAVICON_PATH ?>"/>
|
<meta property="og:image"
|
||||||
|
content="https://<?= $_SERVER[ 'SERVER_NAME' ] . \CAUProject3Contact\Config::FAVICON_PATH ?>"/>
|
||||||
<!-- <meta property="fb:app_id" content="1000452166691027" /> -->
|
<!-- <meta property="fb:app_id" content="1000452166691027" /> -->
|
||||||
|
|
||||||
<link href='https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700%7CRoboto+Condensed:400,700%7CMaterial+Icons'
|
<link href='https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700%7CRoboto+Condensed:400,700%7CMaterial+Icons'
|
||||||
rel='stylesheet' type='text/css'>
|
rel='stylesheet' type='text/css'>
|
||||||
|
|
||||||
<link href="/css/theme.css?v=<?= CAUProject3Contact\Config::SITE_CSS_VERSION ?>" rel="stylesheet">
|
<link rel="image_src" href="<?= CAUProject3Contact\Config::FAVICON_PATH ?>"/>
|
||||||
<link href="/css/select2.css" rel="stylesheet">
|
<link rel="icon" type="image/ico" href="<?= CAUProject3Contact\Config::FAVICON_PATH ?>"/>
|
||||||
|
|
||||||
<link rel="image_src" href="<?php \CAUProject3Contact\Config::FAVICON_PATH ?>"/>
|
|
||||||
<link rel="icon" type="image/png" href="<?php \CAUProject3Contact\Config::FAVICON_PATH ?>"/>
|
|
||||||
|
|
||||||
<meta name="theme-color" content="#ffffff">
|
<meta name="theme-color" content="#ffffff">
|
||||||
|
|
||||||
<?php if ( isset( $this->head['robotNoIndex'] ) && $this->head['robotNoIndex'] == true ) { ?>
|
<?php if ( isset( $this->head[ 'robotNoIndex' ] ) && $this->head[ 'robotNoIndex' ] == true ) { ?>
|
||||||
<meta name="robots" content="noindex"/>
|
<meta name="robots" content="noindex"/>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
|
<nav class="blue" role="navigation">
|
||||||
|
<div class="nav-wrapper container">
|
||||||
|
<a id="logo-container" class="brand-logo">
|
||||||
|
<img src="/img/logo.png" alt="Logo of Your Contact" height="64px"/>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<ul class="right hide-on-med-and-down">
|
||||||
|
<li>
|
||||||
|
<a class="nav-search"><input type="text" placeholder="Search Contact" id="search" name="search"/></a>
|
||||||
|
</li>
|
||||||
|
<li data-position="bottom" data-tooltip="Add a new contact">
|
||||||
|
<a class="nav-add"><img class="add-contacts" src="/img/add-contacts.png" alt="Add contact"></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!-- <ul id="nav-mobile" class="sidenav">-->
|
||||||
|
<!-- <li><a href="#">Navbar Link</a></li>-->
|
||||||
|
<!-- </ul>-->
|
||||||
|
<!-- <a href="#" data-target="nav-mobile" class="sidenav-trigger"><i class="material-icons">menu</i></a>-->
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="container">
|
@ -37,8 +37,8 @@ function formatURL( string $str, $encoding = 'utf-8' ) {
|
|||||||
//on passe tout en minuscule
|
//on passe tout en minuscule
|
||||||
$str = strtolower( $str );
|
$str = strtolower( $str );
|
||||||
|
|
||||||
if ( substr( $str, - 1 ) == '_' ) {
|
if ( substr( $str, -1 ) == '_' ) {
|
||||||
$str = substr( $str, 0, - 1 );
|
$str = substr( $str, 0, -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $str;
|
return $str;
|
||||||
@ -58,27 +58,27 @@ function formatURL( string $str, $encoding = 'utf-8' ) {
|
|||||||
function darkroom( $img, $to, $width = 0, $height = 0, $quality = 100, $useGD = true ) {
|
function darkroom( $img, $to, $width = 0, $height = 0, $quality = 100, $useGD = true ) {
|
||||||
|
|
||||||
$dimensions = getimagesize( $img );
|
$dimensions = getimagesize( $img );
|
||||||
$ratio = $dimensions[0] / $dimensions[1];
|
$ratio = $dimensions[ 0 ] / $dimensions[ 1 ];
|
||||||
|
|
||||||
// Calcul des dimensions si 0 passé en paramètre
|
// Calcul des dimensions si 0 passé en paramètre
|
||||||
if ( $width == 0 && $height == 0 ) {
|
if ( $width == 0 && $height == 0 ) {
|
||||||
$width = $dimensions[0];
|
$width = $dimensions[ 0 ];
|
||||||
$height = $dimensions[1];
|
$height = $dimensions[ 1 ];
|
||||||
} else if ( $height == 0 ) {
|
} else if ( $height == 0 ) {
|
||||||
$height = round( $width / $ratio );
|
$height = round( $width / $ratio );
|
||||||
} else if ( $width == 0 ) {
|
} else if ( $width == 0 ) {
|
||||||
$width = round( $height * $ratio );
|
$width = round( $height * $ratio );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $dimensions[0] > ( $width / $height ) * $dimensions[1] ) {
|
if ( $dimensions[ 0 ] > ( $width / $height ) * $dimensions[ 1 ] ) {
|
||||||
$dimY = $height;
|
$dimY = $height;
|
||||||
$dimX = round( $height * $dimensions[0] / $dimensions[1] );
|
$dimX = round( $height * $dimensions[ 0 ] / $dimensions[ 1 ] );
|
||||||
}
|
}
|
||||||
if ( $dimensions[0] < ( $width / $height ) * $dimensions[1] ) {
|
if ( $dimensions[ 0 ] < ( $width / $height ) * $dimensions[ 1 ] ) {
|
||||||
$dimX = $width;
|
$dimX = $width;
|
||||||
$dimY = round( $width * $dimensions[1] / $dimensions[0] );
|
$dimY = round( $width * $dimensions[ 1 ] / $dimensions[ 0 ] );
|
||||||
}
|
}
|
||||||
if ( $dimensions[0] == ( $width / $height ) * $dimensions[1] ) {
|
if ( $dimensions[ 0 ] == ( $width / $height ) * $dimensions[ 1 ] ) {
|
||||||
$dimX = $width;
|
$dimX = $width;
|
||||||
$dimY = $height;
|
$dimY = $height;
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ function darkroom( $img, $to, $width = 0, $height = 0, $quality = 100, $useGD =
|
|||||||
$image = imagecreatefrompng( $img );
|
$image = imagecreatefrompng( $img );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
imagecopyresampled( $pattern, $image, 0, 0, 0, 0, $dimX, $dimY, $dimensions[0], $dimensions[1] );
|
imagecopyresampled( $pattern, $image, 0, 0, 0, 0, $dimX, $dimY, $dimensions[ 0 ], $dimensions[ 1 ] );
|
||||||
imagedestroy( $image );
|
imagedestroy( $image );
|
||||||
imagejpeg( $pattern, $to, $quality );
|
imagejpeg( $pattern, $to, $quality );
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ function darkroom( $img, $to, $width = 0, $height = 0, $quality = 100, $useGD =
|
|||||||
* @return bool|void
|
* @return bool|void
|
||||||
*/
|
*/
|
||||||
function errorHandler( $errno, $errstr, $errfile, $errline ) {
|
function errorHandler( $errno, $errstr, $errfile, $errline ) {
|
||||||
if ( ! ( error_reporting() & $errno ) ) {
|
if ( !( error_reporting() & $errno ) ) {
|
||||||
// Ce code d'erreur n'est pas inclus dans error_reporting()
|
// Ce code d'erreur n'est pas inclus dans error_reporting()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -141,7 +141,7 @@ function errorHandler( $errno, $errstr, $errfile, $errline ) {
|
|||||||
*/
|
*/
|
||||||
function getBrowser() {
|
function getBrowser() {
|
||||||
|
|
||||||
$u_agent = $_SERVER['HTTP_USER_AGENT'];
|
$u_agent = $_SERVER[ 'HTTP_USER_AGENT' ];
|
||||||
$bname = 'Unknown';
|
$bname = 'Unknown';
|
||||||
$platform = 'Unknown';
|
$platform = 'Unknown';
|
||||||
$ub = "";
|
$ub = "";
|
||||||
@ -162,7 +162,7 @@ function getBrowser() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Next get the name of the useragent yes seperately and for good reason
|
// Next get the name of the useragent yes seperately and for good reason
|
||||||
if ( preg_match( '/MSIE/i', $u_agent ) && ! preg_match( '/Opera/i', $u_agent ) ) {
|
if ( preg_match( '/MSIE/i', $u_agent ) && !preg_match( '/Opera/i', $u_agent ) ) {
|
||||||
$bname = 'Internet Explorer';
|
$bname = 'Internet Explorer';
|
||||||
$ub = "MSIE";
|
$ub = "MSIE";
|
||||||
} else if ( preg_match( '/Edge/i', $u_agent ) ) {
|
} else if ( preg_match( '/Edge/i', $u_agent ) ) {
|
||||||
@ -192,22 +192,22 @@ function getBrowser() {
|
|||||||
// Added "|:"
|
// Added "|:"
|
||||||
$known = array( 'Version', $ub, 'other' );
|
$known = array( 'Version', $ub, 'other' );
|
||||||
$pattern = '#(?<browser>' . join( '|', $known ) . ')[/|: ]+(?<version>[0-9.|a-zA-Z.]*)#';
|
$pattern = '#(?<browser>' . join( '|', $known ) . ')[/|: ]+(?<version>[0-9.|a-zA-Z.]*)#';
|
||||||
if ( ! preg_match_all( $pattern, $u_agent, $matches ) ) {
|
if ( !preg_match_all( $pattern, $u_agent, $matches ) ) {
|
||||||
// we have no matching number just continue
|
// we have no matching number just continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// see how many we have
|
// see how many we have
|
||||||
$i = count( $matches['browser'] );
|
$i = count( $matches[ 'browser' ] );
|
||||||
if ( $i != 1 ) {
|
if ( $i != 1 ) {
|
||||||
//we will have two since we are not using 'other' argument yet
|
//we will have two since we are not using 'other' argument yet
|
||||||
//see if version is before or after the name
|
//see if version is before or after the name
|
||||||
if ( strripos( $u_agent, "Version" ) < strripos( $u_agent, $ub ) ) {
|
if ( strripos( $u_agent, "Version" ) < strripos( $u_agent, $ub ) ) {
|
||||||
$version = $matches['version'][0];
|
$version = $matches[ 'version' ][ 0 ];
|
||||||
} else {
|
} else {
|
||||||
$version = $matches['version'][1];
|
$version = $matches[ 'version' ][ 1 ];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$version = $matches['version'][0];
|
$version = $matches[ 'version' ][ 0 ];
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if we have a number
|
// check if we have a number
|
||||||
@ -232,11 +232,11 @@ function getBrowser() {
|
|||||||
*/
|
*/
|
||||||
function getLimitWord( $string, $limit ) {
|
function getLimitWord( $string, $limit ) {
|
||||||
$i = $limit;
|
$i = $limit;
|
||||||
if ( ! isset( $string ) || empty( $string ) ) {
|
if ( !isset( $string ) || empty( $string ) ) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
while ( $i > 0 && $string[ $i ] != ' ' ) {
|
while ( $i > 0 && $string[ $i ] != ' ' ) {
|
||||||
$i --;
|
$i--;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $i;
|
return $i;
|
||||||
@ -369,27 +369,18 @@ function rotateImage( string $file, int $angle, string $newName ) {
|
|||||||
* @return array
|
* @return array
|
||||||
* Clean toutes les strings dans array en récursif, et filtre pour n'avoir qu'un espaces entre chaque mot
|
* Clean toutes les strings dans array en récursif, et filtre pour n'avoir qu'un espaces entre chaque mot
|
||||||
*/
|
*/
|
||||||
function cleanArray( array $data ) {
|
function cleanArray( array $data ): array {
|
||||||
if ( ! empty( $data ) ) {
|
if ( !empty( $data ) ) {
|
||||||
foreach ( $data as $key => $donnée ) {
|
foreach ( $data as $key => $value ) {
|
||||||
switch ( gettype( $donnée ) ) {
|
switch ( gettype( $value ) ) {
|
||||||
case 'string':
|
case 'string':
|
||||||
if ( ! empty( $donnée ) ) {
|
if ( !empty( $str ) ) {
|
||||||
$new_string = '';
|
$data[ $key ] = cleanString( $value );
|
||||||
foreach ( explode( ' ', trim( $donnée ) ) as $str ) {
|
|
||||||
if ( ! empty( $str ) ) {
|
|
||||||
if ( $new_string != '' ) {
|
|
||||||
$new_string .= ' ';
|
|
||||||
}
|
|
||||||
$new_string .= $str;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$data[ $key ] = $new_string;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'array':
|
case 'array':
|
||||||
if ( ! empty( $donnée ) ) {
|
if ( !empty( $value ) ) {
|
||||||
$data[ $key ] = cleanArray( $donnée );
|
$data[ $key ] = cleanArray( $value );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -399,6 +390,19 @@ function cleanArray( array $data ) {
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function cleanString( string $str ): string {
|
||||||
|
$newStr = '';
|
||||||
|
foreach ( explode( ' ', trim( $str ) ) as $word ) {
|
||||||
|
if ( !empty( $word ) && $word != '' ) {
|
||||||
|
if ( $newStr != '' ) {
|
||||||
|
$newStr .= ' ';
|
||||||
|
}
|
||||||
|
$newStr .= $word;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $newStr;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $array
|
* @param $array
|
||||||
*
|
*
|
||||||
@ -410,4 +414,22 @@ function endKey( $array ) {
|
|||||||
return key( $array );
|
return key( $array );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function filterArrays( $array1, $array2 ): array {
|
||||||
|
$newArray = [];
|
||||||
|
|
||||||
|
foreach ( $array2 as $item2 ) {
|
||||||
|
$add = true;
|
||||||
|
foreach ( $array1 as $item1 ) {
|
||||||
|
if ( $item2[ "id" ] == $item1[ "id" ] ) {
|
||||||
|
$add = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( $add ) {
|
||||||
|
$newArray[] = $item2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $newArray;
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
File diff suppressed because it is too large
Load Diff
@ -253,14 +253,14 @@ class SMTP {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
// Verify we connected properly
|
// Verify we connected properly
|
||||||
if ( ! is_resource( $this->smtp_conn ) ) {
|
if ( !is_resource( $this->smtp_conn ) ) {
|
||||||
$this->setError(
|
$this->setError(
|
||||||
'Failed to connect to server',
|
'Failed to connect to server',
|
||||||
$errno,
|
$errno,
|
||||||
$errstr
|
$errstr
|
||||||
);
|
);
|
||||||
$this->edebug(
|
$this->edebug(
|
||||||
'SMTP ERROR: ' . $this->error['error']
|
'SMTP ERROR: ' . $this->error[ 'error' ]
|
||||||
. ": $errstr ($errno)",
|
. ": $errstr ($errno)",
|
||||||
self::DEBUG_CLIENT
|
self::DEBUG_CLIENT
|
||||||
);
|
);
|
||||||
@ -293,7 +293,7 @@ class SMTP {
|
|||||||
public function connected() {
|
public function connected() {
|
||||||
if ( is_resource( $this->smtp_conn ) ) {
|
if ( is_resource( $this->smtp_conn ) ) {
|
||||||
$sock_status = stream_get_meta_data( $this->smtp_conn );
|
$sock_status = stream_get_meta_data( $this->smtp_conn );
|
||||||
if ( $sock_status['eof'] ) {
|
if ( $sock_status[ 'eof' ] ) {
|
||||||
// The socket is valid but we are not connected
|
// The socket is valid but we are not connected
|
||||||
$this->edebug(
|
$this->edebug(
|
||||||
'SMTP NOTICE: EOF caught while checking if connected',
|
'SMTP NOTICE: EOF caught while checking if connected',
|
||||||
@ -325,7 +325,7 @@ class SMTP {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//Avoid clash with built-in function names
|
//Avoid clash with built-in function names
|
||||||
if ( ! in_array( $this->Debugoutput, array(
|
if ( !in_array( $this->Debugoutput, array(
|
||||||
'error_log',
|
'error_log',
|
||||||
'html',
|
'html',
|
||||||
'echo'
|
'echo'
|
||||||
@ -390,7 +390,7 @@ class SMTP {
|
|||||||
*/
|
*/
|
||||||
protected function get_lines() {
|
protected function get_lines() {
|
||||||
// If the connection is bad, give up straight away
|
// If the connection is bad, give up straight away
|
||||||
if ( ! is_resource( $this->smtp_conn ) ) {
|
if ( !is_resource( $this->smtp_conn ) ) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
$data = '';
|
$data = '';
|
||||||
@ -399,18 +399,18 @@ class SMTP {
|
|||||||
if ( $this->Timelimit > 0 ) {
|
if ( $this->Timelimit > 0 ) {
|
||||||
$endtime = time() + $this->Timelimit;
|
$endtime = time() + $this->Timelimit;
|
||||||
}
|
}
|
||||||
while ( is_resource( $this->smtp_conn ) && ! feof( $this->smtp_conn ) ) {
|
while ( is_resource( $this->smtp_conn ) && !feof( $this->smtp_conn ) ) {
|
||||||
$str = @fgets( $this->smtp_conn, 515 );
|
$str = @fgets( $this->smtp_conn, 515 );
|
||||||
$this->edebug( "SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL );
|
$this->edebug( "SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL );
|
||||||
$this->edebug( "SMTP -> get_lines(): \$str is \"$str\"", self::DEBUG_LOWLEVEL );
|
$this->edebug( "SMTP -> get_lines(): \$str is \"$str\"", self::DEBUG_LOWLEVEL );
|
||||||
$data .= $str;
|
$data .= $str;
|
||||||
// If 4th character is a space, we are done reading, break the loop, micro-optimisation over strlen
|
// If 4th character is a space, we are done reading, break the loop, micro-optimisation over strlen
|
||||||
if ( ( isset( $str[3] ) and $str[3] == ' ' ) ) {
|
if ( ( isset( $str[ 3 ] ) and $str[ 3 ] == ' ' ) ) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Timed-out? Log and break
|
// Timed-out? Log and break
|
||||||
$info = stream_get_meta_data( $this->smtp_conn );
|
$info = stream_get_meta_data( $this->smtp_conn );
|
||||||
if ( $info['timed_out'] ) {
|
if ( $info[ 'timed_out' ] ) {
|
||||||
$this->edebug(
|
$this->edebug(
|
||||||
'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)',
|
'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)',
|
||||||
self::DEBUG_LOWLEVEL
|
self::DEBUG_LOWLEVEL
|
||||||
@ -437,11 +437,11 @@ class SMTP {
|
|||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public function startTLS() {
|
public function startTLS() {
|
||||||
if ( ! $this->sendCommand( 'STARTTLS', 'STARTTLS', 220 ) ) {
|
if ( !$this->sendCommand( 'STARTTLS', 'STARTTLS', 220 ) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Begin encrypted connection
|
// Begin encrypted connection
|
||||||
if ( ! stream_socket_enable_crypto(
|
if ( !stream_socket_enable_crypto(
|
||||||
$this->smtp_conn,
|
$this->smtp_conn,
|
||||||
true,
|
true,
|
||||||
STREAM_CRYPTO_METHOD_TLS_CLIENT
|
STREAM_CRYPTO_METHOD_TLS_CLIENT
|
||||||
@ -463,7 +463,7 @@ class SMTP {
|
|||||||
* @return boolean True on success.
|
* @return boolean True on success.
|
||||||
*/
|
*/
|
||||||
protected function sendCommand( $command, $commandstring, $expect ) {
|
protected function sendCommand( $command, $commandstring, $expect ) {
|
||||||
if ( ! $this->connected() ) {
|
if ( !$this->connected() ) {
|
||||||
$this->setError( "Called $command without being connected" );
|
$this->setError( "Called $command without being connected" );
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -480,8 +480,8 @@ class SMTP {
|
|||||||
// Fetch SMTP code and possible error code explanation
|
// Fetch SMTP code and possible error code explanation
|
||||||
$matches = array();
|
$matches = array();
|
||||||
if ( preg_match( "/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches ) ) {
|
if ( preg_match( "/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches ) ) {
|
||||||
$code = $matches[1];
|
$code = $matches[ 1 ];
|
||||||
$code_ex = ( count( $matches ) > 2 ? $matches[2] : null );
|
$code_ex = ( count( $matches ) > 2 ? $matches[ 2 ] : null );
|
||||||
// Cut off error code from each response line
|
// Cut off error code from each response line
|
||||||
$detail = preg_replace(
|
$detail = preg_replace(
|
||||||
"/{$code}[ -]" . ( $code_ex ? str_replace( '.', '\\.', $code_ex ) . ' ' : '' ) . "/m",
|
"/{$code}[ -]" . ( $code_ex ? str_replace( '.', '\\.', $code_ex ) . ' ' : '' ) . "/m",
|
||||||
@ -497,7 +497,7 @@ class SMTP {
|
|||||||
|
|
||||||
$this->edebug( 'SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER );
|
$this->edebug( 'SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER );
|
||||||
|
|
||||||
if ( ! in_array( $code, (array) $expect ) ) {
|
if ( !in_array( $code, (array)$expect ) ) {
|
||||||
$this->setError(
|
$this->setError(
|
||||||
"$command command failed",
|
"$command command failed",
|
||||||
$detail,
|
$detail,
|
||||||
@ -505,7 +505,7 @@ class SMTP {
|
|||||||
$code_ex
|
$code_ex
|
||||||
);
|
);
|
||||||
$this->edebug(
|
$this->edebug(
|
||||||
'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply,
|
'SMTP ERROR: ' . $this->error[ 'error' ] . ': ' . $this->last_reply,
|
||||||
self::DEBUG_CLIENT
|
self::DEBUG_CLIENT
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -553,7 +553,7 @@ class SMTP {
|
|||||||
$workstation = '',
|
$workstation = '',
|
||||||
$OAuth = null
|
$OAuth = null
|
||||||
) {
|
) {
|
||||||
if ( ! $this->server_caps ) {
|
if ( !$this->server_caps ) {
|
||||||
$this->setError( 'Authentication is not allowed before HELO/EHLO' );
|
$this->setError( 'Authentication is not allowed before HELO/EHLO' );
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -562,7 +562,7 @@ class SMTP {
|
|||||||
if ( array_key_exists( 'EHLO', $this->server_caps ) ) {
|
if ( array_key_exists( 'EHLO', $this->server_caps ) ) {
|
||||||
// SMTP extensions are available. Let's try to find a proper authentication method
|
// SMTP extensions are available. Let's try to find a proper authentication method
|
||||||
|
|
||||||
if ( ! array_key_exists( 'AUTH', $this->server_caps ) ) {
|
if ( !array_key_exists( 'AUTH', $this->server_caps ) ) {
|
||||||
$this->setError( 'Authentication is not allowed at this stage' );
|
$this->setError( 'Authentication is not allowed at this stage' );
|
||||||
// 'at this stage' means that auth may be allowed after the stage changes
|
// 'at this stage' means that auth may be allowed after the stage changes
|
||||||
// e.g. after STARTTLS
|
// e.g. after STARTTLS
|
||||||
@ -571,13 +571,13 @@ class SMTP {
|
|||||||
|
|
||||||
self::edebug( 'Auth method requested: ' . ( $authtype ? $authtype : 'UNKNOWN' ), self::DEBUG_LOWLEVEL );
|
self::edebug( 'Auth method requested: ' . ( $authtype ? $authtype : 'UNKNOWN' ), self::DEBUG_LOWLEVEL );
|
||||||
self::edebug(
|
self::edebug(
|
||||||
'Auth methods available on the server: ' . implode( ',', $this->server_caps['AUTH'] ),
|
'Auth methods available on the server: ' . implode( ',', $this->server_caps[ 'AUTH' ] ),
|
||||||
self::DEBUG_LOWLEVEL
|
self::DEBUG_LOWLEVEL
|
||||||
);
|
);
|
||||||
|
|
||||||
if ( empty( $authtype ) ) {
|
if ( empty( $authtype ) ) {
|
||||||
foreach ( array( 'LOGIN', 'CRAM-MD5', 'NTLM', 'PLAIN', 'XOAUTH2' ) as $method ) {
|
foreach ( array( 'LOGIN', 'CRAM-MD5', 'NTLM', 'PLAIN', 'XOAUTH2' ) as $method ) {
|
||||||
if ( in_array( $method, $this->server_caps['AUTH'] ) ) {
|
if ( in_array( $method, $this->server_caps[ 'AUTH' ] ) ) {
|
||||||
$authtype = $method;
|
$authtype = $method;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -590,7 +590,7 @@ class SMTP {
|
|||||||
self::edebug( 'Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL );
|
self::edebug( 'Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! in_array( $authtype, $this->server_caps['AUTH'] ) ) {
|
if ( !in_array( $authtype, $this->server_caps[ 'AUTH' ] ) ) {
|
||||||
$this->setError( "The requested authentication method \"$authtype\" is not supported by the server" );
|
$this->setError( "The requested authentication method \"$authtype\" is not supported by the server" );
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -601,11 +601,11 @@ class SMTP {
|
|||||||
switch ( $authtype ) {
|
switch ( $authtype ) {
|
||||||
case 'PLAIN':
|
case 'PLAIN':
|
||||||
// Start authentication
|
// Start authentication
|
||||||
if ( ! $this->sendCommand( 'AUTH', 'AUTH PLAIN', 334 ) ) {
|
if ( !$this->sendCommand( 'AUTH', 'AUTH PLAIN', 334 ) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Send encoded username and password
|
// Send encoded username and password
|
||||||
if ( ! $this->sendCommand(
|
if ( !$this->sendCommand(
|
||||||
'User & Password',
|
'User & Password',
|
||||||
base64_encode( "\0" . $username . "\0" . $password ),
|
base64_encode( "\0" . $username . "\0" . $password ),
|
||||||
235
|
235
|
||||||
@ -616,13 +616,13 @@ class SMTP {
|
|||||||
break;
|
break;
|
||||||
case 'LOGIN':
|
case 'LOGIN':
|
||||||
// Start authentication
|
// Start authentication
|
||||||
if ( ! $this->sendCommand( 'AUTH', 'AUTH LOGIN', 334 ) ) {
|
if ( !$this->sendCommand( 'AUTH', 'AUTH LOGIN', 334 ) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ( ! $this->sendCommand( "Username", base64_encode( $username ), 334 ) ) {
|
if ( !$this->sendCommand( "Username", base64_encode( $username ), 334 ) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ( ! $this->sendCommand( "Password", base64_encode( $password ), 235 ) ) {
|
if ( !$this->sendCommand( "Password", base64_encode( $password ), 235 ) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -635,7 +635,7 @@ class SMTP {
|
|||||||
$oauth = $OAuth->getOauth64();
|
$oauth = $OAuth->getOauth64();
|
||||||
|
|
||||||
// Start authentication
|
// Start authentication
|
||||||
if ( ! $this->sendCommand( 'AUTH', 'AUTH XOAUTH2 ' . $oauth, 235 ) ) {
|
if ( !$this->sendCommand( 'AUTH', 'AUTH XOAUTH2 ' . $oauth, 235 ) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -652,11 +652,11 @@ class SMTP {
|
|||||||
$temp = new stdClass;
|
$temp = new stdClass;
|
||||||
$ntlm_client = new ntlm_sasl_client_class;
|
$ntlm_client = new ntlm_sasl_client_class;
|
||||||
//Check that functions are available
|
//Check that functions are available
|
||||||
if ( ! $ntlm_client->Initialize( $temp ) ) {
|
if ( !$ntlm_client->Initialize( $temp ) ) {
|
||||||
$this->setError( $temp->error );
|
$this->setError( $temp->error );
|
||||||
$this->edebug(
|
$this->edebug(
|
||||||
'You need to enable some modules in your php.ini file: '
|
'You need to enable some modules in your php.ini file: '
|
||||||
. $this->error['error'],
|
. $this->error[ 'error' ],
|
||||||
self::DEBUG_CLIENT
|
self::DEBUG_CLIENT
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -665,7 +665,7 @@ class SMTP {
|
|||||||
//msg1
|
//msg1
|
||||||
$msg1 = $ntlm_client->TypeMsg1( $realm, $workstation ); //msg1
|
$msg1 = $ntlm_client->TypeMsg1( $realm, $workstation ); //msg1
|
||||||
|
|
||||||
if ( ! $this->sendCommand(
|
if ( !$this->sendCommand(
|
||||||
'AUTH NTLM',
|
'AUTH NTLM',
|
||||||
'AUTH NTLM ' . base64_encode( $msg1 ),
|
'AUTH NTLM ' . base64_encode( $msg1 ),
|
||||||
334
|
334
|
||||||
@ -693,7 +693,7 @@ class SMTP {
|
|||||||
return $this->sendCommand( 'Username', base64_encode( $msg3 ), 235 );
|
return $this->sendCommand( 'Username', base64_encode( $msg3 ), 235 );
|
||||||
case 'CRAM-MD5':
|
case 'CRAM-MD5':
|
||||||
// Start authentication
|
// Start authentication
|
||||||
if ( ! $this->sendCommand( 'AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334 ) ) {
|
if ( !$this->sendCommand( 'AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334 ) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Get the challenge
|
// Get the challenge
|
||||||
@ -766,7 +766,7 @@ class SMTP {
|
|||||||
*/
|
*/
|
||||||
public function data( $msg_data ) {
|
public function data( $msg_data ) {
|
||||||
//This will use the standard timelimit
|
//This will use the standard timelimit
|
||||||
if ( ! $this->sendCommand( 'DATA', 'DATA', 354 ) ) {
|
if ( !$this->sendCommand( 'DATA', 'DATA', 354 ) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -786,9 +786,9 @@ class SMTP {
|
|||||||
* process all lines before a blank line as headers.
|
* process all lines before a blank line as headers.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$field = substr( $lines[0], 0, strpos( $lines[0], ':' ) );
|
$field = substr( $lines[ 0 ], 0, strpos( $lines[ 0 ], ':' ) );
|
||||||
$in_headers = false;
|
$in_headers = false;
|
||||||
if ( ! empty( $field ) && strpos( $field, ' ' ) === false ) {
|
if ( !empty( $field ) && strpos( $field, ' ' ) === false ) {
|
||||||
$in_headers = true;
|
$in_headers = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -804,7 +804,7 @@ class SMTP {
|
|||||||
//so as to avoid breaking in the middle of a word
|
//so as to avoid breaking in the middle of a word
|
||||||
$pos = strrpos( substr( $line, 0, self::MAX_LINE_LENGTH ), ' ' );
|
$pos = strrpos( substr( $line, 0, self::MAX_LINE_LENGTH ), ' ' );
|
||||||
//Deliberately matches both false and 0
|
//Deliberately matches both false and 0
|
||||||
if ( ! $pos ) {
|
if ( !$pos ) {
|
||||||
//No nice break found, add a hard break
|
//No nice break found, add a hard break
|
||||||
$pos = self::MAX_LINE_LENGTH - 1;
|
$pos = self::MAX_LINE_LENGTH - 1;
|
||||||
$lines_out[] = substr( $line, 0, $pos );
|
$lines_out[] = substr( $line, 0, $pos );
|
||||||
@ -825,7 +825,7 @@ class SMTP {
|
|||||||
//Send the lines to the server
|
//Send the lines to the server
|
||||||
foreach ( $lines_out as $line_out ) {
|
foreach ( $lines_out as $line_out ) {
|
||||||
//RFC2821 section 4.5.2
|
//RFC2821 section 4.5.2
|
||||||
if ( ! empty( $line_out ) and $line_out[0] == '.' ) {
|
if ( !empty( $line_out ) and $line_out[ 0 ] == '.' ) {
|
||||||
$line_out = '.' . $line_out;
|
$line_out = '.' . $line_out;
|
||||||
}
|
}
|
||||||
$this->client_send( $line_out . self::CRLF );
|
$this->client_send( $line_out . self::CRLF );
|
||||||
@ -857,7 +857,7 @@ class SMTP {
|
|||||||
*/
|
*/
|
||||||
public function hello( $host = '' ) {
|
public function hello( $host = '' ) {
|
||||||
//Try extended hello first (RFC 2821)
|
//Try extended hello first (RFC 2821)
|
||||||
return (boolean) ( $this->sendHello( 'EHLO', $host ) or $this->sendHello( 'HELO', $host ) );
|
return (boolean)( $this->sendHello( 'EHLO', $host ) or $this->sendHello( 'HELO', $host ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -901,18 +901,18 @@ class SMTP {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$fields = explode( ' ', $s );
|
$fields = explode( ' ', $s );
|
||||||
if ( ! empty( $fields ) ) {
|
if ( !empty( $fields ) ) {
|
||||||
if ( ! $n ) {
|
if ( !$n ) {
|
||||||
$name = $type;
|
$name = $type;
|
||||||
$fields = $fields[0];
|
$fields = $fields[ 0 ];
|
||||||
} else {
|
} else {
|
||||||
$name = array_shift( $fields );
|
$name = array_shift( $fields );
|
||||||
switch ( $name ) {
|
switch ( $name ) {
|
||||||
case 'SIZE':
|
case 'SIZE':
|
||||||
$fields = ( $fields ? $fields[0] : 0 );
|
$fields = ( $fields ? $fields[ 0 ] : 0 );
|
||||||
break;
|
break;
|
||||||
case 'AUTH':
|
case 'AUTH':
|
||||||
if ( ! is_array( $fields ) ) {
|
if ( !is_array( $fields ) ) {
|
||||||
$fields = array();
|
$fields = array();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1051,7 +1051,7 @@ class SMTP {
|
|||||||
*/
|
*/
|
||||||
public function turn() {
|
public function turn() {
|
||||||
$this->setError( 'The SMTP TURN command is not implemented' );
|
$this->setError( 'The SMTP TURN command is not implemented' );
|
||||||
$this->edebug( 'SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT );
|
$this->edebug( 'SMTP NOTICE: ' . $this->error[ 'error' ], self::DEBUG_CLIENT );
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1113,16 +1113,16 @@ class SMTP {
|
|||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function getServerExt( $name ) {
|
public function getServerExt( $name ) {
|
||||||
if ( ! $this->server_caps ) {
|
if ( !$this->server_caps ) {
|
||||||
$this->setError( 'No HELO/EHLO was sent' );
|
$this->setError( 'No HELO/EHLO was sent' );
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// the tight logic knot ;)
|
// the tight logic knot ;)
|
||||||
if ( ! array_key_exists( $name, $this->server_caps ) ) {
|
if ( !array_key_exists( $name, $this->server_caps ) ) {
|
||||||
if ( $name == 'HELO' ) {
|
if ( $name == 'HELO' ) {
|
||||||
return $this->server_caps['EHLO'];
|
return $this->server_caps[ 'EHLO' ];
|
||||||
}
|
}
|
||||||
if ( $name == 'EHLO' || array_key_exists( 'EHLO', $this->server_caps ) ) {
|
if ( $name == 'EHLO' || array_key_exists( 'EHLO', $this->server_caps ) ) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//FR" "http://www.w3.org/TR/html4/loose.dtd">
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//FR" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
||||||
</head>
|
</head>
|
||||||
<body class="body" style="background-color: whitesmoke !important;padding: 40px 0;line-height: 22px;width: 100%;">
|
<body class="body" style="background-color: whitesmoke !important;padding: 40px 0;line-height: 22px;width: 100%;">
|
||||||
<div class="contain"
|
<div class="contain"
|
||||||
|
13
static/css/materialize.min.css
vendored
Normal file
13
static/css/materialize.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1,55 +1,37 @@
|
|||||||
html, body, div, span, applet, object, iframe,
|
main {
|
||||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
background: #F1F1F1;
|
||||||
a, abbr, acronym, address, big, cite, code,
|
|
||||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
|
||||||
small, strike, sub, sup, tt, var,
|
|
||||||
b, u, i, center,
|
|
||||||
dl, dt, dd, ol, ul, li,
|
|
||||||
fieldset, form, label, legend,
|
|
||||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
|
||||||
article, aside, canvas, details, embed,
|
|
||||||
figure, figcaption, footer, header, hgroup,
|
|
||||||
menu, nav, output, ruby, section, summary,
|
|
||||||
time, mark, audio, video {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
border: 0;
|
|
||||||
font-size: 100%;
|
|
||||||
font: inherit;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HTML5 display-role reset for older browsers */
|
.nav-add {
|
||||||
article, aside, details, figcaption, figure,
|
padding-top: 12px;
|
||||||
footer, header, hgroup, menu, nav, section {
|
height: 64px;
|
||||||
display: block;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
img.add-contacts {
|
||||||
line-height: 1;
|
height: 40px;
|
||||||
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
ol, ul {
|
.row .col.s12.main-container {
|
||||||
list-style: none;
|
background: #FFF;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
blockquote, q {
|
#search {
|
||||||
quotes: none;
|
background: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 7px;
|
||||||
|
height: 40px;
|
||||||
|
width: 200px;
|
||||||
|
transition: all 0.3s;
|
||||||
|
padding-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
blockquote:before, blockquote:after,
|
#search:hover {
|
||||||
q:before, q:after {
|
width: 350px;
|
||||||
content: '';
|
|
||||||
content: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
table {
|
#search:focus {
|
||||||
border-collapse: collapse;
|
width: 500px;
|
||||||
border-spacing: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
* {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
}
|
BIN
static/img/add-contacts.png
Normal file
BIN
static/img/add-contacts.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
static/img/favicon.ico
Normal file
BIN
static/img/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
BIN
static/img/logo.png
Normal file
BIN
static/img/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.6 KiB |
@ -0,0 +1,74 @@
|
|||||||
|
let working = false;
|
||||||
|
let lastQuery = null;
|
||||||
|
|
||||||
|
let displayContacts = (contacts) => {
|
||||||
|
let tbody = $("table tbody");
|
||||||
|
|
||||||
|
for (let contact of contacts) {
|
||||||
|
tbody.append(`
|
||||||
|
<tr>
|
||||||
|
<td>${(contact["first_name"] ? contact["first_name"] : (contact["firstName"] ? contact["firstName"] : ""))}</td>
|
||||||
|
<td>${(contact["last_name"] ? contact["last_name"] : (contact["lastName"] ? contact["lastName"] : ""))}</td>
|
||||||
|
<td>${(contact["surname"] ? contact["surname"] : "")}</td>
|
||||||
|
<td>${(contact["email"] ? contact["email"] : "")}</td>
|
||||||
|
<td>${(contact["address"] ? contact["address"] : "")}</td>
|
||||||
|
<td>${(contact["phone_number"] ? contact["phone_number"] : (contact["phoneNumber"] ? contact["phoneNumber"] : ""))}</td>
|
||||||
|
<td>${(contact["birthday"] ? new Date(contact["birthday"]).toLocaleDateString() : "")}</td>
|
||||||
|
</tr>
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$(document).ready(() => {
|
||||||
|
|
||||||
|
let modal = $('.modal');
|
||||||
|
|
||||||
|
modal.modal();
|
||||||
|
|
||||||
|
let search = (query) => {
|
||||||
|
if (query.length >= 3) {
|
||||||
|
working = true;
|
||||||
|
$.ajax({
|
||||||
|
url: "/api/contact/search",
|
||||||
|
method: "POST",
|
||||||
|
data: {
|
||||||
|
query: query
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
$("table tbody").empty();
|
||||||
|
|
||||||
|
for (let i = 0; i < 4; i++) {
|
||||||
|
if (data && data.result && data.result[i.toString()] && data.result[i.toString()].length > 0) {
|
||||||
|
displayContacts(data.result[i.toString()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
working = false;
|
||||||
|
},
|
||||||
|
error: function (e) {
|
||||||
|
working = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$("table tbody").empty();
|
||||||
|
displayContacts(contacts);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$(document).on("input", "#search", () => {
|
||||||
|
let query = $("#search").val();
|
||||||
|
|
||||||
|
if (!working) {
|
||||||
|
search(query);
|
||||||
|
} else {
|
||||||
|
lastQuery = query;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on("click", ".add-contacts", () => {
|
||||||
|
modal.open();
|
||||||
|
});
|
||||||
|
|
||||||
|
$("[data-tooltip]").tooltip();
|
||||||
|
|
||||||
|
});
|
4
static/js/jquery-3.2.1.min.js
vendored
4
static/js/jquery-3.2.1.min.js
vendored
File diff suppressed because one or more lines are too long
2
static/js/jquery-3.3.1.min.js
vendored
Normal file
2
static/js/jquery-3.3.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
6
static/js/materialize.min.js
vendored
Normal file
6
static/js/materialize.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user