v3.15
kent1@arscenic.info 7 years ago
parent a0f06769e4
commit 1886309e34

@ -5,7 +5,9 @@
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/meta');
/**
@ -14,11 +16,13 @@ include_spip('inc/meta');
* @param unknown_type $nom_meta_base_version
* @param unknown_type $version_cible
*/
function accesrestreint_upgrade($nom_meta_base_version,$version_cible){
function accesrestreint_upgrade($nom_meta_base_version, $version_cible) {
// le prefixe est passe des majuscules aux minuscules :
if (isset($GLOBALS['meta']['AccesRestreint_base_version']) AND !isset($GLOBALS['meta'][$nom_meta_base_version]))
if (isset($GLOBALS['meta']['AccesRestreint_base_version'])
and !isset($GLOBALS['meta'][$nom_meta_base_version])) {
$GLOBALS['meta'][$nom_meta_base_version] = $GLOBALS['meta']['AccesRestreint_base_version'];
}
$maj = array();
$maj['create'] = array(
@ -32,10 +36,10 @@ function accesrestreint_upgrade($nom_meta_base_version,$version_cible){
array('maj_tables',array('spip_zones')), // publique, privee
);
$maj['0.3.0'] = array(
array('sql_alter',"TABLE spip_zones_auteurs DROP INDEX id_zone"),
array('sql_alter',"TABLE spip_zones_auteurs ADD PRIMARY KEY ( id_zone , id_auteur )"),
array('sql_alter',"TABLE spip_zones_rubriques DROP INDEX id_zone"),
array('sql_alter',"TABLE spip_zones_rubriques ADD PRIMARY KEY ( id_zone , id_rubrique )"),
array('sql_alter', 'TABLE spip_zones_auteurs DROP INDEX id_zone'),
array('sql_alter', 'TABLE spip_zones_auteurs ADD PRIMARY KEY ( id_zone , id_auteur )'),
array('sql_alter', 'TABLE spip_zones_rubriques DROP INDEX id_zone'),
array('sql_alter', 'TABLE spip_zones_rubriques ADD PRIMARY KEY ( id_zone , id_rubrique )'),
);
$maj['0.3.1'] = array(
array('sql_alter',"TABLE spip_zones ALTER titre SET DEFAULT ''"),
@ -44,11 +48,11 @@ function accesrestreint_upgrade($nom_meta_base_version,$version_cible){
include_spip('maj/svn10000');
$maj['0.4.0'] = array(
array('maj_liens','zone'), // creer la table zones_liens
array('maj_liens','zone','auteur'),
array('sql_drop_table',"spip_zones_auteurs"),
array('maj_liens','zone','rubrique'),
array('sql_drop_table',"spip_zones_rubriques"),
array('maj_liens', 'zone'), // creer la table zones_liens
array('maj_liens','zone', 'auteur'),
array('sql_drop_table', 'spip_zones_auteurs'),
array('maj_liens','zone', 'rubrique'),
array('sql_drop_table', 'spip_zones_rubriques'),
);
$maj['0.4.1'] = array(
array('sql_alter',"TABLE spip_zones CHANGE publique publique char(3) DEFAULT 'oui' NOT NULL"),
@ -62,12 +66,12 @@ function accesrestreint_upgrade($nom_meta_base_version,$version_cible){
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
function accesrestreint_upgrade_protection_documents(){
if (isset($GLOBALS['meta']["creer_htaccess"])
AND $GLOBALS['meta']["creer_htaccess"] == 'oui'
AND !isset($GLOBALS['meta']["accesrestreint_proteger_documents"])){
ecrire_meta("accesrestreint_proteger_documents","oui");
include_spip("inc/accesrestreint_documents");
function accesrestreint_upgrade_protection_documents() {
if (isset($GLOBALS['meta']['creer_htaccess'])
and $GLOBALS['meta']['creer_htaccess'] == 'oui'
and !isset($GLOBALS['meta']['accesrestreint_proteger_documents'])) {
ecrire_meta('accesrestreint_proteger_documents', 'oui');
include_spip('inc/accesrestreint_documents');
accesrestreint_gerer_htaccess(true);
}
}
@ -78,12 +82,10 @@ function accesrestreint_upgrade_protection_documents(){
* @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_liens");
sql_drop_table('spip_zones');
sql_drop_table('spip_zones_liens');
effacer_meta('accesrestreint_proteger_documents');
include_spip("inc/accesrestreint_documents");
include_spip('inc/accesrestreint_documents');
accesrestreint_gerer_htaccess(false);
effacer_meta($nom_meta_base_version);
}
?>

@ -5,7 +5,10 @@
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('public/accesrestreint');
include_spip('inc/accesrestreint');
@ -18,8 +21,8 @@ include_spip('inc/accesrestreint');
* @param unknown_type $letexte
* @return unknown
*/
function accesrestreint_securise_squelette($letexte){
return "";
function accesrestreint_securise_squelette($letexte) {
return '';
}
@ -30,12 +33,13 @@ function accesrestreint_securise_squelette($letexte){
* @param int $id_auteur
* @return bool
*/
function accesrestreint_article_restreint($id_article, $id_auteur=null){
function accesrestreint_article_restreint($id_article, $id_auteur = null) {
include_spip('public/quete');
include_spip('inc/accesrestreint');
$article = quete_parent_lang('spip_articles',$id_article);
$article = quete_parent_lang('spip_articles', $id_article);
return
@in_array($article['id_rubrique'],
@in_array(
$article['id_rubrique'],
accesrestreint_liste_rubriques_exclues(!test_espace_prive(), $id_auteur)
)
or @in_array($id_article, accesrestreint_liste_objets_exclus('article', !test_espace_prive(), $id_auteur));
@ -49,10 +53,11 @@ function accesrestreint_article_restreint($id_article, $id_auteur=null){
* @param int $id_auteur
* @return bool
*/
function accesrestreint_rubrique_restreinte($id_rubrique, $id_auteur=null){
function accesrestreint_rubrique_restreinte($id_rubrique, $id_auteur = null) {
include_spip('inc/accesrestreint');
return
@in_array($id_rubrique,
@in_array(
$id_rubrique,
accesrestreint_liste_rubriques_exclues(!test_espace_prive(), $id_auteur)
);
}
@ -64,32 +69,29 @@ function accesrestreint_rubrique_restreinte($id_rubrique, $id_auteur=null){
* @param int $id_auteur
* @return bool
*/
function accesrestreint_acces_zone($id_zone, $id_auteur=null){
function accesrestreint_acces_zone($id_zone, $id_auteur = null) {
include_spip('inc/session');
static $liste_zones = array();
$id_visiteur = session_get('id_auteur');
if (is_null($id_auteur)) {
$id_auteur = $id_visiteur;
}
if (!isset($liste_zones[$id_auteur])) {
if (
$GLOBALS['accesrestreint_zones_autorisees']
if ($GLOBALS['accesrestreint_zones_autorisees']
and ($id_auteur == $id_visiteur)
) {
$liste_zones[$id_auteur] = explode(',', $GLOBALS['accesrestreint_zones_autorisees']);
}
elseif (!is_null($id_auteur)) {
} elseif (!is_null($id_auteur)) {
include_spip('inc/accesrestreint');
$liste_zones[$id_auteur] = explode(',', accesrestreint_liste_zones_autorisees('', $id_auteur));
}
else {
} else {
$liste_zones[$id_auteur] = array();
}
}
return in_array($id_zone,$liste_zones[$id_auteur]);
return in_array($id_zone, $liste_zones[$id_auteur]);
}
/**
@ -98,16 +100,17 @@ function accesrestreint_acces_zone($id_zone, $id_auteur=null){
* @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';
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
@ -118,18 +121,18 @@ function icone_auteur_12($statut){
*/
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))) {
@ -146,7 +149,7 @@ function accesrestreint_zones_rubrique_et_hierarchie($id_rubrique) {
/**
* 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
*/
@ -162,7 +165,7 @@ function accesrestreint_zones_rubrique($id_rubrique) {
/**
* 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 ]
*
@ -175,15 +178,16 @@ function accesrestreint_zones_rubrique($id_rubrique) {
* 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) {
function accesrestreint_rubrique_zone_restreinte($id_rubrique, $_publique = null) {
return
@in_array($id_rubrique,
@in_array(
$id_rubrique,
accesrestreint_liste_rubriques_restreintes_et_enfants($_publique)
);
}
/**
* Retourne la liste de toutes les rubriques sélectionnées dans des zones
* Retourne la liste de toutes les rubriques sélectionnées dans des zones
*
* @param null|bool|string $_publique
* Sélectionner les rubriques
@ -216,32 +220,32 @@ function accesrestreint_liste_rubriques_restreintes($_publique = null) {
$where[] = 'z.privee=' . sql_quote('oui');
}
}
$idz = sql_allfetsel('DISTINCT(zr.id_objet)', 'spip_zones_liens AS zr JOIN spip_zones AS z ON z.id_zone = zr.id_zone', $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
* Retourne la liste de toutes les rubriques sélectionnées dans des zones
*
* @example
* accesrestreint_liste_rubriques_restreintes_et_enfants(false)
* retourne les id des rubriques et leurs enfants restreints
* retourne les id des rubriques et leurs enfants restreints
* dans le privé
*
*
* accesrestreint_liste_rubriques_restreintes_et_enfants(true)
* retourne les id des rubriques et leurs enfants restreints
* retourne les id des rubriques et leurs enfants restreints
* dans le public
*
*
* accesrestreint_liste_rubriques_restreintes_et_enfants('tout')
* retourne les id des rubriques et leurs enfants restreints
* retourne les id des rubriques et leurs enfants restreints
* dans le privé et dans le public
*
* @param null|bool|string $_publique
@ -262,7 +266,7 @@ function accesrestreint_liste_rubriques_restreintes_et_enfants($_publique = null
if (isset($rubs[$_publique])) {
return $rubs[$_publique];
}
$parents = accesrestreint_liste_rubriques_restreintes($_publique);
if ($parents) {
@ -270,22 +274,26 @@ function accesrestreint_liste_rubriques_restreintes_et_enfants($_publique = null
$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
* 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;
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])) {
@ -294,15 +302,11 @@ function accesrestreint_auteur_lie_a_rubrique($id_auteur, $id_rubrique) {
include_spip('inc/accesrestreint');
$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;
}
?>

@ -5,16 +5,17 @@
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
if (isset($GLOBALS['meta']["accesrestreint_base_version"])){
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['visiteur_session']['id_auteur'])){
if (!isset($GLOBALS['visiteur_session']['id_auteur'])) {
$GLOBALS['accesrestreint_zones_autorisees'] = '';
}
else {
} 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'] =
@ -22,9 +23,9 @@ if (isset($GLOBALS['meta']["accesrestreint_base_version"])){
}
// Ajouter un marqueur de cache pour le differencier selon les autorisations
if (!isset($GLOBALS['marqueur'])) $GLOBALS['marqueur'] = '';
$GLOBALS['marqueur'] .= ":accesrestreint_zones_autorisees="
if (!isset($GLOBALS['marqueur'])) {
$GLOBALS['marqueur'] = '';
}
$GLOBALS['marqueur'] .= ':accesrestreint_zones_autorisees='
.$GLOBALS['accesrestreint_zones_autorisees'];
}
?>

@ -5,7 +5,9 @@
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
@ -14,23 +16,21 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
* @param string $flux
* @return string
*/
function accesrestreint_affiche_milieu($flux){
if (
($e = trouver_objet_exec($flux['args']['exec'])
AND $e['type'] == 'auteur'
AND $e['edition'] == false
AND $id_auteur = $flux['args']['id_auteur'])
OR (
$flux['args']['exec'] == "infos_perso"
AND $id_auteur = $GLOBALS['visiteur_session']['id_auteur']
)){
$ins = recuperer_fond('prive/squelettes/inclure/acces_auteur',array('id_auteur'=>$id_auteur));
if (($p = strpos($flux['data'],"<!--affiche_milieu-->")) !== false)
$flux['data'] = substr_replace($flux['data'],$ins,$p,0);
else
function accesrestreint_affiche_milieu($flux) {
if (($e = trouver_objet_exec($flux['args']['exec'])
and $e['type'] == 'auteur'
and $e['edition'] == false
and $id_auteur = $flux['args']['id_auteur'])
or (
$flux['args']['exec'] == 'infos_perso'
and $id_auteur = $GLOBALS['visiteur_session']['id_auteur']
)) {
$ins = recuperer_fond('prive/squelettes/inclure/acces_auteur', array('id_auteur' => $id_auteur));
if (($p = strpos($flux['data'], '<!--affiche_milieu-->')) !== false) {
$flux['data'] = substr_replace($flux['data'], $ins, $p, 0);
} else {
$flux['data'] .= $ins;
}
}
return $flux;
}
@ -43,11 +43,11 @@ function accesrestreint_affiche_milieu($flux){
*/
function accesrestreint_affiche_gauche($flux) {
if ($e = trouver_objet_exec($flux['args']['exec'])
AND $e['type'] == 'rubrique'
AND $e['edition'] == false
AND $id_rubrique = $flux['args']['id_rubrique']){
and $e['type'] == 'rubrique'
and $e['edition'] == false
and $id_rubrique = $flux['args']['id_rubrique']) {
if (autoriser('administrer', 'zone', 0)) {
$flux['data'] .= recuperer_fond('prive/squelettes/inclure/acces_rubrique', array('id_rubrique'=>$id_rubrique));
$flux['data'] .= recuperer_fond('prive/squelettes/inclure/acces_rubrique', array('id_rubrique' => $id_rubrique));
}
}
return $flux;
@ -60,9 +60,9 @@ function accesrestreint_affiche_gauche($flux) {
* @param array $contexte
* @return array
*/
function accesrestreint_page_indisponible($contexte){
if ($contexte['status']=='404'){
$objet = "";
function accesrestreint_page_indisponible($contexte) {
if ($contexte['status'] == '404') {
$objet = '';
if (isset($contexte['type'])) {
$objet = $contexte['type'];
} elseif (isset($contexte['type-page'])) {
@ -78,35 +78,34 @@ function accesrestreint_page_indisponible($contexte){
$objet = $c2['type-page'];
}
}
if ($objet){
if ($objet) {
$table_sql = table_objet_sql($objet);
$id_table_objet = id_table_objet($objet);
if ($id = intval($contexte[$id_table_objet])){
if ($id = intval($contexte[$id_table_objet])) {
$publie = true;
if (include_spip("base/objets")
AND function_exists("objet_test_si_publie")){
$publie = objet_test_si_publie($objet,$id);
}
else {
$trouver_table = charger_fonction('trouver_table','base');
if (include_spip('base/objets')
and function_exists('objet_test_si_publie')) {
$publie = objet_test_si_publie($objet, $id);
} else {
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table_sql);
if (isset($desc['field']['statut'])){
if (isset($desc['field']['statut'])) {
$statut = sql_getfetsel('statut', $table_sql, "$id_table_objet=".intval($id));
if ($statut!='publie')
if ($statut!='publie') {
$publie = false;
}
}
}
include_spip('inc/autoriser');
if ($publie AND !autoriser('voir',$objet,$id)){
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();
if (!isset($contexte['objet'])){
if (!isset($contexte['objet'])) {
$contexte['objet'] = $objet;
$contexte['id_objet'] = $id;
}
@ -116,5 +115,3 @@ function accesrestreint_page_indisponible($contexte){
}
return $contexte;
}
?>

@ -10,7 +10,9 @@
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/headers');
@ -27,9 +29,7 @@ function action_acceder_document_dist() {
$arg = rawurldecode(_request('arg'));
$cle = _request('cle');
$api_docrestreint = charger_fonction("api_docrestreint","action");
$api_docrestreint = charger_fonction('api_docrestreint', 'action');
return $api_docrestreint("$arg/$cle/$f");
}
?>

@ -4,22 +4,23 @@
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function action_affecter_zone_dist(){
$securiser_action = charger_fonction('securiser_action','inc');
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') {
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'"));
zone_lier($id_zone=='-1'?'':$id_zone,'auteur',$id_auteur);
if ($id_auteur==-1) {
$id_auteur = array_map('reset', sql_allfetsel('id_auteur', 'spip_auteurs', "statut!='poub'"));
}
zone_lier($id_zone=='-1'?'':$id_zone, 'auteur', $id_auteur);
}
}
?>

@ -10,13 +10,15 @@
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
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
@ -26,16 +28,16 @@ include_spip('inc/headers');
*
* @pipeline_appel accesrestreint_repertoires_toujours_autorises
* @pipeline_appel accesrestreint_pre_vue_document
*
*
* @param null $arg
*/
function action_api_docrestreint_dist($arg=null) {
function action_api_docrestreint_dist($arg = null) {
// Obtenir l'argument '{id_document}/{cle_action}/{chemin_fichier.ext}'
if (is_null($arg)) {
$arg = _request('arg');
}
$arg = explode("/", $arg);
$arg = explode('/', $arg);
// Supprimer et vider les buffers qui posent des problemes de memory limit
accesrestreint_vider_buffers();
@ -51,14 +53,14 @@ function action_api_docrestreint_dist($arg=null) {
// file ($f) exige pour eviter le scan id_document par id_document
$id_document = intval(array_shift($arg));
$cle = array_shift($arg);
$f = implode("/", $arg);
$f = implode('/', $arg);
// Objet reprenant toutes les infos connues
$Document = new Accesrestreint_document($f, $id_document, $cle);
// Simple test de fonctionnement ?
if ($Document->est_un_test()) {
echo "OK";
echo 'OK';
return;
}
@ -70,7 +72,7 @@ function action_api_docrestreint_dist($arg=null) {
}
// inexistant ou non lisible : 404
if (!$Document->est_existant() OR !$Document->est_lisible()) {
if (!$Document->est_existant() or !$Document->est_lisible()) {
$Document->status = 404;
accesrestreint_afficher_document_selon_status($Document);
return;
@ -94,9 +96,9 @@ function action_api_docrestreint_dist($arg=null) {
* Particulièrement pour donner le status http qui convient pour ce document.
*
* Si ce 'status' est renseigné par un plugin : on affiche le document (ou l'erreur) avec le statut trouvé
*
*
* Sinon, il sera calculé automatiquement ensuite :
*
*
* - si le document ne fait pas partie de spip_documents : 404
* - sinon, test d'autorisation de voir ce document (par clé d'action si indiquée, sinon par l'api autoriser)
**/
@ -122,7 +124,7 @@ function action_api_docrestreint_dist($arg=null) {
$ETag = $Document->get_Etag();
if (isset($_SERVER['HTTP_IF_NONE_MATCH'])
AND $_SERVER['HTTP_IF_NONE_MATCH'] == $ETag) {
and $_SERVER['HTTP_IF_NONE_MATCH'] == $ETag) {
$Document->status = 304; // Not modified
accesrestreint_afficher_document_selon_status($Document);
exit;
@ -143,16 +145,16 @@ function action_api_docrestreint_dist($arg=null) {
* Supprimer et vider les buffers qui posent des problemes de memory limit
*
* @link http://www.php.net/manual/en/function.readfile.php#81032
*
*
* @return void
**/
function accesrestreint_vider_buffers() {
@ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure
@ini_set("output_buffering","off");
@ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure
@ini_set('output_buffering', 'off');
@ini_set('implicit_flush', 1);
@ob_implicit_flush(1);
$level = ob_get_level();
while ($level--){
while ($level--) {
@ob_end_clean();
}
}
@ -168,7 +170,6 @@ function accesrestreint_vider_buffers() {
**/
function accesrestreint_afficher_document_selon_status(Accesrestreint_document $Document) {
switch ($Document->status) {
case 304:
case 403:
case 404:
@ -190,9 +191,7 @@ function accesrestreint_afficher_document_selon_status(Accesrestreint_document $
* @return void
**/
function accesrestreint_afficher_erreur_document($status = 404) {
switch ($status)
{
switch ($status) {
case 304:
// not modified : sortir de suite !
http_status(304);
@ -200,13 +199,13 @@ function accesrestreint_afficher_erreur_document($status = 404) {
case 403:
include_spip('inc/minipres');
echo minipres("","","",true);
echo minipres('', '', '', true);
break;
case 404:
http_status(404);
include_spip('inc/minipres');
echo minipres(_T('erreur') . ' 404', _T('medias:info_document_indisponible'), "", true);
echo minipres(_T('erreur') . ' 404', _T('medias:info_document_indisponible'), '', true);
break;
}
}
@ -224,7 +223,7 @@ function accesrestreint_afficher_document(Accesrestreint_document $Document) {
$chemin_fichier = $Document->get_chemin_complet_fichier();
// toujours envoyer un content type, meme vide !
header("Content-Type: " . $Document->get_mime_type());
header('Content-Type: ' . $Document->get_mime_type());
// document décrit dans la table spip_documents ?
if ($doc = $Document->get_spip_document()) {
@ -233,7 +232,7 @@ function accesrestreint_afficher_document(Accesrestreint_document $Document) {
'args' => array('document' => $Document),
'data' => $doc,
));
// 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
@ -243,22 +242,21 @@ function accesrestreint_afficher_document(Accesrestreint_document $Document) {
header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename=\"$f\";");
header("Content-Transfer-Encoding: binary");
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");
header('Pragma: public');
header('Expires: 0'); // set expiration time
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
} else {
header("Expires: 3600"); // set expiration time
header('Expires: 3600'); // set expiration time
}
} else {
header("Expires: 3600"); // set expiration time
header('Expires: 3600'); // set expiration time
}
if ($size = filesize($chemin_fichier)) {
header("Content-Length: ". $size);
header('Content-Length: '. $size);
}
readfile($chemin_fichier);
@ -278,7 +276,7 @@ class Accesrestreint_document {
* Identifiant du document demandé, si connu
*
* 0 si document inconnu.
*
*
* @var int
**/
private $id_document = 0;
@ -288,30 +286,30 @@ class Accesrestreint_document {
*
* 0 si inconnue
*
* @var int|string
* @var int|string
**/
private $cle_action = 0;
/**
* Chemin du fichier demandé, depuis IMG/
*
* @var string
* @var string
**/
private $_fichier = "";
private $_fichier = '';
/**
* Status HTTP à utiliser pour ce document
*
* @var string|int
**/
public $status = "";
public $status = '';
/**
* Mime type pour ce document
*
* @var string
**/
private $mime_type = "";
private $mime_type = '';
/**
@ -323,7 +321,7 @@ class Accesrestreint_document {
* Identifiant du document, si connu
* @param int|string $cle_action
* Clé d'action auteur, si connue
* @return
* @return
**/
public function __construct($_fichier, $id_document = 0, $cle_action = 0) {
$this->_fichier = $_fichier;
@ -355,33 +353,32 @@ class Accesrestreint_document {
return $this->cle_action;
}
/**
* Test si le document demandé vérifie simplement le fonctionnement correct du .htaccess dans IMG posé par Acces Restreint
*
* Test si le document demandé vérifie simplement le fonctionnement correct du .htaccess
* dans IMG posé par Acces Restreint
*
* @see accesrestreint_gerer_htaccess()
*
*
* return bool
* True si document de test
*/
public function est_un_test() {
return $this->id_document == 0
AND $this->cle_action == 1
AND $this->_fichier == "test/.test";
and $this->cle_action == 1
and $this->_fichier == 'test/.test';
}
/**
* Test si le document demandé n'a pas un chemin d'accès sécurisé
*
* Par exemple avec ../ ou url absolue http://
*
*
* @return bool
* True si le chemin est insécurisé
**/
public function est_insecurise() {
return (strpos($this->_fichier, '../') !== false)
OR (preg_match(',^\w+://,', $this->_fichier));
or (preg_match(',^\w+://,', $this->_fichier));
}
/**
@ -434,7 +431,7 @@ class Accesrestreint_document {
public function est_autorise() {
$doc = $this->get_spip_document();
if (!$doc) {
spip_log("acces interdit, document hors de spip_documents");
spip_log('acces interdit, document hors de spip_documents');
return false;
}
@ -448,14 +445,14 @@ class Accesrestreint_document {
}
return true;
}
// en verifiant le droit explicitement sinon, plus lent !
if (!function_exists("autoriser")) {
include_spip("inc/autoriser");
if (!function_exists('autoriser')) {
include_spip('inc/autoriser');
}
if (!autoriser('voir', 'document', $doc['id_document'])) {
spip_log("acces interdit, pas autorise a voir le document " . $doc['id_document']);
spip_log('acces interdit, pas autorise a voir le document ' . $doc['id_document']);
return false;
}
@ -474,13 +471,13 @@ class Accesrestreint_document {
static $doc = null;
if (is_null($doc)) {
include_spip('inc/documents');
$where = "documents.fichier = ".sql_quote(set_spip_doc($this->get_chemin_complet_fichier()))
. ($this->id_document ? " AND documents.id_document=".intval($this->id_document): '');
$where = 'documents.fichier = '.sql_quote(set_spip_doc($this->get_chemin_complet_fichier()))
. ($this->id_document ? ' AND documents.id_document='.intval($this->id_document): '');
spip_log($where, 'dbg');
$doc = sql_fetsel(
"documents.*, types.mime_type, types.inclus",
"spip_documents AS documents LEFT JOIN spip_types_documents AS types ON documents.extension=types.extension",
'documents.*, types.mime_type, types.inclus',
'spip_documents AS documents LEFT JOIN spip_types_documents AS types ON documents.extension=types.extension',
$where
);
@ -540,14 +537,14 @@ class Accesrestreint_document {
return $this->mime_type;
}
if (!$calculer) {
return "";
return '';
}
if ($doc = $this->get_spip_document()) {
if ($doc['mime_type']) {
return $doc['mime_type'];
}
}
return "";
return '';
}
/**

@ -10,46 +10,50 @@
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
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
// 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()
{
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 (!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];}
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");
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);
}
}
}
?>

@ -4,7 +4,9 @@
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* editer une zone (action apres creation/modif de zone)
@ -12,9 +14,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
* @param int $arg
* @return array
*/
function action_editer_zone_dist($arg=null){
function action_editer_zone_dist($arg = null) {
if (is_null($arg)){
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
@ -24,11 +26,12 @@ function action_editer_zone_dist($arg=null){
$id_zone = zone_inserer();
}
if (!$id_zone)
return array(0,''); // erreur
if (!$id_zone) {
return array(0, ''); // erreur
}
if (_request('droits_admin')){
zone_lier($id_zone,'auteur',$GLOBALS['visiteur_session']['id_auteur']);
if (_request('droits_admin')) {
zone_lier($id_zone, 'auteur', $GLOBALS['visiteur_session']['id_auteur']);
}
$err = zone_modifier($id_zone);
@ -45,16 +48,18 @@ function action_editer_zone_dist($arg=null){
function zone_inserer() {
include_spip('inc/autoriser');
if (!autoriser('creer','zone'))
if (!autoriser('creer', 'zone')) {
return false;
}
$champs = array(
'publique'=>'non',
'privee'=>'non',
);
// Envoyer aux plugins
$champs = pipeline('pre_insertion',
$champs = pipeline(
'pre_insertion',
array(
'args' => array(
'table' => 'spip_zones',
@ -62,8 +67,9 @@ function zone_inserer() {
'data' => $champs
)
);
$id_zone = sql_insertq("spip_zones", $champs);
pipeline('post_insertion',
$id_zone = sql_insertq('spip_zones', $champs);
pipeline(
'post_insertion',
array(
'args' => array(
'table' => 'spip_zones',
@ -84,19 +90,18 @@ function zone_inserer() {
* @param array $set
* @return string|bool
*/
function zone_modifier ($id_zone, $set=null) {
function zone_modifier($id_zone, $set = null) {
include_spip('inc/modifier');
// Cherchons les vrais champs déclarés
$trouver_table = charger_fonction('trouver_table','base');
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table('spip_zones');
if (isset($desc['champs_editables']) AND is_array($desc['champs_editables'])) {
if (isset($desc['champs_editables']) and is_array($desc['champs_editables'])) {
$white = $desc['champs_editables'];
}
else {
} else {
$white = array('titre', 'descriptif','publique', 'privee');
}
$c = collecter_requests(
// white list
$white,
@ -108,31 +113,35 @@ function zone_modifier ($id_zone, $set=null) {
// Si la zone est publiee, invalider les caches et demander sa reindexation
$invalideur = $indexation = '';
$t = sql_getfetsel("statut", "spip_zones", "id_zone=$id_zone");
$t = sql_getfetsel('statut', 'spip_zones', "id_zone=$id_zone");
if ($t == 'publie') {
$invalideur = "id='zone/$id_zone'";
$indexation = true;
}
if ($err = objet_modifier_champs('zone', $id_zone,
if ($err = objet_modifier_champs(
'zone',
$id_zone,
array(
'data' => $set,
'nonvide' => array('titre' => _T('info_sans_titre')),
'invalideur' => $invalideur,
'indexation' => $indexation
),
$c))
$c
)) {
return $err;
}
zone_lier($id_zone, 'rubrique', _request('rubriques'),'set');
zone_lier($id_zone, 'rubrique', _request('rubriques'), 'set');
return $err;
}
/**
* Mettre à jour les liens objets/zones.
*
*
* @param int|array|string $zones
* Identifiant ou liste d'identifiants zones à affecter.
* Si zones vaut '', associe toutes les zones a(aux) objets(s).
@ -144,36 +153,39 @@ function zone_modifier ($id_zone, $set=null) {
* Action à effectuer parmi `add`, `set` ou `del` pour ajouter, affecter uniquement,
* ou supprimer les objets listés dans ids.
*/
function zone_lier($zones,$type,$ids,$operation = 'add'){
function zone_lier($zones, $type, $ids, $operation = 'add') {
include_spip('inc/autoriser');
include_spip('action/editer_liens');
if (!$zones)
$zones="*";
if (!$ids)
if (!$zones) {
$zones = '*';
}
if (!$ids) {
$ids = array();
elseif (!is_array($ids))
} elseif (!is_array($ids)) {
$ids = array($ids);
}
if ($operation=='del'){
if ($operation=='del') {
// on supprime les ids listes
objet_dissocier(array('zone'=>$zones),array($type=>$ids));
}
else {
objet_dissocier(array('zone' => $zones), array($type => $ids));
} else {
// 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'){
objet_dissocier(array('zone'=>$zones),array($type=>array("NOT",$ids)));
if ($operation=='set') {
objet_dissocier(array('zone' => $zones), array($type => array('NOT', $ids)));
// bugfix temporaire : objet_associer ne gere pas id=0
if (!in_array(0,$ids) AND $type=="rubrique")
sql_delete("spip_zones_liens","id_zone=".intval($zones)." AND id_objet=0 AND objet=".sql_quote($type));
if (!in_array(0, $ids) and $type == 'rubrique') {
sql_delete('spip_zones_liens', 'id_zone='.intval($zones).' AND id_objet=0 AND objet='.sql_quote($type));
}
}
foreach ($ids as $id) {
if (autoriser('affecterzones',$type,$id,null,array('id_zone'=>$zones))) {
if (autoriser('affecterzones', $type, $id, null, array('id_zone' => $zones))) {
// bugfix temporaire : objet_associer ne gere pas id=0
if ($id==0 AND $type=="rubrique")
sql_insertq("spip_zones_liens",array('id_zone'=>$zones,"id_objet"=>$id,"objet"=>$type));
else
objet_associer(array('zone'=>$zones),array($type=>$id));
if ($id == 0 and $type == 'rubrique') {
sql_insertq('spip_zones_liens', array('id_zone' => $zones, 'id_objet' => $id, 'objet' => $type));
} else {
objet_associer(array('zone' => $zones), array($type => $id));
}
}
}
}
@ -187,16 +199,13 @@ function zone_lier($zones,$type,$ids,$operation = 'add'){
* @param int $id_zone
* @return int
*/
function zone_supprimer($id_zone){
function zone_supprimer($id_zone) {
include_spip('action/editer_liens');
objet_dissocier(array('zone'=>$id_zone),array('*'=>'*'));
objet_dissocier(array('zone' => $id_zone), array('*' => '*'));
// puis la zone
sql_delete("spip_zones", "id_zone=".intval($id_zone));
sql_delete('spip_zones', 'id_zone='.intval($id_zone));
$id_zone = 0;
return $id_zone;
}
?>

@ -4,22 +4,23 @@
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function action_retirer_zone_dist(){
$securiser_action = charger_fonction('securiser_action','inc');
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)){
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')
zone_lier($id_zone,$type,array(),'set');
else
zone_lier($id_zone,$type,$id_objet,'del');
if ($id_objet=='-1') {
zone_lier($id_zone, $type, array(), 'set');
} else {
zone_lier($id_zone, $type, $id_objet, 'del');
}
}
}
?>

@ -4,17 +4,17 @@
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function action_supprimer_zone_dist(){
$securiser_action = charger_fonction('securiser_action','inc');
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');
zone_supprimer($id_zone);
and autoriser('supprimer', 'zone', $id_zone)) {
include_spip('action/editer_zone');
zone_supprimer($id_zone);
}
}
?>

@ -6,21 +6,23 @@
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function accesrestreint_declarer_tables_interfaces($interface){
function accesrestreint_declarer_tables_interfaces($interface) {
$interface['tables_jointures']['spip_auteurs'][] = 'zones_liens';
$interface['tables_jointures']['spip_zones'][] = 'zones_liens';
$interface['tables_jointures']['spip_rubriques'][] = 'zones_liens';
//-- Table des tables ----------------------------------------------------
$interface['table_des_tables']['zones']='zones';
return $interface;
}
function accesrestreint_declarer_tables_objets_sql($tables){
function accesrestreint_declarer_tables_objets_sql($tables) {
$tables['spip_zones'] = array(
'texte_modifier' => 'accesrestreint:modifier_zone',
'texte_creer' => 'accesrestreint:creer_zone',
@ -35,36 +37,36 @@ function accesrestreint_declarer_tables_objets_sql($tables){
'url_edit' => 'zone_edit',
'page' => false,
'principale' => "oui",
'principale' => 'oui',
'champs_editables' => array('titre', 'descriptif','publique', 'privee'),
'field'=> array(
"id_zone" => "bigint(21) NOT NULL",
"titre" => "varchar(255) DEFAULT '' NOT NULL",
"descriptif" => "text DEFAULT '' NOT NULL",
"publique" => "char(3) DEFAULT 'oui' NOT NULL",
"privee" => "char(3) DEFAULT 'non' NOT NULL",
"maj" => "TIMESTAMP"
'id_zone' => 'bigint(21) NOT NULL',
'titre' => "varchar(255) DEFAULT '' NOT NULL",
'descriptif' => "text DEFAULT '' NOT NULL",
'publique' => "char(3) DEFAULT 'oui' NOT NULL",
'privee' => "char(3) DEFAULT 'non' NOT NULL",
'maj' => 'TIMESTAMP'
),
'key' => array(
"PRIMARY KEY" => "id_zone",
'PRIMARY KEY' => 'id_zone',
),
'titre' => "titre AS titre, '' AS lang",
);
return $tables;
}
function accesrestreint_declarer_tables_auxiliaires($tables_auxiliaires){
function accesrestreint_declarer_tables_auxiliaires($tables_auxiliaires) {
$spip_zones_liens = array(
"id_zone" => "bigint(21) DEFAULT '0' NOT NULL",
"id_objet" => "bigint(21) DEFAULT '0' NOT NULL",
"objet" => "VARCHAR (25) DEFAULT '' NOT NULL"
'id_zone' => "bigint(21) DEFAULT '0' NOT NULL",
'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
'objet' => "VARCHAR (25) DEFAULT '' NOT NULL"
);
$spip_zones_liens_key = array(
"PRIMARY KEY" => "id_zone,id_objet,objet",
"KEY id_zone" => "id_zone"
'PRIMARY KEY' => 'id_zone,id_objet,objet',
'KEY id_zone' => 'id_zone'
);
$tables_auxiliaires['spip_zones_liens'] = array(
@ -74,5 +76,3 @@ function accesrestreint_declarer_tables_auxiliaires($tables_auxiliaires){
return $tables_auxiliaires;
}
?>

@ -5,9 +5,11 @@
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function formulaires_configurer_accesrestreint_charger_dist(){
function formulaires_configurer_accesrestreint_charger_dist() {
include_spip('inc/config');
$valeurs = array(
'accesrestreint_proteger_documents' => lire_config('accesrestreint_proteger_documents', 'non'),
@ -16,7 +18,7 @@ function formulaires_configurer_accesrestreint_charger_dist(){
return $valeurs;
}
function formulaires_configurer_accesrestreint_traiter_dist(){
function formulaires_configurer_accesrestreint_traiter_dist() {
$champs = array('accesrestreint_proteger_documents','creer_htpasswd');
@ -24,18 +26,18 @@ function formulaires_configurer_accesrestreint_traiter_dist(){
$old_config = lire_config('accesrestreint_proteger_documents');
foreach ($champs as $c) {
ecrire_config($c,_request($c)=='oui'?'oui':'non');
ecrire_config($c, _request($c) == 'oui' ? 'oui' : 'non');
}
// generer/supprimer les fichiers htaccess qui vont bien
include_spip("inc/accesrestreint_documents");
include_spip('inc/accesrestreint_documents');
$new_config = lire_config('accesrestreint_proteger_documents');
accesrestreint_gerer_htaccess($new_config == "oui");
accesrestreint_gerer_htaccess($new_config == 'oui');
// si le reglage du htaccess a change, purger le cache
if ($new_config !== $old_config) {
$purger = charger_fonction("purger", "action");
$purger("cache");
$purger = charger_fonction('purger', 'action');
$purger('cache');
}
return array('message_ok'=>_T('config_info_enregistree'), 'editable'=>true);

@ -4,13 +4,15 @@
* Licence GPL (c) 2006-2008 Cedric Morin
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/actions');
include_spip('inc/editer');
function formulaires_editer_zone_charger_dist($id_zone='new', $retour='', $associer_objet='', $config_fonc='zones_edit_config', $row=array(), $hidden=''){
$valeurs = formulaires_editer_objet_charger('zone',$id_zone,0,0,$retour,$config_fonc,$row,$hidden);
function formulaires_editer_zone_charger_dist($id_zone = 'new', $retour = '', $associer_objet = '', $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/accesrestreint');
// charger les rubriques associees a la zone
if ($id_zone = intval($id_zone)) {
@ -26,45 +28,46 @@ function formulaires_editer_zone_charger_dist($id_zone='new', $retour='', $assoc
}
}
}
return $valeurs;
}
function zones_edit_config(){
function zones_edit_config() {
return array();
}
function formulaires_editer_zone_verifier_dist($id_zone='new', $retour='', $associer_objet='', $config_fonc='zones_edit_config', $row=array(), $hidden=''){
$erreurs = formulaires_editer_objet_verifier('zone',$id_zone,array('titre'));
function formulaires_editer_zone_verifier_dist($id_zone = 'new', $retour = '', $associer_objet = '', $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='', $associer_objet='', $config_fonc='zones_edit_config', $row=array(), $hidden=''){
if (_request('publique')!=='oui')
set_request('publique','non');
if (_request('privee')!=='oui')
set_request('privee','non');
function formulaires_editer_zone_traiter_dist($id_zone = 'new', $retour = '', $associer_objet = '', $config_fonc = 'zones_edit_config', $row = array(), $hidden = '') {
if (_request('publique') !== 'oui') {
set_request('publique', 'non');
}
if (_request('privee') !== 'oui') {
set_request('privee', 'non');
}
$res = formulaires_editer_objet_traiter('zone',$id_zone,0,0,$retour,$config_fonc,$row,$hidden);
$res = formulaires_editer_objet_traiter('zone', $id_zone, 0, 0, $retour, $config_fonc, $row, $hidden);
if ($retour AND $res['id_zone']) {
$res['redirect'] = parametre_url($retour,'id_zone',$res['id_zone']);
if ($retour and $res['id_zone']) {
$res['redirect'] = parametre_url($retour, 'id_zone', $res['id_zone']);
}
// Un lien auteur a prendre en compte ?
if ($associer_objet AND $id_zone=$res['id_zone']){
if ($associer_objet and $id_zone = $res['id_zone']) {
$objet = '';
if(preg_match(',^\w+\|[0-9]+$,',$associer_objet)){
list($objet,$id_objet) = explode('|',$associer_objet);
if (preg_match(',^\w+\|[0-9]+$,', $associer_objet)) {
list($objet,$id_objet) = explode('|', $associer_objet);
}
if ($objet AND $id_objet AND autoriser('modifier',$objet,$id_objet)){
zone_lier($id_zone,$objet,$id_objet);
if (isset($res['redirect']))
$res['redirect'] = parametre_url ($res['redirect'], "id_lien_ajoute", $id_zone, '&');
if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) {
zone_lier($id_zone, $objet, $id_objet);
if (isset($res['redirect'])) {
$res['redirect'] = parametre_url($res['redirect'], 'id_lien_ajoute', $id_zone, '&');
}
}
}
return $res;
}
?>

@ -5,7 +5,9 @@
*
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
// Liste des zones a laquelle appartient le visiteur, au format '1,2,3'
// Cette fonction est appelee a chaque hit et peut etre completee (pipeline)
@ -17,19 +19,18 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* @param int $id_auteur
* @return string '1,2,3'
*/
function accesrestreint_liste_zones_autorisees($zones='', $id_auteur=NULL) {
$id = NULL;
function accesrestreint_liste_zones_autorisees($zones = '', $id_auteur = null) {
$id = null;
if (!is_null($id_auteur)) {
$id = $id_auteur;
}
elseif (isset($GLOBALS['visiteur_session']['id_auteur']) && $GLOBALS['visiteur_session']['id_auteur']) {
} elseif (isset($GLOBALS['visiteur_session']['id_auteur']) && $GLOBALS['visiteur_session']['id_auteur']) {
$id = $GLOBALS['visiteur_session']['id_auteur'];
}
if (!is_null($id)) {
$new = accesrestreint_liste_zones_appartenance_auteur($id);
if ($zones AND $new) {
if ($zones and $new) {
$zones = array_unique(array_merge(explode(',', $zones), $new));
sort($zones);
$zones = join(',', $zones);
@ -37,7 +38,7 @@ function accesrestreint_liste_zones_autorisees($zones='', $id_auteur=NULL) {
$zones = join(',', $new);
}
}
return $zones;
}