PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 07-04-2010 11:58:44

seds
Membre
Inscription : 06-04-2010
Messages : 4

Redirection après validation de message forum - spip2

quelqu'un peut-il m'aider?

je suis en train de créer en local un nouveau squelette

j'ai regroupé sur une même page tous les messages laissés sur les différents articles, ne voulant pas que les messages apparaissent sur leurs articles respectives.

j'ai nommé cette page "Wall", en bref le principe est de faire un commentaire via un article, qui sera édité sur le mur. Sur ce mur ou "Wall", qui est en réalité une brève (=1), on peut également faire un commentaire libre, càd issu de cette brève.

Lorsqu'on valide définitivement le message on retourne sur l'article auquel il est associé, lorsque ce message est posté soit à partir de l'article en question, soit à partir du "Wall" en répondant à un message précédent, celui-ci ayant été alors posté à partir d'un article.

j'ai vu que forum.php mémorise  l'URL de retour pour y revenir après, seulement je ne sais pas encore lire et modifier les scripts php.
l'action à entreprendre avec la validation du message est une redirection, ou retour, vers la page "Wall" ou brève, et non aux articles commentés!


voici les lignes de codes à modifier sur ..formulaire/forum.php, du moins je suppose:


    // au premier appel (pas de Post-var nommee "retour_forum")
    // memoriser eventuellement l'URL de retour pour y revenir apres
    // envoi du message ; aux appels suivants, reconduire la valeur.
    // Initialiser aussi l'auteur
    if ($retour_forum = rawurldecode(_request('retour')))
        $retour_forum =  str_replace('&var_mode=recalcul','',$retour_forum);
    else {
        // par defaut, on veut prendre url_forum(), mais elle ne sera connue
        // qu'en sortie, on inscrit donc une valeur absurde ("!")
        $retour_forum = "!";
        // sauf si on a passe un parametre en argument (exemple : {#SELF})
        if ($url_param_retour)
            $retour_forum = str_replace('&', '&', $url_param_retour);
        $retour_forum = rawurlencode($retour_forum);
    }
    if (_request('retour_forum')){
        $arg = forum_fichier_tmp(join('', $ids));
       
        $securiser_action = charger_fonction('securiser_action', 'inc');
        // on sait que cette fonction est dans le fichier associe
        $hash = calculer_action_auteur("ajout_forum-$arg");
    }


merci wink

Hors ligne

#2 08-04-2010 13:11:37

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Redirection après validation de message forum - spip2

salut,

en gros il te faut utiliser la fonction header, pour ce qui est de la page précédent je sais pas, je pense que poser la question sur un forum spip serais plus indiqué smile

Pour le reste je sais pas trop ta question est plutot flou wink

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#3 08-04-2010 19:53:04

seds
Membre
Inscription : 06-04-2010
Messages : 4

Re : Redirection après validation de message forum - spip2

j'ai posé la question sur forum spip, mais pas de réponse encore..

pour le header, on m'a dit cela sur un autre forum, mais j'ai pas compris les instructions à suivre.. n'entendant pas 99% du langage php/javascript
je connais <head></head> mais le header??... c'est la loose quoi.

bn pour éclaircir ma question:
l'url de ma page retour espérée est (en local):  http://127.0.0.1/BOS2.0.2/spip.php?breve1


- cette brève étant en html, renvoie ainsi

[<p class="repondre"><a href="(#PARAMETRES_FORUM|url_reponse_forum)" rel="noindex nofollow">Send a message on the wall</a></p>]
<a href="#forum" name="forum" id="forum"></a>

au fichier forum.html à la racine du squelette, où se trouvent les diverses boucles qui interviennent dans la page.

- cette page forum.html utilise un formulaire  càd #FORMULAIRE_FORUM, dans un dossier "formulaire" dans mon squel,  lui même nommé aussi forum.html
la validation du message, donc le retour à rediriger, se fait après et dans la prévisualisation ainsi:

