Skip to content

Commit 42f2db8

Browse files
committed
First commit
0 parents  commit 42f2db8

30 files changed

+1930
-0
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.idea
2+
/vendor/
3+
composer.lock
4+
.phpunit.result.cache

admin/menu.php

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
return [
4+
[
5+
'parent_menu' => 'global_menu_content',
6+
'sort' => 400,
7+
'text' => 'Настройка роутера Symfony',
8+
'title' => 'Настройка роутера Symfony',
9+
'url' => 'symfony_router_index.php',
10+
'items_id' => 'menu_references',
11+
'items' => [
12+
[
13+
'text' => 'Конфигурация',
14+
'url' => 'symfony_router_index.php',
15+
'more_url' => ['symfony_router_index.php'],
16+
'title' => 'Конфигурация',
17+
],
18+
],
19+
],
20+
];

composer.json

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{
2+
"name": "proklung/bitrix-symfony-router-module",
3+
"description": "Модуль для Битрикса, обеспечивающий работу с роутером Symfony и нативными битриксовыми маршрутами",
4+
"type": "bitrix-d7-module",
5+
"keywords": [
6+
"bitrix",
7+
"bitrix-module",
8+
"bitrix-cms",
9+
"bitrix-d7"
10+
],
11+
"homepage": "https://github.com/ProklUng/bitrix.symfony.router.module",
12+
"license": "MIT",
13+
"authors": [
14+
{
15+
"name": "Gavrilov Fedy",
16+
"email": "[email protected]"
17+
}
18+
],
19+
20+
"support": {
21+
"issues": "https://github.com/ProklUng/bitrix.symfony.router.module/issues",
22+
"source": "https://github.com/ProklUng/bitrix.symfony.router.module"
23+
},
24+
"extra": {
25+
"installer-name": "proklung.symfony.router"
26+
},
27+
"require": {
28+
"php": ">=7.1 || ^8.0",
29+
"proklung/bitrix.module.boilerplate": "^1.0",
30+
"symfony/routing": "^4.0 || ^5.0",
31+
"symfony/http-kernel": "^4.0 || ^5.0",
32+
"symfony/http-foundation": "^4.0 || ^5.0",
33+
"symfony/event-dispatcher": "^4.0 || ^5.0",
34+
"symfony/serializer": "^4.0 || ^5.0",
35+
"symfony/config": "^4.0 || ^5.0",
36+
"composer/installers": "~1"
37+
},
38+
"require-dev": {
39+
"icanhazstring/composer-unused": "^0.7.5"
40+
}
41+
}
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
use Bitrix\Main\Routing\RoutingConfigurator;
4+
use Prokl\BitrixSymfonyRouterBundle\Services\Agnostic\RoutesLoader;
5+
use Prokl\BitrixSymfonyRouterBundle\Services\Utils\BitrixRouteConvertor;
6+
use Proklung\Symfony\Router\Utils\Loader;
7+
use ProklUng\Module\Boilerplate\Options\ModuleManager;
8+
9+
// init kernel
10+
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
11+
12+
if (!\Bitrix\Main\Loader::includeModule('proklung.symfony.router')) {
13+
return function (RoutingConfigurator $routes) {};
14+
}
15+
16+
$moduleManager = new ModuleManager('proklung.symfony.router');
17+
$phpConfigFile = $moduleManager->get('php_router_config_path');
18+
19+
$routeConvertor = Loader::get($phpConfigFile);
20+
21+
// Файл с конфигом не найден.
22+
if ($routeConvertor === null) {
23+
return function (RoutingConfigurator $routes) {};
24+
}
25+
26+
return function (RoutingConfigurator $routes) use ($routeConvertor) {
27+
$routeConvertor->convertRoutes($routes);
28+
};

