123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- <?php
- /***************************************************************************\
- * SPIP, Systeme de publication pour l'internet *
- * *
- * Copyright (c) 2001-2014 *
- * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
- * *
- * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
- * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
- \***************************************************************************/
- /**
- * Définit les autorisations du plugin mots
- *
- * @package Mots\Autorisations
- **/
- if (!defined('_ECRIRE_INC_VERSION')) return;
- /** Fonction d'appel pour le pipeline */
- function mots_autoriser(){}
- /**
- * Autorisation de voir un élément de menu
- *
- * @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_mots_menu_dist($faire, $type, $id, $qui, $opt){
- if ($qui['statut'] == '0minirezo')
- return ($GLOBALS['meta']['articles_mots'] != 'non' OR sql_countsel('spip_groupes_mots'));
- $where = "";
- if ($qui['statut']=='1comite')
- $where = "comite='oui' OR forum='oui'";
- if ($qui['statut']=='6forum')
- $where = "forum='oui'";
- return ($where
- AND $GLOBALS['meta']['articles_mots'] != 'non'
- AND sql_countsel('spip_groupes_mots',$where));
- }
- /**
- * Autorisation de voir le bouton d'accès rapide à la création d'un mot clé
- *
- * @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_motcreer_menu_dist($faire, $type, $id, $qui, $opt){
- // [fixme] Meta 'article_mots' mal nommée maintenant
- // car elle désigne l'activation ou non des mots clés, quelque soit l'objet.
- return ($GLOBALS['meta']['articles_mots'] != 'non'
- AND sql_countsel('spip_groupes_mots')
- AND autoriser('creer','mot',null,$qui,$opt));
- }
- /**
- * Autorisation de voir un groupe de mots
- *
- * L'autorisation est donnée selon la configuration du groupe
- * qui gère cela par type d'auteur (administrateur, rédacteurs, visiteurs)
- *
- * @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_groupemots_voir_dist($faire, $type, $id, $qui, $opt) {
- if ($qui['statut'] == '0minirezo') return true;
- $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;
- }
- /**
- * Autorisation de créer un groupe de mots
- *
- * @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_groupemots_creer_dist($faire, $type, $id, $qui, $opt) {
- return
- $qui['statut'] == '0minirezo'
- AND !$qui['restreint'];
- }
- /**
- * Autorisation de modifier un groupe de mots
- *
- * Cela inclut également l'ajout ou modification des mots lui appartenant
- *
- * @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_groupemots_modifier_dist($faire, $type, $id, $qui, $opt) {
- return
- $qui['statut'] == '0minirezo' AND !$qui['restreint']
- AND autoriser('voir','groupemots',$id,$qui,$opt);
- }
- /**
- * Autorisation de supprimer un groupe de mots
- *
- * @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_groupemots_supprimer_dist($faire, $type, $id, $qui, $opt) {
- if (!autoriser('modifier','groupemots',$id))
- return false;
- return sql_countsel('spip_mots','id_groupe='.intval($id))?false:true;
- }
- /**
- * Autorisation de modifier un mot
- *
- * Il faut avoir le droit de modifier le groupe parent
- *
- * Note : passer l'id_groupe dans le tableau d'option
- * permet de gagner du CPU et une requête SQL (c'est ce que fait l'espace privé)
- *
- * @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_mot_modifier_dist($faire, $type, $id, $qui, $opt) {
- return
- isset($opt['id_groupe'])
- ? autoriser('modifier', 'groupemots', $opt['id_groupe'], $qui, $opt)
- : (
- $t = sql_getfetsel("id_groupe", "spip_mots", "id_mot=".intval($id))
- AND autoriser('modifier', 'groupemots', $t, $qui, $opt)
- );
- }
- /**
- * Autorisation de créer un mot
- *
- * Vérifie si une association est demandée en option, qu'elle est possible dans un des groupes,
- * c'est à dire qu'une liaison est possible entre un groupe et l'objet lié
- *
- * Si l'id_groupe est passé en option,
- * vérifie également que l'auteur a le droit de modifier ce groupe
- *
- * @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_mot_creer_dist($faire, $type, $id, $qui, $opt) {
- if ($qui['statut'] != '0minirezo' OR $qui['restreint'])
- return false;
- $where = '';
- // si objet associe, verifier qu'un groupe peut etre associe
- // a la table correspondante
- if (isset($opt['associer_objet'])
- AND $associer_objet = $opt['associer_objet']){
- if (!preg_match(',^(\w+)\|[0-9]+$,',$associer_objet,$match))
- return false;
- $where = "tables_liees REGEXP '(^|,)".addslashes(table_objet($match[1]))."($|,)'";
- }
- // si pas de groupe de mot qui colle, pas le droit
- if (!sql_countsel('spip_groupes_mots',$where))
- return false;
- if (isset($opt['id_groupe']))
- return autoriser('modifier','groupemots',$opt['id_groupe']);
-
- return true;
- }
- /**
- * Autorisation de supprimer un mot
- *
- * Par défaut : pouvoir créer un mot dans le groupe
- *
- * @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_mot_supprimer_dist($faire, $type, $id, $qui, $opt) {
- // On cherche le groupe du mot
- $id_groupe = $opt['id_groupe'] ? $opt['id_groupe'] : sql_getfetsel('id_groupe', 'spip_mots', 'id_mot = '.intval($id));
-
- return autoriser('creer', 'mot', $id, $qui, array('id_groupe'=>$id_groupe));
- }
- /**
- * Autorisation d'associer des mots à un objet
- *
- * Si groupe_champ ou id_groupe est fourni dans le tableau d'options,
- * on regarde les droits pour ce groupe en particulier
- *
- * On interdit aussi d'associer des mots à d'autres mots ou groupes de mots
- *
- * @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_associermots_dist($faire,$type,$id,$qui,$opt){
- // jamais de mots sur des mots
- if ($type=='mot') return false;
- if ($type=='groupemots') return false;
- $droit = substr($qui['statut'],1);
- if (!isset($opt['groupe_champs']) AND !isset($opt['id_groupe'])){
- // chercher si un groupe est autorise pour mon statut
- // et pour la table demandee
- $table = addslashes(table_objet($type));
- if (sql_countsel('spip_groupes_mots',"tables_liees REGEXP '(^|,)$table($|,)' AND ".addslashes($droit)."='oui'"))
- return true;
- }
- // cas d'un groupe en particulier
- else {
- // on recupere les champs du groupe s'ils ne sont pas passes en opt
- if (!isset($opt['groupe_champs'])){
- if (!$id_groupe = $opt['id_groupe'])
- return false;
- include_spip('base/abstract_sql');
- $opt['groupe_champs'] = sql_fetsel("*", "spip_groupes_mots", "id_groupe=".intval($id_groupe));
- }
- $droit = $opt['groupe_champs'][$droit];
- return
- ($droit == 'oui')
- AND
- // on verifie que l'objet demande est bien dans les tables liees
- in_array(
- table_objet($type),
- explode(',', $opt['groupe_champs']['tables_liees'])
- );
- }
- return false;
- }
- /**
- * Autorisation d'affichier le sélecteur de mots
- *
- * Vérifie le droit d'afficher le selecteur de mots
- * pour un groupe de mot donné, dans un objet / id_objet donné
- *
- * C'est fonction de la configuration du groupe de mots.
- *
- * @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_groupemots_afficherselecteurmots_dist($faire,$type,$id,$qui,$opt){
- if (!isset($opt['minirezo']) || !isset($opt['comite'])) {
- $i = sql_fetsel(
- array('minirezo', 'comite'),
- 'spip_groupes_mots',
- 'id_groupe=' . intval($id));
- if (!$i) return false; # le groupe n'existe pas
- $admin = $i['minirezo'];
- $redac = $i['comite'];
- } else {
- $admin = $opt['minirezo'];
- $redac = $opt['comite'];
- }
- $statuts = array();
- if ($admin == 'oui') $statuts[] = '0minirezo';
- if ($redac == 'oui') $statuts[] = '1comite';
- return in_array($qui['statut'], $statuts);
- }
- /**
- * Autorisation d'affichier le formulaire de logo
- *
- * @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_mot_iconifier_dist($faire,$type,$id,$qui,$opt){
- return (($qui['statut'] == '0minirezo') AND !$qui['restreint']);
- }
- /**
- * Autorisation d'affichier le formulaire de logo
- *
- * @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_groupemots_iconifier_dist($faire,$type,$id,$qui,$opt){
- return (($qui['statut'] == '0minirezo') AND !$qui['restreint']);
- }
- ?>
|