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 353e62a2a..04526f1d0 100644
--- a/addons/default/visiosoft/advs-module/resources/lang/en/message.php
+++ b/addons/default/visiosoft/advs-module/resources/lang/en/message.php
@@ -23,4 +23,6 @@ return [
'choose_user' => 'Choose a user',
'owner_updated_successfully' => 'The Owner Has Been Updated Successfully!',
'no_add_found' => 'No Ad Found!',
+ 'replicated_success' => 'The ad has been replicated successfully!',
+ 'ad_doesnt_exist' => "This ad doesn't exist!",
];
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 10fb2e2da..b6c0280c0 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
@@ -4,13 +4,14 @@
use Anomaly\SettingsModule\Setting\Contract\SettingRepositoryInterface;
use Anomaly\Streams\Platform\Application\Application;
use Anomaly\Streams\Platform\Entry\Contract\EntryInterface;
-use Anomaly\Streams\Platform\Model\Advs\AdvsAdvsEntryModel;
+use Anomaly\Streams\Platform\Model\Advs\AdvsAdvsEntryTranslationsModel;
use Anomaly\Streams\Platform\Model\Cats\CatsCategoryEntryModel;
use Anomaly\UsersModule\User\Contract\UserRepositoryInterface;
use Anomaly\UsersModule\User\UserModel;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
+use Visiosoft\AdvsModule\Adv\Contract\AdvRepositoryInterface;
use Visiosoft\AdvsModule\Adv\Table\Filter\CategoryFilterQuery;
use Visiosoft\AdvsModule\Adv\Table\Filter\CityFilterQuery;
use Visiosoft\AdvsModule\Adv\Table\Filter\StatusFilterQuery;
@@ -20,20 +21,30 @@ use Visiosoft\AdvsModule\Adv\Event\ChangedStatusAd;
use Visiosoft\AdvsModule\Adv\Form\AdvFormBuilder;
use Visiosoft\AdvsModule\Adv\Table\AdvTableBuilder;
use Anomaly\Streams\Platform\Http\Controller\AdminController;
+use Visiosoft\AdvsModule\Option\Contract\OptionRepositoryInterface;
use Visiosoft\CatsModule\Category\CategoryModel;
use Visiosoft\LocationModule\City\CityModel;
use Visiosoft\AlgoliaModule\Search\SearchModel;
-use Illuminate\Contracts\Events\Dispatcher;
-
class AdvsController extends AdminController
{
private $model;
+ private $advRepository;
+ private $advsEntryTranslationsModel;
+ private $optionRepository;
- public function __construct(AdvModel $model)
+ public function __construct(
+ AdvModel $model,
+ AdvRepositoryInterface $advRepository,
+ AdvsAdvsEntryTranslationsModel $advsEntryTranslationsModel,
+ OptionRepositoryInterface $optionRepository
+ )
{
- $this->model = $model;
parent::__construct();
+ $this->model = $model;
+ $this->advRepository = $advRepository;
+ $this->advsEntryTranslationsModel = $advsEntryTranslationsModel;
+ $this->optionRepository = $optionRepository;
}
/**
@@ -82,13 +93,21 @@ class AdvsController extends AdminController
'href' => '/advs/edit_advs/{entry.id}',
'text' => "" . trans('streams::button.edit') . "",
],
- 'change_owner' => [
- 'data-toggle' => 'modal',
- 'data-target' => '#modal',
- 'text' => "" . trans('visiosoft.module.advs::button.change_owner') . "",
- 'icon' => 'fa fa-users',
- 'href' => 'admin/advs-users/choose/{entry.id}',
- ]
+ 'settings' => [
+ 'text' => false,
+ 'href' => false,
+ 'dropdown' => [
+ 'change_owner' => [
+ 'data-toggle' => 'modal',
+ 'data-target' => '#modal',
+ 'text' => trans('visiosoft.module.advs::button.change_owner'),
+ 'href' => 'admin/advs-users/choose/{entry.id}',
+ ],
+ 'replicate' => [
+ 'text' => 'Replicate',
+ ],
+ ],
+ ],
]);
if ($this->model->is_enabled('recommendedads')) {
@@ -245,6 +264,68 @@ class AdvsController extends AdminController
return back();
}
+ public function replicate($advID)
+ {
+ try {
+ $adv = $this->advRepository->find($advID);
+ if (!$adv) {
+ throw new \Exception(trans('visiosoft.module.advs::message.ad_doesnt_exist'));
+ } else {
+ // Replicate ad
+ $adv = $adv->toArray();
+ unset(
+ $adv['id'],
+ $adv['sort_order'],
+ $adv['cover_photo'],
+ $adv['locale'],
+ $adv['name'],
+ $adv['advs_desc']
+ );
+ $newAdv = $this->advRepository->create(array_merge($adv, [
+ 'slug' => $adv['slug'] . '_' . time(),
+ ]));
+
+ // Replicate ad translations
+ $advTranslations = $this->advsEntryTranslationsModel->newQuery()->where('entry_id', $advID)->get();
+ $translations = array();
+ foreach ($advTranslations as $advTranslation) {
+ $translations[$advTranslation->locale] = [
+ 'name' => $advTranslation->name,
+ 'advs_desc' => $advTranslation->advs_desc,
+ ];
+ }
+ $newAdv->update($translations);
+
+ // Replicate ad options
+ $advOptions = $this->optionRepository->newQuery()->where('adv_id', $advID)->get();
+ foreach ($advOptions as $advOption) {
+ $newAdvOption = $advOption->replicate();
+ $newAdvOption->adv_id = $newAdv->id;
+ $newAdvOption->save();
+ }
+
+ // Replicate ad custom fields
+ $advCustomFields = $this->model->is_enabled('customfields');
+ if ($advCustomFields) {
+ $advCustomFields = app('Visiosoft\CustomfieldsModule\CustomFieldAdv\Contract\CustomFieldAdvRepositoryInterface')
+ ->newQuery()->where('parent_adv_id', $advID)->get();
+ foreach ($advCustomFields as $advCustomField) {
+ $newaAdvCustomField = $advCustomField->replicate();
+ $newaAdvCustomField->parent_adv_id = $newAdv->id;
+ $newaAdvCustomField->save();
+ }
+ }
+
+ $this->messages->success(trans('visiosoft.module.advs::message.replicated_success'));
+ }
+
+ return redirect('admin/advs');
+ } catch (\Exception $e) {
+ $this->messages->error($e->getMessage());
+ return redirect('admin/advs');
+ }
+ }
+
public function assetsClear(Filesystem $files, Application $application, Request $request)
{
$directory = 'assets';