{# Modified for MLC from Sonata package. (c) Julien Jorry <julien.jorry@gmail.com> #} {%- set _preview = block('preview') is defined ? block('preview')|trim : null %} {% set _form = block('form') is defined ? block('form')|trim : null %} {% set _show = block('show') is defined ? block('show')|trim : null %} {% set _list_table = block('list_table') is defined ? block('list_table')|trim : null %} {% set _list_filters = block('list_filters') is defined ? block('list_filters')|trim : null %} {% set _tab_menu = block('tab_menu') is defined ? block('tab_menu')|trim : null %} {% set _content = block('content') is defined ? block('content')|trim : null %} {% set _title = block('title') is defined ? block('title')|trim : null %} {% set _breadcrumb = block('breadcrumb') is defined ? block('breadcrumb')|trim : null %} {% set _actions = block('actions') is defined ? block('actions')|trim : null %} {% set _navbar_title = block('navbar_title') is defined ? block('navbar_title')|trim : null %} {% set _list_filters_actions = block('list_filters_actions') is defined ? block('list_filters_actions')|trim : null -%} {% set _skin = sonata_config.getOption('skin') %} {% set _use_select2 = sonata_config.getOption('use_select2') %} {% set _use_icheck = sonata_config.getOption('use_icheck') %} <!DOCTYPE html> <html {% block html_attributes %}class="no-js"{% endblock %}> <head> <title>{{title|default('Kohinos') }}</title> <meta name="is-tav-env" content="{{ tav_env }}" /> <meta name="description" content="{{ description|default('Kohinos : Outil de gestion de monnaie locale complémentaire') }}" /> <meta name="keywords" content="{{ keywords|default('Kohinos, mlc, mlcc, monnaie locale, monnaies locales') }}" /> {% block meta_tags %} <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta charset="UTF-8"> {% block favicon %} <link rel="apple-touch-icon" sizes="180x180" href="/images/favicon/apple-touch-icon.png"> <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon/favicon-16x16.png"> {% endblock favicon %} <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'> {% endblock meta_tags %} <meta data-sonata-admin='{{ { config: { SKIN: _skin, CONFIRM_EXIT: sonata_config.getOption('confirm_exit'), USE_SELECT2: _use_select2, USE_ICHECK: _use_icheck, USE_STICKYFORMS: sonata_config.getOption('use_stickyforms'), DEBUG: sonata_config.getOption('js_debug'), }, translations: { CONFIRM_EXIT: 'confirm_exit'|trans({}, 'SonataAdminBundle'), }, }|json_encode()|raw }}' > {% block stylesheets %} <link rel="stylesheet" href="/leaflet/leaflet.css"> {% for stylesheet in sonata_config.getOption('stylesheets', []) %} <link rel="stylesheet" href="{{ asset(stylesheet) }}"> {% endfor %} {% endblock %} {% block javascripts %} {% block sonata_javascript_config %} {% endblock %} {% block sonata_javascript_pool %} {% for javascript in sonata_config.getOption('javascripts', []) %} <script src="{{ asset(javascript) }}"></script> {% endfor %} {% endblock %} {# localize moment #} {% set localeForMoment = canonicalize_locale_for_moment() %} {% if localeForMoment %} <script src="{{ asset( 'bundles/sonatacore/vendor/moment/locale/' ~ localeForMoment ~ '.js' ) }}"></script> {% endif %} {# localize select2 #} {% if sonata_config.getOption('use_select2') %} {% set localeForSelect2 = canonicalize_locale_for_select2() %} {% if localeForSelect2 %} <script src="{{ asset('bundles/sonatacore/vendor/select2/select2_locale_' ~ localeForSelect2 ~ '.js') }}"></script> {% endif %} {% endif %} {% endblock %} <title> {% block sonata_head_title %} {{ 'Admin'|trans({}, 'SonataAdminBundle') }} {% if _title is not empty %} {{ _title|striptags|raw }} {% else %} {% if action is defined %} - {% for menu in breadcrumbs_builder.breadcrumbs(admin, action) %} {% if not loop.first %} {% if loop.index != 2 %} > {% endif %} {%- set translation_domain = menu.extra('translation_domain', 'messages') -%} {# We use method accessor instead of ".label" since `menu` implements `ArrayAccess` and could have a property called "label". #} {%- set label = menu.getLabel() -%} {%- if translation_domain is not same as(false) -%} {%- set label = label|trans(menu.extra('translation_params', {}), translation_domain) -%} {%- endif -%} {{ label }} {% endif %} {% endfor %} {% endif %} {% endif %} {% endblock %} </title> </head> <body {% block body_attributes -%} class="sonata-bc {% block admin_lte_skin_class %}{{ _skin }}{% endblock %} fixed {% if _use_select2 %}sonata-select2{% endif %} {% if _use_icheck %}sonata-icheck{% endif %} {% if app.request.cookies.get('sonata_sidebar_hide') -%} sidebar-collapse {%- endif -%}" {%- endblock -%} > <div class="wrapper"> {# AJOUT POUR LES MLC #} <input type="hidden" name="koh_map_center" id="koh_map_center" value='{{KOH_MAP_CENTER|default('')}}' /> <input type="hidden" name="koh_map_zoom" id="koh_map_zoom" value='{{KOH_MAP_ZOOM|default('')}}' /> {% block sonata_header %} <header class="main-header"> {% block sonata_header_noscript_warning %} <noscript> <div class="noscript-warning"> {{ 'noscript_warning'|trans({}, 'SonataAdminBundle') }} </div> </noscript> {% endblock %} {% block logo %} {% apply spaceless %} {# MLC : LIEN VERS LE FRONT SUR LE LOGO #} {# <a class="logo" href="{{ path('index') }}"> #} <a class="logo" href="{{ path('sonata_admin_dashboard') }}"> {% if 'single_image' == sonata_config.getOption('title_mode') or 'both' == sonata_config.getOption('title_mode') %} <img src="{{ asset(sonata_config.logo) }}" alt="{{ sonata_config.title }}"> {% endif %} {% if 'single_text' == sonata_config.getOption('title_mode') or 'both' == sonata_config.getOption('title_mode') %} <span>{{ sonata_config.title }}</span> {% endif %} </a> {% endapply %} {% endblock %} {% block sonata_nav %} <nav class="navbar navbar-static-top" role="navigation"> {# MLC : AJOUT POUR LIEN VERS LE FRONT #} {% block front %} <a href="{{path('index')}}" class="sidebar-front" data-toggle="tooltip" data-placement="bottom" title="{{ "Page d'accueil"|trans }}" role="button" title="{{ "Page d'accueil"|trans({}, 'messages') }}"> <i class="fa fa-lg fa-home"></i> <span class="sr-only">{{ "Page d'accueil"|trans({}, 'messages') }}</span> </a> {% endblock front %} {% block bugreport %} {% set printBugReport = KOH_BUG_REPORT|default('') %} {% if app.user and (is_granted('ROLE_ADMIN') and printBugReport == 'ROLE_ADMIN') or (is_granted('ROLE_USER') and printBugReport == 'ROLE_USER') %} <a class='sidebar-front' style='color:#a94442 !important;' href='{{ path('bugreport') }}' target='_blank' rel="noopener noreferrer"> <i class="fa fa-lg fa-bug"></i> <span class="sr-only">{{ "Reporter un bug"|trans({}, 'messages') }}</span> </a> {% endif %} {% endblock %} <a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button" title="{{ 'toggle_navigation'|trans({}, 'SonataAdminBundle') }}"> <i class="fa fa-bars"></i> <span class="sr-only">{{ 'toggle_navigation'|trans({}, 'SonataAdminBundle') }}</span> </a> <div class="navbar-left"> {% block sonata_breadcrumb %} <div class="hidden-xs"> {% if _breadcrumb is not empty or action is defined %} <ol class="nav navbar-top-links breadcrumb"> {% if _breadcrumb is empty %} {% if action is defined %} {% for menu in breadcrumbs_builder.breadcrumbs(admin, action) %} {%- set translation_domain = menu.extra('translation_domain', 'messages') -%} {# We use method accessor instead of ".label" since `menu` implements `ArrayAccess` and could have a property called "label". #} {%- set label = menu.getLabel() -%} {%- if translation_domain is not same as(false) -%} {%- set label = label|trans(menu.extra('translation_params', {}), translation_domain) -%} {%- endif -%} {% if not loop.last %} <li> {% if menu.uri is not empty %} <a href="{{ menu.uri }}"> {% if menu.extra('safe_label', true) %} {{- label|raw -}} {% else %} {{- label|u.truncate(100, '...') -}} {% endif %} </a> {% else %} <span>{{ label|u.truncate(100, '...') }}</span> {% endif %} </li> {% else %} <li class="active"><span>{{ label|u.truncate(100, '...') }}</span></li> {% endif %} {% endfor %} {% endif %} {% else %} {{ _breadcrumb|raw }} {% endif %} </ol> {% endif %} </div> {% endblock sonata_breadcrumb %} </div> {% block sonata_top_nav_menu %} {% if app.user and is_granted(sonata_config.getOption('role_admin')) %} <div class="navbar-custom-menu"> <ul class="nav navbar-nav"> {% block sonata_top_nav_menu_add_block %} <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-plus-square fa-fw" aria-hidden="true"></i> <i class="fa fa-caret-down" aria-hidden="true"></i> </a> {% include get_global_template('add_block') %} </li> {% endblock %} {% block sonata_top_nav_menu_user_block %} <li class="dropdown user-menu"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-user fa-fw" aria-hidden="true"></i> <i class="fa fa-caret-down" aria-hidden="true"></i> </a> <ul class="dropdown-menu dropdown-user"> {% include get_global_template('user_block') %} </ul> </li> {% endblock %} </ul> </div> {% endif %} <div class="navbar-custom-menu"> <ul class="nav navbar-nav"> {# @TODO MLC : COMMENT TRANSLATION CHANGE {% block sonata_top_nav_menu_locale_block %} <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-flag fa-fw" aria-hidden="true"></i> <i class="fa fa-caret-down" aria-hidden="true"></i> </a> <div class="dropdown-menu multi-column dropdown-add"> <div class="container-fluid"> <div class="row"> <ul class="dropdown-menu"> <li role="presentation" class="dropdown-header"> <i class="fa fa-language"></i> {{ 'languages'|trans({}, 'SonataTranslationBundle') }} </li> {% for locale in sonata_translation_locales %} <li role="presentation" class="{{ app.request.locale == locale ? 'active' : '' }}"> <a role="menuitem" tabindex="-1" href="{{ path('sonata.translation.locale', {'locale': locale}) }}"> {{ locale|language(locale)|capitalize }} </a> </li> {% endfor %} </ul> </div> </div> </div> </li> {% endblock %} #} </ul> </div> {% endblock %} </nav> {% endblock sonata_nav %} </header> {% endblock sonata_header %} {% block sonata_wrapper %} {% block sonata_left_side %} <aside class="main-sidebar"> <section class="sidebar"> {% block sonata_side_nav %} {% block sonata_sidebar_search %} {% if sonata_config.getOption('search') %} <form action="{{ path('sonata_admin_search') }}" method="GET" class="sidebar-form" role="search"> <div class="input-group custom-search-form"> <input type="text" name="q" value="{{ app.request.get('q') }}" class="form-control" placeholder="{{ 'search_placeholder'|trans({}, 'SonataAdminBundle') }}"> <span class="input-group-btn"> <button class="btn btn-flat" type="submit"> <i class="fa fa-search" aria-hidden="true"></i> </button> </span> </div> </form> {% endif %} {% endblock sonata_sidebar_search %} {% block side_bar_before_nav %} {% endblock %} {% block side_bar_nav %} {{ knp_menu_render('sonata_admin_sidebar', {template: get_global_template('knp_menu_template')}) }} {% endblock side_bar_nav %} {% block side_bar_after_nav %} <p class="text-center small" style="border-top: 1px solid #444444; padding-top: 10px"> {% block side_bar_after_nav_content %} {% endblock %} </p> {% endblock %} {% endblock sonata_side_nav %} </section> </aside> {% endblock sonata_left_side %} <div class="content-wrapper"> {% include '@kohinos/common/flash-messages.html.twig' %} {% block sonata_page_content %} <section class="content-header"> {% block sonata_page_content_header %} {% block sonata_page_content_nav %} {% if _navbar_title is not empty or _tab_menu is not empty or _actions is not empty or _list_filters_actions is not empty %} <nav class="navbar navbar-default" role="navigation"> <div class="container-fluid"> {% block tab_menu_navbar_header %} {% if _navbar_title is not empty %} <div class="navbar-header"> <a class="navbar-brand" href="#">{{ _navbar_title|raw }}</a> </div> {% endif %} {% endblock %} <div class="navbar-collapse"> {% if _tab_menu is not empty %} <div class="navbar-left"> {{ _tab_menu|raw }} </div> {% endif %} {% if admin is defined and action is defined and action == 'list' and admin.listModes|length > 1 %} <div class="nav navbar-right btn-group"> {% for mode, settings in admin.listModes %} <a href="{{ admin.generateUrl('list', app.request.query.all|merge({_list_mode: mode})) }}" class="btn btn-default navbar-btn btn-sm{% if admin.getListMode() == mode %} active{% endif %}"><i class="{{ settings.class }}"></i></a> {% endfor %} </div> {% endif %} {% block sonata_admin_content_actions_wrappers %} {% if _actions|replace({ '<li>': '', '</li>': '' })|trim is not empty %} <ul class="nav navbar-nav navbar-right"> {# MODIF MLC : #} {# {% if _actions|split('</a>')|length > 2 %} #} {% if _actions|split('</a>')|length > 3 %} <li class="dropdown sonata-actions"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ 'link_actions'|trans({}, 'SonataAdminBundle') }} <b class="caret"></b></a> <ul class="dropdown-menu" role="menu"> {{ _actions|raw }} </ul> </li> {% else %} {{ _actions|raw }} {% endif %} </ul> {% endif %} {% endblock sonata_admin_content_actions_wrappers %} {% if _list_filters_actions is not empty %} {{ _list_filters_actions|raw }} {% endif %} </div> </div> </nav> {% endif %} {% endblock sonata_page_content_nav %} {% endblock sonata_page_content_header %} </section> <section class="content"> {% block sonata_admin_content %} {% block notice %} {% include ['@SonataCore/FlashMessage/render.html.twig', '@SonataTwig/FlashMessage/render.html.twig'] %} {% endblock notice %} {% if _preview is not empty %} <div class="sonata-ba-preview">{{ _preview|raw }}</div> {% endif %} {% if _content is not empty %} <div class="sonata-ba-content">{{ _content|raw }}</div> {% endif %} {% if _show is not empty %} <div class="sonata-ba-show">{{ _show|raw }}</div> {% endif %} {% if _form is not empty %} <div class="sonata-ba-form">{{ _form|raw }}</div> {% endif %} {% if _list_filters is not empty %} <div class="row"> {{ _list_filters|raw }} </div> {% endif %} {% if _list_table is not empty %} <div class="row"> {{ _list_table|raw }} </div> {% endif %} {% endblock sonata_admin_content %} </section> {% endblock sonata_page_content %} </div> {% endblock sonata_wrapper %} </div> {% if sonata_config.getOption('use_bootlint') %} {% block bootlint %} {# Bootlint - https://github.com/twbs/bootlint#in-the-browser #} <script> javascript:(function(){var s=document.createElement("script");s.onload=function(){bootlint.showLintReportForCurrentDocument([], {hasProblems: false, problemFree: false});};s.src="https://maxcdn.bootstrapcdn.com/bootlint/latest/bootlint.min.js";document.body.appendChild(s)})(); </script> {% endblock %} {% endif %} {# MLC : AJOUT POUR EDITABLE BOOLEAN #} {% block js %} {{ encore_entry_script_tags('admin') }} <script> $('.viewChoiceGroup').on('click', function () { $('#roleGroupeModal').modal('show'); }); $('.validateAchatMonnaie').on('click', function (e) { // e.preventDefault(); var self = $(this); var modal = $('#confirmValidationAchatModal'); // Get relevant confirmation message div var message = modal.find('.modal-body'); // Set data in modal message.find('.montant').text(self.data('montant')); message.find('.moyen').text(self.data('moyen')); message.find('.destinataire').text(self.data('destinataire')); message.find('.reference').text(self.data('reference')); message.find('.type').text(self.data('type')); // Show modal console.log(modal); console.log('showConfirmValidationAchatModal show modal'); modal.modal('show'); // Bind modal validation button with form submition $('#confirmValidationAchatModal #confirmAchatButton').off(); $('#confirmValidationAchatModal #confirmAchatButton').on('click', function(e){ $.ajax({ url : self.data('url'), type: 'post', success: function(data) { if(data.status == 'success') { self .addClass('btn-secondary disabled') .removeClass('btn-primary validateAchatMonnaie') .attr('disabled', 'disabled') .html('<i class="fa fa-check"></i> Validée !'); } else { self.addClass('text-red'); } modal.modal('hide'); }, error: function(data) { modal.modal('hide'); } }); }); }); $('.helloassoAssociateButton').on('click', function (e) { // e.preventDefault(); var self = $(this); var modal = $('#helloassoAssociateModal'); modal.find('.error').html(''); // Get relevant confirmation message div var message = modal.find('.modal-body'); // Set data in modal message.find('.type').text(self.data('type')); message.find('.date').text(self.data('date')); message.find('.amount').text(self.data('amount')); message.find('.user').text(self.data('user')); message.find('.payer').text(self.data('payer')); // Show modal console.log('helloassoAssociateModal show modal'); modal.modal('show'); // Bind modal validation button with form submition $('#helloassoAssociateModal #confirmAssociateHelloassoButton').off(); $('#helloassoAssociateModal #confirmAssociateHelloassoButton').on('click', function(e){ var button = $(this); modal.find('.error').html(''); $(this).attr('disabled', 'disabled').html('<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> Loading...'); $.ajax({ url : self.data('url'), type: 'post', data : { 'adherent': $('#helloasso_associate_adherent option:selected').val(), 'presta': $('#helloasso_associate_presta option:selected').val(), }, success: function(data) { if(data.status == 'success') { self .addClass('btn-secondary disabled') .removeClass('btn-primary helloassoAssociateButton') .attr('disabled', 'disabled') .html('<i class="fa fa-check"></i> Validé !'); modal.modal('hide'); location.reload(); } else { modal.find('.error').html(data.error); button.removeAttr('disabled').html('Confirmer'); } button.removeAttr('disabled').html('Confirmer'); }, error: function(data) { modal.modal('hide'); button.removeAttr('disabled').html('Confirmer'); } }); }); }); $(document).ready(function() { $.datepicker.regional['fr'] = { closeText: 'Fermer', prevText: '<Préc', nextText: 'Suiv>', currentText: 'Aujourd\'hui', monthNames: ['Janvier','Fevrier','Mars','Avril','Mai','Juin', 'Juillet','Aout','Septembre','Octobre','Novembre','Decembre'], monthNamesShort: ['Jan','Fev','Mar','Avr','Mai','Jun', 'Jul','Aou','Sep','Oct','Nov','Dec'], dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], weekHeader: 'Sm', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '', minDate: '-5Y', yearRange: 'c-5:c+3', maxDate: '+3Y', numberOfMonths: 2, showButtonPanel: true }; $.datepicker.setDefaults($.datepicker.regional['fr']); // you may need to change this code if you are not using Bootstrap Datepicker $('.js-datepicker').datepicker({ language: 'fr' }); }); </script> {% endblock js %} {% include '@kohinos/common/modale_choix_groupe.html.twig' %} {% include '@kohinos/admin/modale_validation_achat.html.twig' %} {% include '@kohinos/admin/modale_helloasso_associate.html.twig' %} {# FIN AJOUT #} </body> </html>