Valider 5c62981e rédigé par guy.cesaro@gmail.com's avatar guy.cesaro@gmail.com
Parcourir les fichiers

rangement phase 1 et demi

parent
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours

.gitattributes

0 → 100644
+70 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
* 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 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?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;
	
}


?>
+33 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?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'];
}

?>
 No newline at end of file
+117 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?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')));
}

?>
+117 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?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;
	}

}

?>
 No newline at end of file