<?php
require_once ROOT_DIRECTORY.'blog/init.php';

$detect = new Mobile_Detect;
$id_article = Utils::POST_GET('id_article', EXP_TYPE_INT);
$PAGE = addslashes(Utils::POST_GET('PAGE', EXP_TYPE_INT, 1));

$id_user = Utils::POST_GET('id_user', EXP_TYPE_INT);
$token = Utils::POST_GET('token', EXP_TYPE_STRING);
$stop_notification = Utils::POST_GET('stop_notification', EXP_TYPE_INT, 0);

try {
    $ARTICLE = new Article($id_article);
    $article_url = $ARTICLE->getUrl($BLOG->blog_url);
    $current_url = $_SERVER['REQUEST_URI'];

    // Redirections 301 pour url qui ne corrspondent pas (mauvaise url) hors pagination
    if($article_url != $current_url && $PAGE == 1){
        header("Status: 301 Moved Permanently", false, 301);
        header("Location: " . substr(HTTP_DIRECTORY, 0, -1) . $article_url);
        exit();
    }

    // Désindexation des pages commentaires
    if($PAGE != 1){
        Controller_blog::setIndexes('noindex');
    }
} catch (Exception $e) {
    FatalError::show("Cet article n'existe pas", '404');
}

if ($ARTICLE->id_blog != $BLOG->id) {
    FatalError::show("Cet article n'existe pas", '404');
}

// Désabonnement article
$msg_arret_suivi = false;
if ($stop_notification == 1 && $token != "" && $id_user != "") {
    if (!hash_equals(hash_hmac('sha256', $id_user . ':' . $ARTICLE->id, TOKEN_SALT), $token)) {
        FatalError::show("Interdiction d'accès");
    }

    Article::update($ARTICLE->id, ['notif_mail' => 0]);
    $msg_arret_suivi = true;
}

/**
 *
 * Limitation d'accès si l'article est en brouillon
 * Incrémentation du nombre de vue si article publié
 *
 */

if (!$ARTICLE->publier) {
    if ($EXP_USER->id != $BLOG->id_user && !$EXP_USER->isAdministrateur()) {
        FatalError::show("Cet article n'est pas publié", '404');
    }
} else {

    // Incrémentation du nombre de vues d'un article

    Article::update($ARTICLE->id, array(
        'nb_vue' => $ARTICLE->nb_vue + 1,
    ));

}

$config = HTMLPurifier_Config::createDefault();
$config->set('CSS.AllowedProperties',
    ['text-decoration', 'width', 'margin-top', 'margin-bottom']);
$config->set('Attr.AllowedClasses', array('is-hidden'));
$config->set('URI.AllowedSchemes', array('http' => true, 'https' => true, 'mailto' => true, 'data' => true));
$config->set('Attr.AllowedFrameTargets', array('_blank' => true));
$config->set('Attr.AllowedRel', array('ugc' => true, 'nofollow' => false));

$purifier = new HTMLPurifier($config);

// Récupération des données JSON du blog en BDD
$data = $BLOG->getData();

Controller_blog::setTitle($ARTICLE->titre.' - Légavox');

$description = (strlen($ARTICLE->description) <= 200) ? $ARTICLE->description : substr($ARTICLE->description, 0,
        200).'...';
Controller_blog::setDescription($description);
Controller::setAdUnit('/21922807319/legavox.fr/article');

$image = $ARTICLE->getImage();
Controller_blog::setOgImage($image);

// Chargement du style dnamiquement

Controller_blog::showHead($HEAD_OPTIONS);

// Affiche Header

$HEADER_OPTIONS['option'] = '';
Controller_blog::showHeader($HEADER_OPTIONS);

// recuperation de l'objet de gestion de template

$VUE = Controller_blog::loadTemplate('affiche-article.tpl');

// Arrêt suivi
if ($msg_arret_suivi) {
    $VUE->newSession('arret_suivi');
}

### MENU DE GAUCHE ###
$VUE->addSession('GAUCHE');

$menu_reversed = ($BLOG->blog_menu) ? 'computer reversed' : '';
$VUE->setVariable('GAUCHE.menu_reversed', $menu_reversed);

