Having trouble with custom like handler...

Jaxel

Well-known member
So I've made a custom like handler... you can see it here: (must be logged in to like)
http://www.8wayrun.com/media/soul-edge-blade-introduction-edge-of-soul.776/

It works great at liking, it adds likes, subtracts likes, and works through ajax without any issues. The likes also appear properly on my "account/likes" page.

Likes You ve Received   8WayRun.Com - Soulcalibur Community.webp

However, I have run into a few issues that I have no idea how to fix:
  1. Likes do not appear on "recent-activity"
    http://www.8wayrun.com/recent-activity/
  2. Likes do not appear on "news feeds"
  3. When someone likes a media, the alert system says I have an alert (red marker), however when I go the alert tab, it says I have no new alerts. The like alert also does not appear in my "latest alerts" page.
This is the contents of my like handler:
Code:
<?php

class EWRmedio_LikeHandler_Media extends XenForo_LikeHandler_Abstract
{
	public function incrementLikeCounter($contentId, array $latestLikes, $adjustAmount = 1)
	{
		$dw = XenForo_DataWriter::create('EWRmedio_DataWriter_Media');
		$dw->setExistingData($contentId);
		$dw->set('media_likes', $dw->get('media_likes') + $adjustAmount);
		$dw->set('media_like_users', $latestLikes);
		$dw->save();
	}

	public function getContentData(array $contentIds, array $viewingUser)
	{
		$mediaModel = XenForo_Model::create('EWRmedio_Model_Media');
		$medias = $mediaModel->getMediasByIDs($contentIds);

		return $medias;
	}

	public function getListTemplateName()
	{
		return 'news_feed_item_media_like';
	}
}
 
I really dont get what I'm supposed to do to get these alerts and news feeds working...
Code:
media
like_handler_class
EWRmedio_LikeHandler_Media

When a like is added, it automatically adds entries to the `xf_news_feed` and `xf_user_alert` tables. I can look at the database and see that these entries are there; but in the actual news feed on the website, and my alerts panel, they are not.

What am I missing? I have templates for alert_media_like and news_feed_item_media_like
 
maybe you need to extend the XenForo_AlertHandler_Abstract as well? did you look into the alert handlers? library\XenForo\AlertHandler
 
You need to publish the story to the news feed and send alerts yourself - if alerts are being sent but are not visible, you may simply need to create the appropriate template.
 
maybe you need to extend the XenForo_AlertHandler_Abstract as well? did you look into the alert handlers? library\XenForo\AlertHandler
I have the following file:
Code:
<?php

class EWRmedio_AlertHandler_Media extends XenForo_AlertHandler_DiscussionMessage
{
	public function getContentByIds(array $contentIds, $model, $userId, array $viewingUser)
	{
		return $model->getModelFromCache('EWRmedio_Model_Media')->getMediasByIDs($contentIds);
	}
}
Alerts don't work. I have not added any code event listeners...

You need to publish the story to the news feed and send alerts yourself - if alerts are being sent but are not visible, you may simply need to create the appropriate template.
What templates are needed? From looking at the database, it looks like the LikeHandler publishes like alerts automatically. Since both database tables are filled with the media/like data.

Content Type = media
Action = like

I have templates for "alert_media_like" and "news_feed_item_media_like"
Code:
{xen:phrase x_liked_your_media_y,
    'name={xen:helper username, $user, 'subject'}',
    'link={xen:link media, $content}',
    'title={$content.media_title}'}
Code:
<h3 class="description">

    <xen:if is="{$content.user_id} == {$visitor.user_id}">

        <xen:comment><!-- $user liked your status --></xen:comment>
        {xen:phrase x_liked_your_media_y,
            'name={xen:helper username, $user, 'primaryText'}',
            'link={xen:link media, $content}',
            'title={$content.media_title}'
        }

    <xen:else />

        <xen:comment><!-- $user liked $contentUser's media --></xen:comment>
        {xen:phrase x_liked_ys_media_z,
            'name={xen:helper username, $user, 'primaryText'}',
            'link={xen:link media, $content}',
            'poster={$content.username}'
        }

    </xen:if>

</h3>

<p class="snippet">{xen:helper snippet, $content.media_description, 100, {xen:array 'stripQuote=1'}}</p>
 
Refreshing my memory on XenForo_Model_Like, it looks like the system automatically sends alerts and publishes news feed items, so it should be the case that you just need to provide the appropriate templates to display the data.

Those templates need to be:
  • news_feed_item_{contentType}_like
  • alert_{contentType}_like
Have you created these? Can you verify that they are being called / used?
 
Aah, looks like you already replied.

Can you verify that the data is being inserted into the alert and news feed tables correctly?
 
Aah, looks like you already replied.

Can you verify that the data is being inserted into the alert and news feed tables correctly?
I have not extended any alert classes... I have not added any code event listeners. Do I need to?

I also have a related question... I've set up the alert preferences below. How do I implement them once I finally get the alerts working for these likes?
1.webp
 
You need to create an alert handler and a news feed handler so that the system knows how to fetch the data referred to in the news feed and alert tables.

For alert preferences, you really just need to extend the account_alert_preferences template using the available template hooks and provided the form fields are named correctly, everything else should be handled for you.
 
You need to create an alert handler and a news feed handler so that the system knows how to fetch the data referred to in the news feed and alert tables.

For alert preferences, you really just need to extend the account_alert_preferences template using the available template hooks and provided the form fields are named correctly, everything else should be handled for you.
What do I need to do to extend the alert and news feed handlers? Do I need to setup code event listeners?

I have already extended account_alert_preferences... but I dont get how or where to use the settings; I've tried searching for variables based on the existing alert preferences, but there is nothing. The way handlers work in XenForo seem completely undocumented and are very hard to follow.
 
Nevermind, I got it... all I had to do to get alerts working was to create a content_type_field for it... trying to get the news feed content_type_field working now...

I still dont understand how to use the data in account_alert_preferences though...

You also said something earlier about manually publishing alerts and news feeds... how do I do this?
 
I still dont understand how to use the data in account_alert_preferences though...

I believe that you use it to check whether or not the user has chosen to be alerted for that item via XenForo_Model_Alert::userReceivesAlert() which checks xf_user_alert_optout, at which point (if it returns true) you actually then send the alert to the user.

Of course, I have been trying to figure this out myself as well... maybe Kier can make another video? :p

EDIT: Okay it took me a while but I get this alert thing myself as well. :)
 
Onimua... I've figured it out... I would mention it, but its a lot to cover, adn I dont have the time right now.
 
  • Like
Reactions: Bob
Onimua... I've figured it out... I would mention it, but its a lot to cover, adn I dont have the time right now.

Sweet :D Its all in the latest release of the media addon? Mine is slightly different as I am firing alerts via cron based on certain date/time events within the addon. Think I almost got it tho...

btw, keep up the great work on your Addons Bro.. they ROCK!
 
My alert handler works fine but I am having issues with the news feed handlers, It has the content_type entry and field entry, and it seems it inserts the data into the news_feed table correctly, though it doesn't pull any of it when I try to pull from NewsFeed, I have also created templates like:

news_feed_item_{content_type}_insert, but it is still not pulling anything, do you know what I could be doing wrong or left out?
 
nvm got it working.. it took me like 5 hours to figure this out, ahhhh!. I was getting just one item with getContentByIds(), but I had to get it all.. that fixed the issue, and it is pulling the data now.
 
Top Bottom