Completed
Push — master ( 7f2995...4556a8 )
by Владислав
02:13
created

DeCaptchaWiki::line()   B

Complexity

Conditions 5
Paths 4

Size

Total Lines 18
Code Lines 15

Duplication

Lines 10
Ratio 55.56 %

Importance

Changes 0
Metric Value
dl 10
loc 18
rs 8.8571
c 0
b 0
f 0
cc 5
eloc 15
nc 4
nop 3
1
<?php
2
3
namespace jumper423\decaptcha\core;
4
5
use jumper423\decaptcha\services\AnticaptchaReCaptcha;
6
use jumper423\decaptcha\services\RuCaptcha;
7
8
/**
9
 * Class DeCaptchaAbstract.
10
 */
11
class DeCaptchaWiki
12
{
13
    private $texts = [];
14
15
    public function __construct()
16
    {
17
        $this->texts = [
18
            DeCaptchaBase::ACTION_FIELD_KEY => [
19
                'name' => [
20
                    'ru' => 'Ключ',
21
                ],
22
                'desc' => [
23
                    'ru' => 'Ключ от учетной записи',
24
                ],
25
            ],
26
            DeCaptchaBase::ACTION_FIELD_LANGUAGE => [
27
                'name' => [
28
                    'ru' => 'Язык',
29
                ],
30
                'desc' => [
31
                    'ru' => 'На каком языке текст на капче',
32
                ],
33
            ],
34
            DeCaptchaBase::ACTION_FIELD_FILE => [
35
                'name' => [
36
                    'ru' => 'Картинка',
37
                ],
38
                'desc' => [
39
                    'ru' => 'Путь на файл с картинкой или ссылка на него',
40
                ],
41
            ],
42
            DeCaptchaBase::ACTION_FIELD_PHRASE => [
43
                'name' => [
44
                    'ru' => 'Несколько слов',
45
                ],
46
                'desc' => [
47
                    'ru' => 'Работник должен ввести текст с одним или несколькими пробелами',
48
                ],
49
            ],
50
            DeCaptchaBase::ACTION_FIELD_REGSENSE => [
51
                'name' => [
52
                    'ru' => 'Регистр',
53
                ],
54
                'desc' => [
55
                    'ru' => 'Работник должен ввсести ответ с учетом регистра',
56
                ],
57
            ],
58
            DeCaptchaBase::ACTION_FIELD_NUMERIC => [
59
                'name' => [
60
                    'ru' => 'Символы',
61
                ],
62
                'desc' => [
63
                    'ru' => 'Какие символы используется в капче',
64
                ],
65
            ],
66
            DeCaptchaBase::ACTION_FIELD_CALC => [
67
                'name' => [
68
                    'ru' => 'Вычисление',
69
                ],
70
                'desc' => [
71
                    'ru' => 'На капче изображенно математичекая выражение и её необходимо решить',
72
                ],
73
            ],
74
            DeCaptchaBase::ACTION_FIELD_MIN_LEN => [
75
                'name' => [
76
                    'ru' => 'Длина min',
77
                ],
78
                'desc' => [
79
                    'ru' => 'Минимальная длина капчи',
80
                ],
81
            ],
82
            DeCaptchaBase::ACTION_FIELD_MAX_LEN => [
83
                'name' => [
84
                    'ru' => 'Длина max',
85
                ],
86
                'desc' => [
87
                    'ru' => 'Максимальная длина капчи',
88
                ],
89
            ],
90
            DeCaptchaBase::ACTION_FIELD_QUESTION => [
91
                'name' => [
92
                    'ru' => 'Вопрос',
93
                ],
94
                'desc' => [
95
                    'ru' => 'На изображении задан вопрос, работник должен написать ответ',
96
                ],
97
            ],
98
            DeCaptchaBase::ACTION_FIELD_IS_RUSSIAN => [
99
                'name' => [
100
                    'ru' => 'Кириллица',
101
                ],
102
                'desc' => [
103
                    'ru' => 'На изображении присутствуют русские символы',
104
                ],
105
            ],
106
            DeCaptchaBase::ACTION_FIELD_LANGUAGE => [
107
                'name' => [
108
                    'ru' => 'Язык',
109
                ],
110
                'desc' => [
111
                    'ru' => 'Символы какого языка размещенны на капче',
112
                ],
113
            ],
114
            DeCaptchaBase::ACTION_FIELD_HEADER_ACAO => [
115
                'name' => [
116
                    'ru' => 'Кросс-доменный',
117
                ],
118
                'desc' => [
119
                    'ru' => 'Необходимо для кросс-доменных AJAX запросов в браузерных приложениях.',
120
                ],
121
            ],
122
            DeCaptchaBase::ACTION_FIELD_TEXTINSTRUCTIONS => [
123
                'name' => [
124
                    'ru' => 'Инструкция',
125
                ],
126
                'desc' => [
127
                    'ru' => 'Текстовая капча или инструкция для прохождения капчи.',
128
                ],
129
            ],
130
            DeCaptchaBase::ACTION_FIELD_PINGBACK => [
131
                'name' => [
132
                    'ru' => 'Ответ на',
133
                ],
134
                'desc' => [
135
                    'ru' => 'Указание для сервера, что после распознания изображения, нужно отправить ответ на указанный адрес.',
136
                ],
137
            ],
138
            DeCaptchaBase::ACTION_FIELD_LABEL => [
139
                'name' => [
140
                    'ru' => 'От куда',
141
                ],
142
                'desc' => [
143
                    'ru' => 'Пояснение от куда пришла капча ("vk", "google", "recaptcha", "yandex", "mailru", "yahoo" и т.д.).',
144
                ],
145
            ],
146
            DeCaptchaBase::ACTION_FIELD_PAGEURL => [
147
                'name' => [
148
                    'ru' => 'Адрес',
149
                ],
150
                'desc' => [
151
                    'ru' => 'Адрес страницы на которой решается капча.',
152
                ],
153
            ],
154
            DeCaptchaBase::ACTION_FIELD_GOOGLEKEY => [
155
                'name' => [
156
                    'ru' => 'Google key',
157
                ],
158
                'desc' => [
159
                    'ru' => 'Ключ-индентификатор рекапчи на целевой странице. <div class="g-recaptcha" data-sitekey="ВОТ_ЭТОТ"></div>',
160
                ],
161
            ],
162
            DeCaptchaBase::ACTION_FIELD_GOOGLETOKEN => [
163
                'name' => [
164
                    'ru' => 'Google token',
165
                ],
166
                'desc' => [
167
                    'ru' => 'Секретный токен для предыдущей версии рекапчи. В большинстве случаев сайты используют новую версию и этот токен не требуется. Секретный токен генерируется на сервере Google и вставляется на страницу в атрибуте data-stoken. Выглядит это примерно так: <script type="text/javascript" src="...." data-type="normal"  data-ray="..." async data-sitekey="..." data-stoken="ВОТ_ЭТОТ"></script> Токен действует пару минут после генерации, затем нужно снова зайти на страницу и получить его.',
168
                ],
169
            ],
170
            DeCaptchaBase::ACTION_FIELD_PROXYTYPE => [
171
                'name' => [
172
                    'ru' => 'Тип прокси',
173
                ],
174
                'desc' => [
175
                    'ru' => 'Тип прокси (http, socks4, ...)',
176
                ],
177
            ],
178
            DeCaptchaBase::ACTION_FIELD_PROXY => [
179
                'name' => [
180
                    'ru' => 'Адрес прокси',
181
                ],
182
                'desc' => [
183
                    'ru' => 'IP адрес прокси ipv4/ipv6.',
184
                ],
185
            ],
186
            DeCaptchaBase::ACTION_FIELD_PROXYPORT => [
187
                'name' => [
188
                    'ru' => 'Порт прокси',
189
                ],
190
                'desc' => [
191
                    'ru' => 'Порт прокси.',
192
                ],
193
            ],
194
            DeCaptchaBase::ACTION_FIELD_PROXYLOGIN => [
195
                'name' => [
196
                    'ru' => 'Логин прокси',
197
                ],
198
                'desc' => [
199
                    'ru' => 'Логин от прокси-сервера.',
200
                ],
201
            ],
202
            DeCaptchaBase::ACTION_FIELD_PROXYPASS => [
203
                'name' => [
204
                    'ru' => 'Пароль прокси',
205
                ],
206
                'desc' => [
207
                    'ru' => 'Пароль от прокси-сервера.',
208
                ],
209
            ],
210
            DeCaptchaBase::ACTION_FIELD_USERAGENT => [
211
                'name' => [
212
                    'ru' => 'User-Agent браузера',
213
                ],
214
                'desc' => [
215
                    'ru' => 'User-Agent браузера, используемый в эмуляции. Необходимо использовать подпись современного браузера, иначе Google будет возвращать ошибку, требуя обновить браузер.',
216
                ],
217
            ],
218
            DeCaptchaBase::ACTION_FIELD_COOKIES => [
219
                'name' => [
220
                    'ru' => 'Куки',
221
                ],
222
                'desc' => [
223
                    'ru' => 'Дополнительные cookies которые мы должны использовать во время взаимодействия с целевой страницей.',
224
                ],
225
            ],
226
        ];
227
    }
228
229
    public function view()
230
    {
231
        $rucaptcha = new AnticaptchaReCaptcha([]);
232
        /*
233
         * Markdown | Less | Pretty
234
            --- | --- | ---
235
            *Still* | `renders` | **nicely**
236
            1 | 2 | 3
237
         *
238
         * */
239
        echo ' Название | Код | Тип | Обязательное | По умолчания | Возможные значения | Описание '.PHP_EOL;
240
        echo ' --- | --- | --- | --- | --- | ---| --- '.PHP_EOL;
241
        $rr = (new \ReflectionClass($rucaptcha))->getConstants();
242
//        print_r($rucaptcha->actions);
0 ignored issues
show
Unused Code Comprehensibility introduced by
63% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
243
        foreach ($rucaptcha->actions[RuCaptcha::ACTION_RECOGNIZE][RuCaptcha::ACTION_FIELDS] as $param => $setting) {
244
            if (array_key_exists(RuCaptcha::ACTION_FIELDS, $setting) && is_array($setting[RuCaptcha::ACTION_FIELDS])) {
245
                foreach ($setting[RuCaptcha::ACTION_FIELDS] as $param1 => $setting1) {
246
                    if (array_key_exists(RuCaptcha::PARAM_SLUG_NOTWIKI, $setting1) && $setting1[RuCaptcha::PARAM_SLUG_NOTWIKI] === true) {
247
                        continue;
248
                    }
249
                    $this->line($rr, $param1, $setting1);
250
                }
251
            }
252
            if (array_key_exists(RuCaptcha::PARAM_SLUG_NOTWIKI, $setting) && $setting[RuCaptcha::PARAM_SLUG_NOTWIKI] === true) {
253
                continue;
254
            }
255
            $this->line($rr, $param, $setting);
256
//            echo " --- | --- | --- | --- | ---| --- " . PHP_EOL;
0 ignored issues
show
Unused Code Comprehensibility introduced by
44% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
257
//            print_r($params);
258
        }
259
//        $rr = get_defined_constants(true);
0 ignored issues
show
Unused Code Comprehensibility introduced by
56% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
260
//        print_r(array_keys($rr));
261
//        print_r($rr);
262
//        file_put_contents(__DIR__ . '/12331123', json_encode(get_defined_constants(true)));
263
    }
264
265
    public function line($rr, $param, $setting){
266 View Code Duplication
        if (isset($this->texts[$param])) {
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...
267
            echo " {$this->texts[$param]['name']['ru']} |";
268
        } else {
269
            echo ' |';
270
        }
271
        echo " {$this->ggg($rr, 'ACTION_FIELD_', $param)} |";
272
        echo ' '.substr($this->ggg($rr, 'PARAM_FIELD_TYPE_', $setting[RuCaptcha::PARAM_SLUG_TYPE]), 17).' |';
273
        echo ' '.(array_key_exists(RuCaptcha::PARAM_SLUG_REQUIRE, $setting) ? '+' : '-').' |';
274
        echo ' '.(array_key_exists(RuCaptcha::PARAM_SLUG_DEFAULT, $setting) ? $setting[RuCaptcha::PARAM_SLUG_DEFAULT] : '').' |';
275
        echo ' |';
276 View Code Duplication
        if (isset($this->texts[$param])) {
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...
277
            echo " {$this->texts[$param]['desc']['ru']} ";
278
        } else {
279
            echo ' ';
280
        }
281
        echo PHP_EOL;
282
    }
283
284
    public function ggg($constants, $keyMask, $value)
285
    {
286
        foreach ($constants as $key => $val) {
287
            if (stripos($key, $keyMask) !== false && $val === $value) {
288
                return $key;
289
            }
290
        }
291
292
        return null;
293
    }
294
}
295