[WIP] Nouveau Projet : Coppermine MAP HELP !!! [WIP] Nouveau Projet : Coppermine MAP HELP !!!
 

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

Main Menu

[WIP] Nouveau Projet : Coppermine MAP HELP !!!

Started by easyjava, February 07, 2008, 10:54:18 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

easyjava

Bonjour,

Toujours à la recherche de nouveautés pour ma galerie je me suis lancé dans un défi. Je vous invite, par l'intermédiaire de ce topic, à me donner vos remarques, conseils et tout autres commentaires constructifs si possible.

Quote
Objectif :
Créer une liste des utilisateurs connectés et afficher pour chacun d'eux le nom de l'album dans le quel ils se trouvent ou la photo qu'ils sont entrain de visionner. Par la suite, créer une sorte de carte représentant tous les albums et la position des visiteurs ainsi que l'historique de navigation.

L'apparence est encore à définir. Pour avoir un rendu parfait le tout sera actualisé via AJAX.


:D OK -- Etape 1 : Créer le tracker.
Script qui stocke les informations de l'utilisateur (position, sessid, ip, username et time)

:D OK -- Etape 2 : Créer une liste pour afficher les positions des utilisateurs lors des dernières 60 secondes
:D OK -- Etape 2.1 : Ajaxer le tout

:D OK -- Etape 3 : Limiter l'affichage à 1 enregistrement par user
A lieu d'afficher dans la même liste les x positions des dernières 60 sec n'afficher que la dernière par user afin d'obtenir une ligne par utilisateur.

??? -- Etape 4 : Convertir les url de position pour pouvoir en extraire le nom de l'album et l'id de la photo

??? -- Etape 5 : JavaScript et CSS pour designer le tout

??? -- Etape 6 : Copperminiser le tout (variables, traductions, templates etc..)

??? -- Etape 7 : Convertir le Hack en Plugin


Voilà pour l'affichage en liste. On verra pour la carte après.

PS : Bien entendu le script sera rendu public dès qu'il sera terminé et en attendant je posterais les portions de script pour les courageux qui veulent me filler un coup de main.  ;)

Et maintenant, en avant.

François Keller

projet prometteur.
Sous forme de plugin ou de MOD/HACK sachant que plugin serait mieux et plus facile pour la maintenance de la galerie.
Je veux bien tester pas de problèmes.
si tu as besoin d'un coup de main dans la mesure de mes connaissances, je veux bien (AJAX c'est pas mon truc j'y connais rien)
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

Pascal YAP

WoW,

L'idée est ambitieuse et le défi de poids !
L'idée est passionnante, et tous nos regards sont tournés vers EasyJava  ;D

Bien entendu nous sommes tous à disposition pour faire avancer le projet... idem pour la Dev Team anglophone je pense  ;)

Cependant, n'oublions pas que la version 1.5x est sur le grille en version Alpha.
Il serait judicieux de développer pour cette nouvelle version en même temps que pour la 1.4.x n'est-ce pas ?

PYAP

easyjava

J'aurais besoin d'aide pour le passage du Hack au plug-in.
Mais cela ne sera pas trop difficile puisque la majorité du projet exécute des pages qui sont nouvelles. Il faut juste inclure le script du tracker sur une page qui est chargée à chaque clique. Pour le moment je l'ai mis sur mon theme.php. Pour ce qui est d'AJAX ca devrait aller, je ne suis pas non plus expert mais il n'y en a qu'un peu pour l'actualisation et il est déjà mis en place.

EDIT : Pour la version 1.5 il ne devrait pas y avoir de gros soucis puisque, comme dit ci-dessus, il y a peu de modifications à apporter aux fichier de Coppermine.

François Keller

pour passer le HAck au plugin je pense pouvoir aider
en ce qui concerne la version 1.5 les plus grands changements viennent du fait de l'utilisation de la classe Inspekt pour sécuriser les variables super-globales, mais ce n'est pas insurmontable.
Par contre il est nécessaire de prévoir l'internationalisation de tout ça avec un fichier langue séparé
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

easyjava

J'ai rajouté le point 6 à la fin de la todo list. Pour le moment je code de manière générale, sans me soucier des variables propores à Coppermine. Une fois que tout sera terminé je m'en occuperais.

easyjava

Avez vous des suggestions concernant l'affichage de la liste ?

Par exemple afficher l'avatar si user logué ou d'autres conseils pour l'affichage de la liste ?

François Keller

Tout dépends de la manière dont la liste sera affichée:
si cette liste s'affiche dans une nouvelle page, tu peux mettre des détails (mais les avatars ne sont dispos que dans le modpack de Stramm)
si la liste s'affiche su la page d'index (box en plus, il faut limiter les détails pour une question de place)
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

easyjava

Pour le moment il n'est pas prévu d'implantation sous forme de "box" sur la page d'accueil. Le script de visualisation est très gourmand en ressources (1 requête) par seconde par visiteur. Je pense qu'il est plus sage de le séparer sur une page annexe.

easyjava

#9
Tout bien réfléchi ce n'est pas énorme 1 requête par personne/seconde  8).

Par contre j'ai besoin d'aide concernant un array.

Je crée une liste des actions des 10 dernières secondes ce qui me donne quelque chose comme cela :
ip - adresse - time
ce qui donne

123 - album.php - 20071011
123 - index.php - 20071011
123 - album.php - 20071011
148 - album.php - 20071011
148 - page.php - 20071011
132 - test.php - 20071011


