Răsfoiți Sursa

Update newsroom

Daniel Supernault 2 ani în urmă
părinte
comite
2652e95467

+ 10 - 2
app/Http/Controllers/AdminController.php

@@ -264,6 +264,10 @@ class AdminController extends Controller
 		]);
 		]);
 		$changed = false;
 		$changed = false;
 		$changedFields = [];
 		$changedFields = [];
+		$slug = str_slug($request->input('title'));
+		if(Newsroom::whereSlug($slug)->exists()) {
+			$slug = $slug . '-' . str_random(4);
+		}
 		$news = Newsroom::findOrFail($id);
 		$news = Newsroom::findOrFail($id);
 		$fields = [
 		$fields = [
 			'title' => 'string',
 			'title' => 'string',
@@ -281,7 +285,7 @@ class AdminController extends Controller
 				case 'string':
 				case 'string':
 				if($request->{$field} != $news->{$field}) {
 				if($request->{$field} != $news->{$field}) {
 					if($field == 'title') {
 					if($field == 'title') {
-						$news->slug = str_slug($request->{$field});
+						$news->slug = $slug;
 					}
 					}
 					$news->{$field} = $request->{$field};
 					$news->{$field} = $request->{$field};
 					$changed = true;
 					$changed = true;
@@ -327,6 +331,10 @@ class AdminController extends Controller
 		]);
 		]);
 		$changed = false;
 		$changed = false;
 		$changedFields = [];
 		$changedFields = [];
