PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/_core_/tags/spip-3.0.0-beta2/medias/medias_autoriser.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 238 lines | 115 code | 35 blank | 88 comment | 32 complexity | 99a35abf2c2dbbb5de93447ca39f8cff MD5 | raw file
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2011 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) return;
  12. /* Pour que le pipeline de rale pas ! */
  13. function medias_autoriser(){}
  14. function autoriser_mediatheque_administrer_dist($faire,$quoi,$id,$qui,$options) {
  15. return $qui['statut'] == '0minirezo';
  16. }
  17. function autoriser_documents_menu_dist($faire,$quoi,$id,$qui,$options) {
  18. return autoriser('administrer','mediatheque',$id,$qui,$options);
  19. }
  20. /**
  21. * Autoriser le changement des dimensions sur un document
  22. * @param <type> $faire
  23. * @param <type> $quoi
  24. * @param <type> $id
  25. * @param <type> $qui
  26. * @param <type> $options
  27. * @return <type>
  28. */
  29. function autoriser_document_tailler_dist($faire,$quoi,$id,$qui,$options) {
  30. if (!$id_document=intval($id))
  31. return false;
  32. if (!autoriser('modifier','document',$id,$qui,$options))
  33. return false;
  34. if (!isset($options['document']) OR !$document = $options['document'])
  35. $document = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
  36. // (on ne le propose pas pour les images qu'on sait
  37. // lire : gif jpg png), sauf bug, ou document distant
  38. if (in_array($document['extension'], array('gif','jpg','png'))
  39. AND $document['hauteur']
  40. AND $document['largeur']
  41. AND $document['distant']!='oui')
  42. return false;
  43. // Donnees sur le type de document
  44. $extension = $document['extension'];
  45. $type_inclus = sql_getfetsel('inclus','spip_types_documents', "extension=".sql_quote($extension));
  46. if (($type_inclus == "embed" OR $type_inclus == "image")
  47. AND (
  48. // documents dont la taille est definie
  49. ($document['largeur'] * $document['hauteur'])
  50. // ou distants
  51. OR $document['distant'] == 'oui'
  52. // ou tous les formats qui s'affichent en embed
  53. OR $type_inclus == "embed"
  54. ))
  55. return true;
  56. }
  57. /**
  58. * On ne peut joindre un document qu'a un objet qu'on a le droit d'editer
  59. * mais il faut prevoir le cas d'une *creation* par un redacteur, qui correspond
  60. * au hack id_objet = 0-id_auteur
  61. * Il faut aussi que les documents aient ete actives sur les objets concernes
  62. * ou que ce soit un article, sur lequel on peut toujours uploader des images
  63. *
  64. * http://doc.spip.org/@autoriser_joindredocument_dist
  65. *
  66. * @return bool
  67. */
  68. function autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt){
  69. return
  70. (autoriser('modifier', $type, $id, $qui, $opt)
  71. OR (
  72. $id<0
  73. AND abs($id) == $qui['id_auteur']
  74. AND autoriser('ecrire', $type, $id, $qui, $opt)
  75. )
  76. )
  77. AND
  78. (
  79. $type=='article' OR in_array(table_objet_sql($type),explode(',',$GLOBALS['meta']['documents_objets']))
  80. );
  81. }
  82. /**
  83. * 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
  84. *
  85. * @staticvar <type> $m
  86. * @param <type> $faire
  87. * @param <type> $type
  88. * @param <type> $id
  89. * @param <type> $qui
  90. * @param <type> $opt
  91. * @return <type>
  92. */
  93. function autoriser_document_modifier($faire, $type, $id, $qui, $opt){
  94. static $m = array();
  95. $q=$qui['id_auteur'];
  96. if (isset($m[$q][$id]))
  97. return $m[$q][$id];
  98. $s = sql_getfetsel("statut", "spip_documents", "id_document=".intval($id));
  99. // les admins ont le droit de modifier tous les documents existants
  100. if ($qui['statut'] == '0minirezo'
  101. AND !$qui['restreint'])
  102. return is_string($s)?true:false;
  103. if (!isset($m[$q][$id])) {
  104. // un document non publie peut etre modifie par tout le monde (... ?)
  105. if ($s AND $s!=='publie')
  106. $m[$q][$id] = true;
  107. }
  108. if (!isset($m[$q][$id])) {
  109. $interdit = false;
  110. $s = sql_select("id_objet,objet", "spip_documents_liens", "id_document=".intval($id));
  111. while ($t = sql_fetch($s)) {
  112. if (!autoriser('modifier', $t['objet'], $t['id_objet'], $qui, $opt)) {
  113. $interdit = true;
  114. break;
  115. }
  116. }
  117. $m[$q][$id] = ($interdit?false:true);
  118. }
  119. return $m[$q][$id];
  120. }
  121. /**
  122. * On ne peut supprimer un document que s'il n'est lie a aucun objet
  123. * ET qu'on a le droit de le modifier !
  124. *
  125. * @param <type> $faire
  126. * @param <type> $type
  127. * @param <type> $id
  128. * @param <type> $qui
  129. * @param <type> $opt
  130. * @return <type>
  131. */
  132. function autoriser_document_supprimer($faire, $type, $id, $qui, $opt){
  133. if (!intval($id)
  134. OR !$qui['id_auteur']
  135. OR !autoriser('ecrire','','',$qui))
  136. return false;
  137. // ne pas considerer les document parent
  138. // (cas des vignettes ou autre document annexe rattache a un document)
  139. if (sql_countsel('spip_documents_liens', "objet!='document' AND id_document=".intval($id)))
  140. return false;
  141. // si c'est une vignette, se ramener a l'autorisation de son parent
  142. if (sql_getfetsel('mode','spip_documents','id_document='.intval($id))=='vignette'){
  143. $id_document = sql_getfetsel('id_document','spip_documents','id_vignette='.intval($id));
  144. return !$id_document OR autoriser('modifier','document',$id_document);
  145. }
  146. // si c'est un document annexe, se ramener a l'autorisation de son parent
  147. if ($id_document=sql_getfetsel('id_objet','spip_documents_liens',"objet='document' AND id_document=".intval($id))){
  148. return autoriser('modifier','document',$id_document);
  149. }
  150. return autoriser('modifier','document',$id,$qui,$opt);
  151. }
  152. //
  153. // Peut-on voir un document dans _DIR_IMG ?
  154. // Tout le monde (y compris les visiteurs non enregistres), puisque par
  155. // defaut ce repertoire n'est pas protege ; si une extension comme
  156. // acces_restreint a positionne creer_htaccess, on regarde
  157. // si le document est lie a un element publie
  158. // (TODO: a revoir car c'est dommage de sortir de l'API true/false)
  159. //
  160. // http://doc.spip.org/@autoriser_document_voir_dist
  161. function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) {
  162. if (!isset($GLOBALS['meta']["creer_htaccess"])
  163. OR $GLOBALS['meta']["creer_htaccess"] != 'oui')
  164. return true;
  165. if ((!is_numeric($id)) OR $id < 0) return false;
  166. if (in_array($qui['statut'], array('0minirezo', '1comite')))
  167. return 'htaccess';
  168. if ($liens = sql_allfetsel('objet,id_objet', 'spip_documents_liens', 'id_document='.intval($id)))
  169. foreach ($liens as $l) {
  170. $table_sql = table_objet_sql($l['objet']);
  171. $id_table = id_table_objet($l['objet']);
  172. if (sql_countsel($table_sql, "$id_table = ". intval($l['id_objet'])
  173. . (in_array($l['objet'], array('article', 'rubrique', 'breve'))
  174. ? " AND statut = 'publie'"
  175. : '')
  176. ) > 0)
  177. return 'htaccess';
  178. }
  179. return false;
  180. }
  181. /**
  182. * Auto-association de documents a du contenu editorial qui le reference
  183. * par defaut true pour tous les objets
  184. */
  185. function autoriser_autoassocierdocument_dist($faire, $type, $id, $qui, $opts) {
  186. return true;
  187. }
  188. /**
  189. * Autoriser a nettoyer les orphelins de la base des documents
  190. * reserve aux admins complets
  191. *
  192. * @param $faire
  193. * @param $type
  194. * @param $id
  195. * @param $qui
  196. * @param $opt
  197. * @return bool
  198. */
  199. function autoriser_orphelins_supprimer($faire, $type, $id, $qui, $opt){
  200. if ($qui['statut'] == '0minirezo'
  201. AND !$qui['restreint'])
  202. return true;
  203. }