/modules/landing/lib/internals/base.php
https://gitlab.com/alexprowars/bitrix · PHP · 185 lines · 129 code · 16 blank · 40 comment · 21 complexity · c3d37b645af5a9ba5b3fa0293de64deb MD5 · raw file
- <?php
- namespace Bitrix\Landing\Internals;
- use \Bitrix\Landing\Manager;
- class BaseTable
- {
- public static $internalClass = null;
- /**
- * Get internal class (must declarated in external class).
- * @return string
- */
- private static function getCallingClass()
- {
- if (static::$internalClass === null)
- {
- throw new \Bitrix\Main\SystemException(
- 'Variable static::$internalClass must be declarated in external class.'
- );
- }
- return '\\' . __NAMESPACE__ . '\\' . static::$internalClass;
- }
- /**
- * Get Map of table.
- * @return array
- */
- public static function getMap()
- {
- /** @var \Bitrix\Main\ORM\Data\DataManager $class */
- $class = self::getCallingClass();
- return $class::getMap();
- }
- /**
- * Create new record and return it new id.
- * @param array $fields Fields array.
- * @return \Bitrix\Main\ORM\Data\AddResult
- */
- public static function add($fields)
- {
- $uid = Manager::getUserId();
- $uid = $uid ? $uid : 1;
- $date = new \Bitrix\Main\Type\DateTime;
- $charValue = array(
- 'ACTIVE', 'PUBLIC', 'SITEMAP', 'FOLDER'
- );
- foreach ($charValue as $code)
- {
- if (isset($fields[$code]) && $fields[$code] != 'Y')
- {
- $fields[$code] = 'N';
- }
- }
- if (!isset($fields['CREATED_BY_ID']))
- {
- $fields['CREATED_BY_ID'] = $uid;
- }
- if (!isset($fields['MODIFIED_BY_ID']))
- {
- $fields['MODIFIED_BY_ID'] = $uid;
- }
- if (!isset($fields['DATE_CREATE']))
- {
- $fields['DATE_CREATE'] = $date;
- }
- if (!isset($fields['DATE_MODIFY']))
- {
- $fields['DATE_MODIFY'] = $date;
- }
- /** @var \Bitrix\Main\ORM\Data\DataManager $class */
- $class = self::getCallingClass();
- return $class::add($fields);
- }
- /**
- * Update record.
- * @param int $id Record key.
- * @param array $fields Fields array.
- * @return \Bitrix\Main\Result
- */
- public static function update($id, $fields = array())
- {
- $uid = Manager::getUserId();
- $date = new \Bitrix\Main\Type\DateTime;
- $charValue = array(
- 'ACTIVE', 'PUBLIC', 'SITEMAP', 'FOLDER'
- );
- foreach ($charValue as $code)
- {
- if (isset($fields[$code]) && $fields[$code] != 'Y')
- {
- $fields[$code] = 'N';
- }
- }
- if (isset($fields['ID']))
- {
- unset($fields['ID']);
- }
- if (!isset($fields['MODIFIED_BY_ID']))
- {
- $fields['MODIFIED_BY_ID'] = $uid;
- }
- else if (!$fields['MODIFIED_BY_ID'])
- {
- unset($fields['MODIFIED_BY_ID']);
- }
- if (!isset($fields['DATE_MODIFY']))
- {
- $fields['DATE_MODIFY'] = $date;
- }
- if (!$fields['DATE_MODIFY'])
- {
- unset($fields['DATE_MODIFY']);
- }
- /** @var \Bitrix\Main\ORM\Data\DataManager $class */
- $class = self::getCallingClass();
- return $class::update($id, $fields);
- }
- /**
- * Delete record.
- * @param int $id Record key.
- * @return \Bitrix\Main\Result
- */
- public static function delete($id)
- {
- /** @var \Bitrix\Main\ORM\Data\DataManager $class */
- $class = self::getCallingClass();
- \Bitrix\Landing\Debug::log(
- $class,
- 'id: ' . $id . '@' . print_r(\Bitrix\Main\Diag\Helper::getBackTrace(5), true),
- 'LANDING_ENTITY_DELETE'
- );
- return $class::delete($id);
- }
- /**
- * Get records of table.
- * @param array $params Params array like ORM style.
- * @return \Bitrix\Main\DB\Result
- */
- public static function getList($params = array())
- {
- $class = self::getCallingClass();
- if (method_exists($class, 'setAccessFilter'))
- {
- $params = $class::setAccessFilter($params);
- }
- /** @var \Bitrix\Main\ORM\Data\DataManager $class */
- return $class::getList($params);
- }
- /**
- * Register calllback for internal table.
- * @param string $code Type of callback.
- * @param callable $callback Callback.
- * @return void
- */
- public static function callback($code, $callback)
- {
- $class = self::getCallingClass();
- if (mb_substr(mb_strtolower($class), -5) == 'table')
- {
- $class = mb_substr($class, 0, -5);
- if ($class)
- {
- $eventManager = \Bitrix\Main\EventManager::getInstance();
- $eventManager->addEventHandler(
- 'landing',
- $class . '::' . $code,
- $callback
- );
- }
- }
- }
- }