summaryrefslogtreecommitdiff
path: root/controller/ckeditor.php
blob: d0c582449b19e45bc8d12e722348d199c466e686 (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
<?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($html)
{
	// texte initial inséré avec setData() dans l'éditeur
    // danger!
    // setData() n'insère pas le texte si il ne respecte pas certains critères, l'utilisateur risque de perdre des données en validant un nouveau contenu sans avoir pu modifier l'ancien

    if(empty($html))
    {
        header('Location: index.php?erreur=empty_input');
    }

    // sécuriser le HTML
    require('controller/Security.php');
    $html = Security::secureString($html);

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

    // échapper tous les ', ", \ et caractère NULL
    $html = addslashes($html);

    return($html);
}

// utilisée par submitCKeditor()
function getFileCodeFromHTTPReferrer(): string
{
    if(isset($_SERVER['HTTP_REFERER']))
    {
        $referrer = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY);
        $pattern = '#file_code=#';
        $split = preg_split($pattern, $referrer);
        if(isset($split[1]) && is_numeric($split[1]))
        {
            return $split[1];
        }
        else
        {
            return '';
        }
    }
    else
    {
        return '';
    }
}

// réception du HTML créé par l'éditeur
function submitCKeditor()
{
    // déjà fait mais on ne sait jamais
    if(!isset($_SESSION))
    {
        header('Location: index.php?page=' . $_GET['page'] . '&erreur=connexion');
        exit();
    }

    // sécurité du HTML
    if(isset($_POST['contenu'])) // optionnel pour discographie
    {
        $html = Security::secureString($_POST['contenu']);

        // liens sans http:// devant
        $html = fixLinks($html);
        
        // récupérer les liens multimedia
        //require("media.php");
        //$html = mediaSubmit($html);

        // 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($_GET['page'] != 'discographie' && $_GET['page'] != 'album' && $html == '')
        {
            header('Location: index.php?page=' . $_GET['page'] . '&erreur=contenu_editeur_vide');
            exit();
        }
    }

    
    // enregistrement du HTML
    //
    // page discographie
    if($_GET['page'] === 'discographie' || $_GET['page'] === 'album')
    {
        $Album = new Album($_GET['page'], 'discographie');

        $Album->fileCode = getFileCodeFromHTTPReferrer();
        
        // on retrouve les données si nécessaire
        if($Album->fileCode != '')
        {
            $Album->readOne();
        }

        $nouveauTitre = Security::secureString($_POST['titre']);
        $nouvelleAnnee = Security::secureString($_POST['annee']);

        // enregistrement de l'image
        if(!empty($_FILES['upload']['name']))
        {
            require('model/Image.php');
            $Image = new Image($_GET['page'], 'discographie', false);
            $nomFichier = Security::secureFileName($_FILES['upload']['name']);
            $Image->setFileName($nomFichier);
            $Image->setThumbnailWidth(201);

            $nouvellePochette = $nomFichier;
            $nouvellePochetteMini = pathinfo($nomFichier, PATHINFO_FILENAME) . '-mini.' . pathinfo($nomFichier, PATHINFO_EXTENSION);

            $Image->upload();
            $Image->makeThumbnail();

            $erreur = $Image->erreur;
            if(!empty($erreur))
            {
                // remettre pochette précédente si il y a
            }
        }
        else
        {
            $nouvellePochette = '';
            $nouvellePochetteMini = '';
        }

        // enregistrement du texte JSON
        if($Album->fileCode === '')
        {
            // page disco
            $Album->createVignetteJSON($nouveauTitre, $nouvelleAnnee, $nouvellePochette, $nouvellePochetteMini);
            
            // page de l'album
            if(!empty($_POST['contenu']))
            {
                $Album->format = 'html';
                $Album->create($html);
            }
        }
        // modification
        else
        {
            // page disco
            $Album->format = 'json';
            
            $Album->updateVignetteJSON($nouveauTitre, $nouvelleAnnee, $nouvellePochette, $nouvellePochetteMini);
            
            // page de l'album
            // si $html est vide, le fichier est supprimé
            $Album->format = 'html';
            $Album->update($html);
        }
    }
    // pages articles simples (melaine...)
    //if($_GET['page'] != 'discographie')
    else
    {
        $Article = new Article($_GET['page'], $_GET['page']);
        
        $Article->fileCode = getFileCodeFromHTTPReferrer();

        if($Article->fileCode === '')
        {
            $Article->create($html);

            // create html-mini
        }
        else
        {
            $Article->update($html);

            // update html-mini
        }
    }

    // redirection
    if($_GET['page'] === 'discographie' || $_GET['page'] === 'album')
    {
        if($html === '')
        {
            $redirection = 'index.php?page=discographie';
        }
        else
        {
            $redirection = 'index.php?page=album&file_code=' . $Album->fileCode;
        }
    }
    else
    {
        $redirection = 'index.php?page=' . $_GET['page'];
    }
    header('Location: ' . $redirection);
    exit();
}