summaryrefslogtreecommitdiff
path: root/controller/ckeditor.php
blob: 2b9f168876148387895cb335f24bbd742360a67e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
// controller/ckeditor.php
//
// c'est la partie PHP du ckeditor
// l'autre partie est le fichier view/template-ckeditor.php
// qui est inséré par la vue de la page correspondante
// il y a aussi un fichier CSS parce que le HTML créé par l'éditeur ne suffit pas à lui-même

// avant de placer l'éditeur
function preparationCKeditor($numArticle, $texte)
{
	// ici $numArticle sert uniquement à savoir si on crée ou modifie un article

	// texte initial inséré avec setData() dans l'éditeur,
    // on recherche ici les causes expliquant qu'il n'apparaisse pas à l'ouverture de l'éditeur,
    // les données précédentes sont écrasées à la validation du nouveau texte
    if ($numArticle > 0)
    {
        if(empty($texte))
        {
            header('Location: index.php?erreur=empty_input');
        }

        // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine
        $texte = trim($texte);

        // supprimer les sauts de ligne
        $sautsDeLigne = array("\n", "\r", "\r\n");
        $texte = str_replace($sautsDeLigne, '', $texte);

        // échapper tous les ', ", \ et caractère NULL
        $texte = addslashes($texte);
    }
    else
    {
        $texte = ''; // nouveau contenu
    }

    return($texte);
}

// réception du HTML créé par l'éditeur
// le nom du fichier est celui dans $_SESSION['nomFichier']
function submitCKeditor($nomFichier)
{
    $page = $_GET['page'];

    // déjà fait mais on ne sait jamais
    if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1)
    {
        header('Location: index.php?page=' . $page . '&erreur=connexion');
        exit();
    }

    // de l'éditeur
    if(isset($_POST['contenu'])) // optionnel pour discographie
    {
        $contenu = Security::secureString($_POST['contenu']);
        
        // récupérer les liens multimedia
        //require("media.php");
        //$contenu = mediaSubmit($contenu);

        // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur), risque perte de contenu !!
        if($page != 'discographie' && $contenu == '')
        {
            header('Location: index.php?page=' . $page . '&erreur=contenu_vide');
            exit();
        }
    }

    if($page == 'discographie')
    {
        $titre = Security::secureString($_POST['titre']);
        $annee = Security::secureString($_POST['annee']);
        $pochette = $_FILES['upload']['name'];

        // on instancie avec l'enfant de OneArticle
        $Album = new Album($page);
        
        // enregistrement
        if($_GET['article'] == 0)
        {
            // page disco
            $Album->createVignette($titre, $annee, $pochette);
            
            // page de l'album
            if(!empty($_POST['contenu']))
            {
                $Album->create($contenu);
            }
        }
        else
        {
            // page disco
            $Album->updateVignette($titre, $annee, $pochette);

            // page de l'album
            if(isset($_POST['contenu']))
            {
                $Album->update($content);
            }
        }
    }
    // autres pages
    else
    {
        $Article = new Page($page, 'html');

        if($_GET['article'] == 0)
        {
            $Article->create($contenu);
        }
        else
        {
            $Article->fileName = $nomFichier;
            $Article->update($contenu);
        }
    }
}

// lien sans http://
// un clic sur un lien dans l'éditeur affiche une infobulle montrant l'adresse cible du lien si celle-ci a déjà été précisée
// il est possible de cliquer sur ce lien, ce qui ouvre un onglet avec le site demandé
// toutefois si cette adresse est de type "domaine.fr" (sans http:// devant), le navigateur ne va pas rechercher un site mais un fichier comme si mon adresse était de type file:///fichier
// tomber ainsi sur une page d'erreur est déroutant:
// "ai-je perdu le texte que j'étais en train de taper?""
// solution 1 (mauvaise): activer la redirection en cas d'erreur 404 dans le .htaccess
// solution 2 (façon pop-up): fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>';
// pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert...

function cleanHTML($contenu)
{}