文件操作 - ListDonationForms.php
返回文件管理
返回主菜单
删除本文件
文件: /home/www/public/wp-content/plugins/give/src/DonationForms/V2/Endpoints/ListDonationForms.php
编辑文件内容
<?php namespace Give\DonationForms\V2\Endpoints; use Give\Campaigns\Models\Campaign; use Give\Campaigns\ValueObjects\CampaignType; use Give\DonationForms\Repositories\DonationFormDataRepository; use Give\DonationForms\V2\ListTable\DonationFormsListTable; use Give\DonationForms\V2\Models\DonationForm; use Give\Framework\Database\DB; use Give\Framework\QueryBuilder\JoinQueryBuilder; use Give\Framework\QueryBuilder\QueryBuilder; use Give\Helpers\Language; use WP_REST_Request; use WP_REST_Response; /** * @since 2.19.0 */ class ListDonationForms extends Endpoint { /** * @var string */ protected $endpoint = 'admin/forms'; /** * @var WP_REST_Request */ private $request; /** * @var DonationFormsListTable */ protected $listTable; /** * @var int */ protected $defaultForm; /** * @since 4.0.0 Add campaignId parameter * @inheritDoc */ public function registerRoute() { register_rest_route( 'give-api/v2', $this->endpoint, [ [ 'methods' => 'GET', 'callback' => [$this, 'handleRequest'], 'permission_callback' => [$this, 'permissionsCheck'], ], 'args' => [ 'page' => [ 'type' => 'integer', 'required' => false, 'default' => 1, 'minimum' => 1, ], 'perPage' => [ 'type' => 'integer', 'required' => false, 'default' => 30, 'minimum' => 1, ], 'status' => [ 'type' => 'string', 'required' => false, 'default' => 'any', 'enum' => [ 'publish', 'future', 'draft', 'pending', 'trash', 'auto-draft', 'inherit', 'any', 'upgraded', ], ], 'search' => [ 'type' => 'string', 'required' => false, ], 'sortColumn' => [ 'type' => 'string', 'required' => false, 'sanitize_callback' => 'sanitize_text_field', ], 'sortDirection' => [ 'type' => 'string', 'required' => false, 'enum' => [ 'asc', 'desc', ], ], 'locale' => [ 'type' => 'string', 'required' => false, 'default' => get_locale(), ], 'return' => [ 'type' => 'string', 'required' => false, 'default' => 'columns', 'enum' => [ 'model', 'columns', ], ], 'campaignId' => [ 'type' => 'integer', 'required' => false, ], ], ] ); } /** * @since 3.22.0 Add locale support * @since 2.24.0 Change this to use the new ListTable class * * @param WP_REST_Request $request * * @return WP_REST_Response */ public function handleRequest(WP_REST_Request $request): WP_REST_Response { $this->request = $request; $this->listTable = give(DonationFormsListTable::class); $campaignId = (int)($this->request->get_param('campaignId')); $campaign = $campaignId ? Campaign::find($campaignId) : null; $defaultCampaignForm = $campaign ? $campaign->defaultForm() : null; $this->defaultForm = $defaultCampaignForm->id ?? 0; $forms = $this->getForms(); $totalForms = $this->getTotalFormsCount(); $totalPages = (int)ceil($totalForms / $this->request->get_param('perPage')); $formsData = DonationFormDataRepository::forms($forms); $this->listTable->setData($formsData); // get p2p forms $p2pForms = DB::table('give_campaigns') ->select('form_id') ->where('campaign_type', CampaignType::CORE, '!=') ->getAll(ARRAY_A); if ('model' === $this->request->get_param('return')) { $items = array_map(function ($form) { return $form->toArray(); }, $forms); } else { $this->listTable->items($forms, $this->request->get_param('locale') ?? ''); $items = $this->listTable->getItems(); foreach ($items as $i => &$item) { $queryArgs = [ 'locale' => Language::getLocale(), ]; foreach ($p2pForms as $form) { if ($item['id'] == $form['form_id']) { $queryArgs['p2p'] = true; break; } } $item['name'] = $forms[$i]->title; $item['edit'] = add_query_arg($queryArgs, get_edit_post_link($item['id'], 'edit')); $item['permalink'] = get_permalink($item['id']); $item['v3form'] = $forms[$i]->usesFormBuilder; $item['status_raw'] = $forms[$i]->status->getValue(); $item['isDefaultCampaignForm'] = $defaultCampaignForm && $item['id'] === $defaultCampaignForm->id; } } return new WP_REST_Response( [ 'items' => $items, 'totalItems' => $totalForms, 'totalPages' => $totalPages, 'trash' => defined('EMPTY_TRASH_DAYS') && EMPTY_TRASH_DAYS > 0, 'defaultForm' => $this->defaultForm, ] ); } /** * @since 3.2.0 added distinct() to the query * @since 2.24.0 Refactor to query through the ModelQueryBuilder * * @return array */ public function getForms(): array { $page = $this->request->get_param('page'); $perPage = $this->request->get_param('perPage'); $sortColumns = $this->listTable->getSortColumnById($this->request->get_param('sortColumn') ?: 'id'); $query = give()->donationForms->prepareQuery(); $query = $this->getWhereConditions($query); $query->orderByRaw('FIELD(ID, %d) DESC', $this->defaultForm); $sortDirection = $this->request->get_param('sortDirection') ?: 'desc'; foreach ($sortColumns as $sortColumn) { $query->orderBy($sortColumn, $sortDirection); } $query->limit($perPage) ->offset(($page - 1) * $perPage); $donationForms = $query->distinct()->getAll(); if ( ! $donationForms) { return []; } return $donationForms; } /** * @since 2.24.0 Refactor to query through the ModelQueryBuilder * * @return int */ public function getTotalFormsCount(): int { $query = DB::table('posts') ->where('post_type', 'give_forms'); $query = $this->getWhereConditions($query); return $query->count(); } /** * @since 4.0.0 Add "campaignId" support * @since 2.24.0 * * @param QueryBuilder $query * * @return QueryBuilder */ private function getWhereConditions(QueryBuilder $query): QueryBuilder { $search = $this->request->get_param('search'); $status = $this->request->get_param('status'); // Status if ($status === 'any') { $query->whereIn('post_status', ['publish', 'draft', 'pending', 'private', 'upgraded']); } else { $query->where('post_status', $status); } // Search if ($search) { if (ctype_digit($search)) { $query->where('ID', $search); } else { $searchTerms = array_map('trim', explode(' ', $search)); foreach ($searchTerms as $term) { if ($term) { $query->whereLike('post_title', $term); } } } } if ($campaignId = $this->request->get_param('campaignId')) { $query ->join(function (JoinQueryBuilder $builder) { $builder ->leftJoin('give_campaign_forms', 'campaign_forms') ->on('campaign_forms.form_id', 'ID'); }) ->where('campaign_forms.campaign_id', $campaignId); } return $query; } }
修改文件时间
将文件时间修改为当前时间的前一年
删除文件