AbstractHookController::addMessageToQueue()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 5
cts 5
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
/**
3
 * T3Bot.
4
 *
5
 * @author Frank Nägler <[email protected]>
6
 *
7
 * @link http://www.t3bot.de
8
 * @link http://wiki.typo3.org/T3Bot
9
 */
10
namespace T3Bot\Controller;
11
12
use Doctrine\DBAL\Configuration;
13
use Doctrine\DBAL\DriverManager;
14
use T3Bot\Slack\Message;
15
use T3Bot\Traits\SlackTrait;
16
17
/**
18
 * Class AbstractHookController.
19
 */
20
abstract class AbstractHookController
21
{
22
    use SlackTrait;
23
24
    /**
25
     * @var array
26
     */
27
    protected $configuration;
28
29
    /**
30
     * GerritHookController constructor.
31
     *
32
     * @param array $configuration
33
     */
34 22
    public function __construct(array $configuration = [])
35
    {
36 22
        $this->configuration = $configuration;
37 22
    }
38
39
    /**
40
     * public method to start processing the request.
41
     *
42
     * @param string $hook
43
     * @param string $input
44
     *
45
     * @throws \Doctrine\DBAL\DBALException
46
     */
47
    abstract public function process($hook, $input = 'php://input');
48
49
    /**
50
     * @param Message $payload
51
     * @param string  $channel
52
     *
53
     * @throws \Doctrine\DBAL\DBALException
54
     */
55 3
    protected function postToSlack(Message $payload, $channel)
56
    {
57 3
        $data = $this->getBaseDataArray($payload->getText(), $channel);
58 3
        $attachments = $payload->getAttachments();
59 3 View Code Duplication
        if (count($attachments)) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
60 3
            $data['attachments'] = [];
61 3
            foreach ($attachments as $attachment) {
62 3
                $data['attachments'][] = $this->buildAttachment($attachment);
63
            }
64
        }
65 3
        if (!empty($this->configuration['slack']['botAvatar'])) {
66 3
            $data['icon_emoji'] = $this->configuration['slack']['botAvatar'];
67
        }
68 3
        $this->addMessageToQueue($data);
69 3
    }
70
71
    /**
72
     * @param array $data
73
     *
74
     * @throws \Doctrine\DBAL\DBALException
75
     */
76 2
    protected function addMessageToQueue(array $data)
77
    {
78 2
        $config = new Configuration();
79 2
        $db = DriverManager::getConnection($this->configuration['db'], $config);
80 2
        $db->insert('messages', ['message' => json_encode($data)]);
81 2
    }
82
83
    /**
84
     * @param string $haystack
85
     * @param string $needle
86
     *
87
     * @return bool
88
     */
89 5
    protected function endsWith($haystack, $needle) : bool
90
    {
91
        // search forward starting from end minus needle length characters
92 5
        return $needle === '' || (
93 5
            ($temp = strlen($haystack) - strlen($needle)) >= 0
94 5
            && strpos($haystack, $needle, $temp) !== false
95
        );
96
    }
97
}
98