+		$slug = str_slug($request->input('title'));
+		if(Newsroom::whereSlug($slug)->exists()) {
+			$slug = $slug . '-' . str_random(4);
+		}
 		$news = new Newsroom();
 		$news = new Newsroom();
 		$fields = [
 		$fields = [
 			'title' => 'string',
 			'title' => 'string',
@@ -344,7 +352,7 @@ class AdminController extends Controller
 				case 'string':
 				case 'string':
 				if($request->{$field} != $news->{$field}) {
 				if($request->{$field} != $news->{$field}) {
 					if($field == 'title') {
 					if($field == 'title') {
-						$news->slug = str_slug($request->{$field});
+						$news->slug = $slug;
 					}
 					}
 					$news->{$field} = $request->{$field};
 					$news->{$field} = $request->{$field};
 					$changed = true;
 					$changed = true;

+ 81 - 108
resources/views/admin/newsroom/edit.blade.php

@@ -1,114 +1,81 @@
 @extends('admin.partial.template-full')
 @extends('admin.partial.template-full')
 
 
 @section('section')
 @section('section')
-<div class="row">
-	<div class="col-12">
-		<div class="d-flex justify-content-between align-items-center">
+</div>
+<div class="header bg-primary pb-3 mt-n4">
+    <div class="container-fluid">
+        <div class="header-body">
+            <div class="row align-items-center py-4">
+                <div class="col-lg-6 col-7">
+                    <p class="display-1 text-white mb-0">Newsroom - Edit</p>
+                    <p class="lead text-white my-0">Editing #{{$news->id}}</p>
+                </div>
+
+                <div class="col-lg-6 col-5">
+                    <div class="text-right">
+                        <button class="btn btn-danger px-4 mr-3 mb-1" style="font-size:13px;" id="btn-delete">Delete</button>
+                        @if($news->published_at)
+                        <a class="btn btn-dark px-4 mr-3 mb-1" style="font-size:13px;" href="{{$news->permalink()}}">View</a>
+                        @endif
+                        <button class="btn btn-success px-5 mb-1" style="font-size:13px;" onclick="saveForm()">Save</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<div class="container-fluid mt-4">
+    <div class="row justify-content-center">
+    	<div class="col-md-6 col-12">
+    		<div>
+    			<form method="post" id="editForm">
+    				@csrf
+    				<div class="form-group">
+    					<label for="title" class="small font-weight-bold text-muted text-uppercase">Title</label>
+    					<input type="text" class="form-control" id="title" name="title" value="{{$news->title}}">
+    					<p class="help-text mb-0 small font-weight-bold text-lighter">We recommend titles shorter than 80 characters.</p>
+    				</div>
+    				<div class="form-group">
+    					<label for="summary" class="small font-weight-bold text-muted text-uppercase">Summary</label>
+    					<textarea class="form-control" id="summary" name="summary" rows="3">{{$news->summary}}</textarea>
+    				</div>
+    				<div class="form-group">
+    					<label for="body" class="small font-weight-bold text-muted text-uppercase">Body</label>
+    					<textarea class="form-control" id="body" name="body" rows="6">{{$news->body}}</textarea>
+    				</div>
+    				<div class="form-group">
+    					<label for="category" class="small font-weight-bold text-muted text-uppercase">Category</label>
+    					<input type="text" class="form-control" id="category" name="category" value="{{$news->category}}">
+    				</div>
 
 
-			<div class="title">
-				<p class="h1 font-weight-bold">Newsroom</p>
-				<p class="lead mb-0">Edit Announcement</p>
-			</div>
-			<div>
-				<a class="btn btn-outline-secondary px-2" style="font-size:13px;" href="{{route('admin.newsroom.home')}}"><i class="fas fa-chevron-left fa-sm text-lighter mr-1"></i> Back to Newsroom </a>
-			</div>
-		</div>
-		<hr>
-	</div>
-	<div class="col-md-7 border-right">
-		<div>
-			<form method="post">
-				@csrf
-				<div class="form-group">
-					<label for="title" class="small font-weight-bold text-muted text-uppercase">Title</label>
-					<input type="text" class="form-control" id="title" name="title" value="{{$news->title}}">
-					<p class="help-text mb-0 small font-weight-bold text-lighter">We recommend titles shorter than 80 characters.</p>
-				</div>
-				<div class="form-group">
-					<label for="summary" class="small font-weight-bold text-muted text-uppercase">Summary</label>
-					<textarea class="form-control" id="summary" name="summary" rows="3">{{$news->summary}}</textarea>
-				</div>
-				<div class="form-group">
-					<label for="body" class="small font-weight-bold text-muted text-uppercase">Body</label>
-					<textarea class="form-control" id="body" name="body" rows="6">{{$news->body}}</textarea>
-					<p class="help-text mb-0 small font-weight-bold text-lighter">Click <a href="#">here</a> to enable the rich text editor.</p>
-				</div>
-				<div class="form-group">
-					<label for="category" class="small font-weight-bold text-muted text-uppercase">Category</label>
-					<input type="text" class="form-control" id="category" name="category" value="{{$news->category}}">
-				</div>
-		</div>
-		
-	</div>
-	<div class="col-md-5">
-		<label class="small font-weight-bold text-muted text-uppercase">Preview</label>
-		<div class="card border shadow-none mb-3">
-			<div class="card-body">
-				<div class="card-title mb-0">
-					<span class="font-weight-bold" id="preview_title">{{$news->title}}</span>
-					<span class="float-right cursor-pointer" title="Close"><i class="fas fa-times text-lighter"></i></span>
-				</div>
-				<p class="card-text">
-					<span style="font-size:13px;" id="preview_summary">{{$news->summary}}</span>
-				</p>
-				<p class="d-flex align-items-center justify-content-between mb-0">
-					<a href="#" class="small font-weight-bold mb-0">Read more</a>
-					<span>
-						<span class="btn btn-outline-secondary btn-sm py-0 disabled">
-							<i class="fas fa-chevron-left fa-sm"></i>
-						</span>
-						<span class="btn btn-outline-success btn-sm py-0 mx-1" title="Mark as Read" data-toggle="tooltip" data-placement="bottom">
-							<i class="fas fa-check fa-sm"></i>
-						</span>
-						<span class="btn btn-outline-secondary btn-sm py-0">
-							<i class="fas fa-chevron-right fa-sm"></i>
-						</span>
-					</span>
-				</p>
-			</div>
-		</div>
-		<hr>
-		<p class="mt-3">
-			<button type="submit" class="btn btn-primary btn-block font-weight-bold py-1 px-4">Save</button>
-		</p>
-		<div class="form-group">
-			<div class="custom-control custom-switch">
-				<input type="checkbox" class="custom-control-input" id="published" name="published" {{$news->published_at ? 'checked="checked"' : ''}}>
-				<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="published">Published</label>
-			</div>
-		</div>	
-		<div class="form-group">
-			<div class="custom-control custom-switch">
-				<input type="checkbox" class="custom-control-input" id="show_timeline" name="show_timeline" {{$news->show_timeline ? 'checked="checked"' : ''}}>
-				<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="show_timeline">Show On Timelines</label>
-			</div>
-		</div>	
-		<div class="form-group">
-			<div class="custom-control custom-switch">
-				<input type="checkbox" class="custom-control-input" id="auth_only" name="auth_only" {{$news->auth_only ? 'checked="checked"' : ''}}>
-				<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="auth_only">Logged in users only</label>
-			</div>
-		</div>	
-		<div class="form-group">
-			<div class="custom-control custom-switch">
-				<input type="checkbox" class="custom-control-input" id="show_link" name="show_link" {{$news->show_link ? 'checked="checked"' : ''}}>
-				<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="show_link">Show Read More Link</label>
-			</div>
-		</div>	
-		{{-- <div class="form-group">
-			<div class="custom-control custom-switch">
-				<input type="checkbox" class="custom-control-input" id="force_modal" name="force_modal" {{$news->force_modal ? 'checked="checked"' : ''}}>
-				<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="force_modal">Show Modal on timelines</label>
-			</div>
-		</div> --}}
-		<hr>	
-	</form>
-		<p class="mt-1 d-flex justify-content-between">
-			<button type="button" class="btn btn-outline-secondary btn-sm font-weight-bold py-1 px-3">Preview</button>
-			<button type="button" class="btn btn-outline-danger btn-sm font-weight-bold py-1 px-3" id="btn-delete">Delete</button>
-		</p>
-		
-	</div>
+                    <div class="form-group">
+                        <div class="custom-control custom-switch ml-5">
+                            <input type="checkbox" class="custom-control-input" id="published" name="published" {{$news->published_at ? 'checked="checked"' : ''}}>
+                            <label class="custom-control-label font-weight-bold text-uppercase text-muted" for="published">Published</label>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <div class="custom-control custom-switch ml-5">
+                            <input type="checkbox" class="custom-control-input" id="show_timeline" name="show_timeline" {{$news->show_timeline ? 'checked="checked"' : ''}}>
+                            <label class="custom-control-label font-weight-bold text-uppercase text-muted" for="show_timeline">Show On Timelines</label>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <div class="custom-control custom-switch ml-5">
+                            <input type="checkbox" class="custom-control-input" id="auth_only" name="auth_only" {{$news->auth_only ? 'checked="checked"' : ''}}>
+                            <label class="custom-control-label font-weight-bold text-uppercase text-muted" for="auth_only">Logged in users only</label>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <div class="custom-control custom-switch ml-5">
+                            <input type="checkbox" class="custom-control-input" id="show_link" name="show_link" {{$news->show_link ? 'checked="checked"' : ''}}>
+                            <label class="custom-control-label font-weight-bold text-uppercase text-muted" for="show_link">Show Read More Link</label>
+                        </div>
+                    </div>
+                </form>
+    		</div>
+    	</div>
+    </div>
 </div>
 </div>
 <form id="delete-form" method="post">
 <form id="delete-form" method="post">
 @method('delete')
 @method('delete')
@@ -118,6 +85,12 @@
 
 
 @push('scripts')
 @push('scripts')
 <script type="text/javascript">
 <script type="text/javascript">
+    function saveForm() {
+        if(!window.confirm('Are you sure you want to save?')) {
+            return;
+        }
+        document.getElementById('editForm').submit();
+    }
 	$('#title').on('change keyup paste',function(e) {
 	$('#title').on('change keyup paste',function(e) {
 		let el = $(this);
 		let el = $(this);
 		let title = el.val()
 		let title = el.val()
@@ -138,4 +111,4 @@
 	})
 	})
 
 
 </script>
 </script>
-@endpush
+@endpush

+ 76 - 49
resources/views/admin/newsroom/home.blade.php

@@ -1,62 +1,89 @@
 @extends('admin.partial.template-full')
 @extends('admin.partial.template-full')
 
 
 @section('section')
 @section('section')
-<div class="d-flex justify-content-between align-items-center">
-  
-  <div class="title">
-    <p class="h1 font-weight-bold">Newsroom</p>
-    <p class="lead mb-0">Manage News and Platform Tips</p>
-  </div>
+</div>
+<div class="header bg-primary pb-3 mt-n4">
+    <div class="container-fluid">
+        <div class="header-body">
+            <div class="row align-items-center py-4">
+                <div class="col-lg-6 col-7">
+                    <p class="display-1 text-white mb-0">Newsroom</p>
+                    <p class="lead text-white my-0">Manage News and Platform Tips</p>
+                </div>
 
 
-  <div>
-    <a class="btn btn-outline-success px-4" style="font-size:13px;" href="{{route('admin.newsroom.create')}}">New Announcement</a>
-    <a class="btn btn-outline-secondary px-2 mr-3" style="font-size:13px;" href="/site/newsroom">View Newsroom <i class="fas fa-chevron-right fa-sm text-lighter ml-1"></i></a>
-  </div>
+                <div class="col-lg-6 col-5">
+                    <div class="text-right">
+                        <a class="btn btn-danger px-4" style="font-size:13px;" href="{{route('admin.newsroom.create')}}">New Announcement</a>
+                        <a class="btn btn-dark px-4 mr-3" style="font-size:13px;" href="/site/newsroom">View Newsroom <i class="fas fa-chevron-right fa-sm text-lighter ml-1"></i></a>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
 </div>
 </div>
 
 
-<div class="my-5 row">
-  <div class="col-md-8 offset-md-2">
-    <div class="card">
-      <div class="card-header bg-light lead font-weight-bold">
-        Announcements
-      </div>
-      @if($newsroom->count() > 0)
-      <ul class="list-group list-group-flush">
-        @foreach($newsroom as $news)
-          <li class="list-group-item d-flex align-items-center justify-content-between">
-            <div>
-              <p class="mb-0 font-weight-bold">{{str_limit($news->title,30)}}</p>
-              <p class="mb-0 small">{{str_limit($news->summary, 40)}}</p>
+<div class="container-fluid mt-4">
+    <div class="row mb-3 justify-content-between">
+        <div class="col-12">
+            @if($newsroom->count() > 0)
+            <div class="table-responsive">
+                <table class="table table-dark">
+                    <thead class="thead-dark">
+                        <tr>
+                            <th scope="col">ID</th>
+                            <th scope="col">Title</th>
+                            <th scope="col">Slug</th>
+                            <th scope="col">Status</th>
+                            <th scope="col">Updated</th>
+                        </tr>
+                    </thead>
+                    <tbody>
+                        @foreach($newsroom as $news)
+                        <tr>
+                            <td class="font-weight-bold text-monospace text-muted">
+                                <a href="{{$news->editUrl()}}">
+                                    {{ $news->id }}
+                                </a>
+                            </td>
+                            <td class="font-weight-bold">
+                                <div>
+                                  <p class="mb-0 font-weight-bold">{{str_limit($news->title, 50)}}</p>
+                                  {{-- <p class="mb-0 small">{{str_limit($news->summary, 80)}}</p> --}}
+                                </div>
+                            </td>
+                            <td class="text-muted">
+                                @if($news->published_at)
+                                    <a href="{{$news->permalink()}}" class="font-weight-bold" target="_blank">{{$news->slug}}</a>
+                                @else
+                                    {{ $news->slug }}
+                                @endif
+                            </td>
+                            <td class="font-weight-bold">
+                                @if($news->published_at != null)
+                                  <span class="badge badge-success font-weight-bold mr-3">PUBLISHED</span>
+                                @else
+                                  <span class="badge badge-dark font-weight-bold mr-3">DRAFT</span>
+                                @endif
+                            </td>
+
+                            <td class="font-weight-bold">
+                                {{ $news->updated_at->diffForHumans() }}
+                            </td>
+                        </tr>
+                        @endforeach
+                    </tbody>
+                </table>
+            </div>
+            <div class="d-flex justify-content-center mt-4">
+                {!!$newsroom->links()!!}
             </div>
             </div>
-            <div>
-              @if($news->published_at != null)
-              <span class="btn btn-success btn-sm px-2 py-0 font-weight-bold mr-3">PUBLISHED</span>
-              @else
-              <span class="btn btn-outline-secondary btn-sm px-2 py-0 font-weight-bold mr-3">DRAFT</span>
-              @endif
-              <a class="btn btn-outline-lighter btn-sm mr-2" title="Edit Post" data-toggle="tooltip" data-placement="bottom" href="{{$news->editUrl()}}">
-                <i class="fas fa-edit"></i>
-              </a>
-              @if($news->published_at)
-              <a class="btn btn-outline-lighter btn-sm" title="View Post" data-toggle="tooltip" data-placement="bottom" href="{{$news->permalink()}}">
-                <i class="fas fa-eye"></i>
-              </a>
-              @endif
+            @else
+            <div class="card-body text-center">
+                <p class="lead mb-0 p-5">No Announcements Found!</p>
             </div>
             </div>
-          </li>
-        @endforeach
-      </ul>
-      @else
-      <div class="card-body text-center">
-        <p class="lead mb-0 p-5">No Announcements Found!</p>
+            @endif
       </div>
       </div>
-      @endif
     </div>
     </div>
-    <div class="d-flex justify-content-center mt-4">
-      {!!$newsroom->links()!!}
-    </div>
-  </div>
-
 </div>
 </div>
 
 
 @endsection
 @endsection