PageRenderTime 49ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/catalog/lib/store.php

https://gitlab.com/alexprowars/bitrix
PHP | 415 lines | 282 code | 18 blank | 115 comment | 0 complexity | 384f4b9654e4f1be04867afa18cf7420 MD5 | raw file
  1. <?php
  2. namespace Bitrix\Catalog;
  3. use Bitrix\Main;
  4. use Bitrix\Main\Localization\Loc;
  5. use Bitrix\Main\UserTable;
  6. /**
  7. * Class StoreTable
  8. *
  9. * Fields:
  10. * <ul>
  11. * <li> ID int mandatory
  12. * <li> TITLE string(75) optional
  13. * <li> ACTIVE bool optional default 'Y'
  14. * <li> ADDRESS string(245) mandatory
  15. * <li> DESCRIPTION string optional
  16. * <li> GPS_N string(15) optional
  17. * <li> GPS_S string(15) optional
  18. * <li> IMAGE_ID string(45) optional
  19. * <li> LOCATION_ID int optional
  20. * <li> DATE_MODIFY datetime mandatory default 'CURRENT_TIMESTAMP'
  21. * <li> DATE_CREATE datetime optional
  22. * <li> USER_ID int optional
  23. * <li> MODIFIED_BY int optional
  24. * <li> PHONE string(45) optional
  25. * <li> SCHEDULE string(255) optional
  26. * <li> XML_ID string(255) optional
  27. * <li> SORT int optional default 100
  28. * <li> EMAIL string(255) optional
  29. * <li> ISSUING_CENTER bool optional default 'Y'
  30. * <li> SHIPPING_CENTER bool optional default 'Y'
  31. * <li> SITE_ID string(2) optional
  32. * <li> CODE string(255) optional
  33. * <li> IS_DEFAULT string(1) optional default 'N'
  34. * </ul>
  35. *
  36. * @package Bitrix\Catalog
  37. *
  38. * DO NOT WRITE ANYTHING BELOW THIS
  39. *
  40. * <<< ORMENTITYANNOTATION
  41. * @method static EO_Store_Query query()
  42. * @method static EO_Store_Result getByPrimary($primary, array $parameters = array())
  43. * @method static EO_Store_Result getById($id)
  44. * @method static EO_Store_Result getList(array $parameters = array())
  45. * @method static EO_Store_Entity getEntity()
  46. * @method static \Bitrix\Catalog\EO_Store createObject($setDefaultValues = true)
  47. * @method static \Bitrix\Catalog\EO_Store_Collection createCollection()
  48. * @method static \Bitrix\Catalog\EO_Store wakeUpObject($row)
  49. * @method static \Bitrix\Catalog\EO_Store_Collection wakeUpCollection($rows)
  50. */
  51. class StoreTable extends Main\Entity\DataManager
  52. {
  53. /**
  54. * Returns DB table name for entity.
  55. *
  56. * @return string
  57. */
  58. public static function getTableName()
  59. {
  60. return 'b_catalog_store';
  61. }
  62. /**
  63. * Returns entity map definition.
  64. *
  65. * @return array
  66. */
  67. public static function getMap()
  68. {
  69. return [
  70. 'ID' => new Main\Entity\IntegerField(
  71. 'ID',
  72. [
  73. 'primary' => true,
  74. 'autocomplete' => true,
  75. 'title' => Loc::getMessage('STORE_ENTITY_ID_FIELD'),
  76. ]
  77. ),
  78. 'TITLE' => new Main\Entity\StringField(
  79. 'TITLE',
  80. [
  81. 'validation' => [__CLASS__, 'validateTitle'],
  82. 'title' => Loc::getMessage('STORE_ENTITY_TITLE_FIELD'),
  83. ]
  84. ),
  85. 'ACTIVE' => new Main\Entity\BooleanField(
  86. 'ACTIVE',
  87. [
  88. 'values' => ['N', 'Y'],
  89. 'default_value' => 'Y',
  90. 'title' => Loc::getMessage('STORE_ENTITY_ACTIVE_FIELD'),
  91. ]
  92. ),
  93. 'ADDRESS' => new Main\Entity\StringField(
  94. 'ADDRESS',
  95. [
  96. 'required' => true,
  97. 'validation' => [__CLASS__, 'validateAddress'],
  98. 'title' => Loc::getMessage('STORE_ENTITY_ADDRESS_FIELD'),
  99. ]
  100. ),
  101. 'DESCRIPTION' => new Main\Entity\TextField(
  102. 'DESCRIPTION',
  103. [
  104. 'title' => Loc::getMessage('STORE_ENTITY_DESCRIPTION_FIELD'),
  105. ]
  106. ),
  107. 'GPS_N' => new Main\Entity\StringField(
  108. 'GPS_N',
  109. [
  110. 'validation' => [__CLASS__, 'validateGpsN'],
  111. 'title' => Loc::getMessage('STORE_ENTITY_GPS_N_FIELD'),
  112. ]
  113. ),
  114. 'GPS_S' => new Main\Entity\StringField(
  115. 'GPS_S',
  116. [
  117. 'validation' => [__CLASS__, 'validateGpsS'],
  118. 'title' => Loc::getMessage('STORE_ENTITY_GPS_S_FIELD'),
  119. ]
  120. ),
  121. 'IMAGE_ID' => new Main\Entity\StringField(
  122. 'IMAGE_ID',
  123. [
  124. 'validation' => [__CLASS__, 'validateImageId'],
  125. 'title' => Loc::getMessage('STORE_ENTITY_IMAGE_ID_FIELD'),
  126. ]
  127. ),
  128. 'LOCATION_ID' => new Main\Entity\IntegerField(
  129. 'LOCATION_ID',
  130. [
  131. 'title' => Loc::getMessage('STORE_ENTITY_LOCATION_ID_FIELD'),
  132. ]
  133. ),
  134. 'DATE_MODIFY' => new Main\Entity\DatetimeField(
  135. 'DATE_MODIFY',
  136. [
  137. 'default_value' => function()
  138. {
  139. return new Main\Type\DateTime();
  140. },
  141. 'title' => Loc::getMessage('STORE_ENTITY_DATE_MODIFY_FIELD'),
  142. ]
  143. ),
  144. 'DATE_CREATE' => new Main\Entity\DatetimeField(
  145. 'DATE_CREATE',
  146. [
  147. 'default_value' => function()
  148. {
  149. return new Main\Type\DateTime();
  150. },
  151. 'title' => Loc::getMessage('STORE_ENTITY_DATE_CREATE_FIELD'),
  152. ]
  153. ),
  154. 'USER_ID' => new Main\Entity\IntegerField(
  155. 'USER_ID',
  156. [
  157. 'default_value' => null,
  158. 'title' => Loc::getMessage('STORE_ENTITY_USER_ID_FIELD'),
  159. ]
  160. ),
  161. 'CREATED_BY_USER' => new Main\ORM\Fields\Relations\Reference(
  162. 'CREATED_BY_USER',
  163. UserTable::class,
  164. Main\ORM\Query\Join::on('this.USER_ID', 'ref.ID')
  165. ),
  166. 'MODIFIED_BY' => new Main\Entity\IntegerField(
  167. 'MODIFIED_BY',
  168. [
  169. 'default_value' => null,
  170. 'title' => Loc::getMessage('STORE_ENTITY_MODIFIED_BY_FIELD'),
  171. ]
  172. ),
  173. 'MODIFIED_BY_USER' => new Main\ORM\Fields\Relations\Reference(
  174. 'MODIFIED_BY_USER',
  175. UserTable::class,
  176. Main\ORM\Query\Join::on('this.MODIFIED_BY', 'ref.ID')
  177. ),
  178. 'PHONE' => new Main\Entity\StringField(
  179. 'PHONE',
  180. [
  181. 'validation' => [__CLASS__, 'validatePhone'],
  182. 'title' => Loc::getMessage('STORE_ENTITY_PHONE_FIELD'),
  183. ]
  184. ),
  185. 'SCHEDULE' => new Main\Entity\StringField(
  186. 'SCHEDULE',
  187. [
  188. 'validation' => [__CLASS__, 'validateSchedule'],
  189. 'title' => Loc::getMessage('STORE_ENTITY_SCHEDULE_FIELD'),
  190. ]
  191. ),
  192. 'XML_ID' => new Main\Entity\StringField(
  193. 'XML_ID',
  194. [
  195. 'validation' => [__CLASS__, 'validateXmlId'],
  196. 'title' => Loc::getMessage('STORE_ENTITY_XML_ID_FIELD'),
  197. ]
  198. ),
  199. 'SORT' => new Main\Entity\IntegerField(
  200. 'SORT',
  201. [
  202. 'default_value' => 100,
  203. 'title' => Loc::getMessage('STORE_ENTITY_SORT_FIELD'),
  204. ]
  205. ),
  206. 'EMAIL' => new Main\Entity\StringField(
  207. 'EMAIL',
  208. [
  209. 'validation' => [__CLASS__, 'validateEmail'],
  210. 'title' => Loc::getMessage('STORE_ENTITY_EMAIL_FIELD'),
  211. ]
  212. ),
  213. 'ISSUING_CENTER' => new Main\Entity\BooleanField(
  214. 'ISSUING_CENTER',
  215. [
  216. 'values' => ['N', 'Y'],
  217. 'default_value' => 'Y',
  218. 'title' => Loc::getMessage('STORE_ENTITY_ISSUING_CENTER_FIELD'),
  219. ]
  220. ),
  221. 'SHIPPING_CENTER' => new Main\Entity\BooleanField(
  222. 'SHIPPING_CENTER',
  223. [
  224. 'values' => ['N', 'Y'],
  225. 'default_value' => 'Y',
  226. 'title' => Loc::getMessage('STORE_ENTITY_SHIPPING_CENTER_FIELD'),
  227. ]
  228. ),
  229. 'SITE_ID' => new Main\Entity\StringField(
  230. 'SITE_ID',
  231. [
  232. 'validation' => [__CLASS__, 'validateSiteId'],
  233. 'title' => Loc::getMessage('STORE_ENTITY_SITE_ID_FIELD'),
  234. ]
  235. ),
  236. 'CODE' => new Main\Entity\StringField(
  237. 'CODE',
  238. [
  239. 'validation' => [__CLASS__, 'validateCode'],
  240. 'title' => Loc::getMessage('STORE_ENTITY_CODE_FIELD'),
  241. ]
  242. ),
  243. 'IS_DEFAULT' => new Main\ORM\Fields\EnumField(
  244. 'IS_DEFAULT',
  245. [
  246. 'values' => ['N', 'Y'],
  247. 'default_value' => 'N',
  248. 'title' => Loc::getMessage('STORE_ENTITY_IS_DEFAULT_FIELD'),
  249. ]
  250. ),
  251. ];
  252. }
  253. /**
  254. * Return uf identifier.
  255. *
  256. * @return string
  257. */
  258. public static function getUfId()
  259. {
  260. return 'CAT_STORE';
  261. }
  262. /**
  263. * Returns validators for TITLE field.
  264. *
  265. * @return array
  266. */
  267. public static function validateTitle(): array
  268. {
  269. return [
  270. new Main\Entity\Validator\Length(null, 75),
  271. ];
  272. }
  273. /**
  274. * Returns validators for ADDRESS field.
  275. *
  276. * @return array
  277. */
  278. public static function validateAddress(): array
  279. {
  280. return [
  281. new Main\Entity\Validator\Length(null, 245),
  282. ];
  283. }
  284. /**
  285. * Returns validators for GPS_N field.
  286. *
  287. * @return array
  288. */
  289. public static function validateGpsN(): array
  290. {
  291. return [
  292. new Main\Entity\Validator\Length(null, 15),
  293. ];
  294. }
  295. /**
  296. * Returns validators for GPS_S field.
  297. *
  298. * @return array
  299. */
  300. public static function validateGpsS(): array
  301. {
  302. return [
  303. new Main\Entity\Validator\Length(null, 15),
  304. ];
  305. }
  306. /**
  307. * Returns validators for IMAGE_ID field.
  308. *
  309. * @return array
  310. */
  311. public static function validateImageId(): array
  312. {
  313. return [
  314. new Main\Entity\Validator\Length(null, 45),
  315. ];
  316. }
  317. /**
  318. * Returns validators for PHONE field.
  319. *
  320. * @return array
  321. */
  322. public static function validatePhone(): array
  323. {
  324. return [
  325. new Main\Entity\Validator\Length(null, 45),
  326. ];
  327. }
  328. /**
  329. * Returns validators for SCHEDULE field.
  330. *
  331. * @return array
  332. */
  333. public static function validateSchedule(): array
  334. {
  335. return [
  336. new Main\Entity\Validator\Length(null, 255),
  337. ];
  338. }
  339. /**
  340. * Returns validators for XML_ID field.
  341. *
  342. * @return array
  343. */
  344. public static function validateXmlId(): array
  345. {
  346. return [
  347. new Main\Entity\Validator\Length(null, 255),
  348. ];
  349. }
  350. /**
  351. * Returns validators for EMAIL field.
  352. *
  353. * @return array
  354. */
  355. public static function validateEmail(): array
  356. {
  357. return [
  358. new Main\Entity\Validator\Length(null, 255),
  359. ];
  360. }
  361. /**
  362. * Returns validators for SITE_ID field.
  363. *
  364. * @return array
  365. */
  366. public static function validateSiteId(): array
  367. {
  368. return [
  369. new Main\Entity\Validator\Length(null, 2),
  370. ];
  371. }
  372. /**
  373. * Returns validators for CODE field.
  374. *
  375. * @return array
  376. */
  377. public static function validateCode(): array
  378. {
  379. return [
  380. new Main\Entity\Validator\Length(null, 255),
  381. ];
  382. }
  383. public static function getDefaultStoreId(): ?int
  384. {
  385. $iterator = self::getList([
  386. 'select' => ['ID'],
  387. 'filter' => [
  388. '=IS_DEFAULT' => 'Y',
  389. ],
  390. 'cache' => ['ttl' => 86400],
  391. ]);
  392. $row = $iterator->fetch();
  393. $defaultStoreId = (int)($row['ID'] ?? 0);
  394. unset($row, $iterator);
  395. return ($defaultStoreId > 0 ? $defaultStoreId : null);
  396. }
  397. }