diff --git a/addons/default/visiosoft/advs-module/resources/lang/en/message.php b/addons/default/visiosoft/advs-module/resources/lang/en/message.php index b4f5f28c2..d7cb4c7de 100644 --- a/addons/default/visiosoft/advs-module/resources/lang/en/message.php +++ b/addons/default/visiosoft/advs-module/resources/lang/en/message.php @@ -26,4 +26,5 @@ return [ 'delete_author_error' => 'You cannot delete a post that does not belong to you', 'success_delete' => 'Ad Deleted', 'pending_ad_status' => 'Your ad is pending approval by the Editor.', + 'extended' => ':number ad(s) has been extended successfully.', ]; diff --git a/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php b/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php index 7e5532cc1..c9eb75ade 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php +++ b/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php @@ -118,6 +118,8 @@ class AdvRepository extends EntryRepository implements AdvRepositoryInterface if (!empty($param['date'])) { if ($param['date'] === 'day') { $query = $query->where('advs_advs.publish_at', '>=', Carbon::now()->subDay()); + } elseif ($param['date'] === 'two_days') { + $query = $query->where('advs_advs.publish_at', '>=', Carbon::now()->subDays(2)); } elseif ($param['date'] === 'week') { $query = $query->where('advs_advs.publish_at', '>=', Carbon::now()->subWeek()); } elseif ($param['date'] === 'month') { @@ -133,6 +135,9 @@ class AdvRepository extends EntryRepository implements AdvRepositoryInterface if (!empty($param['map']) && $param['map'] == true) { $query = $query->whereNotNull('map_Val'); } + if (!empty($param['get_ads']) && $param['get_ads'] == true) { + $query = $query->where('is_get_adv', 1); + } foreach ($param as $para => $value) { if (substr($para, 0, 3) === "cf_") { @@ -175,6 +180,9 @@ class AdvRepository extends EntryRepository implements AdvRepositoryInterface } if (!empty($param['sort_by'])) { switch ($param['sort_by']) { + case "popular": + $query = $query->orderBy('advs_advs.count_show_ad', 'desc'); + break; case "sort_price_up": $query = $query->orderBy('advs_advs.price', 'desc'); break; @@ -355,5 +363,18 @@ class AdvRepository extends EntryRepository implements AdvRepositoryInterface return null; } - + public function extendAds($allAds, $isAdmin = false) + { + if (!is_numeric($allAds)) { + if ($isAdmin && auth()->user()->hasRole('admin')) { + $advs = $this->newQuery(); + } else { + $advs = $this->newQuery()->where('created_by_id', auth()->id()); + } + } else { + $advs = $this->newQuery()->where('id', $allAds); + } + $newDate = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s') . ' + ' . setting_value('visiosoft.module.advs::default_published_time') . ' day')); + return $advs->update(['finish_at' => $newDate]); + } } diff --git a/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php b/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php index 31e038bca..a3b32d0ad 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php +++ b/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php @@ -36,4 +36,5 @@ interface AdvRepositoryInterface extends EntryRepositoryInterface public function getCategoriesWithAdID($id); + public function extendAds($allAds, $isAdmin = false); } diff --git a/addons/default/visiosoft/advs-module/src/AdvsModule.php b/addons/default/visiosoft/advs-module/src/AdvsModule.php index 41888e22c..0eda5defc 100644 --- a/addons/default/visiosoft/advs-module/src/AdvsModule.php +++ b/addons/default/visiosoft/advs-module/src/AdvsModule.php @@ -31,7 +31,7 @@ class AdvsModule extends Module 'href' => "/advs/create_adv", ], 'extend_all' => [ - 'href' => "/admin/advs/extendAll", + 'href' => "/advs/extendAll/admin", 'icon' => 'fa fa-calendar', 'type' => 'info' ], diff --git a/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php b/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php index f416601eb..d0f3880cd 100644 --- a/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php +++ b/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php @@ -212,9 +212,13 @@ class AdvsModuleServiceProvider extends AddonServiceProvider 'as' => 'ajax::getAds', 'uses' => 'Visiosoft\AdvsModule\Http\Controller\AjaxController@getMyAds' ], - 'admin/advs/extendAll' => [ + 'advs/extendAll/{isAdmin?}' => [ 'as' => 'advs::extendAll', - 'uses' => 'Visiosoft\AdvsModule\Http\Controller\Admin\AdvsController@extendAll', + 'uses' => 'Visiosoft\AdvsModule\Http\Controller\AdvsController@extendAll', + ], + 'advs/extend/{adId}' => [ + 'as' => 'advs::extendSingle', + 'uses' => 'Visiosoft\AdvsModule\Http\Controller\AdvsController@extendSingle', ], ]; diff --git a/addons/default/visiosoft/advs-module/src/Http/Controller/Admin/AdvsController.php b/addons/default/visiosoft/advs-module/src/Http/Controller/Admin/AdvsController.php index a53c20951..311e6b30c 100644 --- a/addons/default/visiosoft/advs-module/src/Http/Controller/Admin/AdvsController.php +++ b/addons/default/visiosoft/advs-module/src/Http/Controller/Admin/AdvsController.php @@ -257,13 +257,4 @@ class AdvsController extends AdminController Return Back"; echo "
Return Admin Panel"; } - - public function extendAll() - { - $advs = $this->model->get(); - $new_date = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s') . ' + ' . setting_value('visiosoft.module.advs::default_published_time') . ' day')); - $advs->update(['finish_at' => $new_date]); - $this->messages->success(trans('visiosoft.module.advs::field.extended')); - return $this->redirect->to('admin/advs/advs'); - } } diff --git a/addons/default/visiosoft/advs-module/src/Http/Controller/AjaxController.php b/addons/default/visiosoft/advs-module/src/Http/Controller/AjaxController.php index bf8aac2a5..750325b75 100644 --- a/addons/default/visiosoft/advs-module/src/Http/Controller/AjaxController.php +++ b/addons/default/visiosoft/advs-module/src/Http/Controller/AjaxController.php @@ -78,7 +78,6 @@ class AjaxController extends PublicController } else { $page_title = trans('visiosoft.module.advs::field.my_adv.name'); $my_advs = $my_advs->myAdvsByUser(); - } $my_advs = $my_advs->orderByDesc('id'); $my_advs = $advRepository->addAttributes($my_advs->get()); @@ -86,11 +85,8 @@ class AjaxController extends PublicController foreach ($my_advs as $index => $ad) { $my_advs[$index]->detail_url = $this->adv_model->getAdvDetailLinkByModel($ad, 'list'); $my_advs[$index] = $this->adv_model->AddAdsDefaultCoverImage($ad); - } return response()->json(['success' => true, 'content' => $my_advs, 'title' => $page_title]); } - - } \ No newline at end of file diff --git a/addons/default/visiosoft/advs-module/src/Http/Controller/advsController.php b/addons/default/visiosoft/advs-module/src/Http/Controller/advsController.php index 9e77ca05c..57d64ae85 100644 --- a/addons/default/visiosoft/advs-module/src/Http/Controller/advsController.php +++ b/addons/default/visiosoft/advs-module/src/Http/Controller/advsController.php @@ -364,7 +364,7 @@ class AdvsController extends PublicController $this->template->set('meta_keywords', implode(',', explode(' ', $adv->name))); $this->template->set('meta_description', strip_tags($adv->advs_desc, '')); $this->template->set('meta_title', $adv->name . "|" . end($categories)['name']); - + $this->template->set('meta_image', $adv->cover_photo); if ($adv->created_by_id == isset(auth()->user()->id) OR $adv->status == "approved") { return $this->view->make('visiosoft.module.advs::ad-detail/detail', compact('adv', 'complaints', 'recommended_advs', 'categories', 'features', 'profile', 'comments', 'qrSRC')); @@ -974,4 +974,17 @@ class AdvsController extends PublicController return "success"; } -} + public function extendAll($isAdmin = null) + { + $adsExtended = $this->adv_repository->extendAds(true, $isAdmin); + $this->messages->success(trans('visiosoft.module.advs::message.extended', ['number' => $adsExtended])); + return $this->redirect->back(); + } + + public function extendSingle($adId) + { + $adsExtended = $this->adv_repository->extendAds($adId); + $this->messages->success(trans('visiosoft.module.advs::message.extended', ['number' => $adsExtended])); + return $this->redirect->back(); + } +} \ No newline at end of file diff --git a/addons/default/visiosoft/base-theme/resources/views/partials/ogdata.twig b/addons/default/visiosoft/base-theme/resources/views/partials/ogdata.twig index 381f7f9d9..8ca747a5a 100644 --- a/addons/default/visiosoft/base-theme/resources/views/partials/ogdata.twig +++ b/addons/default/visiosoft/base-theme/resources/views/partials/ogdata.twig @@ -4,6 +4,13 @@ - + + + + + + + + {% endblock %} \ No newline at end of file diff --git a/addons/default/visiosoft/profile-module/resources/assets/js/ads.js b/addons/default/visiosoft/profile-module/resources/assets/js/ads.js index 3179970df..8f5acc203 100644 --- a/addons/default/visiosoft/profile-module/resources/assets/js/ads.js +++ b/addons/default/visiosoft/profile-module/resources/assets/js/ads.js @@ -1,3 +1,70 @@ +var current_page = 1; +var records_per_page = ads_per_page; +var ads_type = ""; + +var objJson = []; + +function prevPage() +{ + if (current_page > 1) { + current_page--; + changePage(current_page); + } +} + +function nextPage(event) +{ + if (current_page < numPages()) { + current_page++; + changePage(current_page); + } +} + +function changePage(page) +{ + var btn_next = $("#btn_next"); + var btn_prev = $("#btn_prev"); + var listing_table = $("#nav-" + ads_type); + var page_span = $("#page"); + + // Validate page + if (page < 1) page = 1; + if (page > numPages()) page = numPages(); + + listing_table.html(""); + + for (var i = (page-1) * records_per_page; i < (page * records_per_page) && i < objJson.length; i++) { + listing_table.append(addAdsRow(objJson[i].id, objJson[i].detail_url, objJson[i].cover_photo, objJson[i].name, + objJson[i].price + " " + objJson[i].currency, + objJson[i].city_name, objJson[i].country_name, objJson[i].cat1_name, objJson[i].cat2_name, objJson[i].status)); + } + + page_span.html(page + "/" + numPages()); + + if (numPages() === 1) { + page_span.hide(); + } else { + page_span.show(); + } + + if (page === 1) { + btn_prev.hide(); + } else { + btn_prev.show(); + } + + if (page === numPages()) { + btn_next.hide(); + } else { + btn_next.show(); + } +} + +function numPages() +{ + return Math.ceil(objJson.length / records_per_page); +} + function crud(params, url, type, callback) { $.ajax({ type: type, @@ -11,18 +78,16 @@ function crud(params, url, type, callback) { function getMyAds(type) { crud({'type': type}, '/ajax/getAds', 'GET', function (callback) { - $('#nav-' + type).html(""); - $.each(callback.content, function (index, adv) { - $('#nav-' + type).append(addAdsRow(adv.id, adv.detail_url, adv.cover_photo, adv.name, - adv.price + " " + adv.currency, - adv.city_name, adv.country_name, adv.cat1_name, adv.cat2_name, adv.status)); - }); + ads_type = type; + current_page = 1; + objJson = callback.content; + changePage(1); }) } $('.profile-ads-tab a').on('click', function () { getMyAds($(this).attr('data-type')) -}) +}); getMyAds('approved'); @@ -85,6 +150,11 @@ function dropdownRow(id, type) { delete_ad + "\n"; + dropdown += "" + + " " + + extend_ad + + "\n"; + dropdown += ""; return dropdown; diff --git a/addons/default/visiosoft/profile-module/resources/lang/en/button.php b/addons/default/visiosoft/profile-module/resources/lang/en/button.php index 0e67f94a2..5e27a3d0b 100644 --- a/addons/default/visiosoft/profile-module/resources/lang/en/button.php +++ b/addons/default/visiosoft/profile-module/resources/lang/en/button.php @@ -7,6 +7,8 @@ return [ 'update_password' => 'Update Password', 'update_profile' => 'Update Profile', 'delete' => 'Delete', + 'extend' => 'Extend', + 'extend_all' => 'Extend All', 'edit' => 'Edit', 'go_profile' => 'Go to Profile Detail', 'go_user' => 'Go to User Detail', diff --git a/addons/default/visiosoft/profile-module/resources/views/profile/ads.twig b/addons/default/visiosoft/profile-module/resources/views/profile/ads.twig index f706fb006..a52293ce0 100644 --- a/addons/default/visiosoft/profile-module/resources/views/profile/ads.twig +++ b/addons/default/visiosoft/profile-module/resources/views/profile/ads.twig @@ -10,7 +10,6 @@
+
+ + {{ trans('visiosoft.module.profile::button.extend_all') }} + +
@@ -52,7 +69,9 @@ var approve = "{{ trans('visiosoft.module.advs::field.approve') }}"; var passive = "{{ trans('visiosoft.module.advs::field.passive') }}"; var delete_ad = "{{ trans('visiosoft.module.profile::button.delete') }}"; + var extend_ad = "{{ trans('visiosoft.module.profile::button.extend') }}"; var edit_ad = "{{ trans('visiosoft.module.profile::button.edit') }}"; + var ads_per_page = "{{ setting_value('streams::per_page') }}"; {{ asset_add('scripts.js','visiosoft.module.profile::assets/js/ads.js') }} {% endblock %} \ No newline at end of file