Browse Source

rangement phase 1 et demi

svn/attic/branches/acces_restreint_tmp/52768
guy.cesaro@gmail.com 10 years ago
commit
5c62981e8c
  1. 70
      .gitattributes
  2. 274
      acces_restreint_fonctions.php
  3. 32
      acces_restreint_options.php
  4. 117
      acces_restreint_pipelines.php
  5. 116
      action/acceder_document.php
  6. 24
      action/affecter_zone.php
  7. 55
      action/autoriser.php
  8. 158
      action/editer_zone.php
  9. 24
      action/retirer_zone.php
  10. 19
      action/supprimer_zone.php
  11. 75
      base/acces_restreint.php
  12. 84
      base/acces_restreint_install.php
  13. 47
      exec/acces_restreint.php
  14. 148
      exec/acces_restreint_config.php
  15. 70
      exec/zones_edit.php
  16. 30
      formulaires/affecter_zones.html
  17. 22
      formulaires/affecter_zones.php
  18. 41
      formulaires/editer_zone.html
  19. 57
      formulaires/editer_zone.php
  20. 14
      formulaires/inc-select_rubriques.html
  21. 16
      formulaires/inc-select_zones.html
  22. BIN
      img_pack/acces-interdit-24.png
  23. BIN
      img_pack/acces-ok-24.png
  24. BIN
      img_pack/croix.png
  25. BIN
      img_pack/gpg-signature-bad.png
  26. BIN
      img_pack/gpg-signature-nokey.png
  27. BIN
      img_pack/gpg-signature-ok.png
  28. BIN
      img_pack/list-add-12.png
  29. BIN
      img_pack/list-add-16.png
  30. BIN
      img_pack/restreint-16.png
  31. 27
      img_pack/wrapper.php
  32. BIN
      img_pack/zones-acces-24.gif
  33. BIN
      img_pack/zones-acces-24.png
  34. BIN
      img_pack/zones-acces-48.png
  35. 251
      inc/acces_restreint.php
  36. 143
      inc/acces_restreint_autoriser.php
  37. 94
      intro_article.html
  38. 40
      lang/accesrestreint.xml
  39. 84
      lang/accesrestreint_ar.php
  40. 84
      lang/accesrestreint_ast.php
  41. 84
      lang/accesrestreint_br.php
  42. 84
      lang/accesrestreint_ca.php
  43. 84
      lang/accesrestreint_de.php
  44. 84
      lang/accesrestreint_en.php
  45. 84
      lang/accesrestreint_es.php
  46. 84
      lang/accesrestreint_eu.php
  47. 84
      lang/accesrestreint_fa.php
  48. 82
      lang/accesrestreint_fr.php
  49. 84
      lang/accesrestreint_fr_tu.php
  50. 84
      lang/accesrestreint_gl.php
  51. 84
      lang/accesrestreint_it.php
  52. 84
      lang/accesrestreint_lb.php
  53. 84
      lang/accesrestreint_nl.php
  54. 84
      lang/accesrestreint_pt_br.php
  55. 84
      lang/accesrestreint_ro.php
  56. 84
      lang/accesrestreint_sk.php
  57. 84
      lang/accesrestreint_sv.php
  58. 84
      lang/accesrestreint_tr.php
  59. 105
      plugin.xml
  60. 35
      prive/acces_restreint.html
  61. 10
      prive/editer/affecter_zones.html
  62. 13
      prive/editer/zone.html
  63. 3
      prive/editer/zone_auteurs.html
  64. 31
      prive/inclure/acces_rubrique.html
  65. 55
      prive/listes/auteurs_zone.html
  66. 26
      prive/listes/zones_auteur.html
  67. 34
      prive/style_prive_plugin_accesrestreint.html
  68. 178
      public/acces_restreint.php
  69. 25
      saisies/zones.html
  70. 22
      tests.html

70
.gitattributes

@ -0,0 +1,70 @@
* text=auto !eol
/acces_restreint_fonctions.php -text
/acces_restreint_options.php -text
/acces_restreint_pipelines.php -text
action/acceder_document.php -text
action/affecter_zone.php -text
action/autoriser.php -text
action/editer_zone.php -text
action/retirer_zone.php -text
action/supprimer_zone.php -text
base/acces_restreint.php -text
base/acces_restreint_install.php -text
exec/acces_restreint.php -text
exec/acces_restreint_config.php -text
exec/zones_edit.php -text
formulaires/affecter_zones.html -text
formulaires/affecter_zones.php -text
formulaires/editer_zone.html -text
formulaires/editer_zone.php -text
formulaires/inc-select_rubriques.html -text
formulaires/inc-select_zones.html -text
img_pack/acces-interdit-24.png -text
img_pack/acces-ok-24.png -text
img_pack/croix.png -text
img_pack/gpg-signature-bad.png -text
img_pack/gpg-signature-nokey.png -text
img_pack/gpg-signature-ok.png -text
img_pack/list-add-12.png -text
img_pack/list-add-16.png -text
img_pack/restreint-16.png -text
img_pack/wrapper.php -text
img_pack/zones-acces-24.gif -text
img_pack/zones-acces-24.png -text
img_pack/zones-acces-48.png -text
inc/acces_restreint.php -text
inc/acces_restreint_autoriser.php -text
/intro_article.html -text
lang/accesrestreint.xml -text
lang/accesrestreint_ar.php -text
lang/accesrestreint_ast.php -text
lang/accesrestreint_br.php -text
lang/accesrestreint_ca.php -text
lang/accesrestreint_de.php -text
lang/accesrestreint_en.php -text
lang/accesrestreint_es.php -text
lang/accesrestreint_eu.php -text
lang/accesrestreint_fa.php -text
lang/accesrestreint_fr.php -text
lang/accesrestreint_fr_tu.php -text
lang/accesrestreint_gl.php -text
lang/accesrestreint_it.php -text
lang/accesrestreint_lb.php -text
lang/accesrestreint_nl.php -text
lang/accesrestreint_pt_br.php -text
lang/accesrestreint_ro.php -text
lang/accesrestreint_sk.php -text
lang/accesrestreint_sv.php -text
lang/accesrestreint_tr.php -text
/plugin.xml -text
prive/acces_restreint.html -text
prive/editer/affecter_zones.html -text
prive/editer/zone.html -text
prive/editer/zone_auteurs.html -text
prive/inclure/acces_rubrique.html -text
prive/listes/auteurs_zone.html -text
prive/listes/zones_auteur.html -text
prive/style_prive_plugin_accesrestreint.html -text
public/acces_restreint.php -text
saisies/zones.html -text
/tests.html -text

274
acces_restreint_fonctions.php