// Lien d'édition de l'article si blogueur de ce blog ou administrateur

if ($ARTICLE->diffuser == 1 && $EXP_USER->isAdministrateur()) {
    $VUE->addSession('article_edition');
    $VUE->setVariable('article_edition.hidden_id_blog', form::hidden("id_blog", $GLOBALS['BLOG']->id));
    $VUE->setVariable('article_edition.hidden_id_article', form::hidden("id_article", $ARTICLE->id));
    $categories = $GLOBALS['EXP_ARBO']->getNiveau(1)->getArrayData();
    $categories = array_column($categories, 'libelle', 'id');
    unset($categories[1]);
    unset($categories[2]);
    $VUE->setVariable('article_edition.id_cat', form::combo("id_cat", $categories, $ARTICLE->id_cat1, array(
        "zero" => 'Mettre à la une',
    )));

    $VUE->setGlobalVariable('ajax_id_blog', $GLOBALS['BLOG']->id);
    $VUE->setGlobalVariable('ajax_id_article', $ARTICLE->id);

    $VUE->newSession('article_edition_invalidation');
    $VUE->newSession('article_edition_validation');

    if ($ARTICLE->qualitatif) {
        $VUE->newSession('non_qualitatif');
    } else {
        $VUE->newSession('qualitatif');
    }

    $VUE->setVariable('article_edition.suppression_mode', EXP_MODE_SUPPRIMER);
    $VUE->setVariable('article_edition.suppression_redirection', '/blog/'.$BLOG->blog_url.'/');
    $VUE->closeSession('article_edition');

}
if ($EXP_USER->id == $BLOG->id_user || $EXP_USER->isAdministrateur()) {
    $VUE->addSession('bouton_article_edition');
    $VUE->setVariable('bouton_article_edition.lien',
        '/blog/'.$BLOG->blog_url.'/administration/article/edition/index.php?etape=contenu&id_article='.$ARTICLE->id);
    $VUE->closeSession('bouton_article_edition');
}

// Gestion des données de l'article en cours
$lien_pdf = str_replace('.htm', '.pdf', $ARTICLE->getURL($BLOG->blog_url));
$VUE->setVariable('GAUCHE.lien_pdf', $lien_pdf);

// SIgnalement article
$page_contact = Page::getPages([
    'id_blog' => $BLOG->id,
    'obligatoire' => 1,
    'type' => 'contact',

]);

if (!$page_contact->isEmpty()) {
    $VUE->setVariable('GAUCHE.lien_signaler',
        '/blog/'.$BLOG->blog_url.'/page/page-'.$page_contact->f('id').'.htm?id_article='.$ARTICLE->id);
}

$VUE->setVariable('GAUCHE.article_image', $image);
$VUE->setVariable('GAUCHE.article_titre', $ARTICLE->titre);

$fichiers = ArticleFichier::getFichiers([
    'id_article' => $ARTICLE->id
]);

if (!$fichiers->isEmpty()) {
    $VUE->addSession('zone_fichiers');
    while ($fichiers->moveNext()) {
        $FICHIER = ArticleFichier::getObj($fichiers);
        $VUE->addSession('fichiers');

        $nom_fichier = (!empty($FICHIER->libelle)) ? $FICHIER->libelle : $FICHIER->fichier;
        $VUE->setVariable('fichiers.fichier', $nom_fichier);
        $VUE->setVariable('fichiers.url_fichier', AWS_URL.'blog/fichiers/article-'.$ARTICLE->id.'/'.$FICHIER->fichier);

        $VUE->closeSession('fichiers');
    }
    $VUE->closeSession('zone_fichiers');
}

$classe_image = 'sixteen';
$classe_description = 'sixteen';
if ($ARTICLE->image_gauche) {
    $classe_image = 'six';
    $classe_description = 'ten';
}

$VUE->setVariable('GAUCHE.classe_image', $classe_image);
$VUE->setVariable('GAUCHE.classe_description', $classe_description);

$VUE->setVariable('GAUCHE.article_titre', $ARTICLE->titre);
$VUE->setVariable('GAUCHE.article_date', $ARTICLE->date_publication);

