vendor/uvdesk/support-center-bundle/Resources/views/Staff/Folders/listFolders.html.twig line 1

Open in your IDE?
  1. {% extends "@UVDeskCoreFramework//Templates//layout.html.twig" %}
  2. {% block title %}
  3.     {{ 'Folders'|trans }}
  4. {% endblock %}
  5. {% block pageContent %}
  6.     <style>
  7.         .uv-folders input[type='radio'] {
  8.             display: none;
  9.         }
  10.         .uv-inner-section .folder-list .uv-app-list-brick .uv-app-list-brick-lt{
  11.             //background: none;
  12.         }
  13.         .uv-inner-section .folder-list .uv-app-list-brick .uv-app-list-brick-lt img{
  14.             height: 90px;
  15.             width: 100%;
  16.         }
  17.         .uv-inner-section .folder-list .uv-app-list-brick .uv-app-list-brick-lt.uv-without-img{
  18.             background-image: linear-gradient(to right, #7c70f4 0%, #ba81f1 100%);
  19.         }
  20.         .uv-folders .uv-aside-brick div {
  21.             margin-top: 15px;
  22.         }
  23.         .uv-folders p {
  24.             margin: 3px 0px 3px 0px;
  25.         }
  26.         .uv-app-list-brick-lt.uv-without-img div {
  27.             width: 90px;
  28.             height: 90px;
  29.             background-image: url(../../../bundles/webkuldefault/images/uvdesk-kb-sprite.svg);
  30.             background-position: 0px 0px;
  31.             display: inline-block;
  32.             vertical-align: middle;
  33.             overflow: hidden;
  34.         }
  35.         .uv-app-list-brick-lt.uv-without-img div{
  36.             background-position: -90px 0px;
  37.         }
  38.         div.uv-manage-gap{
  39.         }
  40.         .uv-app-list-brick-rt{
  41.             word-break: break-word;
  42.         }
  43.     </style>
  44.     <div class="uv-inner-section">
  45.         {# Append Panel Aside #}
  46.         {% set asideTemplate = 'Webkul\\UVDesk\\CoreFrameworkBundle\\Dashboard\\AsideTemplate' %}
  47.         {% set asideSidebarReference = 'Webkul\\UVDesk\\SupportCenterBundle\\UIComponents\\Dashboard\\Panel\\Sidebars\\Knowledgebase' %}
  48.         {{ uvdesk_extensibles.getRegisteredComponent(asideTemplate).renderSidebar(asideSidebarReference) | raw }}
  49.         <div class="uv-view {% if app.request.cookies and app.request.cookies.get('uv-asideView') %}uv-aside-view{% endif %}">
  50.             <h1>
  51.                 {{ 'Folders'|trans }}
  52.             </h1>
  53.             <div class="uv-action-bar">
  54.                 <div class="uv-action-bar-col-lt">
  55.                     <!--Sort by-->
  56.                     <div class="uv-dropdown sort">
  57.                         <div class="uv-dropdown-btn uv-vertical-align uv-margin-right-5">
  58.                             {{ 'Sort By:'|trans }} {{ 'Created At'|trans }}
  59.                         </div>
  60.                         <div class="uv-dropdown-list uv-bottom-left">
  61.                             <div class="uv-dropdown-container">
  62.                                 <label>{{ 'Sort By'|trans }}</label>
  63.                                 <ul>
  64.                                 </ul>
  65.                             </div>
  66.                         </div>
  67.                     </div>
  68.                     <!--Sort by-->
  69.                     <!--Filter By Status-->
  70.                     <div class="uv-dropdown filter-by-status">
  71.                         <div class="uv-dropdown-btn uv-vertical-align uv-margin-right-5">
  72.                             {{ 'Status:'|trans }} {{ 'All'|trans }}
  73.                         </div>
  74.                         <div class="uv-dropdown-list uv-bottom-left">
  75.                             <div class="uv-dropdown-container">
  76.                                 <label>{{ 'Status'|trans }}</label>
  77.                                 <ul>
  78.                                     <li class="uv-drop-list-active"><a href="#">{{ 'All'|trans }}</a></li>
  79.                                     <li><a href="#" data-id="1">{{ 'Published'|trans }}</a></li>
  80.                                     <li><a href="#" data-id="0">{{ 'Draft'|trans }}</a></li>
  81.                                 </ul>
  82.                             </div>
  83.                         </div>
  84.                     </div>
  85.                     <!--//Filter By Status-->
  86.                 </div>
  87.                 <div class="uv-action-bar-col-rt">
  88.                     <input type="text" class="uv-search-inline uv-vertical-align uv-margin-right-15" placeholder="{{ 'Search'|trans }}">
  89.                     <!-- Add Button -->
  90.                     
  91.                     <a href="{{ path('helpdesk_member_knowledgebase_create_folder') }}" type="button" class="uv-btn-action" id="uv-add-folder">
  92.                         <span class="uv-icon-add"></span>
  93.                         {{ "New Folder"|trans }}
  94.                     </a>
  95.                     <!--// Add Button -->
  96.                 </div>
  97.             </div>
  98.      
  99.             <div class="uv-table uv-list-view">
  100.                 <div class="uv-app-screen">
  101.                     <div class="folder-list uv-app-list-channels">
  102.                     </div>
  103.                 </div>
  104.                 <div class="navigation"></div>
  105.             </div>
  106.         </div>
  107.     </div>
  108. {% endblock %}
  109. {% block footer %}
  110.     {{ parent() }}
  111.     <!-- Sorting Template -->
  112.     <script id="entity_list_sorting_tmp" type="text/template">
  113.         <li class="<% if(sort == 'a.dateAdded') { %>uv-drop-list-active<% } %>">
  114.             <a href="#<% if(queryString != '') { %><%- queryString %>/<% } %><% if(page) { %>page/<%- page %><% } else { %>page/1<% } %>/sort/a.dateAdded/<% if(sort == 'a.dateAdded') { %><% if(direction) { %>direction/<%- direction %><% } else { %>direction/desc<% } %><% } else { %>direction/asc<% } %>" data-field="a.dateAdded">
  115.                 {% trans %}Created At{% endtrans %}
  116.                 <% if(sort == 'a.dateAdded') { %>
  117.                     <span class="uv-sorting <% if(direction == 'asc') { %> descend <% } else { %> ascend <% } %>"></span>
  118.                 <% } %>
  119.             </a>
  120.         </li>
  121.         <li class="<% if(sort == 'a.name') { %>uv-drop-list-active<% } %>">
  122.             <a href="#<% if(queryString != '') { %><%- queryString %>/<% } %><% if(page) { %>page/<%- page %><% } else { %>page/1<% } %>/sort/a.name/<% if(sort == 'a.name') { %><% if(direction) { %>direction/<%- direction %><% } else { %>direction/desc<% } %><% } else { %>direction/asc<% } %>" data-field="a.name">
  123.                 {% trans %}Name{% endtrans %}
  124.                 <% if(sort == 'a.name') { %>
  125.                     <span class="uv-sorting <% if(direction == 'asc') { %> descend <% } else { %> ascend <% } %>"></span>
  126.                 <% } %>
  127.             </a>
  128.         </li>
  129.     </script>
  130.     <!-- //Sorting Template -->
  131.     <!-- Folder list item template -->
  132.     <script id="entity_list_item_tmp" type="text/template">
  133.         <a href="<%- path.replace('replaceId', id) %>">
  134.             <% if(solutionImage) { %>
  135.                 <div class="uv-app-list-brick-lt">
  136.                     <img src="{{ app.request.scheme ~'://' ~ app.request.httpHost ~ asset('') }}<%= solutionImage %>"/>                    
  137.                 </div>
  138.             <% }else{ %>
  139.                 <div class="uv-app-list-brick-lt uv-without-img"><div></div></div>
  140.             <% } %>
  141.         </a>
  142.         <div class="uv-app-list-brick-rt">
  143.             <p><a href="<%- path.replace('replaceId', id) %>" data-target="uv-task-view" <% if(name.length > 20){ %> data-toggle="tooltip" data-placement="top" title="<%- app.appView.sanitize(name) %>" <% } %> ><%- name %></a></p>
  144.             <p>
  145.             <% if(parseInt(categoriesCount)){ %><a href="<%- pathCategory.replace('replaceId', id) %>">
  146.             <%- categoriesCount %> {{ 'Categories'|trans }}</a> <% }else{ %> <a href="<%- pathCategory.replace('replaceId', id) %>">
  147.             <%- categoriesCount %> {{ 'Categories'|trans }}</a><% } %> </p>
  148.             <p>
  149.                 <% if(parseInt(articleCount)){ %><a href="<%- pathArticle.replace('replaceId', id) %>"><%- articleCount %> {{ 'Articles'|trans }}</a> <% }else{ %>
  150.                 <span class="uv-text-danger uv-cursor delete-folder uv-pull-right" data-id="<%- id %>">{{ 'delete'|trans }}</span>
  151.                 <a href="<%- pathArticle.replace('replaceId', id) %>"><%- articleCount %> {{ 'Articles'|trans }}</a><% } %>
  152.             </p>
  153.         </div>
  154.     </script>
  155.     <!-- //Folder list item template -->
  156.     <script id="no_result_tmp" type="text/template">
  157.         <div class="uv-app-screen">
  158.             <div class="uv-app-splash" style="text-align: center;">
  159.                 <img class="uv-app-splash-image" src="{{ asset('bundles/uvdesksupportcenter/images/splash/knowledgebase-splash.png') }}" alt="Folders">
  160.                 <% if(!window.location.hash) { %>
  161.                     <h2 class="uv-margin-top-10">{{"Create Knowledgebase Folder"|trans}}</h2>
  162.                     <p>{{"You didn't add any folder to your Knowledgebase yet, Create your first Folder and start adding Categories/Articles to make your customers help themselves."|trans}}</p>
  163.                 <% } else { %>
  164.                     <p>
  165.                         {{ "You didn't have any folder for current filter(s)."|trans }}
  166.                         <a href="#">{{ 'Clear Filters'|trans }}</a>
  167.                     </p>
  168.                 <% } %>
  169.             </div>
  170.         </div>
  171.     </script>
  172.     <script type="text/javascript">
  173.         var path = "{{ path('helpdesk_member_knowledgebase_update_folder', {'folderId': 'replaceId' }) }}";
  174.         var pathCategory = "{{ path('helpdesk_member_knowledgebase_folder_categories_collection', {'solution': 'replaceId' }) }}";
  175.         var pathArticle = "{{ path('helpdesk_member_knowledgebase_folder_articles_collection', {'solution': 'replaceId' }) }}";
  176.         var pathLayout = "{{ path('helpdesk_member_knowledgebase_update_theme_xhr') }}";
  177.         $(function () {
  178.             var globalMessageResponse = "";
  179.             var FolderModel = Backbone.Model.extend({
  180.                 idAttribute : "id"
  181.             });
  182.             var FolderCollection = AppCollection.extend({
  183.                 model : FolderModel,
  184.                 url : "{{ path('helpdesk_member_knowledgebase_folders_collection_xhr') }}",
  185.                 filterParameters : {
  186.                     "isActive" : "",
  187.                     "search" : ""
  188.                 },
  189.                 parseRecords: function (resp, options) {
  190.                     return resp.results;
  191.                 },
  192.                 syncData : function() {
  193.                     app.appView.showLoader();
  194.                     this.fetch({
  195.                         data : this.getValidParameters(),
  196.                         reset: true,
  197.                         success: function(model, response) {
  198.                             app.appView.hideLoader();
  199.                             var folderListView = new FolderList();
  200.                             app.pager.paginationData = response.pagination_data;
  201.                             var url = app.pager.paginationData.url;
  202.                             if(folderCollection.length == 0 && app.pager.paginationData.current != "0")
  203.                                 router.navigate(url.replace('replacePage', app.pager.paginationData.last),{trigger: true});
  204.                             else {
  205.                                 app.pager.render();
  206.                             }
  207.                             if(globalMessageResponse)
  208.                                 app.appView.renderResponseAlert(globalMessageResponse);
  209.                             globalMessageResponse = null;
  210.                         },
  211.                         error: function (model, xhr, options) {
  212.                             if(url = xhr.getResponseHeader('Location'))
  213.                                 window.location = url;
  214.                         }
  215.                     });
  216.                 }
  217.             });
  218.             var FolderItem = Backbone.View.extend({
  219.                 tagName : "div",
  220.                 className : "uv-app-list-brick",
  221.                 template : _.template($("#entity_list_item_tmp").html()),
  222.                 events : {
  223.                     'click .delete-folder' : "confirmRemove",
  224.                 },
  225.                 render : function() {
  226.                     console.log(this.model.toJSON());
  227.                     this.$el.html(this.template(this.model.toJSON()));
  228.                     return this;
  229.                 },
  230.                 unrender : function(response) {
  231.                     if(response.alertMessage != undefined) {
  232.                         folderCollection.syncData();
  233.                         app.appView.renderResponseAlert(response)
  234.                     }
  235.                 },
  236.                 confirmRemove: function(e) {
  237.                     e.preventDefault();
  238.                     app.appView.openConfirmModal(this)
  239.                 },
  240.                 removeItem : function (e) {
  241.                     app.appView.showLoader();
  242.                     self = this;
  243.                     this.model.destroy({
  244.                         url : "{{ path('helpdesk_member_knowledgebase_update_folder_xhr') }}/"+this.model.get('id'),
  245.                         method:"delete",
  246.                         success : function (model, response, options) {
  247.                             app.appView.hideLoader();
  248.                             app.appView.renderResponseAlert(response);
  249.                             folderCollection.syncData();
  250.                             if(typeof(response.allowedToAdd) != 'undefined' && response.allowedToAdd) {
  251.                                 $('#upgrade-plan-message').hide();
  252.                                 $('#uv-add-folder').show();
  253.                             }
  254.                         },
  255.                         error: function (model, xhr, options) {
  256.                             if(url = xhr.getResponseHeader('Location'))
  257.                                 window.location = url;
  258.                             var response = warningResponse;
  259.                             if(xhr.responseJSON)
  260.                                 response = xhr.responseJSON;
  261.                             app.appView.hideLoader();
  262.                             app.appView.renderResponseAlert(response);
  263.                         }
  264.                     });
  265.                 }
  266.             });
  267.             var FolderList = Backbone.View.extend({
  268.                 el : $(".uv-list-view div.folder-list"),
  269.                 noResultTemplate : _.template($("#no_result_tmp").html()),
  270.                 initialize : function() {
  271.                     this.render();
  272.                 },
  273.                 render : function () {
  274.                     this.$el.html('');
  275.                     this.$el.find(".uv-app-list-brick").remove();
  276.                     var isEmptyFlag = 0;
  277.                     if(folderCollection.length) {
  278.                         isEmptyFlag++;
  279.                         _.each(folderCollection.models, function (item) {
  280.                             this.renderFolder(item);
  281.                         }, this);
  282.                     }
  283.                     if(!isEmptyFlag) {
  284.                         this.$el.append(this.noResultTemplate())
  285.                     }
  286.                 },
  287.                 renderFolder : function (item) {
  288.                     var folderItem = new FolderItem({
  289.                         model: item
  290.                     });
  291.                     this.$el.append(folderItem.render().el);
  292.                 }
  293.             });
  294.             var Filter = app.Filter.extend({
  295.                 defaultSortIndex: 'a.dateAdded',
  296.                 sortText: "{% trans %}Sort By:{% endtrans %} ",
  297.                 defaultSortText: "{% trans %}Sort By:{% endtrans %} {% trans %}Created At{% endtrans %}",
  298.                 template : _.template($("#entity_list_sorting_tmp").html())
  299.             })
  300.             var folderCollection = new FolderCollection();
  301.             var filter = new Filter({
  302.                 collection : folderCollection
  303.             });
  304.             var PageView = Backbone.View.extend({
  305.                 el: '.uv-folders',
  306.                 events : {
  307.                     "change input[type='radio']": 'layoutChanged'
  308.                 },
  309.                 layoutChanged: function(e) {
  310.                     var currentElement = Backbone.$(e.currentTarget);
  311.                     $('.uv-layout-icon').removeClass('uv-layout-icon-active');
  312.                     $("label[for='" + currentElement.attr('id') + "']").addClass('uv-layout-icon-active');
  313.                     app.appView.showLoader();
  314.                     $.ajax({
  315.                         url : pathLayout,
  316.                         type : 'POST',
  317.                         data: {"layout" : Backbone.$(e.currentTarget).val(), "actionType": 'layoutUpdate'},
  318.                         dataType : 'json',
  319.                         success: function (response) {
  320.                             app.appView.hideLoader();
  321.                             app.appView.renderResponseAlert(response);
  322.                         },
  323.                         error: function (model, xhr, options) {
  324.                             if(url = xhr.getResponseHeader('Location'))
  325.                                 window.location = url;
  326.                             var response = warningResponse;
  327.                             if(xhr.responseJSON)
  328.                                 response = xhr.responseJSON;
  329.                             app.appView.hideLoader();
  330.                             app.appView.renderResponseAlert(response);
  331.                         }
  332.                     });
  333.                 },
  334.             });
  335.             var pageView = new PageView();
  336.             Router = Backbone.Router.extend({
  337.                 routes: {
  338.                     'page/:number(/sort/:sortField)(/direction/:order)' : 'paginate',
  339.                     'isActive/:status(/search/:query)(/page/:number)(/sort/:sortField)(/direction/:order)' : 'filterFolderByStatus',
  340.                     'search/:query(/page/:number)(/sort/:sortField)(/direction/:order)' : 'filterByQuery',
  341.                     '' : 'initializeList'
  342.                 },
  343.                 initializeList : function() {
  344.                     this.resetParams('', '');
  345.                     folderCollection.state.currentPage = null;
  346.                     filter.sortCollection();
  347.                     folderCollection.syncData();
  348.                 },
  349.                 paginate : function(number,sortField,order) {
  350.                     this.resetParams('', '');
  351.                     folderCollection.state.currentPage = number;
  352.                     filter.sortCollection(sortField,order);
  353.                     folderCollection.syncData();
  354.                 },
  355.                 filterFolderByStatus: function(status,query,number,sortField,order) {
  356.                     this.resetParams(status,query);
  357.                     folderCollection.state.currentPage = number;
  358.                     filter.sortCollection(sortField,order);
  359.                     folderCollection.syncData();
  360.                 },
  361.                 filterByQuery : function(query,number,sortField,order) {
  362.                     this.resetParams('',query);
  363.                     folderCollection.state.currentPage = number;
  364.                     filter.sortCollection(sortField,order);
  365.                     folderCollection.syncData();
  366.                 },
  367.                 resetParams : function(status, query) {
  368.                     if(query != null)
  369.                         query = query.replace(/\+/g,' ');
  370.                     folderCollection.filterParameters.isActive = status;
  371.                     var statusText = status ? $(".filter-by-status a[data-id='" + status + "']").text() : "{% trans %}All{% endtrans %}";
  372.                     $(".filter-by-status .uv-dropdown-btn").text("{% trans %}Status:{% endtrans %} " + statusText);
  373.                     folderCollection.filterParameters.search = query;
  374.                     $(".uv-search-inline").val(query);
  375.                 }
  376.             });
  377.             router = new Router();
  378.             Backbone.history.start({push_state:true});
  379.         });
  380.     </script>
  381. {% endblock %}