include.php

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
use Bitrix\Main\Loader;
4+
use ProklUng\Module\Boilerplate\Options\ModuleManager;
5+
use Proklung\Symfony\Router\Subscribers\OnAfterSaveOptionsHandler;
6+
use Proklung\Symfony\Router\Subscribers\ValidatorNativeConfigs;
7+
use Proklung\Symfony\Router\Subscribers\ValidatorSymfonyConfigs;
8+
9+
Loader::registerAutoLoadClasses(
10+
'proklung.symfony.router',
11+
[
12+
'proklung_symfony_router' => 'install/index.php',
13+
]
14+
);
15+
16+
$moduleManager = new ModuleManager('proklung.symfony.router');
17+
$configFilePath = $moduleManager->get('yaml_config_file_path');
18+
$cachePath = $moduleManager->get('yaml_cache_path');
19+
20+
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
21+
$moduleManager->getModuleId(),
22+
'OnAfterSaveOptions',
23+
[new OnAfterSaveOptionsHandler, 'handler']
24+
);
25+
26+
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
27+
$moduleManager->getModuleId(),
28+
'OnBeforeSetOption',
29+
[new ValidatorNativeConfigs, 'handler']
30+
);
31+
32+
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
33+
$moduleManager->getModuleId(),
34+
'OnBeforeSetOption',
35+
[new ValidatorSymfonyConfigs, 'handler']
36+
);
37+
38+
$routerInstance = \Proklung\Symfony\Router\Utils\Loader::from($configFilePath, $cachePath);
39+
40+
if (Proklung\Symfony\Router\Utils\Loader::checkRequirements()) {
41+
$configBitrixRoutesPath = $moduleManager->get('native_config_file_path');
42+
$cacheBitrixRoutesPath = $moduleManager->get('native_yaml_cache_path');
43+
$phpConfigFile = $moduleManager->get('php_router_config_path');
44+
45+
$routeConvertor = Proklung\Symfony\Router\Utils\Loader::native($configBitrixRoutesPath, $cacheBitrixRoutesPath);
46+
if ($routeConvertor !== null) {
47+
Proklung\Symfony\Router\Utils\Loader::save($phpConfigFile, $routeConvertor);
48+
}
49+
}
+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
use ProklUng\Module\Boilerplate\Module;
4+
5+
require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_before.php';
6+
7+
// @todo: Здесь - какой-то системный код, читающие данные и всё такое
8+
9+
require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_after.php';
10+
11+
// Странный эффект: на новой версии Битрикса на этой стадии класс модуля не инстанцирован.
12+
// На старом - все OK.
13+
try {
14+
$module = Module::getModuleInstance('proklung.symfony.router');
15+
} catch (\LogicException $e) {
16+
new proklung_symfony_router();
17+
$module = Module::getModuleInstance('proklung.symfony.router');
18+
}
19+
20+
$module->showOptionsForm();
21+
22+
require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin.php';

install/index.php

+146
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
<?php
2+
3+
use Bitrix\Main\Localization\Loc;
4+
use Bitrix\Main\ModuleManager;
5+
use ProklUng\Module\Boilerplate\Module;
6+
use ProklUng\Module\Boilerplate\ModuleUtilsTrait;
7+
8+
Loc::loadMessages(__FILE__);
9+
10+
class proklung_symfony_router extends CModule
11+
{
12+
use ModuleUtilsTrait;
13+
14+
public function __construct()
15+
{
16+
$arModuleVersion = [];
17+
18+
include __DIR__.'/version.php';
19+
20+
if (is_array($arModuleVersion)
21+
&&
22+
array_key_exists('VERSION', $arModuleVersion)) {
23+
$this->MODULE_VERSION = $arModuleVersion['VERSION'];
24+
$this->MODULE_VERSION_DATE = $arModuleVersion['VERSION_DATE'];
25+
}
26+
27+
$this->MODULE_FULL_NAME = 'symfony.router';
28+
$this->MODULE_VENDOR = 'proklung';
29+
$prefixLangCode = 'SYMFONY_ROUTER';
30+
31+
$this->MODULE_NAME = Loc::getMessage($prefixLangCode.'_MODULE_NAME');
32+
$this->MODULE_ID = $this->MODULE_VENDOR.'.'.$this->MODULE_FULL_NAME;
33+
34+
$this->MODULE_DESCRIPTION = Loc::getMessage($prefixLangCode.'_MODULE_DESCRIPTION');
35+
$this->MODULE_GROUP_RIGHTS = 'N';
36+
$this->PARTNER_NAME = Loc::getMessage($prefixLangCode.'_MODULE_PARTNER_NAME');
37+
$this->PARTNER_URI = Loc::getMessage($prefixLangCode.'MODULE_PARTNER_URI');
38+
39+
$this->INSTALL_PATHS = [
40+
'/local/modules/proklung.symfony.router/install/admin/symfony_router_index.php'
41+
=> '/bitrix/admin/symfony_router_index.php',
42+
];
43+
44+
$this->moduleManager = new Module(
45+
[
46+
'MODULE_ID' => $this->MODULE_ID,
47+
'VENDOR_ID' => $this->MODULE_VENDOR,
48+
'MODULE_VERSION' => $this->MODULE_VERSION,
49+
'MODULE_VERSION_DATE' => $this->MODULE_VERSION_DATE,
50+
'ADMIN_FORM_ID' => $this->MODULE_VENDOR.'_settings_form',
51+
]
52+
);
53+
54+
$this->moduleManager->addModuleInstance($this);
55+
$this->options();
56+
}
57+
58+
/**
59+
* @inheritDoc
60+
*/
61+
protected function getSchemaTabsAdmin(): array
62+
{
63+
$values =
64+
[
65+
'yaml_config' => [
66+
'TAB' => 'Роуты Symfony',
67+
'TITLE' => 'Роуты Symfony',
68+
],
69+
];
70+
71+
if (self::checkRequirements()) {
72+
$values = array_merge(
73+
$values,
74+
[ 'bitrix_native_routes' => [
75+
'TAB' => 'Нативные роуты Битрикс',
76+
'TITLE' => 'Нативные роуты Битрикс',
77+
]]
78+
);
79+
}
80+
81+
return $values;
82+
}
83+
84+
/**
85+
* @inheritDoc
86+
*/
87+
protected function getSchemaOptionsAdmin(): array
88+
{
89+
return [
90+
'symfony_routes_active' =>
91+
[
92+
'label' => 'Активность',
93+
'tab' => 'yaml_config',
94+
'type' => 'checkbox',
95+
],
96+
'yaml_config_file_path' =>
97+
[
98+
'label' => 'Путь к Yaml файлу с конфигурацией роутов',
99+
'tab' => 'yaml_config',
100+
'type' => 'text',
101+
],
102+
103+
'yaml_cache_path' =>
104+
[
105+
'label' => 'Путь к папке с кэшом Yaml файлов',
106+
'tab' => 'yaml_config',
107+
'type' => 'text',
108+
],
109+
'bitrix_routes_active' =>
110+
[
111+
'label' => 'Активность',
112+
'tab' => 'bitrix_native_routes',
113+
'type' => 'checkbox',
114+
],
115+
'php_router_config_path' =>
116+
[
117+
'label' => 'Файл php с описанием роутов (в папке /local/routes)',
118+
'tab' => 'bitrix_native_routes',
119+
'type' => 'text',
120+
],
121+
'native_config_file_path' =>
122+
[
123+
'label' => 'Путь к Yaml файлу с конфигурацией нативных роутов Битрикс',
124+
'tab' => 'bitrix_native_routes',
125+
'type' => 'text',
126+
],
127+
'native_yaml_cache_path' =>
128+
[
129+
'label' => 'Путь к папке с кэшом Yaml файлов нативных роутов Битрикс',
130+
'tab' => 'bitrix_native_routes',
131+
'type' => 'text',
132+
],
133+
134+
];
135+
}
136+
137+
/**
138+
* Проверка на нужную версию главного модуля.
139+
*
140+
* @return boolean
141+
*/
142+
private static function checkRequirements(): bool
143+
{
144+
return CheckVersion(ModuleManager::getVersion('main'), '21.400.0');
145+
}
146+
}

