Канал нового комментария ссылки в phpFox

В phpFox имеется возможность отображать в ленте новостей канал нового комментария, для этого достаточно включить в настройках модуля "Feed": Канал нового комментария (url настроек: "admincp/setting/edit/module-id_feed/"). Теперь все новые комментарии будут отображены в виде отдельного канала. Заметил, что комментарии ссылок, что созданы непосредственно в ленте новостей, не выводятся, как отдельные каналы, кроме того, в таблице "feed" не создается запись о новом комменте. Мне показалось, что это неправильно и я решил это исправить. Сейчас расскажу, как это сделать.

Значит, открываем: "module/link/include/service/callback.class.php", находим:
		// Update the post counter if its not a comment put under moderation or if the person posting the comment is the owner of the item.
		if (empty($aVals['parent_id']))
		{
			$this->database()->updateCounter('link', 'total_comment', 'link_id', $aRow['link_id']);		
		}

Выше добавляем:
		$privacy = 0;
		$privacyComment = 0;
			
		if (Phpfox::getParam('feed.add_feed_for_comments'))
		{
			$privacy = $aVals['privacy'];
			$privacyComment = $aVals['privacy_comment'];
		}

		(Phpfox::isModule('feed') ? Phpfox::getService('feed.process')->add($aVals['type'] . '_comment', $aVals['comment_id'], $privacy, $privacyComment) : null);

Теперь при комментировании ссылок в таблицу "feed" будет добавлена запись.

В этом же файле необходимо добавить функцию getActivityFeedComment:
	public function getActivityFeedComment($row)
	{
		if (Phpfox::isUser() && Phpfox::isModule('like'))
		{
			$this->database()
			    ->select('l.like_id AS is_liked, ')
				->leftJoin(Phpfox::getT('like'), 'l', 'l.type_id = \'feed_mini\' AND l.item_id = c.comment_id AND l.user_id = ' . Phpfox::getUserId());
		}		

		$item = $this->database()
		    ->select('link.link_id, link.title, link.total_like, link.user_id, link.status_info, c.total_like, c.text, ' . Phpfox::getUserField())
			->from(Phpfox::getT('comment'), 'c')
			->join(Phpfox::getT('link'), 'link', 'link.link_id = c.item_id')
			->join(Phpfox::getT('user'), 'u', 'u.user_id = link.user_id')
			->where('c.comment_id = ' . (int) $row['item_id'])
			->execute('getSlaveRow');
		
		if (empty($item['link_id']))
		{
			return false;
		}

		if ($row['user_id'] == $item['user_id'])
		{
			$message = Phpfox::getPhrase('link.add_comment_link_own', array('gender' => $item['gender']));
		}
		else
		{
			$user = '<a href="' . Phpfox::getLib('url')->makeUrl($item['user_name']) . '">' . $item['full_name'] . '</a>';
			$message = Phpfox::getPhrase('link.add_comment_link_user_name', array('gender' => $row['gender'], 'user_name' => $user));
		}

		return array(
			'feed_title'      => $item['title'],
			'feed_content'    => !empty($item['status_info']) ? $item['status_info'] : null,
			'feed_info'       => $message,
			'feed_link'       => Phpfox::permalink($item['user_name'], 'link-id_' . $item['link_id']),
			'feed_status'     => $item['text'],
			'feed_total_like' => $item['total_like'],
			'feed_is_liked'   => isset($item['is_liked']) ? $item['is_liked'] : false,
			'feed_icon'       => Phpfox::getLib('image.helper')->display(array('theme' => 'module/link.png', 'return_url' => true)),
			'time_stamp'      => $row['time_stamp'],
			'like_type_id'    => 'feed_mini'
		);		
	}

Затем, в админке, необходимо добавить две новые фразы в модуль "link":
- add_comment_link_own - прокомментировал(а) свою ссылку.
- add_comment_link_user_name - прокомментировал(а) ссылку от {user_name}.

Готово. Теперь канал комментария ссылок должны отображаться в ленте новостей (стена). Пример:
Канал нового комментария ссылки в phpFox

Возможно будет интересно:
- Канал комментария статуса в ленте новостей (phpFox: feed)

Похожие темы