function referentiel_print_graph_certificats($referentiel_instance, $referentiel_referentiel, $gusers, $currentgroup = 0)
{
    global $DB;
    global $CFG;
    global $USER;
    // contexte
    $cm = get_coursemodule_from_instance('referentiel', $referentiel_instance->id);
    $course = $DB->get_record('course', array('id' => $cm->course));
    if (empty($cm) or empty($course)) {
        print_error('REFERENTIEL_ERROR 5 :: print_lib_certificat.php :: You cannot call this script in that way');
    }
    $context = context_module::instance($cm->id);
    $roles = referentiel_roles_in_instance($referentiel_instance->id);
    $iseditor = $roles->is_editor;
    $isadmin = $roles->is_admin;
    $isteacher = $roles->is_teacher;
    $istutor = $roles->is_tutor;
    $isstudent = $roles->is_student;
    $isguest = $roles->is_guest;
    // codes item
    $liste_codes = referentiel_purge_dernier_separateur($referentiel_referentiel->liste_codes_competence, '/');
    // empreintes
    $liste_empreintes = referentiel_purge_dernier_separateur($referentiel_referentiel->liste_empreintes_competence, '/');
    // poids
    $liste_poids = referentiel_purge_dernier_separateur($referentiel_referentiel->liste_poids_competence, '/');
    // cours ?
    if (!empty($course)) {
        $course_name = $course->shortname;
    } else {
        $course_name = "";
    }
    // groupes ?
    if (!empty($currentgroup)) {
        $group_name = groups_get_group_name($currentgroup);
    } else {
        $group_name = "";
    }
    $titre = get_string('certification_etat', 'referentiel');
    if (!empty($course_name)) {
        $titre .= ' (' . $course_name;
        if (!empty($group_name)) {
            $titre .= ' - ' . $group_name;
        }
        $titre .= ')';
    }
    $titre = str_replace(' ', '_', $titre);
    // utilisateurs
    $record_id_users = referentiel_get_students_course($course->id, 0, 0);
    //seulement les stagiaires
    // groupes ?
    if ($gusers && $record_id_users) {
        $record_users = array_intersect($gusers, array_keys($record_id_users));
        // recopier
        $record_id_users = array();
        foreach ($record_users as $record_id) {
            $a_obj = new stdClass();
            $a_obj->userid = $record_id;
            $record_id_users[] = $a_obj;
        }
    }
    if ($record_id_users) {
        // Afficher
        foreach ($record_id_users as $record_id) {
            // afficher la liste d'users
            // recupere les enregistrements de certificats ou les cree si necessaire
            $records_c[] = referentiel_certificat_user($record_id->userid, $referentiel_referentiel->id);
        }
        if ($records_c) {
            // Let's get the datas
            $separateur1 = '/';
            $separateur2 = ':';
            $separateur3 = '|';
            $t_user = array();
            // tableau des userid
            $t_code = explode($separateur1, $liste_codes);
            $t_empreinte = explode($separateur1, $liste_empreintes);
            $t_poids = explode($separateur1, $liste_poids);
            $moyennes = array();
            $t_valides = array(array());
            // $t_declarees = array(array());
            $user_name_souligne = "";
            foreach ($records_c as $record_c) {
                // pour tous les certificats
                if ($record_c) {
                    $certificat_id = $record_c->id;
                    $commentaire_certificat = stripslashes($record_c->commentaire_certificat);
                    $synthese_certificat = stripslashes($record_c->synthese_certificat);
                    $competences_certificat = $record_c->competences_certificat;
                    $competences_activites = $record_c->competences_activite;
                    $decision_jury = stripslashes($record_c->decision_jury);
                    $date_decision = $record_c->date_decision;
                    $ref_referentiel = $record_c->ref_referentiel;
                    $user_id = $record_c->userid;
                    $teacherid = $record_c->teacherid;
                    $verrou = $record_c->verrou;
                    $dossier_ferme = $record_c->valide;
                    $evaluation = $record_c->evaluation;
                    $user_name = referentiel_get_user_nom($user_id) . ' ' . referentiel_get_user_prenom($user_id);
                    $user_info = referentiel_get_user_info($user_id);
                    $teacher_info = referentiel_get_user_info($teacherid);
                    // dates
                    $date_decision_info = userdate($date_decision);
                    //$t_user[]=$user_name;
                    $t_user[] = $user_id;
                    // competences validees dans le certificat
                    $tc = array();
                    $lcc = referentiel_purge_dernier_separateur($competences_certificat, $separateur1);
                    if (!empty($lcc)) {
                        $tc = explode($separateur1, $lcc);
                        // A.1.1:1 A.1.2:1 A.1.3:1 A.1.4:0/A.1.5:0/A.2.1:1/A.2.2:0/A.2.3:0/A.3.1:0/A.3.2:0/A.3.3:0/A.3.4:0/B.1.1:0/B.1.2:0/B.1.3:0/B.2.1:1/B.2.2:1/B.2.3:0/B.2.4: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/
                        $i = 0;
                        while ($i < count($tc)) {
                            // CODE1:N1
                            // DEBUG
                            // echo "<br />".$tc[$i]." <br />\n";
                            if ($tc[$i] != '') {
                                $tcc = explode($separateur2, $tc[$i]);
                                // A.1.1 1
                                if (isset($tcc[1])) {
                                    // $t_valides[$userid][]=$tcc[1];
                                    //$t_valides[$user_name][]=min($tcc[1], $t_empreinte[$i]) ;
                                    $t_valides[$user_id][] = min($tcc[1], $t_empreinte[$i]);
                                }
                            }
                            $i++;
                        }
                    }
                    /*
                        // competences declarees dans les activites
                        $tc=array();
                        $lcd=referentiel_purge_dernier_separateur($competences_activites, $separateur1);
                        if (!empty($lcd)){
                            $tc = explode ($separateur1, $lcd);
                            // A.1.1:1 A.1.2:1 A.1.3:1 A.1.4:0/A.1.5:0/A.2.1:1/A.2.2:0/A.2.3:0/A.3.1:0/A.3.2:0/A.3.3:0/A.3.4:0/B.1.1:0/B.1.2:0/B.1.3:0/B.2.1:1/B.2.2:1/B.2.3:0/B.2.4: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/
                            $i=0;
                            while ($i<count($tc)){
                                // CODE1:N1
                                // DEBUG
                                // echo "<br />".$tc[$i]." <br />\n";
                                // exit;
                                if ($tc[$i]!=''){
                                    $tcc=explode($separateur2, $tc[$i]);
                                    // A.1.1 1
                                    if (isset($tcc[1])){
                    					                   $t_declarees[$user_name][]=$tcc[1];
                    				}
                    			                    }
                                $i++;
                            }
                        }
                    */
                }
            }
            // calculer la moyenne
            $n = 0;
            for ($i = 0; $i < count($t_user); $i++) {
                //$valeurs=$t_valides[$t_user[$i]];
                // moyenne
                $n++;
                $moyennes = referentiel_somme_valeur($moyennes, $t_valides[$t_user[$i]]);
            }
            $moyennes = referentiel_quotient_valeur($moyennes, $n);
            $lmoyennes = implode("/", $moyennes);
            // Distribuer les data sur plusieurs images
            // pagination
            $page0 = 0;
            $page1 = 0;
            $nbuser = count($t_user);
            $page = 0;
            $pagemax = min($nbuser, MAXLIGNEGRAPH);
            $npages = (int) ($nbuser / $pagemax);
            $reste = (int) ($nbuser % $pagemax);
            if ($reste) {
                $npages++;
            }
            /*
                    // DEBUG
                    echo "<br />DEBUG :: 1858 :: CODE<br />\n";
                    print_r($t_code);
                    echo "<br /> EMPREINTES<br />\n";
                    print_r($t_empreinte);
                    echo "<br /> POIDS<br />\n";
                    print_r($t_poids);
            
                    echo "<br />DEBUG :: 1858 :: USERS<br />\n";
                    print_r($t_user);
                    echo "<br />COMPETENCES VALIDES<br />\n";
                    for ($i=0; $i<$nbuser; $i++){
                        echo "<br />User:"******" <br />\n";
                        print_r($t_valides[$t_user[$i]]);
                    }
            */
            // echo "<br />NBUSER: $nbuser  NBPAGES: $npages  PAGEMAX: $pagemax\n";
            for ($page = 0; $page < $npages; $page++) {
                // preparer les donnees
                $t_data = array(array());
                $j = 0;
                for ($j = 0; $j < $pagemax; $j++) {
                    if (isset($t_user[$page * $pagemax + $j])) {
                        $user_name = referentiel_get_user_nom($t_user[$page * $pagemax + $j]) . ' ' . referentiel_get_user_prenom($t_user[$page * $pagemax + $j]);
                        $t_data[$user_name] = $t_valides[$t_user[$page * $pagemax + $j]];
                    }
                }
                // DEBUG
                //echo "<br />DEBUG :: 1876 :: DATA<br />\n";
                //print_r($t_data);
                //echo "<br />DEBUG :: 1885 :: DATA<br />\n";
                $ltdata = "";
                foreach ($t_data as $key => $data) {
                    if ($data) {
                        //echo "<br />$key<br />\n";
                        //print_r($data);
                        $ldata = implode("/", $data);
                        $ltdata .= "{$key}:{$ldata}|";
                    }
                }
                // Afficher
                //echo '<br />DATA -&gt;'.$ltdata."\n";
                $num_page = $page + 1;
                if ($isteacher || $istutor || $isadmin) {
                    $affichage_complet = 1;
                } else {
                    $affichage_complet = 0;
                }
                //echo "<br />AFFCOMPLET : $affichage_complet\n";
                //redirect ($CFG->wwwroot.'/mod/referentiel/graph_certificats.php?d='.$referentiel_instance->id.'&amp;ltdata='.$ltdata.'&amp;lmoyennes='.$lmoyennes.'&amp;lcode='.$liste_codes.'&amp;lempreinte='.$liste_empreintes.'&amp;lpoids='.$liste_poids.'&amp;affcomplet='.$affichage_complet.'&amp;titre='.$titre.'&amp;page='.$num_page.'&amp;npages='.$npages);
                echo '<div align="center"><img src="' . $CFG->wwwroot . '/mod/referentiel/graph_certificats.php?d=' . $referentiel_instance->id . '&amp;ltdata=' . $ltdata . '&amp;lmoyennes=' . $lmoyennes . '&amp;lcode=' . $liste_codes . '&amp;lempreinte=' . $liste_empreintes . '&amp;lpoids=' . $liste_poids . '&amp;affcomplet=' . $affichage_complet . '&amp;titre=' . $titre . '&amp;page=' . $num_page . '&amp;npages=' . $npages . '" border="0" title="' . get_string('statcertif', 'referentiel') . '" /></div>' . "\n";
                echo '<br />' . "\n";
            }
        }
    }
}
/**
 * This function returns records of certificat from table referentiel_certificat
 *
 * If select_all == 1 all certificates are displayed
 * Else only course's user certificates are displayed
 * @param object referentiel_instance instance of referentiel
 * @param user_filtee int
 * @param guser Object
 * @param mode string
 * @param appli : calling script
 * @param select_all : int
 * @param select_acc : int
 * @param force_generation: boolean
 * @return objects
 * @todo Finish documenting this function
 **/
