188 lines
5.9 KiB
PHP
188 lines
5.9 KiB
PHP
<?php
|
|
/*
|
|
* Plugin Name: LDC Web MesBR
|
|
* Description: Gestion des coupons MesBR pour une campagne
|
|
* Version: 1.0
|
|
* Author: Vincent BRIDIER
|
|
* Author URI: mailto:vincent.bridier@ldc.fr
|
|
*/
|
|
|
|
add_action('admin_menu', 'ldc_web_mesbr_setup_menu');
|
|
|
|
function ldc_web_mesbr_setup_menu()
|
|
{
|
|
add_menu_page('LDC Web - MesBR Admin', 'LDC Web - MesBR', 'manage_options', 'ldc-web-mes-br', 'ldc_web_mesbr_init', 'dashicons-tickets-alt');
|
|
}
|
|
|
|
function ldc_web_mesbr()
|
|
{
|
|
wp_register_style('ldc_web_mesbr', plugins_url('style.css', __FILE__));
|
|
wp_enqueue_style('ldc_web_mesbr');
|
|
}
|
|
add_action('admin_init', 'ldc_web_mesbr');
|
|
|
|
function ldc_web_mesbr_init()
|
|
{
|
|
global $wpdb;
|
|
|
|
$inco_id = ($_SERVER['REQUEST_METHOD'] === 'POST' and isset($_POST['inco_id'])) ? sanitize_text_field($_POST['inco_id']) : false;
|
|
$code = ($_SERVER['REQUEST_METHOD'] === 'POST' and isset($_POST['code'])) ? sanitize_text_field($_POST['code']) : false;
|
|
|
|
if ($inco_id && $code) {
|
|
$wpdb->query("UPDATE `mesbr_coupons` SET inco_id = $inco_id WHERE code = $code");
|
|
ldc_web_mesbr_get_product_info($code, true);
|
|
}
|
|
|
|
$coupons = $wpdb->get_results("SELECT * FROM mesbr_coupons");
|
|
|
|
$page = '<div class="wrap">';
|
|
$page .= '<h1 class="wp-heading-inline">LDC Web - MesBR Admin</h1>';
|
|
|
|
// Tableau
|
|
$page .= "<table class='ldc_mesbr_table'>";
|
|
|
|
$page .= "<tr>";
|
|
$page .= "<th>Code</th>";
|
|
$page .= "<th>Nom</th>";
|
|
$page .= "<th>Valeur</th>";
|
|
$page .= "<th>Image</th>";
|
|
$page .= "<th>ID Inco</th>";
|
|
$page .= "</tr>";
|
|
|
|
foreach ($coupons as $coupon) {
|
|
$page .= "<tr>";
|
|
$page .= "<td style='font-weight: bold;'>$coupon->code</td>";
|
|
$page .= "<td>$coupon->name</td>";
|
|
$page .= "<td>$coupon->value €</td>";
|
|
$page .= "<td><img src='" . $coupon->image . "' width='50%'/></td>";
|
|
$page .= "<td>";
|
|
$page .= "<form action='/wp-admin/admin.php?page=ldc-web-mes-br' method='POST'>";
|
|
$page .= "<input type='text' name='inco_id' value='" . $coupon->inco_id . "' required>";
|
|
$page .= "<input type='hidden' name='code' value='" . $coupon->code . "' required>";
|
|
$page .= "<input type='submit' value='Sauvegarder' class='ldc_mesbr_btn'>";
|
|
$page .= "</form>";
|
|
$page .= "</td>";
|
|
$page .= "</tr>";
|
|
}
|
|
|
|
$page .= "</table>";
|
|
|
|
$page .= '</div>';
|
|
|
|
echo $page;
|
|
}
|
|
|
|
function ldc_web_mesbr_get_product_info($coupon_code, $force_update = false)
|
|
{
|
|
global $wpdb;
|
|
$cache = false;
|
|
|
|
if (class_exists('Memcached')) {
|
|
$cache = new \Memcached();
|
|
$cache->addServer("127.0.0.1", 11211);
|
|
|
|
if (!$force_update) {
|
|
$fromCache = $cache->get('mesbr_product_info_coupon_' . $coupon_code);
|
|
if ($fromCache) {
|
|
return $fromCache;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($cache && $force_update) {
|
|
$cache->delete('mesbr_product_info_coupon_' . $coupon_code);
|
|
}
|
|
|
|
$coupon = $wpdb->get_row("SELECT * FROM mesbr_coupons WHERE code = $coupon_code");
|
|
|
|
if (is_null($coupon))
|
|
return false;
|
|
|
|
if (is_null($coupon->inco_id))
|
|
return false;
|
|
|
|
$post_id = $wpdb->get_var("SELECT post_id FROM " . $wpdb->prefix . "postmeta WHERE meta_key = 'reference_produit' AND meta_value = " . $coupon->inco_id);
|
|
if (is_null($post_id))
|
|
return false;
|
|
|
|
$inco_img = $wpdb->get_var("SELECT guid FROM " . $wpdb->prefix . "posts WHERE id = (SELECT meta_value FROM " . $wpdb->prefix . "postmeta WHERE meta_key = 'image' AND post_id = $post_id)");
|
|
if (is_null($inco_img))
|
|
return false;
|
|
|
|
$result = ['post_id' => $post_id, 'inco_img' => $inco_img];
|
|
|
|
if ($cache) {
|
|
$cache->set('mesbr_product_info_coupon_' . $coupon_code, $result, 3600); // Cache pour 1h
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
add_action('ldc_web_mesbr_get_product_info', 'ldc_web_mesbr_get_product_info');
|
|
|
|
/**
|
|
* Fonction à appeler dans un CRON
|
|
*/
|
|
function update()
|
|
{
|
|
global $wpdb;
|
|
|
|
$wpdb->query("CREATE TABLE IF NOT EXISTS `mesbr_coupons` (
|
|
`code` VARCHAR(50) NOT NULL DEFAULT '0',
|
|
`name` VARCHAR(255) NOT NULL DEFAULT '0',
|
|
`value` FLOAT NOT NULL DEFAULT '0',
|
|
`image` VARCHAR(255) NOT NULL DEFAULT '0',
|
|
`inco_id` BIGINT(20) NULL DEFAULT NULL,
|
|
PRIMARY KEY (`code`)
|
|
) COLLATE='utf8_general_ci' ENGINE=InnoDB;");
|
|
|
|
if (class_exists('Memcached')) {
|
|
$cache = new \Memcached();
|
|
$cache->addServer("127.0.0.1", 11211);
|
|
$cache->flush();
|
|
}
|
|
|
|
$mur = getApiMESBR()->getMur(MESBR_REF_CAMP);
|
|
|
|
if ($mur->status === 'OK') {
|
|
$receivedCodes = array_map(function ($o) {
|
|
return "$o->code";
|
|
}, $mur->coupons);
|
|
$receivedCodes = implode("', '", $receivedCodes);
|
|
|
|
$wpdb->query("DELETE FROM `mesbr_coupons` WHERE code NOT IN('$receivedCodes')");
|
|
|
|
foreach ($mur->coupons as $coupon) {
|
|
$dbCoupon = $wpdb->get_row("SELECT * FROM mesbr_coupons WHERE code = " . $coupon->code);
|
|
if (is_null($dbCoupon)) {
|
|
$wpdb->insert(
|
|
'mesbr_coupons',
|
|
array(
|
|
'code' => $coupon->code,
|
|
'name' => $coupon->name,
|
|
'value' => floatval($coupon->value),
|
|
'image' => $coupon->desktop_image_available
|
|
),
|
|
array(
|
|
'%s',
|
|
'%s',
|
|
'%f',
|
|
'%s',
|
|
)
|
|
);
|
|
} else {
|
|
$wpdb->update(
|
|
'mesbr_coupons',
|
|
array(
|
|
'name' => $coupon->name,
|
|
'value' => floatval($coupon->value),
|
|
'image' => $coupon->desktop_image_available
|
|
),
|
|
array(
|
|
'code' => $coupon->code,
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|