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;
}
Exemple #2
0
/**
 * 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']);
}
Exemple #3
0
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'])
		);
}
Exemple #4
0
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']);
}
Exemple #5
0
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&nbsp;$nom";
	}

	$date = affdate_jourcourt($date);
	if (!$date) $date = '&nbsp;';

	$num = afficher_numero_edit($id_article, 'id_article', 'article');

	// Afficher le numero (JMB)

	return array($puce, $lien, join('<br />', $auteurs), $date, $num);
}