Comment puis-je faire pour n'obtenir qu'une ligne par ip et l'ordonner pour afficher l'événement le plus récent. J'ai essayé avec GROUP BY mais je n'arrive pas à ordonner. Peut-être faut-il tout stocke dans un array puis le trier avec une boucle ?


EDIT : Est ce que quelqu'un peut m'expliquer comment sont gérés les sessions dans coppermine. Coppermine crée t-il un session id pour chaque visiteur même anonyme ? Si oui cela serait pratique pour moi.

Pascal YAP

QuoteTout bien réfléchi ce n'est pas énorme 1 requête par personne/seconde
Si si c'est énorme !
Imaginons une Galerie X ouY totalise un nombre extrême de visites ! Par exemple 10 visites par minute ce qui n'est pas impossible ! Immédiatement le nombre de requètes SQL atteint 60  ???
Sans parler des requêtes pour l'affichage des images ou autre gourmandises, le serveur peut être chargé !
La réflexion se doit d'être plus fine.

QuotePeut-être faut-il tout stocke dans un array puis le trier avec une boucle ?
Effectivement c'est une idée à creuser.

PYAP

François Keller

Quotee crée une liste des actions des 10 dernières secondes ce qui me donne quelque chose comme cela :


ip - adresse - time

ce qui donne


123 - album.php - 20071011
123 - index.php - 20071011
123 - album.php - 20071011
148 - album.php - 20071011
148 - page.php - 20071011
132 - test.php - 20071011


Comment puis-je faire pour n'obtenir qu'une ligne par ip et l'ordonner pour afficher l'événement le plus récent. J'ai essayé avec GROUP BY mais je n'arrive pas à ordonner. Peut-être faut-il tout stocke dans un array puis le trier avec une boucle ?
il faut effectivement placer ça dans un tableau et trier le tableau pour ne garder que la valeur la plus récente (il faut stocker quelque chose avec la date et l'heure pour ce calcul)
QuoteEst ce que quelqu'un peut m'expliquer comment sont gérés les sessions dans coppermine. Coppermine crée t-il un session id pour chaque visiteur même anonyme ? Si oui cela serait pratique pour moi.
a ma connaissance, coppermine crée une variable USER_ID pour les utilisateurs enregistrés.
Concernant les sessions, j'avoue ne pas savoir exacement mais il doit effectivement y avoir quelque chose puisque deux cookies sont crées.
pour les cookies, regardes entre autre dans le fichier include/functions.inc.php vers la ligne 122
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

easyjava

Ok pour le tableau.

Enfait j'ai jeté un coup d'oeil à la base cpg1410_sessions. Je ne pense pas utiliser les cookies mais plutot ce qui est stocké dans la base de données. Il y a un userid dans cette table et cela arrive que des enregistrements possèdent bien un session_id mais avec un user_id 0. Cela voudrait-il dire que Coppermine crée aussi des sessions_id pour les visiteurs anonymes  ???

François Keller

il semble en effet, maintenant il faudrait voir avec plusieurs connections de visiteurs anonymes ce qu'il y a dans la table (en local c'est pas évident)
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

easyjava

Je suis contant car je viens de réussi, avec un peu d'aide, à créer ma requête.
Il fallait faire une boucle n'affichant qu'un ip par ligne qui soit le dernier enregistrement mais dont le dernier enregistrement soit plus récent que date('U')-60 soit les actions passées dans la dernière minute... heu je ne sais pas si vous me suivez...  ::)

Bref voici la requête sql actuelle :


'SELECT cpg1410_map.ip, cpg1410_map.url, cpg1410_map.username, cpg1410_map.datetime
FROM cpg1410_map
INNER JOIN (
SELECT MAX(datetime) AS datetime, ip
FROM cpg1410_map
    WHERE cpg1410_map.datetime = datetime
GROUP BY ip) b
ON (cpg1410_map.ip = b.ip AND cpg1410_map.datetime = b.datetime)
WHERE cpg1410_map.datetime >='.$limit.'
ORDER BY cpg1410_map.ip DESC';


Prochaine étape : la conversion des url (ou comment récupérer les albums_id et pictures_id).

easyjava

Je rencontres quelques problèmes avec le système d'actualisation en AJAX uniquement sur certains ordinateurs et que sur Internet Explorer 7  >:( hmmm  :-X.

Je pense qu'il va falloir changer de trechnique. Actuellement toute la requête se rafraîchit chaque seconde. Mais je doute que le navigateur puisse charger 5 vignettes (par exemple) plus le texte en une seconde ! Malheureusement je ne sais pas trop comment m'y prendre, il va falloir que je fasse une investigation plus approfondie de la chose. Mais je vous tiens au courant.

easyjava

Bonjour,

Le projet avance et prend forme mais j'ai cependant besoin d'aide.
J'utilise une technique de bricolage pour récupérer l'id de la photo à partir de l'url et c'est vraiment boîteux.

Est ce que quelqu'un sait comment récupérer le pid quand on est sur displayimage.php ? Le mieux pour moi serait de pouvoir récupérer cet ID sur theme.php ?

Merci d'avance

François Keller

quand on est sur display.php on a $_GET['album'] qui donne l'album et $_GET['pos'] qui donne une position dans l'album, mais je n'ai jamais bien compris  a quoi ça correspond
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

François Keller

tu trouves aussi le pid dans l'url de l'image (celle qui est affichée dans les infos sur la page displayimage.php)
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

easyjava

Merci,

Je connaissais déjà ces informations. Mais ce n'est pas pratique. Je me suis dit qu'a un moment ou un autre il doit bien y avoir une variable pid qui est créée pour récupérer les informations d'une image (que ce soit pour l'url ou les infos). Personne n'a une idée ?