Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1104 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Création de wiki ... Quelques questions.[Array Filter PHP]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Création de wiki ... Quelques questions.[Array Filter PHP]

n°1388026
stagiux
Posté le 15-06-2006 à 12:02:10  profilanswer
 

Bonjour.
 
Je voudrais creer un wiki qui répond a plusieurs contraintes et je n'ai pas trouvé mon bonheur.
 
Exemple d'utilisation du wiki :  
 
Une entreprise X a 2 clients que nous nommerons A et B.
 
Pour le client A, il y a 1 projet.
L'entreprise et le client communique, collabore sur le projet par cette interface. Il ajoute des modif etc...
 
Pour le client B, pareil.
 
Le client A ne doit pas voir ce qui se passe pour le client B, lorsqu'il se connecte il voit directement la liste de Ses projet.
 
 
J'ai testé dokuwiki et mediawiki...
 
Sans succès.
 
Avez vous des idées ou des conseils?


Message édité par stagiux le 19-06-2006 à 11:34:51
mood
Publicité
Posté le 15-06-2006 à 12:02:10  profilanswer
 

n°1388040
Master p
My new cock ring :D
Posté le 15-06-2006 à 12:20:46  profilanswer
 

Où est le problème ?

n°1388042
stagiux
Posté le 15-06-2006 à 12:26:46  profilanswer
 

Merci d'avoir rép :-)
 
Dans dokuwiki le problème est que lorsque je me connecte, il arrive sur la page index ou il y a une liste de tout les client.  
La gestion des droit ne permettent pas d'acceder a leur projets, mais bon, la liste des client ca l'fais pas quoi...
 
Dans mediawiki: C'est plutot concu pour faire une encyclopédie (pas pour rien que c'est utilisé par wikipédia vous allez m'dire !) donc vraiment pas approprié.
 
En faite je cherche un wiki qui : Lorsque je me connecte, en fonction du pseudo avec lequel je suis loggé, JE VOIS tel ou tel page. Et que je NE VOIS pas les pages auxquel mon profil n'est pas associé.
 
C'été ca le problème sous dokuwiki : je voyais les pages meme si je n'y avais pas accès. Et aller modifier le code source d'une uzinagaz comme celui la...

Message cité 1 fois
Message édité par stagiux le 15-06-2006 à 12:27:00
n°1388044
2xyo
2*yo = yoyo
Posté le 15-06-2006 à 12:30:03  profilanswer
 

Solution pas propre, installer plusieurs wiki dans des sous domaines par exemple protégés par des htaccess ou une petite modif au niveau des sessions.

n°1388052
Master p
My new cock ring :D
Posté le 15-06-2006 à 12:38:38  profilanswer
 

stagiux a écrit :

Et aller modifier le code source d'une uzinagaz comme celui la...

