refactored database, models and controllers

parent d36e04ff
...@@ -10,9 +10,9 @@ Los ficheros SQL que importará este rol son los siguientes: ...@@ -10,9 +10,9 @@ Los ficheros SQL que importará este rol son los siguientes:
- [init-ignoresymbolstix][2] realiza el mismo proceso que [init][1], pero manteniendo - [init-ignoresymbolstix][2] realiza el mismo proceso que [init][1], pero manteniendo
los datos almacenados por symbolstx. los datos almacenados por symbolstx.
- [pictodb-schema][3] contiene el esquema de la base de datos. - [pictodb-schema][3] contiene el esquema de la base de datos.
- [pictodb-data][4] contiene la información básica que la aplicación necesita para funcionar. - [pictodb-data][4] contiene la información básica que la aplicación necesita para funcionar. Añade información a las tablas `meta_method`, `meta_instruction`, `source`, `picto_core` y `picto_exp`.
- [symbolstx-categories][5] añade las categorías de symbolstx. - [symbolstx-categories][5] añade las categorías de symbolstx en las tablas `pictocat` y `catexp`.
- [symbolstix-metadata][6] añade traducciones para symbolstx. - [symbolstix-metadata][6] añade traducciones para symbolstx y los pictos (tablas `picto_exp`, `picto_tag` y `picto`).
- [triggers-enrolments-integrity-constraints][7] añade disparadores para el control de - [triggers-enrolments-integrity-constraints][7] añade disparadores para el control de
integridad de inscripciones. integridad de inscripciones.
- [triggers-sessions-integrity-constraints][8] añade disparadores para el control de integridad - [triggers-sessions-integrity-constraints][8] añade disparadores para el control de integridad
......
--
-- All data is deleted from the database except symbolstix tables and basic metadata
-- Afterwords, test data can be loaded
--
--
-- TO BE DONE!!!
SET foreign_key_checks=0; SET foreign_key_checks=0;
GRANT USAGE ON *.* TO 'pictodbuser'@'localhost'; SET @TRIGGER_CHECKS=FALSE;
DROP USER 'pictodbuser'@'localhost';
CREATE USER 'pictodbuser'@'localhost' identified by 'p1KT015'; DELETE FROM picto_tag WHERE `id_sup` IS NOT NULL;
DROP DATABASE IF EXISTS pictodb; DELETE FROM picto WHERE `owner` IS NOT NULL;
CREATE DATABASE pictodb; TRUNCATE office;
TRUNCATE supervisor;
TRUNCATE student;
TRUNCATE stu_sup;
TRUNCATE stu_picto;
TRUNCATE method;
TRUNCATE instruction;
TRUNCATE try;
TRUNCATE working_session;
SET @TRIGGER_CHECKS=TRUE;
SET foreign_key_checks=1; SET foreign_key_checks=1;
grant all privileges on pictodb.* to pictodbuser;
flush privileges;
...@@ -51,10 +51,10 @@ INSERT INTO `source` (`id`, `name`, `description`) VALUES ...@@ -51,10 +51,10 @@ INSERT INTO `source` (`id`, `name`, `description`) VALUES
SET foreign_key_checks=0; SET foreign_key_checks=0;
-- --
-- Volcado de datos para la tabla `picto_core_cat` -- Volcado de datos para la tabla `picto_core`
-- --
INSERT INTO `picto_core_cat` (`id`, `id_pic`, `id_cat_pic`, `coord_x`, `coord_y`,`color`) VALUES INSERT INTO `picto_core` (`id`, `id_pic`, `id_cat_pic`, `coord_x`, `coord_y`,`color`) VALUES
(1, 2982, NULL, 0, 0, NULL), -- yes (1, 2982, NULL, 0, 0, NULL), -- yes
(2, 4391, NULL, 0, 1, NULL), -- no (2, 4391, NULL, 0, 1, NULL), -- no
(3, 2284, NULL, 0, 2, NULL), -- please (3, 2284, NULL, 0, 2, NULL), -- please
......
...@@ -52,13 +52,14 @@ COMMENT="This table registers and action performed by a user at a given time, al ...@@ -52,13 +52,14 @@ COMMENT="This table registers and action performed by a user at a given time, al
-- --
CREATE TABLE IF NOT EXISTS `catexp`( CREATE TABLE IF NOT EXISTS `catexp`(
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`id_cat` int(11) NOT NULL REFERENCES `pictocat`, `id_cat` int(11) NOT NULL,
`lang` char(5), `lang` char(5),
`exp` varchar(30) NOT NULL, `exp` varchar(30) NOT NULL,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
UNIQUE(exp,lang), UNIQUE(exp,lang),
CHECK (lang IN ('es-es','en-gb','en-us')) CHECK (lang IN ('es-es','en-gb','en-us'))
); )
COMMENT="Stores the expressions available in several languages for a given category (id_cat)";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -75,7 +76,8 @@ CREATE TABLE IF NOT EXISTS `method` ( ...@@ -75,7 +76,8 @@ CREATE TABLE IF NOT EXISTS `method` (
`notes` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, `notes` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_stu_met` (`id_stu`) KEY `fk_stu_met` (`id_stu`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1
COMMENT="Information for a method. A method is composed by a set of instructions";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -92,7 +94,8 @@ CREATE TABLE IF NOT EXISTS `instruction` ( ...@@ -92,7 +94,8 @@ CREATE TABLE IF NOT EXISTS `instruction` (
`begin` timestamp NULL, `begin` timestamp NULL,
`end` timestamp NULL, `end` timestamp NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1
COMMENT="An instruction is a 'phase' in a method for learning AAC";
...@@ -108,7 +111,8 @@ CREATE TABLE IF NOT EXISTS `meta_instruction` ( ...@@ -108,7 +111,8 @@ CREATE TABLE IF NOT EXISTS `meta_instruction` (
`objective` varchar(512) COLLATE utf8_unicode_ci DEFAULT NULL, `objective` varchar(512) COLLATE utf8_unicode_ci DEFAULT NULL,
`id_met` tinyint(4) NOT NULL, `id_met` tinyint(4) NOT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1
COMMENT="One in a set of instructions predefined or stored by users. They are related to a metamethod (id_met)";
-- -------------------------------------------------------- -- --------------------------------------------------------
-- --
...@@ -122,7 +126,8 @@ CREATE TABLE IF NOT EXISTS `meta_method` ( ...@@ -122,7 +126,8 @@ CREATE TABLE IF NOT EXISTS `meta_method` (
`id_sup` INT( 11 ) DEFAULT NULL, `id_sup` INT( 11 ) DEFAULT NULL,
UNIQUE(name,id_sup), UNIQUE(name,id_sup),
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1
COMMENT="Methods predefined in the platform or stored by users for cloning";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -146,7 +151,8 @@ CREATE TABLE IF NOT EXISTS `office` ( ...@@ -146,7 +151,8 @@ CREATE TABLE IF NOT EXISTS `office` (
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`), UNIQUE KEY `email` (`email`),
KEY `fk_admin_tea` (`admin`) KEY `fk_admin_tea` (`admin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=383 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=383
COMMENT="Information about a therapists' office (cabinet)";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -157,13 +163,14 @@ CREATE TABLE IF NOT EXISTS `office` ( ...@@ -157,13 +163,14 @@ CREATE TABLE IF NOT EXISTS `office` (
CREATE TABLE IF NOT EXISTS `picto` ( CREATE TABLE IF NOT EXISTS `picto` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`uri` varchar(250) COLLATE utf8_unicode_ci NOT NULL, `uri` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
`id_src` tinyint(4) NOT NULL REFERENCES `source`, `id_src` tinyint(4) NOT NULL,
`id_owner` int(11) DEFAULT NULL REFERENCES `supervisor`, `id_owner` int(11) DEFAULT NULL,
`id_cat` int(11) DEFAULT NULL REFERENCES `pictocat`, `id_cat` int(11) DEFAULT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `ck_pic` (`id_owner`,`id_src`,`uri`), UNIQUE KEY `ck_pic` (`id_owner`,`id_src`,`uri`),
KEY `fk_sou_pic` (`id_src`) KEY `fk_sou_pic` (`id_src`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=104142 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=104142
COMMENT="Main information about a pictogram, either coming from a source like Symbolstix or added by a supervisor. It can belongs to a category (id_cat)";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -173,14 +180,15 @@ CREATE TABLE IF NOT EXISTS `picto` ( ...@@ -173,14 +180,15 @@ CREATE TABLE IF NOT EXISTS `picto` (
CREATE TABLE IF NOT EXISTS `pictocat`( CREATE TABLE IF NOT EXISTS `pictocat`(
`id` int(11) PRIMARY KEY, `id` int(11) PRIMARY KEY,
`id_supercat` int(11) REFERENCES `pictocat` `id_supercat` int(11)
); )
COMMENT="Identifies a category, which, itself, may belong to another category";
-- -------------------------------------------------------- -- --------------------------------------------------------
-- --
-- Estructura de tabla para la tabla `picto_acl` -- Estructura de tabla para la tabla `picto_acl`
-- -- NOT IN USE (candidate for removal)
CREATE TABLE IF NOT EXISTS `picto_acl` ( CREATE TABLE IF NOT EXISTS `picto_acl` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
...@@ -191,7 +199,8 @@ CREATE TABLE IF NOT EXISTS `picto_acl` ( ...@@ -191,7 +199,8 @@ CREATE TABLE IF NOT EXISTS `picto_acl` (
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `k_pic_aclp` (`id_pic`), KEY `k_pic_aclp` (`id_pic`),
KEY `k_sup_aclp` (`id_sup`) KEY `k_sup_aclp` (`id_sup`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1
COMMENT="Stablish access rights to pictos";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -201,23 +210,7 @@ CREATE TABLE IF NOT EXISTS `picto_acl` ( ...@@ -201,23 +210,7 @@ CREATE TABLE IF NOT EXISTS `picto_acl` (
CREATE TABLE IF NOT EXISTS `picto_core` ( CREATE TABLE IF NOT EXISTS `picto_core` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`id_pic` int(11) NOT NULL, `id_pic` int(11) DEFAULT NULL COMMENT 'This is the id of the pictogram',
`coord_x` tinyint(4) NOT NULL,
`coord_y` tinyint(4) NOT NULL,
`color` int NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_coord_pc` (`coord_x`,`coord_y`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `picto_core_cat`
--
CREATE TABLE IF NOT EXISTS `picto_core_cat` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_pic` int(11) DEFAULT NULL,
`id_cat_pic` int(11) DEFAULT NULL COMMENT 'This is the id of the pictogram that represents the category this entry belongs to', `id_cat_pic` int(11) DEFAULT NULL COMMENT 'This is the id of the pictogram that represents the category this entry belongs to',
`coord_x` tinyint(4) NOT NULL, `coord_x` tinyint(4) NOT NULL,
`coord_y` tinyint(4) NOT NULL, `coord_y` tinyint(4) NOT NULL,
...@@ -225,7 +218,8 @@ CREATE TABLE IF NOT EXISTS `picto_core_cat` ( ...@@ -225,7 +218,8 @@ CREATE TABLE IF NOT EXISTS `picto_core_cat` (
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `id_pic` (`id_pic`), KEY `id_pic` (`id_pic`),
KEY `id_cat_pic` (`id_cat_pic`) KEY `id_cat_pic` (`id_cat_pic`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=124 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=124
COMMENT="Default pictos and categories available for a newly created student with default coordinates";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -235,12 +229,13 @@ CREATE TABLE IF NOT EXISTS `picto_core_cat` ( ...@@ -235,12 +229,13 @@ CREATE TABLE IF NOT EXISTS `picto_core_cat` (
CREATE TABLE IF NOT EXISTS `picto_exp` ( CREATE TABLE IF NOT EXISTS `picto_exp` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`id_pic` int(11) NOT NULL REFERENCES `picto`, `id_pic` int(11) NOT NULL,
`lang` char(5) COLLATE utf8_unicode_ci NOT NULL, `lang` char(5) COLLATE utf8_unicode_ci NOT NULL,
`text` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `text` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `id_pic` (`id_pic`) KEY `id_pic` (`id_pic`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=72565 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=72565
COMMENT="Expression (text label) for a picto in different languages. This is used by the TTS engine";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -250,29 +245,15 @@ CREATE TABLE IF NOT EXISTS `picto_exp` ( ...@@ -250,29 +245,15 @@ CREATE TABLE IF NOT EXISTS `picto_exp` (
CREATE TABLE IF NOT EXISTS `picto_tag` ( CREATE TABLE IF NOT EXISTS `picto_tag` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`id_sup` int(11) DEFAULT NULL COMMENT 'If NULL then is a default tag',
`id_pic` int(11) NOT NULL, `id_pic` int(11) NOT NULL,
`tag` varchar(60) COLLATE utf8_unicode_ci NOT NULL, `tag` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`lang` char(5) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `id_pic` (`id_pic`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=36536 ;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `picto_tag_sup`
--
CREATE TABLE IF NOT EXISTS `picto_tag_sup` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_sup` int(11) NOT NULL,
`id_pic` int(11) NOT NULL,
`tag` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`lang` char(5) COLLATE utf8_unicode_ci NOT NULL, `lang` char(5) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `id_pic` (`id_pic`), KEY `id_pic` (`id_pic`),
KEY `id_sup` (`id_sup`) KEY `id_sup` (`id_sup`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1
COMMENT="Labels assigned to pictos by default or by supervisors";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -285,7 +266,8 @@ CREATE TABLE IF NOT EXISTS `source` ( ...@@ -285,7 +266,8 @@ CREATE TABLE IF NOT EXISTS `source` (
`name` varchar(40) COLLATE utf8_unicode_ci NOT NULL, `name` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
`description` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, `description` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2
COMMENT="Contains all possible sources of pictos";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -306,11 +288,12 @@ CREATE TABLE IF NOT EXISTS `student` ( ...@@ -306,11 +288,12 @@ CREATE TABLE IF NOT EXISTS `student` (
`notes` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, `notes` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL,
`lang` varchar(5) COLLATE utf8_unicode_ci NOT NULL, `lang` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
`attributes` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Attributes describing student along with his/her configuration', `attributes` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Attributes describing student along with his/her configuration',
`id_off` int(11) DEFAULT NULL COMMENT 'office', `id_off` int(11) DEFAULT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`), UNIQUE KEY `username` (`username`),
KEY `id_off` (`id_off`) KEY `id_off` (`id_off`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=19 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=19
COMMENT="Students information";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -327,7 +310,8 @@ CREATE TABLE IF NOT EXISTS `stu_picto` ( ...@@ -327,7 +310,8 @@ CREATE TABLE IF NOT EXISTS `stu_picto` (
KEY `fk_picto` (`id_pic`), KEY `fk_picto` (`id_pic`),
KEY `id_stu` (`id_stu`), KEY `id_stu` (`id_stu`),
UNIQUE `uq_stupicto` (`id_stu`,`id_pic`) UNIQUE `uq_stupicto` (`id_stu`,`id_pic`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1
COMMENT="This table relates a student with the pictos in her vocabulary";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -343,7 +327,8 @@ CREATE TABLE IF NOT EXISTS `stu_sup` ( ...@@ -343,7 +327,8 @@ CREATE TABLE IF NOT EXISTS `stu_sup` (
UNIQUE KEY `fk_stu_sup_ss` (`id_stu`,`id_sup`), UNIQUE KEY `fk_stu_sup_ss` (`id_stu`,`id_sup`),
KEY `fk_sup_ss` (`id_sup`), KEY `fk_sup_ss` (`id_sup`),
KEY `id_stu` (`id_stu`) KEY `id_stu` (`id_stu`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=26 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=26
COMMENT="This table relates students and supervisors";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -364,12 +349,13 @@ CREATE TABLE IF NOT EXISTS `supervisor` ( ...@@ -364,12 +349,13 @@ CREATE TABLE IF NOT EXISTS `supervisor` (
`lang` varchar(5) COLLATE utf8_unicode_ci NOT NULL, `lang` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
`tts_engine` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, `tts_engine` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`password` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'Encrypted password using the BCrypt algorithm', `password` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'Encrypted password using the BCrypt algorithm',
`id_off` int(11) DEFAULT NULL COMMENT 'office', `id_off` int(11) DEFAULT NULL,
`active` boolean DEFAULT FALSE, `active` boolean DEFAULT FALSE,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`), UNIQUE KEY `email` (`email`),
KEY `id_off` (`id_off`) KEY `id_off` (`id_off`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=23 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=23
COMMENT="Supervisors information";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -386,7 +372,8 @@ CREATE TABLE IF NOT EXISTS `try` ( ...@@ -386,7 +372,8 @@ CREATE TABLE IF NOT EXISTS `try` (
`description` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, `description` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `id_ws` (`id_ws`) KEY `id_ws` (`id_ws`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1
COMMENT="This table contains tries information (they belong to a working session)";
-- -------------------------------------------------------- -- --------------------------------------------------------
...@@ -408,7 +395,8 @@ CREATE TABLE IF NOT EXISTS `working_session` ( ...@@ -408,7 +395,8 @@ CREATE TABLE IF NOT EXISTS `working_session` (
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `id_sup` (`id_sup`), KEY `id_sup` (`id_sup`),
KEY `id_ins` (`id_ins`) KEY `id_ins` (`id_ins`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1
COMMENT="This table stores working session information. Every working session is related to one instruction and one supervisor (and the instruction is related to one method which is related to one student)";
-- --
-- Restricciones para tablas volcadas -- Restricciones para tablas volcadas
...@@ -466,17 +454,11 @@ ALTER TABLE `picto_acl` ...@@ -466,17 +454,11 @@ ALTER TABLE `picto_acl`
ADD CONSTRAINT `fk_sup_aclp` FOREIGN KEY (`id_sup`) REFERENCES `supervisor` (`id`); ADD CONSTRAINT `fk_sup_aclp` FOREIGN KEY (`id_sup`) REFERENCES `supervisor` (`id`);
-- --
-- Filtros para la tabla `picto_core`
--
ALTER TABLE `picto_core`
ADD CONSTRAINT `picto_core_ibfk_1` FOREIGN KEY (`id`) REFERENCES `picto` (`id`);
--
-- Filtros para la tabla `picto_core_cat` -- Filtros para la tabla `picto_core_cat`
-- --
ALTER TABLE `picto_core_cat` ALTER TABLE `picto_core`
ADD CONSTRAINT `picto_core_cat_ibfk_1` FOREIGN KEY (`id_cat_pic`) REFERENCES `picto` (`id`), ADD CONSTRAINT `picto_core_ibfk_1` FOREIGN KEY (`id_cat_pic`) REFERENCES `picto` (`id`),
ADD CONSTRAINT `picto_core_cat_ibfk_2` FOREIGN KEY (`id_pic`) REFERENCES `picto` (`id`); ADD CONSTRAINT `picto_core_ibfk_2` FOREIGN KEY (`id_pic`) REFERENCES `picto` (`id`);
-- --
...@@ -488,9 +470,9 @@ ALTER TABLE `picto_tag` ...@@ -488,9 +470,9 @@ ALTER TABLE `picto_tag`
-- --
-- Filtros para la tabla `picto_tag_sup` -- Filtros para la tabla `picto_tag_sup`
-- --
ALTER TABLE `picto_tag_sup` ALTER TABLE `picto_tag`
ADD CONSTRAINT `picto_tag_sup_ibfk_1` FOREIGN KEY (`id_sup`) REFERENCES `supervisor` (`id`), ADD CONSTRAINT `picto_tag_ibfk_1` FOREIGN KEY (`id_sup`) REFERENCES `supervisor` (`id`),
ADD CONSTRAINT `picto_tag_sup_ibfk_2` FOREIGN KEY (`id_pic`) REFERENCES `picto` (`id`); ADD CONSTRAINT `picto_tag_ibfk_2` FOREIGN KEY (`id_pic`) REFERENCES `picto` (`id`);
-- --
-- Filtros para la tabla `stu_picto` -- Filtros para la tabla `stu_picto`
......
The file could not be displayed because it is too large.
...@@ -6,7 +6,7 @@ SET foreign_key_checks = 0; ...@@ -6,7 +6,7 @@ SET foreign_key_checks = 0;
-- Oficina Autismo Jaen -- Oficina Autismo Jaen
-- --
INSERT INTO `office` ( INSERT IGNORE INTO `office` (
`name`, `name`,
`address`, `address`,
`country`, `country`,
...@@ -29,7 +29,7 @@ INSERT INTO `office` ( ...@@ -29,7 +29,7 @@ INSERT INTO `office` (
-- La contraseña es la primera parte del email (ej: manuel.colmenero) -- La contraseña es la primera parte del email (ej: manuel.colmenero)
-- --
INSERT INTO `supervisor` ( INSERT IGNORE INTO `supervisor` (
`name`, `name`,
`surname`, `surname`,
`gender`, `gender`,
...@@ -65,7 +65,7 @@ UPDATE office ...@@ -65,7 +65,7 @@ UPDATE office
-- La contraseña es la primera parte del email (ej: manuel.colmenero) -- La contraseña es la primera parte del email (ej: manuel.colmenero)
-- --
INSERT INTO `supervisor` ( INSERT IGNORE INTO `supervisor` (
`name`, `name`,
`surname`, `surname`,
`gender`, `gender`,
...@@ -116,7 +116,7 @@ INSERT INTO `supervisor` ( ...@@ -116,7 +116,7 @@ INSERT INTO `supervisor` (
-- La contraseña es la primera parte del email (ej: manuel.colmenero) -- La contraseña es la primera parte del email (ej: manuel.colmenero)
-- --
INSERT INTO `supervisor` ( INSERT IGNORE INTO `supervisor` (
`name`, `name`,
`surname`, `surname`,
`gender`, `gender`,
...@@ -163,7 +163,7 @@ INSERT INTO `supervisor` ( ...@@ -163,7 +163,7 @@ INSERT INTO `supervisor` (
-- La contraseña es el nombre de usuario -- La contraseña es el nombre de usuario
-- --
INSERT INTO `student` ( INSERT IGNORE INTO `student` (
`username`, `username`,
`password`, `password`,
`name`, `name`,
...@@ -287,7 +287,7 @@ INSERT INTO `student` ( ...@@ -287,7 +287,7 @@ INSERT INTO `student` (
-- Student pictos -- Student pictos
-- --
INSERT INTO `stu_picto` ( INSERT IGNORE INTO `stu_picto` (
`id_stu`, `id_stu`,
`id_pic`, `id_pic`,
`attributes` `attributes`
...@@ -300,7 +300,7 @@ SELECT S.id, P.id_pic, concat('{', ...@@ -300,7 +300,7 @@ SELECT S.id, P.id_pic, concat('{',
',"highlight":false', ',"highlight":false',
',"color":', if (P.color is null, 'null', concat('"', P.color,'"')), ',"color":', if (P.color is null, 'null', concat('"', P.color,'"')),
'}') as attributes '}') as attributes
FROM student S, picto_core_cat P FROM student S, picto_core P
WHERE WHERE
S.id_off=(SELECT id S.id_off=(SELECT id
FROM office FROM office
......
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00"; SET time_zone = "+00:00";
SET foreign_key_checks = 0; SET foreign_key_checks = 0;
SET @TRIGGER_CHECKS = FALSE;
-- --
-- Oficina -- Oficina
...@@ -394,7 +395,7 @@ SELECT S.id,P.id_pic, concat('{"id_cat":', if (id_cat_pic is null, 'null',id_cat ...@@ -394,7 +395,7 @@ SELECT S.id,P.id_pic, concat('{"id_cat":', if (id_cat_pic is null, 'null',id_cat
',"highlight":false', ',"highlight":false',
',"color":', if (color is null, 'null',concat('"',color,'"')), ',"color":', if (color is null, 'null',concat('"',color,'"')),
'}') as attributes '}') as attributes
FROM student S, picto_core_cat P FROM student S, picto_core P
WHERE S.id_off =(SELECT id from office where name='Comunicación Aumentativa JAén (CAJA)'); WHERE S.id_off =(SELECT id from office where name='Comunicación Aumentativa JAén (CAJA)');
-- --
...@@ -417,4 +418,5 @@ INSERT INTO working_session (id_sup, id_ins) VALUES ( ...@@ -417,4 +418,5 @@ INSERT INTO working_session (id_sup, id_ins) VALUES (
(SELECT id FROM instruction WHERE name='Test Instruction') (SELECT id FROM instruction WHERE name='Test Instruction')
); );
SET @TRIGGER_CHECKS = TRUE;
SET foreign_key_checks=1; SET foreign_key_checks=1;
...@@ -5,10 +5,13 @@ DELIMITER ;; ...@@ -5,10 +5,13 @@ DELIMITER ;;
-- Integrity rule 1: It is not possible to enrol a higer number of student than office.max_enrolments -- Integrity rule 1: It is not possible to enrol a higer number of student than office.max_enrolments
DROP TRIGGER IF EXISTS TRG_NEW_STUDENT_MAXENROLMENTS;
CREATE TRIGGER TRG_NEW_STUDENT_MAXENROLMENTS CREATE TRIGGER TRG_NEW_STUDENT_MAXENROLMENTS
BEFORE INSERT ON student BEFORE INSERT ON student
FOR EACH ROW FOR EACH ROW
thisTrigger: BEGIN thisTrigger: BEGIN
DECLARE max_enr,curr_enr INT;
IF ((@TRIGGER_CHECKS = FALSE) IF ((@TRIGGER_CHECKS = FALSE)
OR (@TRIGGER_BEFORE_INSERT_CHECKS = FALSE)) OR (@TRIGGER_BEFORE_INSERT_CHECKS = FALSE))
AND (USER() = 'root@localhost') AND (USER() = 'root@localhost')
...@@ -16,7 +19,6 @@ thisTrigger: BEGIN ...@@ -16,7 +19,6 @@ thisTrigger: BEGIN
LEAVE thisTrigger; LEAVE thisTrigger;
END IF; END IF;
DECLARE max_enr,curr_enr INT;
IF new.id_off IS NOT NULL THEN IF new.id_off IS NOT NULL THEN
SELECT SELECT
max_students, current_students INTO max_enr, curr_enr max_students, current_students INTO max_enr, curr_enr
...@@ -34,6 +36,7 @@ thisTrigger: BEGIN ...@@ -34,6 +36,7 @@ thisTrigger: BEGIN
END;; END;;
-- Integrity rule 2: office.current_enrolments updating -- Integrity rule 2: office.current_enrolments updating
DROP TRIGGER IF EXISTS TRG_NEW_STUDENT_UPDATE_ENROLMENTS;
CREATE TRIGGER TRG_NEW_STUDENT_UPDATE_ENROLMENTS CREATE TRIGGER TRG_NEW_STUDENT_UPDATE_ENROLMENTS
AFTER INSERT ON student AFTER INSERT ON student
FOR EACH ROW FOR EACH ROW
...@@ -54,6 +57,7 @@ thisTrigger: BEGIN ...@@ -54,6 +57,7 @@ thisTrigger: BEGIN
END;; END;;
-- Integrity rule 3: office.current_enrolments and supervisor assigments updating. -- Integrity rule 3: office.current_enrolments and supervisor assigments updating.
DROP TRIGGER IF EXISTS TRG_MODIFY_STUDENT_ENROLMENTS;
CREATE TRIGGER TRG_MODIFY_STUDENT_ENROLMENTS CREATE TRIGGER TRG_MODIFY_STUDENT_ENROLMENTS
AFTER UPDATE ON student AFTER UPDATE ON student
FOR EACH ROW FOR EACH ROW
...@@ -92,6 +96,7 @@ thisTrigger: BEGIN ...@@ -92,6 +96,7 @@ thisTrigger: BEGIN
END;; END;;
-- Integrity rule 4: office.current_enrolments when deleting student. Note that is not required to delete stu_sup because stu_sup.id_stu is a foreign key of student -- Integrity rule 4: office.current_enrolments when deleting student. Note that is not required to delete stu_sup because stu_sup.id_stu is a foreign key of student
DROP TRIGGER IF EXISTS TRG_DELETE_STUDENT_ENROLMENTS;
CREATE TRIGGER TRG_DELETE_STUDENT_ENROLMENTS CREATE TRIGGER TRG_DELETE_STUDENT_ENROLMENTS
AFTER DELETE ON student AFTER DELETE ON student
FOR EACH ROW FOR EACH ROW
......
...@@ -7,6 +7,7 @@ DELIMITER ;; ...@@ -7,6 +7,7 @@ DELIMITER ;;
-- --
-- Get the current try for a given session by reading disk-based tables only -- Get the current try for a given session by reading disk-based tables only
-- --
DROP FUNCTION IF EXISTS getOpenTry;
CREATE FUNCTION getOpenTry(idstu INT) CREATE FUNCTION getOpenTry(idstu INT)
RETURNS INT RETURNS INT
READS SQL DATA READS SQL DATA
...@@ -29,6 +30,7 @@ END;; ...@@ -29,6 +30,7 @@ END;;
-- --
-- Memory table in order to recover data about current working sessions -- Memory table in order to recover data about current working sessions
-- --
DROP TABLE IF EXISTS stu_opentry;
CREATE TABLE stu_opentry ( CREATE TABLE stu_opentry (
id int(11) NOT NULL AUTO_INCREMENT, id int(11) NOT NULL AUTO_INCREMENT,
id_stu int(11) NOT NULL, id_stu int(11) NOT NULL,
...@@ -51,6 +53,7 @@ FOREIGN KEY (id_ws) REFERENCES working_session(id) ON DELETE CASCADE ...@@ -51,6 +53,7 @@ FOREIGN KEY (id_ws) REFERENCES working_session(id) ON DELETE CASCADE
-- It creates a new try and notes down the try into the STU_OPENTRY memory table -- It creates a new try and notes down the try into the STU_OPENTRY memory table
-- additional notes: For the sake of efficiency, memory table STU_OPENTRY is updated -- additional notes: For the sake of efficiency, memory table STU_OPENTRY is updated
-- --
DROP PROCEDURE IF EXISTS newTry;
CREATE PROCEDURE newTry(idstu INT, idsup INT, idws INT) CREATE PROCEDURE newTry(idstu INT, idsup INT, idws INT)
MODIFIES SQL DATA MODIFIES SQL DATA
BEGIN BEGIN
...@@ -74,6 +77,7 @@ END;; ...@@ -74,6 +77,7 @@ END;;
-- --
-- It deletes current try for a given session -- It deletes current try for a given session
DROP PROCEDURE IF EXISTS deleteOpenTry;
CREATE PROCEDURE deleteOpenTry(ws INT) CREATE PROCEDURE deleteOpenTry(ws INT)
BEGIN BEGIN
DECLARE idopentry INT; DECLARE idopentry INT;
...@@ -92,17 +96,19 @@ END;; ...@@ -92,17 +96,19 @@ END;;
-- Integrity rule 1: A new session begins and in turn a new try is created -- Integrity rule 1: A new session begins and in turn a new try is created
-- Integrity rule 8: Any instruction with a new session has a "started" state -- Integrity rule 8: Any instruction with a new session has a "started" state
-- when: state COM, event a2 -- when: state COM, event a2
DROP TRIGGER IF EXISTS TRG_SESSION_NEW;
CREATE TRIGGER TRG_SESSION_NEW CREATE TRIGGER TRG_SESSION_NEW
AFTER INSERT ON working_session AFTER INSERT ON working_session
FOR EACH ROW FOR EACH ROW
thisTrigger: BEGIN thisTrigger: BEGIN
DECLARE idstu INT;
IF ((@TRIGGER_CHECKS = FALSE) IF ((@TRIGGER_CHECKS = FALSE)
OR (@TRIGGER_AFTER_INSERT_CHECKS = FALSE)) OR (@TRIGGER_AFTER_INSERT_CHECKS = FALSE))
AND (USER() = 'root@localhost') AND (USER() = 'root@localhost')
THEN THEN
LEAVE thisTrigger; LEAVE thisTrigger;
END IF; END IF;
DECLARE idstu INT;
SELECT DISTINCT M.id_stu INTO idstu SELECT DISTINCT M.id_stu INTO idstu
FROM FROM
...@@ -124,6 +130,7 @@ END;; ...@@ -124,6 +130,7 @@ END;;
-- when: state COM, event a4 -- when: state COM, event a4
-- current is to NULL (integrity rule 6) -- current is to NULL (integrity rule 6)
-- --
DROP TRIGGER IF EXISTS TRG_SESSION_CLOSED;
CREATE TRIGGER TRG_SESSION_CLOSED CREATE TRIGGER TRG_SESSION_CLOSED
AFTER UPDATE ON working_session AFTER UPDATE ON working_session
FOR EACH ROW FOR EACH ROW
...@@ -144,18 +151,20 @@ END;; ...@@ -144,18 +151,20 @@ END;;
-- Integrity rule 3: every event is required to have the id try whenver a try happens -- Integrity rule 3: every event is required to have the id try whenver a try happens
-- when: state COM, event a4 -- when: state COM, event a4
-- --
DROP TRIGGER IF EXISTS TRG_NEW_EVENT_ONSESSION;
CREATE TRIGGER TRG_NEW_EVENT_ONSESSION CREATE TRIGGER TRG_NEW_EVENT_ONSESSION
BEFORE INSERT ON action BEFORE INSERT ON action
FOR EACH ROW FOR EACH ROW
thisTrigger: BEGIN thisTrigger: BEGIN
DECLARE idstu INT;
DECLARE idtry INT;
IF ((@TRIGGER_CHECKS = FALSE) IF ((@TRIGGER_CHECKS = FALSE)
OR (@TRIGGER_BEFORE_INSERT_CHECKS = FALSE)) OR (@TRIGGER_BEFORE_INSERT_CHECKS = FALSE))
AND (USER() = 'root@localhost') AND (USER() = 'root@localhost')
THEN THEN
LEAVE thisTrigger; LEAVE thisTrigger;
END IF; END IF;
DECLARE idstu INT;
DECLARE idtry INT;
SET idstu=NEW.id_stu; SET idstu=NEW.id_stu;
SELECT id_opentry INTO idtry SELECT id_opentry INTO idtry
FROM FROM
...@@ -174,10 +183,15 @@ END;; ...@@ -174,10 +183,15 @@ END;;
-- when: state PAU, event a3 -- when: state PAU, event a3
-- Integrity rule 4: when a session is paused, last try must be discharged -- Integrity rule 4: when a session is paused, last try must be discharged
-- when: state SES, event a3 -- when: state SES, event a3
DROP TRIGGER IF EXISTS TRG_NEW_EVENT;
CREATE TRIGGER TRG_NEW_EVENT CREATE TRIGGER TRG_NEW_EVENT
AFTER INSERT ON action AFTER INSERT ON action
FOR EACH ROW FOR EACH ROW
thisTrigger: BEGIN thisTrigger: BEGIN
DECLARE idopentry INT;
DECLARE idsup_ws INT;
DECLARE idws INT;
IF ((@TRIGGER_CHECKS = FALSE) IF ((@TRIGGER_CHECKS = FALSE)
OR (@TRIGGER_AFTER_INSERT_CHECKS = FALSE)) OR (@TRIGGER_AFTER_INSERT_CHECKS = FALSE))
AND (USER() = 'root@localhost') AND (USER() = 'root@localhost')
...@@ -185,10 +199,6 @@ thisTrigger: BEGIN ...@@ -185,10 +199,6 @@ thisTrigger: BEGIN
LEAVE thisTrigger; LEAVE thisTrigger;
END IF; END IF;
DECLARE idopentry INT;
DECLARE idsup_ws INT;
DECLARE idws INT;
CASE NEW.type CASE NEW.type
WHEN 'Show' THEN WHEN 'Show' THEN
SELECT id_ws, id_sup, id_opentry INTO idws, idsup_ws, idopentry SELECT id_ws, id_sup, id_opentry INTO idws, idsup_ws, idopentry
...@@ -230,6 +240,7 @@ ALTER TABLE `working_session` ...@@ -230,6 +240,7 @@ ALTER TABLE `working_session`
-- when: state COM, event a4 -- when: state COM, event a4
-- current is to NULL (integrity rule 6) -- current is to NULL (integrity rule 6)
-- --
DROP TRIGGER IF EXISTS TRG_SESSION_CLOSING;
CREATE TRIGGER TRG_SESSION_CLOSING CREATE TRIGGER TRG_SESSION_CLOSING
BEFORE UPDATE ON working_session BEFORE UPDATE ON working_session
FOR EACH ROW FOR EACH ROW
...@@ -255,19 +266,21 @@ ALTER TABLE `action` ...@@ -255,19 +266,21 @@ ALTER TABLE `action`
-- --
-- Required for not closed sessions policy retrieving -- Required for not closed sessions policy retrieving
-- --
DROP TRIGGER IF EXISTS TRG_TRY_EVALUATED;
CREATE TRIGGER TRG_TRY_EVALUATED CREATE TRIGGER TRG_TRY_EVALUATED
AFTER UPDATE ON try AFTER UPDATE ON try
FOR EACH ROW FOR EACH ROW
thisTrigger: BEGIN thisTrigger: BEGIN
DECLARE idopentry INT;
DECLARE idws INT;
DECLARE ws_end DATE;
IF ((@TRIGGER_CHECKS = FALSE) IF ((@TRIGGER_CHECKS = FALSE)
OR (@TRIGGER_AFTER_UPDATE_CHECKS = FALSE)) OR (@TRIGGER_AFTER_UPDATE_CHECKS = FALSE))
AND (USER() = 'root@localhost') AND (USER() = 'root@localhost')
THEN THEN
LEAVE thisTrigger; LEAVE thisTrigger;
END IF; END IF;
DECLARE idopentry INT;
DECLARE idws INT;
DECLARE ws_end DATE;
SELECT id_ws, id_opentry,end INTO idws, idopentry, ws_end SELECT id_ws, id_opentry,end INTO idws, idopentry, ws_end
FROM FROM
stu_opentry stu_opentry
......
/* global sails, Picto, Supervisor, PictoCat, PictoTagSup, PictoExp */ /* global sails, Picto, Supervisor, PictoCat, PictoTag, PictoExp */
/** /**
* PictoController * PictoController
...@@ -125,14 +125,14 @@ module.exports = { ...@@ -125,14 +125,14 @@ module.exports = {
throw new Error('Picto not found'); throw new Error('Picto not found');
} }
PictoTagSup.create({ PictoTag.create({
tag: params.tag, tag: params.tag,
lang: params.lang, lang: params.lang,
picto: picto.id, picto: picto.id,
supervisor: supervisor.id supervisor: supervisor.id
}).then(function (pictoTagSup) { }).then(function (pictoTag) {
if (pictoTagSup) { if (pictoTag) {
res.ok(pictoTagSup); res.ok(pictoTag);
} else { } else {
res.serverError(); res.serverError();
} }
...@@ -153,16 +153,19 @@ module.exports = { ...@@ -153,16 +153,19 @@ module.exports = {
/** /**
* Removes a picto tag created by the supervisor * Removes a picto tag created by the supervisor
* @param {request} req {} (with pictoTagId specified in parameters) * @param {request} {
* "id_tag": 1234,
* "id_sup": 123
* }
* @param {response} res {} * @param {response} res {}
*/ */
del_tag: function (req, res) { del_tag: function (req, res) {
var params = req.params.all(); var params = req.params.all();
if (!params.id_tag) { if (!params.id_tag || !params.id_sup) {
res.badRequest(); res.badRequest();
} else { } else {
PictoTagSup.destroy({ id: params.id_tag }).then(function () { PictoTag.destroy({ id: params.id_tag, id_sup: params.id_sup }).then(function () {
res.ok(); res.ok();
}) })
.catch(function () { .catch(function () {
...@@ -171,17 +174,26 @@ module.exports = { ...@@ -171,17 +174,26 @@ module.exports = {
} }
}, },
// Destroy don't delete the picto, it removes the owner to students still having it /**
* Destroy don't delete the picto, it removes the link to students
* @param {request} {
* "id": 2343
* }
* @param {response} res {}
*/
destroy: function(req, res) { destroy: function(req, res) {
var params = req.params.all(); var params = req.params.all();
if (!params.id) { if (!params.id) {
return res.json(500, {error: "No id picto defined"}); res.badRequest();
} } else {
Picto.update({ id: params.id }, { owner: null}).exec(function (err, updated) { Picto.update({ id: params.id }, { owner: null}).then(function (updated) {
if (err) throw err; res.ok(updated[0]);
return res.json(updated[0]); })
.catch(function() {
res.serverError();
}); });
}
}, },
/** /**
......
/* global Student, PictoCoreCat, VStuLastInstruction, StuPicto, StuSup, sailsTokenAuth, sails, /* global Student, PictoCore, VStuLastInstruction, StuPicto, StuSup, sailsTokenAuth, sails,
Picto */ Picto */
/** /**
...@@ -141,34 +141,34 @@ module.exports = { ...@@ -141,34 +141,34 @@ module.exports = {
sails.log.debug('Student ' + created.id + ' created: ' + JSON.stringify(created)); sails.log.debug('Student ' + created.id + ' created: ' + JSON.stringify(created));
// Assign the initial collection of pictos to the student // Assign the initial collection of pictos to the student
PictoCoreCat.find() PictoCore.find()
.exec(function (pictoCoreCatError, pictoCoreCat) { .exec(function (pictoCoreError, pictoCore) {
var i; var i;
if (pictoCoreCatError || !pictoCoreCat || pictoCoreCat.length === 0) { if (pictoCoreError || !pictoCore || pictoCore.length === 0) {
sails.log.debug('PictoCoreCat: ' + pictoCoreCatError); sails.log.debug('PictoCore: ' + pictoCoreError);
return; return;
} }
sails.log.debug('PictoCoreCat Length: ' + pictoCoreCat.length); sails.log.debug('PictoCore Length: ' + pictoCore.length);
sails.log.debug(pictoCoreCat); sails.log.debug(pictoCore);
// Every picto from 'picto_core_cat' is going to be created // Every picto from 'picto_core_cat' is going to be created
// in 'stu_picto' // in 'stu_picto'
for (i = 0; i < pictoCoreCat.length; i++) { for (i = 0; i < pictoCore.length; i++) {
sails.log.debug('Loop: ' + i); sails.log.debug('Loop: ' + i);
sails.log.debug('Picto Category: ' + pictoCoreCat[i].category); sails.log.debug('Picto Category: ' + pictoCore[i].category);
sails.log.debug('User id: ' + created.id); sails.log.debug('User id: ' + created.id);
StuPicto.create({ StuPicto.create({
student: created.id, student: created.id,
picto: pictoCoreCat[i].picto, picto: pictoCore[i].picto,
attributes: { attributes: {
id_cat: pictoCoreCat[i].category, id_cat: pictoCore[i].category,
coord_x: pictoCoreCat[i].coord_x, coord_x: pictoCore[i].coord_x,
coord_y: pictoCoreCat[i].coord_y, coord_y: pictoCore[i].coord_y,
status: 'invisible', // Default, the pictos don't appear to the user status: 'invisible', // Default, the pictos don't appear to the user
color: pictoCoreCat[i].color color: pictoCore[i].color
} }
}) })
.exec(function (stuPictoError, added) { .exec(function (stuPictoError, added) {
...@@ -947,26 +947,13 @@ module.exports = { ...@@ -947,26 +947,13 @@ module.exports = {
var action = req.param('action'); var action = req.param('action');
var attributes = req.param('attributes'); var attributes = req.param('attributes');
var roomName = 'studentRoom' + attributes.id_stu;
sails.log.debug("Inside /stu/subscribe. Action: " + action);
if (req.isSocket) { if (req.isSocket) {
sails.log.debug("Inside /stu/subscribe - isSocket"); sails.hooks.rooms.subscribeToRoom(
sails.sockets.join(req.socket, roomName); sails.hooks.rooms.student(attributes.id_stu),
sails.io.sockets.in(roomName) req.socket
.clients(function (err, ids) { );
sails.log.debug("number of clients in room: " + ids.length);
if (!err)
sails.io.to(roomName)
.emit('update_peers', {
count: ids.length
});
});
res.json({
msg: "Subscribed to student " + roomName
});
} }
res.ok({msg: "Subscribed to student "});
}, },
// //
...@@ -976,10 +963,7 @@ module.exports = { ...@@ -976,10 +963,7 @@ module.exports = {
var action = req.param('action'); var action = req.param('action');
//var attributes = req.param('attributes'); //var attributes = req.param('attributes');
sails.log.debug("Inside /stu/unsubscribe. Action: " + action);
if (req.isSocket) { if (req.isSocket) {
sails.log.debug("Inside /stu/unsubscribe - isSocket");
var rooms = sails.sockets.socketRooms(req.socket); var rooms = sails.sockets.socketRooms(req.socket);
console.log("Subscribed rooms in socket: " + JSON.stringify(rooms)); console.log("Subscribed rooms in socket: " + JSON.stringify(rooms));
...@@ -1027,17 +1011,22 @@ module.exports = { ...@@ -1027,17 +1011,22 @@ module.exports = {
action: function (req, res) { action: function (req, res) {
var action = req.param('action'); var action = req.param('action');
var attributes = req.param('attributes'); var attributes = req.param('attributes');
var roomName = 'studentRoom' + attributes.id_stu;
sails.log.debug("Inside action. Student:" + attributes.id_stu); sails.log.debug("Inside action. Student:" + attributes.id_stu);
if (req.isSocket) { if (req.isSocket) {
sails.log.debug("websockets - room " + roomName); sails.log.debug("websockets - room " + roomName);
// BROADCAST to everyone subscribed to this student // BROADCAST to everyone subscribed to this student
sails.sockets.broadcast(roomName, 'action', { const socketToOmit = (req.isSocket) ? req.socket : undefined;
sails.hooks.events.broadcast(
sails.hooks.rooms.student(attributes.id_stu),
'action',
{
"action": action, "action": action,
"attributes": attributes "attributes": attributes
}); },
socketToOmit
);
var sup = null; var sup = null;
if (attributes.supervisor) sup = attributes.supervisor; if (attributes.supervisor) sup = attributes.supervisor;
...@@ -1077,20 +1066,21 @@ module.exports = { ...@@ -1077,20 +1066,21 @@ module.exports = {
config: function (req, res) { config: function (req, res) {
var action = req.param('action'); var action = req.param('action');
var attributes = req.param('attributes'); var attributes = req.param('attributes');
var roomName = 'studentRoom' + attributes.id_stu;
sails.log.debug("Inside config"); sails.log.debug("Inside config");
if (req.isSocket) { if (req.isSocket) {
sails.log.debug("Inside config - isSocket"); const socketToOmit = (req.isSocket) ? req.socket : undefined;
sails.hooks.events.broadcast(
sails.sockets.broadcast(roomName, 'config', { sails.hooks.rooms.student(attributes.id_stu),
'action',
{
"action": action, "action": action,
"attributes": attributes "attributes": attributes
}); },
socketToOmit
res.json({ );
} else {
res.ok({
msg: "Config " + action + " action from student " + attributes.id_stu msg: "Config " + action + " action from student " + attributes.id_stu
}); });
} }
......
// @TODO 357
module.exports = {
// Mostrar etiquetas propias del supervisor para un pictograma
// Blueprint
// GET /supervisor/:idSup/pictos/:idAclPicto/tags -> Tutor.find
// NO BORRAR: Necesario cuando hay más de 2 niveles en la URL
find: function(req, res){
var idAclPicto = req.param('idAclPicto');
// Comprobación de que se envían los campos
if(!idAclPicto){
return res.json(401, {err: 'Required field: ID of picto permission'});
}
// Crear tutor (en tabla tutor y supervisor)
SupPictoTag.find({
idAclPicto: idAclPicto
}).exec(
function (err, tags) {
if(err){
res.json(err.status, {err: err});
return;
}else{
res.json({tags: tags});
}
}
);
}
};
// @TODO 357
module.exports = {
// Crear teacher/supervisor
create: function(req, res){
var name = req.param('name');
var surname = req.param('surname');
var contactEmail = req.param('contactEmail');
var preferedLanguage = req.param('preferedLanguage');
var idOff = req.param('idOff');
// Comprobación de que se envían ambos campos
if(!name || !surname || !contactEmail || !preferedLanguage || !idOff){
return res.json(401, {err: 'Required fields: Name, surname, contact email, prefered language and Office ID'});
}
// Crear teacher (en tabla teacher y supervisor)
Teacher.create({
// id: "17", Es autoincrement
idOff: idOff,
supervisor:{
name: name,
surname: surname,
contactEmail: contactEmail,
preferedLanguage: preferedLanguage
}
}).exec(
function (err, teacher) {
if(err){
res.json(err.status, {err: err});
return;
}else{
res.json({teacher: teacher});
}
}
);
},
// Elimina teacher/supervisor
// CUSTOM Blueprint
// DELETE /teacher/:idSup -> Teacher.destroy
destroy: function(req, res){
var idSup = req.param('idSup');
// Comprobación de que se envían los campos
if(!idSup){
return res.json(400, {err: 'Required fields: Teacher/Supervisor ID'});
}
// Eliminar entrada de tutor
Teacher.destroy(
{"supervisor": idSup}
).exec(
function (err, teacher) {
if(err){
res.json(err.status, {err: err});
return;
}else{
// Eliminar entrada de supervisor
Supervisor.destroy(
idSup
).exec(
function (err, supervisor) {
if(err){
res.json(err.status, {err: err});
return;
}else{
res.json({
teacher: teacher,
supervisor: supervisor
});
}
}
);
}
}
);
}
};
// @TODO 357
module.exports = {
// Crear tutor/supervisor
// Blueprint
// POST /tutor -> Tutor.create
create: function(req, res){
var name = req.param('name');
var surname = req.param('surname');
var contactEmail = req.param('contactEmail');
var preferedLanguage = req.param('preferedLanguage');
// Comprobación de que se envían ambos campos
if(!name || !surname || !contactEmail || !preferedLanguage){
return res.json(401, {err: 'Required fields: Name, surname, contact email and prefered language'});
}
// Crear tutor (en tabla tutor y supervisor)
Tutor.create({
// id: "17", Es autoincrement
supervisor:{
name: name,
surname: surname,
contactEmail: contactEmail,
preferedLanguage: preferedLanguage
}
}).exec(
function (err, tutor) {
if(err){
res.json(err.status, {err: err});
return;
}else{
res.json({tutor: tutor});
}
}
);
},
// Elimina tutor/supervisor
// CUSTOM Blueprint
// DELETE /tutor/:idSup -> Tutor.destroy
destroy: function(req, res){
var idSup = req.param('idSup');
// Comprobación de que se envían los campos
if(!idSup){
return res.json(400, {err: 'Required fields: Tutor/Supervisor ID'});
}
// Eliminar entrada de tutor
Tutor.destroy(
{"supervisor": idSup}
).exec(
function (err, tutor) {
if(err){
res.json(err.status, {err: err});
return;
}else{
// Eliminar entrada de supervisor
Supervisor.destroy(
idSup
).exec(
function (err, supervisor) {
if(err){
res.json(err.status, {err: err});
return;
}else{
res.json({
tutor: tutor,
supervisor: supervisor
});
}
}
);
}
}
);
}
};
/**
* License.js
*
* @description :: TODO: You might write a short summary of how this model works and what it represents here.
* @docs :: http://sailsjs.org/#!documentation/models
*/
module.exports = {
tableName : 'license',
migrate : 'safe',
schema : true,
autoPK : false,
autoCreatedAt : false,
autoUpdatedAt : false,
attributes: {
id: {
type: "integer",
autoIncrement: true,
primaryKey: true,
unique: true
},
supervisor: { // relation 1 supervisor to N licences
type: 'integer',
required: true,
model: 'Supervisor',
columnName: 'id_sup'
},
number: {
type: 'string',
required: true
},
maxStu: { // maximum number of students that can be associated with this license
type: 'integer',
required: true,
columnName: 'max_stu'
},
duration: { // number of days per student that the license lasts
type: 'integer',
required: true
},
created: { // date when the license was created
type: 'date',
required: true
},
activations: {
collection: 'LicenseActivation',
via: 'license'
}
}
};
/**
* LicenseActivation.js
*
* @description :: Activations of terapeuthical access to students by spending license
* @docs :: http://sailsjs.org/#!documentation/models
*/
module.exports = {
identity : 'LicenseActivation',
tableName : 'license_activation',
migrate : 'safe',
schema : true,
autoPK : false,
autoCreatedAt : false,
autoUpdatedAt : false,
attributes: {
id: {
type: "integer",
autoIncrement: true,
primaryKey: true,
unique: true
},
stuSup: {
columnName: "id_stu_sup",
required: true,
type: "integer",
model: "StuSup"
},
license: {
columnName: "id_lic",
required: true,
type: "integer",
model: "License"
},
activation: {
columnName: 'activation',
type: 'date',
required: false
},
expiration: {
columnName: 'expiration',
type: 'date',
required: false
}
}
}
\ No newline at end of file
/**
* PendingRegistration.js
*
* @description :: This are official devices sold by us
* @docs :: http://sailsjs.org/#!documentation/models
*/
module.exports = {
tableName : 'pending_registration',
migrate : 'safe',
schema : true,
autoPK : false,
autoCreatedAt : false,
autoUpdatedAt : false,
attributes: {
idSup: {
columnName: 'id_sup',
type: "integer",
size: 11
},
hash: {
type: 'integer',
size: 32
},
timestamp: {
type: 'date'
}
}
};
...@@ -52,10 +52,6 @@ module.exports = { ...@@ -52,10 +52,6 @@ module.exports = {
collection: 'PictoTag', collection: 'PictoTag',
via: 'picto' via: 'picto'
}, },
tagsSup: {
collection: 'PictoTagSup',
via: 'picto'
},
pictoAcls: { // 1 Picto to N PictoAcl pictoAcls: { // 1 Picto to N PictoAcl
collection: 'PictoAcl', collection: 'PictoAcl',
via: 'picto' via: 'picto'
......
/** /**
* PictoAcl.js * PictoAcl.js
* *
* @description :: TODO: Write a short summary of how this model works and what it represents here. * @description :: THIS CLASS IS NOT BEING USED (candidate for removal)
* @docs :: http://sailsjs.org/#!documentation/models * @docs :: http://sailsjs.org/#!documentation/models
*/ */
......
...@@ -26,6 +26,12 @@ module.exports = { ...@@ -26,6 +26,12 @@ module.exports = {
required: true, required: true,
model: 'Picto' model: 'Picto'
}, },
category: {
columnName: 'id_cat_pic',
type: 'integer',
required: false,
model: 'Picto'
},
coord_x: { coord_x: {
type: 'integer', type: 'integer',
required: false required: false
...@@ -40,4 +46,3 @@ module.exports = { ...@@ -40,4 +46,3 @@ module.exports = {
} }
} }
}; };
/**
* PictoCoreCat.js
*
* @description :: This are the pictos that represent a category.
* This model is to store pos x and y when picto is presented as category
* @docs :: http://sailsjs.org/#!documentation/models
*/
module.exports = {
tableName : 'picto_core_cat',
migrate : 'safe',
schema : true,
autoPK : false,
autoCreatedAt : false,
autoUpdatedAt : false,
attributes: {
id: {
type: "integer",
autoIncrement: true,
primaryKey: true,
unique: true
},
picto: {
columnName: 'id_pic',
type: 'integer',
required: true,
model: 'Picto'
},
category: {
columnName: 'id_cat_pic',
type: 'integer',
required: true,
model: 'Picto'
},
coord_x: {
type: 'integer',
required: false
},
coord_y: {
type: 'integer',
required: false
},
color:{
type: 'integer',
required: false
}
}
};
...@@ -26,6 +26,12 @@ module.exports = { ...@@ -26,6 +26,12 @@ module.exports = {
type: "integer", type: "integer",
model: "Picto" model: "Picto"
}, },
supervisor:{ // FK de Tag. 1 a N
columnName: "id_sup",
required: false,
type: "integer",
model: "Supervisor"
},
tag: { // FK de Tag. 1 a N tag: { // FK de Tag. 1 a N
columnName: "tag", columnName: "tag",
required: true, required: true,
......
/**
* PictoTagSup.js
*
* @description :: TODO: Write a short summary of how this model works and what it represents here.
* @docs :: http://sailsjs.org/#!documentation/models
*/
module.exports = {
tableName : 'picto_tag_sup',
migrate : 'safe',
schema : true,
autoPK : false,
autoCreatedAt : false,
autoUpdatedAt : false,
attributes: {
id: {
type: "integer",
autoIncrement: true,
primaryKey: true,
unique: true
},
picto:{ // FK de Picto. 1 a N
columnName: "id_pic",
required: true,
type: "integer",
model: 'Picto'
},
supervisor:{ // FK de Tag. 1 a N
columnName: "id_sup",
required: true,
type: "integer",
model: "Supervisor"
},
tag:{
type: "string",
size: 20,
required: true
},
lang:{
type: "string",
size: 2,
required: true
}
}
};
\ No newline at end of file
/** /**
* StuOpenTry.js * StuOpenTry.js
* *
* @description :: TODO: Write a short summary of how this model works and what it represents here. * @description :: This model is the Active Record of the table stu_opentry,
* which is defined in triggers-sessions-integrity-constraints.sql. It is used
* to avoid losing initiated tries within a session.
*
* @docs :: http://sailsjs.org/#!documentation/models * @docs :: http://sailsjs.org/#!documentation/models
*/ */
module.exports = { module.exports = {
......
...@@ -80,6 +80,7 @@ ...@@ -80,6 +80,7 @@
"enlarge": "Enlarge", "enlarge": "Enlarge",
"enormous": "Enormous", "enormous": "Enormous",
"error_adding_picto": "Error adding picto", "error_adding_picto": "Error adding picto",
"error_deleting_picto": "Error deleting picto",
"error_downloading_supervisors": "Error downloading supervisors", "error_downloading_supervisors": "Error downloading supervisors",
"error_downloading_offices": "Error downloading offices", "error_downloading_offices": "Error downloading offices",
"error_only_support_images": "Only images are supported (JPG, PNG or GIF files)", "error_only_support_images": "Only images are supported (JPG, PNG or GIF files)",
...@@ -249,6 +250,7 @@ ...@@ -249,6 +250,7 @@
"supervisor_updated": "Supervisor updated", "supervisor_updated": "Supervisor updated",
"supervisors": "Therapist", "supervisors": "Therapist",
"surname": "Surname", "surname": "Surname",
"tag_deleted": "Tag deleted",
"tape_background": "Tape background", "tape_background": "Tape background",
"time_instruction_method": "Time instructions of method", "time_instruction_method": "Time instructions of method",
"time_hours": "Time: {{hours}} hours", "time_hours": "Time: {{hours}} hours",
......
...@@ -83,6 +83,7 @@ ...@@ -83,6 +83,7 @@
"expand_navigation": "Desplegar navegación", "expand_navigation": "Desplegar navegación",
"expression": "Expresión:", "expression": "Expresión:",
"error_adding_picto": "Error al añadir el picto", "error_adding_picto": "Error al añadir el picto",
"error_deleting_picto": "Error borrando el picto",
"error_downloading_supervisors": "Error al descargar los supervisores", "error_downloading_supervisors": "Error al descargar los supervisores",
"error_downloading_offices": "Error al descargar las oficinas", "error_downloading_offices": "Error al descargar las oficinas",
"error_only_support_images": "Sólo se soportan imágenes (ficheros JPG, PNG o GIF)", "error_only_support_images": "Sólo se soportan imágenes (ficheros JPG, PNG o GIF)",
...@@ -250,6 +251,7 @@ ...@@ -250,6 +251,7 @@
"supervisor_updated": "Supervisor actualizado", "supervisor_updated": "Supervisor actualizado",
"supervisors": "Terapeutas", "supervisors": "Terapeutas",
"surname": "Apellidos", "surname": "Apellidos",
"tag_deleted": "Etiqueta borrada",
"tape_background": "Fondo de la cinta", "tape_background": "Fondo de la cinta",
"time_hours": "Tiempo: {{hours}} horas", "time_hours": "Tiempo: {{hours}} horas",
"time_instruction_method": "Tiempo instrucciones del método", "time_instruction_method": "Tiempo instrucciones del método",
......
...@@ -180,7 +180,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr ...@@ -180,7 +180,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
$scope.close_ws = function (){ $scope.close_ws = function (){
$http $http
.post(config.backend+ '/workingsession/'+$scope.wsessions[0].id+'/close') .post(config.backend+ '/ws/'+$scope.wsessions[0].id+'/close')
.then( .then(
function(data, status, headers, config) { function(data, status, headers, config) {
...@@ -203,7 +203,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr ...@@ -203,7 +203,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
$scope.sessionRunning = true; $scope.sessionRunning = true;
$http $http
.post(config.backend+'/workingsession', { .post(config.backend+'/ws', {
"id_sup": $scope.user.id, "id_sup": $scope.user.id,
"id_stu": $scope.studentData.id, "id_stu": $scope.studentData.id,
"id_ins": $scope.selectedIns "id_ins": $scope.selectedIns
...@@ -239,7 +239,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr ...@@ -239,7 +239,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
$scope.update_ws = function (ws){ $scope.update_ws = function (ws){
$http $http
.put(config.backend+'/workingsession/' + ws.id, { "description" : ws.description }) .put(config.backend+'/ws/' + ws.id, { "description" : ws.description })
.then(function(data, status, headers, config) { .then(function(data, status, headers, config) {
...@@ -259,7 +259,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr ...@@ -259,7 +259,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
$scope.ws.end = new Date(); $scope.ws.end = new Date();
$http $http
.put(config.backend+'/workingsession/' + $scope.ws.id, { "end": $scope.ws.end, .put(config.backend+'/ws/' + $scope.ws.id, { "end": $scope.ws.end,
"id_stu": $scope.studentData.id "id_stu": $scope.studentData.id
}) })
.success(function(data, status, headers, config) { .success(function(data, status, headers, config) {
......
...@@ -48,16 +48,20 @@ dashboardControllers.controller('TagsCtrl', function TagsCtrl( ...@@ -48,16 +48,20 @@ dashboardControllers.controller('TagsCtrl', function TagsCtrl(
$scope.tagToAdd = ''; $scope.tagToAdd = '';
}) })
.error(function () { .error(function () {
// TODO show error with ngToast $translate('error_adding_tag').then(function (translation) {
ngToast.danger({ content: translation });
});
}); });
}; };
// Destroy own tag // Destroy own tag
$scope.del = function (tag) { $scope.del = function (tag) {
$http.delete(config.backend + '/picto/tag/' + tag.id) $http.delete(config.backend + '/picto/' + $scope.sup.id + '/tag/' + tag.id)
.success(function () { .success(function () {
var i; var i;
// TODO show success with ngToast $translate('tag_deleted').then(function (translation) {
ngToast.success({ content: translation });
});
// Eliminar de la vista: Se recorre el array de objetos json para buscarlo // Eliminar de la vista: Se recorre el array de objetos json para buscarlo
for (i = 0; i < $scope.ownTags.length; i++) { for (i = 0; i < $scope.ownTags.length; i++) {
if (tag.id === $scope.ownTags[i].id) { if (tag.id === $scope.ownTags[i].id) {
...@@ -66,7 +70,9 @@ dashboardControllers.controller('TagsCtrl', function TagsCtrl( ...@@ -66,7 +70,9 @@ dashboardControllers.controller('TagsCtrl', function TagsCtrl(
} }
}) })
.error(function () { .error(function () {
// TODO show error with ngToast $translate('error_deleting_tag').then(function (translation) {
ngToast.danger({ content: translation });
});
}); });
}; };
......
...@@ -50,7 +50,7 @@ module.exports.routes = { ...@@ -50,7 +50,7 @@ module.exports.routes = {
'POST /picto/tag': 'PictoController.add_tag', 'POST /picto/tag': 'PictoController.add_tag',
'POST /picto/exp': 'PictoController.change_exp', 'POST /picto/exp': 'PictoController.change_exp',
'DELETE /picto/:id': 'PictoController.destroy', 'DELETE /picto/:id': 'PictoController.destroy',
'DELETE /picto/tag/:id_tag': 'PictoController.del_tag', 'DELETE /picto/:id_sup/tag/:id_tag': 'PictoController.del_tag',
'GET /server/ping': 'ServerController.ping', 'GET /server/ping': 'ServerController.ping',
'GET /server/ping_session': 'ServerController.ping_session', 'GET /server/ping_session': 'ServerController.ping_session',
...@@ -103,7 +103,7 @@ module.exports.routes = { ...@@ -103,7 +103,7 @@ module.exports.routes = {
'GET /ws/:id_stu/year/:year': 'WorkingSessionController.per_year', 'GET /ws/:id_stu/year/:year': 'WorkingSessionController.per_year',
'GET /ws/:id_stu/month/:month': 'WorkingSessionController.per_month', 'GET /ws/:id_stu/month/:month': 'WorkingSessionController.per_month',
'GET /ws/:id_ws/tries': 'WorkingSessionController.tries', 'GET /ws/:id_ws/tries': 'WorkingSessionController.tries',
'PUT /workingsession/:id': 'WorkingSessionController.update', 'PUT /ws/:id': 'WorkingSessionController.update',
'POST /workingsession': 'WorkingSessionController.create', 'POST /ws': 'WorkingSessionController.create',
'POST /workingsession/:id_ws/close': 'WorkingSessionController.close' 'POST /ws/:id_ws/close': 'WorkingSessionController.close'
}; };
...@@ -70,9 +70,9 @@ describe('Picto API', function () { ...@@ -70,9 +70,9 @@ describe('Picto API', function () {
.end(done); .end(done);
}); });
}); });
it('DELETE /picto/tag/:id_tag', function (done) { it('DELETE /picto/:id_sup/tag/:id_tag', function (done) {
supervisorAgent supervisorAgent
.delete('/picto/tag/' + 1234) .delete('/picto/'+supervisorAgent.data.id+'/tag/' + 1234)
.send() .send()
.expect(200) .expect(200)
.end(done); .end(done);
......
/* eslint-disable no-console */ /* eslint-disable no-console */
var DATABASE_BACKUP_FILE = '/tmp/pictogram_test_backup.sql'; var DATABASE_BACKUP_FILE = '/tmp/pictogram_test_backup.sql';
var DATABASE_RESET_FILE = '../roles/database/files/init-ignoresymbolstix.sql'
var DATABASE_TESTDATA_FILE = '../roles/database/files/test-caja.sql'
var UPLOAD_FOLDER; var UPLOAD_FOLDER;
var UPLOAD_FOLDER_BACKUP; var UPLOAD_FOLDER_BACKUP;
var Agent = require('supertest').agent; var Agent = require('supertest').agent;
...@@ -17,6 +19,9 @@ before(function (serverLoadDone) { ...@@ -17,6 +19,9 @@ before(function (serverLoadDone) {
// Backup the whole database // Backup the whole database
childProcess.execSync('mysqldump -u pictodbuser -pp1KT015 pictodb > ' + DATABASE_BACKUP_FILE); childProcess.execSync('mysqldump -u pictodbuser -pp1KT015 pictodb > ' + DATABASE_BACKUP_FILE);
// Prepare with test data
childProcess.execSync('mysql -u pictodbuser -pp1KT015 pictodb < ' + DATABASE_RESET_FILE);
childProcess.execSync('mysql -u pictodbuser -pp1KT015 pictodb < ' + DATABASE_TESTDATA_FILE);
sails.lift({}, function (error) { sails.lift({}, function (error) {
var bcrypt = require('bcrypt-nodejs'); var bcrypt = require('bcrypt-nodejs');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment