• Welcome to Simple Machines Community Forum. Please login or sign up.
October 28, 2021, 01:48:13 PM

News:

SMF 2.0.18 has been released! Please update. Read more.


Besoin d'améliorer le "new" en page d'accueil

Started by lucy453, August 04, 2013, 08:31:09 AM

Previous topic - Next topic

DeathSign

Quote from: maximus23 on September 12, 2013, 10:08:37 AM
Le seul point est pour les fichiers devant-être approuvés là il y a encore une amélioration à faire sinon pour un forum standard pas de soucis.
Hmm j'ai du mal à voir, tu peux me remettre dans le contexte ? ^^

Quote from: Web68 on September 12, 2013, 03:38:02 PM
allez faite vos retours ... il le mérite bien c'est pour nous qu'il bosse dans l'ombre  :P
Le truc c'est que ce n'est pas une modification anodine (si vous pouvez vous en passez, je vous conseille de laisser tel que c'est !). Du coup je sais qu'il y a des cas que je n'ai pas prévu comme celui de Maximus ci-dessus mais j'ai du mal à visualiser :/ J'ai essayé de comprendre le fonctionnement la semaine dernière, donc c'est assez frais pour des modifications =) N'hésitez pas à proposer des améliorations niveau code ;)

maximus23

Bonsoir DeathSign,

Ce week-end je vais remettre un forum clean pour faire un test concret et je vais le mettre sur un gros forum en production avec sections et sous-sections pour tests et ou il y aura des retours avérés. Je te dirai ce qu'il en est au moins on aura là un fonctionnement en mode réel.

:)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

maximus23

Bonjour,

Voilà c'est en production sur divers sites et les retours sont très bons.
Pas de soucis pour les sections et sous-sections.
Pas de latence sur de gros forums. Mutualisés et dédiés les deux testés.
Pas de problèmes sur les messages à approuver (sans mods qui le modifie).
Pas de problèmes avec les fonction Messages lus et Non lus.
Pas de problèmes si on lis ses messages via les réponses aux messages et Messages depuis votre dernière visite.

Voilà pour le moment les retours reçus.

:)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DeathSign

Cool =)

Pour les sous-sections on pourrait corriger assez facilement en adaptant le code que j'ai donné -> Dans MessageIndex, s'il y a des sous-sections on fait la routine qui corrige les icônes sinon on fait rien.

Par contre je n'ai toujours pas compris le coup des fichiers approuvés ^^

maximus23

Bonsoir,

Pour les fichiers approuvés là j'ai parlé trop vite il y avait une modification que j'avais faite dans le code et je n'y ai plus pensé d'où ma notation sans mods ou modifications.

Pour le moment rien de spécial à signaler tout roule.

Donc à suivre pour la suite.

:)

Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

lucy453

Bonjour à tous,

J'ai eu un pépin, trop malade.. je reviens ici et je vois que vous vous êtes penché sur le sujet, je suis super contente, merci beaucoup Deathsign et maximus :)

Je vais tenter de faire les modifications dans la journée voir si tout se passe bien.

Encore merci en tout cas pour votre temps et je reviens vous dire ce qu'il en est pour moi  ;)

lucy453

Verdict --> A priori ... aucune interaction néfaste tout fonctionne et c'est exactement la façon dont je voulais que cela marche!

Merci beaucoup beaucoup, j'aurais été incapable de le faire moi même. Merci pour votre temps et votre aide  :laugh:

DeathSign

Super ! Je croyais que t'avais fini par aller voir ailleurs ;)

Merci pour les retours !

lucy453

Ho non juste un aléas qui fait que j'étais absente.
Si je demande de l'aide (donc du temps) c'est que je ne peux le faire moi même et que je respecte TON retour ;)

Encore merci, j'ai eu d'excellents retours des membres également qui sont super content d'avoir cette fonction

DeathSign

Quote from: lucy453 on September 25, 2013, 04:20:53 AM
Si je demande de l'aide (donc du temps) c'est que je ne peux le faire moi même et que je respecte TON retour ;)
Mais je suis là pour aider et je disais juste ça par rapport à ma réponse très tardive (transition dans ma vie) ;)

J'ai fait des modifications au niveau du code que je posterai ce week-end car je n'ai pas terminé. Au menu, le bout de code manquant quand on est dans une section qui comporte des sous-sections, une gestion de la corbeille et des optimisations.

Je ne gèrerai pas les sous-sous-sections pour des questions de performances et parce que les choix de conception d'SMF me contraignent pour ce faire. On déconseille toujours d'aller trop bas dans les niveaux des sections ;)

