Passed
Push — master ( 84eed8...6d6bcb )
by Alexey
02:52
created

FileState::getPageSize()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
c 0
b 0
f 0
dl 0
loc 3
rs 10
cc 2
nc 1
nop 0
1
<?php
2
3
namespace dominus77\maintenance\states;
4
5
use Yii;
6
use Exception;
7
use yii\base\BaseObject;
8
use dominus77\maintenance\interfaces\StateInterface;
9
use dominus77\maintenance\models\FileStateForm;
10
11
/**
12
 * Class FileState
13
 * @package dominus77\maintenance\states
14
 *
15
 * @property array|mixed $subscribeOptionsTemplate
16
 * @property string $fileStatePath
17
 */
18
class FileState extends BaseObject implements StateInterface
19
{
20
    /**
21
     * @var string the filename that will determine if the maintenance mode is enabled
22
     */
23
    public $fileName = 'YII_MAINTENANCE_MODE_ENABLED';
24
25
    /**
26
     * Default title
27
     * @var string
28
     */
29
    public $defaultTitle = 'Maintenance';
30
31
    /**
32
     * Default content
33
     * @var string
34
     */
35
    public $defaultContent = 'The site is undergoing technical work. We apologize for any inconvenience caused.';
36
37
    /**
38
     * @var string name of the file where subscribers will be stored
39
     */
40
    public $fileSubscribe = 'YII_MAINTENANCE_MODE_SUBSCRIBE';
41
42
    /**
43
     * Options SubscribeFormWidget
44
     * @var array
45
     */
46
    public $subscribeOptions = [];
47
48
    /**
49
     * @var string the directory in that the file stated in $fileName above is residing
50
     */
51
    public $directory = '@runtime';
52
53
    /**
54
     * @var string the complete path of the file - populated in init
55
     */
56
    public $path;
57
58
    /**
59
     * @var string the complete path of the file subscribe - populated in init
60
     */
61
    public $subscribePath;
62
63
    /**
64
     * Enter Datetime format
65
     * @var string
66
     */
67
    public $dateFormat = 'd-m-Y H:i:s';
68
69
    /**
70
     * Page size to backend
71
     * @var int
72
     */
73
    public $pageSize = 16;
74
75
    /**
76
     * Initialization
77
     */
78
    public function init()
79
    {
80
        $this->path = $this->getFilePath($this->fileName);
81
        $this->subscribePath = $this->getFilePath($this->fileSubscribe);
82
    }
83
84
    /**
85
     * Turn on mode.
86
     *
87
     * @return bool|mixed
88
     */
89
    public function enable()
90
    {
91
        $this->disable();
92
        file_put_contents($this->getFileStatePath(),
93
            'The maintenance Mode of your Application is enabled if this file exists.');
94
        chmod($this->path, 0765);
95
        return true;
96
    }
97
98
    /**
99
     * Turn off mode.
100
     *
101
     * @return bool|mixed
102
     */
103
    public function disable()
104
    {
105
        if (file_exists($this->getFileStatePath())) {
106
            unlink($this->getFileStatePath());
107
        }
108
        return true;
109
    }
110
111
    /**
112
     * @return bool will return true if the file exists
113
     */
114
    public function isEnabled()
115
    {
116
        return file_exists($this->getFileStatePath());
117
    }
118
119
    /**
120
     * Timestamp
121
     *
122
     * @return int
123
     * @throws Exception
124
     */
125
    public function timestamp()
126
    {
127
        $model = new FileStateForm();
128
        return $model->getTimestamp();
129
    }
130
131
    /**
132
     * Status code
133
     * @return int|string
134
     */
135
    public function statusCode()
136
    {
137
        $model = new FileStateForm();
138
        return $model->getStatusCode();
139
    }
140
141
    /**
142
     * @return string
143
     */
144
    public function getDateFormat()
145
    {
146
        return $this->dateFormat;
147
    }
148
149
    /**
150
     * @return string
151
     */
152
    public function getDefaultTitle()
153
    {
154
        return $this->defaultTitle;
155
    }
156
157
    /**
158
     * @return string
159
     */
160
    public function getDefaultContent()
161
    {
162
        return $this->defaultContent;
163
    }
164
165
    /**
166
     * @return int
167
     */
168
    public function getPageSize()
169
    {
170
        return (int)$this->pageSize ?: 18;
171
    }
172
173
    /**
174
     * @return string
175
     */
176
    public function getFileStatePath()
177
    {
178
        return $this->path;
179
    }
180
181
    /**
182
     * @return string
183
     */
184
    public function getSubscribePath()
185
    {
186
        return $this->subscribePath;
187
    }
188
189
    /**
190
     * @return array
191
     */
192
    public function getSubscribeOptions()
193
    {
194
        return $this->subscribeOptions;
195
    }
196
197
    /**
198
     * @return array|mixed
199
     */
200
    public function getSubscribeOptionsTemplate()
201
    {
202
        return (isset($this->subscribeOptions['template']) && !empty($this->subscribeOptions['template'])) ?
203
            $this->subscribeOptions['template'] : [
204
                'html' => '@dominus77/maintenance/mail/emailNotice-html',
205
                'text' => '@dominus77/maintenance/mail/emailNotice-text'
206
            ];
207
    }
208
209
    /**
210
     * Return file path.
211
     *
212
     * @param $fileName string
213
     * @return string
214
     */
215
    protected function getFilePath($fileName)
216
    {
217
        return (string)Yii::getAlias($this->directory . '/' . $fileName);
218
    }
219
}
220