Subversion Repositories bacoAlunos

Rev

Rev 1680 | Rev 1726 | 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 import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="org.json.JSONArray" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ 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="baco" uri="/WEB-INF/tlds/baco.tld" %>

<style>
    .btn {
        margin-right: 8px;
    }

    .tree-node,.angular-ui-tree-handle {
        background: #f8faff;
        border: 1px solid #dae2ea;
        color: #7c9eb2;
        padding: 10px 10px;
    }

    .ui-tree-node
    {
        padding: 10px;
    }
    .angular-ui-tree-handle:hover {
        color: #438eb9;
        background: #f4f6f7;
        border-color: #dce2e8;
    }

    .angular-ui-tree-placeholder {
        background: #f0f9ff;
        border: 2px dashed #bed2db;
        -webkit-box-sizing: border-box;
        -moz-box-sizing: border-box;
        box-sizing: border-box;
    }

    .nodeEmpty {
        height: 50px;
        margin:10px;
        margin-left: 30px;
        border: 1px dashed blue;
    }

    .group-title {
        background-color: #687074 !important;
        color: #FFF !important;
    }


    /* --- Tree --- */
    .tree-node {
        border: 1px solid #dae2ea;
        background: #f8faff;
        color: #7c9eb2;
    }
    .tree-node-document {
        border: 1px solid #000000;
        background: #ffffff;
        color: #000000;
    }
    .tree-node-file {
        border: 1px solid #e8ea99;
        background: #fffae7;
        color: #b2a418;
    }

    .tree-node-description {
        border: 1px dashed #7f7f7e;
        background: #e5e5e3;
        color: #0d0c01;
    }

    .nodrop {
        background-color: #f2dede;
    }


    .nodrag {
        background-color: #f2eec1;
    }

    .tree-node-content {
        margin: 10px;
    }


    /*Estilo adicionado por mim para os movidos*/
    .moved
    {
        border: 2px solid blue !important;
    }

    .modified
    {
        border: 4px dashed orange !important;
    }
</style>
<div class="container-fluid">

<%

    IServiceManager sm = ServiceManager.getInstance();
    String[] names = new String[]{};
    Object[] args = new Object[]{null};
    JSONArray roots = (JSONArray) sm.execute(RequestUtils.getRequester(request, response), "OpenRepositoryCollection", args, names);

    AbstractDao.getCurrentSession().beginTransaction();
    String collectionsJson = roots.toString();
    request.setAttribute("collectionsJson", collectionsJson);

%>




<div id="treeAppPageContent" ng-app="treeAppPageContent" ng-controller="treeAppPageContentController">


<script>
ping();
var treeAppPageContent = angular.module('treeAppPageContent', ['ui.tree']);
GLOBAL_BacoAngularAppDependencies.push('treeAppPageContent');