if ($ARTICLE->date_publication != $ARTICLE->date_modif && $ARTICLE->date_modif != null) {
    $VUE->addSession('date_modif');
    $VUE->setVariable('date_modif.date_modif', $ARTICLE->date_modif);
    $VUE->setVariable('date_modif.article_datetime_modif',
        Datetime::createFromFormat('d/m/Y', $ARTICLE->date_modif)->format('Y-m-d'));
    $VUE->closeSession('date_modif');
} else {
    $VUE->setVariable('GAUCHE.datemodif', "<span class='display_none' itemprop='dateModified'>".$ARTICLE->date_modif."</span>");
}

$VUE->setVariable('GAUCHE.article_datetime',
    Datetime::createFromFormat('d/m/Y', $ARTICLE->date_publication)->format('Y-m-d'));
$VUE->setVariable('GAUCHE.article_auteur', $BLOG->blog_nom);
$VUE->setVariable('GAUCHE.article_vues', number_format($ARTICLE->nb_vue, 0, '', ' '));
$VUE->setVariable('GAUCHE.article_commentaires_nombre', $ARTICLE->getNbCom());
require_once "../../composants/organizationForum/organizationForum.php";
$VUE->setVariable('GAUCHE.organisationPublisher', $organization);
$VUE->setVariable('GAUCHE.article_description', $ARTICLE->description);
$VUE->setVariable('GAUCHE.article_description_micro', substr($ARTICLE->description,0,110));

$texte = str_replace('id=\"_mcePaste\"', 'class="is-hidden"', $ARTICLE->texte);
//$texte = str_replace('<p> </p>', '', $texte);
$texte = stripslashes($texte);
$texte = Utils::relUgc($texte);
$texte = $purifier->purify($texte);

$VUE->setVariable('GAUCHE.article_texte', $texte);

// Gestion de la liste des commentaires

$commentaires_article_req = ArticleCom::getRqComs([
    'id_article' => $ARTICLE->id,
    'order' => 'date ASC'
]);
$MULTIPAGE = new MultiPage($commentaires_article_req, $PAGE, 10);
$commentaires_article = $MULTIPAGE->getRc();

if (!$commentaires_article->isEmpty()) {
    $commentaire_position = 1;
    while ($commentaires_article->moveNext()) {

        $COMMENTAIRE = ArticleCom::getObj($commentaires_article);

        try {
            $USER_COMMENTAIRE = new User($COMMENTAIRE->id_membre);
        } catch (Exception $e) {
            $USER_COMMENTAIRE = new User();
            $USER_COMMENTAIRE->pseudo = 'Visiteur';
        }

        $VUE->addSession('commentaire_article');
        $VUE->setVariable('commentaire_article.commentaire_article_id', $COMMENTAIRE->id);
        $VUE->setVariable('commentaire_article.commentaire_article_position', $commentaire_position);
        $VUE->setVariable('commentaire_article.commentaire_article_url',
            substr(HTTP_DIRECTORY, 0, -1).$ARTICLE->getUrl($BLOG->blog_url)."#commentaire-".$COMMENTAIRE->id);

        //$pseudo = (strlen($USER_COMMENTAIRE->pseudo) <= 10) ? $USER_COMMENTAIRE->pseudo : substr($USER_COMMENTAIRE->pseudo, 0, 10) . '...';
        $VUE->setVariable('commentaire_article.commentaire_article_pseudo', $USER_COMMENTAIRE->pseudo);

        if ($USER_COMMENTAIRE->isAdministrateur()) {
            $VUE->addSession('role');
            $VUE->setVariable('role.role', 'Administrateur');
            $VUE->closeSession('role');
        } elseif ($USER_COMMENTAIRE->isSuperviseur()) {
            $VUE->addSession('role');
            $VUE->setVariable('role.role', 'Superviseur');
            $VUE->closeSession('role');
        } elseif ($USER_COMMENTAIRE->isModerateur()) {
            $VUE->addSession('role');
            $VUE->setVariable('role.role', 'Modérateur');
            $VUE->closeSession('role');
        }

        $VUE->setVariable('commentaire_article.commentaire_article_date', date('d/m/Y H:i', strtotime($COMMENTAIRE->date)));
        $VUE->setVariable('commentaire_article.commentaire_article_texte', nl2br($COMMENTAIRE->texte));
        if ($EXP_USER->id == $COMMENTAIRE->id_membre || $EXP_USER->id == $BLOG->id_user || $EXP_USER->isAdministrateur()) {
            $VUE->addSession('commentaire_article_suppression');
            $VUE->setVariable('commentaire_article_suppression.commentaire_article_id', $COMMENTAIRE->id);
            $VUE->setVariable('commentaire_article_suppression.commentaire_article_id_article', $ARTICLE->id);
            $VUE->setVariable('commentaire_article_suppression.commentaire_article_id_blog', $BLOG->id);
            $VUE->setVariable('commentaire_article_suppression.commentaire_article_mode',
                EXP_MODE_SUPPRIMER_COMMENTAIRE);
            $VUE->closeSession('commentaire_article_suppression');
        }

        $VUE->closeSession('commentaire_article');
        $commentaire_position++;
    }

    $VUE->addSession('pagination');
    $url_pagination = $ARTICLE->getUrl($BLOG->blog_url) . '?PAGE=#PAGE##commentaires';
    $VUE->setVariable('pagination.pagination', $MULTIPAGE->getHtml($url_pagination, 1));
    $VUE->closeSession('pagination');
}