@ -0,0 +1,274 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* filtre de securisation des squelettes
* utilise avec [(#REM|accesrestreint_securise_squelette)]
* evite divulgation d'info si plugin desactive
* par erreur fatale
*
* @param unknown_type $letexte
* @return unknown
*/
function accesrestreint_securise_squelette($letexte){
return "";
}
/**
* filtre de test pour savoir si l'acces a un article est restreint
*
* @param int $id_article
* @return bool
*/
function accesrestreint_article_restreint($id_article, $id_auteur=null){
include_spip('public/quete');
include_spip('inc/acces_restreint');
$article = quete_parent_lang('spip_articles',$id_article);
return
@in_array($article['id_rubrique'],
accesrestreint_liste_rubriques_exclues(!test_espace_prive(), $id_auteur)
);
}
/**
* filtre de test pour savoir si l'acces a une rubrique est restreinte
*
* @param int $id_rubrique
* @return bool
*/
function accesrestreint_rubrique_restreinte($id_rubrique, $id_auteur=null){
include_spip('inc/acces_restreint');
return
@in_array($id_rubrique,
accesrestreint_liste_rubriques_exclues(!test_espace_prive(), $id_auteur)
);
}
/**
* Filtre pour tester l'appartenance d'un auteur a une zone
*
* @param int $id_zone
* @param int $id_auteur
*/
function accesrestreint_acces_zone($id_zone,$id_auteur=null){
static $liste_zones = array();
if (is_null($id_auteur)) $id_auteur=$GLOBALS['visiteur_session']['id_auteur'];
if (!isset($liste_zones[$id_auteur])){
if ($GLOBALS['accesrestreint_zones_autorisees']
AND ($id_auteur==$GLOBALS['visiteur_session']['id_auteur']))
$liste_zones[$id_auteur] = explode(',',$GLOBALS['accesrestreint_zones_autorisees']);
elseif (!is_null($id_auteur)){
include_spip('inc/acces_restreint');
$liste_zones[$id_auteur] = explode(',',accesrestreint_liste_zones_autorisees('',$id_auteur));
}
}
return in_array($id_zone,$liste_zones[$id_auteur]);
}
/**
* fonction pour afficher une icone 12px selon le statut de l'auteur
*
* @param string $statut
* @return string
*/
function icone_auteur_12($statut){
if ($statut=='0minirezo') return _DIR_IMG_PACK . 'admin-12.gif';
if ($statut=='1comite') return _DIR_IMG_PACK . 'redac-12.gif';
return _DIR_IMG_PACK . 'visit-12.gif';
}
/**
* Retroune les identifiants des zones a laquelle appartient une rubrique
* et ses rubriques parentes
* (quelquesoit la visibilité de la zone (publique, prive, les 2 ou aucun)
*
* @param int $id_rubrique
* @return array identifiants des zones
**/
function accesrestreint_zones_rubrique_et_hierarchie($id_rubrique) {
static $zones = array();
if (!$id_rubrique) {
return array();
}
if (isset($zones[$id_rubrique])) {
return $zones[$id_rubrique];
}
// on teste notre rubrique deja
$idz = accesrestreint_zones_rubrique($id_rubrique);
// on parcours toute l'arborescence jusqu'a la racine en testant les zones
// pour completer les zones deja trouvees
if ($id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique))) {
// on teste notre parent
$idz_parent = accesrestreint_zones_rubrique_et_hierarchie($id_parent);
$idz = array_merge($idz, $idz_parent);
}
// on renvoie la rubrique
return $zones[$id_rubrique] = $idz;
}
/**
* Retroune les identifiants des zones a laquelle appartient une rubrique
* (quelquesoit la visibilité de la zone (publique, prive, les 2 ou aucun)
*
* @param int $id_rubrique
* @return array identifiants des zones
**/
function accesrestreint_zones_rubrique($id_rubrique) {
// on teste notre rubrique deja
$idz = sql_allfetsel('id_zone', 'spip_zones_rubriques', 'id_rubrique='. intval($id_rubrique));
if (is_array($idz)) {
$idz = array_map('reset', $idz);
return $idz;
}
return array();
}
/**
* Cherche si la rubrique donnée est inclue dans une zone d'accès restreinte.
*
* [(#ID_RUBRIQUE|accesrestreint_rubrique_zone_restreinte|oui) Rubrique non visible dans une zone]
* [(#ID_RUBRIQUE|accesrestreint_rubrique_zone_restreinte{tout}) Rubrique dans une zone ]
*
* @param int $id_rubrique : identifiant de la rubrique
* @param null|bool|'tout' Sélectionner les rubriques
* cachées dans le public (true),
* le privé (false),
* selon le contexte privé ou public (null),
* cachées ou non quelque soit le contexte ('tout')
* @return bool La rubrique est présente dans une zone
**/
function accesrestreint_rubrique_zone_restreinte($id_rubrique, $_publique=null) {
return
@in_array($id_rubrique,
accesrestreint_liste_rubriques_restreintes_et_enfants($_publique)
);
}
/**
* Retourne la liste de toutes les rubriques sélectionnées dans des zones
*
@param null|bool|'tout' Sélectionner les rubriques
* cachées dans le public (true),
* le privé (false),
* selon le contexte privé ou public (null),
* cachées ou non quelque soit le contexte ('tout')
* @return Array liste d'identifiants de rubriques
**/
function accesrestreint_liste_rubriques_restreintes($_publique = null) {
static $rubs = array();
// $_publique : null, true, false, 'tout'
$tout = false;
if (is_null($_publique)) {
$_publique = !test_espace_prive();
} elseif ($_publique === 'tout') {
$tout = true;
}
if (isset($rubs[$_publique])) {
return $rubs[$_publique];
}
$where = array('z.id_zone = zr.id_zone');
if (!$tout) {
if ($_publique) {
$where[] = 'publique=' . sql_quote('oui');
} else {
$where[] = 'privee=' . sql_quote('oui');
}
}
$idz = sql_allfetsel('DISTINCT(id_rubrique)', array('spip_zones_rubriques AS zr', 'spip_zones AS z'), $where);
if (is_array($idz)) {
$idz = array_map('reset', $idz);
return $rubs[$_publique] = $idz;
}
return $rubs[$_publique] = array();
}
/**
* Retourne la liste de toutes les rubriques sélectionnées dans des zones
*
* @param null|bool|'tout' Sélectionner les rubriques
* cachées dans le public (true),
* le privé (false),
* selon le contexte privé ou public (null),
* cachées ou non quelque soit le contexte ('tout')
* @return Array liste d'identifiants de rubriques
**/
function accesrestreint_liste_rubriques_restreintes_et_enfants($_publique = null) {
static $rubs = array();
if (is_null($_publique)) {
$_publique = !test_espace_prive();
}
if (isset($rubs[$_publique])) {
return $rubs[$_publique];
}
$parents = accesrestreint_liste_rubriques_restreintes($_publique);
if ($parents) {
include_spip('inc/rubriques');
$branches = explode(',', calcul_branche_in($parents));
return $rubs[$_publique] = $branches;
}
return $rubs[$_publique] = array();
}
/**
* Un auteur donné fait il partie d'une zone permettant de voir telle rubrique.
* Renvoie true, si l'auteur peut voir la rubrique,
* quelquesoit la visibilité des rubriques de la zone
*
* @param int $id_auteur Identifiant de l'auteur
* @param int $id_rubrique Identifiant de la rubrique
* @return bool L'auteur fait partie de la rubrique.
**/
function accesrestreint_auteur_lie_a_rubrique($id_auteur, $id_rubrique) {
if (!$id_auteur) return false;
if (!$id_rubrique) return false;
// $auteur[3][8] : l'auteur 3 ne peut pas voir la rubrique 8
static $auteurs = array();
if (!isset($auteurs[$id_auteur])) {
$auteurs[$id_auteur] = array();
include_spip('inc/acces_restreint');
$auteurs[$id_auteur] = array_flip(accesrestreint_liste_rubriques_exclues(true, $id_auteur, true));
}
// si la rubrique est presente, c'est qu'on ne peut pas la voir !
if (isset($auteurs[$id_auteur][$id_rubrique])) {
return false;
}
return true;
}
?>

