[Dev] Mod mark unread new edits

Image Forum réservé aux Mod's en développement.
Verrouillé
     
Avatar du membre

Auteur du sujet
zach
Support phpBB Assistance
Support phpBB Assistance
Messages : 1313
Enregistré le : décembre 2010

[Dev] Mod mark unread new edits

Message par zach » lun. 12 mars 2012 13:11

Bon voila la version standard du mod, "Mod mark unread new edits" (permet de passer en "non lu" les nouveaux messages édites depuis la dernière lecture du sujet)

Pour chaque message édité après dernière lecture, le message passe en "non lu" (dans les icônes de forums, icônes de topics, recherche des "non lus", et recherches générales) il n'y a pas de changement sur l'index des forums pour ne pas alourdir, vu que le principal intérêt c'est surtout dans la recherche des messages "non lus" (notamment ds un but de modération en cas d'éditions abusives)
Nb: ce mod a été fait suite a une discussion sur ce mod http://www.phpbb.com/customise/db/mod/m ... _as_unread qui a montré ses limites car contrairement à son titre il ne passe pas en "non lus" les messages édités

En effet dans ce mod le sujet passe en tant que "non lu" que lorsque c'est le dernier message du sujet qui est édité. Si on édite un des messages précédents le sujet ne sera pas passé en tant que "non lu". Et il le passe en "non lu" en simplifiant beaucoup, car il efface la date du post initial, par la date d'édition, ce qui en fait efface des informations utiles.
Donc ce mod en dev, vas s'attaquer à toutes les éditions de tous les messages (pas juste du dernier) donc au cœur de la vraie difficulté (c'est pour cela qu'aucun mod de ce type n'existe actuellement)


1) il faut créer un champs "topic_last_edit_time" (meme forme que "topic_last_post_time") dans la table "topics" de la base de donnée :

SQL

Code : Tout sélectionner

ALTER TABLE phpbb_topics ADD topic_last_edit_time int(11) DEFAULT '0' NOT NULL;
nb: le mod utilisera utilisera aussi le champs "post_edit_time" présent d'origine dans la table "posts"

2) a chaque édition d'un message, nous enregistrons la date d'édition (dans "topic_last_edit_time" et "post_edit_time") :

dans includes/functions_posting.php :

trouver :

Code : Tout sélectionner

	else if ($mode == 'edit')
	{
		$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit'));
	}

	// First of all make sure the subject and topic title are having the correct length.	
remplacer par :

Code : Tout sélectionner

	else if ($mode == 'edit')
	{
 // Start Mod mark unread new edits
    $sql_topic_last_edit_time = 'UPDATE ' . TOPICS_TABLE . '
    SET topic_last_edit_time = ' . $current_time . '
    WHERE topic_id = ' . $data['topic_id'];
    $db->sql_query($sql_topic_last_edit_time);  
    
    $sql_post_last_edit_time = 'UPDATE ' . POSTS_TABLE . '
    SET post_edit_time = ' . $current_time . '
    WHERE post_id = ' . $data['post_id'];
    $db->sql_query($sql_post_last_edit_time);  
    // End  Mod mark unread new edits 	
		$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit'));
	}

	// First of all make sure the subject and topic title are having the correct length.
3) dans la lecture d'un post, nous marquons "non lus" tous les messages édités ("post_edit_time") après la dernière visite du post :

dans viewtopic.php :

trouver :

Code : Tout sélectionner

$post_unread = (isset($topic_tracking_info[$topic_id]) && $row['post_time'] > $topic_tracking_info[$topic_id]) ? true : false;
remplacer par :

Code : Tout sélectionner

	// Start Mod mark unread new edits (voir le logo des messages en non lu lorsque les editions sont postérieures au dernier accès sujet)
  // ligne originale remplacée : $post_unread = (isset($topic_tracking_info[$topic_id]) && $row['post_time'] > $topic_tracking_info[$topic_id]) ? true : false;
  if (isset($topic_tracking_info[$topic_id]) && $row['post_edit_time'] > $topic_tracking_info[$topic_id])
	{
	$post_unread = true;
	}
	else
	{
  $post_unread = (isset($topic_tracking_info[$topic_id]) && $row['post_time'] > $topic_tracking_info[$topic_id]) ? true : false;
  }
  // End  Mod mark unread new edits
