1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
mask.php
См. документацию.
1<?php
2
4
7use Bitrix\UI;
8use Bitrix\UI\Avatar;
9use \Bitrix\Main\Engine\Response;
10use \Bitrix\Main\UI\PageNavigation;
11
13{
14 public function getSystemListAction(PageNavigation $pageNavigation, Main\Engine\CurrentUser $currentUser): Response\DataType\Page
15 {
16 return static::getList(
17 Avatar\Model\ItemTable::query()
18 ->setFilter([
19 '=OWNER_TYPE' => [
20 Avatar\Mask\Owner\System::class,
21 Avatar\Mask\Owner\RestApp::class
22 ],
23 ])
24 ,
25 $pageNavigation,
26 $currentUser
27 );
28 }
29
30 public function getUserListAction(PageNavigation $pageNavigation, Main\Engine\CurrentUser $currentUser): Response\DataType\Page
31 {
32 return static::getList(
33 Avatar\Model\ItemTable::query()
34 ->setFilter([
35 '=OWNER_TYPE' => Avatar\Mask\Owner\User::class,
36 '=OWNER_ID' => $currentUser->getId()
37 ])
38 ,
39 $pageNavigation,
40 $currentUser
41 );
42 }
43
44 public function getSharedListAction(PageNavigation $pageNavigation, Main\Engine\CurrentUser $currentUser): Response\DataType\Page
45 {
46 return static::getList(
47 Avatar\Model\ItemTable::query()
48 ->setFilter([
49 '=SHARED_FOR.USER_ACCESS.USER_ID' => $currentUser->getId(),
50 '=OWNER_TYPE' => Avatar\Mask\Owner\User::class,
51 '!=OWNER_ID' => $currentUser->getId()
52 ])
53 ->setDistinct()
54 ->addOrder('SHARED_FOR.ID', 'DESC')
55 ,
56 $pageNavigation,
57 $currentUser
58 );
59 }
60
61 public function getRecentlyUsedListAction(PageNavigation $pageNavigation, Main\Engine\CurrentUser $currentUser): Response\DataType\Page
62 {
63 return static::getList(
64 Avatar\Model\ItemTable::query()
65 ->setSelect(['ID', 'FILE_ID', 'TITLE', 'DESCRIPTION', 'SORT'])
66 ->setOrder(['RECENTLY_USED_BY.ID' => 'DESC', 'ID' => 'DESC'])
67 ->setFilter([
68 '=RECENTLY_USED_BY.USER_ID' => $currentUser->getId()
69 ])
70 ->addOrder('RECENTLY_USED_BY.ID', 'DESC')
71 ->setDistinct()
72 ,
73 $pageNavigation,
74 $currentUser
75 );
76 }
77
78 protected function getList(
80 PageNavigation $pageNavigation,
81 Main\Engine\CurrentUser $currentUser
83 {
84 if (count($query->getSelect()) <= 0)
85 {
86 $query
87 ->setSelect(['ID', 'GROUP_ID', 'FILE_ID', 'TITLE', 'DESCRIPTION', 'SORT'])
88 ->setOrder(['GROUP_ID' => 'ASC', 'SORT' => 'ASC', 'ID' => 'DESC'])
89 ;
90 }
92 ->setLimit($pageNavigation->getLimit())
93 ->setOffset($pageNavigation->getOffset())
94 ->setCacheTtl(86400)
95 ->exec();
96 $result = [];
97 while (($res = $dbRes->fetch()) && $res)
98 {
99 if ($file = \CFile::GetFileArray($res['FILE_ID']))
100 {
101 $groupId = (int) ($res['GROUP_ID'] ?? 0);
102 if (!isset($result[$groupId]))
103 {
104 $result[$groupId] = ['items' => []];
105 }
106 $result[$groupId]['items'][] = [
107 'id' => $res['ID'],
108 'title' => $res['TITLE'],
109 'description' => $res['DESCRIPTION'],
110 'src' => $file['SRC'],
111 //TODO сделать метод load по всем выбранным данным, чтобы больше в БД не ходить
112 'editable' => Avatar\Mask\Item::getInstance($res['ID'])->isEditableBy(
113 Avatar\Mask\Consumer::createFromId($currentUser->getId())
114 )
115 ];
116 }
117 }
118
119 $groupIds = array_keys($result);
120 if (array_sum($groupIds) > 0)
121 {
123 'select' => [
124 'ID', 'TITLE'
125 ],
126 'filter' => [
127 '=ID' => $groupIds,
128 ],
129 'order' => [
130 'SORT' => 'ASC',
131 'ID' => 'ASC'
132 ],
133 'cache' => [
134 'ttl' => 86400
135 ]
136 ]);
137 while ($res = $dbRes->fetch())
138 {
139 if (isset($result[$res['ID']]))
140 {
141 $result[$res['ID']]['title'] = $res['TITLE'];
142 $result[$res['ID']]['id'] = $res['ID'];
143 }
144 }
145 }
146
147 return new Response\DataType\Page('groupedItems', array_values($result), null);
148 }
149
150 public function getMaskAccessCodeAction(int $id, Main\Engine\CurrentUser $currentUser): Response\AjaxJson
151 {
152 $result = $this->checkEditability($id, $currentUser);
153 if ($result->isSuccess())
154 {
155 ['item' => $item] = $result->getData();
157 ['accessCode' => Main\UI\EntitySelector\Converter::convertFromFinderCodes($item->getAccessCode())]
158 );
159 }
161 }
162
163 protected function checkEditability(int $id, Main\Engine\CurrentUser $currentUser): Main\Result
164 {
165 $result = new Main\Result();
166 $consumer = Avatar\Mask\Consumer::createFromId($currentUser->getId());
167
168 if (!($item = Avatar\Mask\Item::getInstance($id)))
169 {
170 $result->addError(new Main\Error("Mask with id {$id} is not found.", 'Not found.'));
171 }
172 elseif (!$item->isEditableBy($consumer))
173 {
174 $result->addError(new Main\Error("Mask with id {$id} is not editable.", 'Access denied.'));
175 }
176 else
177 {
178 $result->setData(['item' => $item]);
179 }
180 return $result;
181 }
182
183 public function saveAction($id, $title, $accessCode, $file, Main\Engine\CurrentUser $currentUser): Response\AjaxJson
184 {
185 $destCodesList = Main\UI\EntitySelector\Converter::convertToFinderCodes($accessCode);
186 $file = ($file['changed'] === 'Y' ? $this->getRequest()->getFile('file') : null);
187 $id = intval($id); //can be null
188 if ($id > 0)
189 {
190 $result = $this->checkEditability($id, $currentUser);
191 if ($result->isSuccess())
192 {
193 ['item' => $item] = $result->getData();
194 /* @var Avatar\Mask\Item $item*/
195 $result = $item->update([
196 'TITLE' => $title,
197 'ACCESS_CODE' => $destCodesList
198 ] + (!empty($file) ? [
199 'FILE' => $file] : [])
200 );
201 }
202 }
203 else
204 {
206 new Avatar\Mask\Owner\User($currentUser->getId()),
207 $file,
208 [
209 'TITLE' => $title,
210 'ACCESS_CODE' => $destCodesList
211 ]
212 );
213 if ($result->isSuccess())
214 {
215 $id = $result->getId();
216 }
217 }
218 if ($result->isSuccess())
219 {
220 $responsePage = static::getList(
221 Avatar\Model\ItemTable::query()
222 ->setFilter([
223 '=ID' => $id
224 ])
225 ,
226 (new PageNavigation('justBuffNav'))->setPageSize(1),
227 $currentUser
228 );
229 if (($groupedItems = $responsePage->getItems())
230 && ($itemsFromOneGroup = reset($groupedItems))
231 && isset($itemsFromOneGroup['items'])
232 && ($itemData = reset($itemsFromOneGroup['items']))
233 )
234 {
235 $result = $this->checkEditability($id, $currentUser);
236 if ($result->isSuccess())
237 {
238 ['item' => $item] = $result->getData();
239 $itemData['accessCode'] = Main\UI\EntitySelector\Converter::convertFromFinderCodes($item->getAccessCode());
240 }
242 $itemData
243 );
244 }
245 }
246
247 return Response\AjaxJson::createError($result->getErrorCollection());
248 }
249
250 public function deleteAction(int $id, Main\Engine\CurrentUser $currentUser): Response\AjaxJson
251 {
252 $result = $this->checkEditability($id, $currentUser);
253 if ($result->isSuccess())
254 {
255 /* @var Avatar\Mask\Item $item*/
256 ['item' => $item] = $result->getData();
257 $item->delete();
258 }
259 if ($result->isSuccess())
260 {
262 $result
263 );
264 }
265 return Response\AjaxJson::createError($result->getErrorCollection());
266 }
267
268 public function getMaskInitialInfoAction($recentlyUsedListSize, PageNavigation $pageNavigation, Main\Engine\CurrentUser $currentUser)
269 {
270 $pageNav = new PageNavigation('recentlyUsedListSize');
271 $pageNav->setPageSize($recentlyUsedListSize);
272
273 return new Response\DataType\Page('initialInfo', [
274 'recentlyUsedItems' => static::getRecentlyUsedListAction($pageNav, $currentUser)->getItems(),
275 'systemItems' => static::getSystemListAction($pageNavigation, $currentUser)->getItems(),
276 'myOwnItems' => static::getUserListAction($pageNavigation, $currentUser)->getItems(),
277 'sharedItems' => static::getSharedListAction($pageNavigation, $currentUser)->getItems(),
278 'restMarketInfo' => Main\Loader::includeModule('rest') ? [
279 'available' => 'Y',
280 'exportUrl' => Rest\Configuration\Helper::getInstance()->enabledZipMod() ? Rest\Marketplace\Url::getConfigurationExportElementUrl(
281 UI\Integration\Rest\MaskManifest::CODE,
282 $currentUser->getId()
283 ) : null,
284 'importUrl' => Rest\Marketplace\Url::getConfigurationImportManifestUrl(
285 UI\Integration\Rest\MaskManifest::CODE
286 ),
287 'marketUrl' => Rest\Marketplace\Url::getCategoryUrl('user_frame')
288 ] : [
289 'available' => 'N',
290 ]
291 ], null);
292 }
293
294 public function useRecentlyAction(int $id, Main\Engine\CurrentUser $currentUser): Response\AjaxJson
295 {
296 $consumer = Avatar\Mask\Consumer::createFromId($currentUser->getId());
297 if (Avatar\Mask\Item::getInstance($id)->isReadableBy($consumer))
298 {
299 $consumer->useRecentlyMaskId($id);
300 }
302 }
303
304 public function cleanUpAction(Main\Engine\CurrentUser $currentUser): Response\AjaxJson
305 {
306 (new Avatar\Mask\Owner\User($currentUser->getId()))->delete();
308 }
309}
Определения result.php:20
static createSuccess($data=null)
Определения ajaxjson.php:32
static createDenied(ErrorCollection $errorCollection=null, $data=null)
Определения ajaxjson.php:42
static createError(ErrorCollection $errorCollection=null, $data=null)
Определения ajaxjson.php:37
Определения error.php:15
static includeModule($moduleName)
Определения loader.php:67
static getList(array $parameters=array())
Определения datamanager.php:431
static convertFromFinderCodes(array $codesList=[])
Определения converter.php:123
static convertToFinderCodes(array $entitiesList=[])
Определения converter.php:152
getMaskInitialInfoAction($recentlyUsedListSize, PageNavigation $pageNavigation, Main\Engine\CurrentUser $currentUser)
Определения mask.php:268
getUserListAction(PageNavigation $pageNavigation, Main\Engine\CurrentUser $currentUser)
Определения mask.php:30
getRecentlyUsedListAction(PageNavigation $pageNavigation, Main\Engine\CurrentUser $currentUser)
Определения mask.php:61
cleanUpAction(Main\Engine\CurrentUser $currentUser)
Определения mask.php:304
saveAction($id, $title, $accessCode, $file, Main\Engine\CurrentUser $currentUser)
Определения mask.php:183
getList(Main\ORM\Query\Query $query, PageNavigation $pageNavigation, Main\Engine\CurrentUser $currentUser)
Определения mask.php:78
deleteAction(int $id, Main\Engine\CurrentUser $currentUser)
Определения mask.php:250
checkEditability(int $id, Main\Engine\CurrentUser $currentUser)
Определения mask.php:163
getSystemListAction(PageNavigation $pageNavigation, Main\Engine\CurrentUser $currentUser)
Определения mask.php:14
useRecentlyAction(int $id, Main\Engine\CurrentUser $currentUser)
Определения mask.php:294
getMaskAccessCodeAction(int $id, Main\Engine\CurrentUser $currentUser)
Определения mask.php:150
getSharedListAction(PageNavigation $pageNavigation, Main\Engine\CurrentUser $currentUser)
Определения mask.php:44
static getInstance($id)
Определения Item.php:190
static create(Owner\DefaultOwner $owner, array $file, ?array $descriptionParams=[])
Определения Item.php:152
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
$query
Определения get_search.php:11
Определения action.php:3
Определения chain.php:3
Определения aliases.php:54
Определения handlers.php:8
Определения accessexception.php:2
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$title
Определения pdf.php:123
$dbRes
Определения yandex_detail.php:168