Subversion Repositories bacoAlunos

Rev

Rev 1683 | Rev 1714 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1670 jmachado 1
<%@ page import="jomm.dao.impl.AbstractDao" %>
2
<%@ page import="pt.estgp.estgweb.domain.RepositoryDocumentCollection" %>
3
<%@ page import="pt.estgp.estgweb.domain.RepositoryDocumentCollectionImpl" %>
4
<%@ page import="pt.estgp.estgweb.domain.RepositoryDocumentImpl" %>
5
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
6
<%@ page import="java.util.List" %>
7
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
8
<%@ taglib prefix="bacoTags" tagdir="/WEB-INF/tags" %>
9
<%@ taglib prefix="logic" uri="/WEB-INF/tlds/struts-logic.tld" %>
1683 jmachado 10
<%@ taglib prefix="html" uri="/WEB-INF/tlds/struts-html.tld" %>
11
<%@ taglib prefix="bean" uri="/WEB-INF/tlds/struts-bean.tld" %>
1670 jmachado 12
 
13
<div class="container-fluid">
14
 
15
    <%
16
 
17
        AbstractDao.getCurrentSession().beginTransaction();
18
        List<RepositoryDocumentCollection> collections = DaoFactory.getRepositoryDocumentCollectionDaoImpl().findAll();
19
 
20
        String documentRepositoryId = request.getParameter("repositoryDocumentId");
21
        if(documentRepositoryId != null)
22
        {
23
            RepositoryDocumentImpl repoEdited = (RepositoryDocumentImpl) DaoFactory.getRepositoryDocumentDaoImpl().get(Long.parseLong(documentRepositoryId));
24
            String docJson = repoEdited.toJson();
25
            request.setAttribute("docJson",docJson);
26
        }
27
 
28
        String collectionsJson = RepositoryDocumentCollectionImpl.toJson(collections);
29
 
30
        request.setAttribute("collectionsJson",collectionsJson);
31
 
32
    %>
33
 
34
    <script>
35
        var repoModule = angular.module('repoModule', []);
36
        GLOBAL_BacoAngularAppDependencies.push('repoModule');
37
 
38
 
