# give/4.18.0/src/Campaigns/Actions/ArchiveCampaignFormsAsDraftStatus.php

GiveWP – Donation Plugin and Fundraising Platform, version 4.18.0. 49 lines.

- Page: https://pluginprobe.com/plugins/give/4.18.0/code/src/Campaigns/Actions/ArchiveCampaignFormsAsDraftStatus.php
- Raw: https://pluginprobe.com/plugins/give/4.18.0/raw/src/Campaigns/Actions/ArchiveCampaignFormsAsDraftStatus.php
- Modified: 2025-03-31T19:17:16+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/give/4.18.0/code/src/Campaigns/Actions/ArchiveCampaignFormsAsDraftStatus.php#L10-L20`.

```php
<?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']
                );
        }
    }
}

```
