function autoriser_article_voir($faire, $type, $id, $qui, $opt) { include_spip('public/quete'); if (!$id_rubrique = $opt['id_rubrique']){ $article = quete_parent_lang('spip_articles',$id); $id_rubrique = $article['id_rubrique']; } if (autoriser_rubrique_voir('voir','rubrique',$id_rubrique,$qui,$opt)){ if ($qui['statut'] == '0minirezo') return true; // un article 'prepa' ou 'poubelle' dont on n'est pas auteur : interdit $r = sql_getfetsel("statut", "spip_articles", "id_article=".sql_quote($id)); include_spip('inc/auth'); // pour auteurs_article si espace public return in_array($r, array('prop', 'publie')) OR auteurs_article($id, "id_auteur=".$qui['id_auteur']); } return false; }
/** * Autorisation de voir un article * * Il faut être admin ou auteur de l'article, sinon il faut que l'article * soit publié ou proposé. * * Peut-être appelée sans $id, mais avec un $opt['statut'] pour tester * la liste des status autorisés en fonction de $qui['statut'] * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ function autoriser_article_voir_dist($faire, $type, $id, $qui, $opt) { if ($qui['statut'] == '0minirezo') { return true; } // cas des articles : depend du statut de l'article et de l'auteur if (isset($opt['statut'])) { $statut = $opt['statut']; } else { if (!$id) { return false; } $statut = sql_getfetsel("statut", "spip_articles", "id_article=" . intval($id)); } return in_array($statut, array('prop', 'publie')) or $id and $qui['id_auteur'] and (function_exists('auteurs_article') or include_spip('inc/auth')) and auteurs_article($id, "id_auteur=" . $qui['id_auteur']); }
function autoriser_article_modifier($faire, $type, $id, $qui, $opt) { $s = spip_query( "SELECT id_rubrique,id_secteur,statut FROM spip_articles WHERE id_article="._q($id)); $r = sql_fetch($s); include_spip('inc/auth'); if (!$GLOBALS['autorite']['espace_publieur']) $a = autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt); else { if (!in_array($qui['statut'],array('1comite', '6forum'))) $a = autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt); } return $a OR ( // Cas du wiki, on appelle la fonction qui verifie les droits wiki $GLOBALS['autorite']['espace_wiki'] AND autorisation_wiki_visiteur($qui, $r['id_secteur']) ) OR ( // Cas du wiki par mot clefs, on appelle la fonction qui verifie les droits wiki $GLOBALS['autorite']['espace_wiki_motsclef'] AND autorisation_wiki_motsclef_visiteur($qui, _q($id)) ) OR ( // auteur autorise a modifier son article // (sauf si l'article est refuse ou l'auteur mis a la poubelle) $GLOBALS['autorite']['auteur_mod_article'] AND in_array($qui['statut'], array('0minirezo', '1comite', '6forum')) AND in_array($r['statut'], array('publie', 'prop', 'prepa', 'poubelle')) AND sql_fetch(spip_query("SELECT * FROM spip_auteurs_articles WHERE id_auteur=".intval($qui['id_auteur'])." AND id_article=".intval($id))) ) OR ( // un redacteur peut-il modifier un article propose ? $GLOBALS['autorite']['redacteur_mod_article'] AND in_array($qui['statut'], array('0minirezo', '1comite')) AND $r['statut']=='prop' ) OR ( // un auteur peut modifier son propre article lorsqu'il est proposé ou en cours de rédaction in_array($qui['statut'], array('0minirezo', '1comite')) AND in_array($r['statut'], array('prop','prepa')) AND auteurs_article($id, "id_auteur=".$qui['id_auteur']) ); }
function autoriser_voir_dist($faire, $type, $id, $qui, $opt) { if ($type == 'document') return autoriser_document_voir_dist($faire, $type, $id, $qui, $opt); if ($qui['statut'] == '0minirezo') return true; if ($type == 'auteur') return false; if ($type == 'groupemots') { $acces = sql_fetsel("comite,forum", "spip_groupes_mots", "id_groupe=".intval($id)); if ($qui['statut']=='1comite' AND ($acces['comite'] == 'oui' OR $acces['forum'] == 'oui')) return true; if ($qui['statut']=='6forum' AND $acces['forum'] == 'oui') return true; return false; } if ($type != 'article') return true; if (!$id) return false; // un article 'prepa' ou 'poubelle' dont on n'est pas auteur : interdit $r = sql_getfetsel("statut", "spip_articles", "id_article=".sql_quote($id)); include_spip('inc/auth'); // pour auteurs_article si espace public return in_array($r, array('prop', 'publie')) OR auteurs_article($id, "id_auteur=".$qui['id_auteur']); }
function inc_formater_article_dist($row, $own='') { global $spip_lang_right, $spip_display; static $pret = false; static $chercher_logo, $img_admin, $formater_auteur, $nb, $langue_defaut, $afficher_langue, $puce_statut; $id_article = $row['id_article']; if (!autoriser('voir','article',$id_article)) return ''; if (!$pret) { $chercher_logo = ($spip_display != 1 AND $spip_display != 4 AND $GLOBALS['meta']['image_process'] != "non"); if ($chercher_logo) $chercher_logo = charger_fonction('chercher_logo', 'inc'); $formater_auteur = charger_fonction('formater_auteur', 'inc'); $img_admin = http_img_pack("admin-12.gif", "", " width='12' height='12'", _T('titre_image_admin_article')); if (($GLOBALS['meta']['multi_rubriques'] == 'oui' AND (!isset($GLOBALS['id_rubrique']))) OR $GLOBALS['meta']['multi_articles'] == 'oui') { $afficher_langue = true; $langue_defaut = !isset($GLOBALS['langue_rubrique']) ? $GLOBALS['meta']['langue_site'] : $GLOBALS['langue_rubrique']; } $puce_statut = charger_fonction('puce_statut', 'inc'); $pret = true; } if ($chercher_logo) { if ($logo = $chercher_logo($id_article, 'id_article', 'on')) { list($fid, $dir, $nom, $format) = $logo; include_spip('inc/filtres_images_mini'); $logo = "<span style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>" . image_reduire("<img src='$fid' alt='' />", 26, 20) . "</span>"; } else $logo = ''; } else $logo =''; $titre = supprime_img($row['titre'],''); $id_rubrique = $row['id_rubrique']; $date = $row['date']; $statut = $row['statut']; $descriptif = $row['descriptif']; $lang = $row['lang']; $dir = "dir='" . lang_dir($lang ? changer_typo($lang) : '') . "'"; if ($lang AND $afficher_langue AND $lang != $GLOBALS['meta']['langue_site']) $lang = " <span class='spip_xx-small' style='color: #666666' " . $dir . '>(' . traduire_nom_langue($lang) . ')</span>'; else $lang = ''; $arg = "id_article=$id_article"; $url_a = generer_url_ecrire("articles", $arg); if (!$row['petition']) $petition = ''; else $petition = " <a href='" . generer_url_ecrire('controle_petition', $arg) . "' class='spip_xx-small' style='color: red'>"._T('lien_petitions') . "</a>"; $lien = "<div>" . $logo . (acces_restreint_rubrique($id_rubrique) ? $img_admin : '') . "<a href='" . $url_a . "'" . (!$descriptif ? '': (' title="'.attribut_html(typo($descriptif)).'"')) . " $dir>" . typo(strlen($titre) ? $titre : _T('ecrire:info_sans_titre')) . "</a>" . $lang . $petition . "</div>"; if ($spip_display == 4) return array($lien); $puce = $puce_statut($id_article, $statut, $id_rubrique,'article'); $auteurs = auteurs_article($id_article); foreach ($auteurs as $k => $r) { list(, $mail, $nom,,) = $formater_auteur($r['id_auteur']); $auteurs[$k]= "$mail $nom"; } $date = affdate_jourcourt($date); if (!$date) $date = ' '; $num = afficher_numero_edit($id_article, 'id_article', 'article'); // Afficher le numero (JMB) return array($puce, $lien, join('<br />', $auteurs), $date, $num); }