Skip to content

Commit

Permalink
Implementado a remoção do moodle caso não estja no mentor
Browse files Browse the repository at this point in the history
  • Loading branch information
André Rocha committed Feb 4, 2016
1 parent 346d55a commit 6067506
Show file tree
Hide file tree
Showing 3 changed files with 149 additions and 87 deletions.
Binary file modified .ntvs_analysis.dat
Binary file not shown.
221 changes: 136 additions & 85 deletions js/main-node.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,84 +45,10 @@ var Moodle = require("./moodle.js").Moodle;
var sequencial = require('sync');

require('events').EventEmitter.prototype._maxListeners = 500;

var connectionPostfix = mysql.createPool(configPostfix);


var query = "SELECT DISTINCT \
DI_DESDIS, DI_DISTEL, MD_CODTUR, PF_CODPRO, CR_NOMCUR \
FROM \
TB_CURSO, \
TB_GRADE, \
TB_MESTRE_DISCIPLINA, \
TB_DISCIPLINA \
left outer join TB_GRADE_HORARIO_PROF on(DI_CODDIS = GP_CODDIS and GP_ANOMAT="+ANO+" AND GP_SEQMAT = "+SEMESTRE+" ) \
left outer JOIN TB_PROFESSOR on(GP_CODPRO = PF_CODPRO), \
TB_ALUNO \
WHERE \
MD_ANOMAT = " + ANO + " \
AND MD_SEQMAT = " + SEMESTRE + " \
AND MD_CODSIT = 1 \
AND CR_CODCUR = GD_CODCUR \
AND GD_CODGRA = MD_CODGRA \
AND MD_CODDIS = DI_CODDIS \
AND MD_CODALU = AL_CODALU \
AND MD_CODRES <> 16 \
ORDER BY \
DI_DESDIS";

var arrayCursos = [];
var cacheCursosUsuario = new Object(); // Map com id curso => arrayUsers.
var moodle = Moodle(configMoodle);
moodle.conectar(function () {
var connection = new tedious.Connection(configMentor);
connection.on('connect', function(err) {
if (err)
console.error(err);
else{
var request = new tedious.Request(query, function(err, rowCount) {
connection.close();

sequencial(function () {
for (var i in arrayCursos) {
var curso = arrayCursos[i];
try {
var curso = sync.addCurso.sync(null, moodle, curso);//, function(curso){
processaCurso(curso);
//});
}
catch (e) {
console.error("Erro: " + e);
}
//if(i>1) break; // apenas para DEBUG
}
console.log('processados: ' + rowCount + ' cursos');

setTimeout(function () { // aguarda a finalização das thread e exit.
var array = process._getActiveHandles();
var array2 = process._getActiveRequests();
connectionPostfix.end(function (err) {
// all connections in the pool have ended
});
process.exit(0);
}, 50000);
});
});
request.on('doneInProc', function (rowCount, more, rows) {
for (var i in rows) {
var columns = rows[i];
arrayCursos[i] = {
nome: columns[0].value,
codigoDisciplina: columns[1].value,
codigoTurma: columns[2].value,
prof: columns[3].value,
categoria: columns[4].value,
};
}
});
connection.execSql(request);
}
});
});


function processaCurso(curso)
Expand All @@ -131,6 +57,7 @@ function processaCurso(curso)
console.log(curso.nome + " - " + curso.codigoDisciplina + '-' + curso.codigoTurma);
execultaProfessor(moodle, curso);
execultaAlunos(moodle, curso);
removeUsuariosAusentes(moodle, curso);
}
}

