/** * Get newsfeed item as HTML * * @param Model_NewsfeedItem $item * @return string */ public static function get(Model_NewsfeedItem $item) { $link = $item->is_aggregate() ? implode('<br>', self::get_links($item)) : self::get_link($item); if (!$link) { return ''; } $text = ''; switch ($item->type) { case self::TYPE_COMMENT: $text = $item->is_aggregate() ? __('commented photos') : __('commented a photo'); break; case self::TYPE_COMMENT_FLYER: $text = $item->is_aggregate() ? __('commented flyers') : __('commented a flyer'); break; case self::TYPE_FLYER_EDIT: $text = $item->is_aggregate() ? __('updated flyers') : __('updated a flyer'); break; case self::TYPE_NOTE: $user = Model_User::find_user($item->data['user_id']); if ($link && $user->loaded()) { $text = __('tagged :user to a photo', array(':user' => HTML::user($user))); } break; case self::TYPE_UPLOAD: $text = __('added new photos to a gallery'); break; } return $text . '<br />' . $link; }
/** * Get newsfeed item as HTML * * @param Model_NewsfeedItem $item * @return string */ public static function get(Model_NewsfeedItem $item) { $link = $item->is_aggregate() ? implode('<br>', self::get_links($item)) : self::get_link($item); if (!$link) { return ''; } $text = ''; switch ($item->type) { case self::TYPE_COMMENT: $text = $item->is_aggregate() ? __('commented to blogs') : __('commented to a blog'); break; case self::TYPE_ENTRY: $text = $item->is_aggregate() ? __('wrote new blog entries') : __('wrote a new blog entry'); break; } return $text . '<br>' . $link; }
/** * Get newsfeed item as HTML * * @param Model_NewsfeedItem $item * @return string */ public static function get(Model_NewsfeedItem $item) { $link = $item->is_aggregate() ? implode('<br>', self::get_links($item)) : self::get_link($item); if (!$link) { return ''; } $text = ''; switch ($item->type) { case self::TYPE_MIX: $text = $item->is_aggregate() ? __('added new mixtapes') : __('added a new mixtape'); break; case self::TYPE_TRACK: $text = $item->is_aggregate() ? __('added new tracks') : __('added a new track'); break; } return $text . '<br>' . $link; }
/** * Aggregate repeating items, daily. * * @param Model_NewsfeedItem[] $items * @return Model_NewsfeedItem[] */ protected function aggregate($items = null) { $aggregated = array(); $aggregate_types = array(); foreach ($items as $item) { // Check if item type is aggregateable $class = 'Newsfeeditem_' . $item->class; if (!isset($aggregate_types[$class])) { $aggregate_types[$class] = class_exists($class) ? Arr::get(get_class_vars($class), 'aggregate', array()) : array(); } if (!in_array($item->type, $aggregate_types[$class])) { // Not aggregateable $aggregated[] = $item; continue; } // Generate key $key = $item->user_id . $item->class . $item->type . date('Ymd', $item->stamp); if (isset($aggregated[$key])) { // Aggregate to existing key /** @var Model_NewsfeedItem $aggregate */ $aggregate = clone $aggregated[$key]; // Make it aggregated pseudo item if necessary if (!$aggregate->is_aggregate()) { $_aggregate = new Model_NewsfeedItem(); $_aggregate->is_aggregate(true); $_aggregate->set_fields(array('user_id' => $aggregate->user_id, 'stamp' => $aggregate->stamp, 'class' => $aggregate->class, 'type' => $aggregate->type, 'data' => array(clone $aggregate))); $aggregate = $_aggregate; } // Add current item $data = $aggregate->data; $duplicate = false; foreach ($data as $_item) { if ($_item->data == $item->data) { $duplicate = true; break; } } if (!$duplicate) { $data[] = $item; $aggregate->data = $data; $aggregated[$key] = $aggregate; } } else { // New aggregateable key $aggregated[$key] = $item; } } return $aggregated; }