Commit 1f1d0ba6 by Евгений

Merge remote-tracking branch 'origin/master' into master

# Conflicts:
#	app/Http/Controllers/TokensController.php
#	resources/js/Pages/Tokens/Edit.vue
2 parents f0a4dd0f c0e59206
......@@ -11,6 +11,8 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Request;
use Inertia\Inertia;
use phpDocumentor\Reflection\Types\Boolean;
use phpDocumentor\Reflection\Types\Integer;
class TokensController extends Controller
{
......@@ -67,15 +69,34 @@ class TokensController extends Controller
return Redirect::back()->with('success', 'Token updated.');
}
public function updateCampaigns(Tokens $token)
public function managedCampaign(Tokens $token, $campaign_id, $managed)
{
$token->update(
Request::validate([
'campaigns' => ['array', 'exists:' . app(Campaigns::class)->getTable()],
])
);
$campaign = $token->campaigns()->find($campaign_id);
if (!$campaign) {
return Redirect::back();
}
$campaign->update([
'manage' => !!$managed,
]);
return Redirect::back()->with('success', 'Campaign ' . ($managed ? 'added':'deleted') . '.');
}
public function enabledCampaign(Tokens $token, $campaign_id, $enabled)
{
$campaign = $token->campaigns()->find($campaign_id);
if (!$campaign) {
return Redirect::back();
}
$campaign->update([
'enabled' => !!$enabled,
]);
return Redirect::back()->with('success', 'Campaigns updated.');
return Redirect::back()->with('success', 'Campaign ' . ($enabled ? 'enabled':'disabled') . '.');
}
public function destroy(Tokens $token)
......@@ -104,6 +125,6 @@ class TokensController extends Controller
public function addCity(Tokens $token)
{
$token
$token;
}
}
......@@ -25,7 +25,9 @@ class Campaigns extends Model
'relevant_keywords_setting_budget_percent',
'relevant_keywords_setting_optimize_goal_id',
'attribution_model',
'updated'
'updated',
'manage',
'enabled',
];
protected $casts = [
......@@ -42,4 +44,9 @@ class Campaigns extends Model
{
$query->where('manage', true);
}
public function scopeNotForManaged($query)
{
$query->where('manage', false);
}
}
......@@ -41,4 +41,9 @@ class Tokens extends Model
{
return $this->campaigns()->forManaged();
}
public function campaignsNotForManaged()
{
return $this->campaigns()->notForManaged();
}
}
......@@ -36,7 +36,7 @@
</div>
</form>
</div>
<div v-if="campaigns.length">
<div v-if="state.campaigns.length || state.token_campaigns.length">
<h2 class="mt-12 font-bold text-2xl">Campaigns</h2>
<div class="mt-4 flex flex-wrap">
<div v-if="state.campaigns.length" class="flex flex-wrap">
......@@ -136,13 +136,13 @@ export default {
api: this.token.api,
type: this.token.type,
}),
campaign_add_form: this.$inertia.form({
campaign_id: null,
}),
campaigns_form: this.$inertia.form(),
state: {
all_cities: this.cities,
cities: this.token.cities,
campaign_id: null,
campaigns: this.filterCampaigns(this.token.campaigns),
token_campaigns: this.token.campaigns,
},
}
},
......@@ -168,52 +168,34 @@ export default {
this.$inertia.delete(this.route('token.destroy', this.token.id))
}
},
campaignsUpdate() {
this.campaigns_form.post(this.route('token.campaigns.update', this.token.id), {
campaigns: this.state.token_campaigns.map(campaign => campaign.id),
})
campaignEnabled(campaign_id, enabled) {
this.$inertia.post(this.route('token.campaign.enabled', [
this.token.id,
campaign_id,
enabled ? 1 : 0,
]));
},
campaignDestroy(campaign_id) {
if (confirm('Are you sure you want to delete this campaign?')) {
let token_campaigns = this.state.token_campaigns.filter(
campaign => campaign.id !== Number(campaign_id)
);
this.state = {
...this.state,
campaigns: this.filterCampaigns(token_campaigns),
token_campaigns: token_campaigns,
}
this.$inertia.post(this.route('token.campaign.managed', [
this.token.id,
campaign_id,
0,
]));
}
},
campaignAdd() {
let campaign_id = this.state.campaign_id;
let campaign_id = this.campaign_add_form.campaign_id;
if (!campaign_id) {
return;
}
let campaign = this.state.campaigns.filter(
campaign => campaign.id === Number(campaign_id)
).shift();
if (campaign) {
let token_campaigns = [
...this.state.token_campaigns,
{
...campaign,
},
];
this.state = {
...this.state,
campaign_id: null,
campaigns: this.filterCampaigns(token_campaigns),
token_campaigns: token_campaigns,
}
}
this.campaign_add_form.post(this.route('token.campaign.managed', [
this.token.id,
campaign_id,
1,
]));
},
filterCampaigns(token_campaigns) {
......
......@@ -169,8 +169,11 @@ Route::get('token/edit/{token}', [TokensController::class, 'edit'])
Route::post('token/edit/{token}', [TokensController::class, 'update'])
->name('token.update')
->middleware('auth');
Route::post('token/campaigns/edit/{token}', [TokensController::class, 'updateCampaigns'])
->name('token.campaigns.update')
Route::post('token/campaigns/managed/{token}/{campaign_id}/{managed}', [TokensController::class, 'managedCampaign'])
->name('token.campaign.managed')
->middleware('auth');
Route::post('token/campaigns/enabled/{token}/{campaign_id}/{enabled}', [TokensController::class, 'enabledCampaign'])
->name('token.campaign.enabled')
->middleware('auth');
Route::post('token/city/add/{token}', [TokensController::class, 'addCity'])
->name('token.city.add')
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!