<!-- estes codigos todos do remove e do toggle e etc's não mechi em nada limitei-me a copiar dos gajos-->
treeAppPageContent.controller('treeAppPageContentController',  function ($scope) {

            $scope.data = ${collectionsJson};

            $scope.onlyVisibles = false;

            /*
             $scope.data = [
             {
             "id" : 1,
             "name" : "Nao deixa fazer drag",
             "nodrag" : true,
             "isDirectory" : true

             },
             {
             "id" : 2,
             "name" : "Nao deixa fazer drop",
             "nodrop" : true,
             "isDirectory" : true
             },
             {
             "id" : 3,
             "name" : "Deixa fazer Tudo",
             "isDirectory" : true
             },
             {
             "id" : 4,
             "name" : "Deixa fazer Tudo e ja foi movido",
             "moved" : true,
             "isDirectory" : true
             },
             {
             "id" : 5,
             "name" : "Exemplo de folha nao deixa abrir",
             "isDirectory" : false
             }
             ];*/
            $scope.treeOptions = {
                accept: function(sourceNodeScope, destNodesScope, destIndex) {

                    return true;
                },
                dropped: function(e) {
                    //console.log (e.source.nodeScope.$modelValue);
                    //alert ("Largado o nó com nome: " + e.source.nodeScope.$modelValue.name + " sobre " + e.dest.nodesScope.$parent.$modelValue.name);
                }
            };

            $scope.openedAndHasNotChilds = function(node)
            {
                if(node.childs == null)
                    return false;
                return node.childs.length == 0;
            }

            $scope.openItem = function(item)
            {
                //apenas deixa abrir neste caso
                if(item.open && item.open==true)
                {
                    item.open=false;
                    delete item.childs;
                    delete item.documents;
                }
                else
                {
                    widgetCallWithActionParameters(
                            "<%=request.getContextPath()%>/user/repositoryDoc.do",
                            "openRepositoryCollection",
                            {
                                "id" : item.id
                            },
                            "#treeAppPageContent",
                            function(json)
                            {
                                item.childs = json.collections;
                                item.open = true;
                                $scope.$apply();
                            });

                    widgetCallWithActionParameters(
                            "<%=request.getContextPath()%>/user/repositoryDoc.do",
                            "openRepositoryCollectionDocuments",
                            {
                                "id" : item.id
                            },
                            "#treeAppPageContent",
                            function(json)
                            {
                                item.documents = json.documents;
                                item.open = true;
                                $scope.$apply();
                                $('#treeAppPageContent [data-toggle="tooltip"]').tooltip();
                            });


                }
            }
            $scope.openDocumentsItem = function(item)
            {
                var collapseElement = $("#repositoryFiles" + item.id);
                if(item.open && item.open==true)
                {
                    item.open=false;
                    collapseElement.collapse("hide");
                }
                else
                {
                    item.open=true;
                    collapseElement.collapse("show");
                }
            }


            $scope.hideNode = function(node)
            {
                if(!node.visible && $scope.onlyVisibles)
                    return true;
                return false;
            }

            //COPIADAS DO ficheiro repositoryDocument.jsp
            $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 serão definidas como privadas, por favor escolha as permissões novas.");
                docFile.repositoryFileProxy.repositoryFile.accessControl ="resource.access.privateDomain";
            }


        }
);

</script>

<!--TEMPLATE RECURSIVO-->
<script type="text/ng-template" id="childs_renderer.html">
    <!--Para nao deixar fazer drag-->
    <div data-nodrag class="tree-node tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible, hidden: hideNode(node)}">





            <a class="btn btn-xs" ng-class="{
                                            'btn-default': !node.open,
                                            'btn-success': node.open,
                                          }"
                data-nodrag ng-click="openItem(node)">
                            <span
                                    class="glyphicon"
                                    ng-class="{

                                            'glyphicon-chevron-right': !node.open,
                                            'glyphicon-chevron-down': node.open

                                          }">
                            </span>
            </a>

             <span style="margin-right: 5px" class="glyphicon "
                   ng-class="{
                                                'glyphicon-folder-close': !node.open,
                                                'glyphicon-folder-open': node.open,
                                              }"
                     ></span>

            <label data-toggle="tooltip" title="Esta colecção está oculta!"  ng-show="node.visible == false">
                <span class="glyphicon glyphicon-ban-circle"/>
            </label>

            {{node.name}}


    </div>


    <ol data-nodrag ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node" ng-class="{hidden: collapsed }">
        <li ng-repeat="node in node.childs" ui-tree-node ng-include="'childs_renderer.html'">
        </li>
        <li ng-repeat="node in node.documents" ui-tree-node ng-include="'documents_renderer.html'">
        </li>
    </ol>


</script>

