// initialiser a la langue par defaut include_spip('inc/lang'); utiliser_langue_visiteur(); if (_request('action') OR _request('var_ajax') OR _request('formulaire_action')){ // Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires 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()) exit; // le hit est fini ! } // // Gestion d'une page normale de l'espace prive // // Controle de la version, sauf si on est deja en train de s'en occuper if (!$reinstall=='oui' AND !_AJAX AND isset($GLOBALS['meta']['version_installee']) AND ($GLOBALS['spip_version_base'] != (str_replace(',','.',$GLOBALS['meta']['version_installee'])))) $exec = 'demande_mise_a_jour'; // Quand une action d'administration est en cours (meta "admin"),
} $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 (traiter_appels_actions() or traiter_appels_inclusions_ajax() or 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']);
/** * Calcule le contexte à envoyer dans le squelette d'un formulaire * * @param string $form * Nom du formulaire * @param array $args * Arguments envoyés à l'appel du formulaire * @return array * Contexte d'environnement à envoyer au squelette **/ function balise_FORMULAIRE__contexte($form, $args) { // tester si ce formulaire vient d'etre poste (memes arguments) // pour ne pas confondre 2 #FORMULAIRES_XX identiques sur une meme page // si poste, on recupere les erreurs $je_suis_poste = false; if ($post_form = _request('formulaire_action') and $post_form == $form and $p = _request('formulaire_action_args') and is_array($p = decoder_contexte_ajax($p, $post_form))) { // enlever le faux attribut de langue masque array_shift($p); if (formulaire__identifier($form, $args, $p)) { $je_suis_poste = true; } } $editable = true; $erreurs = $post = array(); if ($je_suis_poste) { $post = traiter_formulaires_dynamiques(true); $e = "erreurs_{$form}"; $erreurs = isset($post[$e]) ? $post[$e] : array(); $editable = "editable_{$form}"; $editable = !isset($post[$e]) || count($erreurs) || isset($post[$editable]) && $post[$editable]; } $valeurs = formulaire__charger($form, $args, $je_suis_poste); // si $valeurs n'est pas un tableau, le formulaire n'est pas applicable // C'est plus fort qu'editable qui est gere par le squelette // Idealement $valeur doit etre alors un message explicatif. if (!is_array($valeurs)) { return is_string($valeurs) ? $valeurs : ''; } // charger peut passer une action si le formulaire ne tourne pas sur self() // ou une action vide si elle ne sert pas $action = isset($valeurs['action']) ? $valeurs['action'] : self('&', true); // bug IEx : si action finit par / // IE croit que le <form ... action=../ > est autoferme if (substr($action, -1) == '/') { // on ajoute une ancre pour feinter IE, au pire ca tue l'ancre qui finit par un / $action .= '#'; } // recuperer la saisie en cours si erreurs // seulement si c'est ce formulaire qui est poste // ou si on le demande explicitement par le parametre _forcer_request = true $dispo = $je_suis_poste || isset($valeurs['_forcer_request']) && $valeurs['_forcer_request']; foreach (array_keys($valeurs) as $champ) { if ($champ[0] !== '_' and !in_array($champ, array('message_ok', 'message_erreur', 'editable'))) { if ($dispo and ($v = _request($champ)) !== NULL) { $valeurs[$champ] = $v; } // nettoyer l'url des champs qui vont etre saisis if ($action) { $action = parametre_url($action, $champ, ''); } // proteger les ' et les " dans les champs que l'on va injecter $valeurs[$champ] = protege_champ($valeurs[$champ]); } } if ($action) { // nettoyer l'url $action = parametre_url($action, 'formulaire_action', ''); $action = parametre_url($action, 'formulaire_action_args', ''); } if (isset($valeurs['_action'])) { $securiser_action = charger_fonction('securiser_action', 'inc'); $secu = $securiser_action(reset($valeurs['_action']), end($valeurs['_action']), '', -1); $valeurs['_hidden'] = (isset($valeurs['_hidden']) ? $valeurs['_hidden'] : '') . "<input type='hidden' name='arg' value='" . $secu['arg'] . "' />" . "<input type='hidden' name='hash' value='" . $secu['hash'] . "' />"; } // empiler la lang en tant que premier argument implicite du CVT // pour permettre de la restaurer au moment du Verifier et du Traiter array_unshift($args, $GLOBALS['spip_lang']); $valeurs['formulaire_args'] = encoder_contexte_ajax($args, $form); $valeurs['erreurs'] = $erreurs; $valeurs['action'] = $action; $valeurs['form'] = $form; if (!isset($valeurs['id'])) { $valeurs['id'] = 'new'; } // editable peut venir de charger() ou de traiter() sinon if (!isset($valeurs['editable'])) { $valeurs['editable'] = $editable; } // dans tous les cas, renvoyer un espace ou vide (et pas un booleen) $valeurs['editable'] = $valeurs['editable'] ? ' ' : ''; if ($je_suis_poste) { $valeurs['message_erreur'] = ""; if (isset($erreurs['message_erreur'])) { $valeurs['message_erreur'] = $erreurs['message_erreur']; } $valeurs['message_ok'] = ""; if (isset($post["message_ok_{$form}"])) { $valeurs['message_ok'] = $post["message_ok_{$form}"]; } elseif (isset($erreurs['message_ok'])) { $valeurs['message_ok'] = $erreurs["message_ok"]; } } return $valeurs; }