Commit 88aa0d71 by Angel MAS

Blog with comments and moderation

parent 0cdf0d03
...@@ -46,6 +46,7 @@ class BlogServiceProvider extends ServiceProvider ...@@ -46,6 +46,7 @@ class BlogServiceProvider extends ServiceProvider
$this->app->make('Onestartup\Blog\Controller\AdminBlogController'); $this->app->make('Onestartup\Blog\Controller\AdminBlogController');
$this->app->make('Onestartup\Blog\Controller\CategoryController'); $this->app->make('Onestartup\Blog\Controller\CategoryController');
$this->app->make('Onestartup\Blog\Controller\TagCatalogController'); $this->app->make('Onestartup\Blog\Controller\TagCatalogController');
$this->app->make('Onestartup\Blog\Controller\CommentPostController');
$this->app->make('Onestartup\Blog\Controller\BlogController'); $this->app->make('Onestartup\Blog\Controller\BlogController');
} }
......
...@@ -9,12 +9,16 @@ use Yajra\Datatables\Datatables; ...@@ -9,12 +9,16 @@ use Yajra\Datatables\Datatables;
use Onestartup\Blog\Model\EntryCategory as Category; use Onestartup\Blog\Model\EntryCategory as Category;
use Onestartup\Blog\Model\EntryTag as TagCatalog; use Onestartup\Blog\Model\EntryTag as TagCatalog;
use Onestartup\Blog\Model\Entry; use Onestartup\Blog\Model\Entry;
use Onestartup\Blog\Model\CommentPost;
class AdminBlogController extends Controller class AdminBlogController extends Controller
{ {
public function index() public function index()
{ {
return view('blog::entry.index'); $comments = CommentPost::where('moderate', 1)->count();
return view('blog::entry.index')
->with('comments', $comments);
} }
/** /**
......
...@@ -9,6 +9,7 @@ use Yajra\Datatables\Datatables; ...@@ -9,6 +9,7 @@ use Yajra\Datatables\Datatables;
use Onestartup\Blog\Model\EntryCategory as Category; use Onestartup\Blog\Model\EntryCategory as Category;
use Onestartup\Blog\Model\EntryTag as TagCatalog; use Onestartup\Blog\Model\EntryTag as TagCatalog;
use Onestartup\Blog\Model\Entry; use Onestartup\Blog\Model\Entry;
use Onestartup\Blog\Model\CommentPost;
class BlogController extends Controller class BlogController extends Controller
{ {
...@@ -42,7 +43,7 @@ class BlogController extends Controller ...@@ -42,7 +43,7 @@ class BlogController extends Controller
$post = Entry::where('slug',$slug)->first(); $post = Entry::where('slug',$slug)->first();
$post->increment('views'); $post->increment('views');
$tags = explode(",", $post->tags); $tags = explode(",", $post->tags);
$comments = $post->comments()->where('approved', 3)->get();
$otros = Entry::where('id', '!=', $post->id)->where('status',1)->where(function ($query) use($tags) { $otros = Entry::where('id', '!=', $post->id)->where('status',1)->where(function ($query) use($tags) {
for ($i = 0; $i < count($tags); $i++){ for ($i = 0; $i < count($tags); $i++){
...@@ -65,6 +66,20 @@ class BlogController extends Controller ...@@ -65,6 +66,20 @@ class BlogController extends Controller
return view('blog-public::single') return view('blog-public::single')
->with('post', $post) ->with('post', $post)
->with('categories', $categories) ->with('categories', $categories)
->with('comments', $comments)
->with('otros', $otros); ->with('otros', $otros);
} }
public function addComment(Request $request, $slug)
{
$entry = Entry::where('slug', $slug)->first();
$comment = new CommentPost($request->all());
$entry->comments()->save($comment);
return redirect()
->back()
->with('comment', 'comment');
}
} }
<?php
namespace Onestartup\Blog\Controller;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Yajra\Datatables\Datatables;
use Onestartup\Blog\Model\Entry;
use Onestartup\Blog\Model\CommentPost;
class CommentPostController extends Controller
{
public function index(Request $request)
{
$comments = CommentPost::where('moderate', 1)->paginate(30);
if (isset($request->approved)) {
$comments = CommentPost::where('approved', $request->approved)->paginate(30);
}
if (isset($request->moderate)) {
$comments = CommentPost::where('moderate', $request->moderate)->paginate(30);
}
return view('blog::comments.index')
->with('comments', $comments);
}
public function moderateComment(Request $request, $id)
{
$comment = CommentPost::find($id);
$comment->approved = $request->approved;
$comment->moderate = 2;
$comment->save();
return redirect()->back();
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCommentPostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('comment_posts', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 555);
$table->string('email', 355);
$table->string('comment', 1000);
$table->tinyInteger('approved')->default(1);
$table->tinyInteger('moderate')->default(1);
$table->integer('entry_id')->unsigned();
$table->foreign('entry_id')
->references('id')
->on('entries')
->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('comment_posts');
}
}
<?php
namespace Onestartup\Blog\Model;
use Illuminate\Database\Eloquent\Model;
class CommentPost extends Model
{
protected $table = "comment_posts";
protected $fillable = ["email","name","comment","approved","moderate","entry_id"];
public function entry()
{
return $this->belongsTo('Onestartup\Blog\Model\Entry', 'entry_id');
}
}
...@@ -31,4 +31,9 @@ class Entry extends Model ...@@ -31,4 +31,9 @@ class Entry extends Model
{ {
return $this->belongsTo('Onestartup\Blog\Model\EntryCategory', 'category_id'); return $this->belongsTo('Onestartup\Blog\Model\EntryCategory', 'category_id');
} }
public function comments()
{
return $this->hasMany('Onestartup\Blog\Model\CommentPost', 'entry_id');
}
} }
...@@ -12,9 +12,13 @@ Route::group(['middleware' => ['web', 'auth', 'is_admin']], function(){ ...@@ -12,9 +12,13 @@ Route::group(['middleware' => ['web', 'auth', 'is_admin']], function(){
Route::post('delete/entry/{id}', 'Onestartup\Blog\Controller\AdminBlogController@destroy')->name('delete.entry'); Route::post('delete/entry/{id}', 'Onestartup\Blog\Controller\AdminBlogController@destroy')->name('delete.entry');
Route::delete('delete/cover/entry/{id}', 'Onestartup\Blog\Controller\AdminBlogController@deleteCover')->name('delete.cover.entry'); Route::delete('delete/cover/entry/{id}', 'Onestartup\Blog\Controller\AdminBlogController@deleteCover')->name('delete.cover.entry');
Route::put('moderate/{id}/comments', 'Onestartup\Blog\Controller\CommentPostController@moderateComment')->name('moderate.comments');
Route::get('admin/blog/comment/moderate', 'Onestartup\Blog\Controller\CommentPostController@index')->name('index.comments');
}); });
Route::group(['middleware' => ['web']], function(){ Route::group(['middleware' => ['web']], function(){
Route::get('blog/{slug}', 'Onestartup\Blog\Controller\BlogController@show')->name('show.blog'); Route::get('blog/{slug}', 'Onestartup\Blog\Controller\BlogController@show')->name('show.blog');
Route::get('blog', 'Onestartup\Blog\Controller\BlogController@index')->name('main.blog'); Route::get('blog', 'Onestartup\Blog\Controller\BlogController@index')->name('main.blog');
Route::post('add/{slug}/comment', 'Onestartup\Blog\Controller\BlogController@addComment')->name('add.comment');
}); });
@extends('crm-admin::main-layout')
@section('content')
<div class='row'>
<div class='col-md-12'>
<div class='box'>
<div class='box-header dark'>
<h2>
Listado de comentarios
<span>
<a class='btn btn-xs success' href="{{route('index.comments').'?approved=3'}}">Aprobados</a>
<a class='btn btn-xs danger' href="{{route('index.comments').'?approved=2'}}">Rechazados</a>
<a class='btn btn-xs warning' href="{{route('index.comments')}}">Sin Moderar</a>
<a class='btn btn-xs info' href="{{route('index.comments').'?moderate=2'}}">Moderados</a>
</span>
</h2>
</div>
<div class='box-body'>
<table class='table'>
<tr>
<th>#</th>
<th>Publicación</th>
<th>Contenido</th>
<th>Estatus</th>
<th width='20%'></th>
</tr>
@foreach($comments as $c)
<tr>
<td> {{$c->id}}</td>
<td>
Nombre:
<b> {{$c->name}}</b>
<br>
Correo:
<b> {{$c->email}}</b>
<br>
Fecha:
<b> {{$c->created_at->format('d/m/Y')}}</b>
</td>
<td>{{ $c->comment}}</td>
<td>
Moderación:
<b>{{ $c->moderate == 1 ? "Pendiente" : "Visto"}}</b>
<br>
Aprobacion:
@if ($c->approved == 1)
<b>Pendiente</b>
@endif
@if ($c->approved == 2)
<b>Rechazado</b>
@endif
@if ($c->approved == 3)
<b>Aprobado</b>
@endif
<br>
</td>
<td>
{!! Form::model($c,['route'=> ['moderate.comments',$c->id],"method"=>"PUT"]) !!}
{!! Form::select('approved', [1=>'Pendiente',2=>'Rechazado', 3=>'Aprobado'], null, ["class"=>"form-control", "required"=>"required"]) !!}
<button class='btn btn-danger btn-xs' onclick="return confirm('¿Estás seguro de cambiar este elemento?');" type='submit'>
Actualizar
</button>
{!! Form::close()!!}
</td>
</tr>
@endforeach
</table>
</div>
<div class='dker p-a text-right'>{{ $comments->links()}}</div>
</div>
</div>
</div>
@endsection
...@@ -12,6 +12,11 @@ ...@@ -12,6 +12,11 @@
<i class='fas fa-plus'></i> <i class='fas fa-plus'></i>
Agregar Entrada Agregar Entrada
</a> </a>
<a class='btn btn-xs primary' href="{{route('index.comments')}}">
<b>{{$comments}}<b> Comentarios sin moderar
</a>
</span> </span>
</h2> </h2>
</div> </div>
......
{!! Form::open(['route'=> ['add.comment', $post->slug],'method'=>'POST']) !!}
{!! Form::label('name', 'Nombre', ['class'=>'control-label']) !!}<br>
{!! Form::text('name', null, ["required"=>"required"]) !!}<br>
{!! Form::label('email', 'Correo', ['class'=>'control-label']) !!}<br>
{!! Form::email('email', null, ["required"=>"required"]) !!}<br>
{!! Form::label('comment', 'Deja tu comentario', ['class'=>'control-label']) !!}<br>
{!! Form::textarea('comment', null, ["required"=>"required", "cols"=>"30", "rows"=>"5"]) !!}<br>
{!! Form::submit('Enviar comentario', ['class' => 'btn btn-submit']) !!}
{!! Form::close() !!}
\ No newline at end of file
...@@ -13,5 +13,20 @@ ...@@ -13,5 +13,20 @@
{{-- Aqui el footer --}} {{-- Aqui el footer --}}
<!-- Importante: scripts elementales no remover -->
<script src='https://unpkg.com/sweetalert/dist/sweetalert.min.js'></script>
<script src='https://cdn.jsdelivr.net/jquery.jssocials/1.4.0/jssocials.min.js' type='text/javascript'></script>
<script src='//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5a139cd3addf2e26' type='text/javascript'></script>
@if(Session::has('comment'))
<script type="text/javascript">
swal("Gracias por tu comentario", "Tu comentario está siendo moderado", "success")
</script>
@endif
<!-- ******************************************* -->
@yield('scripts_extra')
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -50,4 +50,29 @@ ...@@ -50,4 +50,29 @@
@endforeach @endforeach
</ul> </ul>
{{-- Caja de compartir con redes sociales--}}
<div class="addthis_inline_share_toolbox_le2j"></div>
{{-- *********************************** --}}
{{-- Listado de comentarios de la entrada--}}
@if($comments->count() > 0)
<p>Listado de comentarios</p>
<ul>
@foreach($comments as $comment)
<li>
{{$comment}}
</li>
@endforeach
</ul>
@else
<h4>No hay comentarios</h4>
@endif
{{-- *********************************** --}}
{{-- Formulario para hacer comentarios --}}
@include('blog-public::form-comments')
{{-- *********************************** --}}
@endsection @endsection
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment