Forum

Créations de Modules [Tutoriel] Meilleur message sur le forum

Myster Membre non connecté

Booster Missile

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 1078

Le 26/05/2021 à 22h48

capture_87cce


Bonsoir,

Je vous propose un petit tutoriel qui permet d'ajouter une fonctionnalité "Meilleur message" dans le forum. L'auteur d'un sujet peut sélectionner des messages comme "meilleur message" donc ça peut être un message en particulier ou plusieurs qui ont résolu son problème par exemple, ça permet du coup de mettre en évidence des messages dans le sujet !

Rendez-vous dans l'administration de votre site, puis dans l'onglet outils, enfin sélectionner Requête SQL

Et mettez ceci

Code SQL :
 
ALTER TABLE `phpboost_forum_msg` ADD `selected` BOOLEAN NOT NULL DEFAULT FALSE AFTER `user_ip`;


Si vous avez un préfixe différent de phpboost alors mettez votre préfixe une fois fait, cliquer sur "Exécuter"


Rendez-vous dans forum/action.php puis en dessous de
Code PHP :
$page_get = (int)retrieve(GET, 'p', 1);


ajouter ceci:

Code PHP :
 
$selected = (string) retrieve(GET, 'selected', '');
 


Toujours dans action.php à la fin remplacer :
Code PHP :
 
else
    AppContext::get_response()->redirect('/forum/index.php');
require_once('../kernel/footer_no_display.php');
 


par

Code PHP :
 
 elseif (!empty($selected) && !empty($idm_get)) {
    if (!AppContext::get_current_user()->check_level(User::MEMBER_LEVEL)) { //Réservé aux membres.
        AppContext::get_response()->redirect(UserUrlBuilder::connect());
    }
    try {
        $message_selected = PersistenceContext::get_querier()->select_single_row(ForumSetup::$forum_message_table, array('*'), 'WHERE id=:id', array(
            'id' => $idm_get
        ));
    } catch (RowNotFoundException $e) {
        $error_controller = PHPBoostErrors::unexisting_element();
        DispatchManager::redirect($error);
    }
    try {
        $topic = PersistenceContext::get_querier()->select_single_row(PREFIX . 'forum_topics', array('user_id'), 'WHERE id=:id', array('id' => $message_selected['idtopic']));
    } catch (RowNotFoundException $e) {
        $error_controller = PHPBoostErrors::unexisting_element();
        DispatchManager::redirect($error_controller);
    }
    if ($topic['user_id'] == AppContext::get_current_user()->get_id() or (AppContext::get_current_user()->get_level() >= User::MODERATOR_LEVEL)) {
        if ($selected === "true") {
            PersistenceContext::get_querier()->update(ForumSetup::$forum_message_table, array(
                'selected' => 1,
            ), 'WHERE id=:id', array('id' => $idm_get));
            header('Location: ' . $_SERVER["HTTP_REFERER"]);
            exit();
        } elseif ($selected === "false") {
            PersistenceContext::get_querier()->update(ForumSetup::$forum_message_table, array(
                'selected' => 0,
            ), 'WHERE id=:id', array('id' => $idm_get));
            header('Location: ' . $_SERVER["HTTP_REFERER"]);
            exit();
        } else {
            $error_controller = PHPBoostErrors::unexisting_element();
            DispatchManager::redirect($error_controller);
        }
    } else {
        $error_controller = PHPBoostErrors::user_not_authorized();
        DispatchManager::redirect($error_controller);
    }
} else {
    AppContext::get_response()->redirect('/forum/index.php');
}
require_once('../kernel/footer_no_display.php');
 


Maintenant rendez-vous dans forum/topic.php et vers la ligne 199 environs

vous devez avoir quelque chose qui ressemble à ceci

Code SQL :
SELECT msg.id, msg.TIMESTAMP, msg.timestamp_edit, msg.user_id_edit, m.user_id, p.question, p.answers, p.voter_id, p.votes, p.TYPE, m.display_name AS login, m.level, m.groups, m.email, m.show_email, m.registration_date AS registered, ext_field.user_avatar, m.posted_msg, ext_field.user_sign, " . $extended_fields_to_recover_list . "m.warning_percentage, m.delay_readonly, m.delay_banned, m2.display_name AS login_edit, s.user_id AS CONNECT, tr.id AS trackid, tr.pm AS trackpm, tr.track AS track, tr.mail AS trackmail, msg.content


à côté de msg.contents, ajouter
Code SQL :
,msg.selected

(n'oubliez pas la virgule juste avant)

Toujours dans ce même fichier, en dessous de

Code PHP :
 
            'C_FORUM_MODERATOR'           => $moderator,
 


Ajouter ceci:

Code PHP :
 
            'C_IS_SELECTED'                  => $row['selected'] == 1,
        'C_AUTHORIZE_SELECTED' => $topic['user_id'] == AppContext::get_current_user()->get_id() or (AppContext::get_current_user()->get_level() >= User::MODERATOR_LEVEL),
            'U_FORUM_MSG_SET_SELECTED'            => url('.php?selected=true&idm=' . $row['id']),
            'U_FORUM_MSG_UNSET_SELECTED'            => url('.php?selected=false&idm=' . $row['id']),
 


et pour finir, allez dans forum/template/forum_topic.tpl ou bien template/votretheme/modules/forum/forum_topic.tpl

Puis remplacer

Code TPL :
<div class="content">


par

Code TPL :
            <div class="content" # IF msg.C_IS_SELECTED # style="background:#96ff0a57;" # END IF #> 


Et en dessous de

Code TPL :
                                    <a href="post{msg.U_FORUM_MSG_EDIT}" aria-label="{L_EDIT}"><i class="fa fa-edit" aria-hidden="true" title="{L_EDIT}"></i></a>
 


Ajouter ceci
Code TPL :
 
                                       # IF msg.C_AUTHORIZE_SELECTED #
                                            # IF msg.C_IS_SELECTED #
                                            <a href="action{msg.U_FORUM_MSG_UNSET_SELECTED}"><i class="fa fa-circle" aria-hidden="true" title="Ce n'est plus une meilleure réponse"></i></a>
                                            # ELSE #
                                            <a href="action{msg.U_FORUM_MSG_SET_SELECTED}"><i class="fa fa-check-circle" aria-hidden="true" title="Définir comme meilleure réponse"></i></a>
                                            # END IF #
                                        # END IF #
 
Edité par Myster Le 26/05/2021 à 23h07


;)
   
j1.seth Membre non connecté

Administrateur

Rang

Avatar

Chef de Projet Equipe Développement

Inscrit le : 01/09/2008 à 09h42

Messages: 2899

Le 28/05/2021 à 19h42
Bonjour Myster,

Très bonne initiative, je pense qu'on pourrait l'inclure nativement dans la 6.0 si ça te vas ?

j1.seth
Site web    
Myster Membre non connecté

Booster Missile

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 1078

Le 28/05/2021 à 21h18
Bonjour,

Y'a pas de soucis :)


;)
   
MickaelFR Membre non connecté

Booster Fusée

Rang

Avatar

Inscrit le : 20/01/2014 à 11h01

Messages: 1630

Le 04/12/2021 à 07h40
Pouce levé (oui le smiley n'existe pas) :D
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie
Annonces