function referentiel_traitement_notations()
{
    // genere des declarations d'activites "fictives" a partir des notation par objectif
    // sur les activites du cours
    global $CFG;
    global $DB;
    global $scales;
    // all users that are subscribed to any post that needs sending
    $notations = array();
    $scales = array();
    $n_activites = 0;
    // Enregistrements anterieurs � 2 jours non traites.  This is to avoid the problem where
    // cron has not been running for a long time
    $timenow = time();
    if (NOTIFICATION_DELAI) {
        $endtime = $timenow - $CFG->maxeditingtime;
    } else {
        $endtime = $timenow;
    }
    // Enregistrements anterieurs a NOTIFICATION_INTERVALLE_JOUR jours non traites.
    // This is to avoid the problem where cron has not been running for a long time
    if (REFERENTIEL_DEBUG) {
        $starttime = $endtime - NOTIFICATION_INTERVALLE_JOUR * 7 * 24 * 3600;
        // Two weeks earlier
    } else {
        $starttime = $endtime - NOTIFICATION_INTERVALLE_JOUR * 24 * 3600;
        // n days earlier
    }
    $cron_timestamp = referentiel_get_cron_timestamp();
    if (!empty($cron_timestamp)) {
        if (REFERENTIEL_DEBUG) {
            $starttime = min($starttime, $cron_timestamp - 60);
        } else {
            $starttime = max($starttime, $cron_timestamp - 60);
        }
    }
    $scales_list = '';
    // for items with a scaleid
    // users
    $users = array();
    $users_list = '';
    // JF
    // DEBUG
    mtrace("\nDEBUT CRON OBJECTIFS.");
    mtrace("\nSTART TIME : " . date("Y/m/d H:i:s", $starttime) . " END TIME :  " . date("Y/m/d H:i:s", $endtime));
    $notations = referentiel_get_outcomes($starttime, $endtime);
    //$notations=referentiel_get_outcomes_old($endtime);
    if ($notations) {
        foreach ($notations as $notation) {
            if ($notation) {
                if (OUTCOMES_SUPER_DEBUG) {
                    mtrace("\nDEBUG :: grade/cron_outcomes.php Line 102 :: USERID " . $notation->userid . " ; COURSEID " . $notation->courseid . "\nNOTATION :\n");
                    print_r($notation);
                }
                if (!empty($notation->scaleid) && !preg_match("/ " . $notation->scaleid . "\\,/", $scales_list)) {
                    $scales_list .= " {$notation->scaleid},";
                }
                if (!empty($notation->userid) && !empty($notation->courseid)) {
                    if (!preg_match("/ " . $notation->userid . "\\,/", $users_list)) {
                        $users_list .= " {$notation->userid},";
                        $user = new Object();
                        $user->userid = $notation->userid;
                        $user->courses = array();
                        $user->course_list = '';
                        $users[$notation->userid] = $user;
                    }
                    if (!preg_match("/ " . $notation->courseid . "\\,/", $users[$notation->userid]->course_list)) {
                        $users[$notation->userid]->course_list .= " {$notation->courseid},";
                        $course = new Object();
                        $course->courseid = $notation->courseid;
                        $course->referentiel_list = '';
                        $course->referentiels = array();
                        $users[$notation->userid]->courses[$notation->courseid] = $course;
                    }
                    if (!preg_match("/ " . $notation->referentiel_instanceid . "\\,/", $users[$notation->userid]->courses[$notation->courseid]->referentiel_list)) {
                        $users[$notation->userid]->courses[$notation->courseid]->referentiel_list = " {$notation->referentiel_instanceid},";
                        $referentiel = new object();
                        $referentiel->referentiel_instanceid = $notation->referentiel_instanceid;
                        $referentiel->ref_referentiel = $notation->ref_referentiel;
                        $referentiel->module_list = '';
                        $referentiel->modules = array();
                        // $referentiel->referentiels[$notation->referentiel_instanceid]->outcome_list = '';
                        $users[$notation->userid]->courses[$notation->courseid]->referentiels[$notation->referentiel_instanceid] = $referentiel;
                    }
                    if (empty($users[$notation->userid]->courses[$notation->courseid]->referentiels[$notation->referentiel_instanceid]->module_list) || !preg_match("/ " . $notation->module . ":" . $notation->moduleinstance . "\\,/", $users[$notation->userid]->courses[$notation->courseid]->referentiels[$notation->referentiel_instanceid]->module_list)) {
                        $users[$notation->userid]->courses[$notation->courseid]->referentiels[$notation->referentiel_instanceid]->module_list .= " {$notation->module}:{$notation->moduleinstance},";
                        $module = new object();
                        $module->modulename = $notation->module;
                        $module->moduleinstance = $notation->moduleinstance;
                        $module->teacherid = $notation->teacherid;
                        // MODIF JF 2012/01/31
                        $module->outcome_list = '';
                        $module->scaleid_list = '';
                        $module->timemodified_list = '';
                        $users[$notation->userid]->courses[$notation->courseid]->referentiels[$notation->referentiel_instanceid]->modules[$notation->moduleinstance] = $module;
                    }
                    if (!empty($users[$notation->userid]->courses[$notation->courseid]->referentiels[$notation->referentiel_instanceid]->modules[$notation->moduleinstance])) {
                        // les notes
                        if ($notation->outcomeshortname != '') {
                            $users[$notation->userid]->courses[$notation->courseid]->referentiels[$notation->referentiel_instanceid]->modules[$notation->moduleinstance]->outcome_list .= " {$notation->outcomeshortname}:{$notation->finalgrade},";
                            $users[$notation->userid]->courses[$notation->courseid]->referentiels[$notation->referentiel_instanceid]->modules[$notation->moduleinstance]->scaleid_list .= " {$notation->scaleid},";
                            $users[$notation->userid]->courses[$notation->courseid]->referentiels[$notation->referentiel_instanceid]->modules[$notation->moduleinstance]->timemodified_list .= " {$notation->timemodified},";
                        }
                    }
                }
            }
        }
    }
    if (!empty($users)) {
        // DEBUG
        if (OUTCOMES_SUPER_DEBUG) {
            mtrace("\nDEBUG :: grade/cron_outcomes.php Line 171 :: USERS \n");
            print_r($users);
        }
        foreach ($users as $user) {
            if (OUTCOMES_SUPER_DEBUG) {
                mtrace("\nDEBUG :: grade/cron_outcomes.php Line 178 :: USER \n");
                print_r($user);
            }
            foreach ($user->courses as $course) {
                // echo "<br />COURSE_ID $course->courseid; \n";
                foreach ($course->referentiels as $referentiel) {
                    // echo "<br />REFERENTIEL_INSTANCE $referentiel->referentiel_instanceid; REFERENTIEL_ID $referentiel->ref_referentiel\n";
                    // MODIF JF 2013/08/05
                    // bareme
                    $threshold = -1;
                    if ($CFG->referentiel_use_scale) {
                        if ($bareme = referentiel_get_bareme_occurrence($referentiel->ref_referentiel)) {
                            $threshold = $bareme->threshold;
                        }
                    }
                    foreach ($referentiel->modules as $module) {
                        // echo "<br />MODULE $module->modulename ; Instance $module->moduleinstance ; \n";
                        // preparer l'enregistrement
                        // DEBUG
                        // echo "<br />DEBUG :: 180 ; MODULE : $module->modulename, INSTANCE : $module->moduleinstance, COURS : $course->courseid\n";
                        if ($module && !empty($module->modulename) && !empty($module->moduleinstance) && !empty($course->courseid)) {
                            $m = referentiel_get_module_info($module->modulename, $module->moduleinstance, $course->courseid);
                            /*
                                          // module
                              $m->id;
                              $m->type=$modulename;
                              $m->instance=$moduleinstance;
                              $m->course=$courseid;
                              $m->date=$cm->added;
                              $m->userdate=userdate($cm->added);
                              $m->ref_activite=$mid;
                              $m->name=$mname;
                              $m->description=$mdescription;
                              $m->link=$mlink;
                            */
                            // DEBUG
                            if (OUTCOMES_SUPER_DEBUG) {
                                mtrace("\nDEBUG :: grade/cron_outcomes.php Line 184 :: MODULE \n");
                                print_r($m);
                            }
                            $activite = new Object();
                            $activite->type_activite = '[' . get_string('outcome_type', 'referentiel') . ' ' . get_string('modulename', $m->type) . ' ' . $m->ref_activite . '] ' . get_string('outcome_date', 'referentiel') . ' ' . $m->userdate;
                            $activite->description_activite = get_string('outcome_description', 'referentiel', $m);
                            $activite->competences_activite = '';
                            $activite->commentaire_activite = '';
                            $activite->bareme_activite = '';
                            $activite->ref_instance = $referentiel->referentiel_instanceid;
                            $activite->ref_referentiel = $referentiel->ref_referentiel;
                            $activite->ref_course = $course->courseid;
                            $activite->userid = $user->userid;
                            $activite->teacherid = $module->teacherid;
                            // MODIF JF 2013/02/04
                            $activite->date_creation = $m->date;
                            $activite->date_modif_student = 0;
                            $activite->date_modif = $m->date;
                            $activite->approved = 1;
                            // approuve par defaut
                            $activite->ref_task = 0;
                            // DEBUG
                            /*
                            if (OUTCOMES_SUPER_DEBUG){
                                                    		mtrace("DEBUG :: grade/cron_outcomes.php Line 181 :: TIMEMODIFIED_LIST $module->timemodified_list\n");
                            }
                            */
                            $t_datemodif = explode(',', $module->timemodified_list);
                            sort($t_datemodif);
                            $imax = count($t_datemodif) - 1;
                            $timemodified = $t_datemodif[$imax];
                            if ($timemodified > $activite->date_creation) {
                                //$activite->date_modif_student=$timemodified;
                                $activite->date_modif = $timemodified;
                            }
                            // echo "<br />SCALE_LIST $module->scaleid_list\n";
                            $t_scales = explode(',', $module->scaleid_list);
                            // echo "<br />OUTCOME_LIST $module->outcome_list\n";
                            $t_outcomes = explode(',', $module->outcome_list);
                            $n = count($t_outcomes);
                            if ($n > 0) {
                                $i = 0;
                                if (OUTCOMES_SUPER_DEBUG) {
                                    mtrace("\nDEBUG :: grade/cron_outcomes.php Line 264");
                                }
                                $liste_bareme_activite = '';
                                while ($i < $n) {
                                    if ($t_outcomes[$i] != '') {
                                        list($cle, $val) = explode(':', $t_outcomes[$i]);
                                        $cle = trim($cle);
                                        $val = trim($val);
                                        $scaleid = $t_scales[$i];
                                        if (OUTCOMES_SUPER_DEBUG) {
                                            mtrace("\nCODE : {$cle} ; VALEUR : {$val} ;");
                                        }
                                        if ($threshold == -1) {
                                            $scale = referentiel_get_scale($scaleid);
                                            if ($val >= $scale->grademax) {
                                                // pas de bareme
                                                $activite->competences_activite .= $cle . '/';
                                                if (OUTCOMES_SUPER_DEBUG) {
                                                    mtrace(" ---> VALIDE \n");
                                                }
                                            }
                                        } else {
                                            if ($val > $threshold) {
                                                // baremes
                                                $activite->competences_activite .= $cle . '/';
                                                if (OUTCOMES_SUPER_DEBUG) {
                                                    mtrace(" ---> VALIDE \n");
                                                }
                                            }
                                        }
                                        $liste_bareme_activite .= $cle . ':' . (int) $val . '/';
                                    }
                                    $i++;
                                }
                            }
                        }
                        // MODIF JF 2014/02/05
                        // completer avec des informations obtenues dans l'activite
                        $mdata = NULL;
                        if ($m && $m->type == 'assign') {
                            $mdata = referentiel_get_assign($m, $user->userid);
                            if (!empty($mdata)) {
                                // DEBUG
                                if (OUTCOMES_SUPER_DEBUG) {
                                    mtrace("\nDEBUG :: grade/cron_outcomes.php Line 226 :: MODULE \n");
                                    print_r($mdata);
                                }
                            }
                        }
                        // enregistrer l'activite
                        // DEBUG
                        if (OUTCOMES_SUPER_DEBUG) {
                            mtrace("\nDEBUG :: grade/cron_outcomes.php Line 313 ; ACTIVITE\n");
                            print_r($activite);
                        }
                        if (referentiel_activite_outcomes($activite, $m, $liste_bareme_activite, $mdata)) {
                            if (OUTCOMES_SUPER_DEBUG) {
                                mtrace("\nDEBUG :: grade/cron_outcomes.php Line 265\n-----------------\nACTIVITE ENREGISTREE\n");
                            }
                            $n_activites++;
                        }
                    }
                }
            }
        }
    }
    // echo "<br />\n";
    mtrace($n_activites . ' ACTIVITES CREES OU MODIFIEES.');
    mtrace('FIN CRON REFERENTIEL OBJECTIFS.');
}
/**
 * Given an object containing all the necessary data,
 * this function will display these data
 *
 * @param object $notation
 * @return null
 **/
