<?php

namespace models;



class Broadcast extends \valuis\Autotable

{



//public $crm_type="COM";

    //public $auth_relevant = array ("idcompany"=>"authcompany");



    public $my_select = array("broadcastnom" => 'strtoupper');



/*

public function __construct()

{

parent::__construct();

$this->class_nam=_("Société");

}

 */

    public function ToBeSent()

    {

        #FIXME faire en sorte que les dates de broadcast cessent de se décaler

        $statement = "SELECT *

        FROM core_broadcast
		

        WHERE

         actif='Y' AND
		 comp_code='".$this->comp_code."' AND

         (

             ( 

                 starthour < CURRENT_TIMESTAMP() AND 

                 ISNULL(lastexecutiontime) 

            )

             OR

             (

                 frequence='hour' AND 

                lastexecutiontime <= (CURRENT_TIMESTAMP() - INTERVAL 1 HOUR)		

            )

            OR

            (

                 frequence='day' AND 

                 lastexecutiontime <= (CURRENT_TIMESTAMP() - INTERVAL 1 DAY)

            )

            OR

            (

                 frequence='week' AND 

                 lastexecutiontime <= (CURRENT_TIMESTAMP() - INTERVAL 1 WEEK)

            ) 

            OR

            (

                 frequence='month' AND 

                     lastexecutiontime <= (CURRENT_TIMESTAMP() - INTERVAL 1 MONTH)

            )

        )

        ";



        return prepare($statement, [], \get_class());



    }



    public function Envoyer()

    {

     //   error_log("Broadcast 60 session mycomp_code :".$_SESSION['mycomp_code']);



        if ($this->rpt_source<>"" && $this->rpt_source<>null)

        {$this->GetData();}

        else

        {

        $this->resultat=array();

        }

        

        if (count($this->resultat) > 0) {

            $this->MettreEnForme();

        }

      //  error_log("Broadcast 72 session mycomp_code :".$_SESSION['mycomp_code']);



        $this->SendMail();
// Obtenez l'heure actuelle
//$time = new DateTime();

// Arrondir les minutes au multiple de 5 inférieur ou égal à l'heure actuelle
//$minutes = floor($time->format('i') / 5) * 5;

// Mettre les secondes à 0
//$time->setTime($time->format('H'), $minutes, 0);

// Mettre à jour avec le format souhaité
//$this->Mettreajour(["lastexecutiontime" => $time->format("Y-m-d H:i:s")]);
        $this->Mettreajour(["lastexecutiontime" => date("Y-m-d H:i:s")]);



    }



    private function GetData()

    {

        $pre_session=$_SESSION["mycomp_code"];

        $prev_user=$_SESSION["username"];

       // error_log('Boradcast L79 - passé par là'.$this->comp_code);

        $_SESSION["mycomp_code"]=$this->comp_code;

        $_SESSION["username"]=$this->broadcastuser;

        $User=generemoi("User");

        $User->find($this->broadcastuser);

        $User->DroitEnSession();





        $this->Rpt = Generemoi($this->rpt_source);

        $filtres = \json_decode($this->filtres, 1);

        if ($this->special != "") {

            $tab_list = \explode(",", $this->special);

            foreach ($tab_list as $value) {

                $lefiltre = explode(":", $value);

                $function = trim($lefiltre[1]);

                $valeurdynamique = $function();

                $clefdynamique = trim($lefiltre[0]);

                $filtres[$clefdynamique] = $valeurdynamique; #On appelle la fonction de valuislib

            }



        }

        $this->resultat = $this->Rpt->GetData($filtres);

        

        $_SESSION["username"]=$prev_user;

        $_SESSION["mycomp_code"]=$pre_session;

    }

    private function MettreEnForme()

    { // comment profiter de tout ce qui existe déjà

        $this->tab_paramtable["header"] = $this->Rpt->exportexcel;

        $this->tab_paramtable["data"] = &$this->resultat;



        /*

    $tab_paramtable["tdformat"]=array("deadline"=>"centre",

    "CALC_CLORE"=>"centre rose");

    $tab_paramtable["link"]=array("CALC_VOIR"=>"idtache");

    $tab_paramtable["directlink"]= array("CALC_CLORE"=>"Tache.clore&idtache=_%idtache%_");

     */



    }

    private function SendMail()

    {$tab_param = array();

        $tab_destinataire=array();

        $tab_destinataire[]='bcc:dsi@valuis.com';

        

        $tmpdestinataire = explode(";",$this->destinataire);



        foreach ($tmpdestinataire as $destinataire) {

            # code...

            if (\stripos($destinataire,'rpt_')===0)

            {

                //error_log("Broadcast L129 session mycomp_code :".$_SESSION['mycomp_code']);

                $Rptdestinataires = Generemoi($destinataire);

              //  error_log("Broadcast L131 rpt comp_code :".$Rptdestinataires->comp_code);

                

                $resultatdestinataires = $Rptdestinataires->GetData();

                foreach ($resultatdestinataires as $ligne) {

                    $tab_destinataire[]=$ligne->email;

                }

                

            }

            if (\stripos($destinataire,'self_')===0)

            {

                $champmail =\str_ireplace('self_','',$destinataire);

                foreach ($this->resultat as $ligne) {

                    $tab_destinataire[]=$ligne->$champmail;

                }

                

            }

            else {

                $tab_destinataire[]=$destinataire;

            }

        }

            



        $Message = generemoi("Message");

        $tab_param["_%sujet%_"]=$this->broadcastnom;

        $tab_param["_%corpsmail%_"]=$this->corpsmail;

        if(isset($this->tab_paramtable))

        {$tab_param["_%tableau%_"] = $Message->Tabletoemail($this->tab_paramtable);}

        else

        {$tab_param["_%tableau%_"]='';}

        $Message->Envoyer("SYSBROADCAST:TABLE", $tab_destinataire, $tab_param);



    }

}

