Les modification présenté sont repris du post suivant :
https://www.frxoops.org/modules/newbb/ ... t&order=DESC&type=&mode=0et adapter pour la version 1.68 du module news.
les principales modification ont été de rajouter "news_" devant les fonctions suivantes:
news_updateCache();
news_getmoduleoption('authoredit')
news_is_admin_group
Fichier /modules/news/blocks/news_moderate.php
Ligne 38: Modification pour que le bloc des articles en attente de modération n'affiche que ceux que l'utilisateur connecté peut approuvé
Remplacement de la ligne $storyarray = NewsStory :: getAllSubmitted(0, true, news_getmoduleoption('restrictindex')); Par la ligne $storyarray = NewsStory :: getAllSubmitted(0, true, true);
Ligne 67:Modification du lien permettant d'effacer un article, afin que seul les groupes ayant les droits d'approbation sur un sujet puisse faire cette opération sans pour autant qu'ils aient les droits d'administration
Remplacement de la ligne $story['action'] = "<a href='" . XOOPS_URL . "/modules/news/admin/index.php?op=edit&storyid=" . $newstory->storyid() . "'>" . _EDIT. "</a> - <a href='" . XOOPS_URL . "/modules/news/admin/index.php?op=delete&storyid=" . $newstory->storyid() . "'>" . _MB_DELETE . "</a>"; Par la ligne $story['action'] = "<a href='" . XOOPS_URL . "/modules/news/submit.php?op=delete&storyid=" . $newstory->storyid() . "'>" . _MB_DELETE . "</a>";
Fichier /modules/news/submit.php
Ligne 134:Le code de confirmation, envoyant des POST et non des GET, on ajoute juste avant le switch($op)
le elseif suivant (le précedent ne faisait que des test sur le $_GET (Uniquement pour répondre à la confirmation de suppression) :
elseif ( isset($_POST['op']) && isset($_POST['storyid'])) { if ($approveprivilege && $_POST['op'] == 'delete') { $op = 'delete'; $storyid = intval($_POST['storyid']); } }
Et a la fin de la page on y ajoute la case delete pour le block moderate :
Dans le swith ($op) (fin du script) ajout d'une réponse à l'opération delete qui demande la confirmation puis effectue l'effacement.
case 'delete': if (!$approveprivilege) { redirect_header(XOOPS_URL.'/modules/news/index.php', 3, _NOPERM); exit(); break; } $story = new NewsStory($storyid); if (!$gperm_handler->checkRight("news_approve", $story->topicid(), $groups, $module_id)) { redirect_header(XOOPS_URL.'/modules/news/index.php', 3, _NOPERM); exit(); break; } if (!empty($_POST['ok'])) { if (empty($storyid)) { redirect_header(XOOPS_URL.'/modules/news/index.php',3, _AM_EMPTYNODELETE ); exit(); } $story->delete(); $sfiles = new sFiles(); $filesarr=Array(); $filesarr=$sfiles->getAllbyStory($storyid); if(count($filesarr)>0) { foreach ($filesarr as $onefile) { $onefile->delete(); } } xoops_comment_delete($xoopsModule->getVar('mid'),$storyid); xoops_notification_deletebyitem($xoopsModule->getVar('mid'), 'story', $storyid); updateCache(); redirect_header(XOOPS_URL.'/modules/news/index.php', 1, _AM_DBUPDATED ); exit(); } else { //xoops_cp_header(); echo "<h4>" . _AM_CONFIG . "</h4>"; xoops_confirm(array('op' => 'delete', 'storyid' => $storyid, 'ok' => 1), XOOPS_URL.'/modules/news/submit.php', _AM_RUSUREDEL .'<br />' . $story->title()); } break;
Modification de la méthode AdminLink pour adapter le lien delete dans le cas où l'on n'est pas admin
Dans ce cas pour faire un delete on utilise le script submit.php modifié précédement :
Remplacer les lignes (a partir de la 243)
if(is_object($xoopsUser)) {
if( $xoopsUser->isAdmin($xoopsModule->getVar('mid')) || (getmoduleoption('authoredit') && $article->uid() == $xoopsUser->getVar('uid')) ) {
$isadmin = true;
$story['adminlink'] = $article->adminlink();
}
}
Par les lignes
if(is_object($xoopsUser)) {
if( $xoopsUser->isAdmin($xoopsModule->getVar('mid')) || (news_getmoduleoption('authoredit') && $article->uid() == $xoopsUser->getVar('uid')) ) {
$isadmin = true;
$story['adminlink'] = $article->adminlink();
}
else {
if ($gperm_handler->checkRight("news_approve", $article->topicid(), $groups, $xoopsModule->getVar('mid'))) {
$story['adminlink'] = $article->adminlink();
}
}
}
Pour afficher les lien editer/effacer sur la page d'index listant les articles pour lequel l'utilisateur à le droit d'approbation
Localiser les lignes : if ($approveprivilege) { $story['adminlink'] = $this->adminlink(); } Et y insérer : if ($approveprivilege==0) { global $xoopsModule,$xoopsConfig; $gperm_handler =& xoops_gethandler('groupperm'); if (is_object($xoopsUser)) { $groups = $xoopsUser->getGroups(); } else { $groups = XOOPS_GROUP_ANONYMOUS; } if ($gperm_handler->checkRight("news_approve", $this->topicid(), $groups, $xoopsModule->getVar('mid'))) { $approveprivilege=1; } }
Pour afficher les liens éditer/effacer sur la page de consultation d'un article
Remplacer les lignes (a partir de la 243) if(is_object($xoopsUser)) { if( $xoopsUser->isAdmin($xoopsModule->getVar('mid')) || (getmoduleoption('authoredit') && $article->uid() == $xoopsUser->getVar('uid')) ) { $isadmin = true; $story['adminlink'] = $article->adminlink(); } } Par les lignes if(is_object($xoopsUser)) { if( $xoopsUser->isAdmin($xoopsModule->getVar('mid')) || (news_getmoduleoption('authoredit') && $article->uid() == $xoopsUser->getVar('uid')) ) { $isadmin = true; $story['adminlink'] = $article->adminlink(); } else { if ($gperm_handler->checkRight("news_approve", $article->topicid(), $groups, $xoopsModule->getVar('mid'))) { $story['adminlink'] = $article->adminlink(); } } }
Voila ! J'obtient maitenant un vrai service de moderateur !!