Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php namespace Filament\Support\Concerns; use Closure; use Exception; use Illuminate\Da..
Decoded Output download
<?php
namespace Filament\Support\Concerns;
use Closure;
use Exception;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
use Illuminate\Support\Stringable;
use Znck\Eloquent\Relations\BelongsToThrough;
trait HasCellState
{
protected mixed $defaultState = null;
protected mixed $getStateUsing = null;
protected string | Closure | null $separator = null;
protected bool | Closure $isDistinctList = false;
protected ?string $inverseRelationshipName = null;
public function inverseRelationship(?string $name): static
{
$this->inverseRelationshipName = $name;
return $this;
}
public function distinctList(bool | Closure $condition = true): static
{
$this->isDistinctList = $condition;
return $this;
}
public function getStateUsing(mixed $callback): static
{
$this->getStateUsing = $callback;
return $this;
}
public function state(mixed $state): static
{
$this->getStateUsing($state);
return $this;
}
public function default(mixed $state): static
{
$this->defaultState = $state;
return $this;
}
public function isDistinctList(): bool
{
return (bool) $this->evaluate($this->isDistinctList);
}
public function getDefaultState(): mixed
{
return $this->evaluate($this->defaultState);
}
public function getState(): mixed
{
if (! $this->getRecord()) {
return null;
}
$state = ($this->getStateUsing !== null) ?
$this->evaluate($this->getStateUsing) :
$this->getStateFromRecord();
if (is_string($state) && ($separator = $this->getSeparator())) {
$state = explode($separator, $state);
$state = (count($state) === 1 && blank($state[0])) ?
[] :
$state;
}
if (blank($state)) {
$state = $this->getDefaultState();
}
return $state;
}
public function getStateFromRecord(): mixed
{
$record = $this->getRecord();
$state = Arr::get($record, $this->getName());
if ($state !== null) {
return $state;
}
if (! $this->hasRelationship($record)) {
return null;
}
$relationship = $this->getRelationship($record);
if (! $relationship) {
return null;
}
$relationshipAttribute = $this->getRelationshipAttribute();
$state = collect($this->getRelationshipResults($record))
->filter(fn (Model $record): bool => array_key_exists($relationshipAttribute, $record->attributesToArray()))
->pluck($relationshipAttribute)
->filter(fn ($state): bool => filled($state))
->when($this->isDistinctList(), fn (Collection $state) => $state->unique())
->values();
if (! $state->count()) {
return null;
}
return $state->all();
}
public function separator(string | Closure | null $separator = ','): static
{
$this->separator = $separator;
return $this;
}
public function getSeparator(): ?string
{
return $this->evaluate($this->separator);
}
public function hasRelationship(Model $record): bool
{
return $this->getRelationship($record) !== null;
}
/**
* @deprecated Use `hasRelationship()` instead.
*/
public function queriesRelationships(Model $record): bool
{
return $this->hasRelationship($record);
}
public function getRelationship(Model $record, ?string $name = null): ?Relation
{
if (blank($name) && (! str($this->getName())->contains('.'))) {
return null;
}
$relationship = null;
foreach (explode('.', $name ?? $this->getRelationshipName()) as $nestedRelationshipName) {
if (! $record->isRelation($nestedRelationshipName)) {
$relationship = null;
break;
}
$relationship = $record->{$nestedRelationshipName}();
$record = $relationship->getRelated();
}
return $relationship;
}
/**
* @param array<string> | null $relationships
* @return array<Model>
*/
public function getRelationshipResults(Model $record, ?array $relationships = null): array
{
$results = [];
$relationships ??= explode('.', $this->getRelationshipName());
while (count($relationships)) {
$currentRelationshipName = array_shift($relationships);
$currentRelationshipValue = $record->getRelationValue($currentRelationshipName);
if ($currentRelationshipValue instanceof Collection) {
if (! count($relationships)) {
$results = [
...$results,
...$currentRelationshipValue->all(),
];
continue;
}
foreach ($currentRelationshipValue as $valueRecord) {
$results = [
...$results,
...$this->getRelationshipResults(
$valueRecord,
$relationships,
),
];
}
break;
}
if (! $currentRelationshipValue instanceof Model) {
break;
}
if (! count($relationships)) {
$results[] = $currentRelationshipValue;
break;
}
$record = $currentRelationshipValue;
}
return $results;
}
public function getRelationshipAttribute(?string $name = null): string
{
$name ??= $this->getName();
if (! str($name)->contains('.')) {
return $name;
}
return (string) str($name)->afterLast('.');
}
public function getInverseRelationshipName(Model $record): string
{
if (filled($this->inverseRelationshipName)) {
return $this->inverseRelationshipName;
}
$inverseRelationships = [];
foreach (explode('.', $this->getRelationshipName()) as $nestedRelationshipName) {
$relationship = $record->{$nestedRelationshipName}();
$record = $relationship->getRelated();
$inverseNestedRelationshipName = (string) str(class_basename($relationship->getParent()::class))
->when(
($relationship instanceof BelongsTo ||
$relationship instanceof BelongsToMany ||
$relationship instanceof BelongsToThrough),
fn (Stringable $name) => $name->plural(),
)
->camel();
if (! $record->isRelation($inverseNestedRelationshipName)) {
// The conventional relationship doesn't exist, but we can
// attempt to use the original relationship name instead.
if (! $record->isRelation($nestedRelationshipName)) {
$recordClass = $record::class;
throw new Exception("When trying to guess the inverse relationship for column [{$this->getName()}], relationship [{$inverseNestedRelationshipName}] was not found on model [{$recordClass}]. Please define a custom [inverseRelationship()] for this column.");
}
$inverseNestedRelationshipName = $nestedRelationshipName;
}
array_unshift($inverseRelationships, $inverseNestedRelationshipName);
}
return implode('.', $inverseRelationships);
}
public function getRelationshipName(?string $name = null): ?string
{
$name ??= $this->getName();
if (! str($name)->contains('.')) {
return null;
}
return (string) str($name)->beforeLast('.');
}
}
?>
Did this file decode correctly?
Original Code
<?php
namespace Filament\Support\Concerns;
use Closure;
use Exception;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
use Illuminate\Support\Stringable;
use Znck\Eloquent\Relations\BelongsToThrough;
trait HasCellState
{
protected mixed $defaultState = null;
protected mixed $getStateUsing = null;
protected string | Closure | null $separator = null;
protected bool | Closure $isDistinctList = false;
protected ?string $inverseRelationshipName = null;
public function inverseRelationship(?string $name): static
{
$this->inverseRelationshipName = $name;
return $this;
}
public function distinctList(bool | Closure $condition = true): static
{
$this->isDistinctList = $condition;
return $this;
}
public function getStateUsing(mixed $callback): static
{
$this->getStateUsing = $callback;
return $this;
}
public function state(mixed $state): static
{
$this->getStateUsing($state);
return $this;
}
public function default(mixed $state): static
{
$this->defaultState = $state;
return $this;
}
public function isDistinctList(): bool
{
return (bool) $this->evaluate($this->isDistinctList);
}
public function getDefaultState(): mixed
{
return $this->evaluate($this->defaultState);
}
public function getState(): mixed
{
if (! $this->getRecord()) {
return null;
}
$state = ($this->getStateUsing !== null) ?
$this->evaluate($this->getStateUsing) :
$this->getStateFromRecord();
if (is_string($state) && ($separator = $this->getSeparator())) {
$state = explode($separator, $state);
$state = (count($state) === 1 && blank($state[0])) ?
[] :
$state;
}
if (blank($state)) {
$state = $this->getDefaultState();
}
return $state;
}
public function getStateFromRecord(): mixed
{
$record = $this->getRecord();
$state = Arr::get($record, $this->getName());
if ($state !== null) {
return $state;
}
if (! $this->hasRelationship($record)) {
return null;
}
$relationship = $this->getRelationship($record);
if (! $relationship) {
return null;
}
$relationshipAttribute = $this->getRelationshipAttribute();
$state = collect($this->getRelationshipResults($record))
->filter(fn (Model $record): bool => array_key_exists($relationshipAttribute, $record->attributesToArray()))
->pluck($relationshipAttribute)
->filter(fn ($state): bool => filled($state))
->when($this->isDistinctList(), fn (Collection $state) => $state->unique())
->values();
if (! $state->count()) {
return null;
}
return $state->all();
}
public function separator(string | Closure | null $separator = ','): static
{
$this->separator = $separator;
return $this;
}
public function getSeparator(): ?string
{
return $this->evaluate($this->separator);
}
public function hasRelationship(Model $record): bool
{
return $this->getRelationship($record) !== null;
}
/**
* @deprecated Use `hasRelationship()` instead.
*/
public function queriesRelationships(Model $record): bool
{
return $this->hasRelationship($record);
}
public function getRelationship(Model $record, ?string $name = null): ?Relation
{
if (blank($name) && (! str($this->getName())->contains('.'))) {
return null;
}
$relationship = null;
foreach (explode('.', $name ?? $this->getRelationshipName()) as $nestedRelationshipName) {
if (! $record->isRelation($nestedRelationshipName)) {
$relationship = null;
break;
}
$relationship = $record->{$nestedRelationshipName}();
$record = $relationship->getRelated();
}
return $relationship;
}
/**
* @param array<string> | null $relationships
* @return array<Model>
*/
public function getRelationshipResults(Model $record, ?array $relationships = null): array
{
$results = [];
$relationships ??= explode('.', $this->getRelationshipName());
while (count($relationships)) {
$currentRelationshipName = array_shift($relationships);
$currentRelationshipValue = $record->getRelationValue($currentRelationshipName);
if ($currentRelationshipValue instanceof Collection) {
if (! count($relationships)) {
$results = [
...$results,
...$currentRelationshipValue->all(),
];
continue;
}
foreach ($currentRelationshipValue as $valueRecord) {
$results = [
...$results,
...$this->getRelationshipResults(
$valueRecord,
$relationships,
),
];
}
break;
}
if (! $currentRelationshipValue instanceof Model) {
break;
}
if (! count($relationships)) {
$results[] = $currentRelationshipValue;
break;
}
$record = $currentRelationshipValue;
}
return $results;
}
public function getRelationshipAttribute(?string $name = null): string
{
$name ??= $this->getName();
if (! str($name)->contains('.')) {
return $name;
}
return (string) str($name)->afterLast('.');
}
public function getInverseRelationshipName(Model $record): string
{
if (filled($this->inverseRelationshipName)) {
return $this->inverseRelationshipName;
}
$inverseRelationships = [];
foreach (explode('.', $this->getRelationshipName()) as $nestedRelationshipName) {
$relationship = $record->{$nestedRelationshipName}();
$record = $relationship->getRelated();
$inverseNestedRelationshipName = (string) str(class_basename($relationship->getParent()::class))
->when(
($relationship instanceof BelongsTo ||
$relationship instanceof BelongsToMany ||
$relationship instanceof BelongsToThrough),
fn (Stringable $name) => $name->plural(),
)
->camel();
if (! $record->isRelation($inverseNestedRelationshipName)) {
// The conventional relationship doesn't exist, but we can
// attempt to use the original relationship name instead.
if (! $record->isRelation($nestedRelationshipName)) {
$recordClass = $record::class;
throw new Exception("When trying to guess the inverse relationship for column [{$this->getName()}], relationship [{$inverseNestedRelationshipName}] was not found on model [{$recordClass}]. Please define a custom [inverseRelationship()] for this column.");
}
$inverseNestedRelationshipName = $nestedRelationshipName;
}
array_unshift($inverseRelationships, $inverseNestedRelationshipName);
}
return implode('.', $inverseRelationships);
}
public function getRelationshipName(?string $name = null): ?string
{
$name ??= $this->getName();
if (! str($name)->contains('.')) {
return null;
}
return (string) str($name)->beforeLast('.');
}
}
Function Calls
None |
Stats
MD5 | fb6fb5fd161d360334d19373284ac036 |
Eval Count | 0 |
Decode Time | 97 ms |