PluginProbe
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration / 1.13
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration v1.13
2.1.0 2.0.15 2.0.12 2.0.10 2.0.4 2.0.1 2.0.0 1.95.3 1.95.2 1.95 1.91.6 trunk 1.11 1.12 1.13 1.20 1.21 1.22 1.23 1.30 1.31 1.32 1.35 1.40 1.41 All 42 releases
fluent-boards / vendor / wpfluent / framework / src / WPFluent / Database / Orm / SoftDeletingScope.php

SoftDeletingScope.php in FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration 1.13, at vendor/wpfluent/framework/src/WPFluent/Database/Orm/SoftDeletingScope.php

132 lines 3.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentBoards\Framework\Database\Orm;
4
5 class SoftDeletingScope implements Scope
6 {
7 /**
8 * All of the extensions to be added to the builder.
9 *
10 * @var string[]
11 */
12 protected $extensions = ['Restore', 'WithTrashed', 'WithoutTrashed', 'OnlyTrashed'];
13
14 /**
15 * Apply the scope to a given Orm query builder.
16 *
17 * @param \FluentBoards\Framework\Database\Orm\Builder $builder
18 * @param \FluentBoards\Framework\Database\Orm\Model $model
19 * @return void
20 */
21 public function apply(Builder $builder, Model $model)
22 {
23 $builder->whereNull($model->getQualifiedDeletedAtColumn());
24 }
25
26 /**
27 * Extend the query builder with the needed functions.
28 *
29 * @param \FluentBoards\Framework\Database\Orm\Builder $builder
30 * @return void
31 */
32 public function extend(Builder $builder)
33 {
34 foreach ($this->extensions as $extension) {
35 $this->{"add{$extension}"}($builder);
36 }
37
38 $builder->onDelete(function (Builder $builder) {
39 $column = $this->getDeletedAtColumn($builder);
40
41 return $builder->update([
42 $column => $builder->getModel()->freshTimestampString(),
43 ]);
44 });
45 }
46
47 /**
48 * Get the "deleted at" column for the builder.
49 *
50 * @param \FluentBoards\Framework\Database\Orm\Builder $builder
51 * @return string
52 */
53 protected function getDeletedAtColumn(Builder $builder)
54 {
55 if (count((array) $builder->getQuery()->joins) > 0) {
56 return $builder->getModel()->getQualifiedDeletedAtColumn();
57 }
58
59 return $builder->getModel()->getDeletedAtColumn();
60 }
61
62 /**
63 * Add the restore extension to the builder.
64 *
65 * @param \FluentBoards\Framework\Database\Orm\Builder $builder
66 * @return void
67 */
68 protected function addRestore(Builder $builder)
69 {
70 $builder->macro('restore', function (Builder $builder) {
71 $builder->withTrashed();
72
73 return $builder->update([$builder->getModel()->getDeletedAtColumn() => null]);
74 });
75 }
76
77 /**
78 * Add the with-trashed extension to the builder.
79 *
80 * @param \FluentBoards\Framework\Database\Orm\Builder $builder
81 * @return void
82 */
83 protected function addWithTrashed(Builder $builder)
84 {
85 $builder->macro('withTrashed', function (Builder $builder, $withTrashed = true) {
86 if (! $withTrashed) {
87 return $builder->withoutTrashed();
88 }
89
90 return $builder->withoutGlobalScope($this);
91 });
92 }
93
94 /**
95 * Add the without-trashed extension to the builder.
96 *
97 * @param \FluentBoards\Framework\Database\Orm\Builder $builder
98 * @return void
99 */
100 protected function addWithoutTrashed(Builder $builder)
101 {
102 $builder->macro('withoutTrashed', function (Builder $builder) {
103 $model = $builder->getModel();
104
105 $builder->withoutGlobalScope($this)->whereNull(
106 $model->getQualifiedDeletedAtColumn()
107 );
108
109 return $builder;
110 });
111 }
112
113 /**
114 * Add the only-trashed extension to the builder.
115 *
116 * @param \FluentBoards\Framework\Database\Orm\Builder $builder
117 * @return void
118 */
119 protected function addOnlyTrashed(Builder $builder)
120 {
121 $builder->macro('onlyTrashed', function (Builder $builder) {
122 $model = $builder->getModel();
123
124 $builder->withoutGlobalScope($this)->whereNotNull(
125 $model->getQualifiedDeletedAtColumn()
126 );
127
128 return $builder;
129 });
130 }
131 }
132