/** * 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; }