Rev 1683 | Rev 1714 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@ page import="jomm.dao.impl.AbstractDao" %>
<%@ page import="pt.estgp.estgweb.domain.RepositoryDocumentCollection" %>
<%@ page import="pt.estgp.estgweb.domain.RepositoryDocumentCollectionImpl" %>
<%@ page import="pt.estgp.estgweb.domain.RepositoryDocumentImpl" %>
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="bacoTags" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="logic" uri="/WEB-INF/tlds/struts-logic.tld" %>
<%@ taglib prefix="html" uri="/WEB-INF/tlds/struts-html.tld" %>
<%@ taglib prefix="bean" uri="/WEB-INF/tlds/struts-bean.tld" %>
<div class="container-fluid">
<%
AbstractDao.getCurrentSession().beginTransaction();
List<RepositoryDocumentCollection> collections = DaoFactory.getRepositoryDocumentCollectionDaoImpl().findAll();
String documentRepositoryId = request.getParameter("repositoryDocumentId");
if(documentRepositoryId != null)
{
RepositoryDocumentImpl repoEdited = (RepositoryDocumentImpl) DaoFactory.getRepositoryDocumentDaoImpl().get(Long.parseLong(documentRepositoryId));
String docJson = repoEdited.toJson();
request.setAttribute("docJson",docJson);
}
String collectionsJson = RepositoryDocumentCollectionImpl.toJson(collections);
request.setAttribute("collectionsJson",collectionsJson);
%>
<script>
var repoModule = angular.module('repoModule', []);
GLOBAL_BacoAngularAppDependencies.push('repoModule');
repoModule.controller('repoModuleController', function($scope) {
$scope.collections = ${collectionsJson};
<logic:empty name="docJson">
$scope.doc = {
"visible" : true
};
</logic:empty>
<logic:notEmpty name="docJson">
$scope.doc = ${docJson}
</logic:notEmpty>
$scope.setCloseDate = function (datePickerId) {
$("#"+datePickerId).datetimepicker().on("dp.change", function (data) {
//alert($("#"+datePicker).find("input").val());
$scope.doc.closeDateStr = $("#"+datePickerId).find("input").val();
$scope.$apply();
});
}
$scope.setPublishDate = function (datePickerId) {
$("#"+datePickerId).datetimepicker().on("dp.change", function (data) {
//alert($("#"+datePicker).find("input").val());
$scope.doc.publishDateStr = $("#"+datePickerId).find("input").val();
$scope.$apply();
});
}
$scope.newAuthor = function()
{
if(!$scope.doc.authorsJson)
{
$scope.doc.authorsJson = {};
}
if(!$scope.doc.authorsJson.persons)
{
$scope.doc.authorsJson.persons = [];
}
$scope.doc.authorsJson.persons.push({});
}
$scope.newContributor = function()
{
if(!$scope.doc.contributorsJson)
{
$scope.doc.contributorsJson = {};
}
if(!$scope.doc.contributorsJson.persons)
{
$scope.doc.contributorsJson.persons = [];
}
$scope.doc.contributorsJson.persons.push({});
}
$scope.submitForm = function()
{
widgetCallWithActionParameters(
"<%=request.getContextPath()%>/user/repositoryDoc.do",
"saveRepositoryDocument",
{
"doc" : JSON.stringify($scope.doc),
"uploadedFiles" : JSON.stringify($scope.jsonFiles)
},
"#repoModule",
function(json)
{
$scope.doc = json;
$scope.jsonFiles = {"service":"ok","uploadedFiles": [] };
$scope.$apply();
$("#savedOpenNew").show();
$("#docEditPanel").hide();
});
}
$scope.backEdit = function()
{
$("#savedOpenNew").hide();
$("#docEditPanel").show();
}
//<!--Seccao de uploadedFiles-->
//EVENTO DE CHANGE PARA PUXAR DADOS PARA O MODELO
$scope.jsonFiles = {"service":"ok","uploadedFiles": [] };
$(document).ready(function(){
$("#UPLOADED_FILES_RESULT").change(function()
{
var uploadedIncomingJson = JSON.parse($("#UPLOADED_FILES_RESULT").val());
for(var i in uploadedIncomingJson.uploadedFiles)
{
var file = uploadedIncomingJson.uploadedFiles[i];
file.visible = true;
file.accessControl = "resource.access.publicDomain";
angular.element($("#repoModule")).scope().jsonFiles.uploadedFiles.push(file);
}
angular.element($("#repoModule")).scope().$apply();
});
$("#DOCUMENT_FILES_RESULT").change(function()
{
var uploadedIncomingJson = JSON.parse($("#DOCUMENT_FILES_RESULT").val());
var file = uploadedIncomingJson.uploadedFiles[0];
file.id = uploadedIncomingJson.token;
//Find document remove it from documents List add to uploadFiles
var doc = angular.element($("#repoModule")).scope().doc;
for(var i in doc.repositoryDocumentFiles)
{
if(doc.repositoryDocumentFiles[i].id == file.id)
{
var repoDoc = doc.repositoryDocumentFiles[i];
doc.repositoryDocumentFiles.splice(i,1);
file.title = repoDoc.title;
file.visible = repoDoc.visible;
file.description = repoDoc.description;
file.accessControl = repoDoc.repositoryFileProxy.repositoryFile.accessControl;
file.repositoryStream = repoDoc.repositoryFileProxy.repositoryStream;
break;
}
}
angular.element($("#repoModule")).scope().jsonFiles.uploadedFiles.push(file);
angular.element($("#repoModule")).scope().$apply();
});
});
$scope.removeFileFromModel = function($index)
{
$scope.jsonFiles.uploadedFiles.splice($index,1);
}
$scope.setDocumentFileInvisible = function(docFile)
{
docFile.visible=false;
docFile.repositoryFileProxy.repositoryFile.accessControl ="resource.access.privateDomain";
}
$scope.setDocumentFileVisible = function(docFile)
{
docFile.visible=true;
alert("As permissões do ficheiro estão definidas como privadas, por favor escolha as permissões novas.");
docFile.repositoryFileProxy.repositoryFile.accessControl ="resource.access.privateDomain";
}
//<!--Seccao de uploadedFiles-->
});
</script>
<div id="repoModule"
ng-app="repoModule"
ng-controller="repoModuleController"
class="form-horizontal">
<div id="savedOpenNew" class="panel panel-default" style="display: none">
<div class="panel-body">
<div class="web-messages"></div>
<hr/>
<div class="row">
<div class="col-md-4">
<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>
</div>
<div class="col-md-4">
<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>
</div>
</div>
<hr/>
<div class="row">
<div class="col-md-4">
<html:link styleClass="btn btn-danger btn-lg btn-block btn-huge" action="/user/homePae">Sair</html:link>
</div>
</div>
</div>
</div>
<div id="docEditPanel" class="panel panel-default">
<div class="panel-heading">
Criar um novo documento digital
</div>
<div class="panel-body">
<div class="web-messages"></div>
<hr/>
<input class="form-control" type="hidden" ng-model="doc.id">
<div class="form-group">
<label class="col-md-2 control-label">Visivel</label>
<div class="col-md-2">
<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 }]">>
</select>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">ID Interno</label>
<div class="col-md-10">
<input class="form-control" type="text" ng-model="doc.internalIdentifier">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Coleção</label>
<div class="col-md-10">
<select ng-model="doc.collection.id" class="form-control chosenOff" ng-options="c.id as c.pathName for c in collections"></select>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="pubdate">Data de Publicação</label>
<div class="col-sm-2">
<div class='input-group date datetimepicker' id="publishDatePicker" ng-click="setPublishDate('publishDatePicker')">
<input ng-model="doc.publishDateStr" type="text" id="pubdate" class="form-control"/>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
<div class="col-sm-2">
<button type="button" class="btn btn-danger" onclick="$('#pubdate').val('')"><span class="glyphicon glyphicon-remove"></span></button>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="closedate">Data de Fim (se aplicável)</label>
<div class="col-md-2">
<div class='input-group date datetimepicker' id="closeDatePicker" ng-click="setCloseDate('closeDatePicker')">
<input type="text" ng-model="doc.closeDateStr" class="form-control" id="closedate"/>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
<div class="col-sm-2">
<button type="button" class="btn btn-danger" onclick="$('#closedate').val('')"><span class="glyphicon glyphicon-remove"></span></button>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Título</label>
<div class="col-md-10">
<input class="form-control" type="text" ng-model="doc.title">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">SubTitulo</label>
<div class="col-md-10">
<input class="form-control" type="text" ng-model="doc.subtitle">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Descrição</label>
<div class="col-md-10">
<textarea rows="6" class="form-control" ng-model="doc.description">
</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Entidade Publicadora</label>
<div class="col-md-10">
<input type="text" class="form-control" ng-model="doc.publisher">
</div>
</div>
<h2 class="well well-sm clearfix">
Autores
<button class="btn btn-success pull-right" ng-click="newAuthor()"><span class="glyphicon glyphicon-plus"/></button>
</h2>
<div class="panel-body" ng-repeat="a in doc.authorsJson.persons">
<div class="form-group">
<label class="col-md-2 control-label">Apelido</label>
<div class="col-md-10">
<input class="form-control" type="text" ng-model="a.lastName">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Primeiros Nomes</label>
<div class="col-md-10">
<input class="form-control" type="text" ng-model="a.firstNames">
</div>
</div>
</div>
<h2 class="well well-sm clearfix">
Colaboradores
<button class="btn btn-success pull-right" ng-click="newContributor()"><span class="glyphicon glyphicon-plus"/></button>
</h2>
<div class="panel-body" ng-repeat="a in doc.contributorsJson.persons">
<div class="form-group">
<label class="col-md-2 control-label">Apelido</label>
<div class="col-md-10">
<input class="form-control" type="text" ng-model="a.lastName">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Primeiros Nomes</label>
<div class="col-md-10">
<input class="form-control" type="text" ng-model="a.firstNames">
</div>
</div>
</div>
<!--Seccao de DocumentFiles-->
<div class="panel panel-default" ng-show="doc.repositoryDocumentFiles.length > 0">
<div class="panel-heading">Ficheiros Já Anexados</div>
<div class="panel-body">
<input type="hidden" id="DOCUMENT_FILES_RESULT" value=""/>
<div>
<div class="list-group clearfix" ng-repeat="f in doc.repositoryDocumentFiles" ng-class="{'bacoInvisible': f.visible == false}">
<div class="list-group-item clearfix">
<div class="col-md-10" >
<label ng-show="f.visible == false">
<span class="glyphicon glyphicon-ban-circle"/>
</label>
<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
</div>
<bacoTags:repositoryFile staticTag="true" transactional="true" repositoryStream="{{f.repositoryFileProxy.repositoryStream}}"/>
<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>
<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>
<a ng-disabled="f.visible == false" title="Substituir ficheiro" class="btn btn-default pull-right" href="#" style="margin-right: 20px"
data-title="Alteração do Ficheiro {{f.repositoryFileProxy.repositoryFile.lastVersion.name}}"
data-toggle="modal"
data-target="#filesUploadModal"
data-multiple="false"
data-token="{{f.id}}"
data-showmetafields="false"
data-jsontargetid="#DOCUMENT_FILES_RESULT">
<span class="glyphicon glyphicon-pencil"/>
</a>
</div>
<div class="list-group-item clearfix">
<div class=" col-md-2 control-label">Controlo de Acesso:</div>
<div class="col-md-6 control-label">
<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' }]">>
</select>
</div>
</div>
<div class="list-group-item clearfix">
<div class=" col-md-2 control-label">Visivel:</div>
<div class="col-md-6 control-label">
<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 }]">>
</select>
</div>
</div>
<div class="list-group-item clearfix">
<div class=" col-md-2 control-label">Titulo:</div>
<div class="col-md-10 control-label">
<input ng-disabled="f.visible == false" type="text" class="form-control" ng-model="f.title"/>
</div>
</div>
<div class="list-group-item clearfix">
<div class="col-md-2 control-label">Descrição:</div>
<div class="col-md-10 control-label">
<textarea ng-disabled="f.visible == false" rows="3" class="form-control" ng-model="f.description"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<!--Seccao de DocumentFiles-->
<!--Seccao de uploadedFiles-->
<div class="panel panel-info">
<div class="panel-heading">Carregar Ficheiros Novos</div>
<div class="panel-body">
<input type="hidden" id="UPLOADED_FILES_RESULT" value=""/>
<a class="btn btn-default" href="#"
data-title="Importação de Ficheiros"
data-toggle="modal"
data-target="#filesUploadModal"
data-multiple="true"
data-jsontargetid="#UPLOADED_FILES_RESULT">
Carregar Ficheiros <span class="glyphicon glyphicon-upload"/>
</a>
<div ng-show="jsonFiles.uploadedFiles.length > 0">
<h2>Ficheiros Carregados Provisórios</h2>
<div>
<div class="list-group clearfix" ng-repeat="f in jsonFiles.uploadedFiles" >
<div class="list-group-item clearfix">
<div class="col-md-10" ng-class="{'alert-warning': f.id}">
<img src="<%=request.getContextPath()%>/imgs/mime/{{ f.extension }}.gif"/> - {{ f.fileName }} {{ (f.fileSize / 1024)| number:0 }}KB
</div>
<div class="col-md-2">
<button class="btn btn-danger" type="button" ng-click="removeFileFromModel($index)"><span class="glyphicon glyphicon-remove"/></button>
</div>
</div>
<div class="list-group-item clearfix">
<div class=" col-md-2 control-label">Controlo de Acesso:</div>
<div class="col-md-6 control-label">
<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' }]">>
</select>
</div>
</div>
<div class="list-group-item clearfix">
<div class=" col-md-2 control-label">Visivel:</div>
<div class="col-md-6 control-label">
<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 }]">>
</select>
</div>
</div>
<div class="list-group-item clearfix">
<div class=" col-md-2 control-label">Titulo:</div>
<div class="col-md-10 control-label">
<input type="text" class="form-control" ng-model="f.title"/>
</div>
</div>
<div class="list-group-item clearfix">
<div class="col-md-2 control-label">Descrição:</div>
<div class="col-md-10 control-label">
<textarea rows="3" class="form-control" ng-model="f.description"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!--Seccao de uploadedFiles-->
<div class="row">
<div class="col-md-6"><button class="btn btn-success" ng-click="submitForm()">Salvar</button></div>
<div class="col-md-6"><a class="btn btn-danger" href="<%=request.getContextPath()%>/user/homePae.do">Cancelar</a></div>
</div>
</div>
</div>
<%--
<pre>
{{doc | json}}
</pre>
<pre>
{{jsonFiles | json}}
</pre>--%>
</div>
<%
AbstractDao.getCurrentSession().getTransaction().commit();
%>
</div>
Generated by GNU Enscript 1.6.5.2.