/**
  * Accueil des stats
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2007/03/19
  */
 public function home()
 {
     if (!Admin::canAdmin()) {
         return CopixActionGroup::process('genericTools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.noRights'), 'back' => CopixUrl::get()));
     }
     $tpl = new CopixTpl();
     $tpl->assign('TITLE_PAGE', CopixI18N::get('sysutils|admin.menu.stats'));
     $tpl->assign('MENU', Admin::getMenu('stats'));
     $tplStats = new CopixTpl();
     $modules = Kernel::getAllModules();
     $tab = array();
     foreach ($modules as $mod_val) {
         $arModulesPath = CopixConfig::instance()->arModulesPath;
         foreach ($arModulesPath as $modulePath) {
             $class_file = $modulePath . $mod_val . '/' . COPIX_CLASSES_DIR . 'kernel' . $mod_val . '.class.php';
             if (!file_exists($class_file)) {
                 continue;
             }
             $module_class =& CopixClassesFactory::Create($mod_val . '|Kernel' . $mod_val);
             //print_r($module_class);
             if (!is_callable(array($module_class, 'getStatsRoot'))) {
                 continue;
             }
             //$classeModule = CopixClassesFactory::create("$label|Kernel$label");
             $tab[$mod_val]['module_nom'] = Kernel::Code2Name('mod_' . $mod_val);
             $tab[$mod_val]['stats'] = $module_class->getStatsRoot();
         }
     }
     //print_r($tab);
     $tplStats->assign('tab', $tab);
     $tpl->assign('MAIN', $tplStats->fetch('sysutils|stats.modules.tpl'));
     return new CopixActionReturn(COPIX_AR_DISPLAY, $tpl);
 }
 /**
  * Affiche la fiche détaillée d'un utilisateur (login, nom, prénom...)
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2006/01/04
  * @param string $type Type de personne (USER_ELE, USER_ELE...)
  * @param integer $id Id
  */
 public function _createContent(&$toReturn)
 {
     $annuaireService =& CopixClassesFactory::Create('annuaire|AnnuaireService');
     $type = $this->getParam('type') ? $this->getParam('type') : NULL;
     $id = $this->getParam('id') ? $this->getParam('id') : NULL;
     $canWrite = $canView = false;
     if ($type && $id) {
         $usr = Kernel::getUserInfo($type, $id);
         $usr['type_nom'] = Kernel::Code2Name($usr['type']);
         //Kernel::myDebug($usr);
         $droits = Kernel::getUserInfoMatrix($usr);
         $canView = $droits['voir'];
         $canWrite = $droits['communiquer'];
         if ($canView) {
             // Avatar
             $avatar = '';
             if (isset($usr['user_id'])) {
                 $avatar = Prefs::get('prefs', 'avatar', $usr['user_id']);
             }
             $usr['avatar'] = $avatar ? CopixConfig::get('prefs|avatar_path') . $avatar : '';
             $parents = $enfants = array();
             if ($type == 'USER_ELE') {
                 // Pour un élève, on cherche ses parents
                 $parents = $annuaireService->getParentsFromEleve($id);
             } elseif ($type == 'USER_RES') {
                 // Pour un parent, on cherche ses enfants
                 $enfants = $annuaireService->getEnfantsFromParent($id);
             }
         } else {
             $usr = $parents = $enfants = false;
         }
         $tpl = new CopixTpl();
         $tpl->assign('usr', $usr);
         $tpl->assign('canWrite', $canWrite);
         $tpl->assign('parents', $parents);
         $tpl->assign('enfants', $enfants);
         $toReturn = $tpl->fetch('getuserprofilzone.tpl');
     }
     return true;
 }
 /**
  * getModEnabled
  *
  * Retourne la liste des modules attachÈs ‡ un noeud, et en option, ceux dÈpendant du type d'utilisateur.
  *
  * @author FrÈdÈric Mossmann <*****@*****.**>
  * @param string  $node_type Type de noeud.
  * @param integer $node_id   Identifiant du noeud.
  * @param string  $user_type Type d'utilisateur (facultatif).
  * @param integer $user_id   Identifiant du noeud (facultatif).
  */
 public function getModEnabled($node_type, $node_id, $user_type = '', $user_id = 0, $full = 0, $notification = 0)
 {
     // echo "getModEnabled( $node_type, $node_id, $user_type, $user_id)";
     $carnetDeLiaison = CopixConfig::exists('kernel|carnetDeLiaison') && CopixConfig::get('kernel|carnetDeLiaison');
     $dao = _dao("kernel|kernel_mod_enabled");
     $modules = array();
     // Parent d'eleve...
     if (0 == strncmp($node_type, "USER_ELE", 8) && 0 == strncmp($user_type, "USER_RES", 8)) {
         $parents = Kernel::getNodeParents($node_type, $node_id);
         $parent = Kernel::filterNodeList($parents, 'BU_CLASSE');
         if (count($parent)) {
             if ($parent[0]['droit'] >= 30) {
                 $parent_modules = Kernel::getModEnabled($parent[0]['type'], $parent[0]['id'], $node_type, $node_id);
                 /*
                 echo '<li>$parent[0][] = '.$parent[0]['type']."/".$parent[0]['id']."</li>";
                 echo '<li>$node_* = '.$node_type."/".$node_id."</li>";
                 */
                 $perso = new stdClass();
                 foreach ($parent_modules as $parent_module) {
                     /*
                     $perso->node_type   = $parent[0]['type'];
                     $perso->node_id     = $parent[0]['id'];
                     */
                     $perso->node_type = $node_type;
                     $perso->node_id = $node_id;
                     $perso->module_type = $parent_module->module_type;
                     $perso->module_id = $parent_module->module_id;
                     $perso->module_nom = Kernel::Code2Name($parent_module->module_type);
                     $modules[] = clone $perso;
                 }
                 /*
                 $perso->node_type   = $parent[0]['type'];
                 $perso->node_id     = $parent[0]['id'];
                 */
                 $perso->node_type = $node_type;
                 $perso->node_id = $node_id;
                 $perso->module_type = 'MOD_CARNET';
                 $perso->module_id = 'ELEVE_' . $node_id;
                 $perso->module_nom = Kernel::Code2Name('MOD_CARNET');
                 if ($carnetDeLiaison) {
                     $modules[] = clone $perso;
                 }
             }
         }
         // _dump($modules);
         if ($notification) {
             Kernel::getModlistNotifications($modules);
         }
         reset($modules);
         return $modules;
     }
     $list = $dao->getByNode($node_type, $node_id);
     foreach ($list as $v) {
         if (!$full) {
             if ($v->module_type == 'MOD_MAGICMAIL') {
                 continue;
             }
         }
         $v->module_nom = Kernel::Code2Name($v->module_type);
         $modules[] = clone $v;
     }
     // _dump($modules);
     //print_r($modules);
     if ($user_type == "USER_ENS" && $node_type == "BU_CLASSE" && Kernel::getLevel($node_type, $node_id) >= 60) {
         $carnetcorresp = new CopixPPO();
         $carnetcorresp->node_type = $node_type;
         $carnetcorresp->node_id = $node_id;
         $carnetcorresp->module_type = 'MOD_CARNET';
         $carnetcorresp->module_id = 'CLASSE_' . $node_id;
         $carnetcorresp->module_nom = Kernel::Code2Name('MOD_CARNET');
         if ($carnetDeLiaison) {
             $modules[] = clone $carnetcorresp;
         }
     }
     //for KNE
     if (in_array($user_type, array('USER_ELE', 'USER_ENS', 'USER_DIR', 'USER_DID')) && $node_type == 'BU_CLASSE' && CopixClassesFactory::create('kne|kneService')->active) {
         $modKne = new stdClass();
         $modKne->node_type = $node_type;
         $modKne->node_id = $node_id;
         $modKne->module_type = 'MOD_KNE';
         $modKne->module_id = $node_id;
         $modKne->module_nom = kernel::Code2Name('MOD_KNE');
         $modules[] = $modKne;
     }
     //for Coreprim
     if (in_array($user_type, array('USER_ELE', 'USER_ENS', 'USER_DIR', 'USER_DID')) && $node_type == 'BU_CLASSE' && CopixConfig::exists('default|rssEtagereEnabled') && CopixConfig::get('default|rssEtagereEnabled')) {
         $modRssEtagere = new stdClass();
         $modRssEtagere->node_type = $node_type;
         $modRssEtagere->node_id = $node_id;
         $modRssEtagere->module_type = 'MOD_RSSETAGERE';
         $modRssEtagere->module_id = $node_type . "-" . $node_id;
         $modRssEtagere->module_nom = kernel::Code2Name('MOD_RSSETAGERE');
         $modules[] = $modRssEtagere;
     }
     if (CopixConfig::exists('|conf_ModTeleprocedures') && CopixConfig::get('|conf_ModTeleprocedures') == 0) {
         // Pas de module de tÈlÈprocÈdures...
     } else {
         if ($user_type == "USER_ENS" && $node_type == "BU_ECOLE" && Kernel::getLevel($node_type, $node_id) >= 60) {
             $teleprocedures = new CopixPPO();
             $teleprocedures->node_type = $node_type;
             $teleprocedures->node_id = $node_id;
             $teleprocedures->module_type = 'MOD_TELEPROCEDURES';
             $teleprocedures->module_id = 'ECOLE_' . $node_id;
             $teleprocedures->module_nom = Kernel::Code2Name('MOD_TELEPROCEDURES');
             $modules[] = clone $teleprocedures;
         } elseif (CopixConfig::exists('teleprocedures|USER_ADM_as_USER_ENS') && CopixConfig::get('teleprocedures|USER_ADM_as_USER_ENS') && $user_type == "USER_ADM" && $node_type == "BU_ECOLE" && Kernel::getLevel($node_type, $node_id) >= 30) {
             $teleprocedures = new CopixPPO();
             $teleprocedures->node_type = $node_type;
             $teleprocedures->node_id = $node_id;
             $teleprocedures->module_type = 'MOD_TELEPROCEDURES';
             $teleprocedures->module_id = 'ECOLE_' . $node_id;
             $teleprocedures->module_nom = Kernel::Code2Name('MOD_TELEPROCEDURES');
             $modules[] = clone $teleprocedures;
         }
     }
     // Cas particuliers : modules personnels sans numÈros
     if (0 == strncmp($node_type, "USER_", 5)) {
         $perso_list = array('MOD_ANNUAIRE', 'MOD_MINIMAIL', 'MOD_GROUPE', 'MOD_RESSOURCE');
         foreach ($perso_list as $perso_module) {
             $perso = new CopixPPO();
             $perso->node_type = $node_type;
             $perso->node_id = $node_id;
             $perso->module_id = NULL;
             $perso->module_type = $perso_module;
             $perso->module_nom = Kernel::Code2Name($perso_module);
             $modules[] = clone $perso;
             unset($perso);
         }
     }
     // Cas particulier : module d'administration
     if ($node_type == "ROOT" && Kernel::getLevel($node_type, $node_id) >= 60) {
         $sysutils = new CopixPPO();
         $sysutils->node_type = $node_type;
         $sysutils->node_id = $node_id;
         $sysutils->module_id = NULL;
         $sysutils->module_type = 'MOD_SYSUTILS';
         $sysutils->module_nom = Kernel::Code2Name('MOD_SYSUTILS');
         $modules[] = clone $sysutils;
         $charte = new CopixPPO();
         $charte->node_type = $node_type;
         $charte->node_id = $node_id;
         $charte->module_id = NULL;
         $charte->module_type = 'MOD_CHARTE';
         $charte->module_nom = Kernel::Code2Name('MOD_CHARTE');
         $modules[] = clone $charte;
     }
     // Cas ENS+VIL : SSO vers Gael si tout est configurÈ.
     $SsoGaelService =& CopixClassesFactory::Create('ssogael|ssogael');
     if (($user_type == "USER_ENS" && $node_type == "BU_ECOLE" || $user_type == "USER_VIL" && $node_type == "BU_VILLE") && method_exists($SsoGaelService, "canSsoGael") && $SsoGaelService->canSsoGael() && Kernel::getLevel($node_type, $node_id) >= 60) {
         $comptes = new stdClass();
         $comptes->node_type = $node_type;
         $comptes->node_id = $node_id;
         $comptes->module_type = 'MOD_SSOGAEL';
         $comptes->module_id = $node_type . '-' . $node_id;
         $comptes->module_nom = Kernel::Code2Name('MOD_SSO_GAEL');
         $comptes->module_popup = true;
         // Mode Popup !!!
         $modules[] = clone $comptes;
     }
     // Cas particulier : gestion des groupes de ville (AC/TICE)
     if ($node_type == "ROOT" && Kernel::getLevel($node_type, $node_id) >= 60) {
         $mod_grvilles = new stdClass();
         $mod_grvilles->node_type = $node_type;
         $mod_grvilles->node_id = $node_id;
         $mod_grvilles->module_type = 'MOD_REGROUPEMENTS';
         $mod_grvilles->module_id = $node_type . '-' . $node_id;
         $mod_grvilles->module_nom = Kernel::Code2Name('MOD_REGROUPEMENTS');
         $modules[] = clone $mod_grvilles;
     }
     // Cas particulier : Gestion autonome
     // if(    $user_type == "USER_EXT"
     //    && $node_type == "ROOT"
     //    && Kernel::getLevel( $node_type, $node_id ) >= 60 ) {
     if (CopixConfig::exists('kernel|gestionAutonomeEnabled') && CopixConfig::get('kernel|gestionAutonomeEnabled')) {
         if (($node_type == "ROOT" || $user_type == "USER_ENS" && $node_type == "BU_ECOLE" || $user_type == "USER_ENS" && $node_type == "BU_CLASSE" || $user_type == "USER_VIL" && $node_type == "BU_VILLE") && Kernel::getLevel($node_type, $node_id) >= 60) {
             $mod_grvilles = new CopixPPO();
             $mod_grvilles->node_type = $node_type;
             $mod_grvilles->node_id = $node_id;
             $mod_grvilles->module_type = 'MOD_GESTIONAUTONOME';
             $mod_grvilles->module_id = $node_type . '-' . $node_id;
             $mod_grvilles->module_nom = Kernel::Code2Name('MOD_GESTIONAUTONOME');
             $modules[] = clone $mod_grvilles;
         }
     } elseif (($node_type == "ROOT" || $user_type == "USER_ENS" && $node_type == "BU_ECOLE" || $user_type == "USER_ENS" && $node_type == "BU_CLASSE" || $user_type == "USER_VIL" && $node_type == "BU_VILLE") && Kernel::getLevel($node_type, $node_id) >= 60) {
         $comptes->node_type = $node_type;
         $comptes->node_id = $node_id;
         $comptes->module_type = 'MOD_COMPTES';
         $comptes->module_id = $node_type . '-' . $node_id;
         $comptes->module_nom = Kernel::Code2Name('MOD_COMPTES');
         $modules[] = clone $comptes;
     }
     if ($user_type == "USER_ENS" && ($node_type == "BU_ECOLE" && Kernel::getLevel($node_type, $node_id) >= 60 || $node_type == "BU_CLASSE") && CopixConfig::exists('default|conf_Ceriseprim_actif') && CopixConfig::get('default|conf_Ceriseprim_actif')) {
         $perso->node_type = $node_type;
         $perso->node_id = $node_id;
         $perso->module_type = 'MOD_CERISEPRIM';
         $perso->module_id = $node_type . "-" . $node_id;
         $perso->module_nom = Kernel::Code2Name('MOD_CERISEPRIM');
         $modules[] = clone $perso;
     }
     // _dump($modules);
     if ($notification) {
         Kernel::getModlistNotifications($modules);
     }
     reset($modules);
     return $modules;
 }
 /**
  * Affiche l'aide
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2006/04/12
  */
 public function processViewHelp()
 {
     $rubrique = $this->getRequest('rubrique', null);
     $page = $this->getRequest('page', null);
     $tpl = new CopixTpl();
     $tpl->assign('TITLE_PAGE', CopixI18N::get('aide|aide.description'));
     //$tpl->assign ('MENU', $menu);
     if ($rubrique) {
         $hasHelpRub = false;
         $arModulesPath = CopixConfig::instance()->arModulesPath;
         foreach ($arModulesPath as $modulePath) {
             $file = $modulePath . $rubrique . '/' . COPIX_CLASSES_DIR . 'help' . $rubrique . '.class.php';
             if (file_exists($file)) {
                 $hasHelpRub = true;
                 $modhelp =& CopixClassesFactory::Create($rubrique . '|help' . $rubrique);
                 if (method_exists($modhelp, 'getPages')) {
                     $pages = $modhelp->getPages();
                 }
                 if ($page && is_array($pages) && isset($pages[$page])) {
                     // Page précise
                     $tpl->assign('TITLE_PAGE', Kernel::Code2Name('mod_' . $rubrique) . ' - ' . $pages[$page]['title']);
                     $tpl->assign('MENU', '<a href="' . CopixUrl::get('aide||', array('rubrique' => $rubrique)) . '">' . CopixI18N::get('aide|aide.link.top') . '</a> :: <a href="' . CopixUrl::get('aide||') . '">' . CopixI18N::get('aide|aide.link.index') . '</a>');
                     // On vérifie que le fichier existe bien
                     $lg = CopixI18N::getLang();
                     $file = $modulePath . $rubrique . '/' . COPIX_TEMPLATES_DIR . 'help_' . $page . '_' . $lg . '.html';
                     if (file_exists($file)) {
                         //$tpl->assignStatic ('text', $rubrique.'|help_'.$page.'_'.$lg.'.html');
                         $tpl2 = new CopixTpl();
                         $text = $tpl2->fetch($rubrique . '|help_' . $page . '_' . $lg . '.html');
                         $tpl->assign('text', $text);
                         $tpl->assign('rubrique', $rubrique);
                         $tpl->assign('pages', $pages);
                         $see = array();
                         if (isset($pages[$page]['links']) && is_array($pages[$page]['links'])) {
                             $links = $pages[$page]['links'];
                             //print_r($links);
                             foreach ($links as $link) {
                                 $l = explode('|', $link);
                                 //print_r($l);
                                 if (count($l) == 1) {
                                     // Même module
                                     $see[] = array('rubrique' => $rubrique, 'page' => $l[0], 'title' => $pages[$l[0]]['title']);
                                 } else {
                                     // Autre module
                                     $arModulesPath2 = CopixConfig::instance()->arModulesPath;
                                     foreach ($arModulesPath2 as $modulePath2) {
                                         $file = $modulePath2 . $l[0] . '/' . COPIX_CLASSES_DIR . 'help' . $l[0] . '.class.php';
                                         if (file_exists($file)) {
                                             $modhelp2 =& CopixClassesFactory::Create($l[0] . '|help' . $l[0]);
                                             if (method_exists($modhelp2, 'getPages')) {
                                                 $pages2 = $modhelp2->getPages();
                                                 //print_r($pages2);
                                                 $see[] = array('rubrique' => $l[0], 'page' => $l[1], 'title' => $pages2[$l[1]]['title']);
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                         $tpl->assign('links', $see);
                     }
                     $MAIN = $tpl->fetch('viewhelprubpage.tpl');
                 } else {
                     // Sommaire de l'aide du module
                     $tpl->assign('TITLE_PAGE', Kernel::Code2Name('mod_' . $rubrique));
                     $tpl->assign('MENU', '<a href="' . CopixUrl::get('aide||') . '">' . CopixI18N::get('aide|aide.link.index') . '</a>');
                     $tpl->assign('rubrique', $rubrique);
                     $tpl->assign('pages', $pages);
                     $MAIN = $tpl->fetch('viewhelprub.tpl');
                 }
             }
         }
         if (!$hasHelpRub) {
             $MAIN = $tpl->fetch('viewhelp.tpl');
         }
     } else {
         $rubs = array('minimail', 'album');
         // Compléter avec les modules dont l'aide est écrite
         $rubriques = array();
         foreach ($rubs as $rub) {
             $rubriques[] = array('name' => $rub, 'title' => Kernel::Code2Name('mod_' . $rub));
         }
         $tpl->assign('rubriques', $rubriques);
         $MAIN = $tpl->fetch('viewhelp.tpl');
     }
     $tpl->assign('MAIN', $MAIN);
     return new CopixActionReturn(COPIX_AR_DISPLAY, $tpl);
 }
 /**
  * doLoginCreate
  *
  * Execute la création des comptes et sauvegarde les infos en session.
  * @author	Frédéric Mossmann
  * @since	16.02.2006
  *
  */
 public function doLoginCreate()
 {
     $comptes_service =& CopixClassesFactory::Create('comptes|ComptesService');
     $user_dao =& CopixDAOFactory::create("kernel|kernel_copixuser");
     $bu_dao =& CopixDAOFactory::create("kernel|kernel_bu2user");
     $pConfirm = _request('confirm', array());
     $pLogin = _request('login', array());
     $pPasswd = _request('passwd', array());
     $pReset = _request('reset', '');
     // Parcours de tous les utilisateurs de la liste précédente...
     foreach (_request('typeid') as $typeid) {
         // Si l'utilisateur est sélectionné, on crée le compte. Sinon, on ne fait rien.
         if (isset($pConfirm[$typeid]) && $pConfirm[$typeid] == 1) {
             // Vérification du format de type "USER_ENS-23", et extraction des valeurs.
             if (ereg('(.+)-(.+)', $typeid, $bu_infos)) {
                 $user_type = $bu_infos[1];
                 $user_id = $bu_infos[2];
                 $olduser = _dao("kernel|kernel_copixuser")->getByLogin($pLogin[$typeid]);
                 // Test de préexistance du login dans la base. Si existe déjà : erreur.
                 if (!count($olduser)) {
                     // Récupération des information de l'utilisateur dans la base unique.
                     $user_infos = Kernel::getUserInfo($user_type, $user_id);
                     // Création d'un login dans CopixUser
                     $user_new = CopixDAOFactory::createRecord("kernel|kernel_copixuser");
                     $user_new->login_dbuser = $pLogin[$typeid];
                     $user_new->password_dbuser = md5($pPasswd[$typeid]);
                     $user_new->email_dbuser = '';
                     $user_new->enabled_dbuser = 1;
                     // Enregistrement et vérification de l'insertion.
                     if ($user_dao->insert($user_new)) {
                         // Création du lien entre l'utilisateur de la base unique et le login.
                         $bu_new = _record("kernel|kernel_bu2user2");
                         $bu_new->user_id = $user_new->id_dbuser;
                         $bu_new->bu_type = $user_type;
                         $bu_new->bu_id = $user_id;
                         // Enregistrement et vérification de l'insertion.
                         if (_dao("kernel|kernel_bu2user2")->insert($bu_new)) {
                             $node_infos = Kernel::getNodeInfo(_request('type'), _request('id'), false);
                             // Garder en mémoire les comptes créés pour impression des passwords
                             if (!($session = _sessionGet('modules|comptes|doLoginCreate|success'))) {
                                 $session = array();
                             }
                             $session[$typeid] = array('id' => $user_new->id_dbuser, 'login' => $pLogin[$typeid], 'passwd' => $pPasswd[$typeid], 'nom' => $user_infos['nom'], 'prenom' => $user_infos['prenom'], 'bu_type' => $user_type, 'bu_id' => $user_id, 'node_type' => _request('type'), 'node_id' => _request('id'), 'type_nom' => Kernel::Code2Name($user_type), 'node_nom' => Kernel::Code2Name(_request('type')) . " " . $node_infos['nom']);
                             _sessionSet('modules|comptes|doLoginCreate|success', $session);
                         } else {
                             // Si le lien entre la BU et le login ne fonctionne pas...
                             // Garder en mémoire les echecs pour proposer une nouvelle insertion
                             if (!($session = _sessionGet('modules|comptes|doLoginCreate|error'))) {
                                 $session = array();
                             }
                             $session[$typeid] = array('login' => $pLogin[$typeid], 'passwd' => $pPasswd[$typeid], 'nom' => $user_infos['nom'], 'prenom' => $user_infos['prenom'], 'bu_type' => $user_type, 'bu_id' => $user_id, 'error' => 'BU2USER');
                             _sessionSet('modules|comptes|doLoginCreate|error', $session);
                             // Prévoir un Rollback pour effacer le login ?
                         }
                     } else {
                         // Si le login est impossible à créer...
                         if (!($session = _sessionGet('modules|comptes|doLoginCreate|error'))) {
                             $session = array();
                         }
                         // Garder en mémoire les echecs pour proposer une nouvelle insertion
                         $session[$typeid] = array('login' => $pLogin[$typeid], 'passwd' => $pPasswd[$typeid], 'nom' => $user_infos['nom'], 'prenom' => $user_infos['prenom'], 'bu_type' => $user_type, 'bu_id' => $user_id, 'error' => 'COPIXUSER');
                         _sessionSet('modules|comptes|doLoginCreate|error', $session);
                     }
                 } elseif ($pReset != '') {
                     $user_infos = Kernel::getUserInfo($user_type, $user_id);
                     $user_new = $user_dao->getByLogin($pLogin[$typeid]);
                     // _dump($user_new); die();
                     $user_new[0]->password_dbuser = md5($pPasswd[$typeid]);
                     $user_dao->update($user_new[0]);
                     $node_infos = Kernel::getNodeInfo(_request('type'), _request('id'), false);
                     $session[$typeid] = array('id' => $user_new[0]->id_dbuser, 'login' => $pLogin[$typeid], 'passwd' => $pPasswd[$typeid], 'nom' => $user_infos['nom'], 'prenom' => $user_infos['prenom'], 'bu_type' => $user_type, 'bu_id' => $user_id, 'node_type' => _request('type'), 'node_id' => _request('id'), 'type_nom' => Kernel::Code2Name($user_type), 'node_nom' => Kernel::Code2Name(_request('type')) . " " . $node_infos['nom']);
                     _sessionSet('modules|comptes|doLoginCreate|success', $session);
                 } else {
                     // Si le login existe déjà, vérification qu'il ne s'agit pas de la même personne.
                     // Si c'est le cas, ce n'est pas une erreur, mais un doublon.
                     $bu_dao =& CopixDAOFactory::create("kernel|kernel_bu2user");
                     $bu_user = $bu_dao->getByLogin($pLogin[$typeid]);
                     $bu_user_deja = false;
                     foreach ($bu_user as $user) {
                         $bu_user_deja = $user;
                         break;
                     }
                     //print_r($bu_user_deja);
                     if ($bu_user_deja && $bu_user_deja->bu_type != $user_type || $bu_user_deja->bu_id != $user_id) {
                         if (!($session = _sessionGet('modules|comptes|doLoginCreate|error'))) {
                             $session = array();
                         }
                         // Garder en mémoire les echecs pour proposer une nouvelle insertion
                         $session[$typeid] = array('login' => $pLogin[$typeid], 'passwd' => $pPasswd[$typeid], 'nom' => $user_infos['nom'], 'prenom' => $user_infos['prenom'], 'bu_type' => $user_type, 'bu_id' => $user_id, 'error' => 'LOGINEXISTS');
                         _sessionSet('modules|comptes|doLoginCreate|error', $session);
                     }
                 }
             }
         }
     }
     $urlReturn = CopixUrl::get('comptes||getLoginResult', array('type' => _request('type'), 'id' => _request('id')));
     return new CopixActionReturn(COPIX_AR_REDIRECT, $urlReturn);
 }
 /**
  * Ré-génération des mots de passe d'une classe
  */
 public function processResetClassroomPasswords()
 {
     $ppo = new CopixPPO();
     $ppo->nodeId = _request('nodeId', null);
     // Récupération des paramètres
     if (is_null($ppo->nodeId)) {
         return CopixActionGroup::process('generictools|Messages::getError', array('message' => "Une erreur est survenue.", 'back' => CopixUrl::get('gestionautonome||showTree')));
     }
     $classroomDAO = _ioDAO('kernel|kernel_bu_ecole_classe');
     if (!($classroom = $classroomDAO->get($ppo->nodeId))) {
         return CopixActionGroup::process('generictools|Messages::getError', array('message' => "Une erreur est survenue.", 'back' => CopixUrl::get('gestionautonome||showTree')));
     }
     // Contrôle des droits
     $ppo->hasCredentialTeacherUpdate = _currentUser()->testCredential('module:classroom|' . $ppo->nodeId . '|teacher|update@gestionautonome');
     $ppo->hasCredentialStudentUpdate = _currentUser()->testCredential('module:classroom|' . $ppo->nodeId . '|student|update@gestionautonome');
     $ppo->hasCredentialPersonInChargeUpdate = _currentUser()->testCredential('module:classroom|' . $ppo->nodeId . '|person_in_charge|update@gestionautonome');
     if (!$ppo->hasCredentialPersonInChargeUpdate && !$ppo->hasCredentialStudentUpdate && !$ppo->hasCredentialPersonInChargeUpdate) {
         throw new CopixCredentialException();
     }
     // Infos du noeud
     $nodeInfos = Kernel::getNodeInfo('BU_CLASSE', $ppo->nodeId);
     // Compteur max
     $counters = array();
     // Récupération des enseignants de la classe
     $ppo->teachers = array();
     if ($ppo->hasCredentialTeacherUpdate) {
         $personnelDAO = _ioDAO('kernel|kernel_bu_personnel');
         $ppo->teachers = $personnelDAO->findTeachersByClassroomId($ppo->nodeId);
         $counters[] = count($ppo->teachers);
     }
     // Récupération des élèves de la classe
     $ppo->students = array();
     if ($ppo->hasCredentialStudentUpdate) {
         $studentDAO = _ioDAO('kernel|kernel_bu_ele');
         $ppo->students = $studentDAO->getStudentsByClass($ppo->nodeId);
         $counters[] = count($ppo->students);
     }
     // Récupération des parents de la classe
     $ppo->personsInCharge = array();
     if ($ppo->hasCredentialPersonInChargeUpdate) {
         $responsableDAO = _ioDAO('kernel|kernel_bu_res');
         $ppo->personsInCharge = $responsableDAO->getParentsInClasse($ppo->nodeId);
         $counters[] = count($ppo->personsInCharge);
     }
     // Compteur MAX
     $ppo->counter = max($counters);
     // Breadcrumbs & titre
     $breadcrumbs = Kernel::generateBreadcrumbs($nodeInfos);
     $breadcrumbs[] = array('txt' => 'Re-génération des mots de passe');
     $ppo->breadcrumbs = Kernel::PetitPoucet($breadcrumbs, ' &raquo; ');
     $ppo->TITLE_PAGE = CopixConfig::get('gestionautonome|moduleTitle');
     // Get vocabulary catalog to use
     $nodeVocabularyCatalogDAO = _ioDAO('kernel|kernel_i18n_node_vocabularycatalog');
     $ppo->vocabularyCatalog = $nodeVocabularyCatalogDAO->getCatalogForNode($ppo->nodeType, $ppo->nodeId);
     // Traitement du formulaire
     if (CopixRequest::isMethod('post')) {
         $studentsIds = _request('students', array());
         $teachersIds = _request('teachers', array());
         $personsInChargeIds = _request('personsInCharge', array());
         $dbuserDAO = _ioDAO('kernel|kernel_copixuser');
         // Mise en session globale des mots de passe
         $passwordsList = _sessionGet('modules|gestionautonome|passwordsList');
         if (!is_array($passwordsList)) {
             $passwordsList = array();
         }
         $ppo->accounts = array();
         foreach ($ppo->students as $student) {
             if (in_array($student->idEleve, $studentsIds)) {
                 if ($account = $dbuserDAO->getUserByBuIdAndBuType($student->idEleve, 'USER_ELE')) {
                     $password = Kernel::createPasswd();
                     $account->password_dbuser = md5($password);
                     $dbuserDAO->update($account);
                     // Mise en session de l'élève pour l'export des infos
                     $studentAr = array('lastname' => $student->nom, 'firstname' => $student->prenom1, 'login' => $account->login_dbuser, 'password' => $password, 'bu_type' => 'USER_ELE', 'bu_id' => $student->idEleve, 'type_nom' => Kernel::Code2Name('USER_ELE'), 'node_nom' => Kernel::Code2Name('BU_CLASSE') . ' ' . $nodeInfos['nom'], 'gender' => $student->id_sexe);
                     $passwordsList['USER_ELE'][$student->idEleve] = $studentAr;
                     $ppo->accounts[] = $studentAr;
                 }
             }
         }
         foreach ($ppo->personsInCharge as $personInCharge) {
             if (in_array($personInCharge->id, $personsInChargeIds)) {
                 if ($account = $dbuserDAO->getUserByBuIdAndBuType($personInCharge->id, 'USER_RES')) {
                     $password = Kernel::createPasswd();
                     $account->password_dbuser = md5($password);
                     $dbuserDAO->update($account);
                     // Mise en session de la personne responsable pour l'export des infos
                     $personAr = array('lastname' => $personInCharge->nom, 'firstname' => $personInCharge->prenom, 'login' => $account->login_dbuser, 'password' => $password, 'bu_type' => 'USER_RES', 'bu_id' => $personInCharge->id, 'type_nom' => Kernel::Code2Name('USER_RES'), 'node_nom' => Kernel::Code2Name('BU_CLASSE') . ' ' . $nodeInfos['nom'], 'gender' => $personInCharge->sexe);
                     $passwordsList['USER_RES'][$personInCharge->id] = $personAr;
                     $ppo->accounts[] = $personAr;
                 }
             }
         }
         foreach ($ppo->teachers as $teacher) {
             if (in_array($teacher->numero, $teachersIds)) {
                 if ($account = $dbuserDAO->getUserByBuIdAndBuType($teacher->numero, 'USER_ENS')) {
                     $password = Kernel::createPasswd();
                     $account->password_dbuser = md5($password);
                     $dbuserDAO->update($account);
                     // Mise en session de l'enseignant pour l'export des infos
                     $teacherAr = array('lastname' => $teacher->nom, 'firstname' => $teacher->prenom1, 'login' => $account->login_dbuser, 'password' => $password, 'bu_type' => 'USER_ENS', 'bu_id' => $teacher->numero, 'type_nom' => Kernel::Code2Name('USER_ENS'), 'node_nom' => Kernel::Code2Name('BU_CLASSE') . ' ' . $nodeInfos['nom'], 'gender' => $personInCharge->id_sexe);
                     $passwordsList['USER_ENS'][$teacher->numero] = $teacherAr;
                     $ppo->accounts[] = $teacherAr;
                 }
             }
         }
         if (!empty($ppo->accounts)) {
             _sessionSet('modules|gestionautonome|createAccount', $ppo->accounts);
             _sessionSet('modules|gestionautonome|passwordsList', $passwordsList);
             return _arRedirect(CopixUrl::get('gestionautonome||showNewClassroomPasswords', array('nodeId' => $ppo->nodeId)));
         } else {
             $ppo->error = 1;
         }
     }
     return _arPPO($ppo, 'reset_classroom_passwords.tpl');
 }
function smarty_modifier_profil($string)
{
    return Kernel::Code2Name($string);
}
 /**
  * Administration des modules d'un groupe
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2005/11/16
  * @see doFormAdminModules()
  * @param integer $id Id du groupe
  * @param integer $done Si 1, on vient d'une page ayant bien effectu� les modifications demand�es
  * @param array $errors (option) Erreurs rencontr�es
  */
 public function getHomeAdminModules()
 {
     $dao = CopixDAOFactory::create("groupe");
     $kernel_service =& CopixClassesFactory::Create('kernel|kernel');
     $groupeService =& CopixClassesFactory::Create('groupe|groupeService');
     $id = $this->getRequest('id', null);
     $done = $id ? $this->getRequest('done', null) : null;
     $errors = $this->getRequest('errors', array());
     $critical_errors = array();
     $groupe = $dao->getGroupe($id);
     if (!$groupe) {
         $critical_errors[] = CopixI18N::get('groupe|groupe.error.noGroup');
     }
     $mondroit = $kernel_service->getLevel("CLUB", $id);
     if (!$groupeService->canMakeInGroupe('ADMIN', $mondroit)) {
         $critical_errors[] = CopixI18N::get('kernel|kernel.error.noRights');
     }
     if ($critical_errors) {
         return CopixActionGroup::process('genericTools|Messages::getError', array('message' => implode('<br/>', $critical_errors), 'back' => CopixUrl::get('groupe||')));
     } else {
         // Tous les modules possibles
         $modules = $kernel_service->getModAvailable("club");
         while (list($k, $tmp) = each($modules)) {
             if ($tmp->module_type == 'MOD_MAGICMAIL') {
                 unset($modules[$k]);
                 continue;
             }
             $modules[$k]->module_name = Kernel::Code2Name($tmp->module_type);
             $modules[$k]->module_desc = Kernel::Code2Desc($tmp->module_type);
         }
         //print_r($modules);
         // Ses modules
         $his_modules = array();
         $modEnabled = $kernel_service->getModEnabled("club", $id);
         //print_r($modEnabled);
         foreach ($modEnabled as $tmp) {
             $his_modules[$tmp->module_type] = 1;
         }
         //print_r($his_modules);
         CopixHTMLHeader::addCSSLink(_resource("styles/module_groupe_admin.css"));
         $tpl = new CopixTpl();
         $tpl->assign('TITLE_PAGE', $groupe[0]->titre . ' - ' . CopixI18N::get('groupe|groupe.adminModules'));
         // $tpl->assign ('MENU', '<a href="'.CopixUrl::get ('groupe||getHome', array("id"=>$id)).'">'.CopixI18N::get ('groupe|groupe.backHome').'</a> :: <a href="'.CopixUrl::get ('groupe||getHomeAdmin', array("id"=>$id)).'">'.CopixI18N::get ('groupe|groupe.backHomeAdmin').'</a>');
         $menu = array();
         // $menu[] = array('url' => CopixUrl::get ('groupe||getHome', array("id"=>$id)), 'txt'=>CopixI18N::get ('groupe|groupe.backHome'), 'size'=>100);
         // $menu[] = array('url' => CopixUrl::get ('groupe||getHomeAdmin', array("id"=>$id)), 'txt'=>CopixI18N::get ('groupe|groupe.backHomeAdmin'), 'size'=>195);
         $tpl->assign('MENU', $menu);
         $tplForm = new CopixTpl();
         $tplForm->assign('id', $id);
         $tplForm->assign('done', $done);
         $tplForm->assign('groupe', $groupe[0]);
         $tplForm->assign("modules", $modules);
         $tplForm->assign("his_modules", $his_modules);
         $tplForm->assign('errors', $errors);
         $result = $tplForm->fetch('gethomeadminmodules.tpl');
         $tpl->assign('MAIN', $result);
         return new CopixActionReturn(COPIX_AR_DISPLAY, $tpl);
     }
 }