32
acces_restreint_options.php

@ -0,0 +1,32 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
// declarer le pipeline pour le core
$GLOBALS['spip_pipeline']['accesrestreint_liste_zones_autorisees']='';
if (isset($GLOBALS['meta']["accesrestreint_base_version"])){
// Si on n'est pas connecte, aucune autorisation n'est disponible
// pas la peine de sortir la grosse artillerie
if (!isset($GLOBALS['auteur_session']['id_auteur'])){
$GLOBALS['accesrestreint_zones_autorisees'] = '';
}
else {
// Pipeline : calculer les zones autorisees, sous la forme '1,2,3'
// TODO : avec un petit cache pour eviter de solliciter la base de donnees
$GLOBALS['accesrestreint_zones_autorisees'] =
pipeline('accesrestreint_liste_zones_autorisees', '');
}
// Ajouter un marqueur de cache pour le differencier selon les autorisations
if (!isset($GLOBALS['marqueur'])) $GLOBALS['marqueur'] = '';
$GLOBALS['marqueur'] .= ":accesrestreint_zones_autorisees="
.$GLOBALS['accesrestreint_zones_autorisees'];
}
?>

117
acces_restreint_pipelines.php

@ -0,0 +1,117 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Ajouter le bouton de menu config si on a le droit
*
* @param unknown_type $boutons_admin
* @return unknown
*/
function accesrestreint_ajouter_boutons($boutons_admin) {
// si on est admin
if (autoriser('administrer','zone')) {
$menu = "configuration";
$icone = "img_pack/zones-acces-24.gif";
if (isset($boutons_admin['bando_configuration'])){
$menu = "bando_configuration";
$icone = "img_pack/zones-acces-24.gif";
}
// on voit le bouton dans la barre "naviguer"
$boutons_admin[$menu]->sousmenu['acces_restreint']= new Bouton(
_DIR_PLUGIN_ACCESRESTREINT.$icone, // icone
_T('accesrestreint:icone_menu_config') // titre
);
}
return $boutons_admin;
}
/**
* Ajouter la boite des zones sur la fiche auteur
*
* @param string $flux
* @return string
*/
function accesrestreint_affiche_milieu($flux){
switch($flux['args']['exec']) {
case 'auteur_infos':
$id_auteur = $flux['args']['id_auteur'];
$flux['data'] .=
recuperer_fond('prive/editer/affecter_zones',array('id_auteur'=>$id_auteur));
break;
}
return $flux;
}
/**
* Ajouter la boite des zones sur la fiche de rubrique
*
* @param string $flux
* @return string
*/
function accesrestreint_affiche_gauche($flux) {
if ($flux['args']['exec'] == 'naviguer'){
if (autoriser('administrer', 'zone', 0)) {
$flux['data'] .= recuperer_fond('prive/inclure/acces_rubrique', $_GET);
}
}
return $flux;
}
/**
* Detecter les demande d'acces aux pages restreintes
* et re-orienter vers une 401 si necessaire
*
* @param <type> $contexte
* @return <type>
*/
function accesrestreint_page_indisponible($contexte){
if ($contexte['status']=='404' AND isset($contexte['type'])){
$objet = $contexte['type'];
$table_sql = table_objet_sql($objet);
$id_table_objet = id_table_objet($objet);
if ($id = intval($contexte[$id_table_objet])){
$publie = true;
$restreint = false;
$trouver_table = charger_fonction('trouver_table','base');
$desc = $trouver_table($table_sql);
if (isset($desc['field']['statut'])){
$statut = sql_getfetsel('statut', $table_sql, "$id_table_objet=".intval($id));
if ($statut!='publie')
$publie = false;
}
include_spip('inc/autoriser');
if ($publie AND !autoriser('voir',$objet,$id)){
// c'est un contenu restreint
$contexte['status'] = '401';
$contexte['code'] = '401 Unauthorized';
$contexte['fond'] = '401';
$contexte['erreur'] = _T('accesrestreint:info_acces_restreint');
$contexte['cible'] = self();
}
}
}
return $contexte;
}
/**
* Permettre l'ajout de champs extras via le plugin Champs Extras 2
*
* @param
* @return
**/
function accesrestreint_objets_extensibles($objets){
return array_merge($objets, array('zone' => _T('accesrestreint:titre_zones_acces')));
}
?>

116
action/acceder_document.php