39
        repoModule.controller('repoModuleController', function($scope) {
40
            $scope.collections = ${collectionsJson};
41
            <logic:empty name="docJson">
42
            $scope.doc = {
43
                "visible" : true
44
            };
45
            </logic:empty>
46
            <logic:notEmpty name="docJson">
47
            $scope.doc = ${docJson}
48
            </logic:notEmpty>
49
            $scope.setCloseDate = function (datePickerId) {
50
 
51
                $("#"+datePickerId).datetimepicker().on("dp.change", function (data) {
52
 
53
                    //alert($("#"+datePicker).find("input").val());
54
                    $scope.doc.closeDateStr = $("#"+datePickerId).find("input").val();
55
                    $scope.$apply();
56
 
57
                });
58
            }
59
            $scope.setPublishDate = function (datePickerId) {
60
 
61
                $("#"+datePickerId).datetimepicker().on("dp.change", function (data) {
62
 
63
                    //alert($("#"+datePicker).find("input").val());
64
                    $scope.doc.publishDateStr = $("#"+datePickerId).find("input").val();
65
                    $scope.$apply();
66
 
67
                });
68
            }
69
            $scope.newAuthor = function()
70
            {
71
                if(!$scope.doc.authorsJson)
72
                {
73
                    $scope.doc.authorsJson = {};
74
                }
75
                if(!$scope.doc.authorsJson.persons)
76
                {
77
                    $scope.doc.authorsJson.persons = [];
78
                }
79
                $scope.doc.authorsJson.persons.push({});
80
            }
81
            $scope.newContributor = function()
82
            {
83
                if(!$scope.doc.contributorsJson)
84
                {
85
                    $scope.doc.contributorsJson = {};
86
                }
87
                if(!$scope.doc.contributorsJson.persons)
88
                {
89
                    $scope.doc.contributorsJson.persons = [];
90
                }
91
                $scope.doc.contributorsJson.persons.push({});
92
            }
93
            $scope.submitForm = function()
94
            {
95
                widgetCallWithActionParameters(
96
                        "<%=request.getContextPath()%>/user/repositoryDoc.do",
97
                        "saveRepositoryDocument",
98
                        {
99
                            "doc" : JSON.stringify($scope.doc),
100
                            "uploadedFiles" : JSON.stringify($scope.jsonFiles)
101
                        },
102
                        "#repoModule",
1675 jmachado 103
                function(json)
104
                {
105
                    $scope.doc = json;
106
                    $scope.jsonFiles = {"service":"ok","uploadedFiles": [] };
107
                    $scope.$apply();
1670 jmachado 108
 
1675 jmachado 109
                    $("#savedOpenNew").show();
110
                    $("#docEditPanel").hide();
1670 jmachado 111
                });
112
            }
1675 jmachado 113
            $scope.backEdit = function()
114
            {
115
                $("#savedOpenNew").hide();
116
                $("#docEditPanel").show();
117
            }
1670 jmachado 118
 
119
 
120
            //<!--Seccao de uploadedFiles-->
121
            //EVENTO DE CHANGE PARA PUXAR DADOS PARA O MODELO
122
            $scope.jsonFiles = {"service":"ok","uploadedFiles": [] };
123
            $(document).ready(function(){
124
                $("#UPLOADED_FILES_RESULT").change(function()
125
                {
126
                    var uploadedIncomingJson = JSON.parse($("#UPLOADED_FILES_RESULT").val());
127
                    for(var i in uploadedIncomingJson.uploadedFiles)
128
                    {
129
                        var file = uploadedIncomingJson.uploadedFiles[i];
1675 jmachado 130
                        file.visible = true;
131
                        file.accessControl = "resource.access.publicDomain";
1670 jmachado 132
                        angular.element($("#repoModule")).scope().jsonFiles.uploadedFiles.push(file);
133
                    }
134
                    angular.element($("#repoModule")).scope().$apply();
135
                });
1675 jmachado 136
 
137
                $("#DOCUMENT_FILES_RESULT").change(function()
138
                {
139
                    var uploadedIncomingJson = JSON.parse($("#DOCUMENT_FILES_RESULT").val());
140
 
141
                    var file = uploadedIncomingJson.uploadedFiles[0];
142
                    file.id = uploadedIncomingJson.token;
143
 
144
 
145
                    //Find document remove it from documents List add to uploadFiles
146
                    var doc = angular.element($("#repoModule")).scope().doc;
147
                    for(var i in doc.repositoryDocumentFiles)
148
                    {
149
                        if(doc.repositoryDocumentFiles[i].id == file.id)
150
                        {
151
                            var repoDoc = doc.repositoryDocumentFiles[i];
152
                            doc.repositoryDocumentFiles.splice(i,1);
153
                            file.title = repoDoc.title;
154
                            file.visible = repoDoc.visible;
155
                            file.description = repoDoc.description;
156
                            file.accessControl = repoDoc.repositoryFileProxy.repositoryFile.accessControl;
157
                            file.repositoryStream = repoDoc.repositoryFileProxy.repositoryStream;
158
                            break;
159
                        }
160
 
161
                    }
162
 
163
                    angular.element($("#repoModule")).scope().jsonFiles.uploadedFiles.push(file);
164
                    angular.element($("#repoModule")).scope().$apply();
165
                });
1670 jmachado 166
            });
167
            $scope.removeFileFromModel = function($index)
168
            {
169
                $scope.jsonFiles.uploadedFiles.splice($index,1);
170
            }
1675 jmachado 171
            $scope.setDocumentFileInvisible = function(docFile)
172
            {
173
                docFile.visible=false;
174
                docFile.repositoryFileProxy.repositoryFile.accessControl ="resource.access.privateDomain";
175
            }
176
            $scope.setDocumentFileVisible = function(docFile)
177
            {
178
                docFile.visible=true;
179
                alert("As permissões do ficheiro estão definidas como privadas, por favor escolha as permissões novas.");
180
                docFile.repositoryFileProxy.repositoryFile.accessControl ="resource.access.privateDomain";
181
            }
182
 
1670 jmachado 183
            //<!--Seccao de uploadedFiles-->
184
        });
185
    </script>
186
 
187
 
188
    <div id="repoModule"