if ($data['affichage_commentaires'] && $ARTICLE->com) {

    // Gestion du formulaire de commentaire

    $VUE->addSession('ajout_commentaire');
    $VUE->setVariable('ajout_commentaire.commentaire', form::textarea("commentaire", "", array(
        "placeholder" => "Rédigez votre commentaire ici ...",
        "height" => "250px",
    )));
    if ($EXP_USER->isVisiteur()) {

        $VUE->addSession('ZoneUser');
        $VUE->setVariable('ZoneUser.nom', form::field("nom", "", array("placeholder" => "Votre nom / prénom")));

        $VUE->setVariable('ZoneUser.email', form::field("email", "",
            array("placeholder" => "Votre email", 'type' => 'email', 'required' => 'required')));
        $VUE->setVariable('ZoneUser.phone',
            form::field("phone", "", array("placeholder" => "Votre numéro de téléphone")));
        $VUE->setVariable('ZoneUser.pseudo',
            form::field("pseudo", "", array("placeholder" => "Votre pseudo", 'required' => 'required')));
        $VUE->setVariable('ZoneUser.password', form::field("password", "",
            array("placeholder" => "Votre mot de passe", 'type' => 'password', 'required' => 'required')));
        $VUE->setVariable('ZoneUser.departement', form::combo("departement", Departement::getDepartement(), '',
            array("zero" => "Votre département", 'required' => 'required')));
        $VUE->closeSession('ZoneUser');

        $VUE->addSession('ZoneDisclaimers');

        $VUE->setVariable('ZoneDisclaimers.prospection', form::checkbox("prospection", 0,
            array('text' => "J'accepte de recevoir des propositions commerciales de nos partenaires")));

        $VUE->setVariable('ZoneDisclaimers.cgu', form::checkbox("cgu", 0,
            array('text' => "En cochant cette case, je reconnais avoir pris connaissance et accepter les <a href='/cgu/' target='_blank'>conditions générales d'utilisation</a> ainsi que la <a href='/politique-de-confidentialite/' target='_blank'>politique de confidentialite</a>")));

        $VUE->closeSession('ZoneDisclaimers');

    }

    $VUE->setVariable('ajout_commentaire.hidden_mode', form::hidden("MODE", EXP_MODE_AJOUTER_COMMENTAIRE));
    $VUE->setVariable('ajout_commentaire.hidden_id_blog', form::hidden("id_blog", $BLOG->id));
    $VUE->setVariable('ajout_commentaire.hidden_id_article', form::hidden("id_article", $ARTICLE->id));
    $VUE->closeSession('ajout_commentaire');
}

$class_bloc_forum = 'sixteen';

// Récupération du champs actkif à partir du tableau JSON en BDD

