src/Views/search.blade.php
@if(config('dynamic_filter.no_search_js', true))
<script src="{{ config('dynamic_filter.search_js_url', FrontendAsset::elixir('vendor/hnhdigital-os/laravel-model-filter/search.js')) }}" defer></script>
@endif
<link rel="stylesheet" type="text/css" href="{{ config('dynamic_filter.search_js_url', FrontendAsset::elixir('vendor/hnhdigital-os/laravel-model-filter/search.css')) }}" defer>
@capturestart
<p class="form-group">
<label class="control-label" style="width: 100%">Name</label>
{!! Html::createElement('input')->name('filter_name')->type('text')->placeholder('Enter a name to save this filter')
->value(array_get($search_filters, 'saved_filter.name', ''))->addClass('input form-control search-filter-field')->required() !!}
</p>
<p class="form-group">
<label class="control-label" style="width: 100%">Description</label>
{!! Html::createElement('textarea')->name('filter_description')->text(array_get($search_filters, 'saved_filter.description', ''))
->addClass('input form-control') !!}
</p>
<div style="padding:5px;font-size:90%;color:#666;">
<p>Once saved, you can reload these filter fields again. This filter will also become available within areas that use {!! strtolower($app_model_title) !!} and will be available for any automated processes.</p>
<p>By default, any saved filter is limited to your user profile, unless you check the public checkbox below.</p>
<p>Visit the `Filters` section to manage access to this filter.</p>
</div>
@capturestop('modal_content')
@capturestart
{!! Html::a('Save Changes')->scriptLink('Save changes')->addClass('action-save-filter1 btn btn-m btn-primary')
->data('model-uuid', $app_model_uuid)->data('saved-filter-uuid', array_get($search_filters, 'saved_filter.uuid', ''))->data('info_message', 'Saving filter...')->data('app-model-title', $app_model_title)
->hidden() !!}
{!! Html::a('Save')->scriptLink('Save')->addClass('action-save-filter btn btn-m btn-info')
->data('model-uuid', $app_model_uuid)->data('info_message', 'Saving filter...') !!}
@capturestop('modal_footer_right')
@capturestart
{!! Html::a('Close')->href('Close')->addClass('action-close-save-filter btn btn-default')->data('dismiss', 'modal') !!}
@capturestop('modal_footer_left')
@include('dynamic_filter::modal', ['modal' => ['id' => 'action-save-filter', 'header_left' => 'Save '.$app_model_title.' Filter', 'content' => $modal_content, 'footer_left' => $modal_footer_left, 'footer_right' => $modal_footer_right]])
<div id="{!! $setup->get('search.name') !!}" data-search-request="{!! $setup->get('search.search_request') !!}" data-search-model="{!! $setup->get('search.model', '') !!}" data-search-controller="{!! $setup->get('search.controller', '') !!}" data-search-base="{!! $setup->get('search.base', '') !!}" data-search-method="{!! $setup->get('search.method', '') !!}" class="common-module-content-search {!! $layout_div_class !!}">
@html(input()->type('hidden')->name('route')->addClass('search-field')->value(Route::current()->getName()))
@if(isset($search_data['settings']))
@forelse ($search_data['settings'] as $name => $value)
@if(is_array($value))
@foreach($value as $name_1 => $value_1)
@if(is_array($value_1))
@foreach($value_1 as $name_2 => $value_2)
@if(!is_array($value_2))
@html(input()->type('hidden')->name($name.'['.$name_1.']['.$name_2.']')->addClass('search-field')->value($value_2))
@endif
@endforeach
@else
@html(input()->type('hidden')->name($name.'['.$name_1.']')->addClass('search-field')->value($value_1))
@endif
@endforeach
@else
@html(input()->type('hidden')->name($name)->addClass('search-field')->value($value))
@endif
@empty
@endforelse
@endif
<div class="tabs-container">
@if(!$setup->get('tab.hide', false))
<ul class="nav nav-tabs">
<li class="nav-item" class="active">
<a class="nav-link active" id="{!! $setup->get('search.name') !!}-tab1" class="tab-search-results" data-toggle="tab" href="#{!! $setup->get('search.name') !!}-tab-1">
<i class="fa fa-search fa-fw"></i> {{ $setup->get('tab.search.title', 'Results') }}
</a>
</li>
@if($setup->get('tab.advanced.show', false) && $setup->get('search.model', false) && !empty($filter_options))
<li class="nav-item">
<a class="nav-link tab-search-advanced" id="{!! $setup->get('search.name') !!}-tab2" data-toggle="tab" href="#{!! $setup->get('search.name') !!}-tab-2"><i class="fa fa-binoculars fa-fw"></i> {{ $setup->get('tab.advanced.title', 'Advanced') }}</a>
</li>
@endif
@if($setup->get('tab.selections.show', false))
<li class="nav-item">
<a class="nav-link tab-search-selections" id="{!! $setup->get('search.name') !!}-tab3" data-toggle="tab" href="#{!! $setup->get('search.name') !!}-tab-3"><i class="fa fa-dot-circle-o fa-fw"></i> {{ $setup->get('tab.selections.title', 'Selections (0)') }}</a>
</li>
@endif
@if($setup->get('tab.export.show', false))
<li class="nav-item">
<a class="nav-link tab-search-export" id="{!! $setup->get('search.name') !!}-tab4" data-toggle="tab" href="#{!! $setup->get('search.name') !!}-tab-4"><i class="fa fa-download fa-fw"></i> {{ $setup->get('tab.export.title', 'Export') }}</a>
</li>
@endif
@if($setup->get('tab.search_filter.show', false))
<li class="nav-item dropdown search-filter-mode">
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{!! $mode_name !!}<span class="caret"></span></a>
{!! Html::input()->type('hidden')->name('mode')->addClass('search-field')->value($setup->get('search.filters.mode', '0')) !!}
<ul class="dropdown-menu">
@foreach($setup->get('tab.search_filter.options', []) as $item_id => $item_name)
<li>{!! Html::a()->scriptLink('Selects search mode')->data('mode', $item_id)->text($item_name) !!}</li>
@endforeach
</ul>
</li>
@endif
<li class="nav-item search-count"><a class="nav-link" href="#">{!! $result->get('count', 0) !!}</a></li>
@if(!$setup->get('tab.search_pagination.hide', false))
<div style="flex-grow: 1;"></div>
@capturestart
<li class="nav-item f-right">
<span class="search-buttons" style="display: none;">
<a href="javascript::void(0)" class="search-result-first {!! ($result->get('left_arrow', false)) ? 'btn-outline-primary' : '' !!}" style="font-size:1.5em;padding: 0 5px 0 5px;" data-change-page="1">@icon(step-backward)</a>
</span>
<span class="search-buttons" style="display: none;">
<a href="javascript::void(0)" class="search-result-up {!! ($result->get('left_arrow', false)) ? 'btn-outline-primary' : '' !!} " style="font-size:1.5em;padding: 0 5px 0 5px;" data-change-page="{!! $result->get('left_arrow_page', 0) !!}">@icon(chevron-circle-left)</a>
</span>
<span style="display: none;">
<span class="dropdown search-items-per-page-pulldown">
{!! Html::input()->type('hidden')->name('change_page')->addClass('search-field')->value($setup->get('search.filters.change_page', '0')) !!}
{!! Html::input()->type('hidden')->name('items_per_page')->addClass('search-field')->value($setup->get('search.filters.items_per_page', '0')) !!}
{!! Html::a()->scriptLink('Opens search items per page')->addClass('dropdown-toggle')->data('toggle', 'dropdown')->aria('haspopup', 'true')->aria('expanded', 'false')->style('padding: 10px 5px 10px 5px;')->text('Show 20<span class="caret"></span>') !!}
<ul class="dropdown-menu search-items-per-page">
{!! $result->get('items_per_page') !!}
</ul>
</span>
</span>
<span class="search-buttons" style="display: none;">
<a href="javascript::void(0)" class="search-result-down {!! ($result->get('right_arrow', false)) ? 'btn-outline-primary' : '' !!}" style="font-size:1.5em;padding: 0 5px 0 5px;" data-change-page="{!! $result->get('right_arrow_page', 0) !!}">@icon(chevron-circle-right)</a>
</span>
<span class="search-buttons" style="display: none;">
<a href="javascript::void(0)" class="search-result-last {!! ($result->get('right_arrow', false)) ? 'btn-outline-primary' : '' !!}" style="font-size:1.5em;padding: 0 5px 0 5px;" data-change-page="{!! $result->get('search.filters.paginate_last_page', 0) !!}">@icon(step-forward)</a>
</span>
</li>
@capturestop("result_navigation")
@raw(echo $result_navigation)
@endif
</ul>
@endif
<div class="tab-content">
<div id="{!! $setup->get('search.name') !!}-tab-1" class="panel-body tab-pane active">
<div class="table-responsive">
<table class="table {!! $setup->get('table.classes', 'table-striped table-hover') !!}">
<colgroup>
@for($c = 0; $c < $setup->get('colgroup.total', 1); $c++)
<col {!! $setup->get('colgroup.'.$c.'.col', '') !!} {!! $setup->has('colgroup.'.$c.'.width') ? 'width="'.$setup->get('colgroup.'.$c.'.width').'"' : '' !!}>
@endfor
</colgroup>
<thead class="search-header">
{!! $result->get('rows.thead', '') !!}
</thead>
@if($setup->get('search.show', false))
<tbody class="search">
<tr>
@for($c = 0; $c < $setup->get('colgroup.total', 1); $c++)
@if(!$setup->get('search.'.$c.'.hide', false))
<td {!! $setup->get('search.'.$c.'.td', '') !!}>{!! $setup->has('search.'.$c.'.text') ? $setup->get('search.'.$c.'.text') : ' ' !!}</td>
@endif
@endfor
</tr>
</tbody>
@endif
<tbody class="search-result-rows">
{!! $result->get('rows.tbody', '') !!}
</tbody>
</table>
@if(!$setup->get('tab.hide', false) && !$setup->get('tab.search_pagination.hide', false))
<div class="secondary-pagination-buttons" style="min-height:40px;display:none;">
<ul class="nav nav-tabs" style="display: table;margin: 0 auto;border:0;">
@raw(echo $result_navigation)
</ul>
</div>
@endif
</div>
</div>
@if($setup->get('tab.advanced.show', false) && $setup->get('search.model', false) && !empty($filter_options))
<div id="{!! $setup->get('search.name') !!}-tab-2" class="tab-pane">
<div class="panel-body" style="padding:20px;">
<div class="form-horizontal" class="p-t-md">
<div class="form-group">
<div class="input-group">
{!! Html::select()->addClass('form-control action-load-filter init-select2')->style('width:100%;')->data('select2-placeholder', 'Load a saved filter from the list and apply to results:')->data('select2-allow-clear', true)->addOptionsArray($model_filter_options, 0, 1) !!}
<span class="input-group-btn">
<button type="button" class="btn btn-sm btn-primary">@icon(sync) Load</button>
</span>
</div>
</div>
<div class="form-group">
<div class="input-group">
{!! Html::select()->addClass('form-control action-add-filter init-select2')->style('width:100%;')->data('select2-placeholder', 'Add a field from the list to filter results:')->data('select2-allow-clear', true)->addOptionsArray($filter_options, 0, 1) !!}
<span class="input-group-btn">
<button type="button" class="btn btn-sm btn-primary">@icon(plus) Add</button>
</span>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="applied-filters">
@if(count($search_filters))
<?php $placeholder_count = 0; ?>
@foreach($search_filters as $filter_name => $applied_filters)
<?php
$filter_settings = [];
if (isset($filters[$filter_name])) {
$filter_settings = $filters[$filter_name];
}
?>
@if(!empty($filter_settings) && is_array($applied_filters))
@foreach($applied_filters as $filter)
@if(empty($filter_settings['search_tab_only']))
@include('dynamic_filter::filter', ['placeholder_id' => $filter_name.'_'.$placeholder_count, 'type' => $filter_settings['filter'], 'template' => false, 'filter_settings' => $filter_settings, 'operator_options' => $operator_options[$filter_settings['filter']]])
@endif
@endforeach
@endif
@endforeach
<?php $placeholder_count++; ?>
@endif
</div>
<div class="row">
<div class="col-3">
@html(button(Html::icon('play').' Apply')->type('submit')->addClass('btn btn-sm btn-primary action-apply-filter ladda-button init-ladda')->data('style', 'expand-right'))
@html(a(Html::icon('save').' Save filter')->addClass('btn btn-sm btn-info action-save-filter ladda-button init-ladda')->href('#action-save-filter')->data('style', 'expand-right')->data('toggle', 'modal'))
</div>
<div class="col-7"></div>
<div class="col-2" style="text-align: right;">
<label class="control-label">
<button class="action-cancel-filter btn btn-sm btn-white" type="submit">@icon(ban) Clear filters</button>
</label>
</div>
</div>
@foreach($filter_types as $type)
@include('dynamic_filter::filter', ['type' => $type, 'template' => true, 'filter_name' => '', 'filter_settings' => [], 'filter' => [], 'operator_options' => $operator_options[$type]])
@endforeach
</div>
</div>
</div>
@endif
@if($setup->get('tab.selections.show', false))
<div id="{!! $setup->get('search.name') !!}-tab-3" class="tab-pane">
<div class="panel-body">
</div>
</div>
@endif
@if($setup->get('tab.export.show', false))
<div id="{!! $setup->get('search.name') !!}-tab-4" class="tab-pane">
<div class="panel-body">
</div>
</div>
@endif
</div>
</div>
</div>
@if(!empty($list_filter_options))
<script type="text/javascript">
var list_filter_options = <?= json_encode($list_filter_options) ?>
</script>
@endif
@section('footer')
@parent
<form id="{!! $setup->get('search.name') !!}-form" class="common-module-content-search-form" novalidate="novalidate" action="{!! $setup->get('search.search_request') !!}" method="post" onsubmit="return false;">
{{ $csrf_field = csrf_field() }}
<button type="submit" class="hidden-search-button"></button>
</form>
<script>
$('#{!! $setup->get('search.name') !!}-form').data('validator', {'settings': {}})
</script>
@stop