function write_role_assignments_xml($bf, $preferences, $context, $startlevel)
{
    /// write role_assign code here
    fwrite($bf, start_tag("ROLES_ASSIGNMENTS", $startlevel, true));
    if ($roles = get_roles_with_assignment_on_context($context)) {
        foreach ($roles as $role) {
            /// Skip non-selected roles
            if (!isset($preferences->backuproleassignments[$role->id])) {
                continue;
            }
            fwrite($bf, start_tag("ROLE", $startlevel + 1, true));
            fwrite($bf, full_tag("ID", $startlevel + 2, false, $role->id));
            fwrite($bf, full_tag("NAME", $startlevel + 2, false, $role->name));
            fwrite($bf, full_tag("SHORTNAME", $startlevel + 2, false, $role->shortname));
            fwrite($bf, start_tag("ASSIGNMENTS", $startlevel + 2, true));
            if ($assignments = get_users_from_role_on_context($role, $context)) {
                foreach ($assignments as $assignment) {
                    /// Role assignments are only sent to backup if the user is one target user
                    if (backup_getid($preferences->backup_unique_code, 'user', $assignment->userid)) {
                        fwrite($bf, start_tag("ASSIGNMENT", $startlevel + 3, true));
                        fwrite($bf, full_tag("USERID", $startlevel + 4, false, $assignment->userid));
                        fwrite($bf, full_tag("HIDDEN", $startlevel + 4, false, $assignment->hidden));
                        fwrite($bf, full_tag("TIMESTART", $startlevel + 4, false, $assignment->timestart));
                        fwrite($bf, full_tag("TIMEEND", $startlevel + 4, false, $assignment->timeend));
                        fwrite($bf, full_tag("TIMEMODIFIED", $startlevel + 4, false, $assignment->timemodified));
                        if (!isset($assignment->modifierid)) {
                            $assignment->modifierid = 0;
                        }
                        fwrite($bf, full_tag("MODIFIERID", $startlevel + 4, false, $assignment->modifierid));
                        fwrite($bf, full_tag("ENROL", $startlevel + 4, false, $assignment->enrol));
                        fwrite($bf, full_tag("SORTORDER", $startlevel + 4, false, $assignment->sortorder));
                        fwrite($bf, end_tag("ASSIGNMENT", $startlevel + 3, true));
                    }
                }
            }
            fwrite($bf, end_tag("ASSIGNMENTS", $startlevel + 2, true));
            fwrite($bf, end_tag("ROLE", $startlevel + 1, true));
        }
    }
    fwrite($bf, end_tag("ROLES_ASSIGNMENTS", $startlevel, true));
}
Esempio n. 2
0
 public static function get_final_grade_by_course_id($courseId, $roleId)
 {
     // no MOODLE não temos factories
     // obtemos os acessores diretamente via variaveis globais
     global $CFG;
     require_once $CFG->dirroot . '/grade/lib.php';
     require_once $CFG->dirroot . '/grade/querylib.php';
     require_once $CFG->dirroot . '/user/lib.php';
     // para trabalhar com as grades de notas precisa-se ter
     // as seguintes habilidades:
     // * moodle/grade:export
     // * gradeexprt/txt:view
     // primeiro pego o contexto do sistema com base no usuário corrente
     $context = get_context_instance(CONTEXT_SYSTEM);
     // então verifico as abilidades uma a uma
     require_capability('moodle/grade:export', $context);
     require_capability('gradeexport/txt:view', $context);
     // neste ponto se verifica os parametros informados estão corretos
     // e dentro do exigido pela função
     // observe que solicitei os parametros como sendo do tipo inteiro
     // diretamente sem que sejam algum tipo de estrutura. Isto facilita
     // o acesso aos parametros,
     $funcParams = self::validate_parameters(self::get_final_grade_by_course_id_parameters(), array('courseId' => $courseId, 'roleId' => $roleId));
     if (MDEBUG) {
         mDebug_log($funcParams, 'Parametros da Função');
     }
     $usersIds = array();
     $context = get_context_instance(CONTEXT_COURSE, $funcParams['courseId']);
     $role = new stdClass();
     $role->id = $roleId;
     $users = get_users_from_role_on_context($role, $context);
     if (MDEBUG) {
         mDebug_log($users);
     }
     $usersIds = array();
     foreach ($users as $user) {
         $usersIds[] = $user->userid;
     }
     if (MDEBUG) {
         mDebug_log($usersIds, 'Ids dos Usuários');
     }
     // OK, agora que está tudo ok, consulto no banco de dados a nota
     // do usuário conforme o curso
     $grades = grade_get_course_grades($funcParams['courseId'], $usersIds);
     if (MDEBUG) {
         mDebug_log($grades, 'Grades');
     }
     // TODO, estudar melhorias neste retorno.
     foreach ($grades->grades as $userId => $grade) {
         $result = array();
         if ($grade === false) {
             $result['grade'] = grade_floatval(-9999);
         } else {
             if ($grade === null) {
                 $result['grade'] = grade_floatval(-8888);
             } else {
                 $result['grade'] = grade_floatval($grade->grade);
             }
         }
         $result['userId'] = $userId;
         $results[] = $result;
     }
     if (MDEBUG) {
         mDebug_log($results, 'Grades finais a serem enviadas');
     }
     return $results;
 }