@ -0,0 +1,116 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2009 *
* 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. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/headers');
// acces aux documents joints securise
// verifie soit que le demandeur est authentifie
// soit que le document est publie, c'est-a-dire
// joint a au moins 1 article, breve ou rubrique publie
// http://doc.spip.org/@action_acceder_document_dist
function action_acceder_document_dist() {
include_spip('inc/documents');
// $file exige pour eviter le scan id_document par id_document
$f = rawurldecode(_request('file'));
$file = get_spip_doc($f);
$arg = rawurldecode(_request('arg'));
$status = $dcc = false;
if (strpos($f,'../') !== false
OR preg_match(',^\w+://,', $f)) {
$status = 403;
}
else if (!file_exists($file) OR !is_readable($file)) {
$status = 404;
} else {
$where = "documents.fichier=".sql_quote(set_spip_doc($file))
. ($arg ? " AND documents.id_document=".intval($arg): '');
$doc = sql_fetsel("documents.id_document, documents.titre, documents.fichier, types.mime_type, types.inclus, documents.extension", "spip_documents AS documents LEFT JOIN spip_types_documents AS types ON documents.extension=types.extension",$where);
if (!$doc) {
$status = 404;
} else {
// ETag pour gerer le status 304
$ETag = md5($file . ': '. filemtime($file));
if (isset($_SERVER['HTTP_IF_NONE_MATCH'])
AND $_SERVER['HTTP_IF_NONE_MATCH'] == $ETag) {
http_status(304); // Not modified
exit;
} else {
header('ETag: '.$ETag);
}
//
// Verifier les droits de lecture du document
// en controlant la cle passee en argument
//
include_spip('inc/securiser_action');
$cle = _request('cle');
if (!verifier_cle_action($doc['id_document'].','.$f, $cle)) {
spip_log("acces interdit $cle erronee");
$status = 403;
}
}
}
switch($status) {
case 403:
include_spip('inc/minipres');
echo minipres();
break;
case 404:
http_status(404);
include_spip('inc/minipres');
echo minipres(_T('erreur').' 404',
_T('info_document_indisponible'));
break;
default:
header("Content-Type: ". $doc['mime_type']);
// pour les images ne pas passer en attachment
// sinon, lorsqu'on pointe directement sur leur adresse,
// le navigateur les downloade au lieu de les afficher
if ($doc['inclus']=='non') {
$f = basename($file);
// ce content-type est necessaire pour eviter des corruptions de zip dans ie6
header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename=\"$f\";");
header("Content-Transfer-Encoding: binary");
// fix for IE catching or PHP bug issue
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
}
if ($cl = filesize($file))
header("Content-Length: ". $cl);
readfile($file);
break;
}
}
?>

24
action/affecter_zone.php

@ -0,0 +1,24 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
function action_affecter_zone_dist(){
$securiser_action = charger_fonction('securiser_action','inc');
$arg = $securiser_action();
if (preg_match(',^([0-9]+|-1)-([a-z]+)-([0-9]+|-1)$,',$arg,$regs)
AND $regs[2]=='auteur') {
$id_zone = intval($regs[1]);
$id_auteur = intval($regs[3]);
include_spip('action/editer_zone');
if ($id_auteur==-1)
$id_auteur = array_map('reset',sql_allfetsel('id_auteur','spip_auteurs',"statut!='poub'"));
accesrestreint_revision_zone_objets_lies($id_zone=='-1'?'':$id_zone,$id_auteur,'auteur');
}
}
?>

55
action/autoriser.php

@ -0,0 +1,55 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2008 *
* 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. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/charsets'); # pour le nom de fichier
include_spip('base/abstract_sql');
// acces aux documents joints securise
// est appelee avec arg comme parametre CGI
// mais peu aussi etre appele avec le parametre file directement
// il verifie soit que le demandeur est authentifie
// soit que le fichier est joint a au moins 1 article, breve ou rubrique publie
// http://doc.spip.org/@action_autoriser_dist
function action_autoriser_dist()
{
$arg = intval(_request('arg'));
if (!autoriser('voir','document',$arg)
OR !($row = sql_fetsel("fichier","spip_documents","id_document=".intval($arg)))
OR !($file = $row['fichier'])
OR !(file_exists($file))
) {
spip_log("Acces refuse (restreint) au document " . $arg . ': ' . $file);
redirige_par_entete('./?page=404');
}
else {
if (!function_exists('mime_content_type')) {
// http://doc.spip.org/@mime_content_type
function mime_content_type($f) {preg_match("/\.(\w+)/",$f,$r); return $r[1];}
}
$ct = mime_content_type($file);
$cl = filesize($file);
$filename = basename($file);
header("Content-Type: ". $ct);
header("Content-Disposition: attachment; filename=\"". $filename ."\";");
if ($dcc) header("Content-Description: " . $dcc);
if ($cl) header("Content-Length: ". $cl);
header("Content-Transfer-Encoding: binary");
readfile($file);
}
}
?>

158
action/editer_zone.php

@ -0,0 +1,158 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
/**
* editer une zone (action apres creation/modif de zone)
*
* @return array
*/
function action_editer_zone_dist(){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
// si id_article n'est pas un nombre, c'est une creation
// mais on verifie qu'on a toutes les donnees qu'il faut.
if (!$id_zone = intval($arg)) {
if (!$id_zone = accesrestreint_action_insert_zone())
return array(false,_L('echec'));
// ajouter les droits a l'admin si demande, lors de la creation
if (_request('droits_admin')){
accesrestreint_revision_zone_objets_lies($id_zone,$GLOBALS['visiteur_session']['id_auteur'],'auteur');
}
}
$err = action_zone_set($id_zone);
return array($id_zone,$err);
}
/**
* mettre a jour une zone
*
* @param int $id_zone
* @return string
*/
function action_zone_set($id_zone){
$err = '';
$c = array();
foreach (array(
'titre', 'descriptif',
) as $champ)
$c[$champ] = _request($champ);
foreach (array(
'publique', 'privee'
) as $champ)
$c[$champ] = _request($champ)=='oui'?'oui':'non';
include_spip('inc/modifier');
accesrestreint_revision_zone($id_zone, $c);
accesrestreint_revision_zone_objets_lies($id_zone, _request('rubriques'),'rubrique','set');
return $err;
}
/**
* Mettre a jour les liens objets/zones.
* si zones vaut '', associe toutes les zones a(aux) objets(s).
* $ids est une liste d'id.
* $type est le type de l'objet (rubrique, auteur).
* $operation = add/set/del pour ajouter, affecter uniquement, ou supprimer les objets listes dans ids.
*
* @param int/array $zones
* @param int/array $ids
* @param string $type
*/
function accesrestreint_revision_zone_objets_lies($zones,$ids,$type,$operation = 'add'){
include_spip('inc/autoriser');
$in = "";
if ($zones){
$in = sql_in('id_zone',$zones);
}
$liste = sql_allfetsel('id_zone','spip_zones',$in);
foreach($liste as $row){
if ($operation=='del'){
// on supprime les ids listes
sql_delete("spip_zones_{$type}s",array("id_zone=".intval($row['id_zone']),sql_in("id_$type",$ids)));
}
else {
if (!$ids) $ids = array();
elseif (!is_array($ids)) $ids = array($ids);
// si c'est une affectation exhaustive, supprimer les existants qui ne sont pas dans ids
// si c'est un ajout, ne rien effacer
if ($operation=='set')
sql_delete("spip_zones_{$type}s",array("id_zone=".intval($row['id_zone']),sql_in("id_$type",$ids,"NOT")));
$deja = array_map('reset',sql_allfetsel("id_$type","spip_zones_{$type}s","id_zone=".intval($row['id_zone'])));
$add = array_diff($ids,$deja);
foreach ($add as $id) {
if (autoriser('affecterzones',$type,$id,null,array('id_zone'=>$row['id_zone'])))
sql_insertq("spip_zones_{$type}s",array('id_zone'=>$row['id_zone'],"id_$type"=>intval($id)));
}
}
}
}
/**
* Creer une nouvelle zone
*
* @return int
*/
function accesrestreint_action_insert_zone(){
include_spip('inc/autoriser');
if (!autoriser('creer','zone'))
return false;
// nouvel zone
$id_zone = sql_insertq("spip_zones", array("maj"=>"NOW()", 'publique'=>'non','privee'=>'non'));
if (!$id_zone){
spip_log("accesrestreint action : impossible d'ajouter un zone");
return false;
}
return $id_zone;
}
/**
* Enregistre la revision d'une zone
*
* @param int $id_zone
* @param array $c
* @return string
*/
function accesrestreint_revision_zone($id_zone, $c=false) {
modifier_contenu('zone', $id_zone,
array(
'nonvide' => array('titre' => _T('info_sans_titre')),
),
$c);
return ''; // pas d'erreur
}
/**
* Supprimer une zone
*
* @param unknown_type $supp_zone
* @return unknown
*/
function accesrestreint_supprime_zone($id_zone){
$supp_zone = sql_getfetsel("id_zone", "spip_zones", "id_zone=" . intval($id_zone));
if (intval($id_zone) AND intval($id_zone) == intval($supp_zone)){
// d'abord les auteurs
sql_delete("spip_zones_auteurs", "id_zone=".intval($id_zone));
// puis la portee
sql_delete("spip_zones_rubriques", "id_zone=".intval($id_zone));
// puis la zone
sql_delete("spip_zones", "id_zone=".intval($id_zone));
}
$id_zone = 0;
return $id_zone;
}
?>

