/
QuizesMySqlDAO.class.php
400 lines (343 loc) · 11.6 KB
/
QuizesMySqlDAO.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
<?php
/**
* Class that operate on table 'quizes'. Database Mysql.
*
* @author: http://phpdao.com
* @date: 2012-01-18 16:29
*/
class QuizesMySqlDAO implements QuizesDAO{
/**
* Entrega un listado de quizes cuyo nombre contiene "evalua"
*
* TODO: revisar porque quiza es mejor seleccionar aquellos que tienen fecha de cierre
* @author cgajardo
* @param int $id_curso
*/
public function queryEvaluacionesByIdCurso($id_curso){
$sql = 'SELECT q.*
FROM quizes q JOIN (
SELECT prefijo_tarea,cg.id_curso FROM cursos_has_grupos cg
JOIN grupos g ON cg.id_grupo=g.id
JOIN sedes s ON g.id_sede=s.id
JOIN instituciones i ON s.id_institucion=i.id
WHERE cg.id_curso=? LIMIT 1 ) as t
ON q.id_curso=t.id_curso
WHERE q.nombre REGEXP prefijo_tarea
ORDER BY fecha_cierre ASC';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($id_curso);
return $this->getList($sqlQuery);
}
/**
* DEPRECATED
*
* Esta funcion entrega un listado de actividades evaluadas asociadas a un curso moodle
* @author cgajardo
* @param string $identificador_moodle_curso
*/
public function queryEvaluacionesByIdCursoMoodle($identificador_moodle_curso){
$sql = 'SELECT q.* '.
'FROM quizes AS q, cursos as c '.
'WHERE id_curso = c.id AND q.nombre LIKE "%evalua%" AND c.identificador_moodle=? '.
'ORDER BY fecha_cierre ASC';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->setString($identificador_moodle_curso);
return $this->getList($sqlQuery);
}
/**
* Devuelve la lista de quizes evaluados cerrados hasta este momento.
*
* @author cgajardo
* @param int $curso_id
*/
public function queryCerradosByIdCurso($curso_id){
/**
* @author cgajardo: previous query
* $sql = 'SELECT q.* '.
'FROM quizes AS q '.
'JOIN sedes_has_cursos sc ON q.id_curso=sc.id_curso '.
'JOIN sedes s ON sc.id_sede=s.id '.
'JOIN instituciones i ON s.id_institucion=i.id '.
'WHERE q.id_curso = ? AND q.nombre REGEXP i.prefijo_tarea '.
'AND q.fecha_cierre > 0 AND q.fecha_cierre < NOW() ORDER BY nombre ASC';
*/
$sql = 'SELECT q.* '.
'FROM quizes AS q '.
'JOIN sedes_has_cursos sc ON q.id_curso=sc.id_curso '.
'JOIN sedes s ON sc.id_sede=s.id '.
'JOIN instituciones i ON s.id_institucion=i.id '.
'WHERE q.id_curso = ? AND q.nombre REGEXP i.prefijo_tarea '.
'AND q.fecha_cierre < NOW() ORDER BY nombre ASC';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($curso_id);
return $this->getList($sqlQuery);
}
public function queryCerradosByIdGrupo($grupo_id){
/**
* @author cgajardo: previous query
* $sql = 'SELECT q.* '.
'FROM quizes AS q '.
'JOIN sedes_has_cursos sc ON q.id_curso=sc.id_curso '.
'JOIN sedes s ON sc.id_sede=s.id '.
'JOIN instituciones i ON s.id_institucion=i.id '.
'WHERE q.id_curso = ? AND q.nombre REGEXP i.prefijo_tarea '.
'AND q.fecha_cierre > 0 AND q.fecha_cierre < NOW() ORDER BY nombre ASC';
*/
$sql = 'SELECT q.*
FROM quizes AS q
JOIN cursos_has_grupos cg ON q.id_curso=cg.id_curso
JOIN grupos g ON cg.id_grupo = g.id
JOIN sedes s ON g.id_sede=s.id
JOIN instituciones i ON s.id_institucion=i.id
WHERE g.id = ? AND q.nombre REGEXP i.prefijo_tarea
AND q.fecha_cierre < NOW() ORDER BY nombre ASC';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($grupo_id);
return $this->getList($sqlQuery);
}
public function queryDiagnosticosByIdCurso($curso_id){
$sql = 'SELECT q.* '.
'FROM quizes AS q '.
'JOIN sedes_has_cursos sc ON q.id_curso=sc.id_curso '.
'JOIN sedes s ON sc.id_sede=s.id '.
'JOIN instituciones i ON s.id_institucion=i.id '.
'WHERE q.id_curso = ? AND q.nombre REGEXP i.prefijo_diag '.
'AND q.fecha_cierre < NOW() ORDER BY nombre ASC';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($curso_id);
return $this->getRow($sqlQuery);
}
/**
* Devuelve el quiz correspondiente en galyleo seg�n el id de quiz en moodle
* @param string $plataforma
* @param int $quiz_id_in_moodle
*/
public function getGalyleoQuizByMoodleId($plataforma, $quiz_id_in_moodle){
$sql = 'SELECT q.* FROM plataforma_quiz AS pq, plataformas AS p, quizes AS q '.
'WHERE q.id = pq.id_quiz AND p.id = pq.id_plataforma AND p.nombre = ? AND id_quiz_moodle = ? ';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($plataforma);
$sqlQuery->set($quiz_id_in_moodle);
return $this->getRow($sqlQuery);
}
/**
* cgajardo:
* retorna la lista de quizes que ha rendido un usuario
* @param int $idUsuario
* @return Quize list
*/
public function getQuizesByUsuario($idUsuario){
$sql = 'SELECT distinct quizes.id, quizes.nombre FROM quizes, intentos '.
'WHERE quizes.id = intentos.id_quiz AND intentos.id_persona = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->setNumber($idUsuario);
return $this->getList($sqlQuery);
}
/**
* Get Domain object by primry key
*
* @param String $id primary key
* @return QuizesMySql
*/
public function load($id){
$sql = 'SELECT * FROM quizes WHERE id = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->setNumber($id);
return $this->getRow($sqlQuery);
}
/**
* Get all records from table
*/
public function queryAll(){
$sql = 'SELECT * FROM quizes';
$sqlQuery = new SqlQuery($sql);
return $this->getList($sqlQuery);
}
/**
* Get all records from table ordered by field
*
* @param $orderColumn column name
*/
public function queryAllOrderBy($orderColumn){
$sql = 'SELECT * FROM quizes ORDER BY '.$orderColumn;
$sqlQuery = new SqlQuery($sql);
return $this->getList($sqlQuery);
}
/**
* Delete record from table
* @param quize primary key
*/
public function delete($id){
$sql = 'DELETE FROM quizes WHERE id = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->setNumber($id);
return $this->executeUpdate($sqlQuery);
}
/**
* Insert record to table
*
* @param QuizesMySql quize
*/
public function insert($quize){
$sql = 'INSERT INTO quizes (nombre, id_curso, fecha_cierre, puntaje_maximo, nota_maxima) VALUES (?, ?, ?, ?, ?)';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($quize->nombre);
$sqlQuery->set($quize->idCurso);
$sqlQuery->set($quize->fechaCierre);
$sqlQuery->setNumber($quize->puntajeMaximo);
$sqlQuery->setNumber($quize->notaMaxima);
$id = $this->executeInsert($sqlQuery);
$quize->id = $id;
return $id;
}
/**
* Update record in table
*
* @param QuizesMySql quize
*/
public function update($quize){
$sql = 'UPDATE quizes SET nombre = ?, id_curso = ?, fecha_cierre = ?, puntaje_maximo = ?, nota_maxima = ? WHERE id = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($quize->nombre);
$sqlQuery->set($quize->idCurso);
$sqlQuery->set($quize->fechaCierre);
$sqlQuery->setNumber($quize->puntajeMaximo);
$sqlQuery->setNumber($quize->notaMaxima);
$sqlQuery->setNumber($quize->id);
return $this->executeUpdate($sqlQuery);
}
/**
* Delete all rows
*/
public function clean(){
$sql = 'DELETE FROM quizes';
$sqlQuery = new SqlQuery($sql);
return $this->executeUpdate($sqlQuery);
}
public function queryByNombre($value){
$sql = 'SELECT * FROM quizes WHERE nombre = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($value);
return $this->getList($sqlQuery);
}
public function queryByIdCurso($value){
$sql = 'SELECT * FROM quizes WHERE id_curso = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($value);
return $this->getList($sqlQuery);
}
public function queryByFechaCierre($value){
$sql = 'SELECT * FROM quizes WHERE fecha_cierre = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($value);
return $this->getList($sqlQuery);
}
public function queryByPuntajeMaximo($value){
$sql = 'SELECT * FROM quizes WHERE puntaje_maximo = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->setNumber($value);
return $this->getList($sqlQuery);
}
public function queryByNotaMaxima($value){
$sql = 'SELECT * FROM quizes WHERE nota_maxima = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->setNumber($value);
return $this->getList($sqlQuery);
}
public function deleteByNombre($value){
$sql = 'DELETE FROM quizes WHERE nombre = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($value);
return $this->executeUpdate($sqlQuery);
}
public function deleteByIdCurso($value){
$sql = 'DELETE FROM quizes WHERE id_curso = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($value);
return $this->executeUpdate($sqlQuery);
}
public function deleteByFechaCierre($value){
$sql = 'DELETE FROM quizes WHERE fecha_cierre = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->set($value);
return $this->executeUpdate($sqlQuery);
}
public function deleteByPuntajeMaximo($value){
$sql = 'DELETE FROM quizes WHERE puntaje_maximo = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->setNumber($value);
return $this->executeUpdate($sqlQuery);
}
public function deleteByNotaMaxima($value){
$sql = 'DELETE FROM quizes WHERE nota_maxima = ?';
$sqlQuery = new SqlQuery($sql);
$sqlQuery->setNumber($value);
return $this->executeUpdate($sqlQuery);
}
/**
* Read row
*
* @return QuizesMySql
*/
protected function readRow($row){
$quize = new Quize();
$quize->id = $row['id'];
$quize->nombre = $row['nombre'];
$quize->idCurso = $row['id_curso'];
$quize->fechaCierre = $row['fecha_cierre'];
$quize->puntajeMaximo = $row['puntaje_maximo'];
$quize->notaMaxima = $row['nota_maxima'];
$quize->notaMinima = $row['nota_minima'];
return $quize;
}
protected function getList($sqlQuery){
$tab = QueryExecutor::execute($sqlQuery);
$ret = array();
for($i=0;$i<count($tab);$i++){
$ret[$i] = $this->readRow($tab[$i]);
}
return $ret;
}
/**
* Get row
*
* @return QuizesMySql
*/
protected function getRow($sqlQuery){
$tab = QueryExecutor::execute($sqlQuery);
if(count($tab)==0){
return null;
}
return $this->readRow($tab[0]);
}
/**
* Execute sql query
*/
protected function execute($sqlQuery){
return QueryExecutor::execute($sqlQuery);
}
/**
* Execute sql query
*/
protected function executeUpdate($sqlQuery){
return QueryExecutor::executeUpdate($sqlQuery);
}
/**
* Query for one row and one column
*/
protected function querySingleResult($sqlQuery){
return QueryExecutor::queryForString($sqlQuery);
}
/**
* Insert row to table
*/
protected function executeInsert($sqlQuery){
return QueryExecutor::executeInsert($sqlQuery);
}
public function getQuizWithCierre() {
$sql = 'SELECT * FROM quizes WHERE fecha_cierre>0';
$sqlQuery = new SqlQuery($sql);
return $this->getList($sqlQuery);
}
}
?>