189
         ng-app="repoModule"
190
         ng-controller="repoModuleController"
191
         class="form-horizontal">
192
 
1675 jmachado 193
 
194
        <div id="savedOpenNew" class="panel panel-default" style="display: none">
195
            <div class="panel-body">
196
                <div class="web-messages"></div>
197
                <hr/>
198
                <div class="row">
199
                    <div class="col-md-4">
200
                        <button class="btn btn-default btn-lg btn-block btn-huge" ng-click="backEdit()"><span class="glyphicon glyphicon-chevron-left"></span> Voltar à edição</button>
201
                    </div>
202
                    <div class="col-md-4">
1683 jmachado 203
                        <html:link styleClass="btn btn-success btn-lg btn-block btn-huge" action="/user/repositoryEditDocument">Adicionar outro documento <span class="glyphicon glyphicon-chevron-right"></span></html:link>
1675 jmachado 204
                    </div>
205
                </div>
206
                <hr/>
207
                <div class="row">
208
                    <div class="col-md-4">
1683 jmachado 209
                        <html:link styleClass="btn btn-danger btn-lg btn-block btn-huge" action="/user/homePae">Sair</html:link>
1675 jmachado 210
                    </div>
211
                </div>
212
 
213
            </div>
214
        </div>
215
        <div id="docEditPanel" class="panel panel-default">
1670 jmachado 216
            <div class="panel-heading">
217
                Criar um novo documento digital
218
            </div>
219
            <div class="panel-body">
1675 jmachado 220
                <div class="web-messages"></div>
221
                <hr/>
1670 jmachado 222
                <input class="form-control" type="hidden" ng-model="doc.id">
223
 
224
                <div class="form-group">
225
                    <label class="col-md-2 control-label">Visivel</label>
226
                    <div class="col-md-2">
227
                        <select class="form-control chosenOff" type="text" ng-model="doc.visible" ng-options="o.v as o.n for o in [{ n: 'Visivel', v: true }, { n: 'Invisivel', v: false }]">>
228
 
229
                        </select>
230
                    </div>
231
                </div>
232
                <div class="form-group">
233
                    <label class="col-md-2 control-label">ID Interno</label>
234
                    <div class="col-md-10">
235
                        <input class="form-control" type="text" ng-model="doc.internalIdentifier">
236
                    </div>
237
                </div>
238
 
239
                <div class="form-group">
240
                    <label class="col-md-2 control-label">Coleção</label>
241
                    <div class="col-md-10">
1675 jmachado 242
                        <select ng-model="doc.collection.id" class="form-control chosenOff" ng-options="c.id as c.pathName for c in collections"></select>
1670 jmachado 243
                    </div>
244
                </div>
245
 
246
                <div class="form-group">
247
                    <label class="control-label col-sm-2" for="pubdate">Data de Publicação</label>
248
                    <div class="col-sm-2">
249
                        <div class='input-group date datetimepicker' id="publishDatePicker" ng-click="setPublishDate('publishDatePicker')">
250
                            <input ng-model="doc.publishDateStr" type="text" id="pubdate" class="form-control"/>
251
                            <span class="input-group-addon">
252
                                <span class="glyphicon glyphicon-calendar"></span>
253
                            </span>
254
                        </div>
255
                    </div>
256
                    <div class="col-sm-2">
257
                        <button  type="button" class="btn btn-danger" onclick="$('#pubdate').val('')"><span class="glyphicon glyphicon-remove"></span></button>
258
                    </div>
259
                </div>
260
 
261
                <div class="form-group">
262
                    <label class="control-label col-sm-2" for="closedate">Data de Fim (se aplicável)</label>
263
                    <div class="col-md-2">
264
                        <div class='input-group date datetimepicker' id="closeDatePicker" ng-click="setCloseDate('closeDatePicker')">
265
                            <input type="text" ng-model="doc.closeDateStr" class="form-control" id="closedate"/>
266
                            <span class="input-group-addon">
267
                                <span class="glyphicon glyphicon-calendar"></span>
268
                            </span>
269
                        </div>
270
                    </div>
271
                    <div class="col-sm-2">
272
                        <button  type="button" class="btn btn-danger" onclick="$('#closedate').val('')"><span class="glyphicon glyphicon-remove"></span></button>
