Pela minha surpresa, a versão 3.4 dá erro Usuário inválido ao tentar cadastrar um novo usuário. Esse erro ocorre quando algum campo de perfil for criado.
Ao habilitar o debug, aparece o seguinte detalhe do erro:
Debug info: SELECT id FROM {user} WHERE id = ? AND deleted = ?
[array (
0 => -1,
1 => 0,
)]
Error code: invaliduser
×Stack trace:
line 1546 of /lib/dml/moodle_database.php: dml_missing_record_exception thrown
line 1522 of /lib/dml/moodle_database.php: call to moodle_database->get_record_select()
line 6015 of /lib/accesslib.php: call to moodle_database->get_record()
line 416 of /user/profile/lib.php: call to context_user::instance()
line 578 of /user/profile/lib.php: call to profile_field_base->is_visible()
line 149 of /user/editadvanced_form.php: call to profile_definition()
line 204 of /lib/formslib.php: call to user_editadvanced_form->definition()
line 155 of /user/editadvanced.php: call to moodleform->__construct()
Output buffer:
Trata-se de um erro do core do Moodle que veio na distribuição 3.4
Para resolver esse problema, adotei uma medita paliativa, uma gambiara na verdade. Simplesmente adicionei return true; na linha 415 da função is_visible() do arquivo MOODLE_DIR_INSTALL/user/profile/lib.php
No seu Moodle a linha pode não ser exatamente 415, mas basta colocar o código return true; logo inicio da função. Assim a função não executa a parte que dá erro e retorna sempre true. Isso torna o campo visível mesmo que não seja. Nessa altura do campeonato, isso é o menor dos problemas quando a equipe pedagógica está no seu cangote.
Vaja o código completo da função alterada. O trecho do código na cor azul é o que adicionei para evitar erros.
public function is_visible() {
global $USER;
return true;
$context = $this->userid ? context_user::instance($this->userid) : context_system::instance(); switch ($this->field->visible) {
case PROFILE_VISIBLE_ALL:
return true;
case PROFILE_VISIBLE_PRIVATE:
if ($this->userid == $USER->id) {
return true;
} else {
return has_capability('moodle/user:viewalldetails', $context);
}
default:
return has_capability('moodle/user:viewalldetails', $context);
}
}
Isso é um hacker no código enquanto. Uma gambiara enquanto o Moodle não corrigir esse problema.