<!--TEMPLATE RECURSIVO-->
<script type="text/ng-template" id="documents_renderer.html">
    <!--Para nao deixar fazer drag-->
    <div data-nodrag class="tree-node tree-node-document tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible, hidden: hideNode(node)}">

        <a class="btn btn-xs" ng-class="{
                                        'btn-default': !node.open,
                                        'btn-success': node.open,
                                      }"
           data-nodrag data-toggle="collapse" ng-click="openDocumentsItem(node)">
                        <span
                                class="glyphicon"
                                ng-class="{

                                        'glyphicon-chevron-right': !node.open,
                                        'glyphicon-chevron-down': node.open

                                      }">
                        </span>
        </a>

        <label data-toggle="tooltip" title="Este documento está oculto!" ng-show="node.visible == false">
            <span class="glyphicon glyphicon-ban-circle"/>
        </label>





        <span class="glyphicon glyphicon-file"></span>  {{node.title}}

        <baco:hasRole role="admin,all,repositoryDocs">
            <a target="_blank" class="pull-right btn btn-warning btn-xs" href="<%=request.getContextPath()%>/user/repositoryEditDocument.do?repositoryDocumentId={{node.id}}">
                <span class="glyphicon glyphicon-pencil"></span>
            </a>
        </baco:hasRole>
    </div>
    <div id="repositoryFiles{{node.id}}" class="collapse">

       <ol data-nodrag ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node" ng-class="{hidden: collapsed }">
           <li >
               <div data-nodrag class="tree-node tree-node-description tree-node-content clearfix">
                   <div ng-if="node.description">
                       <div class="col-md-2" style="text-align: right">
                           <span class="glyphicon glyphicon-tag"></span>
                           <span class="label label-primary">Descrição:</span>
                       </div>
                       <div class="col-md-10" style="border: 1px dashed black">
                           {{node.description}}
                       </div>
                   </div>

                   <div ng-if="node.internalIdentifier">
                       <div class="col-md-2" style="text-align: right">
                           <span class="glyphicon glyphicon-tag"></span>
                           <span class="label label-primary">ID INTERNO:</span>
                       </div>
                       <div class="col-md-10" style="border: 1px dashed black">
                           {{node.internalIdentifier}}
                       </div>
                   </div>

                   <div ng-if="node.publishDateStr">
                       <div class="col-md-2" style="text-align: right">
                           <span class="glyphicon glyphicon-tag"></span>
                           <span class="label label-primary">Data de Publicação:</span>
                       </div>
                       <div class="col-md-10" style="border: 1px dashed black">
                           {{node.publishDateStr}}
                       </div>
                   </div>

                   <div ng-if="node.closeDateStr">
                       <div class="col-md-2" style="text-align: right">
                           <span class="glyphicon glyphicon-tag"></span>
                           <span class="label label-primary">Data de Fim:</span>
                       </div>
                       <div class="col-md-10" style="border: 1px dashed black">
                           {{node.closeDateStr}}
                       </div>
                   </div>

                   <div ng-if="node.authorsJson" ng-repeat="autor in node.authorsJson.persons">
                       <div class="col-md-2" style="text-align: right">
                           <span class="glyphicon glyphicon-tag"></span>
                           <span class="label label-primary">Autor:</span>
                       </div>
                       <div class="col-md-10" style="border: 1px dashed black">
                           {{autor.firstNames}} {{autor.lastName}}
                       </div>
                   </div>
                   <div ng-if="node.contributorsJson" ng-repeat="autor in node.contributorsJson.persons">
                       <div class="col-md-2" style="text-align: right">
                           <span class="glyphicon glyphicon-tag"></span>
                           <span class="label label-primary">Colaborador:</span>
                       </div>
                       <div class="col-md-10" style="border: 1px dashed black">
                           {{autor.firstNames}} {{autor.lastName}}
                       </div>
                   </div>
                   <div ng-if="node.publisher">
                       <div class="col-md-2" style="text-align: right">
                           <span class="glyphicon glyphicon-tag"></span>
                           <span class="label label-primary">Entidade Publicadora:</span>
                       </div>
                       <div class="col-md-10" style="border: 1px dashed black">
                           {{node.publisher}}
                       </div>
                   </div>
               </div>
           </li>
            <li ng-repeat="node in node.repositoryDocumentFiles" ui-tree-node ng-include="'files_renderer.html'">
            </li>
       </ol>
    </div>

