Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] [Resolu] Surcharge de la fonction _index

Posted by info2012 on 06/07/2013 14:57

Bonjour,

J'essaye de sucharger la fonction _index du CRUD pour récupérer dans un premier temps le login de l'utilisateur connecté au site qui est de la forme nom.prenom, pour ensuite afficher des projets en fonction de l'utilisateur qui est connecté et dont les noms et prénoms se trouvent également dans une table user. J'arrive à récupérer les infos mais pas à afficher la liste des projets en fonction de ces utilisateurs. J'ai surement oublié quelquechose de super évident...

Voilà le code de ma classe:

class ChercheUser {

	public $nom;
	public $prenom;
	
   public function __construct()
     
	{
    $user = jAuth::getUserSession();
	$nom_prenom = explode ('.',$user->login);
	$this->prenom = $nom_prenom [0];
	$this->nom = $nom_prenom [1];
	//echo "je m'apelle ".$this->prenom." ".$this->nom." ";
	// var_dump ($user);
  }
}

Et voilà le code du controleur:

    protected function _index($resp, $tpl) {

	$client = jClasses::getService("adminprojets~chercheuser");
	$maFactory = jDao::get("adminprojets~chercheprojets");
	$conditions = jDao::createConditions();
	$conditions->startGroup('AND');
        $conditions->addCondition('nom_user','=',$client->nom);
        $conditions->addCondition('prenom_user','=',$client->prenom);
	$conditions->endGroup(); 
	$listTemplate = $maFactory->findBy($conditions);

Normalement la variable $listAction devrait être prise en charge par le template de la fonction index du crud non?

Merci beaucoup.

Bonne journée

  [Opened] Re: Surcharge de la fonction _index

Reply #1 Posted by info2012 on 06/14/2013 11:36

Bonjour,

Ça y est j'ai réussi à récupérer l'id de l'utilisateur connecté, j'ai modifié ma propre table des utilisateurs qui contient maintenant un champ login. Celui-ci est de la forme nom.prenom dans ma table ainsi que dans la table jlx_user du module d'administration.

J'avais oublié de préciser que mon site est géré par le module admin, et qu'on y rentre que via une un formulaire de connexion (désolée). Quand on est connecté les administrateurs peuvent voir toutes les données, mais les clients eux ne voient que leur propre données. Ils ont donc les droits de lecture sur certains modules, et lorsqu'il visualisent ces modules ils ne voient que leurs données.

Je ne sais pas si je suis très claire? Je mets mon code pour si jamais il peut servir à quelqu'un d'autre: Voilà la classe qui récupère le nom de l'utilisateur jelix et va chercher l'id de cet utilisateur dans ma base de donnée (tables user):

class ChercheUser {
	public $login;
	protected $dbProfile = 'nom_profile';
   public function __construct()
   	{
        $user = jAuth::getUserSession();
	$this->login = $user->login;
	//echo "je m'apelle ".$this->prenom." ".$this->nom." ";
	}
    public function ChercheIdUser() 
        {
	$cnx = jDb::getConnection($this->dbProfile);
	$req = "select id_user from users where login_user = '$this->login' ";
	$res = $cnx->query($req);
	$record = $res->fetch();
	if ($record)
		$id_user = $record->id_user;
	return $id_user;

	}
}

Voilà la fonction _index surchargée:

 protected function _index($resp, $tpl) {
	 
	
	$client = jClasses::getService("adminprojets~chercheuser");
	$id_user= $client->ChercheIdUser();
	
	$maFactory = jDao::get("adminprojets~chercheprojets");
	$conditions = jDao::createConditions();
	$conditions->startGroup('AND');
        $conditions->addCondition('cle_user_collaboration','=',$id_user);
    $conditions->endGroup(); 
	$liste = $maFactory->findBy($conditions);
	foreach($liste as $record) 
			{ 
			echo $record->titre_projet;
			}

}

Bon, ça, ça fonctionne, par contre (là c'est plus une question sur la programmation que sur jelix, mais je n'ai pas l'habitude de surcharger des fonctions). Avec ce code, j'aimerai utiliser le contrôleur jControllerDaoCrud pour gérer les droits et utiliser l'interface graphique comme le fait la fonction index, mais est-t-il possible de remplacer toute la liste affichée par défaut du contrôleur jControllerDaoCrud par celle que j'obtiens en surchargeant la fonction _index, mais en gardant la charte graphique, templates...? Ou alors je reprogramme tout en créant une autre fonction dans le contrôleur?

Merci beaucoup, je suis désolée si je ne suis pas très claire.

Bonne journée.

  [Opened] Re: Surcharge de la fonction _index

Reply #2 Posted by foxmask on 06/14/2013 19:07

peux pas aider je n'utilise pas crud dsl


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: Surcharge de la fonction _index [RESOLU]

Reply #3 Posted by info2012 on 06/17/2013 10:03

Bonjour,

Je m'en suis sortie en créant mon propre template à partir du du fichier jelix~crud_list de jelix. Je remet mes deux fichiers de codes:

La fonction _index:

protected function _index($resp, $tpl) {
	 
	$rep = $this->getResponse('html');
	$client = jClasses::getService("adminprojets~chercheuser");
	$id_user= $client->ChercheIdUser();
	
	$maFactory = jDao::get("adminprojets~chercheprojets");
	$conditions = jDao::createConditions();
	$conditions->startGroup('AND');
        $conditions->addCondition('cle_user_collaboration','=',$id_user);
    $conditions->endGroup(); 
	$list = $maFactory->findBy($conditions);
	$record = jDao::createRecord('adminprojets~chercheprojets');
	$tpl->assign('list',$list);
	$rep->body->assign('MAIN', $tpl->fetch('list_projet'));
<code>

La classe ChercheUser:

<code>
class ChercheUser {
public $login;
	protected $dbProfile = 'nom_profile';

public function __construct()
     
	{
    $user = jAuth::getUserSession();
	$this->login = $user->login;
	//echo "je m'apelle ".$this->prenom." ".$this->nom." ";
	// var_dump ($user);
	}
	
	public function ChercheIdUser() {
		$cnx = jDb::getConnection($this->dbProfile);
		$req = "select id_user from users where login_user = '$this->login' ";
		$res = $cnx->query($req);
		$record = $res->fetch();
		if ($record)
			$id_user = $record->id_user;
		
		return $id_user;
}}

Bonne journée :)

  [Opened] [Resolu] Surcharge de la fonction _index

Reply #4 Posted by laurentj on 06/19/2013 15:05

Bonjour,

au lieu de faire tout ça :

	$maFactory = jDao::get("adminprojets~chercheprojets");
	$conditions = jDao::createConditions();
	$conditions->startGroup('AND');
        $conditions->addCondition('cle_user_collaboration','=',$id_user);
    $conditions->endGroup(); 
	$list = $maFactory->findBy($conditions);

déclarer une nouvelle méthode dans le dao chercheprojets ! ça sera plus performant (la requête étant alors en dure dans la classe générée).

Ensuite

$rep->body->assign('MAIN', $tpl->fetch('list_projet'));

Non. Il y a une propriété dans la classe du crud, qui permet justement d'indiquer le template que l'on veut afficher. Là tu as juste tout cassé la logique.

Donc:

     protected $listTemplate = 'adminprojets~list_projet';

Enfin, plutôt que de faire une requête pour récupérer l'id du user, logiquement tu devrais déjà l'avoir dans l'objet en session, si tu as indiquer ton propre dao pour les users dans la config de l'authentification

$id_user = jAuth::getUserSession()->id_user;

pas besoin de faire toute une classe pour récupérer ça ;-)

  [Opened] [Resolu] Surcharge de la fonction _index

Reply #5 Posted by info2012 on 06/21/2013 15:15

Coucou,

Merci Laurent :), j'avais un peu de difficulté avec les factory ;) des dao, donc je remet la nouvelle version du code:

Fonction _index

protected function _index($resp, $tpl) 
{
 $rep = $this->getResponse('html');
 $client = jClasses::getService("adminprojets~chercheuser");
 $id_client= $client->ChercheIdUser();
 // instanciation de la factory
  $maFactory = jDao::get('adminprojets~chercheprojets');
  // récupération de la liste des rpojets
  $list = $maFactory->findClient($id_client); 
   $tpl->assign('list',$list);
}

factory du dao

<factory>
        <method name="findClient" type="select">
            <parameter name="id_client" />
            <conditions logic="and">
                <eq property="cle_user_collaboration" expr="$id_client" />
            </conditions>
        </method>
 </factory>

Par contre j'avais quand même besoin de la classe chercheuser car c'est dans ma base que je vais chercher l'id de l'utilisateur. Je récupère le login de l'utilisateur jelix et je vais le chercher dans ma table des utilisateurs, puis c'est avec l'id de celui-ci que je récupère mes projets. J'ai deux bases séparées une pour gérer les droits et une pour les données de mon labo.

Bonne journée.

 
Page
  1. [Resolu] Surcharge de la fonction _index