function referentiel_get_liste_certificats($referentiel_instance, $course, $context, $list_userids = '', $userid_filtre = 0, $gusers, $select_acc = 0, $select_all = 0, $force_generation = 0)
{
    global $debug_special;
    global $USER;
    static $referentiel_id = NULL;
    $records = array();
    if ($referentiel_instance) {
        $roles = referentiel_roles_in_instance($referentiel_instance->id);
        $iseditor = $roles->is_editor;
        $isadmin = $roles->is_admin;
        $isteacher = $roles->is_teacher;
        $istutor = $roles->is_tutor;
        $isstudent = $roles->is_student;
        // recuperer les certificats
        if (!empty($list_userids)) {
            // liste d'utilisateurs obtenus par les pedagogies
            if (!empty($force_generation)) {
                // echo "<br />DEBUG :: lib_certificat.php :: 226 <br />$list_userids\n";
                referentiel_force_certificats_from_userslist($list_userids, $referentiel_instance->ref_referentiel);
            }
            // resultat triƩ dans l'ordre alphabetique des utilisateurs
            $records = referentiel_get_certificats_from_userslist($list_userids, $referentiel_instance->ref_referentiel);
        } else {
            if ($isadmin && $select_all) {
                //
                //tous les certificats
                // $record_id_users  = referentiel_get_all_users_with_certificate($referentiel_instance->ref_referentiel);
                $records = referentiel_get_certificats_users($referentiel_instance->ref_referentiel);
            } else {
                // recuperer les utilisateurs filtres
                if (!empty($userid_filtre)) {
                    // un seul certificat
                    $record_id_users = referentiel_get_students_course($course->id, $userid_filtre, 0);
                } else {
                    // teachers    :: les certificats du cours seulement
                    if (!empty($select_acc)) {
                        // eleves accompagnes
                        $record_id_users = referentiel_get_accompagnements_teacher($referentiel_instance->id, $course->id, $USER->id);
                    } else {
                        $record_id_users = referentiel_get_students_course($course->id, $userid_filtre, 0);
                    }
                    // groupes ?
                    if ($gusers && $record_id_users) {
                        $record_users = array_intersect($gusers, array_keys($record_id_users));
                        // recopier
                        $record_id_users = array();
                        foreach ($record_users as $record_id) {
                            $a_obj = new stdClass();
                            $a_obj->userid = $record_id;
                            $record_id_users[] = $a_obj;
                        }
                    }
                }
                if ($record_id_users) {
                    foreach ($record_id_users as $record_id) {
                        // afficher la liste d'users
                        $records[] = referentiel_certificat_user($record_id->userid, $referentiel_instance->ref_referentiel);
                    }
                }
            }
        }
    }
    //  if referentiel
    return $records;
}