Completed
Push — master ( 0421f6...79fa06 )
by Nekrasov
01:17
created

IBlock::setDefaultUrls()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 20
rs 9.6
c 0
b 0
f 0
cc 2
nc 2
nop 1
1
<?php
2
3
4
namespace Arrilot\BitrixMigrations\Constructors;
5
6
7
use Arrilot\BitrixMigrations\Logger;
8
use Bitrix\Main\Application;
9
10
class IBlock
11
{
12
    use FieldConstructor;
13
14
    /**
15
     * Добавить инфоблок
16
     * @throws \Exception
17
     */
18 View Code Duplication
    public function add()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in 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...
19
    {
20
        $obj = new \CIBlock();
21
22
        $iblockId = $obj->Add($this->getFieldsWithDefault());
23
        if (!$iblockId) {
24
            throw new \Exception($obj->LAST_ERROR);
25
        }
26
27
        Logger::log("Добавлен инфоблок {$this->fields['CODE']}", Logger::COLOR_GREEN);
28
29
        return $iblockId;
30
    }
31
32
    /**
33
     * Обновить инфоблок
34
     * @param $id
35
     * @throws \Exception
36
     */
37 View Code Duplication
    public function update($id)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in 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...
38
    {
39
        $obj = new \CIBlock();
40
        if (!$obj->Update($id, $this->fields)) {
41
            throw new \Exception($obj->LAST_ERROR);
42
        }
43
44
        Logger::log("Обновлен инфоблок {$id}", Logger::COLOR_GREEN);
45
    }
46
47
    /**
48
     * Удалить инфоблок
49
     * @param $id
50
     * @throws \Exception
51
     */
52
    public static function delete($id)
53
    {
54
        if (!\CIBlock::Delete($id)) {
55
            throw new \Exception('Ошибка при удалении инфоблока');
56
        }
57
58
        Logger::log("Удален инфоблок {$id}", Logger::COLOR_GREEN);
59
    }
60
61
    /**
62
     * Установить настройки для добавления инфоблока по умолчанию
63
     * @param $name
64
     * @param $code
65
     * @param $iblock_type_id
66
     * @return $this
67
     */
68
    public function constructDefault($name, $code, $iblock_type_id)
69
    {
70
        return $this->setName($name)->setCode($code)->setIblockTypeId($iblock_type_id);
71
    }
72
73
    /**
74
     * ID сайта.
75
     * @param string $siteId
76
     * @return $this
77
     */
78
    public function setSiteId($siteId)
79
    {
80
        $this->fields['SITE_ID'] = $siteId;
81
82
        return $this;
83
    }
84
85
    /**
86
     * Символьный идентификатор.
87
     * @param string $code
88
     * @return $this
89
     */
90
    public function setCode($code)
91
    {
92
        $this->fields['CODE'] = $code;
93
94
        return $this;
95
    }
96
97
    /**
98
     * Внешний код.
99
     * @param string $xml_id
100
     * @return $this
101
     */
102
    public function setXmlId($xml_id)
103
    {
104
        $this->fields['XML_ID'] = $xml_id;
105
106
        return $this;
107
    }
108
109
    /**
110
     * Код типа инфоблока
111
     * @param string $iblockTypeId
112
     * @return $this
113
     */
114
    public function setIblockTypeId($iblockTypeId)
115
    {
116
        $this->fields['IBLOCK_TYPE_ID'] = $iblockTypeId;
117
118
        return $this;
119
    }
120
121
    /**
122
     * Название.
123
     * @param string $name
124
     * @return $this
125
     */
126
    public function setName($name)
127
    {
128
        $this->fields['NAME'] = $name;
129
130
        return $this;
131
    }
132
133
    /**
134
     * Флаг активности
135
     * @param bool $active
136
     * @return $this
137
     */
138
    public function setActive($active = true)
139
    {
140
        $this->fields['ACTIVE'] = $active ? 'Y' : 'N';
141
142
        return $this;
143
    }
144
145
    /**
146
     * Индекс сортировки.
147
     * @param int $sort
148
     * @return $this
149
     */
150
    public function setSort($sort = 500)
151
    {
152
        $this->fields['SORT'] = $sort;
153
154
        return $this;
155
    }
156
157
    /**
158
     * Шаблон URL-а к странице для публичного просмотра списка элементов информационного блока.
159
     * @param string $listPageUrl
160
     * @return $this
161
     */
162
    public function setListPageUrl($listPageUrl)
163
    {
164
        $this->fields['LIST_PAGE_URL'] = $listPageUrl;
165
166
        return $this;
167
    }
168
169
    /**
170
     * Шаблон URL-а к странице для просмотра раздела.
171
     * @param string $sectionPageUrl
172
     * @return $this
173
     */
174
    public function setSectionPageUrl($sectionPageUrl)
175
    {
176
        $this->fields['SECTION_PAGE_URL'] = $sectionPageUrl;
177
178
        return $this;
179
    }
180
181
    /**
182
     * Канонический URL элемента.
183
     * @param string $canonicalPageUrl
184
     * @return $this
185
     */
186
    public function setCanonicalPageUrl($canonicalPageUrl)
187
    {
188
        $this->fields['CANONICAL_PAGE_URL'] = $canonicalPageUrl;
189
190
        return $this;
191
    }
192
193
    /**
194
     * URL детальной страницы элемента.
195
     *
196
     * @param string $detailPageUrl
197
     *
198
     * @return $this
199
     */
200
    public function setDetailPageUrl($detailPageUrl)
201
    {
202
        $this->fields['DETAIL_PAGE_URL'] = $detailPageUrl;
203
204
        return $this;
205
    }
206
207
    /**
208
     * Устанавливает значения по умолчанию для страниц инфоблока, раздела и деталей элемента
209
     * (как при создании через административный интерфейс или с ЧПУ).
210
     *
211
     * Для использовании ЧПУ рекомендуется сделать обязательными для заполнения символьный код
212
     * элементов и разделов инфоблока.
213
     *
214
     * @param bool sef Использовать ли ЧПУ (понадобится добавить правило в urlrewrite)
215
     *
216
     * @return IBlock
217
     */
218
    public function setDefaultUrls($sef = false)
219
    {
220
        if ($sef === true) {
221
            $prefix = "#SITE_DIR#/#IBLOCK_TYPE_ID#/#IBLOCK_CODE#/";
222
            $this
223
                ->setListPageUrl($prefix)
224
                ->setSectionPageUrl("$prefix#SECTION_CODE_PATH#/")
225
                ->setDetailPageUrl("$prefix#SECTION_CODE_PATH#/#ELEMENT_CODE#/");
226
227
            Logger::log('Рекомендуется сделать обязательными для заполнения символьный код элементов и разделов инфоблока.', Logger::COLOR_YELLOW);
228
        } else {
229
            $prefix = "#SITE_DIR#/#IBLOCK_TYPE_ID#";
230
            $this
231
                ->setListPageUrl("$prefix/index.php?ID=#IBLOCK_ID#")
232
                ->setSectionPageUrl("$prefix/list.php?SECTION_ID=#SECTION_ID#")
233
                ->setDetailPageUrl("$prefix/detail.php?ID=#ELEMENT_ID#");
234
        }
235
236
        return $this;
237
    }
238
239
    /**
240
     * Код картинки в таблице файлов.
241
     * @param array $picture
242
     * @return $this
243
     */
244
    public function setPicture($picture)
245
    {
246
        $this->fields['PICTURE'] = $picture;
247
248
        return $this;
249
    }
250
251
    /**
252
     * Описание.
253
     * @param string $description
254
     * @return $this
255
     */
256
    public function setDescription($description)
257
    {
258
        $this->fields['DESCRIPTION'] = $description;
259
260
        return $this;
261
    }
262
263
    /**
264
     * Тип описания (text/html)
265
     * @param string $descriptionType
266
     * @return $this
267
     */
268
    public function setDescriptionType($descriptionType = 'text')
269
    {
270
        $this->fields['DESCRIPTION_TYPE'] = $descriptionType;
271
272
        return $this;
273
    }
274
275
    /**
276
     * Разрешен экспорт в RSS динамически
277
     * @param bool $rssActive
278
     * @return $this
279
     */
280
    public function setRssActive($rssActive = true)
281
    {
282
        $this->fields['RSS_ACTIVE'] = $rssActive ? 'Y' : 'N';
283
284
        return $this;
285
    }
286
287
    /**
288
     * Время жизни RSS и интервал между генерациями файлов RSS (при включенном RSS_FILE_ACTIVE или RSS_YANDEX_ACTIVE) (часов).
289
     * @param int $rssTtl
290
     * @return $this
291
     */
292
    public function setRssTtl($rssTtl = 24)
293
    {
294
        $this->fields['RSS_TTL'] = $rssTtl;
295
296
        return $this;
297
    }
298
299
    /**
300
     * Прегенерировать выгрузку в файл.
301
     * @param bool $rssFileActive
302
     * @return $this
303
     */
304
    public function setRssFileActive($rssFileActive = false)
305
    {
306
        $this->fields['RSS_FILE_ACTIVE'] = $rssFileActive ? 'Y' : 'N';
307
308
        return $this;
309
    }
310
311
    /**
312
     * Количество экспортируемых в RSS файл элементов (при включенном RSS_FILE_ACTIVE)
313
     * @param int $rssFileLimit
314
     * @return $this
315
     */
316
    public function setRssFileLimit($rssFileLimit)
317
    {
318
        $this->fields['RSS_FILE_LIMIT'] = $rssFileLimit;
319
320
        return $this;
321
    }
322
323
    /**
324
     * За сколько последних дней экспортировать в RSS файл. (при включенном RSS_FILE_ACTIVE). -1 без ограничения по дням.
325
     * @param int $rssFileDays
326
     * @return $this
327
     */
328
    public function setRssFileDays($rssFileDays)
329
    {
330
        $this->fields['RSS_FILE_DAYS'] = $rssFileDays;
331
332
        return $this;
333
    }
334
335
    /**
336
     * Экспортировать в RSS файл в формате для yandex
337
     * @param bool $rssYandexActive
338
     * @return $this
339
     */
340
    public function setRssYandexActive($rssYandexActive = false)
341
    {
342
        $this->fields['RSS_YANDEX_ACTIVE'] = $rssYandexActive ? 'Y' : 'N';
343
344
        return $this;
345
    }
346
347
    /**
348
     * Индексировать для поиска элементы информационного блока.
349
     * @param bool $indexElement
350
     * @return $this
351
     */
352
    public function setIndexElement($indexElement = true)
353
    {
354
        $this->fields['INDEX_ELEMENT'] = $indexElement ? 'Y' : 'N';
355
356
        return $this;
357
    }
358
359
    /**
360
     * Индексировать для поиска разделы информационного блока.
361
     * @param bool $indexSection
362
     * @return $this
363
     */
364
    public function setIndexSection($indexSection = false)
365
    {
366
        $this->fields['INDEX_SECTION'] = $indexSection ? 'Y' : 'N';
367
368
        return $this;
369
    }
370
371
    /**
372
     * Режим отображения списка элементов в административном разделе (S|C).
373
     * @param string $listMode
374
     * @return $this
375
     */
376
    public function setListMode($listMode)
377
    {
378
        $this->fields['LIST_MODE'] = $listMode;
379
380
        return $this;
381
    }
382
383
    /**
384
     * Режим проверки прав доступа (S|E).
385
     * @param string $rightsMode
386
     * @return $this
387
     */
388
    public function setRightsMode($rightsMode = 'S')
389
    {
390
        $this->fields['RIGHTS_MODE'] = $rightsMode;
391
392
        return $this;
393
    }
394
395
    /**
396
     * Признак наличия привязки свойств к разделам (Y|N).
397
     * @param string $sectionProperty
398
     * @return $this
399
     */
400
    public function setSectionProperty($sectionProperty)
401
    {
402
        $this->fields['SECTION_PROPERTY'] = $sectionProperty;
403
404
        return $this;
405
    }
406
407
    /**
408
     * Признак наличия фасетного индекса (N|Y|I).
409
     * @param string $propertyIndex
410
     * @return $this
411
     */
412
    public function setPropertyIndex($propertyIndex)
413
    {
414
        $this->fields['PROPERTY_INDEX'] = $propertyIndex;
415
416
        return $this;
417
    }
418
419
    /**
420
     * Служебное поле для процедуры конвертации места хранения значений свойств инфоблока.
421
     * @param int $lastConvElement
422
     * @return $this
423
     */
424
    public function setLastConvElement($lastConvElement)
425
    {
426
        $this->fields['LAST_CONV_ELEMENT'] = $lastConvElement;
427
428
        return $this;
429
    }
430
431
    /**
432
     * Служебное поле для установки прав для разных групп на доступ к информационному блоку.
433
     * @param array $groupId Массив соответствий кодов групп правам доступа
434
     * @return $this
435
     */
436
    public function setGroupId($groupId)
437
    {
438
        $this->fields['GROUP_ID'] = $groupId;
439
440
        return $this;
441
    }
442
443
    /**
444
     * Служебное поле для привязки к группе социальной сети.
445
     * @param int $socnetGroupId
446
     * @return $this
447
     */
448
    public function setSocnetGroupId($socnetGroupId)
449
    {
450
        $this->fields['SOCNET_GROUP_ID'] = $socnetGroupId;
451
452
        return $this;
453
    }
454
455
    /**
456
     * Инфоблок участвует в документообороте (Y|N).
457
     * @param bool $workflow
458
     * @return $this
459
     */
460
    public function setWorkflow($workflow = true)
461
    {
462
        $this->fields['WORKFLOW'] = $workflow ? 'Y' : 'N';
463
464
        return $this;
465
    }
466
467
    /**
468
     * Инфоблок участвует в бизнес-процессах (Y|N).
469
     * @param bool $bizproc
470
     * @return $this
471
     */
472
    public function setBizProc($bizproc = false)
473
    {
474
        $this->fields['BIZPROC'] = $bizproc ? 'Y' : 'N';
475
476
        return $this;
477
    }
478
479
    /**
480
     * Флаг выбора интерфейса отображения привязки элемента к разделам (D|L|P).
481
     * @param string $sectionChooser
482
     * @return $this
483
     */
484
    public function setSectionChooser($sectionChooser)
485
    {
486
        $this->fields['SECTION_CHOOSER'] = $sectionChooser;
487
488
        return $this;
489
    }
490
491
    /**
492
     * Флаг хранения значений свойств элементов инфоблока (1 - в общей таблице | 2 - в отдельной).
493
     * @param int $version
494
     * @return $this
495
     */
496
    public function setVersion($version = 1)
497
    {
498
        $this->fields['VERSION'] = $version;
499
500
        return $this;
501
    }
502
503
    /**
504
     * Полный путь к файлу-обработчику массива полей элемента перед сохранением на странице редактирования элемента.
505
     * @param string $editFileBefore
506
     * @return $this
507
     */
508
    public function setEditFileBefore($editFileBefore)
509
    {
510
        $this->fields['EDIT_FILE_BEFORE'] = $editFileBefore;
511
512
        return $this;
513
    }
514
515
    /**
516
     * Полный путь к файлу-обработчику вывода интерфейса редактирования элемента.
517
     * @param string $editFileAfter
518
     * @return $this
519
     */
520
    public function setEditFileAfter($editFileAfter)
521
    {
522
        $this->fields['EDIT_FILE_AFTER'] = $editFileAfter;
523
524
        return $this;
525
    }
526
527
    /**
528
     * Название элемента в единственном числе
529
     * @param string $message
530
     * @return $this
531
     */
532
    public function setMessElementName($message = 'Элемент')
533
    {
534
        $this->fields['ELEMENT_NAME'] = $message;
535
536
        return $this;
537
    }
538
539
    /**
540
     * Название элемента во множнственном числе
541
     * @param string $message
542
     * @return $this
543
     */
544
    public function setMessElementsName($message = 'Элементы')
545
    {
546
        $this->fields['ELEMENTS_NAME'] = $message;
547
548
        return $this;
549
    }
550
551
    /**
552
     * Действие по добавлению элемента
553
     * @param string $message
554
     * @return $this
555
     */
556
    public function setMessElementAdd($message = 'Добавить элемент')
557
    {
558
        $this->fields['ELEMENT_ADD'] = $message;
559
560
        return $this;
561
    }
562
563
    /**
564
     * Действие по редактированию/изменению элемента
565
     * @param string $message
566
     * @return $this
567
     */
568
    public function setMessElementEdit($message = 'Изменить элемент')
569
    {
570
        $this->fields['ELEMENT_EDIT'] = $message;
571
572
        return $this;
573
    }
574
575
    /**
576
     * Действие по удалению элемента
577
     * @param string $message
578
     * @return $this
579
     */
580
    public function setMessElementDelete($message = 'Удалить элемент')
581
    {
582
        $this->fields['ELEMENT_DELETE'] = $message;
583
584
        return $this;
585
    }
586
587
    /**
588
     * Название раздела в единственном числе
589
     * @param string $message
590
     * @return $this
591
     */
592
    public function setMessSectionName($message = 'Раздел')
593
    {
594
        $this->fields['SECTION_NAME'] = $message;
595
596
        return $this;
597
    }
598
599
    /**
600
     * Название раздела во множнственном числе
601
     * @param string $message
602
     * @return $this
603
     */
604
    public function setMessSectionsName($message = 'Разделы')
605
    {
606
        $this->fields['SECTIONS_NAME'] = $message;
607
608
        return $this;
609
    }
610
611
    /**
612
     * Действие по добавлению раздела
613
     * @param string $message
614
     * @return $this
615
     */
616
    public function setMessSectionAdd($message = 'Добавить раздел')
617
    {
618
        $this->fields['SECTION_ADD'] = $message;
619
620
        return $this;
621
    }
622
623
    /**
624
     * Действие по редактированию/изменению раздела
625
     * @param string $message
626
     * @return $this
627
     */
628
    public function setMessSectionEdit($message = 'Изменить раздел')
629
    {
630
        $this->fields['SECTION_EDIT'] = $message;
631
632
        return $this;
633
    }
634
635
    /**
636
     * Действие по удалению раздела
637
     * @param string $message
638
     * @return $this
639
     */
640
    public function setMessSectionDelete($message = 'Удалить раздел')
641
    {
642
        $this->fields['SECTION_DELETE'] = $message;
643
644
        return $this;
645
    }
646
647
648
}
649