commit 9c6adf8b73a01e9e5dfed3b59a2b80926c6bb2bf Author: bellord13 Date: Wed Feb 4 14:16:30 2026 +0300 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2597961 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.env +src/config.php +*_config.php +!default_config.php +src/Defines.php +src/*Defines.php +src/*Facade.php +!*.example +!.example +_utils \ No newline at end of file diff --git a/.module.json b/.module.json new file mode 100644 index 0000000..abfc28a --- /dev/null +++ b/.module.json @@ -0,0 +1,9 @@ +{ + "id": "bx.discount", + "prefix": "bx_discount", + "namespace": "Bx\\Discount", + "gitUrl": "https://gitea.ixrs.ru/Bellord/bx.discount.git", + "version": "1.0.0", + "date": "2026-02-04 00:00:00", + "deps": ["wt.core"] +} \ No newline at end of file diff --git a/admin/main/config.php b/admin/main/config.php new file mode 100644 index 0000000..7972348 --- /dev/null +++ b/admin/main/config.php @@ -0,0 +1,23 @@ + [ + 'TITLE' => GetMessage('MAIN_OPTIONS_PARAMETERS'), + 'THEME' => 'Y', + 'OPTIONS' => [ + + ], + ], + 'TEST' => [ + 'TITLE' => 'test', + 'OPTIONS' => [ + 'TEST' => [ + 'TITLE' => 'test_setting', + 'TYPE' => 'text', + 'DEFAULT' => '', + ], + ], + ], +]; \ No newline at end of file diff --git a/admin/main/index.php b/admin/main/index.php new file mode 100644 index 0000000..e0074eb --- /dev/null +++ b/admin/main/index.php @@ -0,0 +1,9 @@ +render(); + +require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin.php'); \ No newline at end of file diff --git a/admin/main/lang/ru/config.php b/admin/main/lang/ru/config.php new file mode 100644 index 0000000..a9f0ebd --- /dev/null +++ b/admin/main/lang/ru/config.php @@ -0,0 +1,2 @@ +setSort(10) + ->setTitle('Discount Main'); \ No newline at end of file diff --git a/admin/main/submenu/discount_table/index.php b/admin/main/submenu/discount_table/index.php new file mode 100644 index 0000000..e95109f --- /dev/null +++ b/admin/main/submenu/discount_table/index.php @@ -0,0 +1,20 @@ +checkPermission() + ->start() + ->show(); + +require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin.php'); \ No newline at end of file diff --git a/admin/main/submenu/discount_table/lang/ru/index.php b/admin/main/submenu/discount_table/lang/ru/index.php new file mode 100644 index 0000000..c090dcf --- /dev/null +++ b/admin/main/submenu/discount_table/lang/ru/index.php @@ -0,0 +1,2 @@ +setVisible(false) + ->setSort(1300) + ->setTitle('Discount Table') + ->setIcon('iblock_menu_icon_iblocks') + ->setUrl(); \ No newline at end of file diff --git a/admin/main/submenu/discount_table/submenu/row/index.php b/admin/main/submenu/discount_table/submenu/row/index.php new file mode 100644 index 0000000..47176da --- /dev/null +++ b/admin/main/submenu/discount_table/submenu/row/index.php @@ -0,0 +1,20 @@ +checkPermission(); +$AdminPageTableRow->start(); + +\CJSCore::Init('jquery'); + +require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin.php'); \ No newline at end of file diff --git a/admin/main/submenu/discount_table/submenu/row/lang/ru/config.php b/admin/main/submenu/discount_table/submenu/row/lang/ru/config.php new file mode 100644 index 0000000..a9f0ebd --- /dev/null +++ b/admin/main/submenu/discount_table/submenu/row/lang/ru/config.php @@ -0,0 +1,2 @@ +setSort(1400) + ->setTitle('Discount Table Row') + ->setIcon('default_menu_icon') + ->setVisible(false) + ->setUrl(); \ No newline at end of file diff --git a/admin/main/submenu/settings/config.php b/admin/main/submenu/settings/config.php new file mode 100644 index 0000000..307dcd5 --- /dev/null +++ b/admin/main/submenu/settings/config.php @@ -0,0 +1,43 @@ + [ + 'TITLE' => 'Общие сведения', + 'OPTIONS' => [ + 'ENABLE' => [ + 'TITLE' => 'Enable module', + 'TYPE' => 'checkbox', + 'DEFAULT' => 'N', + 'HINT' => '', + ], + 'CONFIG' => [ + 'TITLE' => 'Конфигурационные данные', + 'HINT' => '', + 'TYPE' => 'content', + 'INCLUDEFILE' => \Wt\Core\Tools::removeDocRoot(__DIR__ . '/include/config.php'), + 'SHOW_EDIT_BUTTON' => 'N', + 'DEFAULT' => '', + ], + ], + ], + 'DOCS' => [ + 'TITLE' => 'Docs', + 'OPTIONS' => [ + 'DOCUMENTATION' => [ + 'TITLE' => 'Documentation', + 'TYPE' => 'content', + 'INCLUDEFILE' => \Wt\Core\Tools::removeDocRoot(__DIR__ . '/include/documentation.php'), + 'SHOW_EDIT_BUTTON' => 'N', + 'DEFAULT' => '', + ], + ], + ], +]; \ No newline at end of file diff --git a/admin/main/submenu/settings/include/config.php b/admin/main/submenu/settings/include/config.php new file mode 100644 index 0000000..3cfe04b --- /dev/null +++ b/admin/main/submenu/settings/include/config.php @@ -0,0 +1,49 @@ +getAdminPage()->getModuleId(); +$app = app()::getInstance($moduleId); +$data = []; +$data['env'] = $app->env(); + + +?> + + $value) { + ?>
+
+ + module()->getSrc(); + $html = "
if(file_exists(\$_SERVER['DOCUMENT_ROOT'] . '$src/init.php')) + include_once \$_SERVER['DOCUMENT_ROOT'] . '$src/init.php';
"; + ?> + + + + +
+ getCheckTemplate($app->isIncludeFileToInitPhp())?> + + Модуль подключен в init.php + + + + init.php отсутствует +
+ +
+
\ No newline at end of file diff --git a/admin/main/submenu/settings/include/documentation.php b/admin/main/submenu/settings/include/documentation.php new file mode 100644 index 0000000..45d092e --- /dev/null +++ b/admin/main/submenu/settings/include/documentation.php @@ -0,0 +1 @@ +Документация \ No newline at end of file diff --git a/admin/main/submenu/settings/index.php b/admin/main/submenu/settings/index.php new file mode 100644 index 0000000..e77e49d --- /dev/null +++ b/admin/main/submenu/settings/index.php @@ -0,0 +1,9 @@ +render(); + +require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin.php'); \ No newline at end of file diff --git a/admin/main/submenu/settings/lang/ru/index.php b/admin/main/submenu/settings/lang/ru/index.php new file mode 100644 index 0000000..c090dcf --- /dev/null +++ b/admin/main/submenu/settings/lang/ru/index.php @@ -0,0 +1,2 @@ +setSort(5) + ->setTitle('Settings') + ->setUrl(); \ No newline at end of file diff --git a/default_config.php b/default_config.php new file mode 100644 index 0000000..f3a1e4e --- /dev/null +++ b/default_config.php @@ -0,0 +1,21 @@ + [ + 'Bx\Discount\Factory\DiscountFactory' => ['cache' => ['hit'], 'is_collection_query' => true], + ], + 'events' => [ + 'main:OnPageStart' => [ + ['Bx\Discount\Handlers\Autoloader', 'onPageStart'], + ], + 'main:OnProlog' => [ + ['Bx\Discount\Handlers\Autoloader', 'onProlog'], + ], + 'main:OnEpilog' => [ + ['Bx\Discount\Handlers\Autoloader', 'onEpilog'], + ], + 'main:OnBeforeProlog' => [ + ['Bx\Discount\Handlers\Autoloader', 'onBeforeProlog'], + ], + ], +]; \ No newline at end of file diff --git a/functions/app.php b/functions/app.php new file mode 100644 index 0000000..979ad82 --- /dev/null +++ b/functions/app.php @@ -0,0 +1,11 @@ +container())); \ No newline at end of file diff --git a/install/index.php b/install/index.php new file mode 100644 index 0000000..2d69bbb --- /dev/null +++ b/install/index.php @@ -0,0 +1,116 @@ +module = $module; + + $this->MODULE_ID = $module['id']; + $this->MODULE_VERSION = $module['version']; + $this->MODULE_VERSION_DATE = $module['date']; + + $langPrefix = $module['prefix']; + + $this->PARTNER_NAME = GetMessage("{$langPrefix}_partner_name"); + $this->PARTNER_URI = GetMessage("{$langPrefix}_partner_uri"); + $this->MODULE_NAME = GetMessage("{$langPrefix}_module_name"); + $this->MODULE_DESCRIPTION = GetMessage("{$langPrefix}_module_description"); + } + + + public function DoInstall() + { + global $APPLICATION; + + if (is_array($this->module['deps'])) { + foreach ($this->module['deps'] as $moduleId) { + if (!\Bitrix\Main\Loader::includeModule($moduleId)) { + $APPLICATION->ThrowException("Module {$moduleId} not installed!"); + return false; + } + } + } + + if (!CheckVersion(PHP_VERSION, '5.4.0')) { + $APPLICATION->ThrowException('Php version required more 5.4.0'); + return false; + } + + RegisterModule($this->MODULE_ID); + RegisterModuleDependences('main', 'OnPageStart', $this->MODULE_ID); + $this->InstallEvents(); + $this->InstallCatalogExport(); + + + return true; + } + + public function DoUninstall() + { + global $APPLICATION; + UnRegisterModule($this->MODULE_ID); + UnRegisterModuleDependences('main', 'OnPageStart', $this->MODULE_ID, '', ''); + $this->UnInstallEvents(); + $this->UnInstallCatalogExport(); + return true; + } + + public function InstallCatalogExport() + { + if (is_dir(__DIR__ . '/catalog_export') && \Bitrix\Main\Loader::includeModule('catalog')) { + CopyDirFiles(__DIR__ . '/catalog_export', $_SERVER['DOCUMENT_ROOT'] . CATALOG_PATH2EXPORTS, true, true); + } + return true; + } + + public function UnInstallCatalogExport() + { + return true; + } + + + public function InstallEvents() + { + if (class_exists('\Bitrix\Main\EventManager')) { + $eventManager = EventManager::getInstance(); + // $eventManager->registerEventHandler( + // 'main', + // 'OnPageStart', + // $this->MODULE_ID, + // 'Bx\Discount\Handler\Handler', + // 'exec', + // 100 + // ); + } + return true; + } + + public function UnInstallEvents() + { + if (class_exists('\Bitrix\Main\EventManager')) { + $eventManager = \Bitrix\Main\EventManager::getInstance(); + // $eventManager->unRegisterEventHandler( + // 'main', + // 'OnPageStart', + // $this->MODULE_ID, + // 'Bx\Discount\Handler\Handler', + // 'exec' + // ); + } + + return true; + } +} \ No newline at end of file diff --git a/lang/ru/install/index.php b/lang/ru/install/index.php new file mode 100644 index 0000000..bedea36 --- /dev/null +++ b/lang/ru/install/index.php @@ -0,0 +1,5 @@ +getFactoryInstance(DiscountFactory::class); + } + +} \ No newline at end of file diff --git a/lib/Ajax/BxDiscount.php b/lib/Ajax/BxDiscount.php new file mode 100644 index 0000000..021eb7a --- /dev/null +++ b/lib/Ajax/BxDiscount.php @@ -0,0 +1,19 @@ +getResponse()->addData(['method' => 'ajaxStart']); + } + + public function test() + { + $this->getResponse()->addData(['method' => 'test', 'version' => app()::getInstance('bx.discount')->module()->getVersion()]); + return $this->getResponse(); + } +} \ No newline at end of file diff --git a/lib/App/App.php b/lib/App/App.php new file mode 100644 index 0000000..24f5d41 --- /dev/null +++ b/lib/App/App.php @@ -0,0 +1,51 @@ +includeFileToInitPhp; + } + $this->includeFileToInitPhp = $value; + return $this; + } +} \ No newline at end of file diff --git a/lib/Collection/DiscountCollection.php b/lib/Collection/DiscountCollection.php new file mode 100644 index 0000000..76449bb --- /dev/null +++ b/lib/Collection/DiscountCollection.php @@ -0,0 +1,78 @@ +app->container()->make($this->app->module()->getId().':mainAbstractFactory'); + } +} \ No newline at end of file diff --git a/lib/Facade/DefaultServiceFacade.php b/lib/Facade/DefaultServiceFacade.php new file mode 100644 index 0000000..3d44f79 --- /dev/null +++ b/lib/Facade/DefaultServiceFacade.php @@ -0,0 +1,10 @@ + new \Bitrix\Main\Entity\IntegerField('ID', [ + 'primary' => true, + 'autocomplete' => true, + 'title' => 'Id', + ]), + 'CREATED_AT' => new \Bitrix\Main\Entity\DatetimeField('CREATED_AT', [ + 'title' => 'CreatedAt', + 'user_edit' => false, + ]), + 'UPDATED_AT' => new \Bitrix\Main\Entity\DatetimeField('UPDATED_AT', [ + 'title' => 'UpdatedAt', + 'user_edit' => false, + ]), + ]; + } + + /** + * @param $primary + * @param array $data + * @return \Bitrix\Main\ORM\Data\UpdateResult + * @throws \Bitrix\Main\ObjectException + * @throws Exception + */ + public static function update($primary, array $data) + { + foreach (static::getEntity()->getFields() as $field){ + if(is_a($field, DatetimeField::class)){ + if(isset($data[$field->getName()]) && !is_a($data[$field->getName()], DateTime::class)) { + $data[$field->getName()] = new \Bitrix\Main\Type\DateTime($data[$field->getName()]); + } + } + } + + $data = array_merge($data, [ + 'UPDATED_AT' => new \Bitrix\Main\Type\DateTime(), // date(CDatabase::DateFormatToPHP(FORMAT_DATETIME)) + ]); + unset($data['CREATED_AT']); + + return parent::update($primary, $data); + } + + /** + * @param array $fields + * @return \Bitrix\Main\ORM\Data\AddResult + * @throws \Bitrix\Main\ObjectException + * @throws Exception + */ + public static function add(array $fields) + { + $fields = array_merge($fields, [ + 'CREATED_AT' => new \Bitrix\Main\Type\DateTime(), + 'UPDATED_AT' => new \Bitrix\Main\Type\DateTime(), + ]); + + return parent::add($fields); + } +} \ No newline at end of file diff --git a/lib/Providers/DefaultFactoryProvider.php b/lib/Providers/DefaultFactoryProvider.php new file mode 100644 index 0000000..2f16c7c --- /dev/null +++ b/lib/Providers/DefaultFactoryProvider.php @@ -0,0 +1,23 @@ +config(); + $serviceContainer = $app->container(); + + /** + * @var MainAbstractFactory $mainAbstractFactory + */ + $mainAbstractFactory = $serviceContainer->make(MainAbstractFactory::class, [$config->get('MainAbstractFactory', [])]); + $serviceContainer->singleton($app->module()->getId().':mainAbstractFactory', $mainAbstractFactory); + + } +} \ No newline at end of file diff --git a/lib/Providers/DefaultServiceProvider.php b/lib/Providers/DefaultServiceProvider.php new file mode 100644 index 0000000..b2b4f9a --- /dev/null +++ b/lib/Providers/DefaultServiceProvider.php @@ -0,0 +1,19 @@ +app->container(); + $config = $this->app->config(); + + } +} \ No newline at end of file diff --git a/src/.env.example b/src/.env.example new file mode 100644 index 0000000..c2c027f --- /dev/null +++ b/src/.env.example @@ -0,0 +1 @@ +local \ No newline at end of file diff --git a/src/config.php.example b/src/config.php.example new file mode 100644 index 0000000..ec8c5aa --- /dev/null +++ b/src/config.php.example @@ -0,0 +1,7 @@ + [], +];