'Short Feed', 'description' => 'Displays a mini-feed of the most recent feed items, loaded with other page content' ]; } public function defineProperties() { return [ 'channelFilter' => [ 'title' => 'Channels', 'description' => 'A comma-separated list of channels to include in feed.', 'type' => 'string', 'default' => '' ], 'tagFilter' => [ 'title' => 'Tag', 'description' => 'The tag to display in the feed.', 'type' => 'string', 'default' => '' ], 'maxItems' => [ 'title' => 'Max items', 'description' => 'How many feed items should be displayed?', 'default' => 10, 'type' => 'string', 'validationPattern' => '^[0-9]+$', 'validationMessage' => 'The Max items property must be numeric' ] ]; } public function onRun() { date_default_timezone_set('America/Edmonton'); // Set up the results query $results = FeedItem::orderBy('timestamp', 'desc')->take($this->property('maxItems')); // Do we need to filter based on a tag? if ($this->property('tagFilter') != null) { $results->join('jasonwilliams_feed_tags', 'jasonwilliams_feed_.id', '=', 'jasonwilliams_feed_tags.feed_item_id'); $results->where('tag', $this->property('tagFilter')); } // Do we need to filter based on the channel? if ($this->property('channelFilter') != null && $this->property('channelFilter') != 'all') { $this->channelfilter = explode(',', $this->property('channelFilter')); $results->whereHas('channel', function($q) { $firstchannel = true; foreach ($this->channelfilter as $channel) { if ($firstchannel) $q->where('slug', $channel); else $q->orWhere('slug', $channel); $firstchannel = false; } }); } $this->page['posts'] = $results->get(); } }