logs.blade.php 6.4 KB

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