GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Pull Request — master (#191)
by Herbert
10:39
created

AuditEntry   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 191
Duplicated Lines 0 %

Coupling/Cohesion

Components 3
Dependencies 14

Test Coverage

Coverage 84.62%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
dl 0
loc 191
ccs 66
cts 78
cp 0.8462
rs 10
c 2
b 0
f 0
wmc 24
lcom 3
cbo 14

13 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 8 2
A attributeLabels() 0 12 1
A tableName() 0 4 1
A getLinkedErrors() 0 4 1
A getTrails() 0 4 1
A getMails() 0 4 1
A getJavascripts() 0 4 1
A getData() 0 4 1
A addBatchData() 0 17 2
A addData() 0 11 1
A record() 0 17 4
A finalize() 0 13 3
B hasRelatedData() 0 16 5
1
<?php
2
3
namespace bedezign\yii2\audit\models;
4
5
use bedezign\yii2\audit\Audit;
6
use bedezign\yii2\audit\components\db\ActiveRecord;
7
use bedezign\yii2\audit\components\Helper;
8
use Yii;
9
use yii\db\ActiveQuery;
10
use yii\db\Expression;
11
12
/**
13
 * AuditEntry
14
 * @package bedezign\yii2\audit\models
15
 *
16
 * @property int               $id
17
 * @property string            $created
18
 * @property float             $duration
19
 * @property int               $user_id        0 means anonymous
20
 * @property string            $ip
21
 * @property string            $route
22
 * @property int               $memory_max
23
 * @property string            $request_method
24
 * @property string            $ajax
25
 *
26
 * @property AuditError[]      $linkedErrors
27
 * @property AuditJavascript[] $javascripts
28
 * @property AuditTrail[]      $trails
29
 * @property AuditMail[]       $mails
30
 * @property AuditData[]       $data
31
 */
32
class AuditEntry extends ActiveRecord
33
{
34
    /**
35
     * @var bool
36
     */
37
    protected $autoSerialize = false;
38
39
    /**
40
     * @inheritdoc
41
     */
42 130
    public static function tableName()
43
    {
44 130
        return '{{%audit_entry}}';
45
    }
46
47
    /**
48
     * @param bool $initialise
49
     * @return static
50
     */
51 78
    public static function create($initialise = true)
52
    {
53 78
        $entry = new static;
54
        if ($initialise)
55 78
            $entry->record();
56
57 78
        return $entry;
58
    }
59
60
    /**
61
     * Returns all linked AuditError instances
62
     * (Called `linkedErrors()` to avoid confusion with the `getErrors()` method)
63
     * @return ActiveQuery
64
     */
65 6
    public function getLinkedErrors()
66
    {
67 6
        return static::hasMany(AuditError::className(), ['entry_id' => 'id']);
68
    }
69
70
    /**
71
     * Returns all linked AuditTrail instances
72
     * @return ActiveQuery
73
     */
74 6
    public function getTrails()
75
    {
76 6
        return static::hasMany(AuditTrail::className(), ['entry_id' => 'id']);
77
    }
78
79
    /**
80
     * Returns all linked AuditMail instances
81
     * @return ActiveQuery
82
     */
83 6
    public function getMails()
84
    {
85 6
        return static::hasMany(AuditMail::className(), ['entry_id' => 'id']);
86
    }
87
88
    /**
89
     * Returns all linked AuditJavascript instances
90
     * @return ActiveQuery
91
     */
92 6
    public function getJavascripts()
93
    {
94 6
        return static::hasMany(AuditJavascript::className(), ['entry_id' => 'id']);
95
    }
96
97
    /**
98
     * Returns all linked data records
99
     * @return ActiveQuery
100
     */
101 2
    public function getData()
102
    {
103 2
        return static::hasMany(AuditData::className(), ['entry_id' => 'id'])->indexBy('type');
104
    }
105
106
    /**
107
     * Writes a number of associated data records in one go.
108
     * @param      $batchData
109
     * @param bool $compact
110
     * @throws \yii\db\Exception
111
     */
112 30
    public function addBatchData($batchData, $compact = true)
113
    {
114 30
        $columns = ['entry_id', 'type', 'created', 'data'];
115 30
        $rows = [];
116 30
        $params = [];
117 30
        $date = date('Y-m-d H:i:s');
118
        // Some database like postgres depend on the data being escaped correctly.
119
        // PDO can take care of this if you define the field as a LOB (Large OBject), but unfortunately Yii does threat values
120
        // for batch inserts the same way. This code adds a number of literals instead of the actual values
121
        // so that they can be bound right before insert and still get escaped correctly
122 30
        foreach ($batchData as $type => $data) {
123 30
            $param = ':data_' . str_replace('/', '_', $type);
124 30
            $rows[] = [$this->id, $type, $date, new Expression($param)];
125 30
            $params[$param] = [Helper::serialize($data, $compact), \PDO::PARAM_LOB];
126 30
        }
127 30
        static::getDb()->createCommand()->batchInsert(AuditData::tableName(), $columns, $rows)->bindValues($params)->execute();
128 30
    }
129
130
    /**
131
     * @param $type
132
     * @param $data
133
     * @param bool|true $compact
134
     * @throws \yii\db\Exception
135
     */
136 4
    public function addData($type, $data, $compact = true)
137
    {
138
        // Make sure to mark data as a large object so it gets escaped
139
        $record = [
140 4
            'entry_id' => $this->id,
141 4
            'type' => $type,
142 4
            'created' => date('Y-m-d H:i:s'),
143 4
            'data' => [Helper::serialize($data, $compact), \PDO::PARAM_LOB],
144 4
        ];
145 4
        static::getDb()->createCommand()->insert(AuditData::tableName(), $record)->execute();
146 4
    }
147
148
    /**
149
     * Records the current application state into the instance.
150
     */
151 78
    public function record()
152
    {
153 78
        $app = Yii::$app;
154 78
        $request = $app->request;
155
156 78
        $this->route = $app->requestedAction ? $app->requestedAction->uniqueId : null;
157 78
        if ($request instanceof \yii\web\Request) {
158 78
            $this->user_id        = Audit::getInstance()->getUserId();
159 78
            $this->ip             = $request->userIP;
160 78
            $this->ajax           = $request->isAjax;
161 78
            $this->request_method = $request->method;
162 78
        } else if ($request instanceof \yii\console\Request) {
163
            $this->request_method = 'CLI';
164
        }
165
166 78
        $this->save(false);
167 78
    }
168
169
    /**
170
     * @return bool
171
     */
172 50
    public function finalize()
173
    {
174 50
        $app = Yii::$app;
175 50
        $request = $app->request;
176
177 50
        if (!$this->user_id && $request instanceof \yii\web\Request) {
178 50
            $this->user_id = Audit::getInstance()->getUserId();
179 50
        }
180
181 50
        $this->duration = microtime(true) - YII_BEGIN_TIME;
182 50
        $this->memory_max = memory_get_peak_usage();
183 50
        return $this->save(false, ['duration', 'memory_max', 'user_id']);
184
    }
185
186
    /**
187
     * @return array
188
     */
189 10
    public function attributeLabels()
190
    {
191
        return [
192 10
            'id'             => Yii::t('audit', 'Entry ID'),
193 10
            'created'        => Yii::t('audit', 'Created'),
194 10
            'ip'             => Yii::t('audit', 'IP'),
195 10
            'duration'       => Yii::t('audit', 'Duration'),
196 10
            'user_id'        => Yii::t('audit', 'User'),
197 10
            'memory_max'     => Yii::t('audit', 'Memory'),
198 10
            'request_method' => Yii::t('audit', 'Request Method'),
199 10
        ];
200
    }
201
202
    /**
203
     * @return bool
204
     */
205
    public function hasRelatedData()
206
    {
207
        if ($this->getLinkedErrors()->count()) {
208
            return true;
209
        }
210
        if ($this->getJavascripts()->count()) {
211
            return true;
212
        }
213
        if ($this->getMails()->count()) {
214
            return true;
215
        }
216
        if ($this->getTrails()->count()) {
217
            return true;
218
        }
219
        return false;
220
    }
221
222
}
223