文件操作 - DonorNotesRepository.php
返回文件管理
返回主菜单
删除本文件
文件: /home/www/public/wp-content/plugins/give/src/Donors/Repositories/DonorNotesRepository.php
编辑文件内容
<?php namespace Give\Donors\Repositories; use Exception; use Give\Donors\Models\DonorNote; use Give\Donors\ValueObjects\DonorNoteMetaKeys; use Give\Donors\ValueObjects\DonorNoteType; use Give\Framework\Database\DB; use Give\Framework\Exceptions\Primitives\InvalidArgumentException; use Give\Framework\Models\ModelQueryBuilder; use Give\Framework\Support\Facades\DateTime\Temporal; use Give\Helpers\Hooks; use Give\Log\Log; /** * @since 4.4.0 */ class DonorNotesRepository { /** * @since 4.4.0 * * @var string[] */ private $requiredDonorProperties = [ 'donorId', 'content', ]; /** * @since 4.4.0 */ public function getById(int $noteId): ?DonorNote { return $this->prepareQuery() ->where('comment_ID', $noteId) ->get(); } /** * @since 4.4.0 * * @throws Exception */ public function insert(DonorNote $donorNote) { if ( ! $donorNote->type) { $donorNote->type = DonorNoteType::ADMIN(); } $this->validateDonorNote($donorNote); Hooks::doAction('givewp_donor_note_creating', $donorNote); $dateCreated = Temporal::withoutMicroseconds($donorNote->createdAt ?: Temporal::getCurrentDateTime()); $dateCreatedFormatted = Temporal::getFormattedDateTime($dateCreated); DB::beginTransaction(); try { DB::table('give_comments') ->insert([ 'comment_content' => $donorNote->content, 'comment_date' => $dateCreatedFormatted, 'comment_date_gmt' => get_gmt_from_date($dateCreatedFormatted), 'comment_parent' => $donorNote->donorId, 'comment_type' => 'donor', ]); $commentId = DB::last_insert_id(); if ($donorNote->type->isDonor()) { DB::table('give_commentmeta') ->insert([ 'give_comment_id' => $commentId, 'meta_key' => DonorNoteMetaKeys::TYPE, 'meta_value' => DonorNoteType::DONOR, ]); } } catch (Exception $exception) { DB::rollback(); Log::error('Failed creating a donor note', compact('donorNote')); throw new $exception('Failed creating a donor note'); } DB::commit(); $donorNote->id = $commentId; $donorNote->createdAt = $dateCreated; Hooks::doAction('givewp_donor_note_created', $donorNote); } /** * @since 4.4.0 * * @throws Exception */ public function update(DonorNote $donorNote) { $this->validateDonorNote($donorNote); Hooks::doAction('givewp_donor_note_updating', $donorNote); DB::beginTransaction(); try { DB::table('give_comments') ->where('comment_ID', $donorNote->id) ->update([ 'comment_content' => $donorNote->content, 'comment_parent' => $donorNote->donorId, 'comment_type' => 'donor', ]); if ($donorNote->isDirty('type') && $donorNote->type->isDonor()) { $this->upsertDonorNoteType($donorNote); } } catch (Exception $exception) { DB::rollback(); Log::error('Failed updating a donor note', compact('donorNote')); throw new $exception('Failed updating a donor note'); } DB::commit(); Hooks::doAction('givewp_donor_note_updated', $donorNote); } /** * @since 4.4.0 * * @throws Exception */ public function delete(DonorNote $donorNote): bool { DB::beginTransaction(); Hooks::doAction('givewp_donor_note_deleting', $donorNote); try { DB::table('give_comments') ->where('comment_ID', $donorNote->id) ->delete(); DB::table('give_commentmeta') ->where('give_comment_id', $donorNote->id) ->delete(); } catch (Exception $exception) { DB::rollback(); Log::error('Failed deleting a donor note', compact('donorNote')); throw new $exception('Failed deleting a donor note'); } DB::commit(); Hooks::doAction('givewp_donor_note_deleted', $donorNote); return true; } /** * @since 4.4.0 */ public function queryByDonorId(int $donorId): ModelQueryBuilder { return $this->prepareQuery() ->where('comment_parent', $donorId) ->orderBy('comment_ID', 'DESC'); } /** * @since 4.4.0 * * @return void */ private function validateDonorNote(DonorNote $donorNote) { foreach ($this->requiredDonorProperties as $key) { if ( ! isset($donorNote->$key)) { throw new InvalidArgumentException("'$key' is required."); } } if ( ! $donorNote->donor) { throw new InvalidArgumentException('Invalid donorId, Donor does not exist'); } } /** * @since 4.4.0 * * @return ModelQueryBuilder<DonorNote> */ public function prepareQuery(): ModelQueryBuilder { $builder = new ModelQueryBuilder(DonorNote::class); return $builder->from('give_comments') ->select( ['comment_ID', 'id'], ['comment_parent', 'donorId'], ['comment_content', 'content'], ['comment_date', 'createdAt'] ) ->attachMeta( 'give_commentmeta', 'comment_ID', 'give_comment_id', ...DonorNoteMetaKeys::getColumnsForAttachMetaQuery() ) ->where('comment_type', 'donor'); } /** * @since 4.4.0 */ private function upsertDonorNoteType(DonorNote $donorNote) { $table = DB::table('give_commentmeta'); $query = $table ->where('give_comment_id', $donorNote->id) ->where('meta_key', DonorNoteMetaKeys::TYPE) ->get(); if ( ! $query) { $table->insert([ 'give_comment_id' => $donorNote->id, 'meta_key' => DonorNoteMetaKeys::TYPE, 'meta_value' => $donorNote->type->getValue(), ]); } else { $table ->where('give_comment_id', $donorNote->id) ->where('meta_key', DonorNoteMetaKeys::TYPE) ->update([ 'meta_value' => $donorNote->type->getValue(), ]); } } }
修改文件时间
将文件时间修改为当前时间的前一年
删除文件