function referentiel_affiche_module_activite($notation)
{
    global $DB;
    global $CFG;
    //print_r($notation);
    //echo "<br />\n";
    if (!empty($notation) && !empty($notation->module) && !empty($notation->moduleinstance) && !empty($notation->courseid)) {
        $course_instance = $DB->get_record('course', array('id' => $notation->courseid));
        if ($course_instance) {
            if (!$course_instance->visible) {
                $link_course = "<a class=\"dimmed\" href=\"{$CFG->wwwroot}/course/view.php?id={$course_instance->id}\">{$course_instance->shortname}</a>";
            } else {
                $link_course = "<a href=\"{$CFG->wwwroot}/course/view.php?id={$course_instance->id}\">{$course_instance->shortname}</a>";
            }
        } else {
            $link_course = get_string('nondefini', 'referentiel');
        }
        $module = referentiel_get_module_info($notation->module, $notation->moduleinstance, $notation->courseid);
        echo '<li><b>' . get_string('occurrence', 'referentiel') . '</b> : #' . $notation->ref_referentiel . ' ' . $notation->code_referentiel . ' <b>' . get_string('course') . '</b> : ' . $link_course . ' <b>' . get_string('module', 'referentiel') . ' ' . get_string('modulename', $notation->module);
        echo '  #' . $notation->moduleinstance;
        echo '</b> <b>' . get_string('date_creation', 'referentiel') . '</b> ' . $module->userdate;
        echo ' <br /> <b>' . get_string('titre', 'referentiel') . '</b> : <a href="' . $module->link . '">' . $module->name . '</a>' . ' <b>' . get_string('description', 'referentiel') . '</b> :<i>' . $module->description . '</i></li> ' . "\n";
    }
}