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