/**
  * Detail d'une ecole
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2008/09/03
  * @param object $rEcole Recordset de l'ecole
  * @param object $rFiche Recordset de la fiche ecole
  */
 public function _createContent(&$toReturn)
 {
     $tpl = new CopixTpl();
     $rEcole = $this->getParam('rEcole');
     $rFiche = $this->getParam('rFiche');
     $arClasses = AnnuaireService::getClassesInEcole($rEcole->numero, array('forceCanViewEns' => true, 'withNiveaux' => true));
     usort($arClasses, array("ZoneFiche", "_usortClasses"));
     //var_dump($arClasses);
     $canModify = FichesEcolesService::canMakeInFicheEcole($rEcole->numero, 'MODIFY');
     $blog = getNodeBlog('BU_ECOLE', $rEcole->numero, array('is_public' => 1));
     //var_dump($blog);
     $arClassesBlogs = false;
     if ($blog) {
         $rEcole->blog = $blog;
     } else {
         // Si pas de blog, on regarde s'il y a des blogs publics de classes
         $arClassesBlogs = AnnuaireService::getClassesInEcole($rEcole->numero, array('onlyWithBlog' => true, 'onlyWithBlogIsPublic' => 1, 'enseignant' => false));
     }
     //Kernel::deb($arClassesBlogs);
     $rEcole->directeur = AnnuaireService::getDirecteurInEcole($rEcole->numero);
     //var_dump($rEcole);
     $matrix =& enic::get('matrixCache');
     $nodeVocabularyCatalogDAO = _ioDAO('kernel|kernel_i18n_node_vocabularycatalog');
     $vocabularyCatalog = $nodeVocabularyCatalogDAO->getCatalogForNode('BU_ECOLE', $rEcole->numero);
     $tpl->assign('rEcole', $rEcole);
     $tpl->assign('rFiche', $rFiche);
     $tpl->assign('arClasses', $arClasses);
     $tpl->assign('arClassesBlogs', $arClassesBlogs);
     $tpl->assign('canModify', $canModify);
     $_right = $matrix->ecole($rEcole->numero)->_right;
     $tpl->assign('canViewDir', $_right->USER_DIR->voir);
     $tpl->assign('canWriteDir', $_right->USER_DIR->communiquer);
     $tpl->assign('canViewEns', $_right->USER_ENS->voir);
     $tpl->assign('canWriteEns', $_right->USER_ENS->communiquer);
     $tpl->assign('id_vc', $vocabularyCatalog->id_vc);
     $toReturn = $tpl->fetch('fiche.tpl');
     return true;
 }
 /**
  * Affichage d'un annuaire de classe
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2006/01/18
  * @param integer $classe Id de la classe
  */
 public function getAnnuaireClasse()
 {
     if (!Kernel::is_connected()) {
         return CopixActionGroup::process('genericTools|Messages::getError', array('message' => CopixI18N::get('annuaire|annuaire.error.noLogged'), 'back' => CopixUrl::get('||')));
     }
     $classe = _request("classe") ? _request("classe") : NULL;
     $annuaireService =& CopixClassesFactory::Create('annuaire|AnnuaireService');
     $criticErrors = array();
     $rClasse = Kernel::getNodeInfo('BU_CLASSE', $classe, false);
     $matrix =& enic::get('matrixCache');
     if (!$rClasse) {
         $criticErrors[] = CopixI18N::get('annuaire|annuaire.error.noClasse');
     } elseif (!$matrix->classe($classe)->_right->count->voir > 0) {
         $criticErrors[] = CopixI18N::get('kernel|kernel.error.noRights');
     }
     if ($criticErrors) {
         return CopixActionGroup::process('genericTools|Messages::getError', array('message' => implode('<br/>', $criticErrors), 'back' => CopixUrl::get('annuaire||')));
     }
     CopixHtmlHeader::addJSLink(CopixUrl::get() . 'js/iconito/module_fichesecoles.js');
     // Si c'est le détail d'une classe, on en déduit l'école
     $parent = Kernel::getNodeParents('BU_CLASSE', $classe);
     if ($parent[0]['type'] == 'BU_ECOLE') {
         $ecole = $parent[0]['id'];
     }
     $rEcole = Kernel::getNodeInfo('BU_ECOLE', $ecole, false);
     // Blog de l'école
     $blog = getNodeBlog('BU_ECOLE', $ecole, array('is_public' => 1));
     if ($blog) {
         $rEcole['blog'] = CopixUrl::get('blog||', array('blog' => $blog->url_blog));
     }
     $tplListe = new CopixTpl();
     $tplListe->assign('infosecole', CopixZone::process('annuaire|infosecole', array('rEcole' => $rEcole)));
     $tplListe->assign('infosclasse', CopixZone::process('annuaire|infosclasse', array('rClasse' => $rClasse)));
     $tplListe->assign('classe', $rClasse);
     $result = $tplListe->fetch('getannuaireclasse.tpl');
     //print_r($rEcole);
     $tpl = new CopixTpl();
     $tpl->assign('TITLE_PAGE', $rClasse["nom"]);
     $menu = array();
     if (!CopixConfig::exists('|can_group_showlist') || CopixConfig::get('|can_group_showlist')) {
         $menu[] = array('txt' => CopixI18N::get('groupe|groupe.annuaire'), 'url' => CopixUrl::get('groupe||getListPublic'), 'size' => '110');
     }
     $menu[] = array('txt' => CopixI18N::get('public|public.blog.annuaire'), 'url' => CopixUrl::get('public||getListBlogs'));
     $menu[] = array('txt' => CopixI18N::get('annuaire|annuaire.backEcole'), 'url' => CopixUrl::get('|getAnnuaireEcole', array('ecole' => $ecole)));
     $menu[] = array('txt' => CopixI18N::get('annuaire|annuaire.backVille'), 'url' => CopixUrl::get('|getAnnuaireVille', array('ville' => $rEcole['ALL']->vil_id_vi)));
     if (CopixConfig::exists('|can_annuaire_menu') && !CopixConfig::get('|can_annuaire_menu')) {
         $menu = array();
     }
     $tpl->assign('MENU', $menu);
     $tpl->assign('MAIN', $result);
     return new CopixActionReturn(COPIX_AR_DISPLAY, $tpl);
 }
 /**
  * Affichage de la fiche d'une ecole
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2008/09/03
  * @param integer $id Id de l'ecole
  */
 public function blogs()
 {
     $id = $this->getRequest('id', null);
     $pAnnee = $this->getRequest('annee', null);
     //
     $ecoleDAO = CopixDAOFactory::create('kernel|kernel_bu_ecole');
     $ficheDAO = CopixDAOFactory::create("fiches_ecoles");
     $criticErrors = array();
     if (!($rEcole = $ecoleDAO->get($id))) {
         $criticErrors[] = CopixI18N::get('fichesecoles.error.param');
     } elseif (!FichesEcolesService::canMakeInFicheEcole($id, 'VIEW')) {
         $criticErrors[] = CopixI18N::get('kernel|kernel.error.noRights');
     }
     if ($criticErrors) {
         return CopixActionGroup::process('genericTools|Messages::getError', array('message' => implode('<br/>', $criticErrors), 'back' => CopixUrl::get('annuaire||')));
     }
     $arClasses = AnnuaireService::getClassesInEcole($rEcole->numero, array('forceCanViewEns' => true, 'onlyWithBlog' => true, 'onlyWithBlogIsPublic' => 1, 'enseignant' => false, 'annee' => $pAnnee));
     $rEcole->blog = getNodeBlog('BU_ECOLE', $rEcole->numero, array('is_public' => 1));
     // Get vocabulary catalog to use
     $nodeVocabularyCatalogDAO = _ioDAO('kernel|kernel_i18n_node_vocabularycatalog');
     $vocabularyCatalog = $nodeVocabularyCatalogDAO->getCatalogForNode('BU_ECOLE', $id);
     $tpl = new CopixTpl();
     $tpl->assign('rEcole', $rEcole);
     $tpl->assign('arClasses', $arClasses);
     $tpl->assign('catalog', $vocabularyCatalog->id_vc);
     if ($anneeDebutBlogs = CopixConfig::get('fichesecoles|anneeDebutBlogs')) {
         $anneeFinBlogs = Kernel::getAnneeScolaireCourante()->id_as;
         //Kernel::deb("anneeDebutBlogs=$anneeDebutBlogs / anneeFinBlogs=$anneeFinBlogs");
         if (!$pAnnee) {
             $pAnnee = $anneeFinBlogs;
         }
         if ($anneeFinBlogs > $anneeDebutBlogs) {
             $comboAnnees = CopixZone::process('kernel|combo_annees', array('name' => 'annee', 'selected' => $pAnnee, 'debut' => $anneeDebutBlogs, 'fin' => $anneeFinBlogs, 'extra2' => 'onChange="ficheViewBlogs(' . $id . ',this.options[this.selectedIndex].value);"'));
             $tpl->assign('comboAnnees', $comboAnnees);
         }
     }
     $result = $tpl->fetch('blogs.tpl');
     header('Content-type: text/html; charset=utf-8');
     //echo utf8_encode($result);
     echo $result;
     return new CopixActionReturn(COPIX_AR_NONE, 0);
 }
 /**
  * Retourne les classes d'une �cole, avec les infos des enseignants affect�s
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2006/01/18
  * @param integer $ecole Id de l'�cole
  * @param array $options Tableau d'options. Implemente : [forceCanViewEns] force l'affichage des enseignants au lieu de regarder si l'usager a les droits [onlyWithBlog] ne renvoie que les classes ayant un blog [onlyWithBlog] ne renvoie que les classes ayant un blog [onlyWithBlogIsPublic] verifie que le blog est public (ou pas, selon valeur onlyWithBlogIsPublic) [enseignant] si on veut avoir l'enseignant de la classe (true par defaut) [withNiveaux] cherche les niveaux de chaque classe [annee] Force une annee scolaire [droit] pour n'avoir que les classes sur lesquelles on a ce droit
  * @return array Tableau avec les classes
  * @todo Voir pour remplacer le -1 par un ID d'un enseignant
  */
 public function getClassesInEcole($ecole, $options = array())
 {
     $classes = array();
     if (isset($options['getNodeInfo_light']) && $options['getNodeInfo_light']) {
         $getNodeInfo_full = false;
     } else {
         $getNodeInfo_full = true;
     }
     $matrix =& enic::get('matrixCache');
     $getNodeChildsOptions = array();
     if (isset($options['annee']) && $options['annee']) {
         $getNodeChildsOptions['annee'] = $options['annee'];
     }
     $childs = Kernel::getNodeChilds('BU_ECOLE', $ecole, $getNodeInfo_full, $getNodeChildsOptions);
     //return($childs);
     //echo "<pre>"; print_r($childs); die();
     //return($childs);
     foreach ($childs as $child) {
         //print_r($child);
         if ($child['type'] == 'BU_CLASSE') {
             if (isset($options['droit']) && $options['droit']) {
                 $droit = $matrix->classe($child['id'])->_right->count->{$options}['droit'] || $matrix->classe($child['id'])->member_of || $matrix->classe($child['id'])->descendant_of;
                 //Kernel::myDebug("id=".$child['id']." / droit=".$droit);
                 if (!$droit) {
                     continue;
                 }
             }
             $add = true;
             $node = Kernel::getNodeInfo($child['type'], $child['id'], false);
             $classe = array('id' => $child['id'], 'nom' => $node['nom']);
             // On cherche les enseignants
             if (!isset($options['enseignant']) || $options['enseignant']) {
                 if (isset($options['forceCanViewEns'])) {
                     $canViewEns = $options['forceCanViewEns'];
                 } else {
                     $droit = $matrix->classe($child['id'])->_right->USER_ENS->voir || $matrix->classe($child['id'])->member_of || $matrix->classe($child['id'])->descendant_of;
                     //Kernel::myDebug("id=".$child['id']." / droit=".$droit);
                     $canViewEns = $droit;
                 }
                 //Kernel::deb ("canViewEns=$canViewEns");
                 if (!isset($options['no_enseignant']) || $options['no_enseignant'] == 0) {
                     $classe['enseignant'] = $canViewEns ? AnnuaireService::getEnseignantInClasse($child['id']) : NULL;
                 }
             }
             // On cherche seulement les classes avec blog
             if (isset($options['onlyWithBlog']) && $options['onlyWithBlog']) {
                 $getNodeBlogOptions = array();
                 if (isset($options['onlyWithBlogIsPublic'])) {
                     $getNodeBlogOptions['is_public'] = $options['onlyWithBlogIsPublic'];
                 }
                 if ($blog = getNodeBlog('BU_CLASSE', $child['id'], $getNodeBlogOptions)) {
                     //var_dump($blog);
                     $classe['url_blog'] = $blog->url_blog;
                 } else {
                     $add = false;
                 }
             }
             // Ajout eventuel des niveaux
             if (isset($options['withNiveaux']) && $options['withNiveaux']) {
                 //var_dump($child);
                 $classe['niveaux'] = $child['ALL']->getNiveaux();
             }
             if ($add) {
                 $classes[] = $classe;
             }
         }
     }
     // $start = microtime(true);
     // echo "&gt;&gt; foreach (childs) ".(microtime(true)-$start)."<br />";
     return $classes;
 }
 /**
  * Affiche la liste des blogs ayant au moins un article, pour un groupe de ville, ou une ou plusieurs villes
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2006/03/23
  * @param string $kw Mot-cl� pour la recherche (option)
  * @param integer grville Id de groupe de ville
  * @param array ville Tableau avec les ID des villes
  */
 public function _createContent(&$toReturn)
 {
     CopixHtmlHeader::addJSLink(CopixUrl::get() . 'js/iconito/module_fichesecoles.js');
     $kw = $this->getParam('kw', null);
     $pGrVille = $this->getParam('grville', null);
     $pVille = $this->getParam('ville', null);
     // Tableau
     $tpl = new CopixTpl();
     if ($pVille) {
         $villes = AnnuaireService::getVilles($pVille);
     } else {
         $villes = AnnuaireService::getVillesInGrville($pGrVille);
     }
     //print_r($villes);
     $tpl->assign('villes', $villes);
     $ecoles = array();
     foreach ($villes as $ville) {
         //$ecoles
         $ec = AnnuaireService::getEcolesInVille($ville['id'], array('directeur' => false));
         foreach ($ec as $k => $e) {
             $blog = getNodeBlog('BU_ECOLE', $e['id']);
             //print_r($blog);
             if ($blog && $blog->is_public == 1) {
                 $ec[$k]['blog']['url_blog'] = $blog->url_blog;
             }
         }
         $ecoles[$ville['id']] = $ec;
     }
     //print_r($ecoles);
     $tpl->assign('ecoles', $ecoles);
     if ($kw) {
         $critere = " SELECT * FROM module_blog WHERE is_public=1 AND name_blog LIKE '%" . addslashes($kw) . "%' ORDER BY name_blog";
     } else {
         $critere = " SELECT * FROM module_blog WHERE is_public=1 AND 1 ORDER BY name_blog";
     }
     $sql = _doQuery($critere);
     $list = array();
     $arTypes = array();
     if (CopixConfig::exists('public|blogs.types') && CopixConfig::get('public|blogs.types')) {
         $arTypes = explode(",", CopixConfig::get('public|blogs.types'));
     }
     $arTypes[] = 'CLUB';
     //print_r($sql);
     foreach ($sql as $blog) {
         $parent = Kernel::getModParentInfo("MOD_BLOG", $blog->id_blog);
         if ($parent) {
             if ($arTypes && !in_array($parent['type'], $arTypes)) {
                 continue;
             }
             //var_dump($parent);
             $blog->parent = $parent['nom'];
             switch ($parent['type']) {
                 case 'CLUB':
                     if (Kernel::getKernelLimits('ville')) {
                         $ville = GroupeService::getGroupeVille($parent['id']);
                         if (!in_array($ville, Kernel::getKernelLimits('ville_as_array'))) {
                             continue;
                         }
                     }
                     $blog->type = CopixI18N::get('public.blog.typeClub');
                     break;
                     /*
                     case 'BU_CLASSE' :
                         $blog->type = CopixI18N::get ('public.blog.typeClasse');
                         $blog->parent .= ' - '.$parent['ALL']->eco_nom;
                         if ($parent['ALL']->eco_type)
                             $blog->parent .= ' - '.$parent['ALL']->eco_type.'';
                         break;
                     */
                     //case 'BU_ECOLE' : $blog->type = CopixI18N::get ('public.blog.typeEcole'); break;
                     //case 'BU_VILLE' : $blog->type = CopixI18N::get ('public.blog.typeVille'); break;
                     //case 'BU_GRVILLE' : $blog->type = CopixI18N::get ('public.blog.typeGrville'); break;
                     //default : $blog->type = $parent['type']; break;
             }
             if (!isset($blog->type)) {
                 continue;
             }
             $blog->stats = KernelBlog::getStats($blog->id_blog);
             //print_r($blog);
             /* Activer pour cacher les blogs non lisibles */
             // if( !blogauth::canMakeInBlog('READ', $blog) ) continue;
             if ($blog->stats['nbArticles']['value'] > 0) {
                 $list[] = $blog;
             }
         }
     }
     usort($list, "order_tab_blogs");
     $tpl->assign('list', $list);
     if (!CopixConfig::exists('|can_public_rssfeed') || CopixConfig::get('|can_public_rssfeed')) {
         $tpl->assign('can_public_rssfeed', 1);
     } else {
         $tpl->assign('can_public_rssfeed', 0);
     }
     $toReturn = $tpl->fetch('getlistblogszone2.tpl');
     return true;
 }