Completed
Push — master ( 5615a3...44c311 )
by butschster
07:55
created

KarmaRenderMiddleware::getAchievements()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 15
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 15
rs 9.4285
cc 3
eloc 8
nc 4
nop 1
1
<?php
2
namespace Domains\Bot\Middlewares;
3
4
use Domains\Message;
5
use Domains\Middleware\MiddlewareInterface;
6
7
/**
8
 * Проверяет слово "карма" и выводит статус
9
 *
10
 * Class KarmaRenderMiddleware
11
 */
12
class KarmaRenderMiddleware implements MiddlewareInterface
13
{
14
    /**
15
     * @param Message $message
16
     * @return mixed
17
     */
18
    public function handle(Message $message)
19
    {
20
        if (in_array(trim(mb_strtolower($message->text)), trans('request.karma'), true)) {
21
            $args = [
22
                'user' => $message->user->login,
23
                'karma' => $message->user->karma_text,
24
                'thanks' => $message->user->thanks_text,
25
            ];
26
27
            $karmaMessage = [];
28
29
            // Karma info
30
            $karmaMessage[] = $args['karma']
31
                ? trans('karma.count.message', $args)
32
                : trans('karma.count.empty', $args);
33
34
            // If has achievements
35
            $achievements = $this->getAchievements($message);
36
            if ($achievements) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $achievements of type string|null is loosely compared to true; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
37
                $karmaMessage[] = $achievements;
38
            }
39
40
            $groups = $message->getRoom()->groups();
41
42
            if (in_array('karma', $groups)) {
43
                $karmaMessage[] = '[list]';
44
                foreach ($groups as $group) {
45
                    if (trans()->has($key = "karma.account.{$group}")) {
0 ignored issues
show
Bug introduced by
The method has cannot be called on trans() (of type string).

Methods can only be called on objects. This check looks for methods being called on variables that have been inferred to never be objects.

Loading history...
46
                        $karmaMessage[] = trans($key, $args);
47
                    }
48
                }
49
                $karmaMessage[] = '[/list]';
50
            }
51
52
            $message->answer(implode("\n", $karmaMessage));
53
54
            return null;
55
        }
56
57
        return $message;
58
    }
59
60
    /**
61
     * @param Message $message
62
     * @return null|string
63
     */
64
    protected function getAchievements(Message $message)
65
    {
66
        $achievements = [];
67
        foreach ($message->user->achievements as $achieve) {
68
            $achievements[] = '"' . $achieve->title . '"';
69
        }
70
71
        if (count($achievements)) {
72
            return trans('karma.achievements', [
73
                'achievements' => implode(', ', $achievements),
74
            ]);
75
        }
76
77
        return null;
78
    }
79
}
80