ToStd   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 160
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 50
c 2
b 0
f 0
dl 0
loc 160
ccs 0
cts 40
cp 0
rs 10
wmc 16

6 Methods

Rating   Name   Duplication   Size   Complexity  
A singleton() 0 7 3
A __construct() 0 3 1
A addToLog() 0 30 4
A output() 0 13 2
A finalizeMessage() 0 3 1
A flush() 0 16 5
1
<?php
2
/**
3
 * Log to stdout/stderr
4
 *
5
 * @author    Vitex <[email protected]>
6
 * @copyright 2009-2016 [email protected] (G)
7
 */
8
9
namespace Ease\Logger;
10
11
/**
12
 * Log to syslog.
13
 *
14
 * @author    Vitex <[email protected]>
15
 * @copyright 2009-2019 [email protected] (G)
16
 */
17
class ToStd extends ToMemory implements Loggingable
18
{
19
    /**
20
     * Pole uložených zpráv.
21
     *
22
     * @var array
23
     */
24
    public $statusMessages = [];
25
26
    /**
27
     * ID naposledy ulozene zpravy.
28
     *
29
     * @var int unsigned
30
     */
31
    private $messageID = 0;
32
33
    /**
34
     * List of allready flushed messages.
35
     *
36
     * @var array
37
     */
38
    public $flushed = [];
39
40
    /**
41
     * Saves obejct instace (singleton...).
42
     */
43
    private static $instance = null;
44
45
    /**
46
     * Log Name
47
     *
48
     * @var string
49
     */
50
    public $logName = null;
51
52
    /**
53
     * Logovací třída.
54
     *
55
     * @param string $logName symbolic name for log
56
     */
57
    public function __construct($logName = null)
58
    {
59
        $this->logName = $logName;
60
    }
61
62
    /**
63
     * Pri vytvareni objektu pomoci funkce singleton (ma stejne parametry, jako
64
     * konstruktor) se bude v ramci behu programu pouzivat pouze jedna jeho
65
     * instance (ta prvni).
66
     *
67
     * @link http://docs.php.net/en/language.oop5.patterns.html Dokumentace a
68
     * priklad
69
     */
70
    public static function singleton()
71
    {
72
        if (!isset(self::$instance)) {
73
            self::$instance = new self(defined('EASE_APPNAME') ? constant('EASE_APPNAME') : 'EaseFramework');
74
        }
75
76
        return self::$instance;
77
    }
78
79
    /**
80
     * Zapise zapravu do logu.
81
     *
82
     * @param string $caller  název volajícího objektu
83
     * @param string $message zpráva
84
     * @param string $type    typ zprávy (success|info|error|warning|*)
85
     *
86
     * @return null|boolean byl report zapsán ?
87
     */
88
    public function addToLog($caller, $message, $type = 'message')
89
    {
90
        ++$this->messageID;
91
92
        $this->statusMessages[$type][$this->messageID] = $message;
93
94
        $message = htmlspecialchars_decode(strip_tags(stripslashes($message)));
95
96
        $user = \Ease\User::singleton();
97
        if (get_class($user) !== 'Ease\\Anonym') {
98
            if (method_exists($user, 'getUserName')) {
99
                $person = $user->getUserName();
100
            } else {
101
                $person = $user->getObjectName();
102
            }
103
            $caller = $person.' '.$caller;
104
        }
105
106
        $logLine = ' `'.$caller.'` '.str_replace(
107
            ['notice', 'message', 'debug', 'report',
108
                'error', 'warning', 'success', 'info', 'mail',],
109
            ['**', '##', '@@', '::'], $type
110
        ).' '.$message."\n";
111
        if (!isset($this->logStyles[$type])) {
112
            $type = 'notice';
113
        }
114
115
        $this->output($type, $logLine);
116
117
        return true;
118
    }
119
120
    /**
121
     * Output logline to stderr/stdout by its type
122
     *
123
     * @param string $type    message type 'error' or anything else
124
     * @param string $logLine message to output
125
     */
126
    public function output($type, $logLine)
127
    {
128
        switch ($type) {
129
        case 'error':
130
            $stderr = fopen('php://stderr', 'w');
131
            fwrite($stderr, $this->logName.': '.$logLine);
0 ignored issues
show
Bug introduced by
It seems like $stderr can also be of type false; however, parameter $handle of fwrite() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

131
            fwrite(/** @scrutinizer ignore-type */ $stderr, $this->logName.': '.$logLine);
Loading history...
132
            fclose($stderr);
0 ignored issues
show
Bug introduced by
It seems like $stderr can also be of type false; however, parameter $handle of fclose() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

132
            fclose(/** @scrutinizer ignore-type */ $stderr);
Loading history...
133
            break;
134
        default:
135
            $stdout = fopen('php://stdout', 'w');
136
            fwrite($stdout, $this->logName.': '.$logLine);
137
            fclose($stdout);
138
            break;
139
        }
140
    }
141
142
    /**
143
     * Last message check/modify point before output
144
     *
145
     * @param string $messageRaw
146
     *
147
     * @return string ready to use message
148
     */
149
    public function finalizeMessage($messageRaw)
150
    {
151
        return trim($messageRaw).PHP_EOL;
152
    }
153
154
    /**
155
     * Flush Messages.
156
     *
157
     * @param string $caller
158
     *
159
     * @return int how many messages was flushed
160
     */
161
    public function flush($caller = null)
162
    {
163
        $flushed = 0;
164
        if (count($this->statusMessages)) {
165
            foreach ($this->statusMessages as $type => $messages) {
166
                foreach ($messages as $messageID => $message) {
167
                    if (!isset($this->flushed[$type][$messageID])) {
168
                        $this->addToLog($caller, $message, $type);
169
                        $this->flushed[$type][$messageID] = true;
170
                        ++$flushed;
171
                    }
172
                }
173
            }
174
        }
175
176
        return $flushed;
177
    }
178
}
179