Commit 4e1c013a by Vladislav

#19497 Получение кеша объявлений для шаблона

1 parent d208756f
......@@ -7,6 +7,8 @@ use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Support\Facades\DB;
class AdvertisementsAdd extends Command
{
......@@ -48,19 +50,46 @@ class AdvertisementsAdd extends Command
foreach ($tokens as $token) {
$token->load([
'dictionaryCampaignsEnabledForExternalSynchronized.goalAdvertisementsForNotExternal' => function (HasMany $query) {
return $query->has('advertisement');
'dictionaryCampaignsEnabledForExternalSynchronized' => function (HasManyThrough $query) {
return $query->has('goalAdvertisementsForNotExternal.advertisement');
},
'dictionaryCampaignsEnabledForExternalSynchronized.goalAdvertisementsForNotExternal.advertisement',
]);
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
$goalAds = DB::table('goal_advertisements')
->join('advertisements', 'goal_advertisements.advertisement_id', '=', 'advertisements.id')
->whereNull('advertisements.deleted_at')
->whereNull('goal_advertisements.external_id')
->whereNotNull('goal_advertisements.goal_ad_group_external_id')
->whereNotNull('goal_advertisements.dictionary_campaign_external_id')
->whereIn('goal_advertisements.dictionary_campaign_id', $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('id'))
->select([
'goal_advertisements.id as id',
'goal_advertisements.dictionary_campaign_id as dictionary_campaign_id',
'goal_advertisements.goal_ad_group_external_id as goal_ad_group_external_id',
'advertisements.title as title',
'advertisements.text as text',
'advertisements.mobile as mobile',
'advertisements.title2 as title2',
'advertisements.href as href',
'advertisements.display_url_path as display_url_path',
'advertisements.v_card_id as v_card_id',
'advertisements.ad_image_hash as ad_image_hash',
'advertisements.site_link_set_id as site_link_set_id',
'advertisements.ad_extensions as ad_extensions',
'advertisements.video_extension as video_extension',
'advertisements.price_extension as price_extension',
'advertisements.turbo_page_id as turbo_page_id',
'advertisements.business_id as business_id',
'advertisements.prefer_v_card_over_business as prefer_v_card_over_business',
])
->get();
$factory->getRequest('Ads', 'add')
->call([
'goalAds' => $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('goalAdvertisementsForNotExternal')
->collapse(),
'goalAds' => $goalAds,
]);
}
......
......@@ -7,6 +7,8 @@ use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Support\Facades\DB;
class AdvertisementsUpdate extends Command
{
......@@ -48,19 +50,45 @@ class AdvertisementsUpdate extends Command
foreach ($tokens as $token) {
$token->load([
'dictionaryCampaignsEnabledForExternalSynchronized.goalAdvertisementsForNeedUpdated' => function (HasMany $query) {
return $query->has('advertisement');
'dictionaryCampaignsEnabledForExternalSynchronized' => function (HasManyThrough $query) {
return $query->has('goalAdvertisementsForNeedUpdated.advertisement');
},
'dictionaryCampaignsEnabledForExternalSynchronized.goalAdvertisementsForNeedUpdated.advertisement',
]);
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
$factory->getRequest('Ads', 'add')
$goalAds = DB::table('goal_advertisements')
->join('advertisements', 'goal_advertisements.advertisement_id', '=', 'advertisements.id')
->whereNull('advertisements.deleted_at')
->whereNotNull('goal_advertisements.updated_need')
->whereNotNull('goal_advertisements.goal_ad_group_external_id')
->whereNotNull('goal_advertisements.dictionary_campaign_external_id')
->whereIn('goal_advertisements.dictionary_campaign_id', $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('id'))
->select([
'goal_advertisements.id as id',
'goal_advertisements.dictionary_campaign_id as dictionary_campaign_id',
'advertisements.title as title',
'advertisements.text as text',
'advertisements.mobile as mobile',
'advertisements.title2 as title2',
'advertisements.href as href',
'advertisements.display_url_path as display_url_path',
'advertisements.v_card_id as v_card_id',
'advertisements.ad_image_hash as ad_image_hash',
'advertisements.site_link_set_id as site_link_set_id',
'advertisements.ad_extensions as ad_extensions',
'advertisements.video_extension as video_extension',
'advertisements.price_extension as price_extension',
'advertisements.turbo_page_id as turbo_page_id',
'advertisements.business_id as business_id',
'advertisements.prefer_v_card_over_business as prefer_v_card_over_business',
])
->get();
$factory->getRequest('Ads', 'update')
->call([
'goalAds' => $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('goalAdvertisementsForNeedUpdated')
->collapse(),
'goalAds' => $goalAds,
]);
}
......
......@@ -7,6 +7,8 @@ use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Support\Facades\DB;
class KeywordsUpdate extends Command
{
......@@ -48,19 +50,33 @@ class KeywordsUpdate extends Command
foreach ($tokens as $token) {
$token->load([
'dictionaryCampaignsEnabledForExternalUpdated.goalKeywordsForNeedUpdated' => function (HasMany $query) {
return $query->has('keyword');
'dictionaryCampaignsEnabledForExternalSynchronized' => function (HasManyThrough $query) {
return $query->has('goalKeywordsForNeedUpdated.keyword');
},
'dictionaryCampaignsEnabledForExternalUpdated.goalKeywordsForNeedUpdated.keyword',
]);
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
$goalKeywords = DB::table('goal_keywords')
->join('keywords', 'goal_keywords.keyword_id', '=', 'keywords.id')
->whereNull('keywords.deleted_at')
->whereNotNull('goal_advertisements.updated_need')
->whereNotNull('goal_keywords.goal_ad_group_external_id')
->whereNotNull('goal_keywords.dictionary_campaign_external_id')
->whereIn('goal_keywords.dictionary_campaign_id', $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('id'))
->select([
'goal_keywords.id as id',
'goal_keywords.dictionary_campaign_id as dictionary_campaign_id',
'keywords.keyword as keyword',
'keywords.user_param_1 as user_param_1',
'keywords.user_param_2 as user_param_2',
])
->get();
$factory->getRequest('Keywords', 'update')
->call([
'goalKeywords' => $token->dictionaryCampaignsEnabledForExternalUpdated->pluck('goalKeywordsForNeedUpdated')
->collapse(),
'goalKeywords' => $goalKeywords,
]);
}
......
......@@ -3,6 +3,7 @@
namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Advertisement;
use App\Models\Pivots\GoalAdvertisement;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
......@@ -17,7 +18,7 @@ class AddAds extends DirectRequest
protected $max_count = 1000;
protected $timestamp;
/* @var Collection|GoalAdvertisement[] */
/* @var Collection|GoalAdvertisement[]|Advertisement[]|\stdClass[] */
protected $goalAds;
public function call($params = null)
......@@ -50,10 +51,10 @@ class AddAds extends DirectRequest
public function handle($response)
{
try {
\Log::debug($response);
if (isset($response['result']['Errors'])) {
Log::debug($response['Errors']);
Log::debug($this->getParams());
// Log::debug($response['Errors']);
// Log::debug($this->getParams());
}
if (!isset($response['result']['AddResults'])) {
......@@ -70,12 +71,14 @@ class AddAds extends DirectRequest
$external_id = (string)$add_result['Id'];
/* @var $goalAd GoalAdvertisement|Advertisement|\stdClass */
$goalAd = $this->goalAds->get($key);
$goalAd->update([
'external_id' => $external_id,
'external_upload_at' => Carbon::now(),
]);
GoalAdvertisement::whereId($goalAd->id)
->update([
'external_id' => $external_id,
'external_upload_at' => Carbon::now(),
]);
}
} catch (\Exception $e) {
......@@ -101,7 +104,9 @@ class AddAds extends DirectRequest
$lists = [];
$this->setParams([
'Ads' => $this->goalAds->map(function (GoalAdvertisement $goalAdvertisement) use ($variables, &$lists) {
'Ads' => $this->goalAds->map(function ($goalAdvertisement) use ($variables, &$lists) {
/* @var $goalAdvertisement GoalAdvertisement|Advertisement|\stdClass */
if (!isset($lists[$goalAdvertisement->dictionary_campaign_id])) {
$list = Variable::getListVariablesByDictionaryCampaign($goalAdvertisement->dictionary_campaign_id, $variables);
......@@ -110,73 +115,73 @@ class AddAds extends DirectRequest
$list = $lists[$goalAdvertisement->dictionary_campaign_id];
}
$advertisement = $goalAdvertisement->advertisement;
$data = [
'AdGroupId' => $goalAdvertisement->goal_ad_group_external_id,
'TextAd' => [
'Title' => StrReplaceByVariables::getInstance($advertisement->title, $list)->get(),
'Text' => StrReplaceByVariables::getInstance($advertisement->text, $list)->get(),
'Mobile' => $advertisement->mobile ? 'YES' : 'NO',
'Title' => StrReplaceByVariables::getInstance($goalAdvertisement->title, $list)->get(),
'Text' => StrReplaceByVariables::getInstance($goalAdvertisement->text, $list)->get(),
'Mobile' => $goalAdvertisement->mobile ? 'YES' : 'NO',
],
];
if ($advertisement->title2) {
$data['TextAd']['Title2'] = StrReplaceByVariables::getInstance($advertisement->title2, $list)->get();
if ($goalAdvertisement->title2) {
$data['TextAd']['Title2'] = StrReplaceByVariables::getInstance($goalAdvertisement->title2, $list)->get();
}
if ($advertisement->href) {
$data['TextAd']['Href'] = $advertisement->href;
if ($goalAdvertisement->href) {
$data['TextAd']['Href'] = $goalAdvertisement->href;
}
if ($advertisement->display_url_path) {
$data['TextAd']['DisplayUrlPath'] = $advertisement->display_url_path;
if ($goalAdvertisement->display_url_path) {
$data['TextAd']['DisplayUrlPath'] = $goalAdvertisement->display_url_path;
}
if ($advertisement->v_card_id) {
$data['TextAd']['VCardId'] = $advertisement->v_card_id;
if ($goalAdvertisement->v_card_id) {
$data['TextAd']['VCardId'] = $goalAdvertisement->v_card_id;
}
if ($advertisement->ad_image_hash) {
$data['TextAd']['AdImageHash'] = $advertisement->ad_image_hash;
if ($goalAdvertisement->ad_image_hash) {
$data['TextAd']['AdImageHash'] = $goalAdvertisement->ad_image_hash;
}
if ($advertisement->site_link_set_id) {
$data['TextAd']['SitelinkSetId'] = $advertisement->site_link_set_id;
if ($goalAdvertisement->site_link_set_id) {
$data['TextAd']['SitelinkSetId'] = $goalAdvertisement->site_link_set_id;
}
if ($advertisement->ad_extensions) {
$data['TextAd']['AdExtensionIds'] = array_map(function ($ad_extension) { return $ad_extension['AdExtensionId']; }, $advertisement->ad_extensions);
if ($ad_extensions = @json_decode($goalAdvertisement->ad_extensions, true)) {
$data['TextAd']['AdExtensionIds'] = array_map(function ($ad_extension) {
return $ad_extension['AdExtensionId'];
}, $ad_extensions);
}
if ($advertisement->video_extension) {
if ($video_extension = @json_decode($goalAdvertisement->video_extension, true)) {
$data['TextAd']['VideoExtension'] = [
'CreativeId' => $advertisement->video_extension['CreativeId'],
'CreativeId' => $video_extension['CreativeId'],
];
}
if ($advertisement->price_extension) {
if ($price_extension = @json_decode($goalAdvertisement->price_extension, true)) {
$data['TextAd']['PriceExtension'] = [
'Price' => $advertisement->price_extension['Price'],
'PriceQualifier' => $advertisement->price_extension['PriceQualifier'],
'PriceCurrency' => $advertisement->price_extension['PriceCurrency'],
'Price' => $price_extension['Price'],
'PriceQualifier' => $price_extension['PriceQualifier'],
'PriceCurrency' => $price_extension['PriceCurrency'],
];
if (isset($advertisement->price_extension['OldPrice']) && !is_null($advertisement->price_extension['OldPrice'])) {
$data['TextAd']['PriceExtension']['OldPrice'] = $advertisement->price_extension['OldPrice'];
if (isset($price_extension['OldPrice']) && !is_null($price_extension['OldPrice'])) {
$data['TextAd']['PriceExtension']['OldPrice'] = $price_extension['OldPrice'];
}
}
if ($advertisement->turbo_page_id) {
$data['TextAd']['TurboPageId'] = $advertisement->turbo_page_id;
if ($goalAdvertisement->turbo_page_id) {
$data['TextAd']['TurboPageId'] = $goalAdvertisement->turbo_page_id;
}
if ($advertisement->business_id) {
$data['TextAd']['BusinessId'] = $advertisement->business_id;
if ($goalAdvertisement->business_id) {
$data['TextAd']['BusinessId'] = $goalAdvertisement->business_id;
}
if ($advertisement->prefer_v_card_over_business) {
$data['TextAd']['PreferVCardOverBusiness'] = $advertisement->prefer_v_card_over_business ? 'YES' : 'NO';
if ($goalAdvertisement->prefer_v_card_over_business) {
$data['TextAd']['PreferVCardOverBusiness'] = $goalAdvertisement->prefer_v_card_over_business ? 'YES' : 'NO';
}
return $data;
......
......@@ -3,6 +3,7 @@
namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Keyword;
use App\Models\Pivots\GoalKeyword;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
......@@ -17,7 +18,7 @@ class AddKeywords extends DirectRequest
protected $max_count = 1000;
protected $timestamp;
/* @var Collection */
/* @var Collection|GoalKeyword[]|Keyword[]|\stdClass[] */
protected $goalKeywords;
public function call($params = null)
......@@ -72,15 +73,12 @@ class AddKeywords extends DirectRequest
$goalKeyword = $this->goalKeywords[$key];
$goalKeyword = GoalKeyword::find($goalKeyword->id);
if ($goalKeyword) {
$goalKeyword->update([
GoalKeyword::whereId($goalKeyword->id)
->update([
'external_id' => $external_id,
'external_upload_at' => Carbon::now(),
'reserve_create_at' => null,
]);
}
}
} catch (\Exception $e) {
......@@ -116,6 +114,8 @@ class AddKeywords extends DirectRequest
$this->setParams([
'Keywords' => $this->goalKeywords->map(function ($goalKeyword) use ($variables, &$lists) {
/* @var $goalKeyword GoalKeyword|Keyword|\stdClass */
if (!isset($lists[$goalKeyword->dictionary_campaign_id])) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionary_campaign_id, $variables);
$lists[$goalKeyword->dictionary_campaign_id] = $list;
......
......@@ -3,6 +3,7 @@
namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Advertisement;
use App\Models\Pivots\GoalAdvertisement;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
......@@ -17,7 +18,7 @@ class UpdateAds extends DirectRequest
protected $max_count = 1000;
protected $timestamp;
/* @var Collection|GoalAdvertisement[] */
/* @var Collection|GoalAdvertisement[]|Advertisement[]|\stdClass[] */
protected $goalAds;
public function call($params = null)
......@@ -100,7 +101,9 @@ class UpdateAds extends DirectRequest
$lists = [];
$this->setParams([
'Ads' => $this->goalAds->map(function (GoalAdvertisement $goalAdvertisement) use ($variables, &$lists) {
'Ads' => $this->goalAds->map(function ($goalAdvertisement) use ($variables, &$lists) {
/* @var $goalAdvertisement GoalAdvertisement|Advertisement|\stdClass */
if (!isset($lists[$goalAdvertisement->dictionary_campaign_id])) {
$list = Variable::getListVariablesByDictionaryCampaign($goalAdvertisement->dictionary_campaign_id, $variables);
......@@ -109,81 +112,79 @@ class UpdateAds extends DirectRequest
$list = $lists[$goalAdvertisement->dictionary_campaign_id];
}
$advertisement = $goalAdvertisement->advertisement;
$data = [
'Id' => $goalAdvertisement->external_id,
'TextAd' => [
'Title' => StrReplaceByVariables::getInstance($advertisement->title, $list)->get(),
'Text' => StrReplaceByVariables::getInstance($advertisement->text, $list)->get(),
'Mobile' => $advertisement->mobile ? 'YES' : 'NO',
'AgeLabel' => $advertisement->age_label,
'Title' => StrReplaceByVariables::getInstance($goalAdvertisement->title, $list)->get(),
'Text' => StrReplaceByVariables::getInstance($goalAdvertisement->text, $list)->get(),
'Mobile' => $goalAdvertisement->mobile ? 'YES' : 'NO',
'AgeLabel' => $goalAdvertisement->age_label,
],
];
if ($advertisement->title2) {
$data['TextAd']['Title2'] = StrReplaceByVariables::getInstance($advertisement->title2, $list)->get();
if ($goalAdvertisement->title2) {
$data['TextAd']['Title2'] = StrReplaceByVariables::getInstance($goalAdvertisement->title2, $list)->get();
}
if ($advertisement->href) {
$data['TextAd']['Href'] = $advertisement->href;
if ($goalAdvertisement->href) {
$data['TextAd']['Href'] = $goalAdvertisement->href;
}
if ($advertisement->display_url_path) {
$data['TextAd']['DisplayUrlPath'] = $advertisement->display_url_path;
if ($goalAdvertisement->display_url_path) {
$data['TextAd']['DisplayUrlPath'] = $goalAdvertisement->display_url_path;
}
if ($advertisement->v_card_id) {
$data['TextAd']['VCardId'] = $advertisement->v_card_id;
if ($goalAdvertisement->v_card_id) {
$data['TextAd']['VCardId'] = $goalAdvertisement->v_card_id;
}
if ($advertisement->ad_image_hash) {
$data['TextAd']['AdImageHash'] = $advertisement->ad_image_hash;
if ($goalAdvertisement->ad_image_hash) {
$data['TextAd']['AdImageHash'] = $goalAdvertisement->ad_image_hash;
}
if ($advertisement->site_link_set_id) {
$data['TextAd']['SitelinkSetId'] = $advertisement->site_link_set_id;
if ($goalAdvertisement->site_link_set_id) {
$data['TextAd']['SitelinkSetId'] = $goalAdvertisement->site_link_set_id;
}
if ($advertisement->ad_extensions) {
if ($ad_extensions = @json_decode($goalAdvertisement->ad_extensions, true)) {
$data['TextAd']['CalloutSetting'] = [
'AdExtensions' => array_map(function ($ad_extension) {
return [
'AdExtensionId' => $ad_extension['AdExtensionId'],
'Operation' => 'SET',
];
}, $advertisement->ad_extensions)
}, $ad_extensions)
];
}
if ($advertisement->video_extension) {
if ($video_extension = @json_decode($goalAdvertisement->video_extension, true)) {
$data['TextAd']['VideoExtension'] = [
'CreativeId' => $advertisement->video_extension['CreativeId'],
'CreativeId' => $video_extension['CreativeId'],
];
}
if ($advertisement->price_extension) {
if ($price_extension = @json_decode($goalAdvertisement->price_extension, true)) {
$data['TextAd']['PriceExtension'] = [
'Price' => $advertisement->price_extension['Price'],
'PriceQualifier' => $advertisement->price_extension['PriceQualifier'],
'PriceCurrency' => $advertisement->price_extension['PriceCurrency'],
'Price' => $price_extension['Price'],
'PriceQualifier' => $price_extension['PriceQualifier'],
'PriceCurrency' => $price_extension['PriceCurrency'],
];
if (isset($advertisement->price_extension['OldPrice']) && !is_null($advertisement->price_extension['OldPrice'])) {
$data['TextAd']['PriceExtension']['OldPrice'] = $advertisement->price_extension['OldPrice'];
if (isset($price_extension['OldPrice']) && !is_null($price_extension['OldPrice'])) {
$data['TextAd']['PriceExtension']['OldPrice'] = $price_extension['OldPrice'];
}
}
if ($advertisement->turbo_page_id) {
$data['TextAd']['TurboPageId'] = $advertisement->turbo_page_id;
if ($goalAdvertisement->turbo_page_id) {
$data['TextAd']['TurboPageId'] = $goalAdvertisement->turbo_page_id;
}
if ($advertisement->business_id) {
$data['TextAd']['BusinessId'] = $advertisement->business_id;
if ($goalAdvertisement->business_id) {
$data['TextAd']['BusinessId'] = $goalAdvertisement->business_id;
}
if ($advertisement->prefer_v_card_over_business) {
$data['TextAd']['PreferVCardOverBusiness'] = $advertisement->prefer_v_card_over_business ? 'YES' : 'NO';
if ($goalAdvertisement->prefer_v_card_over_business) {
$data['TextAd']['PreferVCardOverBusiness'] = $goalAdvertisement->prefer_v_card_over_business ? 'YES' : 'NO';
}
return $data;
......
......@@ -3,12 +3,13 @@
namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Keyword;
use App\Models\Pivots\GoalKeyword;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
class UpdateKeywords extends DirectRequest
......@@ -16,7 +17,7 @@ class UpdateKeywords extends DirectRequest
protected $max_count = 1000;
protected $timestamp;
/* @var Collection|GoalKeyword[] */
/* @var Collection|GoalKeyword[]|Keyword[]|\stdClass[] */
protected $goalKeywords;
public function call($params = null)
......@@ -85,24 +86,31 @@ class UpdateKeywords extends DirectRequest
$variables = Variable::all();
$lists = [];
$this->setParams([
'Keywords' => $this->goalKeywords->map(function (GoalKeyword $goalKeyword) use ($variables) {
'Keywords' => $this->goalKeywords->map(function ($goalKeyword) use ($variables, &$lists) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionary_campaign_id, $variables);
/* @var $goalKeyword GoalKeyword|Keyword|\stdClass */
$keyword = $goalKeyword->keyword;
if (!isset($lists[$goalKeyword->dictionary_campaign_id])) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionary_campaign_id, $variables);
$lists[$goalKeyword->dictionary_campaign_id] = $list;
} else {
$list = $lists[$goalKeyword->dictionary_campaign_id];
}
$data = [
'Id' => $goalKeyword->external_id,
'Keyword' => StrReplaceByVariables::getInstance($keyword->keyword, $list)->get(),
'Keyword' => StrReplaceByVariables::getInstance($goalKeyword->keyword, $list)->get(),
];
if ($keyword->user_param_1) {
$data['UserParam1'] = $keyword->user_param_1;
if ($goalKeyword->user_param_1) {
$data['UserParam1'] = $goalKeyword->user_param_1;
}
if ($keyword->user_param_2) {
$data['UserParam2'] = $keyword->user_param_2;
if ($goalKeyword->user_param_2) {
$data['UserParam2'] = $goalKeyword->user_param_2;
}
return $data;
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!