diff --git a/core/core.php b/core/core.php
index d4761f31..4b39e73c 100644
--- a/core/core.php
+++ b/core/core.php
@@ -42,7 +42,8 @@ class common {
'page',
'sitemap',
'theme',
- 'user'
+ 'user',
+ 'search'
];
private $data = [];
private $hierarchy = [
diff --git a/core/module/search/search.php b/core/module/search/search.php
new file mode 100644
index 00000000..d970d71e
--- /dev/null
+++ b/core/module/search/search.php
@@ -0,0 +1,152 @@
+ self::GROUP_VISITOR,
+ ];
+
+// Liste de fonctions correspondant aux vues
+
+ public function index() {
+ if($this->isPost()) {
+ // Récupération de l'ensemble des données d'un site ZWII
+ // Lire le fichier core.json si il existe
+ // Traitement du formulaire
+ $success = true;
+ $result = '';
+ if(file_exists ('./site/data/core.json')) {
+ $json_source = file_get_contents('./site/data/core.json');
+
+ // Décoder le JSON en un array
+ $array = json_decode($json_source,true);
+
+ // Récupération du mot clef passé par le formulaire de ...view/index.php, avec caractères accentués
+ $motclef=$this->getInput('searchMotphraseclef');
+
+ $result = '
Recherche avec le mot clef : '.$motclef.'
';
+ if ($motclef !== "" && strlen($motclef) > 2) {
+ $dejavu = '';
+ $nboccutotal = 0;
+ foreach ($array as $key1 => $value1) {
+ // Déterminer le chemin de tous les contenus (content) dans page ou module
+ if (($key1 ==='page' || $key1 ==='module') && is_array($value1) )
+ {
+ foreach ($value1 as $key2 => $value2)
+ {
+ if (is_array($value2))
+ {
+ foreach ($value2 as $key3 => $value3) {
+ if ($key3 === "content" && is_string($value3)) {
+ // compte le nombre d'occurrences dans la page
+ $nboccu=0;
+ // le contenu à explorer est dans $value3, le nom de la page est $key2
+ //Nettoyage de $value3 : on enlève tout ce qui est inclus entre < et >
+ $value3=$this->nettoyer_html($value3);
+ //accentuation
+ $value3=html_entity_decode($value3);
+ // Recherche et affichage des occurrences
+ do {
+ $occu = stristr($value3,$motclef);
+ if ($occu !== '') {
+ if ($key2!=$dejavu) {
+ $result .= '
Mot clef trouvé dans la page : '.$key2.'
';
+ }
+ $dejavu=$key2;
+ $nboccu++;
+ //Affichage d'un extrait de $value3
+ $result .= ''.$nboccu.' - "...'.substr($occu,0,200).'..."
';
+ //pour recherche d'une autre occurence dans le même contenu
+ $value3=substr($occu,100);
+ }
+ } while($occu != '');
+ $dejavu = '';
+ $nboccutotal = $nboccutotal + $nboccu;
+ $nboccu = 0;
+ } elseif ($key1 == "module" && is_array($value3)) {
+ foreach ($value3 as $key4 => $value4) {
+ if ($key4 == "content" && is_string($value4) ) {
+ $nboccu = 0;
+ // le contenu à explorer est dans $value4, le nom du module/page est $key2/$key3
+ //Nettoyage de $value4 : on enlève tout ce qui est inclus entre < et >
+ $value4 = $this->nettoyer_html($value4);
+ //accentuation
+ $value4 = html_entity_decode($value4);
+ // Recherche et affichage des occurrences
+ do {
+ $occu = stristr($value4,$motclef);
+ if ($occu != '') {
+ if ($key3 != $dejavu) {
+ $result .= '
Mot clef trouvé dans la page : '.$key2.'/'.$key3.'
';
+ }
+ $dejavu = $key3;
+ $nboccu++;
+ $result .= ''.$nboccu.' - "...'.substr($occu,0,200).'..."
';
+ }
+ //pour recherche d'une autre occurrence dans le même contenu
+ $value4 = substr($occu,100);
+ } while($occu != '');
+ $dejavu = '';
+ $nboccutotal = $nboccutotal + $nboccu;
+ $nboccu = 0;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if ($nboccutotal==0) {
+ $notification = '
Mot clef non trouvé, avez-vous pensé aux accents ?
';
+ $success = false;
+ } else {
+ $result .= '
Nombre total d\'occurrences : '.$nboccutotal.'
';
+ $notification = 'Nombre total d\'occurrences : '.$nboccutotal;
+ $success = true;
+ }
+ } else {
+ $notification = 'Trop court ! minimum 3 caractères';
+ $result = '
Trop court ! minimum 3 caractères
';
+ $success = false;
+ }
+
+ } else {
+ $notification = 'Fichier core.json introuvable';
+ $success = false;
+ }
+ $_POST['result'] = $result;
+ $_POST['occurence'] = $nboccutotal;
+ // Valeurs en sortie, affichage du résultat
+ $this->addOutput([
+ 'title' => 'Rechercher dans le site',
+ 'view' => 'result',
+ 'notification' => $notification,
+ 'state' => $success
+ ]);
+ } else {
+ // Valeurs en sortie, affichage du formulaire
+ $this->addOutput([
+ 'title' => 'Rechercher dans le site',
+ 'view' => 'index'
+ ]);
+ }
+ }
+
+ /* Déclaration de la fonction nettoyer(string $contenu) : string
+ * Supprime de $contenu les caractères placés entre < et >, donc les balises html comme
etc...
+ * Retourne $contenu nettoyée, le résultat est sensiblement différent de celui obtenu avec la fonction strip_tags()
+ */
+ private function nettoyer_html($contenu){
+ do {
+ $pos1=strpos($contenu,chr(60));
+ if($pos1!==false) {
+ $pos2=strpos($contenu,chr(62));
+ if($pos2!==false) $contenu=substr_replace($contenu," ",$pos1,($pos2 - $pos1 + 1));
+ }
+ } while($pos1!==false);
+ return $contenu;
+ }
+
+}
+?>
\ No newline at end of file
diff --git a/core/module/search/view/index/index.php b/core/module/search/view/index/index.php
new file mode 100644
index 00000000..d197609e
--- /dev/null
+++ b/core/module/search/view/index/index.php
@@ -0,0 +1,28 @@
+
+
+
+ getUrl(2); ?>
+ getData(['page', $this->getUrl(2), 'moduleId']) === 'redirection' || 'code')$href = helper::baseUrl(); ?>
+ 'buttonGrey',
+ 'href' => $href,
+ 'ico' => 'left',
+ 'value' => 'Retour'
+ ]); ?>
+
+
+
+
+
+
+
+
Zone de saisie :
+ 'Mot ou phrase clef',
+ 'value' => '',
+ 'help' => 'Saisir un mot ou une phrase clef pour votre recherche, n\'oubliez pas les accents.'
+ ]); ?>
+
+
+
+
diff --git a/core/module/search/view/result/result.php b/core/module/search/view/result/result.php
new file mode 100644
index 00000000..e98abb36
--- /dev/null
+++ b/core/module/search/view/result/result.php
@@ -0,0 +1,21 @@
+
+
+
+ getUrl(2); ?>
+ getData(['page', $this->getUrl(2), 'moduleId']) === 'redirection' || 'code')$href = helper::baseUrl(); ?>
+ 'buttonGrey',
+ 'href' => $href . 'search',
+ 'ico' => 'left',
+ 'value' => 'Retour'
+ ]); ?>
+
+
+
+
+
\ No newline at end of file