Merge remote-tracking branch 'origin/master'

parents 7467a422 7c4d356a
...@@ -628,6 +628,20 @@ ALTER TABLE `working_session` ...@@ -628,6 +628,20 @@ ALTER TABLE `working_session`
-- Estructura para la vista `v_stu_last_instruction` -- Estructura para la vista `v_stu_last_instruction`
-- --
CREATE ALGORITHM=UNDEFINED
VIEW `v_stu_last_ws_time` AS
SELECT M.`id_stu`AS id_stu,
MAX(WS.begin) AS time
FROM
`working_session` AS WS join
`instruction` AS I join
`method` AS M
WHERE
WS.`id_ins` =I.`id`
and I.`id_met` = M.`id`
group by M.`id_stu`;
CREATE ALGORITHM=UNDEFINED CREATE ALGORITHM=UNDEFINED
VIEW `v_stu_last_instruction` AS VIEW `v_stu_last_instruction` AS
select select
...@@ -642,18 +656,9 @@ VIEW `v_stu_last_instruction` AS ...@@ -642,18 +656,9 @@ VIEW `v_stu_last_instruction` AS
`working_session` AS WS join `working_session` AS WS join
`instruction` AS I join `instruction` AS I join
`method` AS M join `method` AS M join
(SELECT M.`id_stu`AS id_stu, `v_stu_last_ws_time` AS LAST_WS
MAX(WS.begin) AS TIME
FROM
`working_session` AS WS join
`instruction` AS I join
`method` AS M
WHERE
WS.`id_ins` =I.`id`
and I.`id_met` = M.`id`
group by M.`id_stu`) AS LAST_WS
WHERE WHERE
LAST_WS.TIME = WS.begin and LAST_WS.time = WS.begin and
LAST_WS.id_stu = M.`id_stu` and LAST_WS.id_stu = M.`id_stu` and
WS.`id_ins` =I.`id` WS.`id_ins` =I.`id`
and I.`id_met` = M.`id`; and I.`id_met` = M.`id`;
......
...@@ -18,7 +18,7 @@ module.exports = { ...@@ -18,7 +18,7 @@ module.exports = {
} }
Picto.categories(req.params.id, req.params.id_cat, function(err, categories) { Picto.categories(req.params.id, req.params.id_cat, function(err, categories) {
if (err) throw err; if (err) return res.json(500, {error: "Cannot retrieve categories"});
return res.json(categories); return res.json(categories);
}); });
}, },
...@@ -31,7 +31,7 @@ module.exports = { ...@@ -31,7 +31,7 @@ module.exports = {
return res.json(500, {error: "No category defined"}); return res.json(500, {error: "No category defined"});
} }
Picto.fromcategory(req.params.id, req.params.id_cat, function(err, pictos) { Picto.fromcategory(req.params.id, req.params.id_cat, function(err, pictos) {
if (err) throw err; if (err) return res.json(500, {error: "Cannot retrieve pictos"});
return res.json(pictos); return res.json(pictos);
}); });
}, },
...@@ -43,7 +43,7 @@ module.exports = { ...@@ -43,7 +43,7 @@ module.exports = {
return res.json(500, {error: "Not enough data: picto, supervisor, tag and lang"}); return res.json(500, {error: "Not enough data: picto, supervisor, tag and lang"});
} }
PictoTagSup.create(params).exec(function (err, created) { PictoTagSup.create(params).exec(function (err, created) {
if (err) throw err; if (err) return res.json(500, {error: "Cannot add tag"});
return res.json(created); return res.json(created);
}); });
}, },
...@@ -113,7 +113,7 @@ module.exports = { ...@@ -113,7 +113,7 @@ module.exports = {
req.body.filename = sailsHash.hashCode(req.body.filename + Date().toString()) + '.' + req.body.extension; req.body.filename = sailsHash.hashCode(req.body.filename + Date().toString()) + '.' + req.body.extension;
var uploadFile = req.file('file'); var uploadFile = req.file('file');
var dirUpload = path.join(process.cwd(), '../upload/' + req.body.folder); var dirUpload = path.join(process.cwd(), '/assets/upload/' + req.body.folder);
uploadFile.upload({ uploadFile.upload({
dirname: dirUpload, dirname: dirUpload,
...@@ -137,7 +137,7 @@ module.exports = { ...@@ -137,7 +137,7 @@ module.exports = {
function(){ function(){
fs.exists(file, function(exists) { fs.exists(file, function(exists) {
if (exists) { if (exists) {
console.log("Existe el archivo"); console.log("Existe el archivo " + file);
clearInterval(interval); clearInterval(interval);
// 1) Build the picto object to add // 1) Build the picto object to add
......
...@@ -289,18 +289,19 @@ module.exports = { ...@@ -289,18 +289,19 @@ module.exports = {
// pictos // pictos
// returns all the supervisor's pictos // returns all the supervisor's pictos
pictos: function(req, res){ pictos: function(req, res){
var idSup = req.params.id; var idSup = req.params.id;
Supervisor.findOne(idSup).exec(function(err, sup) { Supervisor.findOne(idSup).exec(function(err, sup) {
if(err)
return res.json(500, {error: 'DB error'});
if (sup){ if (sup){
Picto.find({owner: idSup}).populate('expressions', {lang: sup.lang}).exec(function(err, pictos){ Picto.find({owner: idSup}).populate('expressions', {lang: sup.lang}).exec(function(err, pictos){
if(err) if(err)
res.json(500, {error: 'DB error'}); return res.json(500, {error: 'DB error'});
if(pictos) if(pictos)
res.json(200, pictos); return res.json(200, pictos);
else else
res.json(500, {error: 'No pictos found'}); return res.json(500, {error: 'No pictos found'});
}); });
} }
}); });
......
...@@ -73,7 +73,7 @@ module.exports = { ...@@ -73,7 +73,7 @@ module.exports = {
Supervisor.findOne(id_sup).exec(function(err, sup) { Supervisor.findOne(id_sup).exec(function(err, sup) {
if (err) { if (err) {
console.log("Error retrieving categories for supervisor " + id_sup + ": " + err); console.log("Error retrieving categories for supervisor " + id_sup + ": " + err);
return callback(err, {}); return callback(err, []);
} }
// 0 for the main categories --> null in DB // 0 for the main categories --> null in DB
...@@ -81,7 +81,7 @@ module.exports = { ...@@ -81,7 +81,7 @@ module.exports = {
PictoCat.find({id_supercat: id_cat}).populate('exps', {lang: sup.lang}).exec(function(err, pictoCats) { PictoCat.find({id_supercat: id_cat}).populate('exps', {lang: sup.lang}).exec(function(err, pictoCats) {
if (err || !pictoCats || pictoCats.length == 0) if (err || !pictoCats || pictoCats.length == 0)
return callback(err, {}); return callback(err, []);
else else
return callback(err, pictoCats); return callback(err, pictoCats);
}); });
...@@ -95,12 +95,12 @@ module.exports = { ...@@ -95,12 +95,12 @@ module.exports = {
Supervisor.findOne(id_sup).exec(function(err, sup) { Supervisor.findOne(id_sup).exec(function(err, sup) {
if (err) { if (err) {
console.log("Error retrieving categories for supervisor " + id_sup + ": " + err); console.log("Error retrieving categories for supervisor " + id_sup + ": " + err);
return callback(err, {}); return callback(err, []);
} }
Picto.find({category: id_cat}).populate('expressions', {lang: sup.lang}).exec(function(err, pictos) { Picto.find({category: id_cat}).populate('expressions', {lang: sup.lang}).exec(function(err, pictos) {
if (err || !pictos || pictos.length == 0) if (err || !pictos || pictos.length == 0)
return callback(err, {}); return callback(err, []);
else else
return callback(err, pictos); return callback(err, pictos);
}); });
......
...@@ -190,6 +190,9 @@ tr:hover .ops a{ ...@@ -190,6 +190,9 @@ tr:hover .ops a{
margin-top: 10px; margin-top: 10px;
margin-left: 10px; margin-left: 10px;
margin-bottom: 0; margin-bottom: 0;
width: 50px;
height: 50px;
overflow: hidden;
} }
/* Estilos para la cabecera del alumno */ /* Estilos para la cabecera del alumno */
...@@ -201,8 +204,7 @@ tr:hover .ops a{ ...@@ -201,8 +204,7 @@ tr:hover .ops a{
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
#student_header .img_profile{ #student_header .img_profile{
margin-top: 10px; margin: 10px;
margin-bottom: 0;
} }
#student_header .tabs_student{ #student_header .tabs_student{
......
...@@ -52,9 +52,11 @@ dashboardControllers.controller('AddPictoCtrl', function ($scope, $modalInstance ...@@ -52,9 +52,11 @@ dashboardControllers.controller('AddPictoCtrl', function ($scope, $modalInstance
.get(config.backend+'/sup/'+ $scope.sup.id +'/pic_fromcategory/' + id_cat) .get(config.backend+'/sup/'+ $scope.sup.id +'/pic_fromcategory/' + id_cat)
.success(function(data, status, headers, config) { .success(function(data, status, headers, config) {
// Add to list // Add to list
$scope.pictos = data; if (data)
$scope.pictos = data;
else $scope.pictos = [];
//console.log(JSON.stringify($scope.pictos)); //console.log(JSON.stringify($scope.pictos));
console.log("Pictos listed" + data); console.log("Pictos listed" + JSON.stringify(data));
}) })
.error(function(data, status, headers, config) { .error(function(data, status, headers, config) {
console.log("Error from API: " + data.error); console.log("Error from API: " + data.error);
...@@ -66,11 +68,14 @@ dashboardControllers.controller('AddPictoCtrl', function ($scope, $modalInstance ...@@ -66,11 +68,14 @@ dashboardControllers.controller('AddPictoCtrl', function ($scope, $modalInstance
// TEST --> change with real supervisor pictos // TEST --> change with real supervisor pictos
// //
$scope.load_own_pictos = function (){ $scope.load_own_pictos = function (){
$scope.source = 'ownpictos';
$http $http
.get(config.backend+'/sup/'+ $scope.sup.id +'/pictos') .get(config.backend+'/sup/'+ $scope.sup.id +'/pictos')
.success(function(data, status, headers, config) { .success(function(data, status, headers, config) {
// Add to list // Add to list
$scope.pictos = data; if (data)
$scope.pictos = data;
else $scope.pictos = [];
console.log(JSON.stringify($scope.pictos)); console.log(JSON.stringify($scope.pictos));
console.log("Pictos listed"); console.log("Pictos listed");
}) })
...@@ -87,7 +92,10 @@ dashboardControllers.controller('AddPictoCtrl', function ($scope, $modalInstance ...@@ -87,7 +92,10 @@ dashboardControllers.controller('AddPictoCtrl', function ($scope, $modalInstance
.get(config.backend+'/sup/'+ $scope.sup.id +'/pic_categories/' + id_cat) .get(config.backend+'/sup/'+ $scope.sup.id +'/pic_categories/' + id_cat)
.success(function(data, status, headers, config) { .success(function(data, status, headers, config) {
// Add to list // Add to list
$scope.symbolstxCats = data; if (data)
$scope.symbolstxCats = data;
else $scope.symbolstxCats = [];
console.log("Symbolstx categories recovered"); console.log("Symbolstx categories recovered");
}) })
.error(function(data, status, headers, config) { .error(function(data, status, headers, config) {
...@@ -114,7 +122,7 @@ dashboardControllers.controller('AddPictoCtrl', function ($scope, $modalInstance ...@@ -114,7 +122,7 @@ dashboardControllers.controller('AddPictoCtrl', function ($scope, $modalInstance
// Request folders of a category from the breadcrumbs (symbolstx) // Request folders of a category from the breadcrumbs (symbolstx)
// //
$scope.open_category_from_bc = function (id_cat) { $scope.open_category_from_bc = function (id_cat) {
$scope.source = 'symbolstx';
// Delete from breadcrumbs // Delete from breadcrumbs
for(var i=($scope.breadcrumbs.length-1); i>=0; i--){ for(var i=($scope.breadcrumbs.length-1); i>=0; i--){
if($scope.breadcrumbs[i].id == id_cat){ if($scope.breadcrumbs[i].id == id_cat){
...@@ -127,7 +135,7 @@ dashboardControllers.controller('AddPictoCtrl', function ($scope, $modalInstance ...@@ -127,7 +135,7 @@ dashboardControllers.controller('AddPictoCtrl', function ($scope, $modalInstance
$scope.load_pictos(id_cat); $scope.load_pictos(id_cat);
}; };
$scope.alert = { type: 'danger', msg: 'Category is full of pictos.', show: false }; $scope.alert = { type: 'danger', msg: 'Category is full of pictos.', show: false };
// //
// Close alert message // Close alert message
......
<div> <div>
<div class="modal-header"> <div class="modal-header">
<div class="btn-group"> <div class="btn-group">
<label class="btn btn-default" ng-model="source" btn-radio="'symbolstx'" ng-click="open_category_from_bc('0')">Symbolstx</label> <button class="btn btn-default" ng-model="source" uib-btn-radio="'symbolstx'" ng-click="open_category_from_bc('0')">Symbolstx</button>
<label class="btn btn-default" ng-model="source" btn-radio="'ownpictos'" ng-click="load_own_pictos()" translate>own_pictos</label> <button class="btn btn-default" ng-model="source" uib-btn-radio="'ownpictos'" ng-click="load_own_pictos()" translate>own_pictos</button>
</div> </div>
</div> </div>
<div class="modal-body"> <div class="modal-body">
...@@ -32,14 +32,12 @@ ...@@ -32,14 +32,12 @@
<!-- Botones para añadir picto nuevo --> <!-- Botones para añadir picto nuevo -->
<div ng-show="source == 'ownpictos'" id="upload_pictos"> <div ng-show="source == 'ownpictos'" id="upload_pictos">
<button class="btn btn-md">
<span class="glyphicon glyphicon-picture" type="file" ng-file-select="onPictoSelect($files)" ng-model="picFile" accept="image/*" popover="Subir imagen" popover-trigger="mouseenter"></span> <button style="border:none" class="glyphicon glyphicon-picture" type="file" ng-file-select="onPictoSelect($files)" ng-model="picFile" accept="image/*" popover="Subir imagen" popover-trigger="mouseenter"></button>
</button>
<button style="border:none" class="btn btn-md glyphicon glyphicon-camera" disabled="disabled"></button>
<button class="btn btn-md" disabled="disabled"> <button class="btn btn-md" disabled="disabled">
<span class="glyphicon glyphicon-camera"></span>
</button>
<button class="btn btn-md" disabled="disabled">
<span class="glyphicon glyphicon-pencil"></span> <span class="glyphicon glyphicon-pencil"></span>
</button> </button>
</div> </div>
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
<!-- Collection tab--> <!-- Collection tab-->
<div class="panel panel-default student_tab_panel"> <div class="panel panel-default student_tab_panel">
<div class="panel-body"> <div class="panel-body">
<h2 translate>student_pictograms</h2>
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<!-- Buscador de pictogramas --> <!-- Buscador de pictogramas -->
......
...@@ -13,18 +13,21 @@ ...@@ -13,18 +13,21 @@
</div> </div>
<!-- Agrupar los enlaces de navegación, los formularios y cualquier otro elemento que se pueda ocultar al minimizar la barra --> <!-- Agrupar los enlaces de navegación, los formularios y cualquier otro elemento que se pueda ocultar al minimizar la barra -->
<div class="row"> <div class="row">
<div class="col-md-1">
<div class="col-md-3 thumbnail img_profile"> <div class="thumbnail img_profile">
<img ng-src="{{studentData.pic}}" alt="" title="" /> <img ng-src="{{studentData.pic}}" alt="" title="" />
</div>
</div> </div>
<div class="col-md-6 "> <div class="col-md-11">
<h4>{{studentData.name}} {{studentData.surname}}</h4> <div style="margin-left: 5px"><h4>{{studentData.name}} {{studentData.surname}}</h4></div>
<p>{{studentData.current_method | translate}}</p><p>{{studentData.current_instruction | translate}}</p> <div style="margin-left: 5px" class="text-left">{{studentData.current_method | translate}}</div>
<div style="margin-left: 5px" class="text-left">{{studentData.current_instruction | translate}}</div>
</div> </div>
</div>
<div class="nav navbar-nav navbar-right tabs_student"> <div class="row">
<ul class="nav nav-tabs"> <div class="col-md-12">
<ul class="nav nav-tabs tabs_student">
<li role="presentation" ng-class="{'active' : nav.tab == 'collections'}"> <li role="presentation" ng-class="{'active' : nav.tab == 'collections'}">
<a href="/app/#/student/{{studentData.id}}/collections" ng-click="nav.tab = ''"><span class="glyphicon glyphicon-th" aria-hidden="true"></span> {{ 'collections' | translate }}</a> <a href="/app/#/student/{{studentData.id}}/collections" ng-click="nav.tab = ''"><span class="glyphicon glyphicon-th" aria-hidden="true"></span> {{ 'collections' | translate }}</a>
</li> </li>
...@@ -42,7 +45,7 @@ ...@@ -42,7 +45,7 @@
><span class="glyphicon glyphicon-cog" aria-hidden="true"></span> {{ 'setup' | translate }}</a> ><span class="glyphicon glyphicon-cog" aria-hidden="true"></span> {{ 'setup' | translate }}</a>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
</nav> </nav>
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
<!-- Instrucction tab--> <!-- Instrucction tab-->
<div class="panel panel-default student_tab_panel"> <div class="panel panel-default student_tab_panel">
<div class="panel-body"> <div class="panel-body">
<h2>Métodos</h2>
<!-- Select to add new method --> <!-- Select to add new method -->
<div class="form-group"> <div class="form-group">
<select class="form-control" name="method_select" id="method_select" ng-model="method_selected" ng-options="ma.name for ma in methods_available"> <select class="form-control" name="method_select" id="method_select" ng-model="method_selected" ng-options="ma.name for ma in methods_available">
......
<!-- Reports tab--> <!-- Reports tab-->
<div class="panel panel-default student_tab_panel"> <div class="panel panel-default student_tab_panel">
<div class="panel-body"> <div class="panel-body">
<h2>Informes</h2>
<div class="row"> <div class="row">
<h3>Sesiones</h3> <div class="col-md-12">
<h3>Sesiones</h3>
</div>
</div>
<div class="row">
<div class="col-md-4"> <div class="col-md-4">
<p>Totales:</p> <p>Totales:</p>
<ul> <ul>
...@@ -72,7 +73,11 @@ ...@@ -72,7 +73,11 @@
</div> </div>
<div class="row"> <div class="row">
<h3>Métodos / Instrucciones / Ensayos</h3> <div class="col-md-12">
<h3>Métodos / Instrucciones / Ensayos</h3>
</div>
</div>
<div class="row">
<!-- Totals --> <!-- Totals -->
<div class="col-md-4"> <div class="col-md-4">
...@@ -159,8 +164,11 @@ ...@@ -159,8 +164,11 @@
<div class="row"> <div class="row">
<h3>Ensayos</h3> <div class="col-md-12">
<h3>Ensayos</h3>
</div>
</div>
<div class="row">
<div class="col-md-4"> <div class="col-md-4">
<p>Totales:</p> <p>Totales:</p>
<ul> <ul>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
</button> </button>
<a class="navbar-brand" href="/app/#/students"><img src="img/logo_pictogram.png" alt="Pictogram" title="Pictogram" style="height: 70px;" /></a> <a class="navbar-brand" href="/app/#/students"><img src="img/logo_pictogram.png" alt="Pictogram" title="Pictogram" style="height: 50px;" /></a>
</div> </div>
...@@ -35,8 +35,8 @@ ...@@ -35,8 +35,8 @@
</div> </div>
<div class="nav navbar-nav navbar-right navbar-text"> <div class="nav navbar-nav navbar-right navbar-text">
<h4 class="text-right">{{user.getFullName()}}</h4> <div class="text-right">{{user.getFullName()}}</div>
<h5 class="text-right">{{user.office.name}}</h5> <div class="text-right">{{user.office.name}}</div>
</div> </div>
</div> </div>
......
...@@ -44,7 +44,7 @@ module.exports.policies = { ...@@ -44,7 +44,7 @@ module.exports.policies = {
list: ['tokenAuth', 'isAdmin'], list: ['tokenAuth', 'isAdmin'],
destroy: ['tokenAuth', 'isAdmin'], destroy: ['tokenAuth', 'isAdmin'],
students: ['tokenAuth'], students: ['tokenAuth'],
pictos: ['tokenAuth', 'isAdmin'], pictos: ['tokenAuth'],
upload: ['tokenAuth'] upload: ['tokenAuth']
}, },
DeviceController: { DeviceController: {
......
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