273
                    </div>
274
                </div>
275
 
276
                <div class="form-group">
277
                    <label class="col-md-2 control-label">Título</label>
278
                    <div class="col-md-10">
279
                        <input class="form-control" type="text" ng-model="doc.title">
280
                    </div>
281
                </div>
282
 
283
                <div class="form-group">
284
                    <label class="col-md-2 control-label">SubTitulo</label>
285
                    <div class="col-md-10">
286
                        <input class="form-control" type="text" ng-model="doc.subtitle">
287
                    </div>
288
                </div>
289
 
290
                <div class="form-group">
291
                    <label class="col-md-2 control-label">Descrição</label>
292
                    <div class="col-md-10">
293
                        <textarea rows="6" class="form-control" ng-model="doc.description">
294
 
295
                        </textarea>
296
                    </div>
297
                </div>
298
 
299
 
300
 
301
                <div class="form-group">
302
                    <label class="col-md-2 control-label">Entidade Publicadora</label>
303
                    <div class="col-md-10">
304
                        <input type="text" class="form-control" ng-model="doc.publisher">
305
                    </div>
306
                </div>
307
 
308
                <h2 class="well well-sm clearfix">
309
                    Autores
310
                    <button class="btn btn-success pull-right" ng-click="newAuthor()"><span class="glyphicon glyphicon-plus"/></button>
311
                </h2>
312
 
313
                <div class="panel-body" ng-repeat="a in doc.authorsJson.persons">
314
                    <div class="form-group">
315
                        <label class="col-md-2 control-label">Apelido</label>
316
                        <div class="col-md-10">
317
                            <input class="form-control" type="text" ng-model="a.lastName">
318
                        </div>
319
                    </div>
320
                    <div class="form-group">
321
                        <label class="col-md-2 control-label">Primeiros Nomes</label>
322
                        <div class="col-md-10">
323
                            <input class="form-control" type="text" ng-model="a.firstNames">
324
                        </div>
325
                    </div>
326
                </div>
327
 
328
 
329
                <h2 class="well well-sm clearfix">
330
                    Colaboradores
331
                    <button class="btn btn-success pull-right" ng-click="newContributor()"><span class="glyphicon glyphicon-plus"/></button>
332
                </h2>
333
 
334
                <div class="panel-body" ng-repeat="a in doc.contributorsJson.persons">
335
                    <div class="form-group">
336
                        <label class="col-md-2 control-label">Apelido</label>
337
                        <div class="col-md-10">
338
                            <input class="form-control" type="text" ng-model="a.lastName">
339
                        </div>
340
                    </div>
341
                    <div class="form-group">
342
                        <label class="col-md-2 control-label">Primeiros Nomes</label>
343
                        <div class="col-md-10">
344
                            <input class="form-control" type="text" ng-model="a.firstNames">
345
                        </div>
346
                    </div>
347
                </div>
348
 
349
                <!--Seccao de DocumentFiles-->
350
 
1675 jmachado 351
 
1670 jmachado 352
                <div class="panel panel-default" ng-show="doc.repositoryDocumentFiles.length > 0">
353
                    <div class="panel-heading">Ficheiros Já Anexados</div>
354
                    <div class="panel-body">
355
 
356
 
357
 
1675 jmachado 358
                        <input type="hidden" id="DOCUMENT_FILES_RESULT" value=""/>
1670 jmachado 359
 
360
 
361
 
1675 jmachado 362
 
363
                            <div>
364
                                <div class="list-group clearfix" ng-repeat="f in doc.repositoryDocumentFiles"  ng-class="{'bacoInvisible': f.visible == false}">
1670 jmachado 365
                                    <div class="list-group-item clearfix">
1675 jmachado 366
                                        <div class="col-md-10" >
367
                                            <label ng-show="f.visible == false">
368
                                                <span class="glyphicon glyphicon-ban-circle"/>
369
                                            </label>
370
                                            <img src="<%=request.getContextPath()%>/imgs/mime/{{ f.repositoryFileProxy.repositoryFile.lastVersion.extension }}.gif"/> - {{ f.repositoryFileProxy.repositoryFile.lastVersion.name }} {{ (f.repositoryFileProxy.repositoryFile.lastVersion.size / 1024)| number:0 }}KB
