diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php index c8c44a815f47c4c59485e32e166f769e5454a499..e78cfec27c6c6f33709f44c888f48cc15788a4ca 100644 --- a/ecrire/exec/articles.php +++ b/ecrire/exec/articles.php @@ -15,6 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/presentation'); include_spip('inc/texte'); include_spip('inc/actions'); +include_spip('inc/autoriser'); // http://doc.spip.org/@exec_articles_dist function exec_articles_dist() @@ -25,7 +26,8 @@ function exec_articles_dist() $row = spip_fetch_array(spip_query("SELECT * FROM spip_articles WHERE id_article=$id_article")); - if (!$row) { + if (!$row + OR !autoriser('voir', 'article', $id_article)) { $res = $row['titre'] = _T('public:aucun_article'); $row['id_rubrique'] = 0; } else { @@ -74,11 +76,9 @@ function articles_affiche($id_article, $row, $cherche_auteur, $ids, $cherche_mot $virtuel = (substr($chapo, 0, 1) == '=') ? substr($chapo, 1) : ''; - $statut_rubrique = acces_rubrique($id_rubrique); - $flag_auteur = spip_num_rows(auteurs_article($id_article, " id_auteur=$connect_id_auteur")); - - $flag_editable = ($statut_rubrique OR ($flag_auteur AND ($statut_article == 'prepa' OR $statut_article == 'prop' OR $statut_article == 'poubelle'))); + $statut_rubrique = autoriser('publier_dans', 'rubrique', $id_rubrique); + $flag_editable = autoriser('modifier', 'article', $id_article); // Est-ce que quelqu'un a deja ouvert l'article en edition ? if ($flag_editable @@ -159,7 +159,8 @@ function articles_affiche($id_article, $row, $cherche_auteur, $ids, $cherche_mot . (($spip_display == 4) ? '' : articles_documents($flag_editable, 'article', $id_article)) - . (($flag_auteur AND $statut_article == 'prepa' AND !$statut_rubrique) + . (($statut_article == 'prepa' AND !$statut_rubrique + AND spip_num_rows(auteurs_article($id_article, " id_auteur=$connect_id_auteur"))) ? $instituer_article($id_article) : '') . "</div></div>" @@ -226,7 +227,11 @@ function boite_info_articles($id_article, $statut_article, $visites, $id_version . "</div>\n" . voir_en_ligne('article', $id_article, $statut_article, 'racine-24.gif', false); - if ($connect_statut == "0minirezo" AND $statut_article == 'publie' AND $visites > 0 AND $GLOBALS['meta']["activer_statistiques"] != "non" AND $options == "avancees"){ + if ($statut_article == 'publie' + AND $visites > 0 + AND $GLOBALS['meta']["activer_statistiques"] != "non" + AND $options == "avancees" + AND autoriser('voir_stats', 'article', $id_article)) { $res .= icone_horizontale(_T('icone_evolution_visites', array('visites' => $visites)), generer_url_ecrire("statistiques_visites","id_article=$id_article"), "statistiques-24.gif","rien.gif", false); } diff --git a/ecrire/exec/articles_versions.php b/ecrire/exec/articles_versions.php index 7d14d461c2ce709054de009d8982453f463eb238..c7aa1e2df77ebbd574085809a1bbb0e6fec2dcb7 100644 --- a/ecrire/exec/articles_versions.php +++ b/ecrire/exec/articles_versions.php @@ -15,6 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/presentation'); include_spip('inc/revisions'); +include_spip('inc/autoriser'); // http://doc.spip.org/@exec_articles_versions_dist function exec_articles_versions_dist() @@ -43,6 +44,10 @@ function exec_articles_versions_dist() // Lire l'article // + if(!autoriser('voir_revisions', 'article', $id_article)) + return; + + $id_article = intval($id_article); $result = spip_query("SELECT * FROM spip_articles WHERE id_article='$id_article'"); @@ -205,15 +210,15 @@ echo "</td>"; echo "<td align='center'>"; -// L'article est-il editable ? - $result_auteur = spip_query("SELECT * FROM spip_auteurs_articles WHERE id_article=$id_article AND id_auteur=$connect_id_auteur"); - -$flag_auteur = (spip_num_rows($result_auteur) > 0); -$flag_editable = (acces_rubrique($id_rubrique) - OR ($flag_auteur AND ($statut_article == 'prepa' OR $statut_article == 'prop' OR $statut_article == 'poubelle'))); - -if ($flag_editable) - icone(_T('icone_modifier_article').'<br />('._T('version')." $id_version)", generer_url_ecrire("articles_edit","id_article=$id_article&id_version=$id_version"), "article-24.gif", "edit.gif"); +// Icone de modification +if (autoriser('modifier', 'article', $id_article)) + icone( + _T('icone_modifier_article').'<br />('._T('version')." $id_version)", + generer_url_ecrire("articles_edit", + "id_article=$id_article&id_version=$id_version"), + "article-24.gif", + "edit.gif" + ); echo "</td>"; @@ -328,5 +333,7 @@ fin_cadre_relief(); echo fin_page(); + } + ?> diff --git a/ecrire/inc/article_select.php b/ecrire/inc/article_select.php index ce8649f62ad4cee2ab70d6625bebf7df6aa53f46..c43c963f8e4e195b2eb8cda85a9724deb4b0a42a 100644 --- a/ecrire/inc/article_select.php +++ b/ecrire/inc/article_select.php @@ -25,17 +25,13 @@ function article_select($id_article, $id_rubrique, $lier_trad, $new) { $id_rubrique = intval($id_rubrique); $lier_trad = intval($lier_trad); -// ESSAI pour "Joindre un document" depuis l'espace prive (UPLOAD_DIRECT) -/*if ($GLOBALS['action'] AND $GLOBALS['doc']) { - global $action, $doc; - if ($var_nom = charger_fonction($action, 'action')) - $var_nom($doc); - else - spip_log("fonction $var_nom indisponible"); -# return; -}*/ - - if ($id_article) { + include_spip('inc/autoriser'); + +if ($id_article) { + + if (!autoriser('modifier','article',$id_article)) + return false; + $result = spip_query("SELECT * FROM spip_articles WHERE id_article=$id_article"); if ($row = spip_fetch_array($result)) { @@ -44,11 +40,6 @@ function article_select($id_article, $id_rubrique, $lier_trad, $new) { $id_secteur = $row['id_secteur']; $statut = $row['statut']; - $result_auteur = spip_query("SELECT * FROM spip_auteurs_articles WHERE id_article=$id_article AND id_auteur=$connect_id_auteur"); - - $flag_auteur = (spip_num_rows($result_auteur) > 0); - - $flag_editable = (acces_rubrique($id_rubrique) OR ($flag_auteur > 0 AND ($statut == 'prepa' OR $statut == 'prop' OR $new == 'oui'))); } } else if ($new=='oui') { @@ -78,10 +69,7 @@ else if ($new=='oui') { $row_rub = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_rubriques WHERE id_rubrique=$id_rubrique")); $row['id_secteur'] = $row_rub['id_secteur']; } - $flag_editable = true; - } - - if (!$flag_editable) return false; +} // marquer le fait que l'article est ouvert en edition par toto a telle date // une alerte sera donnee aux autres redacteurs sur exec=articles diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php index e26478bfef6f77e7d215491a5903bccc55552b7b..ce39bcf49cfb2a08ee5f56b99c3acaca8d359b0b 100644 --- a/ecrire/inc/autoriser.php +++ b/ecrire/inc/autoriser.php @@ -74,7 +74,7 @@ function autoriser($faire, $type='', $id=0, $qui = NULL, $opt = NULL) { AND (function_exists($f) OR function_exists($f.='_dist')) ) ) - $a = $f($faire,$type,$id,$qui,$opt); + $a = $f($faire,$type,intval($id),$qui,$opt); if (_DEBUG_AUTORISER) spip_log("$f($faire,$type,$id): ".($a?'OK':'niet')); @@ -110,7 +110,7 @@ function autoriser_modifier_rubrique_dist($faire, $type, $id, $qui, $opt) { // = admins de rubrique parente si publiee function autoriser_modifier_breve_dist($faire, $type, $id, $qui, $opt) { $s = spip_query( - "SELECT id_rubrique,statut FROM spip_breves WHERE id_breve=".intval($id)); + "SELECT id_rubrique,statut FROM spip_breves WHERE id_breve="._q($id)); $r = spip_fetch_array($s); return ($r['statut'] == 'publie') @@ -123,15 +123,45 @@ function autoriser_modifier_breve_dist($faire, $type, $id, $qui, $opt) { // = ou statut 'prop,prepa' et $qui est auteur function autoriser_modifier_article_dist($faire, $type, $id, $qui, $opt) { $s = spip_query( - "SELECT id_rubrique,statut FROM spip_articles WHERE id_article=".intval($id)); + "SELECT id_rubrique,statut FROM spip_articles WHERE id_article="._q($id)); $r = spip_fetch_array($s); return autoriser('publier_dans', 'rubrique', $r['id_rubrique'], $qui, $opt) OR ( in_array($qui['statut'], array('0minirezo', '1comite')) - AND in_array($r['statut'], array('prop','prepa')) + AND in_array($r['statut'], array('prop','prepa', 'poubelle')) AND spip_num_rows(auteurs_article($id, "id_auteur=".$qui['id_auteur'])) ); } +// Lire les stats ? +// = tous les admins +function autoriser_voir_stats_dist($faire, $type, $id, $qui, $opt) { + return + $qui['statut'] == '0minirezo'; +} + + +// Voir un objet +function autoriser_voir_dist($faire, $type, $id, $qui, $opt) { + if ( + ($qui['statut'] == '0minirezo') + OR ($type != 'article') + ) + return true; + + // un article 'prepa' ou 'poubelle' dont on n'est pas auteur : interdit + $s = spip_query( + "SELECT statut FROM spip_articles WHERE id_article="._q($id)); + $r = spip_fetch_array($s); + return in_array($r['statut'], array('prop', 'publie')); +} + +// Voir les revisions ? +// = voir l'objet +function autoriser_voir_revisions_dist($faire, $type, $id, $qui, $opt) { + return + autoriser('voir', $type, $id, $qui, $opt); +} + ?>