%PDF- %PDF-
Direktori : /home/forge/api-takeaseat.eco-n-tech.co.uk/vendor/laravel/nova/src/Metrics/ |
Current File : //home/forge/api-takeaseat.eco-n-tech.co.uk/vendor/laravel/nova/src/Metrics/Metric.php |
<?php namespace Laravel\Nova\Metrics; use DateInterval; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; use Laravel\Nova\Card; use Laravel\Nova\Http\Requests\NovaRequest; use Laravel\Nova\Nova; abstract class Metric extends Card { use HasHelpText; /** * The displayable name of the metric. * * @var string */ public $name; /** * Indicates whether the metric should be refreshed when actions run. * * @var bool */ public $refreshWhenActionRuns = false; /** * Calculate the metric's value. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @return mixed */ public function resolve(NovaRequest $request) { $resolver = function () use ($request) { return $this->onlyOnDetail ? $this->calculate($request, $request->findModelOrFail()) : $this->calculate($request); }; if ($cacheFor = $this->cacheFor()) { $cacheFor = is_numeric($cacheFor) ? new DateInterval(sprintf('PT%dS', $cacheFor * 60)) : $cacheFor; return Cache::remember( $this->getCacheKey($request), $cacheFor, $resolver ); } return $resolver(); } /** * Get the appropriate cache key for the metric. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @return string */ protected function getCacheKey(NovaRequest $request) { return sprintf( 'nova.metric.%s.%s.%s.%s.%s', $this->uriKey(), $request->input('range', 'no-range'), $request->input('timezone', 'no-timezone'), $request->input('twelveHourTime', 'no-12-hour-time'), $this->onlyOnDetail ? $request->findModelOrFail()->getKey() : 'no-resource-id' ); } /** * Get the displayable name of the metric. * * @return string */ public function name() { return $this->name ?: Nova::humanize($this); } /** * Determine for how many minutes the metric should be cached. * * @return \DateTimeInterface|\DateInterval|float|int */ public function cacheFor() { // } /** * Get the URI key for the metric. * * @return string */ public function uriKey() { return Str::slug($this->name(), '-', null); } /** * Set whether the metric should refresh when actions are run. * * @param bool $value */ public function refreshWhenActionRuns($value = true) { $this->refreshWhenActionRuns = $value; return $this; } /** * Prepare the metric for JSON serialization. * * @return array */ public function jsonSerialize() { return array_merge(parent::jsonSerialize(), [ 'class' => get_class($this), 'name' => $this->name(), 'uriKey' => $this->uriKey(), 'helpWidth' => $this->getHelpWidth(), 'helpText' => $this->getHelpText(), 'refreshWhenActionRuns' => $this->refreshWhenActionRuns, ]); } /** * Convert datetime to application timezone. * * @param \Cake\Chronos\ChronosInterface|\Carbon\CarbonInterface $datetime * @return \Cake\Chronos\ChronosInterface|\Carbon\CarbonInterface */ protected function asQueryDatetime($datetime) { if (! $datetime instanceof \DateTimeImmutable) { return $datetime->copy()->timezone(config('app.timezone')); } return $datetime->timezone(config('app.timezone')); } }