414 lines
12 KiB
PHP
414 lines
12 KiB
PHP
<?php
|
|
/*
|
|
Plugin Name: LDC Messages
|
|
Description: Gestion des formulaires de contact
|
|
Version: 1.0
|
|
Author: Vincent BRIDIER
|
|
*/
|
|
|
|
// Cron
|
|
require_once 'cron.php';
|
|
|
|
function getMessageType($postID){
|
|
switch ($postID){
|
|
case 6249:
|
|
case 8596: //EN
|
|
return 1;
|
|
break;
|
|
case 6670:
|
|
case 8571: //EN
|
|
return 2;
|
|
break;
|
|
case 6672:
|
|
case 8640: //EN
|
|
return 7;
|
|
break;
|
|
case 6674:
|
|
case 8586: //EN
|
|
return 3;
|
|
break;
|
|
case 6676:
|
|
case 8592: //EN
|
|
return 4;
|
|
break;
|
|
case 6678:
|
|
case 8634: //EN
|
|
return 6;
|
|
break;
|
|
case 14:
|
|
case 2684: //EN
|
|
return 5;
|
|
break;
|
|
}
|
|
}
|
|
|
|
function sendNotification($postID) {
|
|
switch ($postID){
|
|
// Nous rejoindre en tant qu'éleveur
|
|
case 6249:
|
|
case 8596: //EN
|
|
$email = ['marie-charlotte.garnier@ldc.fr', 'dylan.chevalier@ldc.fr'];
|
|
break;
|
|
// Export
|
|
case 6670:
|
|
case 8571: //EN
|
|
$email = ['alexis.lambert@ldc.fr', 'philippe.gelin@ldc.fr'];
|
|
break;
|
|
// Une demande en tant que client / détaillant / distributeur
|
|
case 6672:
|
|
case 8640: //EN
|
|
$email = ['anne-lise.launay@ldc.fr', 'stephane.morvan@ldc.fr'];
|
|
break;
|
|
// La finance
|
|
case 6674:
|
|
case 8586: //EN
|
|
$email = ['bernard.roinard@ldc.fr', 'valerie.bernard@ldc.fr'];
|
|
break;
|
|
// Nos engagements
|
|
case 6676:
|
|
case 8592: //EN
|
|
$email = ['claire-marie.gesland@ldc.fr'];
|
|
break;
|
|
// Une autre information générale
|
|
case 6678:
|
|
case 8634: //EN
|
|
$email = ['blandine.durand-gratian@ldc.fr', 'malaury.offe@ldc.fr'];
|
|
break;
|
|
// Espace presse
|
|
case 14:
|
|
case 2684: //EN
|
|
$email = ['communicationgroupe@ldc.fr'];
|
|
break;
|
|
}
|
|
return $email;
|
|
}
|
|
|
|
add_action('admin_menu', 'plugin_menu');
|
|
function plugin_menu()
|
|
{
|
|
add_menu_page('LDC Messages', 'LDC Messages', 'manage_options', 'ldc-messages', 'init', 'dashicons-email-alt', 30);
|
|
}
|
|
|
|
function ldc_messages() {
|
|
wp_register_style('ldc_messages', plugins_url('style.css',__FILE__ ));
|
|
wp_enqueue_style('ldc_messages');
|
|
}
|
|
add_action('admin_init','ldc_messages');
|
|
|
|
function my_admin_scripts() {
|
|
wp_enqueue_style( 'fancyboxcss', get_template_directory_uri() . '/assets/js/fancybox/jquery.fancybox.min.css',false,'1.1','all');
|
|
wp_enqueue_script( 'fancyboxjs', get_template_directory_uri() . '/assets/js/fancybox/jquery.fancybox.min.js',false,'1.1','all');
|
|
|
|
wp_enqueue_script( 'ldc_messages', plugins_url('script.js',__FILE__ ), array('jquery'), '1.0.0', false);
|
|
}
|
|
add_action( 'admin_enqueue_scripts', 'my_admin_scripts' );
|
|
|
|
add_action( 'wp_ajax_getMsg', 'getMsg' );
|
|
add_action( 'wp_ajax_nopriv_getMsg', 'getMsg' );
|
|
|
|
function getMsg(){
|
|
global $wpdb;
|
|
|
|
$msg_id = $_POST['id'];
|
|
|
|
$msg = $wpdb->get_row("SELECT * FROM wp_messages, wp_messages_types WHERE wp_messages.type_id = wp_messages_types.id AND wp_messages.id = $msg_id LIMIT 1", OBJECT);
|
|
|
|
if ($msg === NULL)
|
|
die('<h1>Message inconnu</h1>');
|
|
|
|
$html = "<div class='msg-reponse'>";
|
|
$html .= "<h1>Message du consommateur :</h1>";
|
|
$html .= "<p><strong>Nom Prénom : </strong>".$msg->lastname." ".$msg->firstname."</p>";
|
|
$html .= "<p><strong>E-mail : </strong>".$msg->email."</p>";
|
|
$html .= "<p>".nl2br($msg->content)."</p>";
|
|
$html .= "<h1>Réponse :</h1>";
|
|
$html .= "<p>".nl2br($msg->response)."</p>";
|
|
$html .= "</div>";
|
|
|
|
echo($html);
|
|
|
|
die();
|
|
}
|
|
|
|
//Ajax pour ouvrir la page de réponse
|
|
add_action( 'wp_ajax_getReponseForMsg', 'getReponseForMsg' );
|
|
add_action( 'wp_ajax_nopriv_getReponseForMsg', 'getReponseForMsg' );
|
|
|
|
function getReponseForMsg(){
|
|
global $wpdb;
|
|
|
|
$msg_id = $_POST['id'];
|
|
|
|
$msg = $wpdb->get_row("SELECT * FROM wp_messages, wp_messages_types WHERE wp_messages.type_id = wp_messages_types.id AND wp_messages.id = $msg_id LIMIT 1", OBJECT);
|
|
|
|
if ($msg === NULL)
|
|
die('<h1>Message inconnu</h1>');
|
|
|
|
$html = "<div class='msg-reponse'>";
|
|
$html .= "<h1>Message du consommateur :</h1>";
|
|
$html .= "<p><strong>Nom Prénom : </strong>".$msg->lastname." ".$msg->firstname."</p>";
|
|
$html .= "<p><strong>E-mail : </strong>".$msg->email."</p>";
|
|
$html .= "<p>".nl2br($msg->content)."</p>";
|
|
$html .= "<h1>Votre Réponse :</h1>";
|
|
$html .= "<input type='hidden' name='email' id='emailTosend' value='".$msg->email."'/>";
|
|
$html .= "<textarea name='answer' id='msgTosend'></textarea>";
|
|
$html .= "<button class='send-answer' id='msgTosend'>Envoyer</button>";
|
|
$html .= "</div>";
|
|
|
|
echo($html);
|
|
|
|
die();
|
|
}
|
|
|
|
//Ajax d'envoi de la réponse
|
|
add_action( 'wp_ajax_sendReponse', 'sendReponse' );
|
|
add_action( 'wp_ajax_nopriv_sendReponse', 'sendReponse' );
|
|
|
|
function sendReponse(){
|
|
global $wpdb;
|
|
|
|
$email = $_POST['email'];
|
|
$message = $_POST['message'];
|
|
$msg_id = $_POST['id'];
|
|
$ref = $_POST['ref'];
|
|
|
|
$message = "REF: $ref <br><br>" . nl2br($message);
|
|
|
|
wp_mail($email, "Réponse à votre message sur le site LDC", $message);
|
|
|
|
$wpdb->update(
|
|
'wp_messages',
|
|
[
|
|
'response' => $message,
|
|
'response_date' => date('Y-m-d H:i:s'),
|
|
'status' => 1,
|
|
], ['id' => $msg_id], [
|
|
'%s',
|
|
'%s',
|
|
'%d',
|
|
]
|
|
);
|
|
|
|
$html = "<h1>Message Envoyé !</h1>";
|
|
|
|
echo($html);
|
|
|
|
die();
|
|
}
|
|
|
|
function generateRandomString($length = 10) {
|
|
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
$charactersLength = strlen($characters);
|
|
$randomString = '';
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$randomString .= $characters[rand(0, $charactersLength - 1)];
|
|
}
|
|
return $randomString;
|
|
}
|
|
|
|
add_action( 'wp_ajax_ContactAjx', 'ContactAjx');
|
|
add_action( 'wp_ajax_nopriv_ContactAjx', 'ContactAjx');
|
|
function ContactAjx() {
|
|
global $wpdb;
|
|
|
|
if (!isset($_POST['id']) || empty($_POST['id']) || !isset($_POST['firstname']) || empty($_POST['firstname']) || !isset($_POST['lastname']) || empty($_POST['lastname']) || !isset($_POST['email']) || empty($_POST['email'])){
|
|
$error = new WP_Error( '001', 'Check Failure', 'Required values');
|
|
wp_send_json_error($error, 500);
|
|
die();
|
|
}
|
|
|
|
$postID = sanitize_text_field($_POST['id']);
|
|
$firstname = sanitize_text_field($_POST['firstname']);
|
|
$lastname = sanitize_text_field($_POST['lastname']);
|
|
$email = sanitize_email($_POST['email']);
|
|
|
|
|
|
$gToken = $_POST['token'];
|
|
|
|
$secret = getenv('LDC_MSG_PLUGIN_RECAPTCHA');
|
|
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]) && $_SERVER["HTTP_X_FORWARDED_FOR"] != "") {
|
|
if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',')) {
|
|
$explode = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
|
|
$remoteip = trim($explode[0]);
|
|
} else {
|
|
$remoteip = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
|
}
|
|
} else {
|
|
$remoteip = $_SERVER["REMOTE_ADDR"];
|
|
}
|
|
|
|
$api_url = "https://www.google.com/recaptcha/api/siteverify?secret=" . $secret . "&response=" . $gToken . "&remoteip=" . $remoteip;
|
|
$decode = json_decode(file_get_contents($api_url), true);
|
|
|
|
if ($decode['success'] == true) {
|
|
|
|
$content = "";
|
|
|
|
foreach ($_POST as $key => $item) {
|
|
if ($key === 'firstname' || $key === 'lastname' || $key === 'email' || $key === 'action' || $key === 'id' || $key === 'token')
|
|
continue;
|
|
|
|
if (is_array($item)) {
|
|
$content .= ucfirst($key) . " :\n\r";
|
|
foreach ($item as $v) {
|
|
$content .= "- $v \n\r";
|
|
}
|
|
} else {
|
|
$content .= ucfirst($key) . " : " . $item . "\n\r";
|
|
}
|
|
}
|
|
|
|
$ref = date('ymd') . '-' . generateRandomString(4);
|
|
|
|
$wpdb->insert(
|
|
'wp_messages',
|
|
[
|
|
'ref' => $ref,
|
|
'firstname' => $firstname,
|
|
'lastname' => $lastname,
|
|
'email' => $email,
|
|
'content' => $content,
|
|
'status' => 0,
|
|
'date' => date('Y-m-d H:i:s'),
|
|
'type_id' => getMessageType($postID)
|
|
], [
|
|
'%s',
|
|
'%s',
|
|
'%s',
|
|
'%s',
|
|
'%s',
|
|
'%d',
|
|
'%s',
|
|
'%d'
|
|
]
|
|
);
|
|
|
|
$email = sendNotification($postID);
|
|
wp_mail($email, "Vous avez un message à traiter sur le site LDC", "$ref");
|
|
} else {
|
|
$error = new WP_Error( '002', 'Check Failure', 'Recaptcha');
|
|
wp_send_json_error($error, 500);
|
|
}
|
|
die();
|
|
}
|
|
|
|
// Function to change email address
|
|
function wpb_sender_email( $original_email_address ) {
|
|
return 'nepasrepondre@ldc.fr';
|
|
}
|
|
|
|
// Function to change sender name
|
|
function wpb_sender_name( $original_email_from ) {
|
|
return 'Groupe LDC';
|
|
}
|
|
|
|
// Hooking up our functions to WordPress filters
|
|
add_filter( 'wp_mail_from', 'wpb_sender_email' );
|
|
add_filter( 'wp_mail_from_name', 'wpb_sender_name' );
|
|
|
|
function getMessages($page, $ref = false)
|
|
{
|
|
global $wpdb;
|
|
|
|
$offset = ($page * 8) - 8;
|
|
|
|
if ($ref !== false){
|
|
return $wpdb->get_results("SELECT *, wp_messages.id AS msg_id FROM wp_messages, wp_messages_types WHERE wp_messages.type_id = wp_messages_types.id AND ref = '$ref' ORDER BY status LIMIT $offset, 8", OBJECT);
|
|
}
|
|
|
|
return $wpdb->get_results("SELECT *, wp_messages.id AS msg_id FROM wp_messages, wp_messages_types WHERE wp_messages.type_id = wp_messages_types.id ORDER BY status LIMIT $offset, 8", OBJECT);
|
|
}
|
|
|
|
function getPagination()
|
|
{
|
|
global $wpdb;
|
|
$t = $wpdb->get_row("SELECT COUNT(*) AS count FROM wp_messages", OBJECT);
|
|
return ceil($t->count / 8);
|
|
}
|
|
|
|
function init()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$currentPage = 1;
|
|
$ref = sanitize_text_field($_POST['ref']);
|
|
$messages = getMessages($currentPage, $ref);
|
|
}else{
|
|
$currentPage = isset($_GET['p']) ? (int)$_GET['p'] : 1;
|
|
$messages = getMessages($currentPage);
|
|
}
|
|
|
|
$page = '<div class="wrap">';
|
|
$page .= '<h1 class="wp-heading-inline">Gestion des messages - LDC</h1>';
|
|
|
|
$page .= "<form class='ldc_messages_search' method='POST' action='/wp-admin/admin.php?page=ldc-messages'>";
|
|
$page .= '<input type="text" name="ref" placeholder="Référence de l\'email" required/>';
|
|
$page .= "<button type='submit'>Rechercher</button>";
|
|
$page .= "</form>";
|
|
|
|
// Tableau
|
|
$page .= "<table class='ldc_messages_table'>";
|
|
|
|
$page .= "<tr>";
|
|
|
|
$page .= "<th>#</th>";
|
|
$page .= "<th>Date</th>";
|
|
$page .= "<th>Statut</th>";
|
|
$page .= "<th>Nom</th>";
|
|
$page .= "<th>Prénom</th>";
|
|
$page .= "<th>Email</th>";
|
|
$page .= "<th>Type</th>";
|
|
$page .= "<th>Date de réponse</th>";
|
|
$page .= "<th></th>";
|
|
|
|
$page .= "</tr>";
|
|
|
|
foreach ($messages as $message){
|
|
$page .= "<tr>";
|
|
|
|
$page .= "<td style='font-weight: bold;'>$message->ref</td>";
|
|
|
|
$page .= "<td>". date('d/m/Y H:i', strtotime($message->date)) ."</td>";
|
|
|
|
if ($message->status === '0'){
|
|
$page .= "<td><p class='ldc_messages_red'>À traiter</p></td>";
|
|
}else{
|
|
$page .= "<td><p class='ldc_messages_green'>Traité</p></td>";
|
|
}
|
|
|
|
$page .= "<td>$message->lastname</td>";
|
|
$page .= "<td>$message->firstname</td>";
|
|
$page .= "<td><a href='mailto:$message->email'>$message->email</a></td>";
|
|
$page .= "<td>$message->name</td>";
|
|
|
|
if ($message->response_date !== NULL){
|
|
$page .= "<td>". date('d/m/Y H:i', strtotime($message->response_date)) ."</td>";
|
|
}else{
|
|
$page .= "<td>-</td>";
|
|
}
|
|
|
|
if ($message->status === '0'){
|
|
$page .= "<td><a href='#' class='answer-msg' data-id='$message->msg_id' data-ref='$message->ref'>Répondre</a></td>";
|
|
}else{
|
|
$page .= "<td><a href='#' class='show-msg' data-id='$message->msg_id'>Afficher</a></td>";
|
|
}
|
|
|
|
$page .= "</tr>";
|
|
}
|
|
|
|
$page .= "</table>";
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
|
|
$page .= "<div class='ldc_messages_pagination'>";
|
|
for ($i = 1; $i <= getPagination(); $i++) {
|
|
$class = $currentPage === $i ? "class='active'" : "";
|
|
$page .= "<a href='/wp-admin/admin.php?page=ldc-messages&p=$i' $class>$i</a>";
|
|
}
|
|
$page .= "</div>";
|
|
}
|
|
|
|
$page .= "<div id='reponse-msg' style='display:none'></div>";
|
|
|
|
$page .= '</div>';
|
|
|
|
echo $page;
|
|
}
|