XF 2.1 Extend reaction system for implement into addon Social Group

Kevin 🚀

Active member
Hello XenForo Community :)

I would like add reaction system of xenforo into addon Social Group, i have create addon for extend the extension, but i have a problem and i don't see a solution about my error.

I have this error :
Code:
LogicException: Unknown relation or alias Reactions accessed on xf_tl_group in src/XF/Mvc/Entity/Finder.php at line 753
XF\Mvc\Entity\Finder->join() in src/XF/Mvc/Entity/Finder.php at line 746
XF\Mvc\Entity\Finder->join() in src/XF/Mvc/Entity/Finder.php at line 644
XF\Mvc\Entity\Finder->with() in src/XF/Mvc/Entity/Manager.php at line 147
XF\Mvc\Entity\Manager->find() in src/addons/Truonglv/Groups/ControllerPlugin/Assertion.php at line 59
Truonglv\Groups\ControllerPlugin\Assertion->assertGroupViewable() in src/addons/Induste/SGEnhencement/XF/Pub/Controller/Group.php at line 43
Induste\SGEnhencement\XF\Pub\Controller\Group->actionReactions() in src/XF/Mvc/Dispatcher.php at line 321
XF\Mvc\Dispatcher->dispatchClass() in src/XF/Mvc/Dispatcher.php at line 248
XF\Mvc\Dispatcher->dispatchFromMatch() in src/XF/Mvc/Dispatcher.php at line 100
XF\Mvc\Dispatcher->dispatchLoop() in src/XF/Mvc/Dispatcher.php at line 50
XF\Mvc\Dispatcher->run() in src/XF/App.php at line 2178
XF\App->run() in src/XF.php at line 390
XF::runApp() in index.php at line 20

I have create the content type :

1578074521922.png

In spoiler you can see my files Reaction\Group and Extended Entity.

PHP:
<?php

namespace Induste\SGEnhencement\Reaction;

use Truonglv\Groups\App;
use XF\Mvc\Entity\Entity;
use XF\Reaction\AbstractHandler;

class Group extends AbstractHandler
{
    public function reactionsCounted(Entity $entity)
    {
        if (!($entity instanceof \Truonglv\Groups\Entity\Group)) {
            return false;
        }

        return $entity->isVisible();
    }

    public function getEntityWith()
    {
        return ['full'];
    }

    public function getTemplateName()
    {
        return 'public:tlg_reaction_item_group';
    }
}

PHP:
<?php
namespace Induste\SGEnhencement\XF\Entity;

use XF\Mvc\Entity\Structure;
use XF\Entity\ReactionTrait;

class Group extends \Truonglv\Groups\Entity\Group
{
    use ReactionTrait;

    public static function getStructure(Structure $structure)
    {
        $structure = parent::getStructure($structure);

        $structure->columns['reaction_score'] = ['type' => self::UINT, 'default' => 0];
        $structure->columns['reactions']      = ['type' => self::JSON_ARRAY, 'nullable' => true];
        $structure->columns['reaction_users'] = ['type' => self::JSON_ARRAY];

        $structure->behaviors = [
            'XF:Reactable' => ['stateField' => 'state'],
        ];

        $structure->withAliases = [
            'full' => [
                'User',
                'User.Profile',
                'User.Privacy',
                function () {
                    if (\XF::options()->showMessageOnlineStatus) {
                        return 'User.Activity';
                    }

                    return null;
                },
                function () {
                    $userId = \XF::visitor()->user_id;
                    if ($userId) {
                        return [
                            'Reactions|' . $userId
                        ];
                    }

                    return null;
                }
            ],
            'api' => [
                'User',
                'User.api',
                'User.Profile'
            ]
        ];

        return  $structure;
    }

    public function canReact(&$error = null)
    {
        $visitor = \XF::visitor();
        if (!$visitor->user_id) {
            return false;
        }

        if (!$this->getContent()) {
            return false;
        }

        if ($visitor->user_id === $this->user_id) {
            $error = \XF::phraseDeferred('reacting_to_your_own_content_is_considered_cheating');

            return false;
        }

        return true;
    }

}
?>

Thanks you in advance for your help !
Best regards,
Kevin
 

Jeremy P

XenForo developer
Staff member
You will need to, at the very least, add the structure elements from the trait:

PHP:
 static::addReactableStructureElements($structure);

You will likely also need to add the XF:Reactable behavior, and I think you will want to create alert and news feed handlers as reactions tie into those systems as well.
 

Kevin 🚀

Active member
You will need to, at the very least, add the structure elements from the trait:

PHP:
 static::addReactableStructureElements($structure);

You will likely also need to add the XF:Reactable behavior, and I think you will want to create alert and news feed handlers as reactions tie into those systems as well.
Thanks for your help ! It works perfectly ! Yes, once the implementation is finished, I will create alerts and news feeds, but I have already created these actions on my latest addons.

That should do it, well I hope ^^
 
Top