Newer
Older

cedric@yterium.com
a validé
<?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.
*/

cedric@yterium.com
a validé
/**
* Définit les autorisations du plugin Médias
*
* @package SPIP\Medias\Autorisations

cedric@yterium.com
a validé
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}

cedric@yterium.com
a validé
/**
* Fonction d'appel pour le pipeline

cedric@yterium.com
a validé
*
function medias_autoriser() {
}

cedric@yterium.com
a validé
/**
* Autorisation de voir la page documents
*
* @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_documents_voir_dist($faire, $type, $id, $qui, $opt) {

cedric@yterium.com
a validé
return $qui['statut'] == '0minirezo';
}
/**
* Autorisation de voir le bouton Documents dans le menu
*
* @param string $faire Action demandée

cedric@yterium.com
a validé
* @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

gilles.vincent@gmail.com
a validé
function autoriser_documents_menu_dist($faire, $type, $id, $qui, $opt) {
return autoriser('voir', '_documents', $id, $qui, $opt);

cedric@yterium.com
a validé
}
/**
* Autoriser le changement des dimensions sur un document

cedric@yterium.com
a validé
*

cedric@yterium.com
a validé
* @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 $options Options de cette autorisation
* @return bool true s'il a le droit, false sinon

cedric@yterium.com
a validé
*/

gilles.vincent@gmail.com
a validé
function autoriser_document_tailler_dist($faire, $type, $id, $qui, $options) {

cedric@yterium.com
a validé

cedric@yterium.com
a validé
if (!$id_document = intval($id)) {

cedric@yterium.com
a validé
return false;

cedric@yterium.com
a validé
}
if (!autoriser('modifier', 'document', $id, $qui, $options)) {

cedric@yterium.com
a validé
return false;

cedric@yterium.com
a validé
}

marcimat@rezo.net
a validé
if (!isset($options['document']) or !$document = $options['document']) {

cedric@yterium.com
a validé
$document = sql_fetsel('*', 'spip_documents', 'id_document=' . intval($id_document));
}

cedric@yterium.com
a validé
// (on ne le propose pas pour les images qu'on sait
// lire : gif jpg png webp svg), sauf bug, ou document distant
include_spip('inc/filtres_images_lib_mini');
in_array($document['extension'], _image_extensions_logos())

marcimat@rezo.net
a validé
and $document['hauteur']
and $document['largeur']
marcimat
a validé
and $document['distant'] !== 'oui'

cedric@yterium.com
a validé
) {

cedric@yterium.com
a validé
return false;

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
// Donnees sur le type de document
$extension = $document['extension'];
$type_inclus = sql_getfetsel('inclus', 'spip_types_documents', 'extension=' . sql_quote($extension));

cedric@yterium.com
a validé
marcimat
a validé
($type_inclus === 'embed' or $type_inclus === 'image')

marcimat@rezo.net
a validé
and (

cedric@yterium.com
a validé
// documents dont la taille est definie

marcimat@rezo.net
a validé
($document['largeur'] * $document['hauteur'])

cedric@yterium.com
a validé
// ou distants
marcimat
a validé
or $document['distant'] === 'oui'

cedric@yterium.com
a validé
// ou tous les formats qui s'affichent en embed
marcimat
a validé
or $type_inclus === 'embed'

cedric@yterium.com
a validé
)
) {

cedric@yterium.com
a validé
return true;

cedric@yterium.com
a validé
}
marcimat
a validé
return false;

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
/**

cedric@yterium.com
a validé
*
* On ne peut joindre un document qu'a un objet qu'on a le droit d'editer
* mais il faut prevoir le cas d'une *creation* par un redacteur, qui correspond
* au hack id_objet = 0-id_auteur

cedric@yterium.com
a validé
*
* Il faut aussi que les documents aient ete actives sur les objets concernes
* ou que ce soit un article, sur lequel on peut toujours uploader des images
*

cedric@yterium.com
a validé
* @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

cedric@yterium.com
a validé
function autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt) {

marcimat@rezo.net
a validé
include_spip('inc/config');
// objet autorisé en upload ?

marcimat@rezo.net
a validé
if ($type == 'article' or in_array(table_objet_sql($type), explode(',', lire_config('documents_objets', '')))) {
// sur un objet existant

cedric@yterium.com
a validé
if ($id > 0) {
return autoriser('modifier', $type, $id, $qui, $opt);

cedric@yterium.com
a validé
} // sur un nouvel objet

marcimat@rezo.net
a validé
elseif ($id < 0 and (abs($id) == $qui['id_auteur'])) {
return autoriser('ecrire', $type, $id, $qui, $opt);
}
}
return false;

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
/**

cedric@yterium.com
a validé
*

cedric@yterium.com
a validé
* On ne peut modifier un document que s'il n'est pas lie a un objet qu'on n'a pas le droit d'editer
*
* @staticvar <type> $m

cedric@yterium.com
a validé
* @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

cedric@yterium.com
a validé
*/

