function referentiel_print_liste_certificats($initiale, $userids, $mode, $referentiel_instance, $userid_filtre = 0, $gusers, $select_acc = 0, $data_f = NULL, $sql_f_where = '', $sql_f_order = '')
{
    global $DB;
    global $CFG;
    global $USER;
    static $istutor = false;
    static $isteacher = false;
    static $isadmin = false;
    static $isstudent = false;
    static $iseditor = false;
    static $isauthor = false;
    $protocole_link = '';
    //MODIF JF 2012/02/18
    // 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_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;
    if (!empty($referentiel_instance->ref_referentiel)) {
        $referentiel_referentiel = referentiel_get_referentiel_referentiel($referentiel_instance->ref_referentiel);
        if (!$referentiel_referentiel) {
            if ($isadmin || $isteacher) {
                print_error(get_string('creer_referentiel', 'referentiel'), "edit.php?d={$referentiel_instance->id}&mode=editreferentiel&sesskey=" . sesskey());
            } else {
                print_error(get_string('creer_referentiel', 'referentiel'), "../../course/view.php?id={$course->id}&sesskey=" . sesskey());
            }
        }
        $isreferentielauteur = referentiel_is_author($USER->id, $referentiel_referentiel, !$isstudent);
        // MODIF JF 2012/02/18
        $seuil_certification = $referentiel_referentiel->seuil_certificat;
        $nb_items = referentiel_get_nb_items($referentiel_referentiel->id);
        // empreintes
        $liste_empreintes = referentiel_purge_dernier_separateur(referentiel_get_liste_empreintes_competence($referentiel_referentiel->id), '/');
        if ($isadmin || $isreferentielauteur) {
            $protocole_link = "{$CFG->wwwroot}/mod/referentiel/edit_protocole.php?d={$referentiel_instance->id}&mode=protocole&sesskey=" . sesskey();
        } else {
            $protocole_link = "{$CFG->wwwroot}/mod/referentiel/protocole.php?d={$referentiel_instance->id}&mode=protocole&sesskey=" . sesskey();
        }
        // REGENERER LES CERTIFICATS
        // MODIF JF 2009/10/23
        // referentiel_regenere_certificats($referentiel_instance); // INUTILE DESORMAIS
        // boite pour selectionner les utilisateurs ?
        if ($iseditor || $isteacher || $isadmin || $istutor) {
            if (!empty($select_acc)) {
                // eleves accompagnes
                $record_id_users = referentiel_get_accompagnements_teacher($referentiel_instance->id, $course->id, $USER->id);
            } else {
                // tous les users possibles (pour la boite de selection)
                // Get your userids the normal way
                $record_id_users = referentiel_get_students_course($course->id, 0, 0);
                //seulement les stagiaires
            }
            if ($gusers && $record_id_users) {
                // liste des utilisateurs du groupe courant
                // echo "<br />DEBUG :: print_lib_certificat.php :: 740 :: GUSERS<br />\n";
                // print_object($gusers);
                // echo "<br />\n";
                $record_users = array_intersect($gusers, array_keys($record_id_users));
                // $record_users  = array_intersect_assoc($record_id_users, array_keys($gusers));
                // echo "<br />DEBUG :: print_lib_certificat.php :: 745 :: RECORD_USERS<br />\n";
                // print_r($record_users  );
                // echo "<br />\n";
                // 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;
                }
            }
            echo referentiel_select_users_accompagnes("certificat.php", $mode, $userid_filtre, $select_acc);
            echo referentiel_select_users_certificat($record_id_users, "certificat.php", $initiale, $mode, $userid_filtre, $select_acc);
        } else {
            $userid_filtre = $USER->id;
            // les étudiants ne peuvent voir que leur fiche
        }
        // recuperer les utilisateurs filtres
        // si $userid_filtre ==0 on retourne tous les utilisateurs du cours et du groupe
        if (!empty($userid_filtre)) {
            $record_id_users = referentiel_get_students_course($course->id, $userid_filtre, 0);
        } else {
            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;
            }
        }
        // ALPHABETIQUE
        if (!empty($userids)) {
            $t_users_select = explode('_', $userids);
            $record_id_users = array();
            foreach ($t_users_select as $userid) {
                $a_obj = new stdClass();
                $a_obj->userid = $userid;
                $record_id_users[] = $a_obj;
            }
            // DEBUG
            /*
            echo "<br />DEBUG :: print_lib_certificat.php :: 2386<br />USERIDS : $userids<br />\n";
            print_r($t_users_select);
            echo "<br />\n";
            print_r($record_id_users);
            exit;
            */
        }
        if ($record_id_users) {
            // Afficher
            // Filtres de selection
            echo referentiel_entete_filtre($CFG->wwwroot . '/mod/referentiel/certificat.php?d=' . $referentiel_referentiel->id . '&amp;mode=' . $mode . '&amp;sesskey=' . sesskey(), $data_f, false);
            if (isset($mode) && $mode == 'listcertifsingle') {
            } else {
                echo referentiel_print_entete_certificat();
            }
            // MODIF JF 2012/09/20
            // ordre d'affichage utilisateurs
            if (isset($data_f) && isset($data_f->f_auteur) && $data_f->f_auteur == '-1') {
                $deb = -count($record_id_users) + 1;
                $fin = 1;
            } else {
                $deb = 0;
                $fin = count($record_id_users);
            }
            // Parcours des utilisateurs
            for ($j = $deb; $j < $fin; $j++) {
                $i = abs($j);
                // recupere les enregistrements
                // recuperation des certificats
                // ATTENTION
                // il faut introduire les filtres SQL
                $records[] = referentiel_certificat_user_select($record_id_users[$i]->userid, $referentiel_instance->ref_referentiel, $sql_f_where, $sql_f_order);
            }
            if ($records) {
                foreach ($records as $record_id) {
                    // afficher la liste d'users
                    // recupere les enregistrements de certificats ou les cree si necessaire
                    $record = referentiel_certificat_user($record_id->userid, $referentiel_instance->ref_referentiel);
                    if ($record) {
                        // MODIF JF 2010/10/07
                        $isauthor = referentiel_certificat_isowner($record->id);
                        if ($isauthor || $iseditor || $istutor || $isteacher || $isadmin) {
                            if (isset($mode) && $mode == 'listcertifsingle') {
                                referentiel_print_certificat_detail($record, $seuil_certification, $protocole_link);
                                referentiel_menu_certificat_detail($context, $record->id, $referentiel_instance->id, $record->verrou && $isstudent, $record_id->userid, $select_acc, $record->valide);
                            } else {
                                referentiel_print_certificat($record, $nb_items, $liste_empreintes, $seuil_certification, $protocole_link);
                                echo referentiel_menu_certificat($context, $record->id, $referentiel_instance->id, $record->verrou && $isstudent, $record_id->userid, $select_acc, 0, $record->valide);
                            }
                        }
                    }
                }
            }
        }
        // Afficher
        if (isset($mode) && $mode == 'listcertifsingle') {
            // prints ratings options
            // referentiel_print_ratings($referentiel, $record);
            // prints ratings options
            // referentiel_print_comments($referentiel, $record);
        } else {
            echo referentiel_print_enqueue_certificat();
        }
        echo '<br /><br />' . "\n";
    }
}
/**
 * This function select users
 *
 * If select_all == 1 all pedagogies certificates are displayed
 * Else only course's user certificates are displayed
 * @param object referentiel_instance instance of referentiel
 * @param list_userids ;: a list of user from pedagogie
 * @param userid_filtre int
 * @param guser Object
 * @param mode string
 * @param appli : calling script
 * @param select_all : int
 * @param select_acc : int
 * @param affiche : boolean
 * @return objects
 * @todo Finish documenting this function
 **/
