Annonce

  •  » Utilisation
  •  » Tester l'accès à une catégorie

#1 2014-07-05 19:00:32

bigs38
Membre
Grenoble
2013-09-30
36

Tester l'accès à une catégorie

Bonjour,
je voudrais savoir si quelqu'un aurai une petite idée pour tester, en PHP, si l'accès à un album est autorisé ou non en testant son url
par exemple :

Code:

http://www.monsite.com/album/index.php?/category/157/

Je voudrai juste avoir l'information :
- l'utilisateur en utilisant l'url accède directement à l'album
- Piwigo le redirige sur la page de connexion ou sur une page d'erreur.

Pour cela j'ai essayé d'utiliser le code décrit ici :

Code:

http://stackoverflow.com/questions/2964834/php-check-if-url-redirects

pour tester si l'utilisation de l'url nous redirige ou pas, mais malheureusement ça ne fonctionne pas avec la redirection vers la page de login de Piwigo.

En vous remerciant.


Version de Piwigo: 2.6.3
URL Piwigo: http://www.haettel.fr

Hors ligne

#2 2014-07-05 19:26:27

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: Tester l'accès à une catégorie

Bonjour

autorisé pour qui ?

dans tous les cas appellez la fonction build_user de piwigo

Code:

$temp_user = build_user($user_id);

vous obtiendrez entre autres $temp_user['forbidden_categories'] qui liste les catégories interdites à cet user

ps: l'utilisateur invité à l'id 2

Hors ligne

#3 2014-07-05 19:39:13

bigs38
Membre
Grenoble
2013-09-30
36

Re: Tester l'accès à une catégorie

En fait dans WordPress je créé des articles avec une image liée à un album Piwigo (CF : menu blog sur mon site). Sur cette page je voudrais modifier le CSS de l'image afin de la griser ou mettre un cadenas dessus en fonction des permissions du visiteur (qu'il soit connecté avec l'accès à l'album, connecté sans l'accès à l'album, non connecté etc.)
Pour cela je pensais simplement vérifier à l'aide de PHP si l'url était redirigée ou non.

Hors ligne

#4 2014-07-05 19:41:48

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: Tester l'accès à une catégorie

mais si c'était possible ça serait une mauvaise idée... vous imaginez le ralentissement coté serveur que représente une requete HTTP pour chaque catégorie ?

l'unique solution viable que je vois c'est d'aller taper dans la base de données de piwigo pour voir si l'accès est possible (à condition que Wordpress et Piwigo soient sur le même hébergement)

Hors ligne

#5 2014-07-05 21:08:05

bigs38
Membre
Grenoble
2013-09-30
36

Re: Tester l'accès à une catégorie

mistic a écrit:

mais si c'était possible ça serait une mauvaise idée... vous imaginez le ralentissement coté serveur que représente une requete HTTP pour chaque catégorie ?

En fait il n'y a que 8 tests d'url à faire maximum (c'est la maximum d'articles affichables sur la même page) le test de redirection que je pensais mettre en place n'utilise que l'entête des pages et du coup est un peu plus légé pour le serveur.
Après je me suis dit qu'il existait surement d'autres solutions, éventuellement plus efficaces, comme celle que vous me proposez.

mistic a écrit:

l'unique solution viable que je vois c'est d'aller taper dans la base de données de piwigo pour voir si l'accès est possible

Le problème qui se pose, étant sous WordPress lors des tests, je ne peux pas utiliser les fonctions de Piwigo car elles ne sont pas reconnues !?

mistic a écrit:

à condition que Wordpress et Piwigo soient sur le même hébergement

Ca c'est ok.

Hors ligne

#6 2014-07-05 21:11:37

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: Tester l'accès à une catégorie

mistic100 a écrit:

aller taper dans la base de données de piwigo

je ne parle plus de fonction à Piwigo là

