Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion src/Assets/Asset.php
Original file line number Diff line number Diff line change
Expand Up @@ -1116,7 +1116,7 @@ public function hasDuration()

public function getQueryableValue(string $field)
{
if (method_exists($this, $method = Str::camel($field))) {
if (in_array($method = Str::camel($field), $this->queryableMethods())) {
return $this->{$method}();
}

Expand All @@ -1129,6 +1129,17 @@ public function getQueryableValue(string $field)
return $field->fieldtype()->toQueryableValue($value);
}

private function queryableMethods(): array
{
return [
'absoluteUrl', 'apiUrl', 'basename', 'blueprint', 'containerId', 'containerHandle', 'dimensions',
'duration', 'editUrl', 'exists', 'extension', 'filename', 'folder', 'guessedExtension',
'hasDimensions', 'hasDuration', 'height', 'id', 'isAudio', 'isImage', 'isMedia', 'isPdf',
'isPreviewable', 'isSvg', 'isVideo', 'lastModified', 'mimeType', 'orientation', 'path', 'pdfUrl',
'ratio', 'reference', 'size', 'thumbnailUrl', 'title', 'url', 'width',
];
}

public function getCurrentDirtyStateAttributes(): array
{
return array_merge([
Expand Down
22 changes: 21 additions & 1 deletion src/Assets/AssetContainer.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Statamic\Contracts\Assets\AssetContainer as AssetContainerContract;
use Statamic\Contracts\Data\Augmentable;
use Statamic\Contracts\Data\Augmented;
use Statamic\Contracts\Query\ContainsQueryableValues;
use Statamic\Data\ExistsAsFile;
use Statamic\Data\HasAugmentedInstance;
use Statamic\Events\AssetContainerBlueprintFound;
Expand All @@ -27,9 +28,10 @@
use Statamic\Facades\Stache;
use Statamic\Facades\URL;
use Statamic\Support\Arr;
use Statamic\Support\Str;
use Statamic\Support\Traits\FluentlyGetsAndSets;

class AssetContainer implements Arrayable, ArrayAccess, AssetContainerContract, Augmentable
class AssetContainer implements Arrayable, ArrayAccess, AssetContainerContract, Augmentable, ContainsQueryableValues
{
use ExistsAsFile, FluentlyGetsAndSets, HasAugmentedInstance;

Expand Down Expand Up @@ -693,6 +695,24 @@ public static function __callStatic($method, $parameters)
return Facades\AssetContainer::{$method}(...$parameters);
}

public function getQueryableValue(string $field)
{
if (in_array($method = Str::camel($field), $this->queryableMethods())) {
return $this->{$method}();
}

return null;
}

private function queryableMethods(): array
{
return [
'absoluteUrl', 'accessible', 'allowDownloading', 'allowMoving', 'allowRenaming', 'allowUploads',
'blueprint', 'createFolders', 'diskHandle', 'diskPath', 'editUrl', 'handle', 'hasSearchIndex',
'id', 'path', 'private', 'searchIndex', 'showUrl', 'sortDirection', 'sortField', 'title', 'url',
];
}

public function __toString()
{
return $this->handle();
Expand Down
19 changes: 18 additions & 1 deletion src/Assets/AssetFolder.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
use League\Flysystem\PathTraversalDetected;
use Statamic\Assets\AssetUploader as Uploader;
use Statamic\Contracts\Assets\AssetFolder as Contract;
use Statamic\Contracts\Query\ContainsQueryableValues;
use Statamic\Events\AssetFolderDeleted;
use Statamic\Events\AssetFolderSaved;
use Statamic\Facades\AssetContainer;
use Statamic\Facades\Path;
use Statamic\Support\Str;
use Statamic\Support\Traits\FluentlyGetsAndSets;

class AssetFolder implements Arrayable, Contract
class AssetFolder implements Arrayable, ContainsQueryableValues, Contract
{
use FluentlyGetsAndSets;

Expand Down Expand Up @@ -237,4 +238,20 @@ public function toArray()
'basename' => (string) $this->basename(),
];
}

public function getQueryableValue(string $field)
{
if (in_array($method = Str::camel($field), $this->queryableMethods())) {
return $this->{$method}();
}

return null;
}

private function queryableMethods(): array
{
return [
'basename', 'count', 'lastModified', 'path', 'resolvedPath', 'size', 'title',
];
}
}
11 changes: 10 additions & 1 deletion src/Auth/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ protected function getComputedCallbacks()

public function getQueryableValue(string $field)
{
if (method_exists($this, $method = Str::camel($field))) {
if (in_array($method = Str::camel($field), $this->queryableMethods())) {
return $this->{$method}();
}

Expand All @@ -377,4 +377,13 @@ public function getQueryableValue(string $field)

return $field->fieldtype()->toQueryableValue($value);
}

private function queryableMethods(): array
{
return [
'apiUrl', 'avatar', 'blueprint', 'editUrl', 'email', 'gravatarUrl', 'groups', 'hasAvatarField',
'id', 'initials', 'isSuper', 'isTaxonomizable', 'lastLogin', 'name', 'path', 'preferredLocale',
'preferredTheme', 'reference', 'roles', 'title',
];
}
}
21 changes: 20 additions & 1 deletion src/Entries/Collection.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use InvalidArgumentException;
use Statamic\Contracts\Data\Augmentable as AugmentableContract;
use Statamic\Contracts\Entries\Collection as Contract;
use Statamic\Contracts\Query\ContainsQueryableValues;
use Statamic\Data\ContainsCascadingData;
use Statamic\Data\ExistsAsFile;
use Statamic\Data\HasAugmentedData;
Expand Down Expand Up @@ -35,7 +36,7 @@

use function Statamic\trans as __;

class Collection implements Arrayable, ArrayAccess, AugmentableContract, Contract
class Collection implements Arrayable, ArrayAccess, AugmentableContract, ContainsQueryableValues, Contract
{
use ContainsCascadingData, ExistsAsFile, FluentlyGetsAndSets, HasAugmentedData, HasDirtyState;

Expand Down Expand Up @@ -948,6 +949,24 @@ public function augmentedArrayData()
];
}

public function getQueryableValue(string $field)
{
if (in_array($method = Str::camel($field), $this->queryableMethods())) {
return $this->{$method}();
}

return null;
}

private function queryableMethods(): array
{
return [
'dated', 'defaultPublishState', 'editUrl', 'handle', 'hasStructure', 'id', 'layout', 'mount',
'orderable', 'path', 'requiresSlugs', 'revisionsEnabled', 'sites', 'sortDirection', 'sortField',
'structureHandle', 'taxonomies', 'template', 'title', 'url', 'uri',
];
}

public function getCurrentDirtyStateAttributes(): array
{
return $this->fileData();
Expand Down
12 changes: 11 additions & 1 deletion src/Entries/Entry.php
Original file line number Diff line number Diff line change
Expand Up @@ -1098,7 +1098,7 @@ public function getQueryableValue(string $field)
Blink::store('entry-uris')->forget($this->id());
}

if (method_exists($this, $method = Str::camel($field))) {
if (in_array($method = Str::camel($field), $this->queryableMethods())) {
return $this->{$method}();
}

Expand All @@ -1111,6 +1111,16 @@ public function getQueryableValue(string $field)
return $field->fieldtype()->toQueryableValue($value);
}

private function queryableMethods(): array
{
return [
'apiUrl', 'blueprint', 'collection', 'collectionHandle', 'date', 'editUrl', 'hasDate', 'hasExplicitDate', 'hasOrigin',
'hasSeconds', 'hasStructure', 'hasTime', 'id', 'isRedirect', 'isRoot', 'lastModified', 'lastModifiedBy',
'layout', 'locale', 'order', 'path', 'private', 'published', 'redirectUrl', 'reference', 'site', 'sites', 'slug',
'status', 'template', 'uri', 'url', 'urlWithoutRedirect',
];
}

public function getSearchValue(string $field)
{
return method_exists($this, $field) ? $this->$field() : $this->value($field);
Expand Down
20 changes: 19 additions & 1 deletion src/Fields/Blueprint.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Support\Collection;
use Statamic\Contracts\Data\Augmentable;
use Statamic\Contracts\Query\ContainsQueryableValues;
use Statamic\Contracts\Query\QueryableValue;
use Statamic\CP\Column;
use Statamic\CP\Columns;
Expand All @@ -30,7 +31,7 @@

use function Statamic\trans as __;

class Blueprint implements Arrayable, ArrayAccess, Augmentable, QueryableValue
class Blueprint implements Arrayable, ArrayAccess, Augmentable, ContainsQueryableValues, QueryableValue
{
use ExistsAsFile, HasAugmentedData;

Expand Down Expand Up @@ -792,4 +793,21 @@ public function writeFile($path = null)
{
File::put($path ?? $this->buildPath(), $this->fileContents());
}

public function getQueryableValue(string $field)
{
if (in_array($method = Str::camel($field), $this->queryableMethods())) {
return $this->{$method}();
}

return null;
}

private function queryableMethods(): array
{
return [
'columns', 'fields', 'handle', 'hidden', 'isEmpty', 'isDeletable', 'isResettable',
'namespace', 'order', 'path', 'tabs', 'title',
];
}
}
20 changes: 19 additions & 1 deletion src/Fields/Fieldset.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Statamic\Fields;

use Statamic\Contracts\Query\ContainsQueryableValues;
use Statamic\Events\FieldsetCreated;
use Statamic\Events\FieldsetCreating;
use Statamic\Events\FieldsetDeleted;
Expand All @@ -21,7 +22,7 @@
use Statamic\Support\Arr;
use Statamic\Support\Str;

class Fieldset
class Fieldset implements ContainsQueryableValues
{
protected $handle;
protected $contents = [];
Expand Down Expand Up @@ -296,6 +297,23 @@ public function reset()
return true;
}

public function getQueryableValue(string $field)
{
if (in_array($method = Str::camel($field), $this->queryableMethods())) {
return $this->{$method}();
}

return null;
}

private function queryableMethods(): array
{
return [
'editUrl', 'fields', 'handle', 'isDeletable', 'isResettable',
'namespace', 'path', 'title',
];
}

public static function __callStatic($method, $parameters)
{
return Facades\Fieldset::{$method}(...$parameters);
Expand Down
27 changes: 26 additions & 1 deletion src/Forms/Form.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use Statamic\Contracts\Forms\Form as FormContract;
use Statamic\Contracts\Forms\Submission;
use Statamic\Contracts\Forms\SubmissionQueryBuilder;
use Statamic\Contracts\Query\ContainsQueryableValues;
use Statamic\Data\ContainsData;
use Statamic\Data\HasAugmentedInstance;
use Statamic\Events\FormBlueprintFound;
Expand All @@ -26,9 +27,10 @@
use Statamic\Forms\Exporters\Exporter;
use Statamic\Statamic;
use Statamic\Support\Arr;
use Statamic\Support\Str;
use Statamic\Support\Traits\FluentlyGetsAndSets;

class Form implements Arrayable, Augmentable, FormContract
class Form implements Arrayable, Augmentable, ContainsQueryableValues, FormContract
{
use ContainsData, FluentlyGetsAndSets, HasAugmentedInstance;

Expand Down Expand Up @@ -444,4 +446,27 @@ public function exporter(string $handle): ?Exporter
{
return $this->exporters()->get($handle);
}

public function getQueryableValue(string $field)
{
if (in_array($method = Str::camel($field), $this->queryableMethods())) {
return $this->{$method}();
}

$value = $this->get($field);

if (! $field = $this->blueprint()->field($field)) {
return $value;
}

return $field->fieldtype()->toQueryableValue($value);
}

private function queryableMethods(): array
{
return [
'actionUrl', 'apiUrl', 'blueprint', 'dateFormat', 'editUrl', 'fields',
'handle', 'honeypot', 'path', 'submissions', 'title',
];
}
}
26 changes: 25 additions & 1 deletion src/Forms/Submission.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Carbon\Carbon;
use Statamic\Contracts\Data\Augmentable;
use Statamic\Contracts\Forms\Submission as SubmissionContract;
use Statamic\Contracts\Query\ContainsQueryableValues;
use Statamic\Data\ContainsData;
use Statamic\Data\ExistsAsFile;
use Statamic\Data\HasAugmentedData;
Expand All @@ -21,9 +22,10 @@
use Statamic\Facades\Stache;
use Statamic\Forms\Uploaders\AssetsUploader;
use Statamic\Forms\Uploaders\FilesUploader;
use Statamic\Support\Str;
use Statamic\Support\Traits\FluentlyGetsAndSets;

class Submission implements Augmentable, SubmissionContract
class Submission implements Augmentable, ContainsQueryableValues, SubmissionContract
{
use ContainsData, ExistsAsFile, FluentlyGetsAndSets, HasAugmentedData, TracksQueriedColumns, TracksQueriedRelations;

Expand Down Expand Up @@ -274,6 +276,28 @@ public function fileData()
return $this->data()->all();
}

public function getQueryableValue(string $field)
{
if (in_array($method = Str::camel($field), $this->queryableMethods())) {
return $this->{$method}();
}

$value = $this->get($field);

if (! $field = $this->blueprint()->field($field)) {
return $value;
}

return $field->fieldtype()->toQueryableValue($value);
}

private function queryableMethods(): array
{
return [
'blueprint', 'date', 'form', 'formattedDate', 'id', 'path',
];
}

public function __get($key)
{
return $this->get($key);
Expand Down
Loading
Loading