blacklist.blade.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. @extends('layouts.main')
  2. @section('content')
  3. <!-- CONTENT HEADER -->
  4. <section class="content-header">
  5. <div class="container-fluid">
  6. <div class="mb-2 row">
  7. <div class="col-sm-6">
  8. <h1>{{ __('Ticket Blacklist') }}</h1>
  9. </div>
  10. <div class="col-sm-6">
  11. <ol class="breadcrumb float-sm-right">
  12. <li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
  13. <li class="breadcrumb-item"><a class="text-muted"
  14. href="{{ route('admin.ticket.blacklist') }}">{{ __('Ticket Blacklist') }}</a>
  15. </li>
  16. </ol>
  17. </div>
  18. </div>
  19. </div>
  20. </section>
  21. <!-- END CONTENT HEADER -->
  22. <!-- MAIN CONTENT -->
  23. <section class="content">
  24. <div class="container-fluid">
  25. <div class="row">
  26. <div class="col-lg-8">
  27. <div class="card">
  28. <div class="card-header">
  29. <div class="d-flex justify-content-between">
  30. <h5 class="card-title"><i class="mr-2 fas fa-users"></i>{{__('Blacklist List')}}</h5>
  31. </div>
  32. </div>
  33. <div class="card-body table-responsive">
  34. <table id="datatable" class="table table-striped">
  35. <thead>
  36. <tr>
  37. <th>{{__('User')}}</th>
  38. <th>{{__('Status')}}</th>
  39. <th>{{__('Reason')}}</th>
  40. <th>{{__('Created At')}}</th>
  41. <th>{{__('Actions')}}</th>
  42. </tr>
  43. </thead>
  44. <tbody>
  45. </tbody>
  46. </table>
  47. </div>
  48. </div>
  49. </div>
  50. <div class="col-lg-4">
  51. <div class="card">
  52. <div class="card-header">
  53. <h5 class="card-title">{{__('Add To Blacklist')}}
  54. <i data-toggle="popover"
  55. data-trigger="hover"
  56. data-content="{{__('please make the best of it')}}"
  57. class="fas fa-info-circle"></i></h5>
  58. </div>
  59. <div class="card-body">
  60. <form action="{{route('admin.ticket.blacklist.add')}}" method="POST" class="ticket-form">
  61. @csrf
  62. <div class="p-0 mb-3 custom-control">
  63. <label for="user_id">{{ __('User') }}:
  64. <i data-toggle="popover" data-trigger="hover"
  65. data-content="{{ __('Please note, the blacklist will make the user unable to make a ticket/reply again') }}" class="fas fa-info-circle"></i>
  66. </label>
  67. <select id="user_id" style="width:100%" class="custom-select" name="user_id" required
  68. autocomplete="off" @error('user_id') is-invalid @enderror>
  69. </select>
  70. </div>
  71. <div class="form-group ">
  72. <label for="reason" class="control-label">{{__("Reason")}}</label>
  73. <input id="reason" type="text" class="form-control" name="reason" placeholder="Input Some Reason" required>
  74. </div>
  75. <button type="submit" class="btn btn-primary ticket-once">
  76. {{__('Submit')}}
  77. </button>
  78. </form>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. </div>
  84. </section>
  85. <!-- END CONTENT -->
  86. <script>
  87. document.addEventListener("DOMContentLoaded", function () {
  88. $('#datatable').DataTable({
  89. language: {
  90. url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{ $locale_datatables }}.json'
  91. },
  92. processing: true,
  93. serverSide: true,
  94. stateSave: true,
  95. ajax: "{{route('admin.ticket.blacklist.datatable')}}",
  96. columns: [
  97. {data: 'user' , name : 'user.name'},
  98. {data: 'status'},
  99. {data: 'reason'},
  100. {data: 'created_at'},
  101. {data: 'actions', sortable: false},
  102. ],
  103. fnDrawCallback: function( oSettings ) {
  104. $('[data-toggle="popover"]').popover();
  105. }
  106. });
  107. });
  108. </script>
  109. <script type="application/javascript">
  110. function initUserIdSelect(data) {
  111. function escapeHtml(str) {
  112. var div = document.createElement('div');
  113. div.appendChild(document.createTextNode(str));
  114. return div.innerHTML;
  115. }
  116. $('#user_id').select2({
  117. ajax: {
  118. url: '/admin/users.json',
  119. dataType: 'json',
  120. delay: 250,
  121. data: function (params) {
  122. return {
  123. filter: { email: params.term },
  124. page: params.page,
  125. };
  126. },
  127. processResults: function (data, params) {
  128. return { results: data };
  129. },
  130. cache: true,
  131. },
  132. data: data,
  133. escapeMarkup: function (markup) { return markup; },
  134. minimumInputLength: 2,
  135. templateResult: function (data) {
  136. if (data.loading) return escapeHtml(data.text);
  137. return '<div class="user-block"> \
  138. <img class="img-circle img-bordered-xs" src="' + escapeHtml(data.avatarUrl) + '?s=120" alt="User Image"> \
  139. <span class="username"> \
  140. <a href="#">' + escapeHtml(data.name) +'</a> \
  141. </span> \
  142. <span class="description"><strong>' + escapeHtml(data.email) + '</strong>' + '</span> \
  143. </div>';
  144. },
  145. templateSelection: function (data) {
  146. return '<div> \
  147. <span> \
  148. <img class="img-rounded img-bordered-xs" src="' + escapeHtml(data.avatarUrl) + '?s=120" style="height:28px;margin-top:-4px;" alt="User Image"> \
  149. </span> \
  150. <span style="padding-left:5px;"> \
  151. ' + escapeHtml(data.name) + ' (<strong>' + escapeHtml(data.email) + '</strong>) \
  152. </span> \
  153. </div>';
  154. }
  155. });
  156. }
  157. $(document).ready(function() {
  158. @if (old('user_id'))
  159. $.ajax({
  160. url: '/admin/users.json?user_id={{ old('user_id') }}',
  161. dataType: 'json',
  162. }).then(function (data) {
  163. initUserIdSelect([ data ]);
  164. });
  165. @else
  166. initUserIdSelect();
  167. @endif
  168. });
  169. </script>
  170. @endsection