PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Campaigns / Models / Campaign.php
give / src / Campaigns / Models Last commit date
Campaign.php 7 months ago CampaignPage.php 1 year ago
Campaign.php
221 lines
1 <?php
2
3 namespace Give\Campaigns\Models;
4
5 use DateTime;
6 use Exception;
7 use Give\Campaigns\Actions\ConvertQueryDataToCampaign;
8 use Give\Campaigns\DataTransferObjects\CampaignGoalData;
9 use Give\Campaigns\Factories\CampaignFactory;
10 use Give\Campaigns\Repositories\CampaignPageRepository;
11 use Give\Campaigns\Repositories\CampaignRepository;
12 use Give\Campaigns\ValueObjects\CampaignGoalType;
13 use Give\Campaigns\ValueObjects\CampaignPageStatus;
14 use Give\Campaigns\ValueObjects\CampaignStatus;
15 use Give\Campaigns\ValueObjects\CampaignType;
16 use Give\DonationForms\V2\Models\DonationForm;
17 use Give\DonationForms\V2\Repositories\DonationFormsRepository;
18 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
19 use Give\Framework\Models\Contracts\ModelCrud;
20 use Give\Framework\Models\Contracts\ModelHasFactory;
21 use Give\Framework\Models\Model;
22 use Give\Framework\Models\ModelQueryBuilder;
23 use Give\Framework\QueryBuilder\JoinQueryBuilder;
24
25 /**
26 * @since 4.0.0
27 *
28 * @property int $id
29 * @property int $pageId
30 * @property int $defaultFormId
31 * @property CampaignType $type
32 * @property string $title
33 * @property string $url
34 * @property string $shortDescription
35 * @property string $longDescription
36 * @property string $logo
37 * @property string $image
38 * @property string $primaryColor
39 * @property string $secondaryColor
40 * @property int $goal
41 * @property CampaignGoalType $goalType
42 * @property CampaignStatus $status
43 * @property DateTime $startDate
44 * @property DateTime $endDate
45 * @property DateTime $createdAt
46 */
47 class Campaign extends Model implements ModelCrud, ModelHasFactory
48 {
49 /**
50 * @inheritdoc
51 */
52 protected $properties = [
53 'id' => 'int',
54 'pageId' => 'int',
55 'defaultFormId' => 'int',
56 'type' => CampaignType::class,
57 'title' => 'string',
58 'shortDescription' => 'string',
59 'longDescription' => 'string',
60 'logo' => 'string',
61 'image' => 'string',
62 'primaryColor' => 'string',
63 'secondaryColor' => 'string',
64 'goal' => 'int',
65 'goalType' => CampaignGoalType::class,
66 'status' => CampaignStatus::class,
67 'startDate' => DateTime::class,
68 'endDate' => DateTime::class,
69 'createdAt' => DateTime::class,
70 ];
71
72 /**
73 * @since 4.0.0
74 */
75 public function defaultForm(): ?DonationForm
76 {
77 return give(DonationFormsRepository::class)->getById($this->defaultFormId);
78 }
79
80 /**
81 * @since 4.0.0
82 */
83 public function forms(): ModelQueryBuilder
84 {
85 return DonationForm::query()
86 ->join(function (JoinQueryBuilder $builder) {
87 $builder
88 ->leftJoin('give_campaign_forms', 'campaign_forms')
89 ->on('campaign_forms.form_id', 'id');
90 })
91 ->where('campaign_forms.campaign_id', $this->id);
92 }
93
94 /**
95 * @since 4.0.0
96 */
97 public function page(): ?CampaignPage
98 {
99 return give(CampaignPageRepository::class)->findByCampaignId($this->id);
100 }
101
102 /**
103 * @since 4.0.0
104 */
105 public static function factory(): CampaignFactory
106 {
107 return new CampaignFactory(static::class);
108 }
109
110 /**
111 * Find campaign by ID
112 *
113 * @since 4.0.0
114 */
115 public static function find($id): ?Campaign
116 {
117 return give(CampaignRepository::class)->getById($id);
118 }
119
120 /**
121 * Find campaign by Form ID
122 *
123 * @since 4.0.0
124 */
125 public static function findByFormId(int $formId): ?Campaign
126 {
127 return give(CampaignRepository::class)->getByFormId($formId);
128 }
129
130 /**
131 * @since 4.0.0
132 *
133 * @throws Exception
134 */
135 public static function create(array $attributes): Campaign
136 {
137 $campaign = new static($attributes);
138
139 give(CampaignRepository::class)->insert($campaign);
140
141 return $campaign;
142 }
143
144 /**
145 * @since 4.0.0
146 *
147 * @throws Exception|InvalidArgumentException
148 */
149 public function save(): void
150 {
151 if ( ! $this->id) {
152 give(CampaignRepository::class)->insert($this);
153 } else {
154 give(CampaignRepository::class)->update($this);
155 }
156 }
157
158 /**
159 * @since 4.0.0
160 *
161 * @throws Exception
162 */
163 public function delete(): bool
164 {
165 return give(CampaignRepository::class)->delete($this);
166 }
167
168 /**
169 * @since 4.0.0
170 *
171 * @throws Exception
172 */
173 public function merge(Campaign ...$campaignsToMerge): bool
174 {
175 return give(CampaignRepository::class)->mergeCampaigns($this, ...$campaignsToMerge);
176 }
177
178 /**
179 * @since 4.13.1
180 */
181 public function createPage(?array $attributes = []): ?CampaignPage
182 {
183 $page = CampaignPage::create(array_merge([
184 'campaignId' => $this->id,
185 'status' => CampaignPageStatus::DRAFT(),
186 ], $attributes));
187
188 $this->pageId = $page->id;
189
190 return $page;
191 }
192
193 /**
194 * @since 4.0.0
195 */
196 public function getGoalStats(): array
197 {
198 return (new CampaignGoalData($this))->toArray();
199 }
200
201 /**
202 * @since 4.0.0
203 *
204 * @return ModelQueryBuilder<Campaign>
205 */
206 public static function query(): ModelQueryBuilder
207 {
208 return give(CampaignRepository::class)->prepareQuery();
209 }
210
211 /**
212 * @since 4.0.0
213 *
214 * @param object $object
215 */
216 public static function fromQueryBuilderObject($object): Campaign
217 {
218 return (new ConvertQueryDataToCampaign())($object);
219 }
220 }
221