371
 
372
 
1670 jmachado 373
                                        </div>
1675 jmachado 374
 
375
                                        <bacoTags:repositoryFile staticTag="true" transactional="true" repositoryStream="{{f.repositoryFileProxy.repositoryStream}}"/>
376
 
377
                                        <button data-toggle="tooltip" title="Ocultar ficheiro" ng-show="f.visible == true" class="btn btn-danger pull-right" type="button" ng-click="setDocumentFileInvisible(f)"><span class="glyphicon glyphicon-ban-circle"/></button>
378
                                        <button data-toggle="tooltip" title="Repor ficheiro" ng-show="f.visible == false" class="btn btn-default pull-right" type="button" ng-click="setDocumentFileVisible(f)"><span class="glyphicon glyphicon-ok-circle"/></button>
379
 
1711 jmachado 380
                                        <a  ng-disabled="f.visible == false" title="Substituir ficheiro" class="btn btn-default pull-right" href="#" style="margin-right: 20px"
1675 jmachado 381
                                           data-title="Alteração do Ficheiro {{f.repositoryFileProxy.repositoryFile.lastVersion.name}}"
382
                                           data-toggle="modal"
383
                                           data-target="#filesUploadModal"
384
                                           data-multiple="false"
385
                                           data-token="{{f.id}}"
386
                                           data-showmetafields="false"
387
                                           data-jsontargetid="#DOCUMENT_FILES_RESULT">
388
                                            <span class="glyphicon glyphicon-pencil"/>
389
                                        </a>
390
 
391
                                    </div>
392
                                    <div class="list-group-item clearfix">
393
                                        <div class=" col-md-2 control-label">Controlo de Acesso:</div>
394
                                        <div class="col-md-6 control-label">
395
                                            <select ng-disabled="f.visible == false" class="form-control chosenOff" type="text" ng-model="f.repositoryFileProxy.repositoryFile.accessControl" ng-options="o.v as o.n for o in [{ n: 'Publico', v: 'resource.access.publicDomain' }, { n: 'Privado', v: 'resource.access.privateDomain' }, { n: 'Interno', v: 'resource.access.authenticatedDomain' }]">>
396
 
397
                                            </select>
1670 jmachado 398
                                        </div>
399
                                    </div>
400
                                    <div class="list-group-item clearfix">
1675 jmachado 401
                                        <div class=" col-md-2 control-label">Visivel:</div>
402
                                        <div class="col-md-6 control-label">
403
                                            <select ng-disabled="f.visible == false" class="form-control chosenOff" type="text" ng-model="f.visible" ng-options="o.v as o.n for o in [{ n: 'Sim', v: true }, { n: 'Não', v: false }]">>
404
 
405
                                            </select>
406
                                        </div>
407
                                    </div>
408
                                    <div class="list-group-item clearfix">
1670 jmachado 409
                                        <div class=" col-md-2 control-label">Titulo:</div>
410
                                        <div class="col-md-10 control-label">
1675 jmachado 411
                                            <input ng-disabled="f.visible == false" type="text" class="form-control" ng-model="f.title"/>
1670 jmachado 412
                                        </div>
413
                                    </div>
414
                                    <div class="list-group-item clearfix">
415
                                        <div class="col-md-2 control-label">Descrição:</div>
416
                                        <div class="col-md-10 control-label">
1675 jmachado 417
                                            <textarea ng-disabled="f.visible == false" rows="3" class="form-control" ng-model="f.description"></textarea>
1670 jmachado 418
                                        </div>
419
                                    </div>
420
                                </div>
421
                            </div>
422
                        </div>
423
 
424
                </div>
425
                <!--Seccao de DocumentFiles-->
426
 
427
 
428
 
429
                <!--Seccao de uploadedFiles-->
430
                <div class="panel panel-info">
431
                    <div class="panel-heading">Carregar Ficheiros Novos</div>
432
                    <div class="panel-body">
433
 
434
 
435
 
436
                        <input type="hidden" id="UPLOADED_FILES_RESULT" value=""/>
437
                        <a class="btn btn-default" href="#"
