<?php

    /**
     * DigitalSignage4_CronJobController est un fichier lancer en ajax async depuis le header du site (front + back)
     * Ce fichier permet de récupérer les vidéos depuis l'API ( information + video mp4 et ogv )
     * Création : Rudy DAVID
     * Date : 4 Juin 2021
     */

    //ini_set('display_errors', 1);
    //ini_set('display_startup_errors', 1);
    //error_reporting(E_ALL);

    


    if ( ! defined( 'ABSPATH' ) ) exit; //It was a ajax file
    
    /*if (file_exists("./../../../../../wp-load.php")) {
        define('WP_USE_THEMES', false); // Don't load theme support functionality
        require('./../../../../../wp-load.php');
		
		require_once __DIR__ . "/../../Classes/DigitalSignage4_Tools.php";
		require_once __DIR__ . "/../../Classes/DigitalSignage4_caller.php";
		require_once __DIR__ . "/../../Kernel/API/Manager/DigitalSignage4_AutomatisationManager.php";
		require_once __DIR__ . "/../../Kernel/API/Manager/DigitalSignage4_DemandeManager.php";
		require_once __DIR__ . "/../../Classes/DigitalSignage4_DisplayedVideoProduct.php";
		require_once __DIR__ . "/../../Kernel/API/Manager/DigitalSignage4_Exception.php";
    } else {
		require_once __DIR__ . "/../../Classes/DigitalSignage4_Tools.php";
		require_once __DIR__ . "/../../Classes/DigitalSignage4_caller.php";
		require_once __DIR__ . "/../../Kernel/API/Manager/DigitalSignage4_AutomatisationManager.php";
		require_once __DIR__ . "/../../Kernel/API/Manager/DigitalSignage4_DemandeManager.php";
		require_once __DIR__ . "/../../Classes/DigitalSignage4_DisplayedVideoProduct.php";
		require_once __DIR__ . "/../../Kernel/API/Manager/DigitalSignage4_Exception.php";
	
        require('./../../../../../config/config.inc.php');
        require('./../../../../../init.php');
        require_once"./../../../digitalsignage4.php";
        DigitalSignage4_Translate::setLang(substr(get_bloginfo('language'), 0, 2));
        refresh_local_token();
    }*/