function referentiel_select_liste_certificats($referentiel_instance, $list_pedagoids = '', $userid_filtre = 0, $gusers, $select_acc = 0, $mode = 'listcertif', $appli = 'certificat.php', $select_all = 0, $sql_filtre_where = '', $data_param = NULL)
{
    global $USER;
    global $existe_pedagos;
    /// renseigne au niveau de export_certificat
    static $referentiel_id = NULL;
    global $DB;
    // DEBUG
    // echo "<br />DEBUG :: lib_certificat.php :: 502 :: APPLI : $appli :: MODE : $mode :: LISTE_PEDAGO : $list_pedagoids :: SELECT_ACC : $select_acc :: SELECT_ALL : $select_all\n";
    $records = array();
    // 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 :: lib_certificat.php :: 438 :: You cannot call this script in that way');
    }
    // Valable pour Moodle 2.1 et Moodle 2.2
    //if ($CFG->version < 2011120100) {
    $context = context_module::instance($cm->id);
    //} else {
    // $context = context_module::instance($cm);
    //}
    $referentiel_id = $referentiel_instance->ref_referentiel;
    $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;
    if (isset($referentiel_id) && $referentiel_id > 0) {
        $referentiel_referentiel = referentiel_get_referentiel_referentiel($referentiel_id);
        if (!$referentiel_referentiel) {
            if ($iseditor) {
                print_error(get_string('creer_referentiel', 'referentiel'), "edit.php?d={$referentiel_instance->id}&amp;mode=editreferentiel&amp;sesskey=" . sesskey());
            } else {
                print_error(get_string('creer_referentiel', 'referentiel'), "../../course/view.php?id={$course->id}&amp;sesskey=" . sesskey());
            }
        }
        // Selectionner les utilisateurs pour les boîtes de selection
        if ($isadmin || $isteacher || $iseditor || $istutor) {
            if (!empty($select_acc)) {
                // eleves accompagnes
                $record_id_users = referentiel_get_accompagnements_teacher($referentiel_instance->id, $course->id, $USER->id);
            } else {
                // tous les users possibles (pour la boite de selection)
                // Get your userids the normal way
                $record_id_users = referentiel_get_students_course($course->id, 0, 0);
                //seulement les stagiaires
            }
            // tenir compte des groupes pour les boites de selection
            if ($isadmin && !$select_all || $isteacher || $iseditor || $istutor) {
                // groupe ?
                if ($gusers && $record_id_users) {
                    // liste des utilisateurs du groupe courant
                    $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 ($isadmin) {
                // admin peut tout voir
                // PEDAGOGIES
                // DEBUG
                // variable globale
                // $existe_pedagos=referentiel_pedagogies_exists($referentiel_instance->ref_referentiel);
                // DEBUG
                //if ($existe_pedagos) echo "<br />DEBUG :: lib_certificat.php :: 493 :: EXISTE PEDAGOS :: LISTE_PEDAGO : $list_pedagoids :: SELECT_ACC : $select_acc :: SELECT_ALL : $select_all\n";
                //else  echo "<br />DEBUG :: lib_certificat.php :: 493 :: EXISTE PAS PEDAGOS :: LISTE_PEDAGO : $list_pedagoids :: SELECT_ACC : $select_acc :: SELECT_ALL : $select_all\n";
                echo referentiel_select_all_certificates($referentiel_instance, $appli, $mode, $userid_filtre, $select_acc, $select_all, $existe_pedagos);
                if ($select_all != 2 || !$existe_pedagos) {
                    echo referentiel_select_users_accompagnes($appli, $mode, $userid_filtre, $select_acc, $select_all);
                    echo referentiel_select_users_certificat($record_id_users, $appli, $mode, $userid_filtre, $select_acc, $select_all);
                } else {
                    if ($select_all == 2) {
                        echo referentiel_select_pedagogies($referentiel_instance, $appli, $mode, $list_pedagoids, $select_acc, $select_all, $sql_filtre_where, $data_param);
                    }
                }
            } else {
                echo referentiel_select_users_accompagnes($appli, $mode, $userid_filtre, $select_acc, $select_all);
                echo referentiel_select_users_certificat($record_id_users, $appli, $mode, $userid_filtre, $select_acc, $select_all);
            }
        } else {
            $userid_filtre = $USER->id;
            // les étudiants ne peuvent voir que leur fiche
        }
        // affiche
    }
    //  if referentiel
}