install/version.php

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
$arModuleVersion = [
4+
'VERSION' => '1.0.0',
5+
'VERSION_DATE' => '2021-07-25'
6+
];

lang/ru/admin/menu.php

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?php
2+
3+
$MESS['SYMFONY_ROUTER_MODULE_MENU_TITLE'] = 'Настройка роутера Symfony';
4+
$MESS['SYMFONY_ROUTER_MODULE_SUBMENU_TITLE'] = 'Конфиги';

lang/ru/install/index.php

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
$MESS['SYMFONY_ROUTER_MODULE_NAME'] = 'Symfony router';
4+
$MESS['SYMFONY_ROUTER_MODULE_DESCRIPTION'] = 'Symfony router';
5+
$MESS['SYMFONY_ROUTER_MODULE_PARTNER_NAME'] = 'Gavrilov Fedor';
6+
$MESS['SYMFONY_ROUTER_MODULE_PARTNER_URI'] = 'https://github.com/ProklUng';

lang/ru/options.php

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
defined('B_PROLOG_INCLUDED') and (B_PROLOG_INCLUDED === true) or die();
3+

lib/BitrixInitializerRouter.php

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace Proklung\Symfony\Router;
4+
5+
use Proklung\Symfony\Router\Contracts\RouterInitializerInterface;
6+
7+
/**
8+
* Class BitrixInitializerRouter
9+
* @package Proklung\Symfony\Router
10+
*
11+
* @since 24.07.2021
12+
*/
13+
class BitrixInitializerRouter implements RouterInitializerInterface
14+
{
15+
/**
16+
* @inheritDoc
17+
*/
18+
public function init(InitRouter $router)
19+
{
20+
AddEventHandler('main', 'OnProlog', [$router, 'handle']);
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Proklung\Symfony\Router\Contracts;
4+
5+
use Proklung\Symfony\Router\InitRouter;
6+
7+
/**
8+
* Interface RouterInitializerInterface
9+
* @package Proklung\Symfony\Router\Contracts
10+
*
11+
* @since 24.07.2021
12+
*/
13+
interface RouterInitializerInterface
14+
{
15+
/**
16+
* Инициализация роутера.
17+
*
18+
* @param InitRouter $router Инициализированный роутер.
19+
*
20+
* @return mixed
21+
*/
22+
public function init(InitRouter $router);
23+
}

0 commit comments

Comments
 (0)