//Point d'entrer de ma methode de cron

    class DigitalSignage4_CronJobController
    {
        private $ds4_caller = null;

        public const LAST_CALL = "DigitalSignage_cron_last_call";
        public const LAST_CALL_EXECUTION_UPDATE_VIDEOS = "DigitalSignage_cron_last_update";
        public const LAST_CALL_EXECUTION_RUN_AUTO_DAY = "DigitalSignage_cron_auto_last_update";
        public const TIME_DIFF_SEC_UPDATE_VIDEOS = 2;


        public function __construct()
        {
            ob_get_clean();
            $this->ds4_caller = new DigitalSignage4_caller();
            $this->ds4_caller->save_data(self::LAST_CALL, date('Y-m-d H:i:s')); // Date de la derniere update lancé par le cron

            $this->cronUpdateVideos();
            $this->cronUpdateAuto();
        }

        private function uploadVideoYoutube($videoUrl, $youtube_data, $id_demande)
        {
            //Vérifier que la case à cocher "upload youtube" l'est
            echo esc_html('debut uploadVideoYoutube avec parametre ' . $videoUrl . '<br/>');
            $forfait = DigitalSignage4_ForfaitManager::instance()->getForfait(DigitalSignage4_ForfaitManager::instance()->getToken(), true);
            $dataYoutube = DigitalSignage4_caller::getInstance()->get_data(DigitalSignage4_caller::YOUTUBE_JSON);
            //var_dump($dataYoutube);
            if ($forfait && $dataYoutube) {
                $idForfait = $forfait->getId();
                echo esc_html('idForfait : ' . $idForfait . '<br/>');
                echo esc_html('youtube actif : ' . $dataYoutube['youtube_active'] . '<br/>');

                if ($dataYoutube['youtube_active']) {
                    //Vérifier que l'état du compte est à 3
                    //Donner l'ordre

                    $responseAPI = $this->callYoutubeAPI(array("action"=>"getStatus","idForfait"=>$idForfait));


                    if ($responseAPI != null) {
                        $jsonAPI = json_decode($responseAPI, true);
                        if ($jsonAPI['response_code'] == 200) {
                            $stateOauth = $jsonAPI['datas']['state'];
                            echo esc_html('state : ' . $stateOauth);
                            if ($stateOauth == 3) {
                                $this->callYoutubeAPI(array("action"=>"uploadVideo","idForfait"=>$idForfait,"id_demande"=>$id_demande,"urlVideo"=>$videoUrl,"titleVideo"=>$youtube_data['titleVideo'],"summaryVideo"=>$youtube_data['summaryVideo'],"tagsVideo"=>$youtube_data['tagsVideo']));
                            }
                        }
                    }
                }
            }
        }
		
        private function callYoutubeAPI($datas)	{
                $responseAPI = null;

                try {
                        // Préparation des arguments pour la requête
                        $args = [
                                'method'  => 'POST',
                                'timeout' => 5,
                                'headers' => [
                                        'Content-Type' => 'application/x-www-form-urlencoded',
                                ],
                                'body'    => $datas,
                        ];

                        // Effectuer la requête
                        $response = wp_remote_post("https://api.productvideo.io/API_v2/Youtube/", $args);

                        // Vérification de la réussite de la requête
                        if (is_wp_error($response)) {
                                echo esc_html($response->get_error_message());
                                die();
                        }

                        $http_code = wp_remote_retrieve_response_code($response);
                        if ($http_code === 200) {
                                // Récupération du corps de la réponse
                                $responseAPI = wp_remote_retrieve_body($response);
                        } else {
                                echo esc_html("Ressource introuvable : " . $http_code);
                        }
                } catch (\Throwable $th) {
                        throw $th;
                }

                return $responseAPI;
        }
        
        public function callDS4DemandeAPI($datas)	{
                $responseAPI = null;

                try {
                        // Préparation des arguments pour la requête
                        $args = [
                                'method'  => 'POST',
                                'timeout' => 5,
                                'headers' => [
                                        'Content-Type' => 'application/x-www-form-urlencoded',
                                        'Authorization' => DigitalSignage4_ForfaitManager::instance()->getToken()
                                ],
                                'body'    => $datas,
                        ];

                        // Effectuer la requête
                        $response = wp_remote_post("https://api.productvideo.io/API_v2/Demande/", $args);

                        // Vérification de la réussite de la requête
                        if (is_wp_error($response)) {
                                echo esc_html($response->get_error_message());
                                die();
                        }

                        $http_code = wp_remote_retrieve_response_code($response);
                        if ($http_code === 200) {
                                // Récupération du corps de la réponse
                                $responseAPI = wp_remote_retrieve_body($response);
                        } else {
                                echo esc_html("Ressource introuvable : " . $http_code);
                        }
                } catch (\Throwable $th) {
                        throw $th;
                }

                return $responseAPI;
        }
		
        private function cronUpdateVideos()
        {
            $date_update = date('Y-m-d H:i:s');
            if (!$this->ds4_caller->get_data(self::LAST_CALL_EXECUTION_UPDATE_VIDEOS)) {
                $this->ds4_caller->save_data(self::LAST_CALL_EXECUTION_UPDATE_VIDEOS, $date_update);
            }
            $date_last_update = $this->ds4_caller->get_data(self::LAST_CALL_EXECUTION_UPDATE_VIDEOS);
            if (abs(strtotime($date_update) - strtotime($date_last_update)) >= self::TIME_DIFF_SEC_UPDATE_VIDEOS) {
                $this->ds4_caller->save_data(self::LAST_CALL_EXECUTION_UPDATE_VIDEOS, $date_update);
                $this->updateVideos();
                $this->updateVideosYoutube();
            }
        }

        private function cronUpdateAuto()
        {
            if (!$this->ds4_caller->get_data(self::LAST_CALL_EXECUTION_RUN_AUTO_DAY)) {
                $this->ds4_caller->save_data(self::LAST_CALL_EXECUTION_RUN_AUTO_DAY, date("d"));
            }
            $date_last_update_auto = $this->ds4_caller->get_data(self::LAST_CALL_EXECUTION_RUN_AUTO_DAY);
            if ($date_last_update_auto != date("d")) {
                $this->ds4_caller->save_data(self::LAST_CALL_EXECUTION_RUN_AUTO_DAY, date("d"));
                $this->updateAuto();
            }
        }

        private function updateAuto()
        {
            try {
                $automatisations = DigitalSignage4_AutomatisationManager::set(DigitalSignage4_caller::getInstance())->get_automatisations();
                foreach ($automatisations as $automatisation) {
                    if ($automatisation->getHookSell()) {
                        $productsIds = $this->get_best_selling_products($automatisation->getNbProduit(), $automatisation->getNbJours());

                        foreach ($productsIds as $productId) {
                            $post = WP_Post::get_instance($productId);
                            $automatisationsRunner = new DigitalSignage4_AutomatisationHookControllerCreation();
                            $automatisationsRunner->automatisationJob($automatisation, $post);
                        }
                    }
                }
            } catch (DigitalSignage4_Exception $e) {
            }
        }

        /**
         * @param $limit <1 = pas de limite
         *
         * @return int[]
         */
        public function get_best_selling_products($limit = '-1', $nbJoursPreviusStart = 0)
        {
            global $wpdb;

            $limit_clause = intval($limit) <= 0 ? '' : 'LIMIT ' . intval($limit);
            $curent_month = date('Y-m-d', strtotime('-' . $nbJoursPreviusStart . ' days'));

            $idsArray = $wpdb->get_results("
                SELECT p.ID as id
                FROM {$wpdb->prefix}posts p
                INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim
                    ON p.ID = oim.meta_value
                INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim2
                    ON oim.order_item_id = oim2.order_item_id
                INNER JOIN {$wpdb->prefix}woocommerce_order_items oi
                    ON oim.order_item_id = oi.order_item_id
                INNER JOIN {$wpdb->prefix}posts as o
                    ON o.ID = oi.order_id
                WHERE p.post_type = 'product'
                AND p.post_status = 'publish'
                AND o.post_status IN ('wc-processing','wc-completed')
                AND o.post_date >= '$curent_month'
                AND oim.meta_key = '_product_id'
                AND oim2.meta_key = '_qty'
                GROUP BY p.ID
                ORDER BY COUNT(oim2.meta_value) + 0 DESC
                $limit_clause
            ");

            return array_map(
                function ($el) {
                    return intval($el->id);
                },
                $idsArray
            );
        }
        
        public function get_products_for_first_launch()
        {
            $key = ftok(__FILE__, 't');
            $semaphore = sem_get($key, 1);
            while(!sem_acquire($semaphore));
            
            
            $lesProduits = array();
            
            $args = array(
                'post_type'      => 'product',
                'posts_per_page' => -1, // Récupérer tous les produits
                'post_status'    => 'publish',
                'meta_key'       => 'total_sales', // Clé pour trier par ventes
                'orderby'        => 'meta_value_num', // Trier par valeur numérique
                'order'          => 'DESC', // Ordre décroissant
            );

            // Exécuter la requête
            $query = new WP_Query($args);

            // Tableau pour stocker les IDs des produits
            $product_ids = array();

            if ($query->have_posts()) {
                while ($query->have_posts()) {
                    $query->the_post();
                    $product_ids[] = get_the_ID();
                }
                wp_reset_postdata();
            }
            $lesIdProduits = $product_ids;
            
            $nbrProduits = 0;
            
            foreach($lesIdProduits as $itID)
            {
                $nbrProduits++;
                if ($nbrProduits < 4 && count($lesIdProduits) > 3) continue;//Ignorer les 3 premiers produits
                //Pour chaque produit, récupérer son nombre d'image, et s'il est en promo
                $nbImages = 0;
                $isPromo = false;
                
                $itProduit = wc_get_product($itID);
                $nbImages = count($itProduit->get_gallery_image_ids()) + 1;//Le +1 est pour l'image principale
                $isPromo = $itProduit->is_on_sale();
                
                $arrayProduit = array();
                $arrayProduit['id'] = $itID;
                $arrayProduit['nbImages'] = $nbImages;
                $arrayProduit['isPromo'] = $isPromo;
                $lesProduits[$itID] = $arrayProduit;
            }

            //S'il y a moins de 3 produits restants, on ne fait pas le traitement
            /*if (count($lesProduits) < 3)
            {
                sem_release($semaphore);
                return $lesProduits;
            }*/
            
            $id_selectionnes = array();
            $nbrImages = 4;
            
            while (count($id_selectionnes) < 3 && count($id_selectionnes)!=count($lesProduits))
            {
                foreach ($lesProduits as $itProduit)
                {
                    if ($itProduit['nbImages'] > $nbrImages)
                    {
                        if (count($id_selectionnes) < 3 && !in_array($itProduit['id'], $id_selectionnes)) $id_selectionnes[] = $itProduit['id'];
                    }
                }
                $nbrImages--;
            }
            
            $nbrImages = 4;
            while ($nbrImages > 0)
            {
                foreach ($lesProduits as $itProduit)
                {
                    if ($itProduit['nbImages'] > $nbrImages)
                    {
                        if ($itProduit['isPromo'] && !in_array($itProduit['id'], $id_selectionnes))
                        {
                            $id_selectionnes[2] = $itProduit['id'];
                            $nbrImages = 0;
                            break;
                        }
                    }
                }
                $nbrImages--;
            }
            
            $automatisationsRunner = new DigitalSignage4_AutomatisationHookControllerCreation();
            $listGabarits = array();
            $listGabarits[$id_selectionnes[0]] = array();
            $listGabarits[$id_selectionnes[1]] = array();
            $listGabarits[$id_selectionnes[2]] = array();
            $gabarits = DigitalSignage4_GabaritManager::instance()->getGabarits();
            $nbrSelectionnees = 0;
            foreach($gabarits as $itGabarit)
            {
                if ($itGabarit->getAutomatic() != 0)
                {
                    if ($itGabarit->getAutomatic() == 1)
                    {
                        $listGabarits[$id_selectionnes[$nbrSelectionnees%2]][] = $itGabarit->getId();
                        $nbrSelectionnees++;
                    }
                    else if ($itGabarit->getAutomatic() == 2)
                    {
                        $listGabarits[$id_selectionnes[2]][] = $itGabarit->getId();
                    }
                }
            }
            foreach ($id_selectionnes  as $id_product_)
            {
                $wooCommerceProduct = new WC_Product($id_product_);

                foreach($listGabarits[$id_product_] as $itIdGabarit)
                {
                    $datasForPostDemande = $automatisationsRunner->getDatasForPostDemandeAvecGabarit($itIdGabarit, $wooCommerceProduct, null, true);

                    $postDemandeResponse = $automatisationsRunner->postVideoToApi($datasForPostDemande, -1);//Ajout de -1 pour automatique pour signifier que la vidéo a été générée au démarrage
                    if ($postDemandeResponse != false)
                    {
                        //DigitalSignage4_DisplayedVideoProduct::setDisplayedVideoProduct($id_product_, $postDemandeResponse->getIdDemande());
                    }//Supprimé, on ne souhaite plus que le produit apparaisse directement sur la page produit pour ce traitement
                }
            }
            sem_release($semaphore);
            return $id_selectionnes;
        }

        //met a jour les youtube_id pour avoir les liens vers les videos
        private function updateVideosYoutube()
        {
            $forfait = DigitalSignage4_ForfaitManager::instance()->getForfait(DigitalSignage4_ForfaitManager::instance()->getToken(), true);
            $dataYoutube = DigitalSignage4_caller::getInstance()->get_data(DigitalSignage4_caller::YOUTUBE_JSON);
            if ($forfait && $dataYoutube) {
                $idForfait = $forfait->getId();
                $ch = curl_init();
                $responseAPI = $this->callYoutubeAPI(array("action"=>"getStatus","idForfait"=>$idForfait));
                if ($responseAPI != null) {
                    $jsonAPI = json_decode($responseAPI, true);
                    if ($jsonAPI['response_code'] == 200) {
                        $stateOauth = $jsonAPI['datas']['state'];
                        if ($stateOauth == 3) {
							//pour chaque video avec le status completed et le youtube_data !='' et youtube_id ='' on interroge l'api pour obtenir le youtube_id
                            $demandeC = new DigitalSignage4_DemandeManager($this->ds4_caller);
							
                            $videosNotCompleted = $demandeC->getLocalDemandes("SELECT * FROM ".DigitalSignage4_caller::get_video_table_name()." WHERE `flag` = 'completed' AND `youtube_data` != '' AND youtube_id=''");
                            $haveDemandeInProcess = false;

                            foreach ($videosNotCompleted as $videoNotCompleted) {
                                $haveDemandeInProcess = true;
                                echo esc_html("obtenir le youtube_id de la demande id:" . $videoNotCompleted->getIdDemande() . " <br>");

                                $responseAPI = $this->callYoutubeAPI(array("action"=>"statusVideoYoutube","id_demande"=>$videoNotCompleted->getIdDemande()));
                                if ($responseAPI != null) {
                                    $jsonAPI = json_decode($responseAPI, true);
                                    global $wpdb;

                                    $sqlRequest = "UPDATE ".$this->ds4_caller->get_video_table_name()." SET
										`youtube_id`=%s WHERE `id_demande`=%d";
									$sqlRequest=$wpdb->prepare($sqlRequest,$jsonAPI['datas']['idvideo'],$videoNotCompleted->getIdDemande());
                                    $this->ds4_caller->execute_video_request($sqlRequest);
                                }
                            }

                            if (!$haveDemandeInProcess) {
                                echo esc_html("<br>updateVideosYoutube -> Aucune demande a mettre a jours <br>");
                            }
                        }
                    }
                }
            }
        }

        //Update des videos tous les self::TIME_DIFF_SEC_UPDATE_VIDEOS seconds
        private function updateVideos()
        {
            $forfait = DigitalSignage4_ForfaitManager::instance()->getForfait(DigitalSignage4_ForfaitManager::instance()->getToken(), true);
            if ($forfait->getCreditUsedTotal() == 0) $this->get_products_for_first_launch();
            $demandeC = new DigitalSignage4_DemandeManager($this->ds4_caller);
            $videosNotCompleted = $demandeC->getLocalDemandes("SELECT * FROM ".DigitalSignage4_caller::get_video_table_name()." WHERE `flag` != 'completed' OR `video_url` = '' ");
            $haveDemandeInProcess = false;

            foreach ($videosNotCompleted as $videoNotCompleted) {
                $haveDemandeInProcess = true;

                try {
                    echo ("<br><br><br> -> update demande " . esc_html($videoNotCompleted->getIdDemande()) . " <br>");

                    $demandes = $demandeC->getDemandes(array('id_demande=' . $videoNotCompleted->getIdDemande()));

                    foreach ($demandes as $demande) {
                        echo ("-> Recupération <br>");

                        $urlVideo = "";

                        if ($demande->getFlag() == "completed") {
                            $videoUrl = $demande->getVideoUrl();

                            $freeDiskSpace = disk_free_space("/") / 1024 / 1024 / 1024;
                            $saveDiskSpace = DigitalSignage4_caller::getInstance()->get_data(DigitalSignage4_caller::DISK_FREE_SPACE);

                            $videoFileName = $this->slugifyVideoName($demande->getVideoName());

                            if ($freeDiskSpace > $saveDiskSpace) {
                                echo ("-> Téléchargement <br>");
                                //$videoRootDirectory = __DIR__ . "/../../Videos";
								$upload_dir = wp_upload_dir();
								$videoRootDirectory =$upload_dir['basedir'] . '/' . 'ds4' . '/Videos';
                                $isUploadedMp4 = false;
                                $errorMessages = array();
                                echo ("-> Fichier racine ".esc_html($videoRootDirectory)." <br>");
								// Créer le répertoire s'il n'existe pas
								if (!file_exists($videoRootDirectory)) {
									wp_mkdir_p($videoRootDirectory);
									echo ("-> Fichier racine Créé <br>");
								} else {
									echo ("-> Fichier racine déja existant <br>");
								}
								 
								
                                $videoDirectory = $videoRootDirectory . "/" . $demande->getIdDemande() . "/";

                                echo esc_html("-> Fichier video $videoRootDirectory <br>");
                                if (!file_exists($videoDirectory)) {
                                    echo esc_html("-> Fichier video introuvable <br>");
                                    mkdir($videoDirectory);
                                    if (!chmod($videoDirectory, 0777)) {
                                        $errorMessages[] = "<br>" . DigitalSignage4_Translate::getTraduction("Modif_video_directory_impossible");
                                        continue;
                                    }
                                    echo esc_html("-> Fichier video Créé <br>");
                                }


                                if (file_exists($videoDirectory)) {
                                    echo esc_html("-> Debut download video <br>");

                                    if (file_put_contents($videoDirectory . $videoFileName . ".mp4", file_get_contents($videoUrl))) {
                                        if (!chmod($videoDirectory . $videoFileName . ".mp4", 0777)) {
                                            // impossible de changer les droits de la vidéo en mp4
                                            $errorMessages[] = "<br>" . DigitalSignage4_Translate::getTraduction("Telechargement_video_impossible", "mp4");
                                            echo esc_html("-> Fin download video mp4 <br>");
                                        } else {
                                            $isUploadedMp4 = true;
                                        }
                                        $this->uploadVideoYoutube($videoUrl, json_decode($demande->getYoutubeData(), true), $demande->getIdDemande());
                                    } else {
                                        // impossible d'uploader la vidéo en mp4
                                        $errorMessages[] = "<br>" . DigitalSignage4_Translate::getTraduction("Modif_video_impossible", "mp4");
                                    }
                                    echo esc_html("-> Fin download video <br>");
                                } else {
                                    // impossible de créer le dossier racine des vidéos ~/digitalsignage/Videos
                                    $errorMessages[] = "<br>" . DigitalSignage4_Translate::getTraduction("Crea_video_directory_impossible");
                                }

                                if ($isUploadedMp4/* && $isUploadedOGV*/) {
                                    echo esc_html("-> Tous les fichiers ont été telechargé <br>");
                                    
                                    if (/*!file_exists($videoDirectory . $videoFileName . ".ogv") ||*/
                                        !file_exists($videoDirectory . $videoFileName . ".mp4")) {
                                        $demande->setFlag('error');
                                    } else {
                                        $urlVideo = DigitalSignage4_Tools::getModuleVideoUrl() . $demande->getIdDemande() . "/" . $videoFileName . ".mp4";
					
                                        $urlProduit = get_permalink($demande->getProductId());
                                        //Informer l'API pour envoyer mail notification
                                        if ($demande->getAutomatique() == -1)
                                        {
                                            $urlProduit = get_edit_post_link($demande->getProductId());
                                        }
                                        $this->callDS4DemandeAPI(array("action"=>"downloadNotification","idDemande"=> $demande->getIdDemande(), "email"=>get_bloginfo('admin_email'), "url"=>$urlProduit, "token"=>DigitalSignage4_ForfaitManager::instance()->getToken()));

                                        DigitalSignage4_DisplayedVideoProduct::setDisplayedVideoProduct($demande->getProductId(), $demande->getIdDemande());
                                        echo esc_html("-> Url vidéo $urlVideo <br>");
                                    }
                                } else {
                                    if ($errorMessages) {
                                        $demande->setFlag('error' . ";" . implode(" ", $errorMessages));
                                    } else {
                                        $demande->setFlag('error');
                                    }
                                }
                            } else {
                                $demande->setFlag('noSpace');
                            }
                        }

                        if ($demande->getFlag() !== $videoNotCompleted->getFlag()) {
                            echo esc_html("-> Debut enregistrement bdd video <br>");

                            global $wpdb;
							/*
                            $sqlRequest = "UPDATE %s SET
					            `data`='" . $wpdb->_real_escape($demande->getData()) . "',`flag`='" . $demande->getFlag() . "',`video_name`='" . $demande->getVideoName() . "',`video_comment`='" . $demande->getVideoComment() . "',
					            `date_begin`='" . $demande->getDateBegin() . "',`automatique`='" . $demande->getAutomatique() . "',`date_end`='" . $demande->getDateEnd() . "',`date_demande`='" . $demande->getDateDemande() . "',
					            `gabarit`='" . $demande->getGabarit() . "',`video_url`='" . $urlVideo . "',`video_hash`='" . $demande->getVideoHash() . "',
					            `product_id`='" . $demande->getProductId() . "' WHERE `id_demande`='" . $demande->getIdDemande() . "' ";
							*/
							$sqlRequest = "UPDATE ".$this->ds4_caller->get_video_table_name()." SET
					            `data`=%s,`flag`=%s,`video_name`=%s,`video_comment`=%s,
					            `date_begin`=%s,`automatique`=%d,`date_end`=%s,`date_demande`=%s,
					            `gabarit`=%d,`video_url`=%s,`video_hash`=%s,
					            `product_id`=%d WHERE `id_demande`=%d";
								
							$sqlRequest=$wpdb->prepare($sqlRequest,$wpdb->_real_escape($demande->getData()),$demande->getFlag(),$demande->getVideoName(),$demande->getVideoComment(),
							$demande->getDateBegin(),$demande->getAutomatique(),$demande->getDateEnd(),$demande->getDateDemande(),$demande->getGabarit(),
							$urlVideo,$demande->getVideoHash(),$demande->getProductId(),$demande->getIdDemande()
							);	
								
                            $this->ds4_caller->execute_video_request($sqlRequest);

                            echo esc_html("<br><pre>");
                            //var_dump($sqlRequest);
                            echo esc_html("</pre><br>");

                            echo esc_html("-> Fin enregistrement bdd video <br>");
                        } else {
                            echo esc_html("-> Rien de nouveau a enregistrer <br>");
                        }
                    }
                } catch (DigitalSignage4_Exception $e) {
                    die(esc_html($e->getMessage()));
                }
            }

            if (!$haveDemandeInProcess) {
                echo esc_html("-> Aucune demande a mettre a jours <br>");
            }
        }

        public static function slugifyVideoName($text, $divider = '-')
        {
            // replace non letter or digits by divider
            $text = preg_replace('~[^\pL\d]+~u', $divider, $text);

            // transliterate
            $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

            // remove unwanted characters
            $text = preg_replace('~[^-\w]+~', '', $text);

            // trim
            $text = trim($text, $divider);

            // remove duplicate divider
            $text = preg_replace('~-+~', $divider, $text);

            // lowercase
            $text = strtolower($text);

            if (empty($text)) {
                return 'video';
            }

            return $text;
        }
    }