A suivre...

maximus23

Bonsoir,

Après plusieurs jours de tests un bug revient constamment :

Après avoir posté dans une section ou il reste des messages non lu l'icône de section repasse en mode off.

Voilà pour le seul retour de bug que j'ai dans l'ensemble des forums.

Merci et bonne fin de soirée.

:)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

lucy453

Bonjour,

Les modifications a me venir sont tops, c'est super :)
(Perso j'ai quelques sous-sections mais pas de sous sous sous sous section :P)

Sinon j'ai la même chose que ce que rapporte Maximus dés que l'on poste, je n'ai rien vu d'autres ;)

DeathSign

Je n'arrive pas à reproduire le bug, serait-ce dans des sections où des messages doivent être approuvés par un modérateur ?

maximus23

Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DeathSign

Me faudrait des détails, voire de me refaire un scénario avec deux membres.

Je viens de m'installer un nouveau forum et RAS. Ca peut aussi être causé par un mod. :s

maximus23

Bonjour,

J'ai un forum sans mods avec le thème par défaut et cela le fait aussi.

Donc je récapitule si il y a plusieurs messages et que l'on répond à un message non lu dans une section simple ou une sous-section l'icône de section passe en mode "off" malgré les messages non lus restant.

:)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DeathSign

September 29, 2013, 03:53:56 PM #36 Last Edit: September 29, 2013, 05:32:06 PM by DeathSign
Testé en créant un nouveau topic dans une section avec des messages non lus + la même avec une simple réponse dans un topic existant, l'icône de section est toujours en "on" :s

EDIT: En postant dans une sous-section effectivement la section parente perd l'icône, c'est bien ce bug ? Quand c'est dans une même section, j'ai rien vu.

maximus23

September 30, 2013, 04:31:50 AM #37 Last Edit: April 08, 2014, 11:42:02 AM by maximus23
Bonjour,

Voici une solution en faisant une petite modification au code de DeathSign on emploiera la comparaison directe des messages non lus. Je remets tout le code ce sera plus clair pour tous.

Le code final ici : http://www.simplemachines.org/community/index.php?topic=508952.msg3616713#msg3616713

Voilà j'espère n'avoir rien oublié :)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DeathSign

C'est une autre approche qui rend une bonne partie de mon code obsolète ;)

Par contre j'ai fait pas mal de changements sur ce que je devais poster pour prendre en compte les sous-sections.

Ma méthodologie était bonne mais j'étais resté heurté sur un véritable bug hier soir. Je regarde en profondeur et vous dirais quoi.

DeathSign

September 30, 2013, 06:46:24 PM #39 Last Edit: October 05, 2013, 04:27:05 AM by DeathSign
C'est bon, je corrige l'icône à la volée dans le code. Impossible de mettre à jour la base de données car : Si l'ID du dernier message de la sous-section est plus grand que celui de la section, la section passe automatiquement en lu ("off") sans passer par "on" quand c'est le cas...

J'ai détecté deux autres bugs qui sont corrigés dans ce code qui est plus précis.

Pour ceux qui ont appliquées mes premières modifs, faut défaire tout ce qui est du fichier Sources/BoardIndex.php (donc garder les premières de Sources/Display.php et Sources/MessageIndex.php), puis faire ce qui suit.

Pour les autres, le début des modifs sont dans mon message précédent http://www.simplemachines.org/community/index.php?topic=508952.msg3605771#msg3605771

Editer Sources/BoardIndex.php
Chercher :
// Retrieve the categories and boards.
require_once($sourcedir . '/Subs-BoardIndex.php');
$boardIndexOptions = array(
'include_categories' => true,
'base_level' => 0,
'parent_id' => 0,
'set_latest_post' => true,
'countChildPosts' => !empty($modSettings['countChildPosts']),
);
$context['categories'] = getBoardIndex($boardIndexOptions);


Ajouter après :
// BEGIN - topic 508952
changeSectionReadIcon($context['categories'], false);
// END - topic 508952


Editer Sources/MessageIndex.php
Chercher :
$boardIndexOptions = array(
'include_categories' => false,
'base_level' => $board_info['child_level'] + 1,
'parent_id' => $board_info['id'],
'set_latest_post' => false,
'countChildPosts' => !empty($modSettings['countChildPosts']),
);
$context['boards'] = getBoardIndex($boardIndexOptions);


Ajouter après :
// BEGIN - topic 508952
changeSectionReadIcon($context['boards'], true);
// END - topic 508952


Editer Sources/Sub-BoardIndex.php
Chercher :
?>

