ldc-groupe/content/plugins/ldc-messages/ldc-messages.php
2020-10-13 11:23:51 +02:00

374 lines
11 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:
return 1;
break;
case 6670:
return 2;
break;
case 6672:
return 7;
break;
case 6674:
return 3;
break;
case 6676:
return 4;
break;
case 6678:
return 6;
break;
case 14:
return 5;
break;
}
}
function sendNotification($postID) {
switch ($postID){
// Nous rejoindre en tant qu'éleveur
case 6249:
$email = ['vincent.bridier@ldc.fr'];
break;
// Export
case 6670:
$email = ['vincent.bridier@ldc.fr'];
break;
// Une demande en tant que client / détaillant / distributeur
case 6672:
$email = ['vincent.bridier@ldc.fr'];
break;
// La finance
case 6674:
$email = ['vincent.bridier@ldc.fr'];
break;
// Nos engagements
case 6676:
$email = ['vincent.bridier@ldc.fr'];
break;
// Une autre information générale
case 6678:
$email = ['vincent.bridier@ldc.fr'];
break;
// Espace presse
case 14:
$email = ['vincent.bridier@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;
// TODO : Validation Recaptcha with toekn
// TODO : Test variables required
//check_ajax_referer( 'ajax-security-nonce', 'security' );
$postID = sanitize_text_field($_POST['id']);
$firstname = sanitize_text_field($_POST['firstname']);
$lastname = sanitize_text_field($_POST['lastname']);
$email = sanitize_email($_POST['email']);
$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");
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;
}