[(#REM)
Bloc de previsualisation du forum envoye

Si on valide la previsu, on n'envoie pas en ajax car, si le post reussit
il faudra certainement redessiner toute la page pour afficher le nouveau
forum
][<form action="#ENV{action}#formulaire_forum" method="post" class="noajax">
<div>
[(#ACTION_FORMULAIRE{#ENV{action}})]
<input type='hidden' name='titre' value="#ENV{titre}" />
<input type='hidden' name='texte' value="#ENV{texte}" />
<input type='hidden' name='url_site' value="#ENV{url_site}" />
<input type='hidden' name='nom_site' value="#ENV{nom_site}" />
[<input type="hidden" name="id_forum" value="(#ENV*{id_forum})" />]
[(#INCLURE{fond=formulaires/inc-forum_ajouter_mot}{ajouter_mot})]
(#ENV*{erreurs}|table_valeur{previsu})
</div>
</form>]

<form action="#ENV{action}#formulaire_forum" method="post" enctype='multipart/form-data'><div>
[(#ACTION_FORMULAIRE{#ENV{action}})]
[<input type="hidden" name="id_forum" value="(#ENV*{id_forum})" />]
[<fieldset>
<legend><:bouton_radio_modere_priori:></legend>
<p class="explication">(#ENV{modere})<:forum_info_modere:></p>
</fieldset>]

[(#ENV**{afficher_texte}|choixsiegal{'non', ' ',''})
[<input type="hidden" name="titre" value="(#ENV{titre})" />]
<p class="spip_bouton"><input type="submit" class="submit" value="<:forum_valider:>" /></p>]

[(#ENV**{afficher_texte}|choixsiegal{'non', '',' '})
<fieldset>

bon là dedans ya aussi l'option modération... bref

ensuite j'ai le forum.php

<?php
/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2009                                                *
 *  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.   *
\***************************************************************************/

function formulaires_forum_charger_dist(
$titre, $table, $type, $script,
$id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic,
$ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour) {
    // exiger l'authentification des posteurs pour les forums sur abo
    if ($type == "abo") {
        if (!$GLOBALS["visiteur_session"]['statut']) {
            return array(
                'action' => '', #ne sert pas dans ce cas, on la vide pour mutualiser le cache
               'editable'=>false,
                'login_forum_abo'=>' ',
                'inscription' => generer_url_public('identifiants', 'lang='.$GLOBALS['spip_lang']),
                'oubli' => generer_url_public('spip_pass','lang='.$GLOBALS['spip_lang'],true),
                );
        }
    }
    // Tableau des valeurs servant au calcul d'une signature de securite.
    // Elles seront placees en Input Hidden pour que inc/forum_insert
    // recalcule la meme chose et verifie l'identite des resultats.
    // Donc ne pas changer la valeur de ce tableau entre le calcul de
    // la signature et la fabrication des Hidden
    // Faire attention aussi a 0 != ''

    // id_rubrique est parfois passee pour les articles, on n'en veut pas
    $ids = array();
    if ($id_rubrique > 0 AND ($id_article OR $id_breve OR $id_syndic))
        $id_rubrique = 0;
    foreach (array('id_article', 'id_breve', 'id_forum', 'id_rubrique', 'id_syndic') as $o) {
        $ids[$o] = ($x = intval($$o)) ? $x : '';
    }
    // ne pas mettre '', sinon le squelette n'affichera rien.
    $previsu = ' ';
    // au premier appel (pas de Post-var nommee "retour_forum")
    // memoriser eventuellement l'URL de retour pour y revenir apres
    // envoi du message ; aux appels suivants, reconduire la valeur.
    // Initialiser aussi l'auteur
    if ($retour_forum = rawurldecode(_request('retour')))
        $retour_forum =  str_replace('&var_mode=recalcul','',$retour_forum);
    else {
        // par defaut, on veut prendre url_forum(), mais elle ne sera connue
        // qu'en sortie, on inscrit donc une valeur absurde ("!")
        $retour_forum = "!";
        // sauf si on a passe un parametre en argument (exemple : {#SELF})
        if ($url_param_retour)
            $retour_forum = str_replace('&', '&', $url_param_retour);
        $retour_forum = rawurlencode($retour_forum);
    }
    if (_request('retour_forum')){
        $arg = forum_fichier_tmp(join('', $ids));
        $securiser_action = charger_fonction('securiser_action', 'inc');
        // on sait que cette fonction est dans le fichier associe
        $hash = calculer_action_auteur("ajout_forum-$arg");
    }
    // pour les hidden
    $script_hidden = "";
    foreach ($ids as $id => $v)
        $script_hidden .= "<input type='hidden' name='$id' value='$v' />";
    $script_hidden .= "<input type='hidden' name='arg' value='$arg' />";
    $script_hidden .= "<input type='hidden' name='hash' value='$hash' />";
    $script_hidden .= "<input type='hidden' name='verif_$hash' value='ok' />";
    $script_hidden .= "<input type='hidden' name='afficher_texte' value='$afficher_texte' />";
    $script_hidden .= "<input type='hidden' name='retour_forum' value='$retour_forum' />";
    // l'ajout de documents est-il autorise ?
    // cf. verifier.php
    if ($formats = forum_documents_acceptes()) {
        include_spip('inc/securiser_action');
        $cle_ajouter_document = calculer_cle_action('ajouter-document-'.join('-',array_map('intval',$ids)));
    }
    return array(
        'modere' => (($type != 'pri') ? '' : ' '),
        'nom_site' => '',
        'table' => $table,
        'texte' => '',
        'config' => array('afficher_barre' => ($GLOBALS['meta']['forums_afficher_barre']!='non'?' ':'')),
        'titre' => str_replace('~', ' ', extraire_multi($titre)),
        'action' => $script, # ce sur quoi on fait le action='...'
       '_hidden' => $script_hidden, # pour les variables hidden
       'url_site' => "http://",
        'cle_ajouter_document' => $cle_ajouter_document,
        'formats_documents_forum' => $formats,
        'ajouter_document' => $_FILES['ajouter_document']['name'],
        'nobot' => _request('nobot'),
        'ajouter_groupe' => $ajouter_groupe,
        'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
        'id_forum' => $id_forum, // passer id_forum au formulaire pour lui permettre d'afficher a quoi l'internaute repond
        '_sign'=>implode('_',$ids)
    );
}
// Une securite qui nous protege contre :
// - les doubles validations de forums (derapages humains ou des brouteurs)
// - les abus visant a mettre des forums malgre nous sur un article (??)
// On installe un fichier temporaire dans _DIR_TMP (et pas _DIR_CACHE
// afin de ne pas bugguer quand on vide le cache)
// Le lock est leve au moment de l'insertion en base (inc-messforum)
// Ce systeme n'est pas fonctionnel pour les forums sans previsu (notamment
// si $afficher_texte = 'non')
// [url]http://doc.spip.org/@forum_fichier_tmp[/url]
function forum_fichier_tmp($arg)
{
# astuce : mt_rand pour autoriser les hits simultanes
   while (($alea = time() + @mt_rand()) + intval($arg)
           AND @file_exists($f = _DIR_TMP."forum_$alea.lck"))
      {};
    spip_touch ($f);
# et maintenant on purge les locks de forums ouverts depuis > 4 h
   if ($dh = @opendir(_DIR_TMP))
        while (($file = @readdir($dh)) !== false)
            if (preg_match('/^forum_([0-9]+)\.lck$/', $file)
            AND (time()-@filemtime(_DIR_TMP.$file) > 4*3600))
                spip_unlink(_DIR_TMP.$file);
    return $alea;
}
function formulaires_forum_verifier_dist(
    $titre, $table, $type, $script,
    $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic,
    $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
{
    include_spip('inc/acces');
    include_spip('inc/texte');
    include_spip('inc/forum');
    include_spip('inc/session');
    include_spip('base/abstract_sql');
    $erreurs = array();
    // desactiver id_rubrique si un id_article ou autre existe dans le contexte
    if ($id_article OR $id_breve OR $id_forum OR $id_syndic)
        $id_rubrique = 0;
    // stocker un eventuel document dans un espace temporaire
    // portant la cle du formulaire ; et ses metadonnees avec
    if (!isset($GLOBALS['visiteur_session']['tmp_forum_document']))
        session_set('tmp_forum_document',
        sous_repertoire(_DIR_TMP,'documents_forum').md5(uniqid(rand())));
    $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'];
    $doc = &$_FILES['ajouter_document'];
    if (isset($_FILES['ajouter_document'])
    AND $_FILES['ajouter_document']['tmp_name']) {
        // securite :
        // verifier si on possede la cle (ie on est autorise a poster)
        // (sinon tant pis) ; cf. charger.php pour la definition de la cle
        if (_request('cle_ajouter_document') != calculer_cle_action($a = "ajouter-document-$id_article-$id_breve-$id_forum-$id_rubrique-$id_syndic")) {
            $erreurs['document_forum'] = _T('public:documents_interdits_forum')
                . "ajouter-document-$id_article-$id_breve-$id_forum-$id_rubrique-$id_syndic"
                .", "
                ._request('cle_ajouter_document')
            ;
            unset($_FILES['ajouter_document']);
        } else {
            include_spip('inc/ajouter_documents');
            list($extension,$doc['name']) = fixer_extension_document($doc);
            $acceptes = forum_documents_acceptes();
            if (!in_array($extension, $acceptes)) {
                # normalement on n'arrive pas ici : pas d'upload si aucun format
               if (!$formats = join(', ',$acceptes))
                    $formats = '-'; //_L('aucun');
                $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => $formats));
            }
            else {
                include_spip('inc/getdocument');
                if (!deplacer_fichier_upload($doc['tmp_name'], $tmp.'.bin'))
                    $erreurs['document_forum'] = _T('copie_document_impossible');
#        else if (...)
#        verifier le type_document autorise
#        retailler eventuellement les photos
           }
            // si ok on stocke les meta donnees, sinon on efface
            if (isset($erreurs['document_forum'])) {
                spip_unlink($tmp.'.bin');
                unset ($_FILES['ajouter_document']);
            } else {
                $doc['tmp_name'] = $tmp.'.bin';
                ecrire_fichier($tmp.'.txt', serialize($doc));
            }
        }
    }
    // restaurer le document uploade au tour precedent
    else if (file_exists($tmp.'.bin')) {
        if (_request('supprimer_document_ajoute')) {
            spip_unlink($tmp.'.bin');
            spip_unlink($tmp.'.txt');
        } else if (lire_fichier($tmp.'.txt', $meta))
            $doc = @unserialize($meta);
    }
    if (strlen($texte = _request('texte')) < 10
    AND !$ajouter_mot AND $GLOBALS['meta']['forums_texte'] == 'oui')
        $erreurs['texte'] = _T('forum_attention_dix_caracteres');
    else if (defined('_FORUM_LONGUEUR_MAXI')
    AND _FORUM_LONGUEUR_MAXI > 0
    AND strlen($texte) > _FORUM_LONGUEUR_MAXI)
        $erreurs['texte'] = _T('forum_attention_trop_caracteres',
            array(
                'compte' => strlen($texte),
                'max' => _FORUM_LONGUEUR_MAXI
            ));
    if (strlen($titre=_request('titre')) < 3
    AND $GLOBALS['meta']['forums_titre'] == 'oui')
        $erreurs['titre'] = _T('forum_attention_trois_caracteres');

    if (!count($erreurs) AND !_request('confirmer_previsu_forum')){
        if ($afficher_texte != 'non') {
            $previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'), $doc);
            $erreurs['previsu'] = $previsu;
        }
    }
    return $erreurs;
}
function forum_documents_acceptes()
{
    $formats = trim($GLOBALS['meta']['formats_documents_forum']);
    if (!$formats) return array();
    if ($formats !== '*')
        $formats = array_filter(preg_split(',[^a-zA-Z0-9/+_],', $formats));
    else {
        include_spip('base/typedoc');
        $formats =  array_keys($GLOBALS['tables_mime']);
    }
    sort($formats);
    return $formats;
}
// [url]http://doc.spip.org/@inclure_previsu[/url]
function inclure_previsu($texte,$titre, $url_site, $nom_site, $ajouter_mot, $doc)
{
    $bouton = _T('forum_message_definitif');
    include_spip('public/assembler');
    // supprimer les <form> de la previsualisation
    // (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
    return preg_replace("@<(/?)form\b@ism",
                '<\1div',
        inclure_balise_dynamique(array('formulaires/inc-forum_previsu',
              0,
              array(
            'titre' => safehtml(typo($titre)),
            'texte' => safehtml(propre($texte)),
            'url_site' => vider_url($url_site),
            'nom_site' => safehtml(typo($nom_site)),
            'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
            'ajouter_document' => $doc,
            'erreur' => $erreur,
            'bouton' => $bouton
            )
                           ),
                     false));
}
function formulaires_forum_traiter_dist() {
    $forum_insert = charger_fonction('forum_insert', 'inc');
    list($redirect,$id_forum) = $forum_insert();
    return array('redirect'=>$redirect,'id_forum'=>$id_forum);
}
?>


bon j'ai coupé les lignes vides, ce message étant déjà pas mal long.


toujours pas clair?? heu.. bah je voudrais juste que mes validations reviennent sur une seule et même page..

c'est possible pour quelqu'un qui pige rien au php, et qui n'a pas le temps en ce moment d'ouvrir le pavé "php&mysql pour les nuls" , qui m'attends là sur mon bureau?

méga loose...

Dernière modification par seds (08-04-2010 19:56:26)

Hors ligne

#4 09-04-2010 15:10:23

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Redirection après validation de message forum - spip2

pour la redirection basique, tu peux opter, à la fin de ta validation, pour un petit bout tel que

echo '<script>document.location="ton_url"</script>';

MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#5 10-04-2010 08:30:40

seds
Membre
Inscription : 06-04-2010
Messages : 4

Re : Redirection après validation de message forum - spip2

merci alnoss, mais ça marche pas
j'ai collé ta ligne dans forum.php, et quand on clique sur "envoyer un message", que ce soit d'un article du site, ou du mur (mon url de retour), on revient sur l'url retour, on tourne en rond sans passer par le formulaire où l'on passe le message.

j'ai essayé ça aussi
header("location:mon_url")

mais je tourne en rond

on m'a dit par ailleurs de mettre
<input type="hidden" name="addr" value="<?php echo htmlspecialchars($contentURL); ?>"/>
mais je n'ai pas trouvé où je devais le mettre.
qu'en penses-tu?


une chose est sure c'est que je ne fais pas les bonnes manipulations

Dernière modification par seds (10-04-2010 08:45:29)

Hors ligne

#6 10-04-2010 09:03:48

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Redirection après validation de message forum - spip2

C'est un champs input donc c'est dans le formulaire de rédaction de message à tout casser. big_smile

Hors ligne

#7 10-04-2010 11:29:28

seds
Membre
Inscription : 06-04-2010
Messages : 4

Re : Redirection après validation de message forum - spip2

c'est déprimant

soit je tourne en rond, soit j'ai ça:
Parse error: syntax error, unexpected T_STRING in....

je me goure qlqpart, quand je touche à forum.php c'est la cata, quand je touche à forum.html rien ne se passe

les totals-néophytes comme moi ne peuvent pas faire une toute petite, mais vraiment toute petite modif sur une action qui parait simple aux experts, mêmes aux débutants, sans se prendre devoir apprendre par coeur le tuto php ????

(je rappelle que sur mon bureau j'ai "php&mysql pour les nuls" mais faut que je finissent "flash8" qui me dit de lire avant un "actionscript".. bon je bidouille plutôt bien le html, expert en css -fastoche lol-, et commence à bien me la péter sur les bouches spip, mais là, pour ce retour sur une pauvre page, c'est vraiment la dérouillée!)

Dernière modification par seds (10-04-2010 11:30:05)

Hors ligne

#8 30-07-2014 07:48:28

Mariandupont
Membre
Inscription : 30-07-2014
Messages : 1

Re : Redirection après validation de message forum - spip2

Je souhaiterais faire la même chose autant que toi. J'ai participé à plusieurs forums, mais je n'arrive pas à trouver une réponse favorable jusqu'à nos jours. Je viens d'envoyer à un ami un fax par email sur ce. Il m'a promis de trouver au plus vite une réponse qui résout mon problème.

Hors ligne

#9 30-07-2014 17:29:58

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Redirection après validation de message forum - spip2

Saluton,

Pourquoi nous re-sortir ce vieux post de 2010 ?

Sur ce comparatif : http://socialcompare.com/fr/comparison/ … ent-system, je compte une soixantaine de CMS écrit en PHP.

Et, j'imagine, qu'il n'y a pas une once de standardisation entre eux.

J'en conclus que celui qui choisit ce genre de produit doit en assumer les conséquences.

Le temps qu'il croyait gagner avec du prêt-à-porter il va devoir l'investir pour "customiser" le bouzin.

Je hais les CMS, ces usines à gaz, ces canons pour écraser des mouches.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#10 06-08-2014 02:22:12

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Redirection après validation de message forum - spip2

Bonjour,

Il me semble que votre demande relève d'un développement spécifique plutôt qu'une modification de code "anodine", éventuellement de type "truc" ou "astuce".
Cette "huile de coude" qui risque de vous coûter une somme non négligeable, va de plus, devoir être maintenue à chaque mise à jour officielle de votre spip.
Je vous suggère donc d'y réfléchir avant de continuer à y investir dedans.

Bonne continuation smile

Jc.

Dernière modification par Jc (06-08-2014 02:22:29)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums