1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
Category.php
См. документацию.
1<?php
2
4
26
27final class Category extends Controller
28{
29 use FeatureTrait;
30
31 protected const CATEGORIES_PAGE_SIZE = 20;
32
33 protected int $userId;
35
36 protected function init(): void
37 {
38 parent::init();
39
40 $this->userId = (int)CurrentUser::get()->getId();
41 $this->categoryProvider = new Provider\CategoryProvider($this->userId);
42 }
43
44 public function configureActions(): array
45 {
46 return [
47 'add' => [
48 '+prefilters' => [
49 new ValidateFilter\ValidateEventCategoryCreate(),
50 ],
51 ],
52 'update' => [
53 '+prefilters' => [
54 new ValidateFilter\ValidateEventCategoryUpdate(),
55 ],
56 ],
57 'setMute' => [
58 '+prefilters' => [
59 new ValidateFilter\ValidateSetMuteEventCategory(),
60 ],
61 ],
62 ];
63 }
64
69 public function getAutoWiredParameters(): array
70 {
71 $request = $this->getRequest();
72
73 return [
75 EventCategory::class,
76 'eventCategory',
77 static function(string $className, ?int $id = null): ?EventCategory
78 {
80 $mapperFactory = ServiceLocator::getInstance()->get('calendar.service.mappers.factory');
81
82 return $id !== null && $id >= 0 ? $mapperFactory->getEventCategory()->getById($id) : null;
83 },
84 ),
85 new Parameter(
86 RequestDto\ListDto::class,
87 static fn () => RequestDto\ListDto::fromRequest($request->toArray()),
88 ),
89 new Parameter(
90 RequestDto\CreateEventCategoryDto::class,
91 static fn () => RequestDto\CreateEventCategoryDto::fromRequest($request->toArray()),
92 ),
93 new Parameter(
94 RequestDto\UpdateEventCategoryDto::class,
95 static fn () => RequestDto\UpdateEventCategoryDto::fromRequest($request->toArray()),
96 ),
97 new Parameter(
98 RequestDto\SetMuteEventCategoryDto::class,
99 static fn () => RequestDto\SetMuteEventCategoryDto::fromRequest($request->toArray()),
100 ),
101 new Parameter(
102 RequestDto\SetBanDto::class,
103 static fn () => RequestDto\SetBanDto::fromRequest($request->toArray()),
104 ),
105 ];
106 }
107
111 public function listAction(RequestDto\ListDto $listDto): array
112 {
114 query: $listDto->query ?? '',
115 isBanned: $listDto->isBanned,
116 categoryId: $listDto->categoryId,
117 );
118 $categoryQuery = new Provider\Category\Query(
119 filter: $filter,
120 limit: self::CATEGORIES_PAGE_SIZE,
121 page: $listDto->page ?? 0,
122 );
123
124 $categories = $this->categoryProvider->list($categoryQuery);
125
126 foreach ($categories as $category)
127 {
128 if ($category->closed)
129 {
130 EventCategoryPullService::getInstance()->addToWatch($this->userId, $category->id);
131 }
132 }
133
134 EventCategoryPullService::getInstance()->addToWatch($this->userId);
135 OpenEventPullService::getInstance()->addToWatch($this->userId);
136
137 return [
138 $this->categoryProvider->getAllCategory(),
139 ...$categories,
140 ];
141 }
142
143 public function addAction(RequestDto\CreateEventCategoryDto $createEventCategoryDto): ?Item\Category
144 {
145 $canAdd = EventCategoryAccessController::can(
146 $this->userId,
147 ActionDictionary::ACTION_EVENT_CATEGORY_ADD,
148 );
149
150 if (!$canAdd)
151 {
152 $this->addError(new Error('no create access', 'no_create_access'));
153
154 return null;
155 }
156
157 $eventCategory = CategoryService::getInstance()
158 ->createEventCategory($this->userId, $createEventCategoryDto)
159 ;
160
161 $eventCategoryPullService = EventCategoryPullService::getInstance();
162 if ($eventCategory->getClosed())
163 {
164 $eventCategoryPullService->addToWatch($this->userId, $eventCategory->getId());
165 }
166
167 return EventCategoryResponseHelper::prepareEventCategoryForUserResponse(
168 eventCategory: $eventCategory,
169 userId: $this->userId,
170 isMuted: !$eventCategory->getClosed(),
171 );
172 }
173
174 public function updateAction(
175 EventCategory $eventCategory,
176 RequestDto\UpdateEventCategoryDto $updateEventCategoryDto,
177 ): ?Item\Category
178 {
179 $canEdit = EventCategoryAccessController::can(
180 $this->userId,
181 ActionDictionary::ACTION_EVENT_CATEGORY_EDIT,
182 $eventCategory->getId(),
183 );
184
185 if (!$canEdit)
186 {
187 $this->addError(new Error('no edit access', 'no_edit_access'));
188
189 return null;
190 }
191
192 CategoryService::getInstance()->updateEventCategory($this->userId, $eventCategory, $updateEventCategoryDto);
193
194 return EventCategoryResponseHelper::prepareEventCategoryForUserResponse(
195 eventCategory: $eventCategory,
196 );
197 }
198
199 public function deleteAction(EventCategory $eventCategory): void
200 {
201 $canDelete = EventCategoryAccessController::can(
202 $this->userId,
203 ActionDictionary::ACTION_EVENT_CATEGORY_DELETE,
204 $eventCategory->getId(),
205 );
206
207 if (!$canDelete)
208 {
209 $this->addError(new Error('no delete access', 'no_delete_access'));
210
211 return;
212 }
213
214 CategoryService::getInstance()->deleteEventCategory($eventCategory);
215 }
216
217 public function setMuteAction(EventCategory $eventCategory, RequestDto\SetMuteEventCategoryDto $setMuteDto): void
218 {
219 CategoryMuteService::getInstance()->setMute($this->userId, $eventCategory->getId(), $setMuteDto->muteState);
220 }
221
222 public function setBanAction(EventCategory $eventCategory, RequestDto\SetBanDto $setBanDto): void
223 {
224 CategoryBanService::getInstance()->setBan($this->userId, $eventCategory->getId(), $setBanDto->banState);
225 }
226
227 public function getChannelInfoAction(EventCategory $eventCategory): ?array
228 {
229 $canView = EventCategoryAccessController::can(
230 $this->userId,
231 ActionDictionary::ACTION_EVENT_CATEGORY_VIEW,
232 $eventCategory->getId(),
233 );
234
235 if (!$canView)
236 {
237 $this->addError(new Error('no view access', 'no_view_access'));
238
239 return null;
240 }
241
242 $imCategoryService = new \Bitrix\Calendar\Integration\Im\EventCategoryService();
243
244 return $imCategoryService->getChannelInfo($eventCategory->getChannelId());
245 }
246}
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
updateAction(EventCategory $eventCategory, RequestDto\UpdateEventCategoryDto $updateEventCategoryDto,)
Определения Category.php:174
listAction(RequestDto\ListDto $listDto)
Определения Category.php:111
deleteAction(EventCategory $eventCategory)
Определения Category.php:199
Provider CategoryProvider $categoryProvider
Определения Category.php:34
setMuteAction(EventCategory $eventCategory, RequestDto\SetMuteEventCategoryDto $setMuteDto)
Определения Category.php:217
addAction(RequestDto\CreateEventCategoryDto $createEventCategoryDto)
Определения Category.php:143
setBanAction(EventCategory $eventCategory, RequestDto\SetBanDto $setBanDto)
Определения Category.php:222
getChannelInfoAction(EventCategory $eventCategory)
Определения Category.php:227
Определения error.php:15
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$filter
Определения iblock_catalog_list.php:54