1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
ActionFactory.php
См. документацию.
1<?php
2
3namespace Bitrix\Landing\History;
4
5use Bitrix\Landing\History\Action\BaseAction;
6use Bitrix\Landing\History\Action\AddBlockAction;
7use Bitrix\Landing\History\Action\AddCardAction;
8use Bitrix\Landing\History\Action\ChangeAnchorAction;
9use Bitrix\Landing\History\Action\EditAttributesAction;
10use Bitrix\Landing\History\Action\EditEmbedAction;
11use Bitrix\Landing\History\Action\EditIconAction;
12use Bitrix\Landing\History\Action\EditImgAction;
13use Bitrix\Landing\History\Action\EditLinkAction;
14use Bitrix\Landing\History\Action\EditMapAction;
15use Bitrix\Landing\History\Action\EditStyleAction;
16use Bitrix\Landing\History\Action\EditTextAction;
17use Bitrix\Landing\History\Action\EditComponentAction;
18use Bitrix\Landing\History\Action\RemoveBlockAction;
19use Bitrix\Landing\History\Action\RemoveCardAction;
20use Bitrix\Landing\History\Action\ReplaceLanding;
21use Bitrix\Landing\History\Action\SortBlockAction;
22use Bitrix\Landing\History\Action\UpdateContentAction;
23use Bitrix\Landing\History\Action\ChangeNodeNameAction;
24use Bitrix\Landing\History\Action\UpdateDynamicAction;
25use Bitrix\Landing\History\Action\MultiplyAction;
26use Bitrix\Landing\History\Action\RemoveNodeAction;
27use Bitrix\Landing\History\Action\AddNodeAction;
28
33{
34 protected const UNDO = 'UNDO';
35 protected const REDO = 'REDO';
36 protected const ACTIONS = [
37 'ADD_BLOCK' => [
38 self::UNDO => RemoveBlockAction::class,
39 self::REDO => AddBlockAction::class,
40 ],
41 'REMOVE_BLOCK' => [
42 self::UNDO => AddBlockAction::class,
43 self::REDO => RemoveBlockAction::class,
44 ],
45 'SORT_BLOCK' => [
46 self::UNDO => SortBlockAction::class,
47 self::REDO => SortBlockAction::class,
48 ],
49 'ADD_CARD' => [
50 self::UNDO => RemoveCardAction::class,
51 self::REDO => AddCardAction::class,
52 ],
53 'REMOVE_CARD' => [
54 self::UNDO => AddCardAction::class,
55 self::REDO => RemoveCardAction::class,
56 ],
57 'EDIT_TEXT' => [
58 self::UNDO => EditTextAction::class,
59 self::REDO => EditTextAction::class,
60 ],
61 'EDIT_MAP' => [
62 self::UNDO => EditMapAction::class,
63 self::REDO => EditMapAction::class,
64 ],
65 'EDIT_EMBED' => [
66 self::UNDO => EditEmbedAction::class,
67 self::REDO => EditEmbedAction::class,
68 ],
69 'EDIT_IMG' => [
70 self::UNDO => EditImgAction::class,
71 self::REDO => EditImgAction::class,
72 ],
73 'EDIT_ICON' => [
74 self::UNDO => EditIconAction::class,
75 self::REDO => EditIconAction::class,
76 ],
77 'EDIT_LINK' => [
78 self::UNDO => EditLinkAction::class,
79 self::REDO => EditLinkAction::class,
80 ],
81 'EDIT_COMPONENT' => [
82 self::UNDO => EditComponentAction::class,
83 self::REDO => EditComponentAction::class,
84 ],
85 'EDIT_STYLE' => [
86 self::UNDO => EditStyleAction::class,
87 self::REDO => EditStyleAction::class,
88 ],
89 'EDIT_ATTRIBUTES' => [
90 self::UNDO => EditAttributesAction::class,
91 self::REDO => EditAttributesAction::class,
92 ],
93 'UPDATE_CONTENT' => [
94 self::UNDO => UpdateContentAction::class,
95 self::REDO => UpdateContentAction::class,
96 ],
97 'CHANGE_ANCHOR' => [
98 self::UNDO => ChangeAnchorAction::class,
99 self::REDO => ChangeAnchorAction::class,
100 ],
101 'CHANGE_NODE_NAME_ACTION' => [
102 self::UNDO => ChangeNodeNameAction::class,
103 self::REDO => ChangeNodeNameAction::class,
104 ],
105 'UPDATE_DYNAMIC' => [
106 self::UNDO => UpdateDynamicAction::class,
107 self::REDO => UpdateDynamicAction::class,
108 ],
109 'MULTIPLY' => [
110 self::UNDO => MultiplyAction::class,
111 self::REDO => MultiplyAction::class,
112 ],
113 'ADD_NODE' => [
114 self::UNDO => RemoveNodeAction::class,
115 self::REDO => AddNodeAction::class,
116 ],
117 'REMOVE_NODE' => [
118 self::UNDO => AddNodeAction::class,
119 self::REDO => RemoveNodeAction::class,
120 ],
121 'REPLACE_LANDING' => [
122 self::UNDO => ReplaceLanding::class,
123 self::REDO => ReplaceLanding::class,
124 ],
125 ];
126 public const MULTIPLY_ACTION_NAME = 'MULTIPLY';
127 protected const COMPARE_METHOD = 'compareParams';
128
134 public static function getAction(string $actionName, ?bool $undo = false): ?BaseAction
135 {
136 if (self::isActionExists($actionName))
137 {
138 $class = self::getActionClass($actionName, $undo);
139 if ($class)
140 {
141 return new $class();
142 }
143 }
144
145 // todo: null or err?
146 return null;
147 }
148
154 public static function isActionExists(string $actionName): bool
155 {
156 return array_key_exists($actionName, self::ACTIONS);
157 }
158
165 public static function getActionClass(string $actionName, ?bool $undo = false): ?string
166 {
168 $class = self::ACTIONS[$actionName][$direction];
169
170 if (class_exists($class))
171 {
172 return $class;
173 }
174
175 return null;
176 }
177
183 public static function getDirectionName(?bool $undo = false): string
184 {
185 return $undo ? self::UNDO : self::REDO;
186 }
187
194 public static function compareSteps(array $prevStep, array $nextStep): bool
195 {
196 if (
197 $prevStep['ENTITY_TYPE'] === $nextStep['ENTITY_TYPE']
198 && $prevStep['ENTITY_ID'] === $nextStep['ENTITY_ID']
199 && $prevStep['ACTION'] === $nextStep['ACTION']
200 )
201 {
202 $class = self::getActionClass($prevStep['ACTION']);
203 if ($class && is_callable([$class, self::COMPARE_METHOD]))
204 {
205 return call_user_func(
206 [$class, self::COMPARE_METHOD],
207 $prevStep['ACTION_PARAMS'],
208 $nextStep['ACTION_PARAMS']
209 );
210 }
211 }
212
213 return false;
214 }
215}
static getAction(string $actionName, ?bool $undo=false)
Определения ActionFactory.php:134
static isActionExists(string $actionName)
Определения ActionFactory.php:154
static getActionClass(string $actionName, ?bool $undo=false)
Определения ActionFactory.php:165
static compareSteps(array $prevStep, array $nextStep)
Определения ActionFactory.php:194
static getDirectionName(?bool $undo=false)
Определения ActionFactory.php:183
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$direction
Определения prolog_auth_admin.php:25