24
action/retirer_zone.php

@ -0,0 +1,24 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
function action_retirer_zone_dist(){
$securiser_action = charger_fonction('securiser_action','inc');
$arg = $securiser_action();
if (preg_match(',^([0-9]+|-1)-([a-z]+)-([0-9]+|-1)$,',$arg,$regs)){
$id_zone = intval($regs[1]);
$type = $regs[2];
$id_objet = intval($regs[3]);
include_spip('action/editer_zone');
if ($id_objet=='-1')
accesrestreint_revision_zone_objets_lies($id_zone,array(),$type,'set');
else
accesrestreint_revision_zone_objets_lies($id_zone,$id_objet,$type,'del');
}
}
?>

19
action/supprimer_zone.php

@ -0,0 +1,19 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
function action_supprimer_zone_dist(){
$securiser_action = charger_fonction('securiser_action','inc');
$arg = $securiser_action();
if ($id_zone = intval($arg)
AND autoriser('supprimer','zone',$id_zone)) {
include_spip('action/editer_zone');
accesrestreint_supprime_zone($id_zone);
}
}
?>

75
base/acces_restreint.php

@ -0,0 +1,75 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
function accesrestreint_declarer_tables_interfaces($interface){
$interface['tables_jointures']['spip_auteurs'][] = 'zones_auteurs';
$interface['tables_jointures']['spip_zones'][] = 'zones_auteurs';
$interface['tables_jointures']['spip_rubriques'][] = 'zones_rubriques';
$interface['tables_jointures']['spip_zones'][] = 'zones_rubriques';
//-- Table des tables ----------------------------------------------------
$interface['table_des_tables']['zones']='zones';
/*if (version_compare($spip_version_code,'1.9250','<')) {
$table_des_tables['zones_rubriques']='zones_rubriques';
$table_des_tables['zones_auteurs']='zones_auteurs';
}*/
return $interface;
}
function accesrestreint_declarer_tables_principales($tables_principales){
$spip_zones = array(
"id_zone" => "bigint(21) NOT NULL",
"titre" => "varchar(255) DEFAULT '' NOT NULL",
"descriptif" => "text DEFAULT '' NOT NULL",
"publique" => "ENUM('non', 'oui') DEFAULT 'oui' NOT NULL",
"privee" => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL",
"maj" => "TIMESTAMP");
$spip_zones_key = array(
"PRIMARY KEY" => "id_zone");
$tables_principales['spip_zones'] = array(
'field' => &$spip_zones,
'key' => &$spip_zones_key);
return $tables_principales;
}
function accesrestreint_declarer_tables_auxiliaires($tables_auxiliaires){
$spip_zones_auteurs = array(
"id_zone" => "bigint(21) NOT NULL",
"id_auteur" => "bigint(21) NOT NULL");
$spip_zones_auteurs_key = array(
"PRIMARY KEY" => "id_zone, id_auteur",
"KEY id_auteur" => "id_auteur");
$tables_auxiliaires['spip_zones_auteurs'] = array(
'field' => &$spip_zones_auteurs,
'key' => &$spip_zones_auteurs_key);
$spip_zones_rubriques = array(
"id_zone" => "bigint(21) NOT NULL",
"id_rubrique" => "bigint(21) NOT NULL");
$spip_zones_rubriques_key = array(
"PRIMARY KEY" => "id_zone, id_rubrique",
"KEY id_rubrique" => "id_rubrique");
$tables_auxiliaires['spip_zones_rubriques'] = array(
'field' => &$spip_zones_rubriques,
'key' => &$spip_zones_rubriques_key);
return $tables_auxiliaires;
}
?>

84
base/acces_restreint_install.php

