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/Http/Controllers/Modules/Tiles.php b/app/Http/Controllers/Modules/Tiles.php index f910bea5b..75dc30f4c 100644 --- a/app/Http/Controllers/Modules/Tiles.php +++ b/app/Http/Controllers/Modules/Tiles.php @@ -23,7 +23,15 @@ class Tiles extends Controller { $this->checkApiToken(); - $data = $this->getModulesByCategory($alias); + $page = request('page', 1); + + $request = [ + 'query' => [ + 'page' => $page, + ] + ]; + + $data = $this->getModulesByCategory($alias, $request); $title = $data->category->name; $modules = $data->modules; @@ -41,8 +49,16 @@ class Tiles extends Controller { $this->checkApiToken(); + $page = request('page', 1); + + $data = [ + 'query' => [ + 'page' => $page, + ] + ]; + $title = trans('modules.top_paid'); - $modules = $this->getPaidModules(); + $modules = $this->getPaidModules($data); $installed = Module::all()->pluck('status', 'alias')->toArray(); return view('modules.tiles.index', compact('title', 'modules', 'installed')); @@ -57,8 +73,16 @@ class Tiles extends Controller { $this->checkApiToken(); + $page = request('page', 1); + + $data = [ + 'query' => [ + 'page' => $page, + ] + ]; + $title = trans('modules.new'); - $modules = $this->getNewModules(); + $modules = $this->getNewModules($data); $installed = Module::all()->pluck('status', 'alias')->toArray(); return view('modules.tiles.index', compact('title', 'modules', 'installed')); @@ -73,8 +97,16 @@ class Tiles extends Controller { $this->checkApiToken(); + $page = request('page', 1); + + $data = [ + 'query' => [ + 'page' => $page, + ] + ]; + $title = trans('modules.top_free'); - $modules = $this->getFreeModules(); + $modules = $this->getFreeModules($data); $installed = Module::all()->pluck('status', 'alias')->toArray(); return view('modules.tiles.index', compact('title', 'modules', 'installed')); @@ -90,10 +122,12 @@ class Tiles extends Controller $this->checkApiToken(); $keyword = $request['keyword']; + $page = request('page', 1); $data = [ 'query' => [ 'keyword' => $keyword, + 'page' => $page, ] ]; diff --git a/app/Traits/Modules.php b/app/Traits/Modules.php index 5ff860f2b..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'); @@ -68,9 +79,9 @@ trait Modules return []; } - public function getModulesByCategory($alias) + public function getModulesByCategory($alias, $data = []) { - $response = $this->getRemote('apps/categories/' . $alias); + $response = $this->getRemote('apps/categories/' . $alias, 'GET', $data); if ($response && ($response->getStatusCode() == 200)) { return json_decode($response->getBody())->data; diff --git a/public/css/app.css b/public/css/app.css index c84672263..1e3737f8f 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -676,4 +676,12 @@ input[type="number"] { .pull-right.rating { margin-top: -30px; -} \ No newline at end of file +} + +.pager { + margin: inherit !important; +} + +.pager li>a, .pager li>span { + border-radius: 3px !important; +} diff --git a/resources/views/modules/home/index.blade.php b/resources/views/modules/home/index.blade.php index 3a2b992f1..f875744ae 100644 --- a/resources/views/modules/home/index.blade.php +++ b/resources/views/modules/home/index.blade.php @@ -16,7 +16,7 @@

{{ trans('modules.top_paid') }}

- @foreach ($paid as $module) + @foreach ($paid->data as $module) @include('partials.modules.item') @endforeach @@ -26,7 +26,7 @@

{{ trans('modules.new') }}

- @foreach ($new as $module) + @foreach ($new->data as $module) @include('partials.modules.item') @endforeach @@ -36,7 +36,7 @@

{{ trans('modules.top_free') }}

- @foreach ($free as $module) + @foreach ($free->data as $module) @include('partials.modules.item') @endforeach 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/modules/tiles/index.blade.php b/resources/views/modules/tiles/index.blade.php index d4423f142..f97a0990c 100644 --- a/resources/views/modules/tiles/index.blade.php +++ b/resources/views/modules/tiles/index.blade.php @@ -17,9 +17,19 @@
@if ($modules) - @foreach ($modules as $module) + @foreach ($modules->data as $module) @include('partials.modules.item') @endforeach +
+ +
@else
@@ -35,4 +45,4 @@ @endif
-@endsection \ No newline at end of file +@endsection 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'))]) }} +
+
+ +
+ @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');