Passed
Branch master (0828fa)
by Gabor
03:19
created

GetPublicationAuthorTrait::getPublicationAuthor()   B

Complexity

Conditions 3
Paths 4

Size

Total Lines 25
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 25
rs 8.8571
c 0
b 0
f 0
cc 3
eloc 16
nc 4
nop 2
1
<?php
2
/**
3
 * WebHemi.
4
 *
5
 * PHP version 7.1
6
 *
7
 * @copyright 2012 - 2017 Gixx-web (http://www.gixx-web.com)
8
 * @license   https://opensource.org/licenses/MIT The MIT License (MIT)
9
 *
10
 * @link      http://www.gixx-web.com
11
 */
12
declare(strict_types = 1);
13
14
namespace WebHemi\Middleware\Action\Traits;
15
16
use WebHemi\Data\Entity;
17
use WebHemi\Data\Storage;
18
use WebHemi\Router\ProxyInterface;
19
use WebHemi\Data\Traits\StorageInjectorTrait;
20
21
/**
22
 * Trait GetPublicationAuthorTrait
23
 */
24
trait GetPublicationAuthorTrait
25
{
26
    /**
27
     * @return null|Storage\User\UserStorage
28
     */
29
    abstract protected function getUserStorage() : ? Storage\User\UserStorage;
30
31
    /**
32
     * @return null|Storage\User\UserMetaStorage
33
     */
34
    abstract protected function getUserMetaStorage() : ? Storage\User\UserMetaStorage;
35
36
    /**
37
     * @return null|Storage\Filesystem\FilesystemDirectoryStorage
38
     */
39
    abstract protected function getFilesystemDirectoryStorage() : ? Storage\Filesystem\FilesystemDirectoryStorage;
40
41
    /**
42
     * Gets author information for a filesystem record.
43
     *
44
     * @param int $userId
45
     * @param int $applicationId
46
     * @return array
47
     */
48
    protected function getPublicationAuthor(int $userId, int $applicationId) : array
49
    {
50
        /** @var Entity\User\UserEntity $user */
51
        $user = $this->getUserStorage()
52
            ->getUserById($userId);
53
54
        /** @var array $userMeta */
55
        $userMeta = $this->getUserMetaStorage()
56
            ->getUserMetaSetForUserId($userId);
57
58
        /** @var array $userDirectoryData */
59
        $userDirectoryData = $this->getFilesystemDirectoryStorage()
60
            ->getDirectoryDataByApplicationAndProxy($applicationId, ProxyInterface::LIST_USER);
61
62
        return [
63
            'user_id' => $userId,
64
            'username' => $user->getUserName(),
65
            'url' => $userDirectoryData['uri'].'/'.$user->getUserName(),
66
            'name' => $userMeta['display_name'] ?? $user->getUserName(),
67
            'email' => ($userMeta['email_visible'] ?? 0) ? $user->getEmail() : '',
68
            'avatar' => ($userMeta['avatar_type'] ?? '') == 'gravatar'
69
                ? 'http://www.gravatar.com/avatar/'.md5(strtolower($userMeta['avatar'])).'?s=256&r=g'
70
                : $userMeta['avatar'] ?? ''
71
        ];
72
    }
73
}
74