ldc-regalette/content/plugins/ldc-web-mesbr/ldc-web-mesbr.php
2022-11-09 14:14:13 +00:00

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 &euro;</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,
)
);
}
}
}
}