vendor/theatre/core/src/Repository/ExtranetusersRepository.php line 37

Open in your IDE?
  1. <?php
  2. namespace TheatreCore\Repository;
  3. use Doctrine\ORM\Query;
  4. use TheatreCore\Entity\Abonnements;
  5. use TheatreCore\Entity\AnnAnnonces;
  6. use TheatreCore\Entity\BookmarkExtranetuser;
  7. use TheatreCore\Entity\Extranetusers;
  8. use TheatreCore\Entity\Subscribers;
  9. use TheatreCore\Entity\UserAction;
  10. use TheatreCore\Traits\TheatreTrait;
  11. use DateTime;
  12. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  13. use Doctrine\Persistence\ManagerRegistry;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. /**
  16.  * ExtranetusersRepository
  17.  *
  18.  * This class was generatedN by the Doctrine ORM. Add your own custom
  19.  * repository methods below.
  20.  */
  21. class ExtranetusersRepository extends ServiceEntityRepository
  22. {
  23.     use TheatreTrait;
  24.     private $em;
  25.     public $__table;
  26.     public $__table_object;
  27.     public $__idtable;
  28.     public function __construct(ManagerRegistry $registryTranslatorInterface $translator)
  29.     {
  30.         parent::__construct($registryExtranetusers::class);
  31.         $this->__table $this->getClassMetadata()->getTableName();
  32.         $this->__table_object $this->getClassMetadata()->name;
  33.         $this->__idtable $this->getClassMetadata()->getSingleIdentifierFieldName();
  34.         $this->translator $translator;
  35.         $this->current_database $_ENV['TH_BDD'];
  36.     }
  37.     // {{{ getTable()
  38.     /** Retourne le nom complet de la table avec le nom de la base en préfixe
  39.      *
  40.      *
  41.      * @access private
  42.      * @return string
  43.      */
  44.     private function getTable()
  45.     {
  46.         return $this->current_database '.' $this->__table;
  47.     }
  48.     // }}}
  49.     //  {{{ getRights()
  50.     /** Recupere les droits d'un utilisateur
  51.      *
  52.      *
  53.      * @access  public
  54.      */
  55.     public function getRights()
  56.     {
  57.         /*
  58.         * superadmin = 16+8+4+2+1=31
  59.         * root => 2n4 = 16+8+4+2+1=31
  60.         * lire (select) => 2n3 = 8
  61.         * creer (insert) => 2n2 = 4
  62.         * modifier (update) => 2n1 = 2
  63.         * supprimer (delete) => 2n0 = 1
  64.         */
  65.         $crud = array('delete''update''insert''select''isroot');
  66.         //idextranetuser
  67. //        require_once PATH_LIBS.'Auth/Login.php';
  68.         $idextranetuser SessionTheatre::getStaticValue('idextranetuser');
  69.         if (!empty($idextranetuser)) {
  70.             //recuperer les droits de l'utilisateur
  71.             $sql 'SELECT userrights
  72.                     FROM ' $this->getTable() . '
  73.                     WHERE idextranetuser=' . ((int)$idextranetuser);
  74.             $rightsValue $this->queryOne($sql);
  75.             if ($rightsValue 0) {
  76.                 //tableau des droits
  77.                 $rightstab = array();
  78.                 //inscription des differents droits
  79.                 $crud_count count($crud);
  80.                 for ($i 0$crud_count $i$i++) {
  81.                     if (($rightsValue pow(2$i)) != 0) {
  82.                         $rightstab[$crud[$i]] = true;
  83.                     } else {
  84.                         $rightstab[$crud[$i]] = false;
  85.                     }
  86.                 }
  87.                 //isadmin si superieur a 15
  88.                 $crud[5] = 'isadmin';
  89.                 $rightstab[$crud[5]] = false;
  90.                 if ($rightsValue >= 15) {
  91.                     $rightstab[$crud[$i]] = true;
  92.                 }
  93.                 return $rightstab;
  94.             } else {
  95.                 return array();
  96.             }
  97.         } else {
  98.             return array();
  99.         }
  100.     }
  101.     // }}}
  102.     //  {{{ findData()
  103.     /** Recherche des extranetusers
  104.      *
  105.      *
  106.      * @access  public
  107.      * @see     Theatre::find()
  108.      */
  109.     public function findData()
  110.     {
  111.         // requete perso
  112.         $query null;
  113.         $query $this->createQueryBuilder('e');
  114.         $query->leftJoin(Abonnements::class, 'a''WITH''a.idextranetuser = e.idextranetuser');
  115.         if ($this->getCount()) {
  116.             $query->select('COUNT(e.idextranetuser)');
  117.             $this->setCount(false);
  118.             return $query;
  119.         }
  120. //        $query->addSelect('partial a.{idabonnement}');
  121.         // parametre
  122.         if (isset($_REQUEST['idextranetuser']) && !empty($_REQUEST['idextranetuser'])) {
  123.             $idextranetuser $_REQUEST['idextranetuser'];
  124.         }
  125.         if (isset($_REQUEST['keywords']) && !empty($_REQUEST['keywords'])) {
  126.             $keywords filter_var(trim($_REQUEST['keywords']), FILTER_SANITIZE_STRINGFILTER_FLAG_NO_ENCODE_QUOTES);
  127.             if ($this->my_is_int($keywords)) {
  128.                 $idextranetuser = (int)$keywords;
  129.                 $keywords null;
  130.             }
  131.         }
  132.         if (isset($_REQUEST['nonactif'])) {
  133.             $nonactif true;
  134.         }
  135.         if (isset($_REQUEST['enseignants'])) {
  136.             $enseignants true;
  137.         }
  138.         if (isset($_REQUEST['enseignantsavalider'])) {
  139.             $enseignantsavalider true;
  140.         }
  141.         // eleves ou connexion theduc
  142.         if (isset($_REQUEST['connexion_theduc'])) {
  143.             $connexion_theduc true;
  144.         }
  145.         // compte relancé
  146.         if (isset($_REQUEST['date_resend'])) {
  147.             $date_resend true;
  148.         }
  149.         // utilistauer thtv
  150.         if (isset($_REQUEST['thtv']) && intval($_REQUEST['thtv'])) {
  151.             $thtv = (int)$_REQUEST['thtv'];
  152.         }
  153.         // ayant proposé un spectacle
  154.         if (isset($_REQUEST['spectacle_extranetuser'])) {
  155.             $spectacle_extranetuser $_REQUEST['spectacle_extranetuser'];
  156.         }
  157. //        // on précise les champs pour le SELECT
  158. //        $query = 'SELECT * FROM '.$this->getTable().' WHERE 1';
  159.         //recherche stricte par id
  160.         if (!empty($idextranetuser)) {
  161. //            $query .= ' AND idextranetuser='.$idextranetuser;
  162.             $query->andWhere(' e.idextranetuser=' $idextranetuser);
  163.         }
  164.         // mots cles
  165.         if (!empty($keywords)) {
  166. //            $query .= ' AND (
  167. //                        login LIKE "%'.$this->escape($keywords).'%"
  168. //                        OR email LIKE "%'.$this->escape($keywords).'%"
  169. //                        OR lastname LIKE "%'.$this->escape($keywords).'%"
  170. //                    )';
  171.             $query->andWhere('e.login LIKE \'%' $this->escape($keywords) . '%\'');
  172.             $query->orWhere('e.email LIKE \'%' $this->escape($keywords) . '%\'');
  173.             $query->orWhere('e.lastname LIKE \'%' $this->escape($keywords) . '%\'');
  174.         }
  175.         if (!empty($nonactif)) {
  176.             $query->andWhere('e.active=0');
  177.         }
  178.         if (!empty($enseignants)) {
  179. //            $query .= ' AND (e.enseignantActive=1) AND e.enseignantFonction>0';
  180.             $query->andWhere('(e.enseignantActive=1) AND e.enseignantFonction>0');
  181.         }
  182.         if (!empty($enseignantsavalider)) {
  183. //            $query .= ' AND enseignant_active=0 AND enseignant_fonction>=1';
  184.             $query->andWhere('e.enseignantActive=1 AND e.enseignantFonction>=1');
  185.         }
  186.         if (!empty($connexion_theduc)) {
  187. //            $query .= ' AND (connexion_theduc=1) AND enseignant_fonction IS NULL';
  188.             $query->andWhere('(e.connexionTheduc=1) AND e.enseignantFonction IS NULL');
  189.         }
  190.         if (!empty($date_resend)) {
  191. //            $query .= ' AND date_resend IS NOT NULL AND active=0';
  192.             $query->andWhere('e.dateResend IS NOT NULL AND e.active=0');
  193.         }
  194.         if (!empty($thtv)) {
  195.             $query->andWhere(' e.specialUser=' $thtv);
  196.         }
  197.         if (!empty($spectacle_extranetuser)) {
  198.             dump('refaire la ligne 246 de ExtranetuersRepository');
  199. //            $query->andWhere(' e.idextranetuser IN (
  200. //                SELECT idextranetuser FROM spectacles
  201. //            )');
  202.             /*SELECT e.`idextranetuser`, e.`firstname`, e.`lastname`
  203.             FROM spectacles s
  204.                 JOIN extranetusers e ON e.`idextranetuser`=s.`idextranetuser`
  205.             WHERE DATEDIFF(NOW(), s.`dateinsert`) > 100
  206.             GROUP BY e.`idextranetuser`*/
  207.         }
  208. //
  209.         return $query->getQuery();
  210.     }
  211.     // }}}
  212.     //  {{{ setToArray()
  213.     /** Liste des extranetusers dans un tableau associatif
  214.      *
  215.      * Tableau associatif notament utilisé pour lister les informations sur des extranetusers
  216.      * Utile pour générer les tableaux HTML de listes de contacts
  217.      *
  218.      * @access  public
  219.      * @return  array
  220.      * @see     findData()
  221.      */
  222.     public function setToArray($spec true)
  223.     {
  224.         if ($spec == true) {
  225.             $this->findData();
  226.         }
  227.         $values = array();
  228.         $color null;
  229.         $nb 0;
  230.         while ($this->fetch()) {
  231.             $values[$nb] = $this->getInfosExtranetuser(nulltrue);
  232.             // couleur de ligne alternative
  233.             $color $this->colorAlternate($color);
  234.             $values[$nb]['colorline'] = $color;
  235.             $nb++;
  236.         }
  237.         return $values;
  238.     }
  239.     // }}}
  240.     //  {{{ getInfosExtranetuser()
  241.     /** Informations sur un utilisateur
  242.      *
  243.      * @access public
  244.      * @param int $idextranetuser Identifiant de l'utilisateur
  245.      * @return array
  246.      */
  247.     public function getInfosExtranetuser($idextranetuser null$simple false)
  248.     {
  249.         $infos = array();
  250.         ////////////// infos de la table
  251.         if (empty($this->idextranetuser)) {
  252.             $query $this->createQueryBuilder('u')
  253.                 ->select('u, r, c')
  254.                 ->leftJoin('u.idregion''r')
  255.                 ->leftJoin('u.country''c')
  256.                 ->where('u.' $this->__idtable ' =:value')->setParameter('value'$idextranetuser);
  257.             $datas $this->datas $query->getQuery()->getOneOrNullResult(Query::HYDRATE_ARRAY);
  258.             $this->loadResult($datas);
  259.         } else {
  260.             $idextranetuser $this->idextranetuser;
  261.         }
  262.         $infos += array(
  263.             'idextranetuser' => $this->idextranetuser,
  264.             'lastname' => $this->lastname,
  265.             'firstname' => $this->firstname,
  266.             'email' => $this->email,
  267.             'login' => $this->login,
  268.             'active' => $this->active,
  269.             'userrights' => $this->userrights,
  270.         );
  271.         // date d'inscription
  272.         $infos['date_inscription'] = $this->getFormeDate($this->dateinsert);
  273.         if (!$simple) {
  274.             $infos += array(
  275.                 'avatar' => $this->avatar,
  276.                 'address' => $this->address,
  277.                 'zip' => $this->zip,
  278.                 'city' => $this->city,
  279.                 'country' => (!empty($this->country['country'])) ? $this->country['id'] : null,
  280.                 'idregion' => (!empty($this->idregion['idregion'])) ? $this->idregion['idregion'] : null,
  281.                 'secteur' => $this->secteur,
  282.                 'structure' => $this->structure,
  283.                 'fonction' => $this->fonction,
  284.                 'phone' => $this->phone,
  285.                 'enseignant_fonction' => $this->enseignantFonction,
  286.                 'enseignant_matiere' => $this->enseignantMatiere,
  287.                 'enseignant_etablissement' => $this->enseignantEtablissement,
  288.                 'enseignant_qualite' => $this->enseignantQualite,
  289.                 'enseignant_precision_qualite' => $this->enseignantPrecisionQualite,
  290.                 'enseignant_active' => $this->enseignantActive,
  291.                 'connexion_theduc' => $this->connexionTheduc,
  292.                 'private_comment' => $this->privateComment,
  293.                 'other_email' => $this->otherEmail,
  294.                 'code_chge_email' => $this->codeChgeEmail,
  295.                 'old_login' => $this->oldLogin,
  296.                 'password' => $this->password,
  297.                 'thnetuser' => $this->thnetuser,
  298.                 'last_visit_annonces' => $this->lastVisitAnnonces,
  299.                 'address_ip' => $this->addressIp,
  300.                 'verified' => $this->verified,
  301.                 'activekey' => $this->activekey,
  302.                 'tokenpass' => $this->tokenpass,
  303.                 'public_api_token' => $this->publicApiToken,
  304.                 'public_api_desc' => $this->publicApiDesc,
  305.                 'special_user' => $this->specialUser,
  306.                 'pseudo_streaming' => $this->pseudoStreaming,
  307.                 'contact_owner' => $this->contactOwner,
  308.                 'dateupdate' => $this->dateupdate,
  309.             );
  310.         }
  311.         // on vérifie si abonne à une news
  312.         $subscribers $this->getEntityManager()->getRepository(Subscribers::class);
  313.         if (!empty($this->email)) {
  314.             $infos['idsubscriber'] = $subscribers->isSubscriber($this->email);
  315.         } else {
  316.             $infos['idsubscriber'] = null;
  317.         }
  318.         // on vérifie si possède un abonnement
  319.         $abonnements $this->getEntityManager()->getRepository(Abonnements::class);
  320.         $infos['abonnement'] = $abonnements->getLastAbonnementForUser([
  321.             'special' => array(
  322.                 'idextranetuser' => $this->idextranetuser,
  323.                 'actif' => new DateTime()
  324.             )
  325.         ]);
  326.         // pays
  327.         if (!empty($this->country['id'])) {
  328.             $infos['country'] = $this->getNameCountry($this->country['id'], $GLOBALS['lng']);
  329.             $infos['country_code'] = $this->country['id'];
  330.         }
  331.         return $infos;
  332.     }
  333.     // }}}
  334.     //  {{{ getUser()
  335.     /** Informations sur un utilisateur
  336.      *
  337.      * @access  public
  338.      * @param string $name login ou mail de l'utilisateur
  339.      * @return  array
  340.      */
  341.     public function getUser($name)
  342.     {
  343.         $query 'SELECT * FROM ' $this->getTable() . '
  344.                   WHERE (login=\'' $this->escape($name) . '\' OR email=\'' $this->escape($name) . '\') LIMIT 0,1';
  345.         $user $this->queryRow($query);
  346.         if (!$user) {
  347.             return false;
  348.         }
  349.         // acces a l'extranet ?
  350.         if ($user['userrights'] >= 8) {
  351.             $user['extranet'] = true;
  352.         }
  353.         //Si on a les droits canopés ou les droits d'administrations de thnet
  354.         if ($user['userrights'] >= || $user['userrights'] == 2) {
  355.             $user['canope_edutheque'] = true;
  356.         }
  357.         // acces a mon theatre ?
  358.         if ($user['thnetuser'] == 1) {
  359.             $user['montheatre'] = true;
  360.         }
  361.         return $user;
  362.     }
  363.     // }}}
  364.     //  {{{ getByToken()
  365.     /** Permet de retrouver un utilisateur via un token
  366.      * @access  public
  367.      * @param string $token le token
  368.      * @param string $field_token le token
  369.      */
  370.     public function getByToken($token$field_token)
  371.     {
  372.         $query 'SELECT *
  373.                   FROM ' $this->getTable() . '
  374.                   WHERE ' $field_token '=\'' $this->escape($token) . '\' LIMIT 0,1';
  375.         $res $this->queryRow($query);
  376.         if (!empty($res)) {
  377.             return $res;
  378.         }
  379.         return false;
  380.     }
  381.     // }}}
  382.     //  {{{ getPass()
  383.     /** Permet de retourner le mot de passe d'un identifiant/login indiqué
  384.      * @access  public
  385.      * @param string $login le login saisi
  386.      * @return  string
  387.      */
  388.     public function getPass($login)
  389.     {
  390.         $query 'SELECT password FROM ' $this->getTable() . '
  391.                   WHERE (login=\'' $this->escape($login) . '\' OR email=\'' $this->escape($login) . '\') LIMIT 0,1';
  392.         $pass $this->queryOne($query);
  393.         if ($pass) {
  394.             return $pass;
  395.         }
  396.         return false;
  397.     }
  398.     // }}}
  399.     //  {{{ getByEmail()
  400.     /** Permet de retourner l'identifiant d'un utilisateur à partir de son email
  401.      *
  402.      *
  403.      * @access  public
  404.      * @param string $email email recherché
  405.      * @return  int
  406.      */
  407.     public function getByEmail($email)
  408.     {
  409.         $query 'SELECT idextranetuser FROM ' $this->getTable() . '
  410.                   WHERE email=\'' $this->escape($email) . '\' LIMIT 1';
  411.         $res $this->queryOne($query);
  412.         return $res;
  413.     }
  414.     // }}}
  415.     // {{{ getEmail()
  416.     /** Retourne l'email d'un utilisateur extranet
  417.      *
  418.      *
  419.      * @param int $idextranetuser identifiant de l'utilisateur
  420.      * @access public
  421.      * @return mixed false si erreur, l'email sinon
  422.      */
  423.     public function getEmail($idextranetuser null)
  424.     {
  425.         if (is_null($idextranetuser)) {
  426.             $idextranetuser $this->idextranetuser;
  427.         }
  428.         if (empty($idextranetuser)) return false;
  429.         $query 'SELECT email FROM ' $this->getTable() . '
  430.                   WHERE idextranetuser=' . ((int)$idextranetuser) . ' LIMIT 1';
  431.         $res $this->queryOne($query);
  432.         return $res;
  433.     }
  434.     // }}}
  435.     // {{{ extranetUserExists()
  436.     /** Vérifie si l'extranetuser existe a partir de son mail
  437.      *
  438.      * @param int $idextranetuser identifiant de l'extranet user
  439.      * @param string $email email de l'extranet user recherché
  440.      * @access public
  441.      * @return int false si inexistant, l'identifiant numérique sinon
  442.      */
  443.     public function extranetUserExists($idextranetuser null$email null$login null)
  444.     {
  445.         if ($idextranetuser != 'disabled' && is_null($idextranetuser)) {
  446.             $idextranetuser $this->idextranetuser;
  447.         }
  448.         if (empty($idextranetuser) && empty($email) && empty($login)) {
  449.             return false;
  450.         }
  451.         $sql 'SELECT idextranetuser FROM ' $this->getTable() . ' WHERE 1 ';
  452.         if ($idextranetuser != 'disabled' && $idextranetuser) {
  453.             $sql .= ' AND idextranetuser=' . ((int)$idextranetuser);
  454.         }
  455.         if ($email) {
  456.             $sql .= ' AND email=\'' $this->escape($email) . '\' ';
  457.         }
  458.         if ($login) {
  459.             $sql .= ' AND login=\'' $this->escape($login) . '\' ';
  460.         }
  461.         $sql .= ' LIMIT 1';
  462.         $res $this->queryOne($sql);
  463.         return empty($res) ? false : (int)$res;
  464.     }
  465.     // }}}
  466.     //  {{{ getInfo()
  467.     /** Permet de retourner le mot de passe d'un utilisateur actif
  468.      *
  469.      *
  470.      * @access  public
  471.      * @param string $login le login saisi
  472.      * @return  array
  473.      */
  474.     public function getInfo($login)
  475.     {
  476.         $query 'SELECT password FROM ' $this->getTable() . '
  477.                     WHERE active=1
  478.                     AND (login="' $this->escape($login) . '" OR email="' $this->escape($login) . '") LIMIT 0,1';
  479.         $infos $this->queryAll($query);
  480.         if (!empty($infos)) {
  481.             return $infos;
  482.         }
  483.     }
  484.     // }}}
  485.     //  {{{ getCryptPass()
  486.     /** Retourne le mot de passe crypte
  487.      *
  488.      * @access  public
  489.      * @param string $pass Mot de passe en clair
  490.      * @return  string
  491.      */
  492.     public function getCryptPass($pass)
  493.     {
  494.         // creation du grain de sel
  495.         srand((double)microtime() * 1000000);
  496.         $salt substr(md5(rand(09999999)), 08);
  497.         $pass strip_tags($pass);
  498.         // encryption de type MD5 avec grain de sel
  499.         if (CRYPT_MD5 == 1)
  500.             return crypt($pass'$1$' $salt);
  501.         throw new \Exception('CRYPT_MD5 non disponible !!');
  502.     }
  503.     // }}}
  504.     //  {{{ setModuleConnexion()
  505.     /** Marquer la connexion à un module
  506.      *
  507.      * @param string $module Le module
  508.      * @param int $idextranetuser Identifiant de l'utilisateur
  509.      * @param int $value Autre valeur ?
  510.      * @return      boolean
  511.      * @access      public
  512.      */
  513.     public function setModuleConnexion($field_module$idextranetuser$value 1)
  514.     {
  515.         $this->setUpdateFields(array($field_module => $value));
  516.         $this->setData($idextranetuser);
  517.         return true;
  518.     }
  519.     // }}}
  520.     //  {{{ setDateResend()
  521.     /** Marquer l'envoi d'une relance
  522.      *
  523.      * @param string $module Le module
  524.      * @param int $idextranetuser Identifiant de l'utilisateur
  525.      * @param int $value Autre valeur ?
  526.      * @return      boolean
  527.      * @access      public
  528.      */
  529.     public function setDateResend($date_resend$idextranetuser)
  530.     {
  531.         $this->setUpdateFields(array('date_resend' => $date_resend));
  532.         $this->setData($idextranetuser);
  533.         return true;
  534.     }
  535.     // }}}
  536.     //  {{{ setRegion()
  537.     /** Marquer la région
  538.      *
  539.      * @param string $idregion La région
  540.      * @return      boolean
  541.      * @access      public
  542.      */
  543.     public function setRegion($idregion$idextranetuser)
  544.     {
  545.         $this->setUpdateFields(array('idregion' => $idregion));
  546.         $this->setData($idextranetuser);
  547.         return true;
  548.     }
  549.     // }}}
  550.     //  {{{ setActive()
  551.     /** Change l'etat actif ou inactif
  552.      *
  553.      * @param int $id Valeur du champ index pour l'enregistrement
  554.      * @return      boolean
  555.      * @access      public
  556.      */
  557.     public function setActive($id null$active 1)
  558.     {
  559.         if (empty($id)) $id $this->id;
  560.         // champ à mettre à jour
  561.         $this->get($id);
  562.         $this->active $active;
  563.         $this->update();
  564.     }
  565.     // }}}
  566.     //  {{{ getObjectTitle()
  567.     /** Infos de l'item recherché
  568.      *
  569.      * Pour les champs Ajax de relations
  570.      *
  571.      * @access public
  572.      */
  573.     public function getObjectTitle($idobject null$infos_object = array(), $params = array())
  574.     {
  575.         if (!$idobject && isset($this->idextranetuser)) $idobject $this->idextranetuser;
  576.         // champs
  577.         $fields = array('idextranetuser''lastname''firstname''login');
  578.         if (!empty($infos_object)) {
  579.             foreach ($fields as $k => $v) {
  580.                 if (array_key_exists($v$infos_object)) {
  581.                     $infos[$v] = $infos_object[$v];
  582.                 } else {
  583.                     $infos[$v] = '';
  584.                 }
  585.             }
  586.         } else {
  587.             //charger les infos que si necessaire
  588.             if (empty($this->login)) {
  589.                 $sql 'SELECT ' join(','$fields) . '
  590.                         FROM ' $this->__table '
  591.                         WHERE ' $this->__idtable '=' $idobject;
  592.                 $infos $this->queryRow($sql);
  593.             } else {
  594.                 foreach ($fields as $k => $v) {
  595.                     if (isset($this->$v) && $this->$v != '') {
  596.                         $infos[$v] = trim($this->$v);
  597.                     } else {
  598.                         $infos[$v] = '';
  599.                     }
  600.                 }
  601.             }
  602.         }
  603.         // renvoyer un array plutôt que le titre (utile si on veux l'url)
  604.         if (array_key_exists('return_array'$params)) {
  605.             return $infos;
  606.         }
  607.         return $infos['login'];
  608.     }
  609.     // }}}
  610.     // {{{ deleteExtranetUser()
  611.     /** Supprime un utilisateur et les données associées
  612.      *
  613.      *
  614.      * @param int $idextranetuser identifiant de l'utilisateur
  615.      * @param boolean|string $delete_subscriber si vrai ou contient un email efface aussi les abonnements aux newsletters
  616.      * @access public
  617.      * @return array|boolean retourne false en cas d'erreur dans les paramètres ou un tableau (contenant le champ success en cas de succès)
  618.      */
  619.     public function deleteExtranetUser($idextranetuser null$delete_subscriber false)
  620.     {
  621.         //vérification des paramètres
  622.         $idextranetuser $this->extranetUserExists($idextranetuser);
  623.         if ($idextranetuser === false) return false;
  624.         $email false;
  625.         if (!empty($delete_subscriber)) {
  626.             if ($delete_subscriber === true) {
  627.                 $email $this->getEmail($idextranetuser);
  628.             } else if (is_string($delete_subscriber)) {
  629.                 $email $delete_subscriber;
  630.             }
  631.             if (empty($email)) return false;
  632.         }
  633.         $ret = array();
  634.         $err false;
  635.         // supprimer les petites annonces de l'utilisateur
  636.         $annonces $this->getEntityManager()->getRepository(AnnAnnonces::class);
  637.         $delete_ann $annonces->deleteAnnonce(null$idextranetuser);
  638.         if ($delete_ann) {
  639.             $ret['annonces'] = false;
  640.             $err true;
  641.         } else {
  642.             $ret['annonces'] = true;
  643.         }
  644.         if (!$err) {
  645.             // supprimer les bookmarks
  646.             try {
  647.                 $bkm $this->getEntityManager()->getRepository(BookmarkExtranetuser::class);
  648.                 $delete_bkm $bkm->deleteBookmark(nullnull$idextranetuser);
  649.                 $ret['bookmarks'] = true;
  650.             } catch (\Throwable $e) {
  651.                 $ret['bookmarks'] = false;
  652.                 $err true;
  653.             }
  654.         }
  655.         if (!$err) {
  656.             //supprimer les abonnements si demandé
  657.             if ($email) {
  658.                 try {
  659.                     $subscribers $this->getEntityManager()->getRepository(Subscribers::class);
  660.                     $subscribers->return_errors true;
  661.                     $delete_subscriber $subscribers->reallyDeleteSubscriber($emailtrue);
  662.                     $ret['subscriber'] = true;
  663.                 } catch (\Throwable $e) {
  664.                     $ret['subscriber'] = false;
  665.                     $err true;
  666.                 }
  667.             }
  668.         }
  669.         if (!$err) {
  670.             //suppression de l'utilisateur
  671.             $useraction $this->getEntityManager()->getRepository(UserAction::class);
  672.             $nb_action $useraction->countUserActions($idextranetuser);
  673.             if ($nb_action == 0) {
  674.                 // ce gars n'a rien fait, son compte est détruit sans attendre
  675.                 // supprimer son compte
  676.                 $r $this->deleteData($idextranetuser);
  677.                 if (empty($r)) {
  678.                     $err true;
  679.                     $ret['user'] = false;
  680.                 } else {
  681.                     $ret['user'] = true;
  682.                 }
  683.             } else {
  684.                 // ce gars a fait des actions, son compte est renommé et désactivé
  685.                 try  {
  686.                     $values['old_login'] = $this->login;
  687.                     $values['login'] = 'Anonymous' uniqid();
  688.                     $values['active'] = 0;
  689.                     $this->setUpdateFields($values);
  690.                     $r $this->setData($idextranetuser);
  691.                     $ret['user_renamed'] = true;
  692.                 } catch (\Throwable $e) {
  693.                     $err true;
  694.                     $ret['user_renamed'] = false;
  695.                 }
  696.             }
  697.         }
  698.         if (!$err) {
  699.             //pas d'erreur, on termine la transaction
  700.             $res $this->query('COMMIT');
  701.             $ret['success'] = true;
  702.         } else {
  703.             // erreur -> rollback
  704.             $res $this->query('ROLLBACK');
  705.             $ret['success'] = false;
  706.         }
  707.         //retourne le tableau d'état
  708.         return $ret;
  709.     }
  710.     // }}}
  711.     // {{{ getValue()
  712.     /** Récupérer un champ
  713.      *
  714.      *
  715.      * @access public
  716.      * @param string $field le champ
  717.      * @param string $idextranetuser l'utilisateur
  718.      * @return mixed
  719.      */
  720.     public function getValue($field$idextranetuser null)
  721.     {
  722.         //idextranetuser
  723.         if (empty($idextranetuser)) {
  724.             require_once PATH_LIBS 'Auth/Login.php';
  725.             $idextranetuser Session::getValue('idextranetuser');
  726.         }
  727.         if (empty($idextranetuser)) {
  728.             return null;
  729.         }
  730.         $sql 'SELECT ' $field '
  731.                 FROM ' $this->__table '
  732.                 WHERE idextranetuser=' . (int)$idextranetuser;
  733.         return $this->queryOne($sql);
  734.     }
  735.     // }}}
  736.     // {{{ isRoot()
  737.     /** Voir si root
  738.      *
  739.      *
  740.      * @access public
  741.      * @param string $idextranetuser l'utilisateur
  742.      * @return mixed
  743.      */
  744.     public function isRoot($idextranetuser)
  745.     {
  746.         if ($this->getValue('userrights'$idextranetuser) > 0) {
  747.             return true;
  748.         } else {
  749.             return false;
  750.         }
  751.     }
  752.     // }}}
  753.     // {{{ checkUserByToken()
  754.     /** Récupérer un utilisateur par le token
  755.      *
  756.      *
  757.      * @access public
  758.      * @param string $token le token
  759.      * @param string $le champ du token le champ du token
  760.      * @return mixed
  761.      */
  762.     public function checkUserByToken($token$type 'tokenpass')
  763.     {
  764.         $sql 'SELECT ' $this->__idtable '
  765.                 FROM ' $this->__table '
  766.                 WHERE ' $type '=\'' $this->escape($token) . '\'';
  767.         return $this->queryOne($sql);
  768.     }
  769.     // }}}
  770.     // {{{ updatePasswd()
  771.     /** Mettre à jour le mot de passe
  772.      *
  773.      *
  774.      * @access public
  775.      * @param string $token le token pour trouver le user
  776.      * @param string $newpass le nouveau mot de passe
  777.      * @return mixed
  778.      */
  779.     public function updatePasswd($token$newpass)
  780.     {
  781.         $fields_values = array(
  782.             'password' => $this->getCryptPass($newpass),
  783.             'tokenpass' => NULL,
  784.         );
  785.         return $this->autoExecute($this->__table$fields_valuesAUTOQUERY_UPDATE'tokenpass=\'' $this->escape($token) . '\'');
  786.     }
  787.     // }}}
  788.     // {{{ setToken()
  789.     /** Ajouter un token dans un champ
  790.      *
  791.      *
  792.      * @access public
  793.      * @param string $email adresse email du user
  794.      * @param string $type type de token
  795.      * @param string $token token (ou null pour générer un nouveau token)
  796.      * @return mixed  false si erreur, le token sinon
  797.      */
  798.     public function setToken($email$type 'tokenpass'$token null)
  799.     {
  800.         // generer la cle de token
  801.         if (empty($token)) {
  802.             $token $this->codeAlea(30);
  803.         }
  804.         $resQuery $this->autoExecute(
  805.             $this->__table,
  806.             array($type => $token),
  807.             AUTOQUERY_UPDATE'email=\'' $this->escape($email) . '\''
  808.         );
  809.         if ("0" === $resQuery) {
  810.             return $token;
  811.         }
  812.         return false;
  813.     }
  814.     // }}}
  815.     // {{{ QFormCheckEmail()
  816.     /** Test si un email existe/n'existe pas dans la table extranetusers, à utiliser avec Quickform seulement
  817.      *
  818.      *    $this->context['form']->registerRule('checkemail', 'function', 'QFormCheckEmail', 'Theatre_Extranetusers');
  819.      *    $email_exist = 'Cette adresse email n\'est pas enregistrée dans notre base de données.';
  820.      *    $this->context['form']->addRule('email', $email_exist, 'checkemail', $this);
  821.      *
  822.      * @param string $email
  823.      * @access public
  824.      * @return boolean vrai si existe
  825.      */
  826.     public function QFormCheckEmail($email)
  827.     {
  828.         return ($this->extranetUserExists('disabled'$email) !== false);
  829.     }
  830.     // }}}
  831.     // {{{ QFormCheckNoEmail()
  832.     /** Test si un email n'existe pas dans la table extranetusers, à utiliser avec Quickform seulement
  833.      *
  834.      * @see QFormCheckEmail()
  835.      */
  836.     public function QFormCheckNoEmail($email)
  837.     {
  838.         return ($this->extranetUserExists('disabled'$email) === false);
  839.     }
  840.     // }}}
  841.     // {{{ QFormCheckLogin()
  842.     /** Test si un login existe/n'existe pas dans la table extranetusers, à utiliser avec Quickform seulement
  843.      *
  844.      *    $this->context['form']->registerRule('checklogin', 'function', 'QFormCheckLogin', 'Theatre_Extranetusers');
  845.      *    $email_exist = 'Ce login email n\'est pas enregistrée dans notre base de données.';
  846.      *    $this->context['form']->addRule('email', $email_exist, 'checkemail', $this);
  847.      *
  848.      * @param string $login
  849.      * @access public
  850.      * @return boolean vrai si existe
  851.      */
  852.     public function QFormCheckLogin($login)
  853.     {
  854.         return ($this->extranetUserExists('disabled'null$login) !== false);
  855.     }
  856.     // }}}
  857.     // {{{ QFormCheckNoLogin()
  858.     /** Test si un login 'existe pas dans la table extranetusers, à utiliser avec Quickform seulement
  859.      *
  860.      * @see QFormCheckNoLogin()
  861.      */
  862.     public function QFormCheckNoLogin($login)
  863.     {
  864.         return $this->extranetUserExists('disabled'null$login);
  865.     }
  866.     // }}}
  867.     // {{{ CheckEmailEducation()
  868.     /** fonction pour vérifier les adresses email du personnel de l'Education Nationale
  869.      *
  870.      *
  871.      * @param string $email l'adresse email à tester
  872.      * @access public
  873.      * @return boolean vrai si adresse de l'Education Nationale
  874.      */
  875.     public function CheckEmailEducation($email)
  876.     {
  877.         $email strtolower(trim($email));
  878.         // @theatre-contemporain.net (TEST)
  879.         if (preg_match('/@theatre-contemporain\.net$/'$email)) return true;
  880.         // @intempestifs.fr (TEST)
  881.         //if (preg_match('/@intempestifs.fr$/',$email)) return true;
  882.         // @education.gouv.fr
  883.         if (preg_match('/@education\.gouv\.fr$/'$email)) return true;
  884.         // @ac-nomdel’académie.fr
  885.         if (preg_match('/@ac-[a-z0-9-]+\.fr$/'$email)) return true;
  886.         return false;
  887.     }
  888.     // }}}
  889.     // {{{ acceptExtranetuser()
  890.     /** valider l'accès d'un extranetuser à un objet'
  891.      *
  892.      *
  893.      * @param string $object Type d'objet
  894.      * @param int $idobject Identifiant de l'objet
  895.      * @param int $idextranetuser Identifiant de l'extranetuser
  896.      * @access public
  897.      * @return boolean
  898.      */
  899.     public function acceptExtranetuser($object$idobject$idextranetuser)
  900.     {
  901.         // l'objet sans le s
  902.         $object_simple substr($object0, -1);
  903.         // instancie l'objet de liaison
  904.         $obj Theatre::factory($object_simple '_extranetuser');
  905.         // status à 1 et droits à 15
  906.         $obj->setUpdateFields(array(
  907.             'status' => 1,
  908.             'user_rights' => 15,
  909.             'date_accept' => now(),
  910.         ));
  911.         $where 'idextranetuser=' $idextranetuser ' AND id' $object_simple '=' $idobject;
  912.         if ($obj->setData(nullnulltrue$where)) {
  913.             return true;
  914.         } else {
  915.             return false;
  916.         }
  917.     }
  918.     // }}}
  919.     // {{{ rejectExtranetuser()
  920.     /** refuser l'accès d'un extranetuser à un objet'
  921.      *
  922.      *
  923.      * @param string $object Type d'objet
  924.      * @param int $idobject Identifiant de l'objet
  925.      * @param int $idextranetuser Identifiant de l'extranetuser
  926.      * @access public
  927.      * @return boolean
  928.      */
  929.     public function rejectExtranetuser($object$idobject$idextranetuser)
  930.     {
  931.         // l'objet sans le s
  932.         $object_simple substr($object0, -1);
  933.         // instancie l'objet de liaison
  934.         $obj Theatre::factory($object_simple '_extranetuser');
  935.         // status à 1 et droits à 15
  936.         $sql 'DELETE
  937.                 FROM ' $obj->__table '
  938.                 WHERE idextranetuser=' $idextranetuser '
  939.                 AND id' $object_simple '=' $idobject;
  940.         $this->logDeletion('[Theatre_Extranetusers::rejectExtranetuser] Refuse l\'accès à un objet ' $sql);
  941.         if ($obj->exec($sql)) {
  942.             return true;
  943.         } else {
  944.             return false;
  945.         }
  946.     }
  947.     // }}}
  948.     // {{{ deleteInactiveExtranetusers()
  949.     /** supprimer les utilisateurs qui n'ont jamais activé leur compte et qui ont été relancé
  950.      *
  951.      *
  952.      * @param string $days nombre de jours ecoulés depuis la relance
  953.      * @access public
  954.      * @return boolean
  955.      */
  956.     public function deleteInactiveExtranetusers($day)
  957.     {
  958.         $date_relance date('Y-m-d H:i:s'strtotime('-' $day ' day'));
  959.         // trouve les utilisateurs à supprimer
  960.         $sql 'SELECT ' $this->__idtable '
  961.                 FROM ' $this->__table '
  962.                 WHERE date_resend IS NOT NULL
  963.                 AND active=0
  964.                 AND TO_DAYS(NOW()) - TO_DAYS(date_resend) >  ' . (int)$day;
  965.         // si on veut exclure les enseignants
  966.         //AND enseignant_fonction IS NULL
  967.         $idsubscribers_tab $this->queryAll($sql);
  968.         $nb_deleted null;
  969.         if (!empty($idsubscribers_tab)) {
  970.             foreach ($idsubscribers_tab as $k => $v) {
  971.                 if ($this->deleteExtranetUser($v['idextranetuser'])) {
  972.                     $nb_deleted++;
  973.                 }
  974.             }
  975.         }
  976.         return $nb_deleted;
  977.     }
  978.     // }}}
  979.     // {{{ checkHTTPAuth()
  980.     /** Checker l'authentification HTTP
  981.      *
  982.      *
  983.      * @return boolean vrai si authentifié
  984.      */
  985.     public function checkHttpAuth()
  986.     {
  987.         return true;
  988.     }
  989.     // }}}
  990.     // {{{ checkAPIKey()
  991.     /** Checker l'authentification avec la clé simple
  992.      *
  993.      *
  994.      * @return boolean vrai si authentifié
  995.      */
  996.     public function checkAPIKey($token$type 'public_api_token')
  997.     {
  998.         return $this->checkUserByToken($token$type);
  999.     }
  1000.     // }}}
  1001.     //  {{{ getListSearch()
  1002.     /** Liste de contacts
  1003.      *
  1004.      * Pour les champs Ajax de relations et les recherches diverses
  1005.      *
  1006.      * @access  public
  1007.      * @param string $lettres Pour la recherche alphabetique
  1008.      * @param string $type Pour le type recherche (editeurs, revues...)
  1009.      * @param string $keywords Recherche par mots cles
  1010.      * @return  array
  1011.      */
  1012.     public function getListSearch($lettre null$type null$keywords null$only null)
  1013.     {
  1014.         $query 'SELECT idextranetuser,login,email FROM ' $this->__table ' WHERE 1 ';
  1015.         // selection par ordre alpha
  1016.         if (!empty($lettre)) {
  1017.             $query .= ' AND LOWER(LEFT(LTRIM(login),1))=\'' $this->escape($lettre) . '\' ';
  1018.         }
  1019.         // recherche avec un mot cle
  1020.         $list $this->splitKeywords($keywords);
  1021.         if ($list) {
  1022.             $subsql '';
  1023.             if (!empty($list[$this->IDSTR])) {
  1024.                 // mots clés
  1025.                 $ssubsql '';
  1026.                 foreach ($list[$this->IDSTR] as $s) {
  1027.                     if ($ssubsql$ssubsql .= ' AND ';
  1028.                     $ssubsql .= 'login LIKE \'%' $s '%\'';
  1029.                 }
  1030.                 $subsql .= ' AND (' $ssubsql ') ';
  1031.             }
  1032.             if (!empty($list[$this->IDNUM])) {
  1033.                 // recherche par numéro d'id pour les mots clés numériques
  1034.                 if ($subsql$subsql .= ' OR ';
  1035.                 $subsql .= 'idextranetuser IN (' implode(','$list[$this->IDNUM]) . ')';
  1036.             }
  1037.             if ($subsql$query .= $subsql;
  1038.         }
  1039.         //echo $query;
  1040.         $this->query($query);
  1041.         $r = array();
  1042.         while ($this->fetch()) {
  1043.             $r[$this->idextranetuser] = $this->login;
  1044.             // si trouvé par id, on l'affiche en fin de titre
  1045.             if (!empty($list[$this->IDNUM]) && in_array($this->idextranetuser$list[$this->IDNUM])) {
  1046.                 $r[$this->idextranetuser] .= ' - n°' $this->idextranetuser;
  1047.             }
  1048.         }
  1049.         $this->free();
  1050.         return $r;
  1051.     }
  1052.     // }}}
  1053.     //  {{{ getObjectsRights()
  1054.     /** Droits de l'utilisateur sur des fiches
  1055.      *
  1056.      * Trouver les droits d'utilisateur sur des fiches contact et person
  1057.      *
  1058.      * @access  public
  1059.      * @param int $idextranetuser Identifiant de l'extranetuser
  1060.      * @return  array
  1061.      */
  1062.     public function getObjectsRights($idextranetuser$params = array())
  1063.     {
  1064.         $conn $this->getEntityManager();
  1065.         $obj_links = array(
  1066.             'contact' => array(
  1067.                 'title' => 'structures',
  1068.                 'url' => 'contacts',
  1069.                 'edit_page' => 'presentation-edit',
  1070.             ),
  1071.             'person' => array(
  1072.                 'title' => 'biographies',
  1073.                 'url' => 'biographies',
  1074.                 'edit_page' => 'presentation-edit?edit',
  1075.             )
  1076.         );
  1077.         if (!empty($params['specifique']) && !empty($obj_links[$params['specifique']])) {
  1078.             $obj_value $obj_links[$params['specifique']];
  1079.             unset($obj_links);
  1080.             $obj_links[$params['specifique']] = $obj_value;
  1081.         }
  1082.         $limit '';
  1083.         if (array_key_exists('limit'$params)) {
  1084.             if (is_array($params['limit'])) {
  1085.                 $limit ' LIMIT ' $params['limit'][0] . ',' $params['limit'][1];
  1086.             } else {
  1087.                 $limit ' LIMIT ' $params['limit'];
  1088.             }
  1089.         }
  1090.         foreach ($obj_links as $o => $v) {
  1091.             $datas[$o]['infos'] = $v;
  1092.             //si nous souhaitons le nombre de résultat
  1093.             if (array_key_exists('count'$params)) {
  1094.                 $sql 'SELECT COUNT(DISTINCT(id' $o ')) AS total FROM ' $o '_extranetuser WHERE idextranetuser=' . (int)$idextranetuser ' ' $limit;
  1095.                 $datas[$o]['total'] = $this->queryOne($sql);
  1096.             } //si nous récupérer les résulats eux même...
  1097.             else {
  1098.                 $sql 'SELECT * FROM ' $o '_extranetuser WHERE idextranetuser=' . (int)$idextranetuser ' ' $limit;
  1099.                 $resultats $this->query($sql);
  1100.                 if (!empty($resultats)) {
  1101.                     $obj $this->getEntityManager()->getRepository('TheatreCore\Entity\\' ucfirst($o) . 's');
  1102.                     foreach ($resultats as $resultat) {
  1103.                         $obj->getInfosObject($resultat['id' $o]);
  1104.                         $obj->loadResult($resultat);
  1105.                         $datas[$o]['objects'][$obj->{'id' $o}] = $obj->getObjectTitle($obj->{'id' $o}, array(), array('return_array' => true));
  1106.                     }
  1107.                     $obj->free();
  1108.                 }
  1109.             }
  1110.             $this->free();
  1111.         }
  1112.         return $datas;
  1113.     }
  1114.     // }}}
  1115.     //  {{{ countSpecialUser()
  1116.     /** utilisateurs spéciaux
  1117.      *
  1118.      * @access  public
  1119.      * @return  int
  1120.      */
  1121.     public function countSpecialUser()
  1122.     {
  1123.         // utilisateurs en attente
  1124.         $sql_special_user 'SELECT COUNT(DISTINCT(' $this->__idtable '))
  1125.                              FROM ' $this->__table '
  1126.                              WHERE special_user=2';
  1127.         return $this->queryOne($sql_special_user);
  1128.     }
  1129.     // }}}
  1130.     //  {{{ getSQLExtranetusers()
  1131.     /** Générer la requete standard pour des dvds
  1132.      *
  1133.      * $params = array(
  1134.      *  'select' => champs en plus pour le select,
  1135.      *  'from' => champs en plus pour le from,
  1136.      *  'where' => paramètres en plus le where,
  1137.      *  'order' => classement des résultats,
  1138.      *  'limit' => limiter le nb de résultats array(debut,fin), (all pour pas de limit)
  1139.      * )
  1140.      * $special = array(
  1141.      *  'select_by_text_or_adaptation' => text et adaptation,
  1142.      *  'prochains' => true = date dans le future, un entier = fait un between
  1143.      *  'anciens' =>
  1144.      *  'join' => jointure gauche sur contacts et schedules
  1145.      * )
  1146.      *
  1147.      *
  1148.      * @access   public
  1149.      * @param array $params Les paramètres pour la requete
  1150.      * @param array $special Les paramètres supplémentaires
  1151.      * @param bool $debug afficher la requête TODO
  1152.      * @return   string
  1153.      */
  1154.     public function getSQLExtranetusers($query = array(), $debug false)
  1155.     {
  1156.         // on prepare les tableaux
  1157.         foreach (array('select''from''where''order''group''limit') as $t) {
  1158.             if (!empty($query[$t])) {
  1159.                 if (!is_array($query[$t])) {
  1160.                     $query[$t][] = $query[$t];
  1161.                 } else {
  1162.                     $query[$t] = $query[$t];
  1163.                 }
  1164.             } else {
  1165.                 $query[$t] = array();
  1166.             }
  1167.         }
  1168.         // champs par défaut
  1169.         $this->addSQLParams('select'$query, array(
  1170.             array($this->__table => '*')
  1171.         ));
  1172.         return $this->getSQLObject($query);
  1173.     }
  1174.     // }}}
  1175.     //  {{{ getObjectExtranetusers()
  1176.     /** Trouver les utilisateurs qui sont liés à un objet
  1177.      *
  1178.      * Trouver par exemple les extranetusers associés à une fiche contact
  1179.      *
  1180.      * @access  public
  1181.      * @param string $object Objet source (contact, person...)
  1182.      * @param int $idobject Identifiant de l'objet
  1183.      * @return  array
  1184.      */
  1185.     public function getObjectExtranetusers($object$idobject$count_only false)
  1186.     {
  1187.         if ($count_only) {
  1188.             $sql 'SELECT COUNT(DISTINCT(e.`idextranetuser`)) as total ';
  1189.         } else {
  1190.             $sql 'SELECT o.*, e.login, e.`email` ';
  1191.         }
  1192.         $sql .= '
  1193.                 FROM ' $object '_extranetuser o
  1194.                     JOIN ' $this->__table ' e ON e.`idextranetuser`=o.`idextranetuser`
  1195.                 WHERE o.`id' $object '`=' . (int)$idobject;
  1196.         if ($count_only) {
  1197.             $datas $this->queryOne($sql);
  1198.         } else {
  1199.             $datas $this->queryAll($sql);
  1200.         }
  1201.         if (!empty($datas)) {
  1202.             return $datas;
  1203.         } else {
  1204.             if ($count_only) {
  1205.                 return null;
  1206.             } else {
  1207.                 return array();
  1208.             }
  1209.         }
  1210.         return $datas;
  1211.     }
  1212.     // }}}
  1213.     //  {{{ getExtranetuserObject()
  1214.     /** Trouver les objets associés à un utilisateur
  1215.      *
  1216.      * Trouver par exemple les contacts sur lesquels l'utilisateur à des droits
  1217.      *
  1218.      * @access  public
  1219.      * @param string $object Objet source (contact, person...)
  1220.      * @return  array
  1221.      */
  1222.     public function getExtranetuserObject($idextranetuser$object)
  1223.     {
  1224.         $sql 'SELECT o.`id' $object '`
  1225.                 FROM ' $object '_extranetuser o
  1226.                     JOIN ' $this->__table ' e ON e.`idextranetuser`=o.`idextranetuser`
  1227.                 WHERE o.`status`=1 AND o.`user_rights`=15 AND o.`idextranetuser`=' . (int)$idextranetuser;
  1228.         $datas $this->queryCol($sql);
  1229.         if (!empty($datas)) {
  1230.             foreach ($datas as $k => $v) {
  1231.                 $rows[$v] = $v;
  1232.             }
  1233.             return $rows;
  1234.         } else {
  1235.             return array();
  1236.         }
  1237.         return $datas;
  1238.     }
  1239.     // }}}
  1240.     //  {{{ getListExtranetusers()
  1241.     /** Retourne des listes de extranetusers
  1242.      *
  1243.      * Retourne des listes de extranetusers au format "standard""
  1244.      *
  1245.      * @access   public
  1246.      * @param array $params_sql paramètre pour la requete SQL
  1247.      * @param array $format_vignette de la vignette si pas standard
  1248.      * @param array $params_display paramètre pour l'affichage
  1249.      * @return   array
  1250.      */
  1251.     public function getListExtranetusers($params_sql null$format_vignette = array(), $params_display = array())
  1252.     {
  1253.         // si pas de tableau
  1254.         if (!isset($params_sql['special'])) {
  1255.             $params_sql['special'] = array();
  1256.         }
  1257.         if (!isset($params_sql['params'])) {
  1258.             $params_sql['params'] = array();
  1259.         }
  1260.         // construction de la requête avec le passage de paramètres
  1261.         $sql $this->getSQLExtranetusers($params_sql);
  1262.         // paramètre de debug
  1263.         $dbg = (empty($params_sql['dbg'])) ? array() : $dbg $params_sql['dbg'];
  1264.         // executer la requete
  1265.         $this->query($sql$dbg);
  1266.         // debug
  1267.         $start_boucle microtime(true);
  1268.         $results = array();
  1269.         // on boucle
  1270.         while ($this->fetch()) {
  1271.             $id $this->{$this->__idtable};
  1272.             $results[$id] = $this->getInfosExtranetuser($id);
  1273.         }
  1274.         // debug de la boucle
  1275.         if ($this->isTraceMode('list_object')) {
  1276.             $this->setTraceInfos(array(
  1277.                 'execution_time_boucle' => microtime(true) - $start_boucle,
  1278.                 'dbg' => $dbg,
  1279.             ));
  1280.         }
  1281.         $this->free();
  1282.         return $results;
  1283.     }
  1284.     // }}}
  1285.     //  {{{ getRightsList()
  1286.     /** Retourne la liste des droits
  1287.      *
  1288.      *
  1289.      * @access   public
  1290.      * @return   array
  1291.      */
  1292.     public function getRightsList()
  1293.     {
  1294.         /* superadmin = 16+8+4+2+1=31
  1295.         * root => 2n4 = 16+8+4+2+1=31
  1296.         * lire (select) => 2n3 = 8
  1297.         * creer (insert) => 2n2 = 4
  1298.         * modifier (update) => 2n1 = 2
  1299.         * supprimer (delete) => 2n0 = 1*/
  1300.         $rights = array(
  1301.             '15' => 'administrateur',
  1302.             '8' => 'consultation',
  1303.         );
  1304.         return $rights;
  1305.     }
  1306.     // }}}
  1307.     // {{{ countExtranetusers()
  1308.     /** compter tous les utilisateurs
  1309.      *
  1310.      * @return int
  1311.      */
  1312.     public function countExtranetusers()
  1313.     {
  1314.         return $this->queryOne('SELECT COUNT(DISTINCT(idextranetuser)) FROM extranetusers');
  1315.     }
  1316.     // }}}
  1317.     // {{{ countPostedSpectacles()
  1318.     /** chercher les spectacles proposés par des extranetusers de la structure
  1319.      *
  1320.      * @return int
  1321.      */
  1322.     public function countPostedSpectacles($idcontact)
  1323.     {
  1324.         $sql 'SELECT COUNT(s.`idspectacle`)
  1325.                 FROM spectacles s
  1326.                     INNER JOIN schedules sc ON s.`idspectacle`=sc.`idspectacle`
  1327.                     LEFT JOIN spectacle_contact sct ON s.`idspectacle`=sct.`idspectacle`
  1328.                     INNER JOIN extranetusers e ON e.`idextranetuser`=s.`idextranetuser`
  1329.                 WHERE e.`userrights` < 15
  1330.                 AND (
  1331.                     sct.`idcontact`=' $idcontact '
  1332.                     OR sc.`idcontact`=' $idcontact '
  1333.                     OR s.`idcontact_creation`=' $idcontact '
  1334.                 ) GROUP BY s.`idspectacle`';
  1335.         return $this->queryOne($sql);
  1336.     }
  1337.     // }}}
  1338. }