Ajouter avant :
// BEGIN - topic 508952
function changeSectionReadIcon(&$mycontext, $isSub = false)
{
global $user_info, $modSettings, $smcFunc;

if ($user_info['is_guest'] || empty($mycontext))
return;

// Some workaround to make the function a little more generic...
if ($isSub)
$categories = array(array('boards' => &$mycontext));
else
$categories = &$mycontext;

// Make a list of boards to check
$unreadboards = array();
foreach ($categories as $cat_id => $cat)
{
foreach ($cat['boards'] as $board_id => $board)
{
if (!empty($modSettings['recycle_enable']) && $board['id'] == $modSettings['recycle_board']) // Don't notify for the recycle bin
$categories[$cat_id]['boards'][$board_id]['new'] = 0;
else
$unreadboards[$board['id']] = 0;

foreach ($board['children'] as $child_id => $child)
{
if (!empty($modSettings['recycle_enable']) && $child['id'] == $modSettings['recycle_board'])
$categories[$cat_id]['boards'][$board_id]['children'][$child_id]['new'] = 0;
else
$unreadboards[$child['id']] = 0;
}
}
}

// Get the real number of unread topics by boards
$request = $smcFunc['db_query']('', '
SELECT t.id_board, COUNT(*) AS num_topics
FROM {db_prefix}topics AS t
LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = {int:current_member})
LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = t.id_board AND lmr.id_member = {int:current_member})
WHERE t.id_board IN ({array_int:boards})
AND IFNULL(lt.id_msg, IFNULL(lmr.id_msg, 0)) < t.id_last_msg' . ($modSettings['postmod_active'] ? '
AND t.approved = {int:is_approved}' : '') . '
GROUP BY t.id_board',
array(
'boards' => array_keys($unreadboards),
'current_member' => $user_info['id'],
'is_approved' => 1,
)
);

while ($row = $smcFunc['db_fetch_assoc']($request))
$unreadboards[$row['id_board']] = $row['num_topics'];
$smcFunc['db_free_result']($request);

foreach ($categories as $cat_id => $cat)
{
foreach ($cat['boards'] as $board_id => $board)
{
$childrenHasNew = 0;

// Women and children first!
foreach ($board['children'] as $child_id => $child)
{
if (!isset($unreadboards[$child['id']]))
continue;

// No new topic but board marked as new? Correct it.
if (empty($unreadboards[$child['id']]) && !empty($child['new']))
{
$smcFunc['db_insert']('replace',
'{db_prefix}log_boards',
array('id_msg' => 'int', 'id_member' => 'int', 'id_board' => 'int'),
array($modSettings['maxMsgID'], $user_info['id'], $child['id']),
array('id_member', 'id_board')
);

// Update for the current session
$categories[$cat_id]['boards'][$board_id]['children'][$child_id]['new'] = 0;
}

$childrenHasNew += $unreadboards[$child['id']];
}

if (!isset($unreadboards[$board['id']]))
continue;

// No new topic here and in children section but not marked as read? Do sth
if (empty($unreadboards[$board['id']]) && empty($childrenHasNew) && (!empty($board['new']) || !empty($board['children_new'])))
{
$smcFunc['db_insert']('replace',
'{db_prefix}log_boards',
array('id_msg' => 'int', 'id_member' => 'int', 'id_board' => 'int'),
array($modSettings['maxMsgID'], $user_info['id'], $board['id']),
array('id_member', 'id_board')
);

$categories[$cat_id]['boards'][$board_id]['new'] = 0;
$categories[$cat_id]['boards'][$board_id]['children_new'] = 0;
}
// New topics just in children?
elseif (empty($unreadboards[$board['id']]) && !empty($childrenHasNew) && (!empty($board['new']) || empty($board['children_new'])))
{
$smcFunc['db_insert']('replace',
'{db_prefix}log_boards',
array('id_msg' => 'int', 'id_member' => 'int', 'id_board' => 'int'),
array($modSettings['maxMsgID'], $user_info['id'], $board['id']),
array('id_member', 'id_board')
);

$categories[$cat_id]['boards'][$board_id]['new'] = 0;
$categories[$cat_id]['boards'][$board_id]['children_new'] = 1;
}
// Some topic in it but not marked as new? Ok but we can't update the db due to a weird behavior...
elseif (!empty($unreadboards[$board['id']]) && empty($board['new']))
$categories[$cat_id]['boards'][$board_id]['new'] = 1;
}
}
}
// END - topic 508952


Pareil, à vos feedbacks ;)

Amicalement,
DeathSign

Advertisement: