diff --git a/app/Http/Controllers/Modules/Item.php b/app/Http/Controllers/Modules/Item.php index 016e912d4..dbc11a14d 100644 --- a/app/Http/Controllers/Modules/Item.php +++ b/app/Http/Controllers/Modules/Item.php @@ -302,4 +302,27 @@ class Item extends Controller return redirect('apps/' . $alias); } + + public function reviews($alias, Request $request) + { + $page = $request['page']; + + $data = [ + 'query' => [ + 'page' => ($page) ? $page : 1, + ] + ]; + + $reviews = $this->getModuleReviews($alias, $data); + + $html = view('partials.modules.reviews', compact('reviews'))->render(); + + return response()->json([ + 'success' => true, + 'error' => false, + 'data' => null, + 'message' => null, + 'html' => $html, + ]); + } } diff --git a/app/Traits/Modules.php b/app/Traits/Modules.php index 4a8fd0d70..ec1c56bed 100644 --- a/app/Traits/Modules.php +++ b/app/Traits/Modules.php @@ -57,6 +57,17 @@ trait Modules return []; } + public function getModuleReviews($alias, $data = []) + { + $response = $this->getRemote('apps/' . $alias . '/reviews', 'GET', $data); + + if ($response && ($response->getStatusCode() == 200)) { + return json_decode($response->getBody())->data; + } + + return []; + } + public function getCategories() { $response = $this->getRemote('apps/categories'); diff --git a/resources/views/modules/item/show.blade.php b/resources/views/modules/item/show.blade.php index c22cbd855..af8f8c408 100644 --- a/resources/views/modules/item/show.blade.php +++ b/resources/views/modules/item/show.blade.php @@ -61,32 +61,8 @@ @endif
- @if($module->reviews) - @foreach($module->reviews as $review) -
-
- user image - - {{ $review->author }} - - @for($i = 1; $i <= $review->rating; $i++) - - @endfor - @for($i = $review->rating; $i < 5; $i++) - - @endfor - - - {{ \Carbon\Carbon::parse($review->created_at)->format('F d, Y \a\t G:ia') }} -
- -

- {!! nl2br($review->text) !!} -

-
- @endforeach - @else - {{ trans('modules.reviews.na') }} + @if(!$module->reviews) + {{ trans('modules.reviews.na') }} @endif
@@ -216,6 +192,10 @@ var path = ''; $(document).ready(function() { + @if($module->reviews) + getReviews('', '1'); + @endif + $('#install-module').on('click', function(e) { e.preventDefault(); e.stopPropagation(); @@ -247,6 +227,16 @@ }); }); + $(document).on('click', '#reviews .pagination li a', function (e) { + e.preventDefault(); + e.stopPropagation(); + + path = $(this).attr('href'); + page = $(this).data('page'); + + getReviews(path, page); + }); + function next() { data = step.shift(); @@ -320,5 +310,27 @@ $('#modal-installation').modal('show'); } + + function getReviews(path, page) { + $.ajax({ + url: '{{ url("apps/" . $module->slug . "/reviews") }}', + type: 'post', + dataType: 'json', + data: {path: path, page: page}, + headers: { 'X-CSRF-TOKEN': '{{ csrf_token() }}' }, + beforeSend: function() { + $('#reviews').append('
'); + }, + complete : function() { + $('#loading').remove(); + }, + success: function(json) { + if (json['success']) { + $('#reviews #review-items').remove(); + $('#reviews').append(json['html']); + } + } + }); + } @endpush diff --git a/resources/views/partials/modules/reviews.blade.php b/resources/views/partials/modules/reviews.blade.php new file mode 100644 index 000000000..eaee484f3 --- /dev/null +++ b/resources/views/partials/modules/reviews.blade.php @@ -0,0 +1,68 @@ +
+ @foreach($reviews->data as $review) +
+
+ {{ $review->author }} + + {{ $review->author }} + + @for($i = 1; $i <= $review->rating; $i++) + + @endfor + @for($i = $review->rating; $i < 5; $i++) + + @endfor + + + {{ \Carbon\Carbon::parse($review->created_at)->format('F d, Y') }} +
+ +

+ {!! nl2br($review->text) !!} +

+
+ @endforeach + + @stack('pagination_start') + @php + $review_first_item = count($reviews->data) > 0 ? ($reviews->current_page - 1) * $reviews->per_page + 1 : null; + $review_last_item = count($reviews->data) > 0 ? $review_first_item + count($reviews->data) - 1 : null; + @endphp + @if ($review_first_item) +
+ {{ trans('pagination.showing', ['first' => $review_first_item, 'last' => $review_last_item, 'total' => $reviews->total, 'type' => strtolower(trans('modules.tab.reviews'))]) }} +
+
+
    + {{-- Previous Page Link --}} + @if ($reviews->current_page <= 1) +
  • «
  • + @else +
  • + @endif + + {{-- Pagination Elements --}} + @for ($page = 1; $page <= $reviews->last_page; $page++) + @if ($page == $reviews->current_page) +
  • {{ $page }}
  • + @else +
  • {{ $page }}
  • + @endif + @endfor + + {{-- Next Page Link --}} + @if ($reviews->current_page != 1) +
  • + @else +
  • »
  • + @endif +
+
+ @else +
+ {{ trans('general.no_records') }} +
+ @endif + + @stack('pagination_end') +
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index d32947fdc..6b47b051d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -149,6 +149,7 @@ Route::group(['middleware' => 'language'], function () { Route::post('unzip', 'Modules\Item@unzip'); Route::post('install', 'Modules\Item@install'); Route::get('post/{alias}', 'Modules\Item@post'); + Route::post('{alias}/reviews', 'Modules\Item@reviews'); Route::get('{alias}/uninstall', 'Modules\Item@uninstall'); Route::get('{alias}/enable', 'Modules\Item@enable'); Route::get('{alias}/disable', 'Modules\Item@disable');