Subversion Repositories bacoAlunos

Rev

Rev 1760 | 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");
        String repositoryCollectionId = request.getParameter("repositoryCollectionId");
        if(documentRepositoryId != null)
        {
            RepositoryDocumentImpl repoEdited = (RepositoryDocumentImpl) DaoFactory.getRepositoryDocumentDaoImpl().get(Long.parseLong(documentRepositoryId));
            String docJson = repoEdited.toJson();
            request.setAttribute("docJson",docJson);
        }
        else if(repositoryCollectionId != null)
        {
            request.setAttribute("repositoryCollectionId",repositoryCollectionId);
        }

        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};
            $scope.dups = [];
            <logic:empty name="docJson">
            $scope.doc = {
                "visible" : true
                <logic:notEmpty name="repositoryCollectionId">
                ,
                "collection" : { "id" : ${repositoryCollectionId} }
                </logic:notEmpty>
            };
            </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.removeAuthor = function(authorScope)
            {
                authorScope.remove();
            }
            $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.removeContributor = function(contributorScope)
            {
                contributorScope.remove();
            }
            $scope.submitForm = function()
            {
                if(!($scope.doc.collection && $scope.doc.collection.id))
                {
                    alertModal("Necessita de preencher uma colecção para continuar");
                }
                else if(!($scope.doc.title && $scope.doc.title.length>0))
                {
                    alertModal("Necessita de preencher o título para continuar");
                }
                else{
                    if($scope.doc.id && $scope.doc.id > 0)
                    {
                        $scope.submitNoCheck();
                    }
                    else
                        widgetCallWithActionParameters(
                            "<%=request.getContextPath()%>/user/repositoryDoc.do",
                            "checkRepositoryDocumentExistence",
                            {
                                "doc" : JSON.stringify($scope.doc)
                            },
                            "#repoModule",
                            function(json)
                            {
                                if(json.found.length > 0)
                                {
                                   $scope.dups = json.found;
                                    $scope.$apply();
                                   $("#alertDocExist").modal(
                                           {
                                               "show" : true
                                           }
                                   );
                                }
                                else
                                {
                                   $scope.submitNoCheck();
                                }
                            });
                }
            }
            $scope.submitNoCheck = 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();
                        },
                        function(json)
                        {
                            alert(JSON.stringify(json));
                        }
                );
            }
            $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 class="modal fade alertModal" id="alertDocExist" tabindex="-1" role="dialog" >
                <div class="modal-dialog" data-width="960" style="display: block; width: 960px; margin-top: 50px;" aria-hidden="false">
                    <div class="modal-content">
                        <div class="modal-header">
                            <h4 class="modal-title">Alerta</h4>
                        </div>
                        <div class="modal-body">
                            <div class="alert alert-warning InfoMessageToUser">
                                Já existem documentos semelhantes no repositório. Confirme que o documento é mesmo para depositar nesta colecção
                            </div>
                            <ul>
                                <li ng-repeat="dup in dups">
                                    <a target="_blank" ng-href="<%=request.getContextPath()%>/user/repositoryEditDocument.do?repositoryDocumentId={{dup.id}}">
                                        {{dup.title}} - Colecção: {{dup.collection.pathName}}
                                    </a>
                                    <ul>
                                        <li ng-repeat="f in dup.repositoryDocumentFiles">
                                            Ficheiro: {{f.repositoryFileProxy.repositoryFile.lastVersion.name}} - {{f.title}}
                                        </li>
                                    </ul>
                                </li>
                            </ul>
                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-danger" data-dismiss="modal">Cancelar</button>
                            <button type="button" class="btn btn-success pull-right" data-dismiss="modal" ng-click="submitNoCheck()">Confirmo que é para depositar à mesma</button>
                        </div>
                    </div>
                </div>
            </div>


        <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?repositoryCollectionId={{doc.collection.id}}">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 ng-if="doc.id" class="form-group">
                    <label class="col-md-2 control-label">ID BASE DADOS</label>
                    <div class="col-md-2">
                       {{doc.id}}
                    </div>
                </div>
                <div ng-if="!doc.id" class="form-group">
                    <label class="col-md-2 control-label">ID BASE DADOS</label>
                    <div class="col-md-2">
                        Ainda não atribuido:  Documento Novo
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-md-2 control-label">Visivel</label>
                    <div class="col-md-2">
                        <select ng-class="{'bg-red': doc.visible == false, 'bg-green': doc.visible == true}" 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">Assunto</label>
                    <div class="col-md-10">
                        <input class="form-control" type="text" ng-model="doc.subject">
                    </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="col-md-11">
                        <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>
                    <div class="col-md-1">
                        <button class="btn btn-danger pull-right" ng-click="doc.authorsJson.persons.splice($index, 1)"><span class="glyphicon glyphicon-remove"/></button>
                    </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="col-md-11">
                        <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>
                    <div class="col-md-1">
                        <button class="btn btn-danger pull-right" ng-click="doc.contributorsJson.persons.splice($index,1)"><span class="glyphicon glyphicon-remove"/></button>
                    </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.