1675 jmachado 438
                           data-title="Importação de Ficheiros"
1670 jmachado 439
                           data-toggle="modal"
440
                           data-target="#filesUploadModal"
1675 jmachado 441
                           data-multiple="true"
1670 jmachado 442
                           data-jsontargetid="#UPLOADED_FILES_RESULT">
443
                            Carregar Ficheiros <span class="glyphicon glyphicon-upload"/>
444
                        </a>
445
 
1675 jmachado 446
 
1670 jmachado 447
                        <div ng-show="jsonFiles.uploadedFiles.length > 0">
448
                            <h2>Ficheiros Carregados Provisórios</h2>
1675 jmachado 449
                            <div>
450
                                <div class="list-group clearfix" ng-repeat="f in jsonFiles.uploadedFiles" >
1670 jmachado 451
                                    <div class="list-group-item clearfix">
1675 jmachado 452
                                        <div class="col-md-10" ng-class="{'alert-warning': f.id}">
1670 jmachado 453
                                            <img src="<%=request.getContextPath()%>/imgs/mime/{{ f.extension }}.gif"/> - {{ f.fileName }} {{ (f.fileSize / 1024)| number:0 }}KB
454
                                        </div>
455
                                        <div class="col-md-2">
456
                                            <button class="btn btn-danger" type="button" ng-click="removeFileFromModel($index)"><span class="glyphicon glyphicon-remove"/></button>
457
                                        </div>
458
                                    </div>
459
                                    <div class="list-group-item clearfix">
1675 jmachado 460
                                        <div class=" col-md-2 control-label">Controlo de Acesso:</div>
461
                                        <div class="col-md-6 control-label">
462
                                            <select class="form-control chosenOff" type="text" ng-model="f.accessControl" ng-options="o.v as o.n for o in [{ n: 'Publico', v: 'resource.access.publicDomain' }, { n: 'Privado', v: 'resource.access.privateDomain' }, { n: 'Interno', v: 'resource.access.authenticatedDomain' }]">>
463
 
464
                                            </select>
465
                                        </div>
466
                                    </div>
467
                                    <div class="list-group-item clearfix">
468
                                        <div class=" col-md-2 control-label">Visivel:</div>
469
                                        <div class="col-md-6 control-label">
470
                                            <select class="form-control chosenOff" type="text" ng-model="f.visible" ng-options="o.v as o.n for o in [{ n: 'Sim', v: true }, { n: 'Não', v: false }]">>
471
 
472
                                            </select>
473
                                        </div>
474
                                    </div>
475
                                    <div class="list-group-item clearfix">
1670 jmachado 476
                                        <div class=" col-md-2 control-label">Titulo:</div>
477
                                        <div class="col-md-10 control-label">
478
                                            <input type="text" class="form-control" ng-model="f.title"/>
479
                                        </div>
480
                                    </div>
481
                                    <div class="list-group-item clearfix">
482
                                        <div class="col-md-2 control-label">Descrição:</div>
483
                                        <div class="col-md-10 control-label">
484
                                            <textarea rows="3" class="form-control" ng-model="f.description"></textarea>
485
                                        </div>
486
                                    </div>
487
                                </div>
488
                            </div>
489
                        </div>
490
                    </div>
491
                </div>
492
                <!--Seccao de uploadedFiles-->
493
 
494
 
1675 jmachado 495
                <div class="row">
496
                    <div class="col-md-6"><button class="btn btn-success" ng-click="submitForm()">Salvar</button></div>
497
                    <div class="col-md-6"><a class="btn btn-danger" href="<%=request.getContextPath()%>/user/homePae.do">Cancelar</a></div>
498
                </div>
1670 jmachado 499
 
500
 
1675 jmachado 501
 
502
 
1670 jmachado 503
            </div>
504
        </div>
1675 jmachado 505
        <%--
1670 jmachado 506
        <pre>
507
            {{doc | json}}
508
        </pre>
1675 jmachado 509
        <pre>
510
            {{jsonFiles | json}}
511
 
512
        </pre>--%>
1670 jmachado 513
    </div>
514
 
515
    <%
516
        AbstractDao.getCurrentSession().getTransaction().commit();
517
    %>
1683 jmachado 518
</div>