cedric@yterium.com
a validé
function autoriser_document_modifier_dist($faire, $type, $id, $qui, $opt) {

cedric@yterium.com
a validé

cedric@yterium.com
a validé
$q = $qui['id_auteur'];
if (isset($m[$q][$id])) {

cedric@yterium.com
a validé
}
$s = sql_getfetsel('statut', 'spip_documents', 'id_document=' . intval($id));
// les admins ont le droit de modifier tous les documents existants
if (
$qui['statut'] == '0minirezo'

marcimat@rezo.net
a validé
and !$qui['restreint']

cedric@yterium.com
a validé
) {
return is_string($s) ? true : false;
}

cedric@yterium.com
a validé
if (!isset($m[$q][$id])) {

cedric@yterium.com
a validé
// un document non publie peut etre modifie par tout le monde (... ?)

marcimat@rezo.net
a validé
if ($s and $s !== 'publie' and ($qui['id_auteur'] > 0)) {
$m[$q][$id] = true;

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
}
if (!isset($m[$q][$id])) {

cedric@yterium.com
a validé
$interdit = false;
$s = sql_select('id_objet,objet', 'spip_documents_liens', 'id_document=' . intval($id));

cedric@yterium.com
a validé
while ($t = sql_fetch($s)) {

cedric@yterium.com
a validé
if (!autoriser('modifier', $t['objet'], $t['id_objet'], $qui, $opt)) {

cedric@yterium.com
a validé
$interdit = true;
break;
}
}

cedric@yterium.com
a validé

cedric@yterium.com
a validé
$m[$q][$id] = ($interdit ? false : true);

cedric@yterium.com
a validé
}
return $m[$q][$id];

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
/**
* Autorisation de supprimer un document

cedric@yterium.com
a validé
*

cedric@yterium.com
a validé
* On ne peut supprimer un document que s'il n'est lie a aucun objet
* ET qu'on a le droit de le modifier !
*

cedric@yterium.com
a validé
* @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

cedric@yterium.com
a validé
*/

cedric@yterium.com
a validé
function autoriser_document_supprimer_dist($faire, $type, $id, $qui, $opt) {

marcimat@rezo.net
a validé
or !$qui['id_auteur']
or !autoriser('ecrire', '', '', $qui)

cedric@yterium.com
a validé
) {

cedric@yterium.com
a validé
return false;

cedric@yterium.com
a validé
}
// ne pas considerer les document parent
// (cas des vignettes ou autre document annexe rattache a un document)

cedric@yterium.com
a validé
if (sql_countsel('spip_documents_liens', "objet!='document' AND id_document=" . intval($id))) {

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
// si c'est une vignette, se ramener a l'autorisation de son parent

cedric@yterium.com
a validé
if (sql_getfetsel('mode', 'spip_documents', 'id_document=' . intval($id)) == 'vignette') {
$id_document = sql_getfetsel('id_document', 'spip_documents', 'id_vignette=' . intval($id));

marcimat@rezo.net
a validé
return !$id_document or autoriser('modifier', 'document', $id_document);
// si c'est un document annexe, se ramener a l'autorisation de son parent
if (
$id_document = sql_getfetsel(
'id_objet',
'spip_documents_liens',
"objet='document' AND id_document=" . intval($id)
)
) {

cedric@yterium.com
a validé
return autoriser('modifier', 'document', $id_document);

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé

cedric@yterium.com
a validé
return autoriser('modifier', 'document', $id, $qui, $opt);

cedric@yterium.com
a validé
}
/**
* Autorisation de voir un document

cedric@yterium.com
a validé
*
* Peut-on voir un document dans _DIR_IMG ?
*
* Tout le monde (y compris les visiteurs non enregistrés), puisque par
* défaut ce repertoire n'est pas protégé ; si une extension comme
* acces_restreint a positionné creer_htaccess, on regarde
* si le document est lié à un élément publié.

cedric@yterium.com
a validé
*
* @todo
* À revoir car c'est dommage de sortir de l'API true/false

cedric@yterium.com
a validé
*

cedric@yterium.com
a validé
* @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
* bool $htaccess : true pour tester l'autorisation de voir via le htaccess
* @return bool true s'il a le droit, false sinon

cedric@yterium.com
a validé
function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) {
if (
!isset($GLOBALS['meta']['creer_htaccess'])
or $GLOBALS['meta']['creer_htaccess'] != 'oui'

cedric@yterium.com
a validé
) {

cedric@yterium.com
a validé
return true;

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
if (in_array($qui['statut'], ['0minirezo', '1comite'])) {
return empty($opt['htaccess']) ? false : true;

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
if ((!is_numeric($id)) or $id < 0) {
return false;

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
if (
!empty($opt['htaccess'])
&& ($liens = sql_allfetsel('objet,id_objet', 'spip_documents_liens', 'id_document=' . intval($id)))
) {

cedric@yterium.com
a validé
foreach ($liens as $l) {
$table_sql = table_objet_sql($l['objet']);
$id_table = id_table_objet($l['objet']);
if (
sql_countsel(
$table_sql,
"$id_table = " . intval($l['id_objet'])
. (in_array($l['objet'], ['article', 'rubrique', 'breve'])
? " AND statut = 'publie'"
: '')
return true;

cedric@yterium.com
a validé
}
}

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé

cedric@yterium.com
a validé
return false;
}
/**
* Autorisation d'auto-association de documents à du contenu editorial qui le référence

cedric@yterium.com
a validé
*
* Par defaut true pour tous les objets
*
* @param string $faire Action demandée

cedric@yterium.com
a validé
* @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

cedric@yterium.com
a validé
*/
function autoriser_autoassocierdocument_dist($faire, $type, $id, $qui, $opt) {

cedric@yterium.com
a validé
return true;
}

cedric@yterium.com
a validé
/**
* Autoriser à nettoyer les orphelins de la base des documents
* Réservé aux admins complets.
*
* @param string $faire Action demandée

cedric@yterium.com
a validé
* @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

cedric@yterium.com
a validé
*/

cedric@yterium.com
a validé
function autoriser_orphelins_supprimer_dist($faire, $type, $id, $qui, $opt) {
if (
$qui['statut'] == '0minirezo'

marcimat@rezo.net
a validé
and !$qui['restreint']

cedric@yterium.com
a validé
) {

cedric@yterium.com
a validé
return true;

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
/**
* Autoriser a associer des documents a un objet :
* il faut avoir le droit de modifier cet objet

cedric@yterium.com
a validé
*

cedric@yterium.com
a validé
* @param $faire
* @param $type
* @param $id
* @param $qui
* @param $opt
* @return bool
*/

cedric@yterium.com
a validé
function autoriser_associerdocuments_dist($faire, $type, $id, $qui, $opt) {

marcimat@rezo.net
a validé
// cas particulier (hack nouvel objet)

marcimat@rezo.net
a validé
if (intval($id) < 0 and $id == -$qui['id_auteur']) {

marcimat@rezo.net
a validé
return true;
}

cedric@yterium.com
a validé
return autoriser('modifier', $type, $id, $qui, $opt);

cedric@yterium.com
a validé
}
/**
* Autoriser a dissocier des documents a un objet :
* il faut avoir le droit de modifier cet objet

cedric@yterium.com
a validé
*

cedric@yterium.com
a validé
* @param $faire
* @param $type
* @param $id
* @param $qui
* @param $opt
* @return bool
*/

cedric@yterium.com
a validé
function autoriser_dissocierdocuments_dist($faire, $type, $id, $qui, $opt) {

marcimat@rezo.net
a validé
// cas particulier (hack nouvel objet)

marcimat@rezo.net
a validé
if (intval($id) < 0 and $id == -$qui['id_auteur']) {

cedric@yterium.com
a validé
return true;
}

cedric@yterium.com
a validé
return autoriser('modifier', $type, $id, $qui, $opt);