Expand All @@ -143,19 +70,23 @@ function execultaProfessor(moodle, curso) {
professor.sobrenome = professor.nome.substr(pos + 1);
professor.nome = professor.nome.substr(0, pos);

console.log("professor;" + professor.nome + ';' + professor.sobrenome + ';' + professor.email + ";" + curso.prof);
//console.log("professor;" + professor.nome + ';' + professor.sobrenome + ';' + professor.email + ";" + curso.prof);

sync.addUsuario(moodle, ['professor', professor.nome, professor.sobrenome, professor.email, '123456'], function (erro, usr) {
if (usr)
moodle.inscreverUsuarioCurso(usr.id, curso.id, PERFIL_PROFESSOR, function (err, result) { });
moodle.inscreverUsuarioCurso(usr.id, curso.id, PERFIL_PROFESSOR, function (err, result) {});
});
if (!cacheCursosUsuario[curso.id]) {
cacheCursosUsuario[curso.id] = new Object();
}
cacheCursosUsuario[curso.id][curso.prof] = true;

} catch (erro) {
console.error("execultaProfessor Error: " + erro + ", id_mentor: " + curso.prof);
}
}
function execultaAlunos(moodle, curso){

function execultaAlunos(moodle, curso) {
var query = "SELECT DISTINCT AL_NOMALU, AL_ALUTEL \
FROM \
TB_MESTRE_DISCIPLINA, \
Expand All @@ -173,8 +104,8 @@ function execultaAlunos(moodle, curso){
var columns = rowsA[i];
var idMentorAluno = columns[1].value.replace(/ /g, ''); // com trim
var nomeAluno = columns[0].value;


try {
var email = getEmail.sync(null, idMentorAluno);
if (email.email && email.email.indexOf('@') < 0) {
Expand All @@ -184,17 +115,46 @@ function execultaAlunos(moodle, curso){
//console.log("aluno;" + email.nome + ';' + email.email + ";" + idMentorAluno);
var pos = email.nome.indexOf(' ');
var primeironome = email.nome.substr(0, pos);
var sobrenome = email.nome.substr(pos + 1);
var sobrenome = email.nome.substr(pos + 1);

if ( ! cacheCursosUsuario[curso.id]) {
cacheCursosUsuario[curso.id] = new Object();
}
cacheCursosUsuario[curso.id][idMentorAluno] = true;

addAluno(moodle, curso, ['aluno', primeironome, sobrenome, email.email, '123456'], (i%100==0) ); // para melhor performance são ciradas 100 requisição não sincronizada, esse numero pode ser maior, mas um numero alto pode derrubar o servidor.
addAluno(moodle, curso, ['aluno', primeironome, sobrenome, email.email, '123456'], (i % 50 == 0)); // para melhor performance são ciradas 100 requisição não sincronizada, esse numero pode ser maior, mas um numero alto pode derrubar o servidor.

}
catch (e) {
console.error("Erro precessando aluno: "+nomeAluno+" idMentor:" + idMentorAluno + ', situação: ' + e);
console.error("Erro precessando aluno: " + nomeAluno + " idMentor:" + idMentorAluno + ', situação: ' + e);
}
}
}

function addAluno(moodle, curso, arrayCampos, sincronizado) // se sync===true então ele espera a inserção no moodle para continuar se não ele não espera
function removeUsuariosAusentes(moodle, curso)
{
moodle.getUsuariosPorCurso(curso.id, function (erro, listUsuarios) {
if (erro) {
console.error("Erro removeUsuariosAusentes: " + erro + "\n Não foi possivel listar os usarios do curso: " + curso.nome + '-' + curso.codigoTurma);
return;
}
for (var i in listUsuarios) {
var user = listUsuarios[i];
var email = user.email;
getIdMentor(email, function (erro, result) {
if (!erro) {
var estaNoMentor = cacheCursosUsuario[curso.id][result.id_mentor];
if (cacheCursosUsuario[curso.id] && !estaNoMentor) {
moodle.removeUsuarioCurso(user.id, curso.id, function (erro, result) { });
console.log("Usuario: " + email + " removido do curso: " + curso.codigoDisciplina + "-" + curso.codigoTurma);
}
}
});
}
});
}

function addAluno(moodle, curso, arrayCampos, sincronizado) // se sincronizado===true então ele espera a inserção no moodle para continuar se não ele não espera
{
if (sincronizado) {
var usr = sync.addUsuario.sync(null, moodle, arrayCampos);
Expand Down Expand Up @@ -245,3 +205,94 @@ function getEmail(idMentor, callback) {
//connection.destroy();
});
}

function getIdMentor(email, callback) {
var query = "SELECT id_mentor, name FROM mailbox WHERE username='"+email+"'";
connectionPostfix.query(query, function (err, rows, fields) {
if (err)
callback(err);

if (rows && rows.length > 0) {
callback(null, { email: rows[0].username, id_mentor: rows[0].id_mentor });
}
else {
callback("email not found");
}
});
}




var arrayCursos = [];
moodle.conectar(function () {
var connection = new tedious.Connection(configMentor);
connection.on('connect', function (err) {
if (err)
console.error(err);
else {
var query = "SELECT DISTINCT \
DI_DESDIS, DI_DISTEL, MD_CODTUR, PF_CODPRO, CR_NOMCUR \
FROM \
TB_CURSO, \
TB_GRADE, \
TB_MESTRE_DISCIPLINA, \
TB_DISCIPLINA \
left outer join TB_GRADE_HORARIO_PROF on(DI_CODDIS = GP_CODDIS and GP_ANOMAT=" + ANO + " AND GP_SEQMAT = " + SEMESTRE + " ) \
left outer JOIN TB_PROFESSOR on(GP_CODPRO = PF_CODPRO), \
TB_ALUNO \
WHERE \
MD_ANOMAT = " + ANO + " \
AND MD_SEQMAT = " + SEMESTRE + " \
AND MD_CODSIT = 1 \
AND CR_CODCUR = GD_CODCUR \
AND GD_CODGRA = MD_CODGRA \
AND MD_CODDIS = DI_CODDIS \
AND MD_CODALU = AL_CODALU \
AND MD_CODRES <> 16 \
ORDER BY \
DI_DESDIS";
var request = new tedious.Request(query, function (err, rowCount) {
connection.close();

sequencial(function () {
for (var i in arrayCursos) {
var curso = arrayCursos[i];
try {
var curso = sync.addCurso.sync(null, moodle, curso);//, function(curso){
processaCurso(curso);
//});
}
catch (e) {
console.error("Erro: " + e);
}
//if(i>1) break; // apenas para DEBUG
}
console.log('processados: ' + rowCount + ' cursos');

setTimeout(function () { // aguarda a finalização das thread e exit.
var array = process._getActiveHandles();
var array2 = process._getActiveRequests();
connectionPostfix.end(function (err) {
// all connections in the pool have ended
});
process.exit(0);
}, 50000);
});
});
request.on('doneInProc', function (rowCount, more, rows) {
for (var i in rows) {
var columns = rows[i];
arrayCursos[i] = {
nome: columns[0].value,
codigoDisciplina: columns[1].value,
codigoTurma: columns[2].value,
prof: columns[3].value,
categoria: columns[4].value,
};
}
});
connection.execSql(request);
}
});
});
15 changes: 13 additions & 2 deletions js/moodle.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,20 @@ var Moodle = function(connection) {
this.callRequestFunc("core_user_get_users", param, callback);
}

this.getUsuariosPorCurso = function (id_curso, callback){
var param = "courseid=" + id_curso;
this.callRequestFunc("core_enrol_get_enrolled_users", param, callback);
}

this.inscreverUsuarioCurso = function(idUsuario, idCurso, idRole, callback){ // idRole, 3: professor, 5: estudante
var param = "enrolments[0][roleid]="+idRole+"&enrolments[0][userid]="+idUsuario+"&enrolments[0][courseid]="+idCurso;
this.callRequestFunc("enrol_manual_enrol_users", param, callback);
}

this.removeUsuarioCurso = function (idUsuario, idCurso, callback){
var param = "enrolments[0][userid]=" + idUsuario + "&enrolments[0][courseid]=" + idCurso;
this.callRequestFunc("enrol_manual_unenrol_users", param, callback);
}
};


Expand Down Expand Up @@ -88,8 +98,9 @@ function requestServidor(url, callback){
error = dados.message;
}
}
if (error || typeof callback != "function") {
error = url+'\n'+error;
if (typeof callback != "function") {
error = url + '\n' + error;
console.error("callback is not a functions: "+error);
}
callback(error, dados);
});
Expand Down

0 comments on commit 6067506

Please sign in to comment.