1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
fileinpututility.php
См. документацию.
1<?php
2namespace Bitrix\Main\UI;
3
4use Bitrix\Main\Application;
5use Bitrix\Main\Context;
6
8{
9 protected static $instance = null;
10
11 const SESSION_VAR_PREFIX = "MFI_UPLOADED_FILES_";
12 const SESSION_LIST = "MFI_SESSIONS";
13 const SESSION_TTL = 86400;
14
18 public static function instance()
19 {
20 if (!isset(static::$instance))
21 static::$instance = new static();
22
23 return static::$instance;
24 }
25
26 public function __construct()
27 {
28 }
29
30 public function isAccessible(): bool
31 {
32 return Application::getInstance()->getSession()->isAccessible();
33 }
34
35 public function registerControl($CID, $controlId = "")
36 {
37 if (func_num_args() == 1)
38 {
39 $controlId = $CID;
40 $CID = "";
41 }
42 $CID = (!empty($CID) ? $CID : md5(randString(15)));
43 $this->initSession($CID, $controlId);
44 return $CID;
45 }
46
47 public function registerFile($CID, $fileId)
48 {
49 Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$CID][] = $fileId;
50 }
51
52 public function unRegisterFile($CID, $fileId)
53 {
54 if (isset(Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$CID]))
55 {
56 $key = array_search($fileId, Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$CID]);
57 if($key !== false)
58 {
59 unset(Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$CID][$key]);
60 return true;
61 }
62 }
63 return false;
64 }
65
66 public function checkFiles($controlId, $arFiles)
67 {
68 $arSessionFilesList = $this->getSessionControlFiles($controlId);
69
70 if(is_array($arFiles))
71 {
72 foreach($arFiles as $key => $fileId)
73 {
74 if(!in_array($fileId, $arSessionFilesList))
75 {
76 unset($arFiles[$key]);
77 }
78 }
79
80 $arFiles = array_values($arFiles);
81 }
82
83 return $arFiles;
84 }
85
86 public function checkDeletedFiles($controlId)
87 {
88 $arSessionFilesList = $this->getSessionControlFiles($controlId);
89 $deletedRequestName = $controlId.'_deleted';
90
91 $result = array();
92
93 $request = Context::getCurrent()->getRequest();
94 $requestValues = $request->getValues();
95
96 // HACK for correct use file delete from BX.UI.ComponentAjax.doSubmit
97 if (isset($requestValues['data']) && is_array($requestValues['data']))
98 {
99 $requestValues = $requestValues['data'];
100 }
101
102 if(isset($requestValues[$deletedRequestName]) && is_array($requestValues[$deletedRequestName]))
103 {
104 foreach($requestValues[$deletedRequestName] as $deletedFile)
105 {
106 if(
107 in_array($deletedFile, $arSessionFilesList)
108 && \CFile::SaveFile(array(
109 'old_file' => $deletedFile,
110 'del' => 'Y',
111 ), ''))
112 {
113 $result[] = $deletedFile;
114 }
115 }
116 }
117
118 return $result;
119 }
120
121 public function checkFile($CID, $fileId)
122 {
123 return isset(Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$CID])
124 && in_array($fileId, Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$CID]);
125 }
126
127 public function getControlByCid($CID)
128 {
129 $ts = time();
130 $found = null;
131 foreach (Application::getInstance()->getSession()[self::SESSION_LIST] as $controlId => $d)
132 {
133 if (array_key_exists($CID, $d))
134 {
135 $r = $d[$CID];
136 if($r["SESSID"] != bitrix_sessid()
137 || $ts-$r["TS"] > self::SESSION_TTL)
138 {
139 unset(Application::getInstance()->getSession()[self::SESSION_LIST][$controlId][$CID]);
140 unset(Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$CID]);
141 }
142 else
143 {
144 $found = $controlId;
145 break;
146 }
147 }
148 }
149 return $found;
150 }
151 public function isCidRegistered($CID)
152 {
153 return !is_null($this->getControlByCid($CID));
154 }
155
156 public function getUserFieldCid(array $userField)
157 {
158 $fieldName = $userField['MULTIPLE'] === 'Y' ? preg_replace("/\[.*\]$/", '', $userField['FIELD_NAME']) : $userField['FIELD_NAME'];
159 return $userField["ENTITY_ID"]."-".$userField["ID"]."-".$fieldName;
160 }
161
162 protected function initSession($CID, $controlId)
163 {
164 $ts = time();
165
166 if(!isset(Application::getInstance()->getSession()[self::SESSION_LIST][$controlId]))
167 {
168 Application::getInstance()->getSession()[self::SESSION_LIST][$controlId] = array();
169 }
170 else
171 {
172 foreach(Application::getInstance()->getSession()[self::SESSION_LIST][$controlId] as $key => $arSession)
173 {
174 if($arSession["SESSID"] != bitrix_sessid()
175 || $ts-$arSession["TS"] > self::SESSION_TTL)
176 {
177 unset(Application::getInstance()->getSession()[self::SESSION_LIST][$controlId][$key]);
178 unset(Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$key]);
179 }
180 }
181 }
182 if (!array_key_exists($CID, Application::getInstance()->getSession()[self::SESSION_LIST][$controlId]))
183 {
184 Application::getInstance()->getSession()[self::SESSION_LIST][$controlId][$CID] = array(
185 "TS" => $ts,
186 "SESSID" => bitrix_sessid()
187 );
188 Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$CID] = array();
189 }
190 }
191
192 protected function getSessionControlFiles($controlId)
193 {
194 $res = array();
195
196 if(isset(Application::getInstance()->getSession()[self::SESSION_LIST][$controlId]))
197 {
198 foreach(Application::getInstance()->getSession()[self::SESSION_LIST][$controlId] as $CID => $arSession)
199 {
200 if(isset(Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$CID]) && is_array(
201 Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$CID]))
202 {
203 $res = array_merge($res, Application::getInstance()->getSession()[self::SESSION_VAR_PREFIX.$CID]);
204 }
205 }
206 }
207
208 return $res;
209 }
210}
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
static getInstance()
Определения application.php:98
checkDeletedFiles($controlId)
Определения fileinpututility.php:86
checkFiles($controlId, $arFiles)
Определения fileinpututility.php:66
registerFile($CID, $fileId)
Определения fileinpututility.php:47
initSession($CID, $controlId)
Определения fileinpututility.php:162
getUserFieldCid(array $userField)
Определения fileinpututility.php:156
registerControl($CID, $controlId="")
Определения fileinpututility.php:35
checkFile($CID, $fileId)
Определения fileinpututility.php:121
getSessionControlFiles($controlId)
Определения fileinpututility.php:192
unRegisterFile($CID, $fileId)
Определения fileinpututility.php:52
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
bitrix_sessid()
Определения tools.php:4656
randString($pass_len=10, $pass_chars=false)
Определения tools.php:2154
$arFiles
Определения options.php:60
if(empty($signedUserToken)) $key
Определения quickway.php:257