Subversion Repositories Applications.wikini

Rev

Rev 38 | Rev 40 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 38 Rev 39
Line 33... Line 33...
33
			$this->verifierParametres($parametres);
33
			$this->verifierParametres($parametres);
34
			$this->analyserParametres($ressources, $parametres);
34
			$this->analyserParametres($ressources, $parametres);
Line 35... Line 35...
35
			
35
			
Line 36... Line 36...
36
			$page = $this->consulterPage($this->pageNom, $this->section);
36
			$page = $this->consulterPage($this->pageNom, $this->section);
37
			
37
			
38
			if ($page == null) {
38
			// on devrait normalement renvoyer une erreur 404 mais 
39
				$message = 'La page demandée n\'existe pas';
39
			// l'api de consultation d'url du framework prend mal en compte 
40
				$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
-
 
41
				throw new Exception($message, $code);
40
			// le 404 et ne permet pas de le traiter quand on le recoit
Line 42... Line 41...
42
			}
41
			$page['existe'] = ($page != null);
43
			$retour = $this->formaterRetour($page);
42
			$retour = $this->formaterRetour($page);
44
			
43
			
Line 110... Line 109...
110
	
109
	
111
		return $page;
110
		return $page;
Line 112... Line 111...
112
	}
111
	}
113
	
-
 
114
	private function decouperPageSection($contenu_page, $section) {
112
	
115
	
113
	private function decouperPageSection($contenu_page, $section) {
116
		$section_retour = '';
114
		$section_retour = '';
117
		if (is_numeric($section)) {
115
		if (is_numeric($section)) {
118
			$section_retour =  $this->getSectionParNumero($contenu_page, $section);
116
			$section_retour =  $this->getSectionParNumero($contenu_page, $section);
119
		} else {
117
		} else {
120
			$section_retour =  $this->getSectionParTitre($contenu_page, $section);
118
			$section_retour =  $this->getSectionParTitre($contenu_page, $section, false);
121
		}
119
		}
Line 122... Line 120...
122
		return $section_retour;
120
		return $section_retour;
Line 151... Line 149...
151
		}
149
		}
Line 152... Line 150...
152
 
150
 
153
		return $sectionTxt;
151
		return $sectionTxt;
Line 154... Line 152...
154
	}
152
	}
155
	
153
	
