/**
  * Retourne le niveau de droit de la personne connectée
  * @param integer $idAgenda l'identifiant de l'agenda
  */
 public function getCapability($idAgenda)
 {
     if (!$idAgenda) {
         return 0;
     }
     if (!($d = _sessionGet('modules|agenda|rights|' . $idAgenda))) {
         $d = Kernel::getModRight('MOD_AGENDA', $idAgenda);
         _sessionSet('modules|agenda|rights|' . $idAgenda, $d);
     }
     if ($d >= PROFILE_CCV_MEMBER) {
         $res = AgendaAuth::getModerate();
     } elseif ($d >= PROFILE_CCV_READ) {
         $res = AgendaAuth::getRead();
     } else {
         $res = AgendaAuth::getNone();
     }
     //print_r ("idAgenda=$idAgenda / res=$res<br>");
     return $res;
 }
 public function getModRight($mod_type, $mod_id, $user_type = "-1", $user_id = "-1")
 {
     // Kernel::deb ("getModRight( $mod_type, $mod_id, $user_type, $user_id )");
     $droit = 0;
     if ($mod_type == "MOD_MINIMAIL") {
         return _currentUSer()->isConnected() ? PROFILE_CCV_ADMIN : 0;
     }
     if ($user_type == "-1" && $user_id == "-1") {
         if (_currentUser()->getExtra('type') && _currentUser()->getExtra('id')) {
             $user_type = _currentUser()->getExtra('type');
             $user_id = _currentUser()->getExtra('id');
         } else {
             return 0;
         }
     }
     $mod_parents = Kernel::getModParent($mod_type, $mod_id);
     $user_parents = Kernel::getNodeParents($user_type, $user_id);
     // Rustine CB 23/01/2009 pour les droits des directeurs dans les teleprocedures
     if ($mod_type == 'MOD_TELEPROCEDURES' && $user_type == 'USER_ENS') {
         //print_r($mod_parents);
         //print_r($user_parents);
         $villeMod = $mod_parents[0]->node_type == 'BU_VILLE' ? $mod_parents[0]->node_id : null;
         // S'il est bien directeur d'une ecole dans cette ville
         foreach ($user_parents as $parent) {
             if ($parent['type'] == 'BU_ECOLE' && $parent['droit'] >= PROFILE_CCV_ADMIN && $parent['ALL']->eco_id_ville == $villeMod) {
                 return PROFILE_CCV_READ;
             }
         }
     } elseif ($mod_type == 'MOD_TELEPROCEDURES' && $user_type == 'USER_ADM' && CopixConfig::exists('teleprocedures|USER_ADM_as_USER_ENS') && CopixConfig::get('teleprocedures|USER_ADM_as_USER_ENS')) {
         $villeMod = $mod_parents[0]->node_type == 'BU_VILLE' ? $mod_parents[0]->node_id : null;
         foreach ($user_parents as $parent) {
             if ($parent['type'] == 'BU_ECOLE' && $parent['droit'] >= 30 && $parent['ALL']->eco_id_ville == $villeMod) {
                 return PROFILE_CCV_READ;
             }
         }
     } elseif (isset($mod_parents[0]) && $mod_parents[0]->node_type == 'MOD_TELEPROCEDURES' && $user_type == 'USER_VIL') {
         return Kernel::getModRight($mod_parents[0]->node_type, $mod_parents[0]->node_id, $user_type, $user_id);
     }
     //print_r("getModRight( $mod_type, $mod_id, $user_type, $user_id)<br/>");
     //print_r($mod_parents);
     foreach ($mod_parents as $mod_key => $mod_val) {
         // Check user -> admin
         if ($mod_val->node_type == $user_type && $mod_val->node_id == $user_id) {
             $droit = PROFILE_CCV_ADMIN;
         }
         // Rustine CB 25/08/2010 Si c'est un droit d'un module du groupe d'assistance
         if (CopixConfig::exists('kernel|groupeAssistance') && ($groupeAssistance = CopixConfig::get('kernel|groupeAssistance')) && $mod_val->node_type == 'CLUB' && $mod_val->node_id == $groupeAssistance) {
             //print_r();
             switch ($mod_type) {
                 case 'MOD_FORUM':
                     // Forum : on peut ecrire
                     $droit = PROFILE_CCV_MEMBER;
                     break;
                 case 'MOD_MALLE':
                     // Malle : on peut lire
                 // Malle : on peut lire
                 case 'MOD_BLOG':
                     // Blog : on peut lire
                     $droit = PROFILE_CCV_READ;
                     break;
             }
         }
         // Check parents nodes -> right (DB)
         reset($user_parents);
         //foreach( $user_parents AS $user_key=>$user_val ) {
         while ($user_val = array_pop($user_parents)) {
             // Rustine 1 : les gens rattachÈs ‡ une classe ont le mÍme droit dans l'Ècole de la classe
             if ($user_val["type"] == "BU_CLASSE") {
                 $ecoles = Kernel::getNodeParents($user_val["type"], $user_val["id"]);
                 foreach ($ecoles as $ecole_key => $ecole_val) {
                     $ecoles[$ecole_key]["droit"] = PROFILE_CCV_READ;
                     $user_parents[] = $ecoles[$ecole_key];
                 }
             }
             // Rustine 2 : les parents ont des droits de lecture sur les classes de leur enfants
             if ($user_val["type"] == "USER_ELE" && $user_type == "USER_RES") {
                 $nodes_all = Kernel::getNodeParents($user_val["type"], $user_val["id"]);
                 //print_r($nodes_all);
                 foreach ($nodes_all as $node) {
                     if ($node['type'] != 'BU_CLASSE') {
                         continue;
                     }
                     $node['droit'] = PROFILE_CCV_READ;
                     $user_parents[] = $node;
                     //print_r($node);
                     /*
                     $child['classe'] = $node['nom'];
                     $modules = Kernel::getModEnabled(
                     $node['type'], $node['id'],
                     $child["type"],   $child["id"]   );
                     */
                     //print_r($modules);
                 }
             }
             if ($mod_val->node_type == $user_val["type"] && $mod_val->node_id == $user_val["id"]) {
                 $droit = max($droit, $user_val["droit"]);
             }
             //$droit = min();
         }
     }
     $dao = _dao("kernel|kernel_link_user2node");
     $res = $dao->getByUser($user_type, $user_id);
     foreach ($res as $key => $val) {
         // Utilisateurs --(n)--> Modules
         // if( ereg( "^MOD_(.+)$", $val->node_type ) ) {
         if ($val->node_type == $mod_type && $val->node_id == $mod_id) {
             $ok = true;
             if ($val->debut && $val->debut > date("Ymd")) {
                 $ok = false;
             }
             if ($val->fin && $val->fin < date("Ymd")) {
                 $ok = false;
             }
             $droit_module = $ok ? $val->droit : 0;
             $droit = max($droit, $droit_module);
         }
     }
     // die( "USER="******"/".$user_id."<br />"."MOD=".$mod_type."/".$mod_id."<br />".$droit."<pre>".print_r( $mod_parents, true )."</pre><hr /><pre>".print_r( $user_parents, true )."</pre>" );
     return $droit;
 }