4) dans la lecture de la liste des topics de chaque forum, nous marquons "non lus" tous les messages édités ("topic_last_edit_time") après la dernière visite du post :

dans viewforum.php :

trouver :

Code : Tout sélectionner

$unread_topic = (isset($topic_tracking_info[$topic_id]) && $row['topic_last_post_time'] > $topic_tracking_info[$topic_id]) ? true : false;
remplacer par :

Code : Tout sélectionner

    // Start Mod mark unread new edits (voir l'icone de topic en non lu lorsque les editions sont postérieures au dernier accès sujet)
    // ligne originale remplacée : $unread_topic = (isset($topic_tracking_info[$topic_id]) && $row['topic_last_post_time'] > $topic_tracking_info[$topic_id]) ? true : false;
    if (isset($topic_tracking_info[$topic_id]) && $row['topic_last_edit_time'] > $topic_tracking_info[$topic_id])
		{
		$unread_topic = true;
		}
		else
		{
		$unread_topic = (isset($topic_tracking_info[$topic_id]) && $row['topic_last_post_time'] > $topic_tracking_info[$topic_id]) ? true : false;
    }
    // End  Mod mark unread new edits
5) Afficher les éditions non lues aussi dans les listes de recherches (messages récents, etc ...) :

dans search.php :

chercher :

Code : Tout sélectionner

$unread_topic = (isset($topic_tracking_info[$forum_id][$row['topic_id']]) && $row['topic_last_post_time'] > $topic_tracking_info[$forum_id][$row['topic_id']]) ? true : false;
remplacer par :

Code : Tout sélectionner

      // Start Mod mark unread new edits (voir le logo des messages en non lu lorsque dans les recherches)
      // ligne originale remplacée : $unread_topic = (isset($topic_tracking_info[$forum_id][$row['topic_id']]) && $row['topic_last_post_time'] > $topic_tracking_info[$forum_id][$row['topic_id']]) ? true : false;
      if (isset($topic_tracking_info[$forum_id][$row['topic_id']]) && $row['topic_last_edit_time'] > $topic_tracking_info[$forum_id][$row['topic_id']])
      {
      $unread_topic = true;
      }
      else
      {
      $unread_topic = (isset($topic_tracking_info[$forum_id][$row['topic_id']]) && $row['topic_last_post_time'] > $topic_tracking_info[$forum_id][$row['topic_id']]) ? true : false;
      }
      // End  Mod mark unread new edits
6) Afficher les éditions non lues aussi dans la liste des messages "non lus" (logique) :

dans includes/functions.php :

chercher :

Code : Tout sélectionner

'SELECT'		=> 't.topic_id, t.topic_last_post_time, tt.mark_time as topic_mark_time, ft.mark_time as forum_mark_time',
remplacer par :

Code : Tout sélectionner

'SELECT'		=> 't.topic_id, t.topic_last_edit_time, t.topic_last_post_time, tt.mark_time as topic_mark_time, ft.mark_time as forum_mark_time',
chercher :

Code : Tout sélectionner

(tt.mark_time IS NOT NULL AND t.topic_last_post_time > tt.mark_time) OR
remplacer par :

Code : Tout sélectionner

(tt.mark_time IS NOT NULL AND t.topic_last_edit_time > tt.mark_time) OR
(tt.mark_time IS NOT NULL AND t.topic_last_post_time > tt.mark_time) OR
7) une fois les éditions lues, nous mettons à jour la date de dernière visite du sujet, celle-ci étant + récente que celles des messages édité, cela aura pour effet d’instantanément marquer le sujet lu à l'ouverture du sujet, c'est pour cela que nous préférons mettre à jour la date de dernière visite, qu'en passant par le lien pour voir les sujets non lu (à voir d'autres options ensuite) :

dans viewtopic.php :

trouver :