N'a rien de très difficile si on a un peu de temps.
Je ne le connais pas perso mais pour ce que tu demandes, il suffit de mettre une redirection selon l'id de l'utilisateur (pas super propre, mais c'est vite fait)

n°1388127
stagiux
Posté le 15-06-2006 à 13:46:53  profilanswer
 

2xyo a écrit :

Solution pas propre, installer plusieurs wiki dans des sous domaines par exemple protégés par des htaccess


 
Justement j'y avais pensé... mais non ca n'irait pas, car l'admin des travaux de l'entreprise X aura à se connecter a N wiki différents... c'est un peu chiant pour lui, faudrai une soluce completement transparente...
 

2xyo a écrit :

ou une petite modif au niveau des sessions.


 

Master p a écrit :

N'a rien de très difficile si on a un peu de temps.
Je ne le connais pas perso mais pour ce que tu demandes, il suffit de mettre une redirection selon l'id de l'utilisateur (pas super propre, mais c'est vite fait)


 
J'y avais pensé. j'ai fouillé dans les sources et je n'ai vu nul part des "session start", juste des include par demi douzaine qui eux meme necessite d'autre fichiers...  
 
J'peut t'envoyer les sources deja configuré si ca t'interesse d'y jeter un pti coup d'oeil.
 
Ca n'existe pas des wikis avec gestion d'accès/visibilité a certaine page ?


Message édité par stagiux le 15-06-2006 à 13:47:53
n°1388152
Master p
My new cock ring :D
Posté le 15-06-2006 à 14:11:04  profilanswer
 

Code :
  1. [dokuwiki-2006-03-09]$ grep session_start inc/*
  2. inc/init.php:    session_start();


C'est pas des connaissances qu'il te manque, c'est de la volonté [:pingouino]
Le code est propre et plutot bien construit, je me répète, ça a pas l'air dur

n°1388178
stagiux
Posté le 15-06-2006 à 14:27:33  profilanswer
 

ok-ok, reprenons donc les sources...
J'ai vu que le fichier de conf été dokuwiki.php.
 
dans celui ci, on peut trouver $conf['savedir']     = './data/';
que j'ai tenter de remplacer par $conf['savedir']     = './data/'.$user;
 
$user je l'ai trouver dans le fichier appelé par doku.php qui s'appel auth.php
cela semblre etre la variable qui contient le nom de l'user.
 
Plus rien n'a fonctionné.
Les authentification de marchais plus du tout.
 


Message édité par stagiux le 15-06-2006 à 14:28:21
n°1388206
Master p
My new cock ring :D
Posté le 15-06-2006 à 14:48:47  profilanswer
 

S'il y a possibilité de faire des catégories différentes, fais une catégorie pour chaque user, et force cette catégorie lors de l'authentification. Bien sûr, je te dis ça sans avoir tester et je ne garantis pas le résultat.
Sinon, tu cherches sur google (un peu comme ça et tu cliques sur le 2ème lien [:dawa])

n°1388225
stagiux
Posté le 15-06-2006 à 15:06:14  profilanswer
 

vais mettre en ligne le truc pour que tu vois ce qui cloche...

mood
Publicité
Posté le 15-06-2006 à 15:06:14  profilanswer
 

n°1388244
stagiux
Posté le 15-06-2006 à 15:19:43  profilanswer
 

http://extranetr2d4.ovh.org/dokuwiki2/doku.php
 
Voila.
Connect toi en tant que client/client tu aura accès au repertoire 530 et son contenu et pas a 531
Connect toi en tant que client2/client2 tu aura accès au repertoire 531 et son contenu et pas a 530
 
Voila. C'est exactement ca qu'il me faut. sauf que je ne veux pas voir "531" quand je suis connecté en tant que client et 530 quans je suis connecté en tant que client2...
 
EDIT : MP moi si tu veut le pass admin pour voir comment j'ai géré les accès


Message édité par stagiux le 15-06-2006 à 15:20:37
n°1388267
Master p
My new cock ring :D
Posté le 15-06-2006 à 15:56:21  profilanswer
 

:/ Je peux pas tester en local, donc je ne peux pas vérifier ce que je vais te dire.
L'index est construit dans le fichier inc/html.php:html_index.php. Tu peux donc éliminer à cet endroit-là le contenu de l'arborescence n'appartenant pas à ton user.  
Comment ? en créant des catégories au nom des utilisateurs (ou groupe d'utilisateur) et ne gardant que celui-ci dans le contenu du tableau $data (l. 587)

n°1388286
stagiux
Posté le 15-06-2006 à 16:20:05  profilanswer
 

Code :
  1. function html_index($ns){
  2.   require_once(DOKU_INC.'inc/search.php');
  3.   global $conf;
  4.   global $ID;
  5.   $dir = $conf['datadir'];
  6.   $ns  = cleanID($ns);
  7.   #fixme use appropriate function
  8.   if(empty($ns)){
  9.     $ns = dirname(str_replace(':','/',$ID));
  10.     if($ns == '.') $ns ='';
  11.   }
  12.   $ns  = utf8_encodeFN(str_replace(':','/',$ns));
  13.   print p_locale_xhtml('index');
  14.   $data = array();
  15.   search($data,$conf['datadir'],'search_index',array('ns' => $ns));
  16.   print html_buildlist($data,'idx','html_list_index','html_li_index');
  17. }


 
OMG...  [:ahcarien]  
 
Les categories sont déja crée.
Client fait partie du groupe d'user "clientA" et Client2 fait partie du goupe d'user "ClientB"
 
pourquoi le tableau $data est reinitialisé ?

n°1388372
Master p
My new cock ring :D
Posté le 15-06-2006 à 18:15:21  profilanswer
 

Wikini fait pas ce que tu veux ? cf http://www.wikini.net/wakka.php?wiki=AccessControl
(pas que je m'ennuie, mais finalement, je crois que je vais travailler)

n°1388630
stagiux
Posté le 16-06-2006 à 09:16:44  profilanswer
 

Master p a écrit :

Wikini fait pas ce que tu veux ? cf http://www.wikini.net/wakka.php?wiki=AccessControl
(pas que je m'ennuie, mais finalement, je crois que je vais travailler)


 
 
Non j'ai testé...de plus il est mal concu je trouve... utilisation peu intuitive.
Merci du coup de main MasterP sans toi mon topic aurait pas beaucoup de succès!

n°1388657
Master p
My new cock ring :D
Posté le 16-06-2006 à 09:42:58  profilanswer
 

stagiux a écrit :

Code :
  1. function html_index($ns){
  2.   require_once(DOKU_INC.'inc/search.php');
  3.   global $conf;
  4.   global $ID;
  5.   $dir = $conf['datadir'];
  6.   $ns  = cleanID($ns);
  7.   #fixme use appropriate function
  8.   if(empty($ns)){
  9.     $ns = dirname(str_replace(':','/',$ID));
  10.     if($ns == '.') $ns ='';
  11.   }
  12.   $ns  = utf8_encodeFN(str_replace(':','/',$ns));
  13.   print p_locale_xhtml('index');
  14.   $data = array();
  15.   search($data,$conf['datadir'],'search_index',array('ns' => $ns));
  16.   print html_buildlist($data,'idx','html_list_index','html_li_index');
  17. }




Peux-tu me faire un `print_r($data);` juste après la ligne 17 et m'indiquer son résultat ?


Message édité par Master p le 16-06-2006 à 09:43:31
n°1388662
stagiux
Posté le 16-06-2006 à 09:48:53  profilanswer
 

Voici un index de toutes les pages disponibles, triées par catégorie.
 
Array ( [0] => Array ( [id] => 0530 [type] => d [level] => 1 [open] => ) [1] => Array ( [id] => 0531 [type] => d [level] => 1 [open] => ) [2] => Array ( [id] => inutile [type] => d [level] => 1 [open] => ) [3] => Array ( [id] => wiki_r2d4 [type] => f [level] => 1 [open] => 1 ) )
 
    *
      0530
    *
      0531
    *
      inutile
    *
      wiki_r2d4


Message édité par stagiux le 16-06-2006 à 09:49:44
n°1388666
Master p
My new cock ring :D
Posté le 16-06-2006 à 09:52:41  profilanswer
 

Résumons, tu veux qu'un user ClientA puisse avoir visibilité seulement sur le dossier `ClientA`, mais qu'un user Admin puisse avoir visibilité sur l'ensemble des dossiers. Ce que je te propose n'est pas propre et pas vérifié, mais c'est en gros ce que j'aurais fait :

Code :
  1. if ($user != 'Admin') $data2 = array_filter($data,'tri_index');
  2. print html_buildlist($data2,'idx','html_list_index','html_li_index');

En remplacement de la ligne 18
 

Code :
  1. function tri_index($array) {
  2. return($array['id'] != $user && $array['level'] == 1);
  3. }

Hors de la fonction html_index()
 
Je répète que je n'ai pas les moyens de tester en live, donc si ça ne fonctionne pas, ça ne doit pas en être loin mais je te laisse t'occuper du débuggage. Pour comprendre : http://fr3.php.net/manual/fr/function.array-filter.php


Message édité par Master p le 16-06-2006 à 10:08:39
n°1388677
stagiux
Posté le 16-06-2006 à 10:02:41  profilanswer
 

oui voila.  
 
Le client A (qui est dans la catégorie d'user "ClientA" ) voit la dossier 530 mais pas le dossier 531.
Le client B(qui est dans la catégorie d'user "ClientB" ) voit le dossier 531 mais pas le dossier 530.
L'admin (qui est dans la catégorie d'user "Admin" ) voit Tout.


Message édité par stagiux le 16-06-2006 à 10:02:55
n°1388680
Master p
My new cock ring :D
Posté le 16-06-2006 à 10:07:46  profilanswer
 

cf edit
Ce que j'ai fait nécéssite d'avoir des noms de dossiers identiques aux noms d'user (ou sinon, tu peux te baser sur les catégories).
Maintenant, faut vérifier que l'accès direct via l'url n'est pas possible.


Message édité par Master p le 16-06-2006 à 10:09:45
n°1388735
stagiux
Posté le 16-06-2006 à 10:41:28  profilanswer
 

merci...
Maintenant je cherche dans quel variable est stocké l'user... car quand je fais echo $user; il répond rien...
 
ARRRRRFFFFFF !

n°1388782
stagiux
Posté le 16-06-2006 à 11:08:40  profilanswer
 

$_SESSION[$conf['title']]['auth']['user']
 
C'était la dedand !  
pfiou ! fallait le trouver !
vais continuer sur ce que tu m'a dis...

n°1389115
stagiux
Posté le 16-06-2006 à 15:17:23  profilanswer
 

Bon : Voila ou j'en suis...
 
J'ai modifier le code comme tu me l'a indiquer de sorte que :  
 

Code :
  1. function html_index($ns){
  2.   require_once(DOKU_INC.'inc/search.php');
  3.   global $conf;
  4.   global $ID;
  5.   $dir = $conf['datadir'];
  6.   $ns  = cleanID($ns);
  7.   #fixme use appropriate function
  8.   if(empty($ns)){
  9.     $ns = dirname(str_replace(':','/',$ID));
  10.     if($ns == '.') $ns ='';
  11.   }
  12.   $ns  = utf8_encodeFN(str_replace(':','/',$ns));
  13.   print p_locale_xhtml('index');
  14.   $data = array();
  15.   search($data,$conf['datadir'],'search_index',array('ns' => $ns));
  16.   //print html_buildlist($data,'idx','html_list_index','html_li_index'); Ligne d'origine remplacé par le code suivant :  
  17.   $user=$_SESSION[$conf['title']]['auth']['user'];
  18.   echo $user."<br><br><b>Admin partie</b><br><br>";
  19.    if ($user != 'geoffrey')
  20.    {
  21.    var_dump ($data);
  22.    echo "<br>test1<br>";
  23.    $data2 = array_filter($data,'tri_index');
  24.    echo"<br><br><b>User partie</b><br><br>";
  25.    var_dump ($data2);
  26.    echo "<br><br>";
  27.    print html_buildlist($data2,'idx','html_list_index','html_li_index'); }
  28.    else {
  29.    echo "salut l'admin ! ";
  30.    print html_buildlist($data,'idx','html_list_index','html_li_index'); }
  31. }


 
 
 

Code :
  1. function tri_index($array) {
  2.     $users=$_SESSION[$conf['title']]['auth']['user'];
  3.     echo "l'user est $users";
  4.     return($array['id'] != $user && $array['level'] == 1);
  5.     }


 
 
Me problème se situe a un niveau assez particulier...  
Lorsque j'utilise l'index creer par Data2, les repertoire ne sont plus browsable. je ne peut plus acceder au contenu d'aucun repertoire, ca fais comme si j'avais pas les droit. (connectes toi sur le wiki que j'ai mis en ligne en tant que client/client et essaie de voir le repertoire 531. ca me fais exactement pareil sur tout les dossiers.)
 
Mais ca c'est secondaire, ca doit etre une histoire de droit je verrai ca après.
 
Pour l'instant ma préoccupation : La fonction tri_index.
Tu m'as dis de marquer return($array['id'] != $users && $array['level'] == 1);
 
J'ai rajouté au  dessus de cette ligne " $users=$_SESSION[$conf['title']]['auth']['user'];"
Mais quand je fais echo "l'user est $users";
 
il me répond "l'user est l'user est l'user est l'user est l'user est l'user est l'user est l'user est l'user est "
 
POURQUOI LA VARIABLE DE SESSION NE FONCTIONNE PAS ALORS QU'ELLE MARCHE 3 LIGNES PLUS HAUT ????????????????????????? (oui j'me suis arraché quelque cheveux depuis hier... bon d'accord j'arreterais  :whistle: )

n°1389154
Master p
My new cock ring :D
Posté le 16-06-2006 à 15:40:54  profilanswer
 

1/ Fais un print_r($_SESSION) pour en voir son contenu
2/ gaffe, dans le return, de remplacer le $user par $users
 
En fait, cette modification va éliminer les répertoires de niveau qui n'ont pas le nom de l'utilisateur, il faut donc faire des répertoires au nom des utilisateurs (ou des catégories si t'adaptes la modif). Maintenant, à toi de trouver la variable user, ça doit pas être bien sorcier

n°1389159
Master p
My new cock ring :D
Posté le 16-06-2006 à 15:45:27  profilanswer
 

$INFO['userinfo']['name']

n°1389179
stagiux
Posté le 16-06-2006 à 15:58:58  profilanswer
 

Ce que je comprend pas, la variable user je l'ai trouvé !!!! elle est dedand : $_SESSION[$conf['title']]['auth']['user']
mais c'est comme si elle était vide quand elle rentrais dans la fonction tri_index :??:
 
EDIT : quand je fais echo $_SESSION[$conf['title']]['auth']['user'] ; dans la fonction html_index, il sait me dire qui c'est.  
par contre le meme echo dans une autre fonction de la meme page et la il est perdu ??
et quand je fais print_r (^$_session); il me sort le meme resultat que si je le fesais dans la fonction html_index...
 


Message édité par stagiux le 16-06-2006 à 16:20:58
n°1389245
stagiux
Posté le 16-06-2006 à 16:38:35  profilanswer
 

C'est bon. en faite, j'avais pas declarer dans la fonction tri_index la variable global $conf....
Ce problème la est résolu :-)

n°1390315
stagiux
Posté le 19-06-2006 à 10:50:31  profilanswer
 

Bon, suite et j'espere fin de mes problème...
 
Je ne trouve pas la solution pour executer l'array filter sur un tableau multidimensionel.
 
Pourquoi j'ai besoin de ca :  
 
Tout d'abord voici ma source (d'ennui ? lol):  
 

Code :
  1. function html_index($ns){
  2.   require_once(DOKU_INC.'inc/search.php');
  3.   global $conf;
  4.   global $ID;
  5.   $dir = $conf['datadir'];
  6.   $ns  = cleanID($ns);
  7.   #fixme use appropriate function
  8.   if(empty($ns)){
  9.     $ns = dirname(str_replace(':','/',$ID));
  10.     if($ns == '.') $ns ='';
  11.   }
  12.   $ns  = utf8_encodeFN(str_replace(':','/',$ns));
  13.   print p_locale_xhtml('index');
  14. /**************** PARTIE MODIFIÉ PAR MES SOINS ***********************/
  15.   $user=$_SESSION[$conf['title']]['auth']['user'];
  16.    if ($user != 'geoffrey') /* geoffrey( moi), c'est l'admin*/
  17.    {
  18.    $data2=array();
  19.    search($data2,$conf['datadir'],'search_index',array('ns' => $ns));
  20.    echo "<br>Sdata2 après Search : <br>";
  21.    var_dump ($data2);
  22.    array_filter($data2,'tri_index');
  23.    echo "<br><br> Sdata2 après Array Filter ";
  24.    var_dump($data2);
  25.    print html_buildlist($data2,'idx','html_list_index','html_li_index');
  26.    }
  27.    else
  28.    {
  29.    $data = array();
  30.    search($data,$conf['datadir'],'search_index',array('ns' => $ns));
  31.    echo "salut l'admin ! ";
  32.    print html_buildlist($data,'idx','html_list_index','html_li_index');}
  33.    }
  34.     /* test on*/
  35.     function tri_index($array) {
  36.     global $conf;
  37.     $user=$_SESSION[$conf['title']]['auth']['user'];
  38.     return($array['id'] == $user" );
  39.     }


 
Le problème :  
Voici ce que me donne ce page en étant loggé en NON-Admin :
 

Citation :

Voici un index de toutes les pages disponibles, triées par catégorie.
 
Sdata2 après Search :
array(3)
{  
[0]=> array(4) { ["id"]=> string(6) "client" ["type"]=> string(1) "d" ["level"]=> int(1) ["open"]=> bool(true) }  
[1]=> array(4) { ["id"]=> string(7) "client2" ["type"]=> string(1) "d" ["level"]=> int(1) ["open"]=> bool(false) }  
[2]=> array(4) { ["id"]=> string(9) "wiki_r2d4" ["type"]=> string(1) "f" ["level"]=> int(1) ["open"]=> bool(true) }  
}
 
Sdata2 après Array Filter :
array(3)  
{
[0]=> array(4) { ["id"]=> string(6) "client" ["type"]=> string(1) "d" ["level"]=> int(1) ["open"]=> bool(true) }  
[1]=> array(4) { ["id"]=> string(7) "client2" ["type"]=> string(1) "d" ["level"]=> int(1) ["open"]=> bool(false) }
[2]=> array(4) { ["id"]=> string(9) "wiki_r2d4" ["type"]=> string(1) "f" ["level"]=> int(1) ["open"]=> bool(true) }  
}
 
    *
      client
    *
      client2
    *
      wiki_r2d4

 
 
La fonction tri index devrait faire en sorte que l'index n'affiche que "Client" car je suis loggé  en "Client".
 
Et d'après  [:google]  Array filter n'accomplit pas sa tache en tableau multidimensionel...


Message édité par stagiux le 19-06-2006 à 12:03:46
n°1390383
stagiux
Posté le 19-06-2006 à 11:56:12  profilanswer
 

up :cry:

n°1390506
Master p
My new cock ring :D
Posté le 19-06-2006 à 14:56:51  profilanswer
 

fait un `print $user` dans le tri_index(). Pas de raison que ça marche pas[:spamafote]
De plus, en l. 46

Code :
  1. return($array['id'] != $user );


Message édité par Master p le 19-06-2006 à 14:57:31

---------------
HAHAHA I M USING TEH INTERNET
n°1390564
stagiux
Posté le 19-06-2006 à 15:55:59  profilanswer
 

J'ai trouvé la solution en comparant les var dump des $data en entrée et en sortie de tri index...
 
en faite, cette fonction necessitais que le Repertoire ET le nom du fichier se trouvant a l'interieur soit identique. ce qui ne permettais pas de gerer plusieurs projet.
 
La solution, je viens de la pondre, est de rajouter $array['level']>'1'; dans le return.
 
Comme il n'est pas possible que les fichiers de l'autre client se mette en level 2 (car pas affiché, cqfd)....
 
pas d'autre soluces plus intelligente pour mon cerveau !
 
 

n°1390917
Master p
My new cock ring :D
Posté le 19-06-2006 à 18:40:08  profilanswer
 

Mouais, un détail que j'ai oublié par la suite


---------------
HAHAHA I M USING TEH INTERNET
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Création de wiki ... Quelques questions.[Array Filter PHP]

 

Sujets relatifs
Mettre des liens dans un Wiki (la question de pro!)création de GUI avec Glade
Php débutant (vraiment)[RESOLU] liaison javascript / PHP
phpATM - PHP Transfer Manager[PHP] pourquoi ma page généré est tout blanche sans erreur ?
réaliser une facture en HTML ou PHP...[PHP] Aperçu de fichiers - Extraire données fichier Excel
création d'objetPhp Nuke ou autre pour site Petites Annonces
Plus de sujets relatifs à : Création de wiki ... Quelques questions.[Array Filter PHP]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR