/** * Delete a record from the database. * * @return mixed */ public function delete() { $this->model->fireEvent('deletingMultiple'); $return = parent::delete(); $this->model->fireEvent('deletedMultiple'); return $return; }
/** * Handle the command. * * @param Guard $auth */ public function handle(Guard $auth) { if ($this->entry->created_at) { $this->entry->updated_at = time(); $this->entry->updated_by = $auth->id(); } if (!$this->entry->created_at) { $this->entry->created_at = time(); $this->entry->created_by = $auth->id(); } if (!$this->entry->sort_order) { /* @var Builder $query */ $query = $this->entry->newQuery(); $this->entry->sort_order = $query->count('id') + 1; } }
/** * Get the tree entries. * * @param TreeBuilder $builder * @return Collection */ public function get(TreeBuilder $builder) { // Start a new query. $query = $this->model->newQuery(); /** * Prevent joins from overriding intended columns * by prefixing with the model's tree name. */ $query = $query->select($this->model->getTable() . '.*'); /** * Eager load any relations to * save resources and queries. */ $query = $query->with($builder->getTreeOption('eager', [])); /** * Raise and fire an event here to allow * other things (including filters / views) * to modify the query before proceeding. */ $builder->fire('querying', compact('builder', 'query')); app('events')->fire(new TreeIsQuerying($builder, $query)); /** * Before we actually adjust the baseline query * set the total amount of entries possible back * on the tree so it can be used later. */ $total = $query->count(); $builder->setTreeOption('total_results', $total); /** * Order the query results. */ foreach ($builder->getTreeOption('order_by', ['sort_order' => 'asc']) as $column => $direction) { $query = $query->orderBy($column, $direction); } return $query->get(); }
/** * When accessing a property of a decorated entry * object first check to see if the key represents * a streams field. If it does then return the field * type's presenter object. Otherwise handle normally. * * @param $key * @return mixed */ public function __get($key) { if ($assignment = $this->object->getAssignment($key)) { $type = $assignment->getFieldType(); if ($assignment->isTranslatable() && ($locale = config('app.locale'))) { $entry = $this->object->translateOrDefault($locale); $type->setLocale($locale); } else { $entry = $this->object; } $type->setEntry($entry); if (method_exists($type, 'getRelation')) { return $type->decorate($entry->getRelationValue(camel_case($key))); } $type->setValue($entry->getFieldValue($key)); return $type->getPresenter(); } return $this->__getDecorator()->decorate(parent::__get($key)); }
/** * Because the assignment record holds translatable data * we have a conflict. The assignment table has translations * but not all assignment are translatable. This helps avoid * the translatable conflict during specific procedures. * * @param array $attributes * @return static */ public static function create(array $attributes = []) { $model = parent::create($attributes); $model->saveTranslations(); return $model; }
/** * Override the __get method. * * @param string $key * @return EntryPresenter|mixed */ public function __get($key) { if ($key === 'decorated') { return $this->getPresenter(); } return parent::__get($key); // TODO: Change the autogenerated stub }
/** * Boot the model. */ protected static function boot() { self::$builder = app(FieldTypeBuilder::class); parent::boot(); }
/** * Find an entry. * * @param $id * @return EloquentModel */ public function findOrNew($id) { return $this->model->findOrNew($id); }
/** * Parse a translation. * * @param EloquentModel $translation * @param $string */ protected function parseTranslation(EloquentModel $translation, &$string) { $string .= "\n["; foreach ($translation->getAttributes() as $key => $value) { $value = $translation->getAttribute($key); if (is_string($value)) { $value = addslashes($value); } $string .= "\n'{$key}' => '{$value}',"; } $string .= "\n],"; }
/** * Run after a record has been restored. * * @param EloquentModel $model */ public function restored(EloquentModel $model) { $model->flushCache(); $this->events->fire(new ModelWasRestored($model)); }
/** * Boot the service provider. */ public function boot(Dispatcher $events) { $events->fire(new Booting()); // First load our app environment. $this->dispatch(new LoadEnvironmentOverrides()); // Next take care of core utilities. $this->dispatch(new SetCoreConnection()); $this->dispatch(new ConfigureCommandBus()); $this->dispatch(new ConfigureUriValidator()); $this->dispatch(new InitializeApplication()); // Setup and preparing utilities. $this->dispatch(new LoadStreamsConfiguration()); $this->dispatch(new AutoloadEntryModels()); $this->dispatch(new AddAssetNamespaces()); $this->dispatch(new AddImageNamespaces()); $this->dispatch(new AddViewNamespaces()); // Observe our base models. EntryModel::observe(EntryObserver::class); FieldModel::observe(FieldObserver::class); StreamModel::observe(StreamObserver::class); EloquentModel::observe(EloquentObserver::class); AssignmentModel::observe(AssignmentObserver::class); $this->app->booted(function () use($events) { $events->fire(new Booted()); /* @var AddonManager $manager */ $manager = $this->app->make('Anomaly\\Streams\\Platform\\Addon\\AddonManager'); /* @var Dispatcher $events */ $events = $this->app->make('Illuminate\\Contracts\\Events\\Dispatcher'); $events->listen('Anomaly\\Streams\\Platform\\View\\Event\\RegisteringTwigPlugins', function (RegisteringTwigPlugins $event) { $twig = $event->getTwig(); foreach ($this->plugins as $plugin) { if (!$twig->hasExtension($plugin)) { $twig->addExtension($this->app->make($plugin)); } } if (!$twig->hasExtension('markdown')) { $twig->addExtension(new MarkdownExtension(new MichelfMarkdownEngine())); } $twig->addExtension(new Extension(new CacheStrategy(new CacheAdapter($this->app->make(Repository::class)), new CacheKey()))); }); $manager->register(); $this->dispatch(new IncludeRoutes()); $events->fire(new Ready()); }); $this->app->singleton('mailer', function () { $mailer = new Mailer($this->app['view'], $this->app['swift.mailer'], $this->app['events']); $mailer->setContainer($this->app); if ($this->app->bound('Psr\\Log\\LoggerInterface')) { $mailer->setLogger($this->app->make('Psr\\Log\\LoggerInterface')); } if ($this->app->bound('queue')) { $mailer->setQueue($this->app['queue.connection']); } $from = $this->app['config']['mail.from']; if (is_array($from) && isset($from['address'])) { $mailer->alwaysFrom($from['address'], $from['name']); } $to = $this->app['config']['mail.to']; if (is_array($to) && isset($to['address'])) { $mailer->alwaysTo($to['address'], $to['name']); } $pretend = $this->app['config']->get('mail.pretend', false); $mailer->pretend($pretend); return $mailer; }); $this->app->singleton('Illuminate\\Mail\\Mailer', function () { return $this->app->make('mailer'); }); $this->app->singleton('Illuminate\\Contracts\\Mail\\Mailer', function () { return $this->app->make('mailer'); }); $this->dispatch(new ConfigureTranslator()); }
/** * Get the attribute from the parent * if it does not exist here. * * @param string $key * @return mixed */ public function __get($key) { $value = parent::__get($key); if (!$value && ($parent = $this->getParent())) { return $parent->{$key}; } return $value; }
/** * Get the entries. * * @return Collection */ public function get() { return (new Decorator())->decorate($this->model->newCollection($this->query->get()->all())); }
/** * Get the table entries. * * @param TableBuilder $builder * @return Collection */ public function get(TableBuilder $builder) { // Grab any stream we have. $stream = $builder->getTableStream(); // Start a new query. $query = $this->model->newQuery(); /* * Prevent joins from overriding intended columns * by prefixing with the model's table name. */ $query = $query->select($this->model->getTable() . '.*'); /* * Eager load any relations to * save resources and queries. */ $query = $query->with($builder->getTableOption('eager', [])); /* * Raise and fire an event here to allow * other things (including filters / views) * to modify the query before proceeding. */ $builder->fire('querying', compact('builder', 'query')); app('events')->fire(new TableIsQuerying($builder, $query)); /* * Before we actually adjust the baseline query * set the total amount of entries possible back * on the table so it can be used later. */ $total = $query->count(); $builder->setTableOption('total_results', $total); /* * Assure that our page exists. If the page does * not exist then start walking backwards until * we find a page that is has something to show us. */ $limit = (int) $builder->getTableOption('limit', config('streams::system.per_page', 15)); $page = app('request')->get($builder->getTableOption('prefix') . 'page', 1); $offset = $limit * ($page - 1); if ($total < $offset && $page > 1) { $url = str_replace($builder->getTableOption('prefix') . 'page=' . $page, $builder->getTableOption('prefix') . 'page=' . ($page - 1), app('request')->fullUrl()); header('Location: ' . $url); } /* * Limit the results to the limit and offset * based on the page if any. */ $offset = $limit * (app('request')->get($builder->getTableOption('prefix') . 'page', 1) - 1); $query = $query->take($limit)->offset($offset); /* * Order the query results. */ if ($order = $builder->getTableOption('order_by')) { foreach ($order as $column => $direction) { if ($stream && ($utility = $stream->getFieldTypeQuery($column))) { $utility->orderBy($query, $direction); } else { $query = $query->orderBy($column, $direction); } } } if ($builder->getTableOption('sortable')) { $query = $query->orderBy('sort_order', 'ASC'); } return $query->get(); }
/** * Restore a trashed record. * * @param EloquentModel $entry * @return bool */ public function restore(EloquentModel $entry) { return $entry->restore(); }
/** * Boot the service provider. */ public function boot(Dispatcher $events) { $events->fire(new Booting()); // First load our app environment. $this->dispatch(new LoadEnvironmentOverrides()); // Next take care of core utilities. $this->dispatch(new SetCoreConnection()); $this->dispatch(new ConfigureUriValidator()); $this->dispatch(new InitializeApplication()); // Setup and preparing utilities. $this->dispatch(new LoadStreamsConfiguration()); $this->dispatch(new ConfigureTranslator()); $this->dispatch(new AutoloadEntryModels()); $this->dispatch(new AddAssetNamespaces()); $this->dispatch(new AddImageNamespaces()); $this->dispatch(new AddViewNamespaces()); $this->dispatch(new ConfigureScout()); // Observe our base models. EntryModel::observe(EntryObserver::class); FieldModel::observe(FieldObserver::class); StreamModel::observe(StreamObserver::class); EloquentModel::observe(EloquentObserver::class); AssignmentModel::observe(AssignmentObserver::class); $this->app->booted(function () use($events) { $events->fire(new Booted()); /* @var AddonManager $manager */ $manager = $this->app->make('Anomaly\\Streams\\Platform\\Addon\\AddonManager'); /* @var Dispatcher $events */ $events = $this->app->make('Illuminate\\Contracts\\Events\\Dispatcher'); $events->listen('Anomaly\\Streams\\Platform\\View\\Event\\RegisteringTwigPlugins', function (RegisteringTwigPlugins $event) { $twig = $event->getTwig(); foreach ($this->plugins as $plugin) { if (!$twig->hasExtension($plugin)) { $twig->addExtension($this->app->make($plugin)); } } if (!$twig->hasExtension('markdown')) { $twig->addExtension(new MarkdownExtension(new MichelfMarkdownEngine())); } $twig->addExtension(new Extension(new CacheStrategy(new CacheAdapter($this->app->make(Repository::class)), new CacheKey()))); }); $manager->register(); /* * Do this after addons are registered * so that they can override named routes. */ $this->dispatch(new IncludeRoutes()); $events->fire(new Ready()); }); }