/**
 * Given an object containing all the necessary referentiel,
 * (defined by the form in add.html) this function
 * will create a new instance and return the id number
 * of the new instance.
 *
 * @param object $instance An object from the form in add.html
 * @return int The id of the newly inserted referentiel record
 **/
function referentiel_add_referentiel_domaines($form)
{
    global $USER;
    global $DB;
    // La premiere creation permet aussi la saisie d'un domaine, d'une compétence et d'un item
    $referentiel_referentiel_id = 0;
    // temp added for debugging
    // echo "<br />DEBUG :: lib.php :: 3364:: ADD INSTANCE CALLED";
    // DEBUG
    // print_object($form);
    // echo "<br />";
    // saisie d'un referentiel
    if (isset($form->name) && $form->name != "" && isset($form->code_referentiel) && $form->code_referentiel != "") {
        // creer
        $referentiel_referentiel = new object();
        $referentiel_referentiel->name = $form->name;
        $referentiel_referentiel->code_referentiel = $form->code_referentiel;
        $referentiel_referentiel->description_referentiel = $form->description_referentiel;
        $referentiel_referentiel->url_referentiel = $form->url_referentiel;
        $referentiel_referentiel->seuil_certificat = $form->seuil_certificat;
        $referentiel_referentiel->nb_domaines = $form->nb_domaines;
        $referentiel_referentiel->liste_codes_competence = $form->liste_codes_competence;
        $referentiel_referentiel->liste_empreintes_competence = $form->liste_empreintes_competence;
        // Modif JF 2009/10/16
        if (isset($form->liste_poids_competence)) {
            $referentiel_referentiel->liste_poids_competence = $form->liste_poids_competence;
        } else {
            $referentiel_referentiel->liste_poids_competence = '';
        }
        $referentiel_referentiel->timemodified = time();
        if (isset($form->local) && $form->local != 0 && isset($form->course) && $form->course != 0) {
            $referentiel_referentiel->local = $form->course;
        } else {
            $referentiel_referentiel->local = 0;
        }
        $referentiel_referentiel->logo_referentiel = $form->logo_referentiel;
        // Modif JF 2012/06/02
        if (isset($form->label_domaine)) {
            $referentiel_referentiel->label_domaine = $form->label_domaine;
        } else {
            $referentiel_referentiel->label_domaine = '';
        }
        if (isset($form->label_competence)) {
            $referentiel_referentiel->label_competence = $form->label_competence;
        } else {
            $referentiel_referentiel->label_competence = '';
        }
        if (isset($form->label_item)) {
            $referentiel_referentiel->label_item = $form->label_item;
        } else {
            $referentiel_referentiel->label_item = '';
        }
        // traitements speciaux
        if (isset($form->mail_auteur_referentiel) && $form->mail_auteur_referentiel != '') {
            $referentiel_referentiel->mail_auteur_referentiel = $form->mail_auteur_referentiel;
        } else {
            // Modif JF 2009/10/16
            if (isset($USER->email) && $USER->email != '') {
                $referentiel_referentiel->mail_auteur_referentiel = $USER->email;
            } else {
                $referentiel_referentiel->mail_auteur_referentiel = '';
            }
        }
        // Modif JF 2009/10/16
        if (isset($form->old_pass_referentiel)) {
            // mot de passe stocke au format Crypte MD5()
            $referentiel_referentiel->old_pass_referentiel = $form->old_pass_referentiel;
        } else {
            $referentiel_referentiel->old_pass_referentiel = '';
        }
        if (isset($form->pass_referentiel) && trim($form->pass_referentiel) != '') {
            // mot de passe changé
            // MD5
            $referentiel_referentiel->pass_referentiel = md5($form->pass_referentiel);
        }
        // DEBUG
        // echo "<br />DEBUG :: lib.php :: 221";
        // print_object($referentiel_referentiel);
        // echo "<br />";
        if ($referentiel_referentiel_id = $DB->insert_record("referentiel_referentiel", $referentiel_referentiel)) {
            // echo "REFERENTIEL ID : $referentiel_referentiel_id<br />";
            /* *****************
                        // MODIF JF 2012/03/06
            			// saisie de l'instance
            			// cela n'est pas necessaire à ce niveau
            			// on le fait dans les scripts appelants
            			if (!empty($form->instance)){
                            referentiel_associe_referentiel_instance($form->instance, $referentiel_referentiel_id);
            			}
            			else{
                    		$referentiel = new object();
            	       		$referentiel->name=($form->name_instance);
                			$referentiel->description_instance=($form->description_instance);
                            $referentiel->label_domaine=($form->label_domaine);
                			$referentiel->label_competence=($form->label_competence);
            	       		$referentiel->label_item=($form->label_item);
            		        $referentiel->date_instance = time();
            			    $referentiel->course=$form->course;
            			    $referentiel->ref_referentiel=$referentiel_referentiel_id;
            		        // DEBUG
            			    // echo "<br />DEBUG :: lib.php :: 240";
            			    // print_object($referentiel);
            		        // echo "<br />";
            			    $referentiel_id = $DB->insert_record("referentiel", $referentiel);
            			}
            			******************************************* */
            // saisie du domaine
            $domaine = new object();
            $domaine->ref_referentiel = $referentiel_referentiel_id;
            if (empty($form->code_domaine)) {
                $form->code_domaine = get_string('c_domaine', 'referentiel') . '.' . $form->num_domaine;
            }
            $domaine->code_domaine = $form->code_domaine;
            if (empty($form->description_domaine)) {
                $form->description_domaine = get_string('a_completer', 'referentiel');
            }
            $domaine->description_domaine = $form->description_domaine;
            $domaine->num_domaine = $form->num_domaine;
            $domaine->nb_competences = $form->nb_competences;
            // MODIF JF 2012/02/20
            if (isset($form->type_domaine)) {
                $domaine->type_domaine = $form->type_domaine;
            } else {
                $domaine->type_domaine = 0;
            }
            if (isset($form->seuil_domaine)) {
                $domaine->seuil_domaine = $form->seuil_domaine;
            } else {
                $domaine->seuil_domaine = 0.0;
            }
            // MODIF JF 2012/03/26
            if (isset($form->minima_domaine)) {
                $domaine->minima_domaine = $form->minima_domaine;
            } else {
                $domaine->minima_domaine = 0;
            }
            // DEBUG
            // echo "<br />DEBUG :: lib.php :: 253";
            // print_object($domaine);
            // echo "<br />";
            $domaine_id = $DB->insert_record("referentiel_domaine", $domaine);
            // echo "DOMAINE ID / $domaine_id<br />";
            if ($domaine_id > 0) {
                $competence = new object();
                $competence->ref_domaine = $domaine_id;
                if (empty($form->code_competence)) {
                    $form->code_competence = get_string('c_competence', 'referentiel') . '.' . $form->num_domaine . '.' . $form->num_competence;
                }
                $competence->code_competence = $form->code_competence;
                if (empty($form->description_competence)) {
                    $form->description_competence = get_string('a_completer', 'referentiel');
                }
                $competence->description_competence = $form->description_competence;
                $competence->num_competence = $form->num_competence;
                $competence->nb_item_competences = $form->nb_item_competences;
                // MODIF JF 2012/02/20
                if (isset($form->type_competence)) {
                    $competence->type_competence = $form->type_competence;
                } else {
                    $competence->type_competence = 0;
                }
                if (isset($form->seuil_competence)) {
                    $competence->seuil_competence = $form->seuil_competence;
                } else {
                    $competence->seuil_competence = 0.0;
                }
                // MODIF JF 2012/03/26
                if (isset($form->minima_competence)) {
                    $competence->minima_competence = $form->minima_competence;
                } else {
                    $competence->minima_competence = 0;
                }
                // DEBUG
                // echo "<br />DEBUG :: lib.php :: 268";
                // print_object($competence);
                // echo "<br />";
                $competence_id = $DB->insert_record("referentiel_competence", $competence);
                // echo "COMPETENCE ID / $competence_id<br />";
                if ($competence_id > 0) {
                    $item = new object();
                    $item->ref_referentiel = $referentiel_referentiel_id;
                    $item->ref_competence = $competence_id;
                    if (empty($form->code_item)) {
                        $form->code_item = get_string('c_item', 'referentiel') . '.' . $form->num_domaine . '.' . $form->num_competence . '.' . $form->num_item;
                    }
                    $item->code_item = $form->code_item;
                    if (empty($form->description_item)) {
                        $form->description_item = get_string('a_completer', 'referentiel');
                    }
                    $item->description_item = $form->description_item;
                    $item->type_item = $form->type_item;
                    $item->poids_item = $form->poids_item;
                    $item->empreinte_item = $form->empreinte_item;
                    $item->num_item = $form->num_item;
                    // DEBUG
                    // echo "<br />DEBUG :: lib.php :: 283";
                    // print_object($item);
                    // echo "<br />";
                    $item_id = $DB->insert_record("referentiel_item_competence", $item);
                    // echo "ITEM ID / $item_id<br />";
                }
            }
        }
        if ($referentiel_referentiel_id > 0) {
            // MODIF JF 2009/10/16
            $liste_codes_competence = referentiel_new_liste_codes_competence($referentiel_referentiel_id);
            referentiel_set_liste_codes_competence($referentiel_referentiel_id, $liste_codes_competence);
            $liste_empreintes_competence = referentiel_new_liste_empreintes_competence($referentiel_referentiel_id);
            referentiel_set_liste_empreintes_competence($referentiel_referentiel_id, $liste_empreintes_competence);
            $liste_poids_competence = referentiel_new_liste_poids_competence($referentiel_referentiel_id);
            referentiel_set_liste_poids_competence($referentiel_referentiel_id, $liste_poids_competence);
            // MODIF JF 2012/03/04
            referentiel_recalcule_cle_referentiel($referentiel_referentiel_id);
            // MODIF JF 2012/02/25
            referentiel_initialise_protocole_referentiel($referentiel_referentiel_id);
        }
        # May have to add extra stuff in here #
    } else {
        return get_string('erreur_creation', 'referentiel');
        // "Name and code mandatory";
    }
    return $referentiel_referentiel_id;
}
function referentiel_affiche_protocole($refrefid, $instanceid = 0)
{
    // tables de protocoles (seuils, item obligatoires, etc.
    // recupere les labels des domaine, compoetence, item
    if (!empty($instanceid)) {
        $labels = referentiel_get_labels_instance($instanceid);
    } else {
        $labels = referentiel_get_labels_occurrence($refrefid);
    }
    global $protocol_seuil_referentiel;
    global $protocol_minima_referentiel;
    global $protocol_t_domaines_oblig;
    global $protocol_t_domaines_seuil;
    global $protocol_t_domaines_minima;
    global $protocol_t_competences_oblig;
    global $protocol_t_competences_seuil;
    global $protocol_t_competences_minima;
    global $protocol_t_items_oblig;
    global $protocol_commentaire;
    global $protocol_timemodified;
    global $protocol_actif;
    global $OK_REFERENTIEL_PROTOCOLE;
    // les données du protocole sont disponibles
    global $OK_REFERENTIEL_DATA;
    // les données du certificat sont disponibles
    // REFERENTIEL
    global $max_minimum_referentiel;
    global $max_seuil_referentiel;
    // DOMAINES
    global $t_domaine;
    global $t_domaine_coeff;
    // COMPETENCES
    global $t_competence;
    global $t_competence_coeff;
    // ITEMS
    global $t_item_code;
    global $t_item_coeff;
    // coefficient poids determine par le modele de calcul (soit poids soit poids / empreinte)
    global $t_item_domaine;
    // index du domaine associe a un item
    global $t_item_competence;
    // index de la competence associee a un item
    global $t_item_poids;
    // poids
    global $t_item_empreinte;
    global $t_nb_item_domaine;
    // Ajout pour le protocole des minimas
    global $t_competence_domaine;
    // index du domaine assicie a une competence
    global $t_nb_competence_domaine;
    // nombre de competences par domaine
    global $t_nb_item_competence;
    // nombre d'item par competences
    global $t_competence_minima;
    // INUTILE ?
    global $t_domaine_minima;
    // INUTILE ?
    $s = '';
    $separateur1 = '/';
    $separateur2 = ':';
    if (!isset($OK_REFERENTIEL_DATA) || $OK_REFERENTIEL_DATA == false) {
        $OK_REFERENTIEL_DATA = referentiel_initialise_data_referentiel($refrefid);
    }
    if (!isset($OK_REFERENTIEL_PROTOCOLE) || $OK_REFERENTIEL_PROTOCOLE == false) {
        $OK_REFERENTIEL_PROTOCOLE = referentiel_initialise_protocole_referentiel($refrefid);
    }
    if (isset($OK_REFERENTIEL_DATA) && $OK_REFERENTIEL_DATA == true && isset($OK_REFERENTIEL_PROTOCOLE) && $OK_REFERENTIEL_PROTOCOLE == true) {
        if (!empty($protocol_t_items_oblig) && !empty($protocol_t_competences_oblig) && !empty($protocol_t_domaines_oblig) && !empty($protocol_t_competences_seuil) && !empty($protocol_t_domaines_seuil)) {
            if (empty($protocol_commentaire)) {
                $protocol_commentaire = get_string('aide_protocole_completer', 'referentiel');
            }
            // Mise en page du tableau
            $nbmaxlignes = 20;
            if ($max_minimum_referentiel >= 60) {
                $nbmaxlignes = 30;
            }
            $nlig = $max_minimum_referentiel;
            $maxlig = min($nbmaxlignes, round($nlig / 2, 0));
            $ncol = round($nlig / $maxlig, 0);
            $nligc = count($protocol_t_competences_oblig);
            $ncolc = round($nligc / $maxlig, 0);
            $ncol += $ncolc;
            $nligd = count($protocol_t_domaines_oblig);
            $ncold = round($nligd / $maxlig, 0);
            $ncol += $ncold;
            $s .= '<div align="center">' . "\n";
            if ($protocol_actif) {
                if ($protocol_timemodified) {
                    $s .= '<span class="surligne">' . get_string('protocole_active', 'referentiel') . ' ' . get_string('depuis', 'referentiel', userdate($protocol_timemodified)) . '</span>' . "\n";
                } else {
                    $s .= '<span class="surligne">' . get_string('protocole_active', 'referentiel') . '</span>' . "\n";
                }
            } else {
                if ($protocol_timemodified) {
                    $s .= '<span class="surligne">' . get_string('protocole_desactive', 'referentiel') . ' ' . get_string('depuis', 'referentiel', userdate($protocol_timemodified)) . '</span>' . "\n";
                } else {
                    $s .= '<span class="surligne">' . get_string('protocole_desactive', 'referentiel') . '</span>' . "\n";
                }
            }
            $s .= '<table class="centree">' . "\n";
            $s .= '<tr valign="top">
<th>' . get_string('minima_certificat', 'referentiel') . '</th></tr>' . "\n";
            $s .= '<tr valign="top">
            <td>
<b>' . $protocol_minima_referentiel . '</b> / <i>' . $max_minimum_referentiel . '</i> &nbsp; &nbsp; &nbsp; (' . get_string('aide_minima', 'referentiel') . ')';
            $s .= '</td></tr>';
            $s .= '<tr valign="top">
<th>' . get_string('seuil_certificat', 'referentiel') . '</th>
</tr>
<tr valign="top">
<td>
<b>' . $protocol_seuil_referentiel . '</b> / <i>' . $max_seuil_referentiel . '</i> &nbsp; &nbsp; &nbsp; (' . get_string('aide_seuil', 'referentiel') . ')
</td></tr>
<tr valign="top">
<th colspan="' . $ncol . '">' . get_string('commentaire', 'referentiel') . '</th></tr>' . "\n";
            $s .= '<tr valign="top">
<td colspan="' . $ncol . '">
' . nl2br(stripslashes($protocol_commentaire)) . "\n";
            $s .= '</td></tr>' . "\n";
            $s .= '</table>' . "\n";
            // ITEMS
            $label_i = $labels->item;
            $expression = str_replace(get_string('itemo', 'referentiel'), $label_i, get_string('item_obligatoires', 'referentiel'));
            $s .= '<table>' . "\n";
            $s .= '<tr valign="top"><td>' . "\n";
            $s .= '<table class="referentiel">
<tr valign="top">
<th colspan="4" class="item">' . $expression . '</th>
</tr>' . "\n";
            $i = 0;
            $k = 0;
            $n = count($protocol_t_items_oblig);
            while ($i < $n) {
                $t_oblig = explode($separateur2, $protocol_t_items_oblig[$i]);
                if (!empty($t_oblig[1])) {
                    $s .= '<tr valign="top"><td>' . $t_oblig[0] . '</td><td><i>' . get_string('yes') . '</i></td>' . "\n";
                } else {
                    $s .= '<tr valign="top"><td>' . $t_oblig[0] . '</td><td><i>' . get_string('no') . '</i></td>' . "\n";
                }
                $s .= '<td><i>' . $t_item_poids[$i] . '</i></td><td>' . $t_item_empreinte[$i] . '</td></tr>' . "\n";
                $i++;
                $k++;
                if ($k == $maxlig && $i < $n) {
                    $s .= '</table></td><td>' . "\n";
                    $s .= '<table class="referentiel">
<tr valign="top">
<th colspan="4" class="item">' . $expression . '</th>
</tr>' . "\n";
                    $k = 0;
                }
            }
            $s .= '</table></td><td>' . "\n";
            // COMPETENCES
            $label_c = $labels->competence;
            $expression = str_replace(get_string('compo', 'referentiel'), $label_c, get_string('competences_oblig_seuil', 'referentiel'));
            $comp_th = str_replace('[', '<th colspan="2">', $expression);
            $comp_th = str_replace(']', '</th>', $comp_th);
            $s .= '<table class="activite">
<tr>' . $comp_th . '</tr>' . "\n";
            $i = 0;
            $k = 0;
            $n = count($protocol_t_competences_oblig);
            while ($i < $n) {
                $t_oblig = explode($separateur2, $protocol_t_competences_oblig[$i]);
                $t_minima = explode($separateur2, $protocol_t_competences_minima[$i]);
                $t_seuil = explode($separateur2, $protocol_t_competences_seuil[$i]);
                $s .= '<tr valign="top"><td>' . $t_oblig[0] . '</td><td>';
                if (!empty($t_oblig[1])) {
                    $s .= '<i>' . get_string('yes') . '</i>';
                } else {
                    $s .= '<i>' . get_string('no') . '</i>';
                }
                $s .= '</td>';
                if ($t_minima[1] > 0) {
                    $s .= '<td class="blue">';
                } else {
                    $s .= '<td>';
                }
                $s .= $t_minima[1] . "\n";
                $s .= '</td><td><i>' . $t_nb_item_competence[$i] . '</i>';
                $s .= '</td>';
                if ($t_seuil[1] > 0) {
                    $s .= '<td class="blue">';
                } else {
                    $s .= '<td>';
                }
                $s .= $t_seuil[1] . "\n";
                $s .= '</td><td><i>' . $t_competence_coeff[$i] . '</i>';
                $s .= '</td></tr>' . "\n";
                $i++;
                $k++;
                if ($k == $maxlig && $i < $n) {
                    $s .= '</table></td><td>' . "\n";
                    $s .= '<table class="activite">
<tr valign="top">
<tr>' . $comp_th . '</tr>
</tr>' . "\n";
                    $k = 0;
                }
            }
            $s .= '</table></td><td>' . "\n";
            // DOMAINES
            $label_d = $labels->domaine;
            $expression = str_replace(get_string('domo', 'referentiel'), $label_d, get_string('domaines_oblig_seuil', 'referentiel'));
            $dom_th = str_replace('[', '<th colspan="2">', $expression);
            $dom_th = str_replace(']', '</th>', $dom_th);
            $s .= '<table class="domaine">
<tr>' . $dom_th . '</tr>' . "\n";
            $i = 0;
            $k = 0;
            $n = count($protocol_t_domaines_oblig);
            while ($i < $n) {
                $t_oblig = explode($separateur2, $protocol_t_domaines_oblig[$i]);
                $t_minima = explode($separateur2, $protocol_t_domaines_minima[$i]);
                $t_seuil = explode($separateur2, $protocol_t_domaines_seuil[$i]);
                $s .= '<tr valign="top"><td>' . $t_oblig[0] . '</td><td>';
                if (!empty($t_oblig[1])) {
                    $s .= '<i>' . get_string('yes') . '</i>';
                } else {
                    $s .= '<i>' . get_string('no') . '</i>';
                }
                $s .= '</td>';
                if ($t_minima[1] > 0) {
                    $s .= '<td class="green">';
                } else {
                    $s .= '<td>';
                }
                $s .= $t_minima[1] . "\n";
                $s .= '</td><td><i>' . $t_nb_competence_domaine[$i] . '</i>';
                $s .= '</td>';
                if ($t_seuil[1] > 0) {
                    $s .= '<td class="green">';
                } else {
                    $s .= '<td>';
                }
                $s .= $t_seuil[1] . "\n";
                $s .= '</td><td><i>' . $t_domaine_coeff[$i] . '</i>';
                $s .= '</td></tr>' . "\n";
                $i++;
                $k++;
                if ($k == $maxlig && $i < $n) {
                    $s .= '</table></td><td>' . "\n";
                    $s .= '<table class="domaine">
<tr valign="top">
<tr>' . $dom_th . '</tr>' . "\n";
                    $k = 0;
                }
            }
            $s .= '</table>
</td></tr>' . "\n";
            $s .= '</table>' . "\n";
            $s .= '</div>' . "\n";
        }
    }
    return $s;
}
/**
 * Function set thresholds for an occurrence
 *
 * @param refrefid reference referentiel_referentiel id
 * @return string
 * A.1:0/A.2:0/A.3:0/B.1:0/B.2:0/
 * @todo Finish documenting this function
**/
function referentiel_certificat_valide($competences_certificat, $refrefid)
{
    // ce certificat comporte des pourcentages par domaine et competence
    // affichage sous forme de tableau et span pour les items
    // input competences_certificat
    // A.1-1:0/A.1-2:0/A.1-3:1/A.1-4:0/A.1-5:0/A.2-1:0/A.2-2:0/A.2-3:0/A.3-1:0/A.3-2:1/A.3-3:1/A.3-4:1/B.1-1:0/B.1-2:0/B.1-3:0/B.2-1:0/B.2-2:0/B.2-3:0/B.2-4:0/B.2-5:0/B.3-1:0/B.3-2:0/B.3-3:0/B.3-4:0/B.3-5:0/B.4-1:0/B.4-2:0/B.4-3:0/
    $return_value = -1;
    global $OK_REFERENTIEL_DATA;
    // les données du certificat sont disponibles
    global $OK_REFERENTIEL_PROTOCOLE;
    // les données du protocole sont disponibles
    // DOMAINES
    global $t_domaine;
    global $t_domaine_coeff;
    // COMPETENCES
    global $t_competence;
    global $t_competence_coeff;
    // ITEMS
    global $t_item_code;
    global $t_item_coeff;
    // coefficient poids determine par le modele de calcul (soit poids soit poids / empreinte)
    global $t_item_domaine;
    // index du domaine associe a un item
    global $t_item_competence;
    // index de la competence associee a un item
    global $t_item_poids;
    // poids
    global $t_item_empreinte;
    global $t_nb_item_domaine;
    global $t_nb_item_competence;
    // MODIF JF 2012/03/26
    global $t_competence_domaine;
    // index du domaine associe a une competence
    global $t_nb_competence_domaine;
    // nombre de competence par domaine
    // tables de protocoles (seuils, item obligatoires, etc.
    global $protocol_seuil_referentiel;
    global $protocol_minima_referentiel;
    global $protocol_t_domaines_oblig;
    global $protocol_t_domaines_seuil;
    global $protocol_t_domaines_minima;
    global $protocol_t_competences_oblig;
    global $protocol_t_competences_seuil;
    global $protocol_t_competences_minima;
    global $protocol_t_items_oblig;
    global $protocol_timemodified;
    global $protocol_actif;
    $separateur1 = '/';
    $separateur2 = ':';
    $nb_items_valides = 0;
    // items valides
    $t_certif_item_valeur = array();
    // table des nombres d'items valides
    $t_certif_item_coeff = array();
    // somme des poids du domaine
    $t_certif_competence_poids = array();
    // somme des poids de la competence
    $t_certif_domaine_poids = array();
    // poids certifies
    // MODIF JF 2012/03/26
    $t_certif_competences_valides = array();
    // nombre de competences valides
    $t_certif_domaines_valides = array();
    // nombre de domaines valides
    // donnees globales du referentiel
    if ($refrefid) {
        if (!isset($OK_REFERENTIEL_DATA) || $OK_REFERENTIEL_DATA == false) {
            $OK_REFERENTIEL_DATA = referentiel_initialise_data_referentiel($refrefid);
        }
        if (!isset($OK_REFERENTIEL_PROTOCOLE) || $OK_REFERENTIEL_PROTOCOLE == false) {
            $OK_REFERENTIEL_PROTOCOLE = referentiel_initialise_protocole_referentiel($refrefid);
        }
        if (isset($OK_REFERENTIEL_DATA) && $OK_REFERENTIEL_DATA == true && isset($OK_REFERENTIEL_PROTOCOLE) && $OK_REFERENTIEL_PROTOCOLE == true) {
            // DEBUG
            /*
            echo "<br />DEBUG:: lib_protocol.php :: 318 :: PROTOCOL VARIABLES<br />\n";
            echo "SEUIL : $protocol_seuil_referentiel<br />\n";
            echo "<br />DOMAINES OBLIG<br />\n";
            print_object($protocol_t_domaines_oblig);
            echo "<br />DOMAINES SEUILS<br />\n";
            print_object($protocol_t_domaines_seuil);
            echo "<br />DOMAINES MINIMAS<br />\n";
            print_object($protocol_t_domaines_minima);
            echo "<br />COMPETENCES OBLIG<br />\n";
            print_object($protocol_t_competences_oblig);
            echo "<br />COMPETENCES SEUILS<br />\n";
            print_object($protocol_t_competences_seuil);
            echo "<br />COMPETENCES MINIMAS<br />\n";
            print_object($protocol_t_competences_minima);
            echo "<br />ITEMS OBLIG<br />\n";
            print_object($protocol_t_items_oblig);
            */
            if ($protocol_actif) {
                // Initialisation
                for ($i = 0; $i < count($t_item_code); $i++) {
                    $t_certif_item_valeur[$i] = 0.0;
                    $t_certif_item_coeff[$i] = 0.0;
                }
                for ($i = 0; $i < count($t_competence); $i++) {
                    $t_certif_competence_poids[$i] = 0.0;
                    $t_certif_competences_valides[$i] = 0;
                }
                for ($i = 0; $i < count($t_domaine); $i++) {
                    $t_certif_domaine_poids[$i] = 0.0;
                    $t_certif_domaines_valides[$i] = 0;
                }
                // RECUPERER les pourcentages par competence et domaine
                // en fonction des items valides dans le certificat
                // DEBUG
                // echo "<br />DEBUG :: lib_protocole.php :: 329 :: CODE <br />\n";
                // referentiel_affiche_data_referentiel($refrefid, NULL);
                // recuperer les items valides
                $tc = array();
                $liste_code = referentiel_purge_dernier_separateur($competences_certificat, $separateur1);
                // DEBUG
                // echo "<br />DEBUG :: lib_protocole.php :: 383 :: LISTE : $liste_code<br />\n";
                if (!empty($liste_code) && $separateur1 != "" && $separateur2 != "") {
                    $tc = explode($separateur1, $liste_code);
                    for ($i = 0; $i < count($t_item_domaine); $i++) {
                        $t_certif_domaine_poids[$i] = 0.0;
                    }
                    for ($i = 0; $i < count($t_item_competence); $i++) {
                        $t_certif_competence_poids[$i] = 0.0;
                    }
                    $i = 0;
                    while ($i < count($tc)) {
                        // CODE1:N1
                        // DEBUG
                        // echo "<br />".$tc[$i]." <br />\n";
                        // exit;
                        $t_cc = explode($separateur2, $tc[$i]);
                        // tableau des items valides
                        // print_r($t_cc);
                        // echo "<br />\n";
                        // exit;
                        if (isset($t_cc[1])) {
                            if (isset($t_item_poids[$i]) && isset($t_item_empreinte[$i])) {
                                if ($t_item_poids[$i] > 0 && $t_item_empreinte[$i] > 0) {
                                    // echo "<br />".min($t_cc[1],$t_item_empreinte[$i]);
                                    $t_certif_item_valeur[$i] = min($t_cc[1], $t_item_empreinte[$i]);
                                    // calculer le taux
                                    $coeff = (double) $t_certif_item_valeur[$i] * (double) $t_item_coeff[$i];
                                    // stocker la valeur pour l'item
                                    $t_certif_item_coeff[$i] = $coeff;
                                    // stocker le taux pour la competence
                                    $t_certif_competence_poids[$t_item_competence[$i]] += $coeff;
                                    // stocker le taux pour le domaine
                                    $t_certif_domaine_poids[$t_item_domaine[$i]] += $coeff;
                                    if ($t_certif_item_valeur[$i] >= $t_item_empreinte[$i]) {
                                        $t_certif_competences_valides[$t_item_competence[$i]]++;
                                        $nb_items_valides++;
                                    }
                                } else {
                                    // echo "<br />".min($t_cc[1],$t_item_empreinte[$i]);
                                    $t_certif_item_valeur[$i] = 0.0;
                                    $t_certif_item_coeff[$i] = 0.0;
                                }
                            }
                        }
                        $i++;
                    }
                    /* DOMAINES */
                    // mettre a jour les minimas
                    // compter les competences valides par domaine
                    for ($i = 0; $i < count($t_competence); $i++) {
                        if (isset($t_certif_competences_valides[$t_competence_domaine[$i]])) {
                            $t_certif_domaines_valides[$t_competence_domaine[$i]]++;
                        }
                    }
                    // Verifier si le certificat est valide
                    // Calculer la valeur des items valides
                    $valeur_items_valides = 0.0;
                    for ($i = 0; $i < count($t_certif_item_coeff); $i++) {
                        $valeur_items_valides += $t_certif_item_coeff[$i];
                    }
                    // Vérifier si les minimas sont depassés
                    $ok_minima_competence = true;
                    $ok_minima_domaine = true;
                    // Verifier si le seuil est depassé
                    $ok_seuil = true;
                    $ok_competences = true;
                    $ok_domaines = true;
                    $ok_items = true;
                    // $ok_items=true;   echo "<br />DEBUG:: lib_protocol.php :: 413 :: DEBUG FORCER le test du PROTOCOLE\n";
                    //$ok_items=($protocol_seuil_referentiel>0) && ($nb_items_valides>=$protocol_seuil_referentiel);
                    if ($protocol_seuil_referentiel > 0) {
                        $ok_seuil = $valeur_items_valides >= $protocol_seuil_referentiel;
                    }
                    if ($ok_seuil) {
                        $ok_seuil = $nb_items_valides >= $protocol_minima_referentiel;
                    }
                    // 1) Verifier si tous les items obligatoires sont valides
                    $ok_items = true;
                    if ($ok_items) {
                        $i = 0;
                        while ($i < count($protocol_t_items_oblig) && $ok_items) {
                            $t_oblig = explode($separateur2, $protocol_t_items_oblig[$i]);
                            // echo "<br />ITEM_OBLIG<br />\n";
                            // print_r($t_oblig);
                            if (isset($t_oblig[1])) {
                                if ($t_item_poids[$i] > 0 && $t_item_empreinte[$i] > 0 && $t_oblig[1] > 0) {
                                    $ok_items = $ok_items && $t_certif_item_valeur[$i] >= $t_item_empreinte[$i];
                                }
                            }
                            $i++;
                        }
                    }
                    // 2) Verifier les competences obligatoires
                    $ok_competences_oblig = true;
                    $i = 0;
                    while ($i < count($protocol_t_competences_oblig) && $ok_competences_oblig) {
                        $t_oblig = explode($separateur2, $protocol_t_competences_oblig[$i]);
                        $t_seuil = explode($separateur2, $protocol_t_competences_seuil[$i]);
                        //echo "<br />COMPETENCES_OBLIGS<br />\n";
                        //print_r($t_oblig);
                        //echo "<br />COMPETENCES_SEUILS<br />\n";
                        //print_r($t_seuil);
                        if (isset($t_oblig[1]) && $t_oblig[1] > 0 && isset($t_seuil[1])) {
                            $ok_competences_oblig = $ok_competences_oblig && $t_certif_competence_poids[$i] >= $t_seuil[1];
                        }
                        $i++;
                    }
                    // MODIF JF 2012/03/26
                    // 3) Puis verifier les competences par rapport aux minimas
                    // cela est utile si aucune compétence n'est obligatoire mais qu'il y a une contrainte du style
                    // pas plus de n items invalides par compétence
                    $ok_competences = $ok_competences_oblig;
                    if ($ok_competences) {
                        $i = 0;
                        while ($i < count($protocol_t_competences_seuil) && $ok_competences) {
                            $t_minima = explode($separateur2, $protocol_t_competences_minima[$i]);
                            if (isset($t_minima[1])) {
                                $ok_competences = $ok_competences && $t_certif_competences_valides[$i] >= $t_minima[1];
                            }
                            $i++;
                        }
                    }
                    // 4) Puis verifier les competences par rapport aux seuils
                    // cela est utile si aucune compétence n'est obligatoire mais qu'il y a une contrainte du style
                    // la somme ponderees de items suerieure au seuil de la competence
                    if ($ok_competences) {
                        $i = 0;
                        while ($i < count($protocol_t_competences_seuil) && $ok_competences) {
                            $t_seuil = explode($separateur2, $protocol_t_competences_seuil[$i]);
                            if (isset($t_seuil[1])) {
                                $ok_competences = $ok_competences && $t_certif_competence_poids[$i] >= $t_seuil[1];
                            }
                            $i++;
                        }
                    }
                    // 5) verifier les domaines
                    // if ($ok_competences_oblig){
                    // Verifier les domaines obligatoire par rapport aux seuils
                    $ok_domaines_oblig = true;
                    $i = 0;
                    while ($i < count($protocol_t_domaines_oblig) && $ok_domaines_oblig) {
                        $t_oblig = explode($separateur2, $protocol_t_domaines_oblig[$i]);
                        $t_seuil = explode($separateur2, $protocol_t_domaines_seuil[$i]);
                        //echo "<br />DOMAINES_OBLIGS<br />\n";
                        //print_r($t_oblig);
                        //echo "<br />DOMAINES_SEUILS<br />\n";
                        //print_r($t_seuil);
                        if (isset($t_oblig[1]) && $t_oblig[1] > 0 && isset($t_seuil[1])) {
                            $ok_domaines_oblig = $ok_domaines_oblig && $t_certif_domaine_poids[$i] >= $t_seuil[1];
                        }
                        $i++;
                    }
                    $ok_domaines = $ok_domaines_oblig;
                    // 6) Verifier les domaines par rapport aux minimas
                    // Cela est utile si aucun domaine n'est obligatoire mais qu'il y a une contrainte du style
                    // pas plus de n competences invalides par domaine
                    $ok_domaines = $ok_domaines_oblig;
                    if ($ok_domaines) {
                        $i = 0;
                        while ($i < count($protocol_t_domaines_seuil) && $ok_domaines) {
                            $t_minima = explode($separateur2, $protocol_t_domaines_minima[$i]);
                            if (isset($t_minima[1])) {
                                $ok_domaines = $ok_domaines && $t_certif_domaines_valides[$i] >= $t_minima[1];
                            }
                            $i++;
                        }
                    }
                    // 7) Verifier les domaines par rapport aux les seuils
                    // Cela est utile si aucun domaine n'est obligatoire mais qu'il y a une contrainte du style
                    // pas moins de x pourcentage par rapport au seuil du domaine
                    if ($ok_domaines) {
                        $i = 0;
                        while ($i < count($protocol_t_domaines_seuil) && $ok_domaines) {
                            $t_seuil = explode($separateur2, $protocol_t_domaines_seuil[$i]);
                            if (isset($t_seuil[1])) {
                                $ok_domaines = $ok_domaines && $t_certif_domaine_poids[$i] >= $t_seuil[1];
                            }
                            $i++;
                        }
                    }
                    // DEBUG
                    /*
                    echo "<br />DEBUG :: lib_protocole.php :: 531\n";
                    if ($ok_items) {echo "<br />ITEMS : TRUE";} else {echo "<br />ITEMS : FALSE";}
                    if ($ok_competences) {echo "<br />COMPETENCE: TRUE";} else {echo "<br />COMPETENCE: FALSE";}
                    if ($ok_domaines) {echo "<br />DOMAINE: TRUE";} else {echo "<br />DOMAINE: FALSE";}
                    */
                    if ($ok_seuil && $ok_items && $ok_competences && $ok_domaines) {
                        $return_value = 1;
                    } else {
                        $return_value = 0;
                    }
                }
            }
        }
    }
    return $return_value;
}