Server : Apache System : Linux webd348.cluster026.gra.hosting.ovh.net 5.15.148-ovh-vps-grsec-zfs-classid #1 SMP Thu Feb 8 09:41:04 UTC 2024 x86_64 User : hednacluml ( 122243) PHP Version : 8.3.9 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl Directory : /home/hednacluml/jobs/plugins-dist/mots/ |
<?php /***************************************************************************\ * SPIP, Système de publication pour l'internet * * * * Copyright © avec tendresse depuis 2001 * * Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribué sous licence GNU/GPL. * \***************************************************************************/ /** * Définit les autorisations du plugin mots * * @package SPIP\Mots\Autorisations **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Fonction d'appel pour le pipeline * * @pipeline autoriser */ function mots_autoriser() { } /** * Autorisation de voir la page 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_mots_voir_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 un élément de menu * * @uses autoriser_mots_voir_dist() * @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) { return autoriser('voir', '_mots', $id, $qui, $opt); } /** * 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 if (!empty($opt['id_groupe'])) { $id_groupe = $opt['id_groupe']; } else { $id_groupe = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot = ' . intval($id)); } return autoriser('creer', 'mot', $id, $qui, ['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( ['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 = []; 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']); }