Code : Tout sélectionner

	if ($view == 'unread')
	{
		// Get topic tracking info
		$topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_id);
		
		$topic_last_read = (isset($topic_tracking_info[$topic_id])) ? $topic_tracking_info[$topic_id] : 0;

		$sql = 'SELECT post_id, topic_id, forum_id
			FROM ' . POSTS_TABLE . "
			WHERE topic_id = $topic_id
				" . (($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND post_approved = 1') . "
				AND post_time > $topic_last_read
				AND forum_id = $forum_id
			ORDER BY post_time ASC";
		$result = $db->sql_query_limit($sql, 1);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);
ajouter après :

Code : Tout sélectionner

// Start Mod mark unread new edits (marquer les messages lus à la visite d'une edition non lue)

if ($config['load_db_lastread'] && $user->data['is_registered'])
		{
		$sql = 'UPDATE ' . TOPICS_TRACK_TABLE . "
		SET mark_time = '"  . time() . "'
		WHERE user_id = '" . $user->data['user_id'] . "'
    AND topic_id = '" . $topic_id ."'";
	$db->sql_query($sql);
}

// End  Mod mark unread new edits// Start Mod mark unread new edits (marquer les messages lus à la visite d'une edition non lue)
8) Option pour afficher les dates des editions non lues pour chaque post édité après derniere visite (à coté de la date initiale dans la lecture des posts) :

dans viewtopic.php :

trouver :

Code : Tout sélectionner

'S_UNREAD_POST'		=> $row['post_unread'] ? true : false,
ajouter après :

Code : Tout sélectionner

// Start Mod mark unread new edits (affichage date d'édition)
'S_EDIT_UNREAD_POST'		=> $user->format_date($row['post_edit_time']),
// End  Mod mark unread new edits
dans styles/prosilver/template/viewtopic_body.html :

trouver :

Code : Tout sélectionner

<p class="author"><!-- IF S_IS_BOT -->{postrow.MINI_POST_IMG}<!-- ELSE --><a href="{postrow.U_MINI_POST}">{postrow.MINI_POST_IMG}</a><!-- ENDIF -->{L_POST_BY_AUTHOR} <strong>{postrow.POST_AUTHOR_FULL}</strong> &raquo; {postrow.POST_DATE}</p>
remplacer par :

Code : Tout sélectionner

<p class="author"><!-- IF S_IS_BOT -->{postrow.MINI_POST_IMG}<!-- ELSE --><a href="{postrow.U_MINI_POST}">{postrow.MINI_POST_IMG}</a><!-- ENDIF -->{L_POST_BY_AUTHOR} <strong>{postrow.POST_AUTHOR_FULL}</strong> &raquo; {postrow.POST_DATE} <!-- IF postrow.S_FIRST_UNREAD and U_MCP --><i>(édité le {postrow.S_EDIT_UNREAD_POST})</i><!-- ENDIF --></p>
Sinon c'est testé et fonctionnel, mais par prudence il est vivement recommandé de faire des sauvegardes de la base et des fichiers avant (comme pour toute install de mod)

:vivepa:

Avatar du membre

Danny07000
Messages : 50
Enregistré le : janvier 2012
Hébergeur(s) : Easy-Hebergement
Localisation : Alsace (68)
Contact :

Re: [Dev] Mod mark unread new edits

Message par Danny07000 » mar. 1 mai 2012 09:08

Hello,

C'est génial ce type de MOD, je vais suivre de près...

@bientôt.


blablabla
Messages : 46
Enregistré le : mars 2013

Re: [Dev] Mod mark unread new edits

Message par blablabla » lun. 11 mars 2013 23:18

Bonsoir,

cela reprend ce mod si je comprend bien ?

Avatar du membre

EnYgmA
Administrateur phpBB Assistance
Administrateur phpBB Assistance
Messages : 8647
Enregistré le : avril 2010
Hébergeur(s) : Monarobase
Localisation : Au soleil
Contact :

Re: [Dev] Mod mark unread new edits

Message par EnYgmA » mar. 12 mars 2013 05:23

