Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
yotta
/
pictogram
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
60
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
4fafad3f
authored
May 08, 2017
by
Jose Antonio
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Working on Issue
#200
parent
ef5d94ba
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
114 additions
and
70 deletions
sails/roles/database/files/triggers-enrolments-integrity-constraints.sql
sails/src/CHANGES.md
sails/src/api/controllers/SceneController.js
sails/src/api/controllers/StudentController.js
sails/src/api/models/Scene.js
sails/src/api/models/Student.js
sails/src/assets/scripts/modules/student/controllers/collections.js
sails/src/assets/scripts/modules/student/views/collections.html
sails/src/config/policies.js
sails/src/config/routes.js
sails/roles/database/files/triggers-enrolments-integrity-constraints.sql
View file @
4fafad3f
...
...
@@ -51,9 +51,10 @@ thisTrigger: BEGIN
-- Load core collection for student
INSERT
INTO
scene
(
id_stu
,
id_sup
,
name
,
active
,
categories
)
VALUES
(
new
.
id
,
null
,
'with_categories'
,
TRUE
,
TRUE
);
INSERT
INTO
scene
(
id_stu
,
id_sup
,
name
,
categories
)
VALUES
(
new
.
id
,
null
,
'with_categories'
,
TRUE
);
SET
LID
=
LAST_INSERT_ID
();
CALL
scene_create_core
(
LID
,
new
.
id
);
UPDATE
student
SET
attributes
=
JSON_SET
(
attributes
,
"$.id_active_scene"
,
@
LID
);
END
;;
...
...
sails/src/CHANGES.md
View file @
4fafad3f
...
...
@@ -12,6 +12,14 @@ Changes to be performed manually in servers to upgrade
`bower install`
## Database
-
Delete active column from scene table (deleted from
`already done in dev`
sql
`create scene table`
statement)
`alter table scene drop active;`
-
Alter table scene to add ON DELETE CASCADE constraint
`ALTER TABLE `
scene
` ADD CONSTRAINT `
stu_scene_fk
` FOREIGN KEY (`
id_stu
`) REFERENCES `
student
` (`
id
`) ON DELETE CASCADE;`
-
Reload enrolments trigger
`source /vagrant/roles/database/files/triggers-enrolments-integrity-constraints.sql;`
(already done in dev)
...
...
@@ -25,7 +33,6 @@ Changes to be performed manually in servers to upgrade
`CREATE TABLE IF NOT EXISTS `
scene
` (
`
id
` int(11) NOT NULL AUTO_INCREMENT,
`
name
` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`
active
` boolean NOT NULL DEFAULT 0,
`
categories
` boolean NOT NULL DEFAULT 0,
`
id_sup
` int(11) DEFAULT NULL,
`
id_stu
` int(11) NOT NULL,
...
...
sails/src/api/controllers/SceneController.js
View file @
4fafad3f
...
...
@@ -17,13 +17,12 @@ module.exports = {
var
params
=
req
.
params
.
all
();
Scene
.
create
({
name
:
params
.
name
,
active
:
false
,
categories
:
params
.
categories
,
supervisor
:
params
.
id_sup
,
student
:
params
.
id_stu
}).
then
(
scene
=>
{
if
(
scene
.
categories
){
Scene
.
query
(
'CALL scene_create_core(?,?) '
,[
scene
.
id
,
scene
.
student
],
function
(
err
,
result
)
{
Scene
.
query
(
'CALL scene
º
_create_core(?,?) '
,[
scene
.
id
,
scene
.
student
],
function
(
err
,
result
)
{
// if (err) {
// return res.serverError("Could not call stored procedure create scene picto core "+err);
// } else {
...
...
@@ -46,45 +45,22 @@ module.exports = {
var
params
=
req
.
allParams
();
if
(
typeof
req
.
params
.
id
==
'undefined'
||
!
req
.
params
.
id
)
return
res
.
badRequest
(
"scene id not defined"
);
//If active field is true, check if other scene is active before
if
(
params
.
active
){
Scene
.
findOne
({
active
:
true
,
student
:
params
.
id_stu
})
.
then
(
function
(
scene
){
if
(
scene
.
id
!=
req
.
params
.
id
){
//Is not same scene so it might be deactivated
scene
.
active
=
false
;
scene
.
save
(
function
(
err
){
if
(
err
){
return
res
.
serverError
(
"Could not deactivate previos active_scene"
);
}
});
}
}).
catch
(
function
(
err
){
throw
new
Error
(
"Could not find active_scene, maybe there is not an active scene yet"
);
});
}
Scene
.
findOne
({
id
:
params
.
id
}).
then
(
function
(
scene
)
{
if
(
!
scene
)
{
res
.
badRequest
();
throw
new
Error
(
'Scene not found'
);
}
var
cat
=
scene
.
categories
;;
delete
scene
.
categories
;
//To avoid update these fields
delete
scene
.
supervisor
;
delete
scene
.
student
;
scene
.
name
=
params
.
name
||
scene
.
name
;
if
(
typeof
params
.
active
==
'undefined'
||
!
params
.
active
)
scene
.
active
=
scene
.
active
;
else
scene
.
active
=
params
.
active
;
scene
.
save
(
function
(
error
)
{
if
(
error
)
{
return
res
.
serverError
(
"Could not save scene "
+
error
);
}
var
cat
=
false
;
if
(
scene
.
active
){
cat
=
true
;
}
Student
.
findOne
({
id
:
scene
.
student
})
.
then
(
student
=>
{
student
.
attributes
.
categories
=
cat
;
...
...
@@ -98,7 +74,6 @@ module.exports = {
}
})
});
});
})
.
catch
(
function
(
err
)
{
...
...
@@ -158,7 +133,6 @@ module.exports = {
.
populate
(
'stuPictos'
).
then
(
function
(
scene
){
Scene
.
create
({
name
:
scene
.
name
,
active
:
false
,
categories
:
scene
.
categories
,
supervisor
:
scene
.
supervisor
,
student
:
scene
.
student
...
...
sails/src/api/controllers/StudentController.js
View file @
4fafad3f
...
...
@@ -826,24 +826,53 @@ module.exports = {
getActiveScene
:
function
(
req
,
res
){
if
(
typeof
req
.
params
.
id_stu
==
'undefined'
||
!
req
.
params
.
id_stu
)
return
res
.
badRequest
(
"id_stu not defined"
);
Scene
.
findOne
({
student
:
req
.
params
.
id_stu
,
active
:
true
})
.
then
(
function
(
scene
){
if
(
!
scene
)
return
res
.
badRequest
(
"Scene not found"
);
else
Scene
.
pictos
(
scene
.
id
,
function
(
err
,
pictos
){
if
(
err
){
return
res
.
serverError
(
"Error obtaining pictos: "
+
err
);
}
scene
.
pictos
=
pictos
;
return
res
.
ok
(
scene
);
});
}).
catch
(
function
(
err
){
return
res
.
serverError
(
"Error finding scene "
+
err
);
Student
.
findOne
({
id
:
req
.
params
.
id_stu
}).
then
(
function
(
student
){
Scene
.
findOne
({
id
:
student
.
id_active_scene
})
.
then
(
function
(
scene
){
if
(
!
scene
)
return
res
.
badRequest
(
"Scene not found"
);
else
Scene
.
pictos
(
scene
.
id
,
function
(
err
,
pictos
){
if
(
err
){
return
res
.
serverError
(
"Error obtaining pictos: "
+
err
);
}
scene
.
active
=
true
;
scene
.
pictos
=
pictos
;
return
res
.
ok
(
scene
);
});
}).
catch
(
function
(
err
){
return
res
.
serverError
(
"Error finding scene "
+
err
);
});
}).
catch
(
function
(
err
){
return
res
.
badRequest
(
"Student not found"
);
});
},
/**
* Update the active scene of a student
* @param {request} req {} (with id_stu and id_scene as url parameters)
* @param {response} res {}
*/
updateActiveScene
:
function
(
req
,
res
){
var
params
=
req
.
allParams
();
Student
.
findOne
({
id
:
params
.
id_stu
})
.
then
(
student
=>
{
student
.
attributes
.
id_active_scene
=
params
.
id_scene
;
delete
student
.
password
;
student
.
save
(
function
(
error
){
if
(
error
){
return
res
.
serverError
(
"Error updating active scene"
);
}
else
{
return
res
.
ok
();
}
})
}).
catch
(
function
(
err
){
return
res
.
badRequest
(
"Student not found"
);
});
},
/**
* Return all scenes of a student
* @param {request} req {} (with studentId as url parameter)
* @param {response} res {}
...
...
@@ -851,15 +880,25 @@ module.exports = {
getScenes
:
function
(
req
,
res
){
if
(
typeof
req
.
params
.
id_stu
==
'undefined'
||
!
req
.
params
.
id_stu
)
return
res
.
badRequest
(
"id_stu not defined"
);
Scene
.
find
({
student
:
req
.
params
.
id_stu
})
.
then
(
function
(
scenes
){
if
(
!
scenes
)
return
res
.
badRequest
(
"No scenes found"
);
else
return
res
.
ok
(
scenes
);
}).
catch
(
function
(
err
){
return
res
.
serverError
(
"Error finding scene "
+
err
);
});
Student
.
findOne
({
id
:
params
.
id_stu
})
.
then
(
student
=>
{
Scene
.
find
({
student
:
req
.
params
.
id_stu
})
.
then
(
function
(
scenes
){
if
(
!
scenes
){
return
res
.
serverError
(
"No scenes found"
);
}
else
{
scenes
.
forEach
(
function
(
scene
,
cb
){
scene
.
active
=
scene
.
id
==
student
.
attributes
.
id_active_scene
;
});
return
res
.
ok
(
scenes
);
}
}).
catch
(
function
(
err
){
return
res
.
serverError
(
"Error finding scene "
+
err
);
});
}).
catch
(
function
(
err
){
return
res
.
badRequest
(
"Student not found"
);
});
},
//
...
...
@@ -1248,24 +1287,24 @@ module.exports = {
upload_sound
:
function
(
req
,
res
)
{
var
soundFileName
;
var
soundDirectory
=
sails
.
config
.
pictogram
.
paths
.
pictoSoundDirectory
;
soundFileName
=
sails
.
config
.
pictogram
.
paths
.
getCustomPictoSoundFilename
(
req
.
params
.
id_stu
,
req
.
params
.
id_picto
);
soundFileName
=
sails
.
config
.
pictogram
.
paths
.
getCustomPictoSoundFilename
(
req
.
params
.
id_stu
,
req
.
params
.
id_picto
);
req
.
file
(
'file'
).
upload
({
maxBytes
:
1048576
,
dirname
:
soundDirectory
,
saveAs
:
soundFileName
},
function
whenDone
(
err
,
uploadedFiles
)
{
var
fs
=
require
(
'fs'
);
if
(
err
||
(
uploadedFiles
.
length
===
0
))
return
res
.
serverError
(
"Error uploading "
+
err
?
err
:
""
);
StuPicto
.
findOne
({
student
:
req
.
params
.
id_stu
,
picto
:
req
.
params
.
id_picto
})
.
then
((
sp
)
=>
{
if
(
!
sp
)
throw
Error
(
"Not found"
);
.
then
((
sp
)
=>
{
if
(
!
sp
)
throw
Error
(
"Not found"
);
sp
.
attributes
.
uri_sound
=
sails
.
config
.
pictogram
.
urls
.
getSoundUrl
(
soundFileName
);
sp
.
save
(
function
(
err
)
{
...
...
sails/src/api/models/Scene.js
View file @
4fafad3f
...
...
@@ -25,9 +25,6 @@ module.exports = {
type
:
"string"
,
size
:
100
},
active
:
{
type
:
"boolean"
},
categories
:
{
type
:
"boolean"
},
...
...
sails/src/api/models/Student.js
View file @
4fafad3f
...
...
@@ -162,6 +162,7 @@ module.exports = {
const
validAttributes
=
{};
const
defaultAttributes
=
{
categories
:
true
,
id_active_scene
:
null
,
input_feedback
:
{
vibration
:
true
,
read
:
false
,
...
...
@@ -236,6 +237,9 @@ module.exports = {
if
(
!
((
/^#
([
0-9a-f
]{3}){1,2}
$/i
).
test
(
validAttributes
.
tape_background
)))
{
delete
validAttributes
.
tape_background
;
}
if
(
typeof
validAttributes
.
id_active_scene
!==
'number'
)
{
delete
validAttributes
.
id_active_scene
;
}
}
sails
.
log
.
verbose
(
'Requested attributes for Student'
,
attributes
);
sails
.
log
.
verbose
(
'Valid attributes for Student'
,
validAttributes
);
...
...
sails/src/assets/scripts/modules/student/controllers/collections.js
View file @
4fafad3f
...
...
@@ -269,13 +269,11 @@ dashboardControllers.controller('StudentCollectionsCtrl', function StudentCollec
$http
.
put
(
config
.
backend
+
'/scene/'
+
scene
.
id
+
'/stu/'
+
$scope
.
studentData
.
id
,
{
name
:
scene
.
name
,
active
:
scene
.
active
,
id_stu
:
scene
.
student
})
.
success
(
function
(
scene
)
{
var
data
=
{
id
:
scene
.
id
,
name
:
scene
.
name
,
active
:
scene
.
active
,
categories
:
scene
.
categories
,
student
:
scene
.
student
,
supervisor
:
scene
.
supervisor
};
...
...
@@ -295,6 +293,28 @@ dashboardControllers.controller('StudentCollectionsCtrl', function StudentCollec
};
// Activate student scene
$scope
.
activate_scene
=
function
(
scene
)
{
$http
.
put
(
config
.
backend
+
'/stu/'
+
$scope
.
studentData
.
id
+
'/activeScene/'
+
scene
.
id
,
{})
.
success
(
function
()
{
var
data
=
{
id
:
scene
.
id
};
io
.
socket
.
post
(
'/scene'
,
{
action
:
'activate'
,
scene
:
data
},
function
()
{});
$translate
(
'scene_updated'
).
then
(
function
(
translation
)
{
ngToast
.
success
({
content
:
translation
});
});
$scope
.
loadScenesList
();
}).
error
(
function
()
{});
};
// Duplicate viewing scene
$scope
.
copy_scene
=
function
()
{
...
...
@@ -618,7 +638,7 @@ dashboardControllers.controller('StudentCollectionsCtrl', function StudentCollec
.
success
(
function
(
scene
)
{
var
data
=
{
name
:
scene
.
name
,
active
:
scene
.
activ
e
,
active
:
fals
e
,
categories
:
scene
.
categories
,
student
:
scene
.
student
,
supervisor
:
scene
.
supervisor
...
...
sails/src/assets/scripts/modules/student/views/collections.html
View file @
4fafad3f
...
...
@@ -323,7 +323,7 @@
<div
class=
"text-center"
>
<input
type=
"text"
class=
"editable scene-name text-center"
ng-model=
"viewingScene.name"
ng-blur=
"update_scene(viewingScene)"
>
<a
style=
"text-decoration:none"
popover=
"{{ 'scene_already_activated' | translate}}"
popover-trigger=
"mouseenter"
ng-if=
"viewingScene.active"
><span
class=
"label label-success"
><i
class=
"fa fa-star"
aria-hidden=
"true"
></i>
{{ 'scene_active' | translate }}
</span></a>
<a
style=
"text-decoration:none"
popover=
"{{ 'scene_activate' | translate}}"
popover-trigger=
"mouseenter"
ng-if=
"!viewingScene.active"
ng-click=
"viewingScene.active=true;
upd
ate_scene(viewingScene)"
><span
class=
"label label-default"
><i
class=
"fa fa-star-o"
aria-hidden=
"true"
></i>
{{ 'scene_inactive' | translate }}
</span></a>
<a
style=
"text-decoration:none"
popover=
"{{ 'scene_activate' | translate}}"
popover-trigger=
"mouseenter"
ng-if=
"!viewingScene.active"
ng-click=
"viewingScene.active=true;
activ
ate_scene(viewingScene)"
><span
class=
"label label-default"
><i
class=
"fa fa-star-o"
aria-hidden=
"true"
></i>
{{ 'scene_inactive' | translate }}
</span></a>
</div>
<hr>
...
...
sails/src/config/policies.js
View file @
4fafad3f
...
...
@@ -127,7 +127,8 @@ module.exports.policies = {
unlink_supervisor
:
[
'tokenAuth'
,
'isSupAdmin'
],
delete_picto
:
[
'tokenAuth'
,
'isSupervisorOfStudent'
],
getActiveScene
:
[
'tokenAuth'
],
getScenes
:
[
'tokenAuth'
]
getScenes
:
[
'tokenAuth'
],
updateActiveScene
:
[
'tokenAuth'
,
'isSupervisorOfStudent'
]
},
LicenseController
:
{
...
...
sails/src/config/routes.js
View file @
4fafad3f
...
...
@@ -104,6 +104,7 @@ module.exports.routes = {
'PUT /stu/:id_stu/legend/:legend_value'
:
'StudentController.update_legend'
,
'PUT /stu/:id_stu/picto'
:
'StudentController.update_picto'
,
'PUT /stu/:id_stu/cat'
:
'StudentController.update_category'
,
'PUT /stu/:id_stu/activeScene/:id_scene'
:
'StudentController.updateActiveScene'
,
'POST /stu/login'
:
'StudentController.login'
,
'POST /stu'
:
'StudentController.create'
,
'POST /stu/upload'
:
'StudentController.upload'
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment