1
0

show.blade.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. @extends('admin.partial.template-full')
  2. @section('section')
  3. <div class="title">
  4. <div class="d-flex justify-content-between align-items-center">
  5. <div class="font-weight-bold"># {{$message->id}}</div>
  6. <div class="font-weight-bold h3">Contact Form Message</div>
  7. <div></div>
  8. </div>
  9. </div>
  10. <hr class="mt-0">
  11. <div class="row mb-3">
  12. <div class="col-12 col-md-4">
  13. <div class="card">
  14. <div class="list-group list-group-flush">
  15. @if($message->responded_at)
  16. <div class="list-group-item">
  17. <div class="d-flex justify-content-between">
  18. <div class="small text-muted">Admin Response Sent</div>
  19. <div>
  20. <span class="font-weight-bold" title="{{$message->responded_at}}" data-toggle="tooltip">
  21. {{$message->responded_at->diffForHumans()}}
  22. </span>
  23. </div>
  24. </div>
  25. </div>
  26. @endif
  27. <div class="list-group-item">
  28. <div class="d-flex justify-content-between">
  29. <div class="small text-muted">Status</div>
  30. @if($message->read_at == null)
  31. <div class="text-success font-weight-bold">Open</div>
  32. @else
  33. <div class="text-muted">Closed</div>
  34. @endif
  35. </div>
  36. </div>
  37. <div class="list-group-item">
  38. <div class="d-flex justify-content-between">
  39. <div class="small text-muted">Response Requested</div>
  40. @if($message->response_requested == 1)
  41. <div class="font-weight-bold">Yes</div>
  42. @else
  43. <div class="text-muted">No</div>
  44. @endif
  45. </div>
  46. </div>
  47. <div class="list-group-item">
  48. <div class="d-flex justify-content-between">
  49. <div class="small text-muted">Created</div>
  50. <div>
  51. <span class="font-weight-bold" title="{{$message->created_at}}" data-toggle="tooltip">
  52. {{$message->created_at->diffForHumans()}}
  53. </span>
  54. </div>
  55. </div>
  56. </div>
  57. @if($message->user && $message->user->last_active_at)
  58. <div class="list-group-item">
  59. <div class="d-flex justify-content-between">
  60. <div class="small text-muted">User Last Active</div>
  61. <div>
  62. <span class="font-weight-bold" title="{{$message->user->last_active_at}}" data-toggle="tooltip">
  63. {{$message->user->last_active_at->diffForHumans()}}
  64. </span>
  65. </div>
  66. </div>
  67. </div>
  68. @endif
  69. @if(!$message->read_at)
  70. <div class="list-group-item">
  71. <button type="button" class="btn btn-outline-primary btn-block" id="markRead">Mark Read</button>
  72. </div>
  73. @endif
  74. </div>
  75. </div>
  76. </div>
  77. <div class="col-12 col-md-8">
  78. <div class="row">
  79. <div class="col-12">
  80. <div class="card shadow-none border">
  81. <div class="card-header bg-white">
  82. <div class="media">
  83. <img
  84. src="{{$message->user->profile->avatarUrl()}}"
  85. class="mr-3 rounded-circle"
  86. width="40px"
  87. height="40px"
  88. onerror="this.onerror=null;this.src='/storage/avatars/default.png?v=0';">
  89. <div class="media-body">
  90. <h5 class="my-0">&commat;{{$message->user->username}}</h5>
  91. <span class="text-muted">{{$message->user->email}}</span>
  92. </div>
  93. </div>
  94. </div>
  95. <div class="card-body">
  96. <p class="text-uppercase text-muted small mb-2">Message Body</p>
  97. <p class="mb-0">{{$message->message}}</p>
  98. <hr>
  99. <p class="text-uppercase text-muted small mb-2">Admin Reply:</p>
  100. @if($message->responded_at)
  101. <p class="mb-0">{{$message->response}}</p>
  102. @else
  103. @if(config('mail.default') === 'log')
  104. <div class="alert alert-danger">
  105. <p class="mb-0">You need to configure your mail driver before you can send outgoing emails.</p>
  106. </div>
  107. @else
  108. <form method="post" id="mform">
  109. @csrf
  110. <div class="form-group">
  111. <textarea
  112. class="form-control"
  113. name="message"
  114. id="message"
  115. rows="4"
  116. style="resize: none;"
  117. maxlength="500"
  118. placeholder="Reply to &commat;{{$message->user->username}} via email ..."></textarea>
  119. @if ($errors->any())
  120. @foreach ($errors->all() as $error)
  121. <p class="invalid-feedback mb-0" style="display:block;">
  122. <strong>{{ $error }}</strong>
  123. </p>
  124. @endforeach
  125. @endif
  126. </div>
  127. <div class="d-flex justify-content-between align-items-center">
  128. <div>
  129. <button type="button" class="btn btn-primary font-weight-bold submit-btn">Send</button>
  130. <button type="button" class="btn btn-outline-primary font-weight-bold preview-btn">Preview</button>
  131. </div>
  132. <div>
  133. <span class="small text-muted font-weight-bold">
  134. <span id="messageCount">0</span>/500
  135. </span>
  136. </div>
  137. </div>
  138. </form>
  139. @endif
  140. @endif
  141. </div>
  142. </div>
  143. </div>
  144. </div>
  145. </div>
  146. </div>
  147. @endsection
  148. @push('scripts')
  149. @if($message->responded_at == null)
  150. <script type="text/javascript">
  151. $('#markRead').on('click', function(e) {
  152. e.preventDefault();
  153. axios.post('/i/admin/messages/mark-read', {
  154. id: '{{$message->id}}',
  155. }).then(res => {
  156. window.location.href = '/i/admin/messages/home';
  157. })
  158. })
  159. const submitBtn = document.querySelector('.submit-btn');
  160. submitBtn.addEventListener('click', () => {
  161. const form = document.getElementById('mform');
  162. form.action = '/i/admin/messages/show/{{$message->id}}';
  163. form.submit()
  164. });
  165. const previewBtn = document.querySelector('.preview-btn');
  166. previewBtn.addEventListener('click', () => {
  167. const form = document.getElementById('mform');
  168. form.action = '/i/admin/messages/preview/{{$message->id}}';
  169. form.submit()
  170. });
  171. function countChars() {
  172. const input = document.getElementById('message');
  173. const counter = document.getElementById('messageCount');
  174. input.addEventListener('input', function() {
  175. counter.textContent = input.value.length;
  176. });
  177. }
  178. countChars();
  179. </script>
  180. @endif
  181. @endpush