Bonjour et bienvenue,

Oui et Non

Car la fonction est reprise mais pas que sur le dernier message :clin:
Très absent en ce moment ...
Conditions générales de services - Conditions générales de support - C.G.U
Merci de mettre un titre de sujet explicite pour toutes vos demandes de support
Référencement gratuit - Forum informatique


blablabla
Messages : 46
Enregistré le : mars 2013

Re: [Dev] Mod mark unread new edits

Message par blablabla » mar. 12 mars 2013 06:17

Je vais essayer la fusion alors ;)

edit: Il y aurait pas une erreur ici :
chercher :

Code: Tout sélectionner
(tt.mark_time IS NOT NULL AND t.topic_last_post_time > tt.mark_time) OR



remplacer par :

Code: Tout sélectionner
(tt.mark_time IS NOT NULL AND t.topic_last_edit_time > tt.mark_time) OR
(tt.mark_time IS NOT NULL AND t.topic_last_post_time > tt.mark_time) OR
deux fois ? :meuh: :meuh: :meuh:

re edit :
viewtopic.php :
'S_UNREAD_POST' => $row['post_unread'] ? true : false, introuvable...

Avatar du membre

EnYgmA
Administrateur phpBB Assistance
Administrateur phpBB Assistance
Messages : 8647
Enregistré le : avril 2010
Hébergeur(s) : Monarobase
Localisation : Au soleil
Contact :

Re: [Dev] Mod mark unread new edits

Message par EnYgmA » mar. 12 mars 2013 06:18

Bah il ne demande pas d'ajouter après / avant mais de remplacer donc à l'arrivée il n'y a pas de doublon si tu suis le truc :clin:
Très absent en ce moment ...
Conditions générales de services - Conditions générales de support - C.G.U
Merci de mettre un titre de sujet explicite pour toutes vos demandes de support
Référencement gratuit - Forum informatique


blablabla
Messages : 46
Enregistré le : mars 2013

Re: [Dev] Mod mark unread new edits

Message par blablabla » mar. 12 mars 2013 06:21

Exact, je viens de voir la différence, je vais allez dodo je crois....

mais pour viewtopic, je ne trouve pas la correspondance même dans une archive vierge de phpbb 3.0.11 seo...

Avatar du membre

EnYgmA
Administrateur phpBB Assistance
Administrateur phpBB Assistance
Messages : 8647
Enregistré le : avril 2010
Hébergeur(s) : Monarobase
Localisation : Au soleil
Contact :

Re: [Dev] Mod mark unread new edits

Message par EnYgmA » mar. 12 mars 2013 06:24

Ligne 92 chez moi :clin:
Très absent en ce moment ...
Conditions générales de services - Conditions générales de support - C.G.U
Merci de mettre un titre de sujet explicite pour toutes vos demandes de support
Référencement gratuit - Forum informatique


blablabla
Messages : 46
Enregistré le : mars 2013

Re: [Dev] Mod mark unread new edits

Message par blablabla » mar. 12 mars 2013 06:31

Dans viewtopic.php ??

Désolé mais je ne le trouve pas ni même dans un phpBB vierge....

recherche notepad++:
C:\\phpBB3\phpBB-3.0.11_FR\phpBB3\viewtopic.php (1 hit)
Line 1585: 'S_UNREAD_POST' => $post_unread,

Avatar du membre

EnYgmA
Administrateur phpBB Assistance
Administrateur phpBB Assistance
Messages : 8647
Enregistré le : avril 2010
Hébergeur(s) : Monarobase
Localisation : Au soleil
Contact :

Re: [Dev] Mod mark unread new edits

Message par EnYgmA » mar. 12 mars 2013 06:33

Tu fais mal ta recherche !

teste avec ça :

// Get topic tracking info :clin:
Très absent en ce moment ...
Conditions générales de services - Conditions générales de support - C.G.U
Merci de mettre un titre de sujet explicite pour toutes vos demandes de support
Référencement gratuit - Forum informatique

Verrouillé

Retourner vers « [Archives] Mod's en Développement »