Pour moi également c'est un véritable probleme.
Le soucis c'est que dans le module droits d'approbation $ droit d'administration.
Je suis alors parti sur la regle :
droit d'approbation = droit d'édition ou d'effacement.
Aprés plusieurs modifs, je suis arrivé à mes fin, chaque groupe peut approuver, editer,effacer les articles des catégories dont ils ont les droits d'approbation sans passer par l'administrtion.
Dans mon cas j'utilise le groupe des articles en attentes en haute de toutes les pages pour informer chaque groupe d'utilisateurs sur les articles qu'il doit approuver.
Voici la liste des modifications effectuées (attention c'est parti)
/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 igne
$storyarray = NewsStory :: getAllSubmitted(0, true, getmoduleoption('restrictindex'));
Par la ligne
$storyarray = NewsStory :: getAllSubmitted(0, true, true);
Ligne 59 et 61: Modification des liens pour ne plus les faire ouvrir dans une nouvelle fenêtre (suppression du target=_blank)
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=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 85 à 88 Mise en commentaire, du test d'admin dans le cas où les utilisateurs ne peuvent pas éditer leurs articles
Ligne 149 : Modification, pour autoriser la modification d'un post qu'au groupe d'utilisateur ayant les droits
d'approbation sur le sujet de l'article
Remplacement de la igne
if (!$gperm_handler->checkRight("news_view", $story->topicid(), $groups, $module_id)) {
Par la ligne
if (!$gperm_handler->checkRight("news_approve", $story->topicid(), $groups, $module_id)) {
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;
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']);
}
}
Fichier \modules\news\class\class.newsstory.php
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
function adminlink()
{
if(is_admin_group())
$ret = " [ <a href='".XOOPS_URL."/modules/news/submit.php?op=edit&storyid=".$this->storyid()."'>"._EDIT."</a> | <a href='".XOOPS_URL."/modules/news/admin/index.php?op=delete&storyid=".$this->storyid()."'>"._DELETE."</a> ] ";
else
$ret = " [ <a href='".XOOPS_URL."/modules/news/submit.php?op=edit&storyid=".$this->storyid()."'>"._EDIT."</a> | <a href='".XOOPS_URL."/modules/news/submit.php?op=delete&storyid=".$this->storyid()."'>"._DELETE."</a> ] ";
return $ret;
}
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;
}
}
Fichier /modules/news/article.php
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')) || (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();
}
}
}
Voilà, ouf, c'est tout...
J'espère que cela vous conviendra autant qu'a moi