Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Search/Data/ProfilePost.php
<?php

namespace XF\Search\Data;

use
XF\Mvc\Entity\Entity;
use
XF\Search\IndexRecord;
use
XF\Search\MetadataStructure;
use
XF\Util\Arr;

class
ProfilePost extends AbstractData
{
    public function
getEntityWith($forView = false)
    {
       
$get = ['ProfileUser'];
        if (
$forView)
        {
           
$get[] = 'ProfileUser.Privacy';
           
$get[] = 'User';
        }

        return
$get;
    }

    public function
getIndexData(Entity $entity)
    {
       
/** @var \XF\Entity\ProfilePost $entity */

       
if (!$entity->ProfileUser)
        {
            return
null;
        }

       
$index = IndexRecord::create('profile_post', $entity->profile_post_id, [
           
'title' => '',
           
'message' => $entity->message_,
           
'date' => $entity->post_date,
           
'user_id' => $entity->user_id,
           
'discussion_id' => $entity->profile_post_id,
           
'metadata' => $this->getMetaData($entity)
        ]);

        if (!
$entity->isVisible())
        {
           
$index->setHidden();
        }

        return
$index;
    }

    protected function
getMetaData(\XF\Entity\ProfilePost $entity)
    {
       
$metadata = [];

       
$metadata['profile_user'] = $entity->profile_user_id;

        return
$metadata;
    }

    public function
setupMetadataStructure(MetadataStructure $structure)
    {
       
$structure->addField('profile_user', MetadataStructure::INT);
    }

    public function
getResultDate(Entity $entity)
    {
        return
$entity->post_date;
    }

    public function
getSearchableContentTypes()
    {
        return [
'profile_post', 'profile_post_comment'];
    }

    public function
getTemplateData(Entity $entity, array $options = [])
    {
        return [
           
'profilePost' => $entity,
           
'options' => $options
       
];
    }

    public function
getSearchFormTab()
    {
       
$visitor = \XF::visitor();
        if (!
$visitor->canViewProfilePosts())
        {
            return
null;
        }

        return [
           
'title' => \XF::phrase('search_profile_posts'),
           
'order' => 1000
       
];
    }

    public function
getSectionContext()
    {
        return
'members';
    }

    public function
applyTypeConstraintsFromInput(\XF\Search\Query\Query $query, \XF\Http\Request $request, array &$urlConstraints)
    {
       
$profileUser = $request->filter('c.profile_users', 'str');
        if (
$profileUser)
        {
           
$users = Arr::stringToArray($profileUser, '/,\s*/');
            if (
$users)
            {
               
/** @var \XF\Repository\User $userRepo */
               
$userRepo = \XF::repository('XF:User');
               
$matchedUsers = $userRepo->getUsersByNames($users, $notFound);
                if (
$notFound)
                {
                   
$query->error(
                       
'users',
                        \
XF::phrase('following_members_not_found_x', ['members' => implode(', ', $notFound)])
                    );
                }
                else
                {
                   
$query->withMetadata('profile_user', $matchedUsers->keys());
                   
$urlConstraints['profile_users'] = implode(', ', $users);
                }
            }
        }
    }

    public function
canUseInlineModeration(Entity $entity, &$error = null)
    {
       
/** @var \XF\Entity\ProfilePost $entity */
       
return $entity->canUseInlineModeration($error);
    }
}