[SPIP] +version 3.0.7
[ptitvelo/web/www.git] / www / ecrire / public.php
diff --git a/www/ecrire/public.php b/www/ecrire/public.php
new file mode 100644 (file)
index 0000000..ba877d9
--- /dev/null
@@ -0,0 +1,188 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2010                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+// Distinguer une inclusion d'un appel initial
+// (cette distinction est obsolete a present, on la garde provisoirement
+// par souci de compatiilite).
+
+if (isset($GLOBALS['_INC_PUBLIC']) AND $GLOBALS['_INC_PUBLIC']) {
+
+       echo recuperer_fond($fond, $contexte_inclus, array(), _request('connect'));
+
+} else {
+
+       $GLOBALS['_INC_PUBLIC'] = 1;
+       define('_PIPELINE_SUFFIX',  test_espace_prive()?'_prive':'');
+
+       // Faut-il initialiser SPIP ? (oui dans le cas general)
+       if (!defined('_DIR_RESTREINT_ABS'))
+               if (defined('_DIR_RESTREINT')
+               AND @file_exists(_ROOT_RESTREINT . 'inc_version.php')) {
+                       include_once _ROOT_RESTREINT . 'inc_version.php';
+               }
+               else
+                       die('inc_version absent ?');
+
+
+       // $fond defini dans le fichier d'appel ?
+
+       else if (isset($fond) AND !_request('fond')) { }
+
+       // fond demande dans l'url par page=xxxx ?
+       else if (isset($_GET[_SPIP_PAGE])) {
+               $fond = (string)$_GET[_SPIP_PAGE];
+
+               // Securite
+               if (strstr($fond, '/')
+                       AND !(
+                               isset($GLOBALS['visiteur_session']) // pour eviter d'evaluer la suite pour les anonymes
+                               AND include_spip('inc/autoriser')
+                               AND autoriser('webmestre'))) {
+                       include_spip('inc/minipres');
+                       echo minipres();
+                       exit;
+               }
+               // l'argument Page a priorite sur l'argument action
+               // le cas se presente a cause des RewriteRule d'Apache
+               // qui permettent d'ajouter un argument dans la QueryString
+               // mais pas d'en retirer un en conservant les autres.
+               if (isset($_GET['action']) AND $_GET['action'] === $fond)
+                       unset($_GET['action']);
+       # sinon, fond par defaut
+       } else {
+               // sinon fond par defaut (cf. assembler.php)
+               $fond = pipeline('detecter_fond_par_defaut','');
+       }
+
+       $tableau_des_temps = array();
+
+       // Particularites de certains squelettes
+       if ($fond == 'login')
+               $forcer_lang = true;
+
+       if (isset($forcer_lang) AND $forcer_lang AND ($forcer_lang!=='non')
+               AND !_request('action')
+               AND $_SERVER['REQUEST_METHOD'] != 'POST') {
+               include_spip('inc/lang');
+               verifier_lang_url();
+       }
+
+       $lang = !isset($_GET['lang']) ? '' : lang_select($_GET['lang']);
+
+       // Charger l'aiguilleur des traitements derogatoires
+       // (action en base SQL, formulaires CVT, AJax)
+       if (_request('action') OR _request('var_ajax') OR _request('formulaire_action')){
+               include_spip('public/aiguiller');
+               if (
+                       // cas des appels actions ?action=xxx
+                       traiter_appels_actions()
+               OR
+                       // cas des hits ajax sur les inclusions ajax
+                       traiter_appels_inclusions_ajax()
+                OR
+                       // cas des formulaires charger/verifier/traiter
+                       traiter_formulaires_dynamiques()){
+                       // lancer les taches sur affichage final, comme le cron
+                       // mais sans rien afficher
+                       $GLOBALS['html'] = false; // ne rien afficher
+                       pipeline('affichage_final'._PIPELINE_SUFFIX, '');
+                       exit; // le hit est fini !
+               }
+       }
+
+       // Il y a du texte a produire, charger le metteur en page
+       include_spip('public/assembler');
+       $page = assembler($fond, _request('connect'));
+
+       if (isset($page['status'])) {
+               include_spip('inc/headers');
+               http_status($page['status']);
+       }
+
+       // Content-Type ?
+       if (!isset($page['entetes']['Content-Type'])) {
+               $page['entetes']['Content-Type'] = 
+                       "text/html; charset=" . $GLOBALS['meta']['charset'];
+               $html = true;
+       } else {
+               $html = preg_match(',^\s*text/html,',$page['entetes']['Content-Type']);
+       }
+
+       // Tester si on est admin et il y a des choses supplementaires a dire
+       // type tableau pour y mettre des choses au besoin.
+       $debug = ((_request('var_mode') == 'debug') OR $tableau_des_temps) ? array(1) : array();
+
+       $affiche_boutons_admin = ($html AND (
+               (isset($_COOKIE['spip_admin']) AND (!isset($flag_preserver) OR !$flag_preserver))
+               OR $debug
+               OR (defined('_VAR_PREVIEW') AND _VAR_PREVIEW)
+       ));
+
+       if ($affiche_boutons_admin)
+               include_spip('balise/formulaire_admin');
+
+
+       // Execution de la page calculee
+
+       // traitements sur les entetes avant envoi
+       // peut servir pour le plugin de stats
+       $page['entetes'] = pipeline('affichage_entetes_final'._PIPELINE_SUFFIX, $page['entetes']);
+
+
+       // eval $page et affecte $res
+       include _ROOT_RESTREINT."public/evaluer_page.php";
+       envoyer_entetes($page['entetes']);
+       if ($res === false) {
+               $msg = array('zbug_erreur_execution_page');
+               erreur_squelette($msg);
+       }
+
+       //
+       // Envoyer le resultat apres post-traitements
+       //
+       // (c'est ici qu'on fait var_recherche, validation, boutons d'admin,
+       // cf. public/assembler.php)
+       echo pipeline('affichage_final'._PIPELINE_SUFFIX, $page['texte']);
+
+       if ($lang) lang_select();
+       // l'affichage de la page a pu lever des erreurs (inclusion manquante)
+       // il faut tester a nouveau
+       $debug = ((_request('var_mode') == 'debug') OR $tableau_des_temps) ? array(1) : array();
+
+       // Appel au debusqueur en cas d'erreurs ou de demande de trace
+       // at last
+       if ($debug) {
+               // en cas d'erreur, retester l'affichage
+               if ($html AND ($affiche_boutons_admin OR $debug)) {
+                       $var_mode_affiche = _request('var_mode_affiche');
+                       $GLOBALS['debug_objets'][$var_mode_affiche][$var_mode_objet . 'tout'] = ($var_mode_affiche== 'validation' ? $page['texte'] :"");
+                       echo erreur_squelette(false);
+               }
+       } else {
+
+               if (isset($GLOBALS['meta']['date_prochain_postdate'])
+               AND $GLOBALS['meta']['date_prochain_postdate'] <= time()) {
+                       include_spip('inc/rubriques');
+                       calculer_prochain_postdate(true);
+               }
+
+               // Effectuer une tache de fond ?
+               // si _DIRECT_CRON_FORCE est present, on force l'appel
+               if (defined('_DIRECT_CRON_FORCE'))
+                       cron();
+
+               // sauver le cache chemin si necessaire
+               save_path_cache();
+       }
+}
+
+?>