156
	public function getSectionParTitre($page, $titre) {
154
	public function getSectionParTitre($page, $titre, $inclure_titre = false) {
157
		$section = '';
155
		$section = '';
158
		$reg_exp = '/((=[=]+)[ ]*'.preg_quote(trim($titre), '/').'[ ]*=[=]+)[.]*/i';
156
		$reg_exp = '/((=[=]+)[ ]*'.preg_quote(trim($titre), '/').'[ ]*=[=]+)[.]*/i';
159
		$match = preg_split($reg_exp, $page, 2, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
157
		$match = preg_split($reg_exp, $page, 2, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
160
		if (count($match) > 3) {
158
		if (count($match) > 3) {
-
 
159
			$section = explode(trim($match[2]), $match[3], 2);
161
			$section = explode(trim($match[2]), $match[3], 2);
160
			$section = $section[0];
162
			$section = $match[1].$section[0];
161
			$section = ($inclure_titre) ? $match[1].$section : $section;
163
		} elseif (count($match) == 3) {
162
		} elseif (count($match) == 3) {
-
 
163
			$section = explode(trim($match[1]), $match[2], 2);
164
			$section = explode(trim($match[1]), $match[2], 2);
164
			$section = $section[0];
165
			$section = $match[0].$section[0];
165
			$section = ($inclure_titre) ? $match[0].$section : $section;
166
		} else {
166
		} else {
Line 167... Line 167...
167
			$section = "";
167
			$section = "";
Line 189... Line 189...
189
		
189
		
190
		$retour = array('id' => $this->pageNom,
190
		$retour = array('id' => $this->pageNom,
191
				'titre' => $this->pageNom,
191
				'titre' => $this->pageNom,
192
				'mime' => $mime,
192
				'mime' => $mime,
193
				'texte' => $texte,
193
				'texte' => $texte,
-
 
194
				'href' => $url,
Line 194... Line 195...
194
				'href' => $url);
195
				'existe' => $page['existe']);
195
		
196
		
Line 196... Line 197...
196
		return $retour;
197
		return $retour;
Line 228... Line 229...
228
		}
229
		}
Line 229... Line 230...
229
		
230
		
230
		return $ecriture;
231
		return $ecriture;
Line -... Line 232...
-
 
232
	}
-
 
233
	
-
 
234
	/**
-
 
235
	 * 
-
 
236
	 * Si la section demandée existe dans la page, renvoie un tableau contenant le numéro de caractère de 
-
 
237
	 * début de la section, après son titre, ainsi que la longeur du titre
-
 
238
	 * @param string $titre de la section
-
 
239
	 * @param string $page contenu de la page wiki
231
	}
240
	 * @return tableau associatif tel que décrit ici
-
 
241
	 */
-
 
242
	private function getInformationsPositionSection($titre, $page) {
-
 
243
		
-
 
244
		preg_match_all('/(=[=]+[ ]*'.preg_quote(trim($titre), '/').'[ ]*=[=]+[.]*)/i', $page, $sections, PREG_OFFSET_CAPTURE);
-
 
245
		$longueur_titre = 0;
-
 
246
		$debut_section_apres_titre = 0;
-
 
247
		
-
 
248
		if (count($sections) > 0 && is_array($sections[0]) && count($sections[0][0]) >= 2) {
-
 
249
			$longueur_titre = mb_strlen($sections[0][0][0]);
-
 
250
			$debut_section_apres_titre = $sections[0][0][1] + $longueur_titre;
-
 
251
		}
-
 
252
		
-
 
253
		// ATTENTION : début contient le numéro du caractere de début de la section, après le titre
-
 
254
		$infos = array('debut' => $debut_section_apres_titre,
Line 232... Line 255...
232
	
255
						'longueur_titre' => $longueur_titre
-
 
256
				);
-
 
257
		
233
	private function remplacerSection($titre_ou_numero_section, $section_remplacement, $corps) {
258
		return $infos;
234
		
-
 
235
		//TODO: empecher l'insertion de section de niveau supérieur (avec plus de =)
259
	}
236
		// en les réduisant pour que le niveau de la section soit toujours inférieur à celui
260
	
237
		// de la section éditée ? voir avec le PO !	
261
	private function remplacerSection($titre_section, $section_remplacement, $corps) {
238
		
262
				
239
		//TODO: insérer un espace ou un saut de ligne à la fin du texte si celui-ci n'en contient pas 
263
		$section_remplacement = "\n".$section_remplacement."\n";
-
 
264
		$section_page_originale = $this->getSectionParTitre($corps, $titre_section, true);
-
 
265
		$infos_section = $this->getInformationsPositionSection($titre_section, $corps);
Line 240... Line 266...
240
		// à la fin, ceci pour éviter que le formatage saute lors de l'édition du wiki
266
		$nb_caracteres_a_remplacer = mb_strlen($section_page_originale) - $infos_section['longueur_titre'];
241
		$section_page_originale = $this->decouperPageSection($corps, $titre_ou_numero_section);
267
		
Line 242... Line 268...
242
		$contenu = str_replace($section_page_originale, $section_remplacement, $corps);
268
		$nouveau_contenu = substr_replace($corps, $section_remplacement, $infos_section['debut'], $nb_caracteres_a_remplacer);
Line 243... Line 269...
243
			
269
			
Line 252... Line 278...
252
		return $ecriture;
278
		return $ecriture;
253
	}
279
	}
Line 254... Line 280...
254
	
280
	
255
	private function analyserParametresEcriture($parametres) {
281
	private function analyserParametresEcriture($parametres) {
256
		$this->pageNom = $parametres['pageTag'];
282
		$this->pageNom = $parametres['pageTag'];
257
		$this->section = isset($parametres['pageSection']) ? $parametres['pageSection'] : null;
283
		$this->section = isset($parametres['pageSectionTitre']) ? $parametres['pageSectionTitre'] : null;
Line 258... Line 284...
258
	}
284
	}
Line 259... Line 285...
259
	
285
	
Line 269... Line 295...
269
		if(!isset($parametres['pageTag']) || trim($parametres['pageTag']) == '') {
295
		if(!isset($parametres['pageTag']) || trim($parametres['pageTag']) == '') {
270
			$message = "Le paramètre pageTag est obligatoire";
296
			$message = "Le paramètre pageTag est obligatoire";
271
			$erreurs[] = $message;
297
			$erreurs[] = $message;
272
		}
298
		}
Line -... Line 299...
-
 
299
		
-
 
300
		if(isset($parametres['pageSectionTitre']) && $parametres['pageSectionTitre'] == '') {
-
 
301
			$message = "Le paramètre pageSectionTitre ne doit pas être vide s'il est présent";
-
 
302
			$erreurs[] = $message;
-
 
303
		}
273
		
304
		
274
		if (count($erreurs) > 0) {
305
		if (count($erreurs) > 0) {
275
			$message = implode('<br />', $erreurs);
306
			$message = implode('<br />', $erreurs);
276
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
307
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
277
			throw new Exception($message, $code);
308
			throw new Exception($message, $code);