@ -0,0 +1,84 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/meta');
/**
* Fonction d'installation, mise a jour de la base
*
* @param unknown_type $nom_meta_base_version
* @param unknown_type $version_cible
*/
function accesrestreint_upgrade($nom_meta_base_version,$version_cible){
$current_version = 0.0;
if ( (!isset($GLOBALS['meta'][$nom_meta_base_version]) )
|| (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){
include_spip('base/acces_restreint');
if (version_compare($current_version,'0.0','<=')){
include_spip('base/create');
include_spip('base/abstract_sql');
creer_base();
// ajout des champs publique/privee si pas existants
$desc = sql_showtable("spip_zones", true);
if (!isset($desc['field']['publique']))
sql_alter("TABLE spip_zones ADD publique ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER descriptif");
if (!isset($desc['field']['privee']))
sql_alter("TABLE spip_zones ADD privee ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER publique");
echo "AccesRestreint Install<br/>";
effacer_meta($nom_meta_base_version); // salade de majuscules
ecrire_meta($nom_meta_base_version,$current_version=$version_cible,'non');
}
if (version_compare($current_version,'0.2','<')){
include_spip('base/create');
include_spip('base/abstract_sql');
// ajout des champs publique/privee si pas existants
$desc = sql_showtable("spip_zones", true);
if (!isset($desc['field']['publique']))
sql_alter("TABLE spip_zones ADD publique ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER descriptif");
if (!isset($desc['field']['privee']))
sql_alter("TABLE spip_zones ADD privee ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER publique");
echo "AccesRestreint@0.2<br />";
ecrire_meta($nom_meta_base_version,$current_version='0.2','non');
}
if (version_compare($current_version,'0.3','<')){
sql_alter("TABLE `zones_auteurs` DROP INDEX `id_zone`");
sql_alter("TABLE `zones_auteurs` ADD PRIMARY KEY ( `id_zone` , `id_auteur` )");
sql_alter("TABLE `zones_rubriques` DROP INDEX `id_zone`");
sql_alter("TABLE `zones_rubriques` ADD PRIMARY KEY ( `id_zone` , `id_rubrique` )");
echo "AccesRestreint@0.3<br />";
ecrire_meta($nom_meta_base_version,$current_version='0.3','non');
}
if (version_compare($current_version,'0.3.0.1','<')){
#ecrire_meta('creer_htaccess','oui');
echo "AccesRestreint@0.3.0.1<br />";
ecrire_meta($nom_meta_base_version,$current_version='0.3.0.1','non');
}
if (version_compare($current_version,'0.3.0.2','<')){
#ecrire_meta('creer_htaccess','oui');
sql_alter("TABLE spip_zone ALTER titre SET DEFAULT ''");
sql_alter("TABLE spip_zone ALTER descriptif SET DEFAULT ''");
echo "AccesRestreint@0.3.0.2<br />";
ecrire_meta($nom_meta_base_version,$current_version='0.3.0.2','non');
}
}
}
/**
* Fonction de desinstallation
*
* @param unknown_type $nom_meta_base_version
*/
function accesrestreint_vider_tables($nom_meta_base_version) {
sql_drop_table("spip_zones");
sql_drop_table("spip_zones_auteurs");
sql_drop_table("spip_zones_rubriques");
effacer_meta('creer_htaccess');
effacer_meta($nom_meta_base_version);
}
?>

47
exec/acces_restreint.php

@ -0,0 +1,47 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/acces_restreint_base');
include_spip('inc/acces_restreint_gestion');
include_spip('inc/presentation');
function exec_acces_restreint(){
if (!autoriser('administrer','zone',0)) {
include_spip('inc/minipres');
echo minipres();
exit;
}
$commencer_page = charger_fonction('commencer_page','inc');
echo $commencer_page(_T('accesrestreint:page_zones_acces'));
echo gros_titre(_T('accesrestreint:titre_zones_acces'),'',false);
echo debut_gauche("acces_restreint",true);
echo debut_boite_info(true);
echo propre(_T('accesrestreint:info_page'));
echo fin_boite_info(true);
if (autoriser('webmestre')) {
$res = icone_horizontale(_L('Configuration des acc&#232;s .htaccess'), generer_url_ecrire("acces_restreint_config"), "../"._DIR_PLUGIN_ACCESRESTREINT."/img_pack/zones-acces-24.gif", "cadenas-24.gif",false);
echo bloc_des_raccourcis($res);
}
echo debut_droite("acces_restreint",true);
echo recuperer_fond('prive/acces_restreint',$_GET);
if (autoriser('modifier','zone'))
echo "<div>".icone_inline(_T('accesrestreint:creer_zone'),
generer_url_ecrire("zones_edit","new=oui"),
_DIR_PLUGIN_ACCESRESTREINT."/img_pack/zones-acces-24.gif",
"creer.gif",'right')."</div>";
echo fin_gauche(),fin_page();
}
?>

148
exec/acces_restreint_config.php

@ -0,0 +1,148 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/acces_restreint_base');
include_spip('inc/acces_restreint_gestion');
include_spip('inc/presentation');
include_spip('inc/config');
// devrait etre une bonne "action"
function accesrestreint_appliquer_modifs_config() {
include_spip('inc/meta');
// modifs de secu (necessitent une authentification ftp)
$liste_meta = array(
'creer_htpasswd',
'creer_htaccess'
);
foreach($liste_meta as $i) {
if (_request($i) !== NULL
AND _request($i) != $GLOBALS['meta'][$i]) {
$admin = _T('info_modification_parametres_securite');
include_spip('inc/admin');
echo debut_admin(_request('exec'), $admin);
foreach($liste_meta as $i) {
if (_request($i) !== NULL) {
ecrire_meta($i, _request($i));
}
}
ecrire_metas();
echo fin_admin($admin);
break;
}
}
}
// affiche la page de configuration
function exec_acces_restreint_config(){
if (!autoriser('webmestre')) {
include_spip('inc/minipres');
echo minipres();
exit;
}
include_spip('inc/config');
inc_config_dist();
if (_request('changer_config') == 'oui')
accesrestreint_appliquer_modifs_config();
pipeline('exec_init',array('args'=>array('exec'=>'acces_restreint_config'),'data'=>''));
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page(_T('titre_page_config'), "configuration", "configuration");
echo gros_titre(_T('titre_config_fonctions'),'',false);
echo debut_gauche('',true);
echo pipeline('affiche_gauche',array('args'=>array('exec'=>'acces_restreint_config'),'data'=>''));
echo creer_colonne_droite('',true);
echo pipeline('affiche_droite',array('args'=>array('exec'=>'acces_restreint_config'),'data'=>''));
//Raccourcis
$res = icone_horizontale(_T('accesrestreint:voir_toutes'), generer_url_ecrire("acces_restreint",''), "../"._DIR_PLUGIN_ACCESRESTREINT."/img_pack/zones-acces-24.gif", 'rien.gif',false);
echo bloc_des_raccourcis($res);
echo debut_droite('',true);
lire_metas();
$action = generer_url_ecrire('acces_restreint_config');
echo "<form action='$action' method='post'><div>", form_hidden($action);
echo "<input type='hidden' name='changer_config' value='oui' />";
accesrestreint_htaccess_config();
accesrestreint_htpasswd_config();
echo '</div></form>';
echo pipeline('affiche_milieu',array('args'=>array('exec'=>'acces_restreint_config'),'data'=>''));
echo fin_gauche(), fin_page();
}
//
// Le core de SPIP sait gerer ces options de configuration
//
function accesrestreint_htaccess_config() {
global $spip_lang_right;
echo debut_cadre_trait_couleur("cadenas-24.gif", true, "",
_L("Acc&egrave;s aux document joints par leur URL"));
include_spip('inc/acces');
$creer_htaccess = gerer_htaccess();
echo "<div class='verdana2'>";
echo _L("Cette option interdit la lecture des documents joints si le texte auquel ils se rattachent n'est pas publi&eacute");
echo "</div>";
echo "<div class='verdana2'>";
echo afficher_choix('creer_htaccess', $creer_htaccess,
array('oui' => _L("interdire la lecture"),
'non' => _L("autoriser la lecture")),
' &nbsp; ');
echo "</div>";
echo "<div style='text-align:$spip_lang_right'><input type='submit' value='"._T('bouton_valider')."' class='fondo' /></div>";
echo fin_cadre_trait_couleur(true);
echo "<br />";
}
function accesrestreint_htpasswd_config() {
global $spip_lang_right;
include_spip('inc/acces');
ecrire_acces();
echo debut_cadre_trait_couleur("cadenas-24.gif", true, "",
_T('info_fichiers_authent'));
$creer_htpasswd = $GLOBALS['meta']["creer_htpasswd"];
echo "<div class='verdana2'>", _T('texte_fichier_authent', array('dossier' => '<tt>'.joli_repertoire(_DIR_TMP).'</tt>')), "</div>";
echo "<div class='verdana2'>";
echo afficher_choix('creer_htpasswd', $creer_htpasswd,
array('oui' => _T('item_creer_fichiers_authent'),
'non' => _T('item_non_creer_fichiers_authent')),
' &nbsp; ');
echo "</div>";
echo "<div style='text-align:$spip_lang_right'><input type='submit' value='"._T('bouton_valider')."' class='fondo' /></div>";
echo fin_cadre_trait_couleur(true);
}
?>

70
exec/zones_edit.php

@ -0,0 +1,70 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2008 *
* 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. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/presentation');
include_spip('base/abstract_sql');
function exec_zones_edit_dist(){
$new = _request('new');
$id_zone = intval(_request('id_zone'));
$row = sql_fetsel('*','spip_zones','id_zone='.intval($id_zone));
if ((!$new AND !$row)
OR ($new AND !autoriser('creer','zone'))
OR (!$new AND (!autoriser('modifier', 'zone', $id_zone)))
) {
include_spip('inc/minipres');
echo minipres(_T('accesrestreint:aucune_zone'));
}
else zones_edit($id_zone, $new, '', $row);
}
function zones_edit($id_zone, $new, $config_fonc, $row)
{
$id_zone = $row['id_zone'];
$commencer_page = charger_fonction('commencer_page', 'inc');
pipeline('exec_init',array('args'=>array('exec'=>'zones_edit','id_zone'=>$id_zone),'data'=>''));
echo $commencer_page(intval($id_zone)?_T('accesrestreint:titre_cadre_modifier_zone'):_T('accesrestreint:creer_zone'), "naviguer", "zones", 0);
echo debut_gauche("",true);
echo recuperer_fond("prive/editer/zone_auteurs", $_GET);
echo pipeline('affiche_gauche',array('args'=>array('exec'=>'zones_edit','id_zone'=>$id_zone),'data'=>''));
echo creer_colonne_droite("",true);
echo pipeline('affiche_droite',array('args'=>array('exec'=>'zones_edit','id_zone'=>$id_zone),'data'=>''));
echo debut_droite("",true);
$oups = _request('retour') ? _request('retour') :
($id_article ?
generer_url_ecrire("acces_restreint")
: generer_url_ecrire()
);
$contexte = array(
'icone_retour'=>icone_inline(_T('icone_retour'), $oups, _DIR_PLUGIN_ACCESRESTREINT."img_pack/zones-acces-24.png", "rien.gif",$GLOBALS['spip_lang_left']),
'redirect'=>_request('retour') ? _request('retour') : generer_url_ecrire('acces_restreint'),
'titre'=>$titre,
'new'=>$new?$new:$row['id_zone'],
'config_fonc'=>$config_fonc,
);
$milieu = recuperer_fond("prive/editer/zone", $contexte);
echo pipeline('affiche_milieu',array('args'=>array('exec'=>'zones_edit','id_zone'=>$id_zone),'data'=>$milieu));
echo fin_gauche(), fin_page();
}
?>

30
formulaires/affecter_zones.html

@ -0,0 +1,30 @@
[(#REM)
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
][(#INCLURE{fond=prive/listes/zones_auteur}{id_auteur}{editable}{ajax})]
<div class="formulaire_spip formulaire_editer formulaire_editer_affecter_zones formulaire_editer_affecter_zones-#ENV{id_auteur}">
<!-- <br class='bugajaxie' /> -->
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[(#ENV{editable}) [
<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<input name='id_auteur' value='#ID_AUTEUR' type='hidden' />
<ul>
<li class="editer_zone[ (#ENV**{erreurs}|table_valeur{zone}|oui)erreur]">
<label for="zone"><:accesrestreint:titre_ajouter_zone:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{zone})</span>
](#INCLURE{fond=formulaires/inc-select_zones}{name=zone}{id=zone}{id_auteur})
</li>
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'><input type='submit' class='submit' value='<:bouton_ajouter:>' /></p>
</div></form>]
]
</div>

22
formulaires/affecter_zones.php

@ -0,0 +1,22 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
function formulaires_affecter_zones_charger_dist($id_auteur){
$valeurs = array('zone'=>'','id_auteur'=>$id_auteur,'id'=>$id_auteur);
include_spip('inc/autoriser');
if (!autoriser('affecterzones','auteur',$id_auteur)){
$valeurs['editable'] = false;
}
return $valeurs;
}
function formulaires_affecter_zones_traiter_dist($id_auteur){
/* ajout d'une zone */
include_spip('action/editer_zone');
accesrestreint_revision_zone_objets_lies(intval(_request('zone')),$id_auteur,'auteur');
return array('editable'=>true,'message'=>'');
}

41
formulaires/editer_zone.html

@ -0,0 +1,41 @@
<div class="formulaire_spip formulaire_editer formulaire_editer_zone formulaire_editer_zone-#ENV{id_zone,nouveau}">
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[(#ENV{editable})
<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<input type='hidden' name='id_zone' value='#ID_ZONE' />
<ul>
<li class="editer_titre obligatoire[ (#ENV**{erreurs}|table_valeur{titre}|oui)erreur]">
<label for="titre"><:accesrestreint:titre_zones_acces:></label>
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{titre})</span>]
<input type='text' class='text' name='titre' id='titre' value="#ENV{titre}" />
</li>
[(#ENV{id_zone}|intval|non|et{#AUTORISER{modifier,zone}})
<li class='editer_droit_admin'>
<div class='choix'><input type='checkbox' name='droits_admin' value='oui' id='droits_admin' checked="checked" />
<label for='droits_admin'><:accesrestreint:ajouter_droits_auteur:></label></div>
</li>]
<li class='editer_publique_privee'>
<div class='choix'><input type='checkbox' name='publique' value='oui' id='publique'[ (#PUBLIQUE|=={oui}|oui)checked="checked"] />
<label for='publique'><:accesrestreint:zone_restreinte_publique:></label></div>
<div class='choix'><input type='checkbox' name='privee' value='oui' id='privee'[ (#PRIVEE|=={oui}|oui)checked="checked"] />
<label for='privee'><:accesrestreint:zone_restreinte_espace_prive:></label></div>
</li>
<li class="editer_descriptif[ (#ENV**{erreurs}|table_valeur{descriptif}|oui)erreur]">
<label for="descriptif"><:accesrestreint:descriptif:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{descriptif})</span>
]<textarea name='descriptif' rows='5' id='descriptif'>[(#ENV{descriptif})]</textarea>
</li>
<li class='editer_rubriques fieldset'><fieldset><legend><:accesrestreint:rubriques_zones_acces:></legend>
[(#INCLURE{fond=formulaires/inc-select_rubriques}{rubriques=#ENV{rubriques}})]</fieldset>
</li>
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'><input type='submit' class='submit' value='[(#ENV{id_zone}|?{<:bouton_enregistrer:>,<:bouton_ajouter:>})]' /></p>
</div></form>
]
</div>

57
formulaires/editer_zone.php

@ -0,0 +1,57 @@
<?php
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
include_spip('inc/actions');
include_spip('inc/editer');
function formulaires_editer_zone_charger_dist($id_zone='new', $retour='', $config_fonc='zones_edit_config', $row=array(), $hidden=''){
$valeurs = formulaires_editer_objet_charger('zone',$id_zone,0,0,$retour,$config_fonc,$row,$hidden);
include_spip('inc/acces_restreint');
// charger les rubriques associees a la zone
if ($id_zone = intval($id_zone)) {
$valeurs['rubriques'] = accesrestreint_liste_contenu_zone_rub_direct($id_zone);
} {
// cas d'une creation, regardons si l'url propose deja des rubriques
if ($r = _request('rubriques')) {
if (is_numeric($r)) {
$r = array($r);
}
if (is_array($r)) {
$valeurs['rubriques'] = $r;
}
}
}
return $valeurs;
}
function zones_edit_config(){
return array();
}
function formulaires_editer_zone_verifier_dist($id_zone='new', $retour='', $config_fonc='zones_edit_config', $row=array(), $hidden=''){
$erreurs = formulaires_editer_objet_verifier('zone',$id_zone,array('titre'));
return $erreurs;
}
function formulaires_editer_zone_traiter_dist($id_zone='new', $retour='', $config_fonc='zones_edit_config', $row=array(), $hidden=''){
$message = "";
$action_editer = charger_fonction("editer_zone",'action');
list($id,$err) = $action_editer();
if ($err){
$message .= $err;
}
elseif ($retour) {
include_spip('inc/headers');
$retour = parametre_url($retour,'id_zone',$id);
$message .= redirige_formulaire($retour);
}
return $message;
}
?>

14
formulaires/inc-select_rubriques.html

@ -0,0 +1,14 @@
<B_rubriques>
<ul class='hierarchie'>
<li[(#VAL{0}|in_any{#ENV{rubriques}})class='checked']><div class='choix'><input type='checkbox' name='rubriques[]' value='0' id='rub0' [(#VAL{0}|in_any{#ENV{rubriques}})checked='checked']/><label for='rub0'><:info_racine_site:></label></div><ul>
<BOUCLE_rubriques(RUBRIQUES){racine}{par num titre,titre}{tout}{tout_voir}>
<li[(#ID_RUBRIQUE|in_any{#ENV{rubriques}})class='checked']><div class='choix'><input type='checkbox' name='rubriques[]' value='#ID_RUBRIQUE' id='rub#ID_RUBRIQUE' [(#ID_RUBRIQUE|in_any{#ENV{rubriques}})checked='checked']/><label for='rub#ID_RUBRIQUE'>#TITRE</label></div><B_enfants><ul>
<BOUCLE_enfants(RUBRIQUES){id_parent}{par num titre,titre}{tout}{tout_voir}>
<li[(#ID_RUBRIQUE|in_any{#ENV{rubriques}})class='checked']><div class='choix'><input type='checkbox' name='rubriques[]' value='#ID_RUBRIQUE' id='rub#ID_RUBRIQUE' [(#ID_RUBRIQUE|in_any{#ENV{rubriques}})checked='checked']/><label for='rub#ID_RUBRIQUE'>#TITRE</label></div><BOUCLE_rec(BOUCLE_enfants)/></li>
</BOUCLE_enfants>
</ul>
</B_enfants>
</li>
</BOUCLE_rubriques>
</ul></ul>
</B_rubriques>

16
formulaires/inc-select_zones.html

@ -0,0 +1,16 @@
[(#REM)
/**
* Plugin Acces Restreint 3.0 pour Spip 2.0
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
]<B_zones>
<select[ name='(#ENV{name})'][ id='(#ENV{id})'] size='1'>
<option value='x'><:accesrestreint:selectionner_une_zone:></option>
<BOUCLE_zones(ZONES){!id_auteur=#ID_AUTEUR}>[
(#AUTORISER{affecterzones,auteur,#ID_AUTEUR,'',#ARRAY{id_zone,#ID_ZONE}}|oui)<option value='#ID_ZONE'>#TITRE</option>
]</BOUCLE_zones>
</select>[
(#TOTAL_BOUCLE|>{3}|oui)
<a href='#URL_ACTION_AUTEUR{affecter_zone,-1-auteur-#ID_AUTEUR,#SELF}'><:accesrestreint:info_ajouter_zones:></a>]
</B_zones>

BIN
img_pack/acces-interdit-24.png

After

Width: 24  |  Height: 24  |  Size: 775 B

BIN
img_pack/acces-ok-24.png

After

Width: 24  |  Height: 24  |  Size: 1.0 KiB

BIN
img_pack/croix.png

After

Width: 12  |  Height: 12  |  Size: 195 B

BIN
img_pack/gpg-signature-bad.png

After

Width: 48  |  Height: 48  |  Size: 4.1 KiB

BIN
img_pack/gpg-signature-nokey.png