logs.blade.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. @extends('vendor.log-viewer.remark.layouts')
  2. <?php
  3. /** @var Illuminate\Pagination\LengthAwarePaginator $rows */
  4. ?>
  5. @section('content')
  6. <div class="page-header">
  7. <h1>@lang('Logs')</h1>
  8. </div>
  9. <div class="table-responsive">
  10. <table class="table table-hover">
  11. <thead>
  12. <tr>
  13. @foreach ($headers as $key => $header)
  14. <th class="{{ $key == 'date' ? 'text-left' : 'text-center' }}" scope="col">
  15. @if ($key == 'date')
  16. <strong>{{ $header }}</strong>
  17. @else
  18. <strong class="badge badge-level-{{ $key }}">
  19. {{ log_styler()->icon($key) }} {{ $header }}
  20. </strong>
  21. @endif
  22. </th>
  23. @endforeach
  24. <th class="text-right" scope="col">@lang('Actions')</th>
  25. </tr>
  26. </thead>
  27. <tbody>
  28. @forelse($rows as $date => $row)
  29. <tr>
  30. @foreach ($row as $key => $value)
  31. <td class="{{ $key == 'date' ? 'text-left' : 'text-center' }}">
  32. @if ($key == 'date')
  33. <strong>{{ $value }}</strong>
  34. @elseif ($value == 0)
  35. @else
  36. <a href="{{ route('log-viewer::logs.filter', [$date, $key]) }}">
  37. <span class="badge badge-level-{{ $key }}">{{ $value }}</span>
  38. </a>
  39. @endif
  40. </td>
  41. @endforeach
  42. <td class="text-right">
  43. <a class="btn btn-sm btn-info" href="{{ route('log-viewer::logs.show', [$date]) }}">
  44. <i class="fa-solid fa-magnifying-glass"></i>
  45. </a>
  46. <a class="btn btn-sm btn-success" href="{{ route('log-viewer::logs.download', [$date]) }}">
  47. <i class="fa-solid fa-download"></i>
  48. </a>
  49. <button class="btn btn-sm btn-danger" data-target="#deleteLogModal" data-toggle="modal" data-log-date="{{ $date }}"
  50. type="button">
  51. <i class="fa-solid fa-trash"></i> @lang('Delete')
  52. </button>
  53. </td>
  54. </tr>
  55. @empty
  56. <tr>
  57. <td class="text-center" colspan="11">
  58. <span class="badge badge-secondary">@lang('The list of logs is empty!')</span>
  59. </td>
  60. </tr>
  61. @endforelse
  62. </tbody>
  63. </table>
  64. </div>
  65. {{ $rows->render() }}
  66. @endsection
  67. @section('modals')
  68. {{-- DELETE MODAL --}}
  69. <div class="modal fade" id="deleteLogModal" role="dialog" aria-hidden="true" aria-labelledby="deleteLogModal" tabindex="-1">
  70. <div class="modal-dialog modal-simple modal-center">
  71. <form class="modal-content" id="deleteLogForm" action="{{ route('log-viewer::logs.delete') }}" method="POST">
  72. <div class="modal-header">
  73. <button class="close" data-dismiss="modal" type="button" aria-label="{{ trans('common.close') }}">
  74. <span aria-hidden="true">×</span>
  75. </button>
  76. <h4 class="modal-title">@lang('Delete log file')</h4>
  77. </div>
  78. <div class="modal-body">
  79. <input name="_method" type="hidden" value="DELETE">@csrf
  80. <input name="date" type="hidden" value="">
  81. <p></p>
  82. </div>
  83. <div class="modal-footer">
  84. <button class="btn btn-secondary mr-auto" data-dismiss="modal" type="button">@lang('Cancel')</button>
  85. <button class="btn btn-danger" data-loading-text="@lang('Loading')&hellip;" type="submit">@lang('Delete')</button>
  86. </div>
  87. </form>
  88. </div>
  89. </div>
  90. @endsection
  91. @section('javascript')
  92. <script>
  93. $(function() {
  94. const deleteLogModal = $('div#deleteLogModal'),
  95. deleteLogForm = $('form#deleteLogForm'),
  96. submitBtn = deleteLogForm.find('button[type=submit]');
  97. $('button[data-target=\'#deleteLogModal\']').on('click', function(event) {
  98. event.preventDefault();
  99. const date = $(this).data('log-date'),
  100. message = "{{ __('Are you sure you want to delete this log file: :date ?') }}";
  101. deleteLogForm.find('input[name=date]').val(date);
  102. deleteLogModal.find('.modal-body p').html(message.replace(':date', date));
  103. deleteLogModal.modal('show');
  104. });
  105. deleteLogForm.on('submit', function(event) {
  106. event.preventDefault();
  107. submitBtn.button('loading');
  108. $.ajax({
  109. url: $(this).attr('action'),
  110. type: $(this).attr('method'),
  111. dataType: 'json',
  112. data: $(this).serialize(),
  113. success: function(data) {
  114. submitBtn.button('reset');
  115. if (data.result === 'success') {
  116. deleteLogModal.modal('hide');
  117. location.reload();
  118. } else {
  119. alert('AJAX ERROR ! Check the console !');
  120. console.error(data);
  121. }
  122. },
  123. error: function(xhr, textStatus, errorThrown) {
  124. alert('AJAX ERROR ! Check the console !');
  125. console.error(errorThrown);
  126. submitBtn.button('reset');
  127. },
  128. });
  129. return false;
  130. });
  131. deleteLogModal.on('hidden.bs.modal', function() {
  132. deleteLogForm.find('input[name=date]').val('');
  133. deleteLogModal.find('.modal-body p').html('');
  134. });
  135. });
  136. </script>
  137. @endsection