123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- <?
- require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
- header('Content-Type: application/json');
- if (!Login::is_logged()) {
- header('HTTP/1.1 401 Unauthorized');
- echo json_encode(array('error' => 'No se ha iniciado sesión'));
- exit();
- }
- $user = Login::get_user();
- try {
- switch ($_SERVER['REQUEST_METHOD']) {
- case 'GET':
- $facultad_id = $user->facultad['facultad_id'];
- $avisos = $db->query(
- "SELECT * FROM aviso
- WHERE
- (CURRENT_DATE BETWEEN aviso_fecha_inicial AND aviso_fecha_final) AND
- (facultad_id = :facultad_id OR :facultad_id IS NULL) AND
- aviso_estado
- ORDER BY aviso_id DESC",
- array('facultad_id' => $facultad_id)
- );
- /*
- if (empty($avisos)) {
- header('HTTP/1.1 404 Not Found');
- echo json_encode(array('error' => 'No hay avisos disponibles'));
- exit();
- }
- */
- $avisos = array_map(fn($aviso) => array(
- ...$aviso,
- 'carreras' => $db->query(
- "SELECT carrera_id, carrera_nombre FROM aviso_carrera
- JOIN carrera USING (carrera_id)
- WHERE aviso_id = :aviso_id",
- array('aviso_id' => $aviso['aviso_id'])
- ),
- 'profesores' => $db->query(
- "SELECT profesor_id, profesor_clave, profesor_nombre FROM aviso_profesor
- JOIN profesor USING (profesor_id)
- WHERE aviso_id = :aviso_id",
- array('aviso_id' => $aviso['aviso_id'])
- ),
- ), $avisos);
- echo json_encode($avisos);
- break;
- case 'POST':
- $raw_input = file_get_contents('php://input');
- if (empty($raw_input)) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(array('error' => 'No se recibieron parámetros'));
- exit();
- }
- $input_data = json_decode($raw_input);
- if (json_last_error() !== JSON_ERROR_NONE) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(array('error' => 'Invalid JSON format'));
- exit();
- }
- $schema = <<<JSON
- {
- "\$schema": "http://json-schema.org/draft-07/schema#",
- "type": "object",
- "required": ["aviso_fecha_inicial", "aviso_fecha_final", "aviso_titulo", "aviso_texto"],
- "properties": {
- "aviso_fecha_inicial": {
- "type": "string",
- "format": "date"
- },
- "aviso_fecha_final": {
- "type": "string",
- "format": "date"
- },
- "aviso_texto": {
- "type": "string"
- },
- "aviso_titulo": {
- "type": "string"
- },
- "carreras": {
- "type": "array",
- "items": {
- "type": "integer",
- "minimum": 1
- },
- "minItems": 0,
- "uniqueItems": true
- },
- "profesores": {
- "type": "array",
- "items": {
- "type": "integer",
- "minimum": 1
- },
- "minItems": 0,
- "uniqueItems": true
- }
- },
- "anyOf": [
- {"required": ["carreras"]},
- {"required": ["profesores"]}
- ]
- }
- JSON;
- // VALIDATE JSON SCHEMA
- $validate = new JsonSchema\Validator();
- $validate->validate($input_data, json_decode($schema));
- if (!$validate->isValid()) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(
- array(
- 'error' => 'El formato de la solicitud es incorrecto',
- 'success' => false,
- 'errors' => $validate->getErrors()
- )
- );
- exit();
- }
- $aviso_id = $db->insert(
- 'aviso',
- array(
- 'aviso_fecha_inicial' => $input_data->aviso_fecha_inicial,
- 'aviso_fecha_final' => $input_data->aviso_fecha_final,
- 'aviso_texto' => $input_data->aviso_texto,
- 'facultad_id' => $user->facultad['facultad_id'],
- ),
- 'aviso_id'
- );
- if (isset($input_data->carreras)) {
- array_walk($input_data->carreras, fn($carrera_id) => $db->insert('aviso_carrera', array('aviso_id' => $aviso_id, 'carrera_id' => $carrera_id)));
- }
- if (isset($input_data->profesores)) {
- array_walk($input_data->profesores, fn($profesor_id) => $db->insert('aviso_profesor', array('aviso_id' => $aviso_id, 'profesor_id' => $profesor_id)));
- }
- echo json_encode(
- array(
- 'aviso_id' => $aviso_id,
- 'msg' => 'Aviso creado exitosamente',
- 'success' => true
- )
- );
- break;
- case 'PUT':
- $raw_input = file_get_contents('php://input');
- if (empty($raw_input)) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(array('error' => 'No se recibieron parámetros'));
- exit();
- }
- $input_data = json_decode($raw_input);
- if (json_last_error() !== JSON_ERROR_NONE) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(array('error' => 'Invalid JSON format'));
- exit();
- }
- $schema = <<<JSON
- {
- "\$schema": "http://json-schema.org/draft-07/schema#",
- "type": "object",
- "required": ["aviso_id", "aviso_fecha_final"],
- "properties": {
- "aviso_id": {
- "type": "integer",
- "minimum": 1
- },
- "aviso_fecha_final": {
- "type": "string",
- "format": "date"
- }
- }
- }
- JSON;
- // VALIDATE JSON SCHEMA
- $validate = new JsonSchema\Validator();
- $validate->validate($input_data, json_decode($schema));
- if (!$validate->isValid()) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(
- array(
- 'error' => 'El formato de la solicitud es incorrecto',
- 'errors' => $validate->getErrors(),
- 'success' => false,
- )
- );
- exit();
- }
- $db->where('aviso_id', $input_data->aviso_id)
- ->update(
- 'aviso',
- array(
- 'aviso_fecha_final' => $input_data->aviso_fecha_final,
- ),
- );
- if (isset($input_data->carreras)) {
- $db->where('aviso_id', $input_data->aviso_id)->delete('aviso_carrera');
- array_walk($input_data->carreras, fn($carrera_id) => $db->insert('aviso_carrera', array('aviso_id' => $input_data->aviso_id, 'carrera_id' => $carrera_id)));
- }
- if (isset($input_data->profesores)) {
- $db->where('aviso_id', $input_data->aviso_id)->delete('aviso_profesor');
- array_walk($input_data->profesores, fn($profesor_id) => $db->insert('aviso_profesor', array('aviso_id' => $input_data->aviso_id, 'profesor_id' => $profesor_id)));
- }
- echo json_encode(
- array(
- 'msg' => 'Aviso actualizado exitosamente',
- 'success' => true
- )
- );
- break;
- case 'DELETE':
- $raw_input = file_get_contents('php://input');
- if (empty($raw_input)) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(array('error' => 'No se recibieron parámetros'));
- exit();
- }
- $input_data = json_decode($raw_input);
- if (json_last_error() !== JSON_ERROR_NONE) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(array('error' => 'Invalid JSON format'));
- exit();
- }
- $schema = <<<JSON
- {
- "\$schema": "http://json-schema.org/draft-07/schema#",
- "type": "object",
- "required": ["aviso_id"],
- "properties": {
- "aviso_id": {
- "type": "integer",
- "minimum": 1
- }
- }
- }
- JSON;
- // VALIDATE JSON SCHEMA
- $validate = new JsonSchema\Validator();
- $validate->validate($input_data, json_decode($schema));
- if (!$validate->isValid()) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(
- array(
- 'error' => 'El formato de la solicitud es incorrecto',
- 'errors' => $validate->getErrors(),
- 'success' => false,
- )
- );
- exit();
- }
- $result = $db->where('aviso_id', $input_data->aviso_id)->update('aviso', array('aviso_estado' => false));
- echo json_encode(
- array(
- 'msg' => 'Aviso eliminado exitosamente',
- 'success' => true,
- 'result' => $result
- )
- );
- break;
- }
- } catch (PDOException $e) {
- echo json_encode(
- array(
- 'error' => $e->getMessage(),
- 'query' => $db->getLastQuery(),
- 'exception' => $e->getTraceAsString()
- )
- );
- }
|