<?php
namespace Give\Campaigns\Actions;
use Give\Campaigns\Models\Campaign;
use Give\Framework\Database\DB;
use Give\Framework\QueryBuilder\JoinQueryBuilder;
/**
* When a Campaign is archived, set all Forms to Draft Status
*
* @since 4.0.0
*/
class ArchiveCampaignFormsAsDraftStatus
{
/**
* TODO: update this to use single update query (QB was not working with whereIn and update)
* @since 4.0.0
*/
public function __invoke(Campaign $campaign)
{
if (!$campaign->status->isArchived()) {
return;
}
$query = DB::table('posts')
->where('post_type', 'give_forms')
->where('post_status', 'publish')
->join(function (JoinQueryBuilder $builder) {
$builder
->leftJoin("give_campaign_forms", "campaign_forms")
->on("campaign_forms.form_id", "id");
})
->where("campaign_forms.campaign_id", $campaign->id)
->getAll();
$ids = array_values(array_column($query, 'ID'));
foreach ($ids as $id) {
DB::table('posts')
->where('ID', $id)
->update(
['post_status' => 'draft']
);
}
}
}