</script>



<script type="text/ng-template" id="files_renderer.html">
    <!--Para nao deixar fazer drag-->
    <div data-nodrag class="tree-node tree-node-file tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible, hidden: hideNode(node)}">
        <label data-toggle="tooltip" title="Este ficheiro está oculto!"  ng-show="node.visible == false">
            <span class="glyphicon glyphicon-ban-circle"/>
        </label>

        <div class="col-md-11">
            <div ng-if="node.title">
                <div class="col-md-2" style="text-align: right">
                    <span class="glyphicon glyphicon-tag"></span>
                    <span class="label label-primary">Titulo:</span>
                </div>
                <div class="col-md-10" style="border: 1px dashed black">
                    <i> {{node.title}} </i>
                </div>
            </div>
            <div ng-if="node.description">
                <div class="col-md-2" style="text-align: right">
                    <span class="glyphicon glyphicon-tag"></span>
                    <span class="label label-primary">Descrição:</span>
                </div>
                <div class="col-md-10" style="border: 1px dashed black">
                    <i>{{node.description}}</i>
                </div>
            </div>
            <div class="col-md-12" style="margin-top: 4px">
                <span class="glyphicon glyphicon-paperclip"></span>
                <bacoTags:repositoryFile btnXs="true" transactional="false" staticTag="true" repositoryStream="{{node.repositoryFileProxy.repositoryStream}}" showHistory="true"/>
                {{node.repositoryFileProxy.repositoryFile.lastVersion.name}}
                ({{node.repositoryFileProxy.repositoryFile.lastVersion.size / 1024 | number:0}} KB)
            </div>
        </div>
        <div class="col-md-1">
            <button data-toggle="tooltip" title="Ocultar ficheiro" ng-show="node.visible == true" class="btn btn-danger pull-right" type="button" ng-click="setDocumentFileInvisible(node)"><span class="glyphicon glyphicon-ban-circle"/></button>
            <button data-toggle="tooltip" title="Repor ficheiro" ng-show="node.visible == false" class="btn btn-default pull-right" type="button" ng-click="setDocumentFileVisible(node)"><span class="glyphicon glyphicon-ok-circle"/></button>

            <div ng-if="node.repositoryFileProxy.repositoryFile.accessControl == 'resource.access.publicDomain'">
                Público
            </div>
            <div ng-if="node.repositoryFileProxy.repositoryFile.accessControl == 'resource.access.privateDomain'">
                Privado
            </div>
            <div ng-if="node.repositoryFileProxy.repositoryFile.accessControl == 'resource.access.authenticatedDomain'">
                Interno
            </div>


        </div>
    </div>
</script>



<div class="panel panel-default">
    <div class="panel-heading clearfix">
        Administração de Coleções do Repositório de Documentos Digitais

        <baco:hasRole role="admin,all,repositoryDocs">
            <select class="chosenOff pull-right" type="text" ng-model="onlyVisibles" ng-options="o.v as o.n for o in [{ n: 'Ver Todos', v: false }, { n: 'Ocultar invisiveis', v: true }]">>
            </select>
        </baco:hasRole>
    </div>
    <div class="panel-body">

        <div class="web-messages"></div>




        <div class="row">

            <div class="col-sm-12 form-horizontal">
                <div ui-tree="treeOptions" id="page-content-root">
                    <ol ui-tree-nodes ng-model="data">
                        <li ng-repeat="node in data" ui-tree-node ng-include="'childs_renderer.html'"></li>
                    </ol>
                </div>
            </div>

        </div>
        <%-- <div class="col-sm-12">
             <pre class="code">{{ data | json }}</pre>
         </div>--%>
    </div>


</div>
</div>

<%--AbstractDao.getCurrentSession().getTransaction().commit();--%>

</div>

Generated by GNU Enscript 1.6.5.2.