<?php
// +-------------------------------------------------+
// © 2002-2014 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
// +-------------------------------------------------+
// $Id: dsiUpdatePrivateAlertsConditions.php,v 1.1.2.2 2026/03/30 11:45:27 rtigero Exp $

$base_path = __DIR__ . '/../';
$base_noheader = 1;
$base_nocheck = 1;
$base_nobody = 1;
$base_nosession = 1;

require_once($base_path . "/includes/init.inc.php");

/**
 * Script pour ajouter la condition d'affichage sur l'item non vide
 * à tous les déclencheurs des diffusions privées existantes
 */


use Pmb\DSI\Models\Diffusion;
use Pmb\DSI\Models\Event\RootEvent;
use Pmb\DSI\Orm\DiffusionOrm;
use Pmb\DSI\Orm\EventDiffusionOrm;

/**
 * Met à jour tous les déclencheurs des diffusions privées
 * pour ajouter la condition d'affichage sur l'item non vide
 */
function updatePrivateDiffusionEvents()
{
    echo encoding_normalize::utf8_encode("Début de la mise à jour des déclencheurs des diffusions privées...\n");

    // Récupération de toutes les diffusions privées
    $privateDiffusions = DiffusionOrm::finds([
        "settings" => [
            "value" => "%\"isPrivate\":true%",
            "operator" => "LIKE"
        ]
    ]);

    $totalDiffusions = count($privateDiffusions);
    $updatedEvents = 0;
    $processedDiffusions = 0;

    echo encoding_normalize::utf8_encode("Nombre de diffusions privées trouvées : {$totalDiffusions}\n");

    foreach ($privateDiffusions as $diffusionOrm) {
        $processedDiffusions++;
        echo encoding_normalize::utf8_encode("\nTraitement de la diffusion {$processedDiffusions}/{$totalDiffusions} (ID: {$diffusionOrm->id_diffusion})\n");

        try {
            $diffusion = new Diffusion($diffusionOrm->id_diffusion);
            $diffusion->fetchItem();
            $diffusion->fetchView();

            // Récupération des events de cette diffusion
            $eventDiffusions = EventDiffusionOrm::finds(["num_diffusion" => $diffusion->id]);

            if (empty($eventDiffusions)) {
                echo encoding_normalize::utf8_encode("  - Aucun déclencheur trouvé pour cette diffusion\n");
                continue;
            }

            echo encoding_normalize::utf8_encode("  - " . count($eventDiffusions) . " déclencheur(s) trouvé(s)\n");

            foreach ($eventDiffusions as $eventDiffusionOrm) {
                try {
                    $event = RootEvent::getInstance($eventDiffusionOrm->num_event);

                    // Vérification si l'event a déjà des conditions
                    $hasConditions = isset($event->settings->conditions) && !empty($event->settings->conditions);
                    $hasEmptyItemCondition = isset($event->settings->conditions->emptyAssociatedItem);

                    if ($hasEmptyItemCondition) {
                        echo encoding_normalize::utf8_encode("    - Déclencheur {$event->idEvent} : condition déjà présente\n");
                        continue;
                    }

                    // Récupération de la vue associée à la diffusion privée
                    $idView = 0;
                    //On récupère l'item content l'équation privée
                    foreach ($diffusion->item->childs as $child) {
                        if (isset($child->settings->userModifiedItem) && true == $child->settings->userModifiedItem) {
                            $idItem = $child->id;
                            break;
                        }
                    }
                    //on récupère la vue qui affichera cet item
                    $block = $diffusion->view->getItemBlockById($idItem, $diffusion->view->settings->layer->blocks);
                    if (isset($block->viewSelected)) {
                        $idView = $block->viewSelected;
                    }

                    if ($idView == 0) {
                        echo encoding_normalize::utf8_encode("    - Déclencheur {$event->idEvent} : aucune vue trouvée, ignoré\n");
                        continue;
                    }

                    // Ajout de la condition d'affichage sur l'item non vide
                    if (!$hasConditions) {
                        $event->settings->conditions = new stdClass();
                    }

                    $event->settings->conditions->emptyAssociatedItem = [
                        "views" => [$idView]
                    ];

                    // Sauvegarde de l'event
                    $event->update();
                    $updatedEvents++;

                    echo encoding_normalize::utf8_encode("    - Déclencheur {$event->idEvent} : condition ajoutée avec succès (vue: {$idView})\n");
                } catch (Exception $e) {
                    echo encoding_normalize::utf8_encode("    - Erreur lors du traitement du déclencheur {$eventDiffusionOrm->num_event} : " . $e->getMessage() . "\n");
                }
            }
        } catch (Exception $e) {
            echo encoding_normalize::utf8_encode("  - Erreur lors du traitement de la diffusion {$diffusionOrm->id_diffusion} : " . $e->getMessage() . "\n");
        }
    }

    echo encoding_normalize::utf8_encode("\n=== RÉSUMÉ ===\n");
    echo encoding_normalize::utf8_encode("Diffusions privées traitées : {$processedDiffusions}/{$totalDiffusions}\n");
    echo encoding_normalize::utf8_encode("Déclencheurs mis à jour : {$updatedEvents}\n");
    echo encoding_normalize::utf8_encode("Opération terminée.\n");
}

/**
 * Fonction pour vérifier l'état actuel des déclencheurs des diffusions privées
 */
function checkPrivateDiffusionEvents()
{
    echo encoding_normalize::utf8_encode("Vérification de l'état actuel des déclencheurs des diffusions privées...\n");

    $privateDiffusions = DiffusionOrm::finds([
        "settings" => [
            "value" => "%\"isPrivate\":true%",
            "operator" => "LIKE"
        ]
    ]);

    $totalDiffusions = count($privateDiffusions);
    $totalEvents = 0;
    $eventsWithCondition = 0;
    $eventsWithoutCondition = 0;

    foreach ($privateDiffusions as $diffusionOrm) {
        $diffusion = new Diffusion($diffusionOrm->id_diffusion);
        $eventDiffusions = EventDiffusionOrm::finds(["num_diffusion" => $diffusion->id]);

        foreach ($eventDiffusions as $eventDiffusionOrm) {
            $event = RootEvent::getInstance($eventDiffusionOrm->num_event);
            $totalEvents++;

            if (isset($event->settings->conditions->emptyAssociatedItem)) {
                $eventsWithCondition++;
            } else {
                $eventsWithoutCondition++;
            }
        }
    }

    echo encoding_normalize::utf8_encode("Total diffusions privées : {$totalDiffusions}\n");
    echo encoding_normalize::utf8_encode("Total déclencheurs : {$totalEvents}\n");
    echo encoding_normalize::utf8_encode("Déclencheurs avec condition : {$eventsWithCondition}\n");
    echo encoding_normalize::utf8_encode("Déclencheurs sans condition : {$eventsWithoutCondition}\n");
}


global $action;

header('Content-Type: text/plain; charset=utf-8');

if ($action === 'check') {
    checkPrivateDiffusionEvents();
} else {
    updatePrivateDiffusionEvents();
}