if (is_array($data) && isset($data['posmenu']) && !empty($data['posmenu']) && is_array($data['posmenu']) && $BLOG->getDataPosmenu('questionp',
        $data)) {
    if (!empty($BLOG->blog_id_cj)) {
        $url_xml = URL_CJ.'flux/avocats/avocat-'.$BLOG->blog_id_cj.'.xml';

        // Vérification de l'existence du XML
        $xml = simplexml_load_file($url_xml);
        if ($xml) {

            if (is_object($xml)) {
                foreach ($xml->channel->item as $item) {
                    if ($item->consultation == 1) {

                        $class_bloc_forum = 'six';
                        $VUE->addSession('questionp');
                        $VUE->setVariable('questionp.photo', $item->photo);
                        $VUE->setVariable('questionp.nom', $item->nom);
                        $VUE->setVariable('questionp.blog', $BLOG->blog_nom);
                        $VUE->setVariable('questionp.alt_image', $BLOG->blog_nom);
                        $VUE->setVariable('questionp.url', $item->lien_profil);
                        $VUE->setVariable('questionp.prix', str_replace('.00', '', $item->prix));

                        // $VUE->setVariable('questionp.delai', 'Rép : ' . $item->delai);

                        $note = 5;
                        if ($item->etoile == "" || $item->etoile == 0) {
                            $note = 5;
                        } else {
                            if ($item->etoile > 70) {
                                $note = 5;
                            } else {
                                if ($item->etoile > 60) {
                                    $note = 4;
                                } else {
                                    if ($item->etoile > 30) {
                                        $note = 3;
                                    } else {
                                        if ($item->etoile > 10) {
                                            $note = 2;
                                        } else {
                                            if ($item->etoile > 0) {
                                                $note = 1;
                                            }
                                        }
                                    }
                                }
                            }
                        }

                        $nb_eval = "Pas d'avis pour le moment";
                        if ($item->nb_avis > 0) {

                            $nb_eval = $item->nb_avis." évaluations positives";

                            $VUE->addSession('etoiles');
                            for ($note_i = 1; $note_i <= $note; $note_i++) {
                                $VUE->newSession('etoile_oui');
                            }

                            for ($note_i = $note; $note_i < 5; $note_i++) {
                                $VUE->newSession('etoile_non');
                            }

                            $VUE->setVariable('etoiles.note', $note);
                            $VUE->closeSession('etoiles');
                        }

                        $VUE->setVariable('questionp.nb_eval', $nb_eval);

                        $VUE->closeSession('questionp');
                    }
                }
            }
        }
    }
}

// Fil d'ariane
$VUE->addSession('ZoneFilAriane');
$VUE->setVariable('ZoneFilAriane.urlhome', '/blog/' . $BLOG->blog_url);

$titre_ariane= $ARTICLE->titre;
$lg_max = 50; // nombre de caractère autorisé
$titre_ariane = strip_tags($titre_ariane); // On retire toutes les balises
if (strlen($titre_ariane) > $lg_max) {
  $titre_ariane = substr($titre_ariane, 0, $lg_max) ;
  $last_space = strrpos($titre_ariane, " ") ;
  $titre_ariane = substr($titre_ariane, 0, $last_space)."..." ;
  $VUE->setVariable('ZoneFilAriane.article_titre', $titre_ariane);
} else {
  $VUE->setVariable('ZoneFilAriane.article_titre', $ARTICLE->titre);
}


$VUE->closeSession('ZoneFilAriane');
$VUE->showTemplate(true, "ZoneFilAriane");

$VUE->setVariable('GAUCHE.class_bloc_forum', $class_bloc_forum);

$VUE->closeSession('GAUCHE');
$VUE->showTemplate(true, "GAUCHE");

### MENU DE DROITE ###
$VUE->addSession('DROITE');

// Gestion du menu de droite
require_once ROOT_DIRECTORY.'blog/modules/menu_droite.php';
$VUE->setVariable('DROITE.menu_droite', $menu_droite);

$VUE->closeSession('DROITE');
$VUE->showTemplate(true, "DROITE");

// Affiche le footer

Controller_blog::showFooter();