avec les tables categories (info de privacité de l'album), user_group (quel user appartient à quel groupe) et group_access (quel groupe à accès à quel album privé) on peut tout savoir (et même en une seule requete SQL)

Hors ligne

#7 2014-07-05 21:23:52

bigs38
Membre
Grenoble
2013-09-30
36

Re: Tester l'accès à une catégorie

OK, j'étais resté sur l'utilisation de $temp_user = build_user($user_id); et pas d'attaquer directement la base de données de Piwigo. Néanmoins il me faut à un moment, connaitre l'id de l'utilisateur si il est connecté ? et la variable $user_id lorsque je l'appelle ne contient rien (même avec global $user_id;) sous WordPress.

Hors ligne

#8 2014-07-05 21:40:51

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: Tester l'accès à une catégorie

ça serait $user, mais oui forcement, puisque vous etes dans Wordpress pas Piwigo...

est-ce que vos tables d'utilisateurs sont partagées ?
- si oui: cf doc Wordpress pour avoir l'id de l'utilisateur

- si non: essayez $_SESSION['pwg_uid'], pas sur que ça marche dans tous les cas

--

au fait vous pouvez utiliser le webservice pwg.permissions.getList sans paramètre* pour avoir les permissions sans vous casser la tête avec la bdd
ça va vous renvoyer la liste des catégories privées avec pour chaqu'une les utilisateurs qui y ont accès
plus d'infos sur http://www.haettel.fr/galerie/tools/ws.htm

comme c'est une méthode d'admin il faut que le serveur soit authentifié auprès de Piwigo avec votre compte admin, pour faire ça appellez d'abord pwg.session.login en POST en utilisant les options de CURL pour conserver la session HTTP entre deux appels

et je conseille quand meme de mettre en cache tout ça dans une variable de session

* vous pouvez aussi donner un tableau de catégories pour filtrer, par exemple
.../ws.php?method=pwg.permissions.getList&cat_id[]=36&cat_id[]=35

Hors ligne

#9 2014-07-05 22:22:36

bigs38
Membre
Grenoble
2013-09-30
36

Re: Tester l'accès à une catégorie

J'ai une seule table utilisateurs pour WordPress et Piwigo, par contre l'authentification est indépendante (les utilisateurs peuvent se connecter à Piwigo sans se connecter à WordPress ce qui est souvent le cas)

Sinon $_SESSION['pwg_uid'] ne donne malheureusement rien non plus.....du coup je n'ai toujours pas l'ID de l'utilisateur.

J'ai commencé à regarder pour l'utilisation du webservice et en effet ça pourrais être très intéressant.

Hors ligne

#10 2014-07-05 22:30:44

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: Tester l'accès à une catégorie

bon ben du coup il faut avoir l'info sur Wordpress, je ne peux pas vous aider mais c'est surement basique

ça l'est: http://codex.wordpress.org/Function_Ref … nt_user_id

Hors ligne

#11 2014-07-05 22:33:35

bigs38
Membre
Grenoble
2013-09-30
36

Re: Tester l'accès à une catégorie

OK mistic,
en tout cas merci beaucoup pour votre aide. Si je trouve une solution je ne manquerai pas de revenir ici pour la donner.

Hors ligne

#12 2014-07-13 16:43:52

bigs38
Membre
Grenoble
2013-09-30
36

Re: Tester l'accès à une catégorie

Bonjour,
après avoir longuement, très longuement, essayé de récupérer l'id utilisateur avec $_SESSION['pwg_uid'] sous WordPress j'y suis enfin arrivé !!!

pour cela il faut mettre dans la configuration locale (je ne sais pas si c'est une bonne chose mais sans ça je n'ai pas d'id !!!) :

Code:

$conf['session_save_handler'] = 'file';

Ajouter en début du fichier functions.php du thème utilisé sous WordPress :

Code:

add_action('init', 'myStartSession', 1);
function myStartSession() {
    if(!session_id()) {
        session_start();
    }
}

CF: http://silvermapleweb.com/using-the-php … wordpress/

Hors ligne

#13 2014-07-22 23:29:28

bigs38
Membre
Grenoble
2013-09-30
36

Re: Tester l'accès à une catégorie

Bonjour,
pour ceux que ça intéresse, vous trouverez ci-dessous une petite description de mon utilisation de Piwigo et WordPress :

Lorsque je créé une nouvelle catégorie dans Piwigo, je fais souvent un article correspondant dans WordPress avec la photo de l’album qui me plaît le plus.

Le thème de WordPress que j’utilise m’oblige à mettre une « image à la une » pour chaque article. Cette « image à la une » n’apparait pas dans l’article mais seulement :
   - sur la première page de mon site sous forme de carrousel avec les 5 dernières photos qui défilent
   - à côté des résumés des articles

lorsque l’on clique sur un article, l’image à la une n’est pas automatiquement inséré dedans.

Donc, pour me simplifier grandement la tâche, j’utilise le plug-in ShortcodePro dans WordPress.
Ce plugin m’a permis de créer un shortcode qui :
   - insère automatiquement l’image à la une affectée à l’article à l’intérieur de celui-ci
   - redirige vers la catégorie Piwigo lorsque l’on clique dessus.


Et maintenant, grâce à mistic, je peux afficher sur la photo une indication de droit d’accès à la catégorie qui prend en compte les droits de l’utilisateur connecté ou non dans Piwigo.

Résumé pour la création d’un nouvel article dans Wordpress:

1 -> cliquer sur « ajouter article » dans WordPress
2 -> mettre un titre, et un texte si vous le souhaitez
3 ->  sélectionner une image dans l’album pour la mettre comme image à la une
4 -> cliquer sur l’icône  du shortcode et entrer le numéro de la catégorie !


Voilà c’est extrêmement rapide !!!!!

Maintenant la configuration de Shortcodes Pro:

Ajouter un nouveau shortcode et remplir comme ci-dessous :

Renseignements :
Nom : AlbumPiwigo
Comportement : Insert custom code
Attributs : cocher la case

Attributs :
Ordre : 1
Slug : id
Label : Id de l’album Piwigo

Insertion de code :
Language : PHP
Code :

Code:

//Démarrage de la session pour récupérer l’id utilisateur de Piwigo
if(!session_id()) {
session_start();
}
//paramètres de connexion à la base de données de Piwigo
$user = "Nom_utilisateur_BDD_Piwigo";
$bdd = "BDD_Piwigo";
$passwd  = Mot_de_pass_BDD_Piwigo';
$acces = "";
// Connexion au serveur
mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
//Test pour savoir si la catégorie est publique 
$query = 'SELECT status FROM Prefix_BDD_Piwigo_categories WHERE id='.$atts[id];
$result = mysql_query($query);
if (mysql_result($result,0)!="public")
  {
  if ($_SESSION['pwg_uid'] != "")
    {
//Requête pour savoir si l’utilisateur, ou le groupe dont il fait partie, a le droit d’accéder à la catégorie.
    $query = 'SELECT user_id FROM Prefix_BDD_Piwigo _user_group AS ug INNER JOIN Prefix_BDD_Piwigo _group_access AS ga ON ug.group_id = ga.group_id WHERE user_id='.$_SESSION['pwg_uid'].' and cat_id='.$atts[id].' UNION SELECT user_id FROM Prefix_BDD_Piwigo _user_access WHERE user_id='.$_SESSION['pwg_uid'];
    $result = mysql_query($query);
    $result=mysql_fetch_array($result);
    if (empty($result))
      { 
      $acces = "Désolé, mais vous n'avez pas accès à cette album !!"; 
      }
    }
  else
    {
    $acces = "Vous devez vous connectez pour voir ces photos";
    }
  }
global $post_id;
//Affectation d’un lien vers la catégorie de Piwigo à la photo dans l’article
$affichage = '<a href="http://www.votre_site.com/index.php?/category/'.$atts[id].'">';
//Insertion automatique de l’image à la une dans l’article
$affichage .= get_the_post_thumbnail( $post_id, 'medium' );
$affichage .= '</a>';
if ($acces != "")
  {
  //Affichage d’une cadenas sur la photo si l’utilisateur n’a pas le droit d’accès
  $affichage .= '<img style="position:relative; right: 16px; top: 6px;" src="http://www.votre_site.com/cadena.png" title="'.$acces.'">';
  }
return $affichage;

Voilà pour la configuration.
Merci encore pour votre aide

PS : Du coup, dans l'exemple ci dessus, il n'est pas nécessaire de modifier le fichier functions.php, car l'ouverture de session se fait directement dans le shortcode.

Dernière modification par bigs38 (2014-07-22 23:34:23)

Hors ligne

  •  » Utilisation
  •  » Tester l'accès à une catégorie

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact