Bitrix-D7 23.9
 
Загрузка...
Поиск...
Не найдено
type.php
1<?
2
4
5
6
11
16class Type
17{
18 const STRING = "STRING";
19 const TEXTAREA = "TEXTAREA";
20 const NUMBER = "NUMBER";
21 const DATE = "DATE";
22 const SELECT = "SELECT";
23 const MULTI_SELECT = "MULTI_SELECT";
24 const DEST_SELECTOR = "DEST_SELECTOR";
25 const ENTITY_SELECTOR = "ENTITY_SELECTOR";
26 const ENTITY = "ENTITY";
27 const CUSTOM = "CUSTOM";
28 const CUSTOM_ENTITY = "CUSTOM_ENTITY";
29 const CUSTOM_DATE = "CUSTOM_DATE";
30
31 protected $list = [];
32 protected static $instance;
33
34 public function __construct()
35 {
36 $constants = (new \ReflectionClass(__CLASS__))->getConstants();
37 foreach ($constants as $key)
38 {
39 $list[$key] = null;
40 $filename = str_replace("_", "", mb_strtolower($key))."type.php";
41 if (file_exists(__DIR__."/".$filename))
42 {
43 $className = str_replace('_', ' ', mb_strtolower($key));
44 $className = str_replace(' ', '', ucwords($className));
45 $list[$key] = __NAMESPACE__."\\".$className."Type";
46 }
47 }
48 $event = new Event(self::class, 'onGetList', $constants);
49 $event->send();
50 if($event->getResults())
51 {
52 foreach($event->getResults() as $evenResult)
53 {
54 if($evenResult->getType() == EventResult::SUCCESS)
55 {
56 $result = $evenResult->getParameters();
57 if (is_array($result) &&
58 array_key_exists("CODE_NAME", $result) && !empty($result["CODE_NAME"]) &&
59 array_key_exists("CLASS", $result) && !empty($result["CLASS"])
60 )
61 {
62 $list[$result["CODE_NAME"]] = $result["CLASS"];
63 }
64 }
65 }
66 }
67 $this->list = $list;
68 }
69
70 public function getTypesList()
71 {
72 return $this->list;
73 }
74
78 public static function getInstance()
79 {
80 if (!isset(self::$instance))
81 {
82 $c = __CLASS__;
83 self::$instance = new $c;
84 }
85
86 return self::$instance;
87 }
88
93 public static function getList()
94 {
95 $reflection = new \ReflectionClass(__CLASS__);
96 return $reflection->getConstants();
97 }
98
105 public static function getLogicFilter($data, array $sourceFields)
106 {
107 $types = self::getInstance()->getTypesList();
108 $result = [];
109
110 foreach ($sourceFields as $sourceFieldKey => $sourceField)
111 {
112 $filter = array_merge(
113 FieldAdapter::adapt($sourceField),
114 [
115 "STRICT" => isset($sourceField["strict"]) && $sourceField["strict"] === true
116 ]
117 );
118 /*
119 * @todo Make a default type and use it. Not this condition.
120 */
121 if (array_key_exists($filter["TYPE"], $types) &&
122 class_exists($types[$filter["TYPE"]]) &&
123 is_callable(array($types[$filter["TYPE"]], "getLogicFilter")))
124 {
125 $res = call_user_func_array(array($types[$filter["TYPE"]], "getLogicFilter"), array($data, $filter));
126 if (!empty($res))
127 $result += $res ;
128 }
129 else if (array_key_exists($filter["NAME"], $data) && $data[$filter["NAME"]] <> '')
130 {
131 $result[$filter["NAME"]] = $data[$filter["NAME"]];
132 }
133 }
134 return $result;
135 }
136}
static getLogicFilter($data, array $sourceFields)
Definition type.php:105