Ветка 07_11_25

This commit is contained in:
2025-11-07 20:53:17 +02:00
commit 4bc7136fa4
218 changed files with 79301 additions and 0 deletions

13
404.shtml Normal file
View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Страница не найдена</title>
</head>
<body>
<h1>Страница не найдена</h1>
Запрошенный URL <!--#echo var="REQUEST_URI" --> не найден на сервере 404.
<hr>
<em><!--#echo var="HTTP_HOST" --></em>
</body>
</html>

13
405.shtml Normal file
View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Страница не найдена</title>
</head>
<body>
<h1>Страница не найдена</h1>
Запрошенный URL <php? #echo var="REQUEST_URI" ?> не найден на сервере 405.
<hr>
<em><php? #echo var="HTTP_HOST" ?></em>
</body>
</html>

13
config/config_site.php Normal file
View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<comfig>
<general>
<!--дизайн-->
<icon>../../img/favicon.ico</icon>
<sitename>Движок для сайтов</sitename>
<slogan>Идеален для сайтов-визиток</slogan>
<!--настройки-->
<encoding>utf-8</encoding>
<users>data/users.php</users>
<usersrequest>data/request_on_users.php</usersrequest>
</general>
</comfig>

13
content/405.shtml Normal file
View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Страница не найдена</title>
</head>
<body>
<h1>Страница не найдена</h1>
Запрошенный URL <php? #echo var="REQUEST_URI" ?> не найден на сервере 405.
<hr>
<em><php? #echo var="HTTP_HOST" ?></em>
</body>
</html>

101
content/access.page.php Normal file
View File

@@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<page>
<general>
<!--Kлючевые слова-->
<keywords>
Суперлёгкий движок
</keywords>
</general>
<!--Содержание страницы-->
<!--Левые блоки-->
<lblock/>
<!--Правые блоки-->
<rblock/>
<!--Текст страницы-->
<content tclass="btitle" bclass="bfloat">
<ru><![CDATA[
<div>
текст текст текст текст текст текст текст текст текст текст текст тексритчрсотат текст текст текст текст </div>
<div>
 текст текст текст текст текыККПАФЦКАКПАМст текст текст текст текст текст текст текст урпкцуептекст текст текст
</div>
<div>
 текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст
</div>
<div>
<hr style="height: 5px; width: 50%; background: rgb(0, 0, 0); border: 0px;">
<br>
</div>
<div>
<table style="width: 50%; margin: 1px; float: left; border: 1px solid rgb(0, 0, 0); background-color: rgb(255, 255, 255); border-collapse: collapse;">
<tbody>
<tr>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
</tr>
<tr>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
</tr>
<tr>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
</tr>
<tr>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
</tr>
</tbody>
</table>
<br>
</div>
<div>
<br>
</div>
<div>
<br>
</div>
<div>
<br>
</div>
<div>
<br>
</div>
<div>
<br>
</div>
<div><br>
</div>
]]></ru>
<lv><![CDATA[
<p>Uz šo brīdi šeit ne kā nav</p>
]]></lv>
<en><![CDATA[
<p>??????</p>
]]></en>
</content>
</page>

36
content/index.page.php Normal file
View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<page>
<general>
<!--Kлючевые слова-->
<keywords>
Суперлёгкий движок
</keywords>
</general>
<!--Содержание страницы-->
<!--Левые блоки-->
<lblock>
<block url="/plugin/foto/" title="df" tclass="btitle" bclass="bfloat"/>
<block url="/plugin/plugintest/" title="кнерцу" tclass="btitle" bclass="bfloat"/>
<block url="/plugin/foto/" title="цкпм" tclass="btitle" bclass="bfloat"/>
</lblock>
<!--Правые блоки-->
<rblock>
<block url="/plugin/plugintest/" title="a5ysd" tclass="btitle" bclass="bfloat"/>
</rblock>
<!--Текст страницы-->
<content tclass="btitle" bclass="bfloat">
<ru><![CDATA[
<!--?php
header('Content-Type: text/html; charset=utf-8');
readfile(__DIR__ . '/DgrmJS-main/src/index.html');
?-->
text
]]></ru>
<lv><![CDATA[
echo file_get_contents(__DIR__ . '/DgrmJS-main/src/index.html');
]]></lv>
<en><![CDATA[
echo file_get_contents(__DIR__ . '/DgrmJS-main/src/index.html');
]]></en>
</content>
</page>

107
content/rpi/index.page.php Normal file
View File

@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="utf-8"?>
<page>
<general>
<!--Kлючевые слова-->
<keywords>
Суперлёгкий движок
</keywords>
</general>
<!--Содержание страницы-->
<!--Левые блоки-->
<lblock>
</lblock>
<!--Правые блоки-->
<rblock>
</rblock>
<!--Текст страницы-->
<content tclass="btitle" bclass="bfloat">
<ru><![CDATA[
<div>
текст текст текст текст текст текст текст текст текст текст текст тексритчрсотат текст текст текст текст </div>
<div>
 текст текст текст текст текыККПАФЦКАКПАМст текст текст текст текст текст текст текст урпкцуептекст текст текст
</div>
<div>
 текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст
</div>
<div>
<hr style="height: 5px; width: 50%; background: rgb(0, 0, 0); border: 0px;">
<br>
</div>
<div>
<table style="width: 50%; margin: 1px; float: left; border: 1px solid rgb(0, 0, 0); background-color: rgb(255, 255, 255); border-collapse: collapse;">
<tbody>
<tr>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
</tr>
<tr>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
</tr>
<tr>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
</tr>
<tr>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
</td>
</tr>
</tbody>
</table>
<br>
</div>
<div>
<br>
</div>
<div>
<br>
</div>
<div>
<br>
</div>
<div>
<br>
</div>
<div>
<br>
</div>
<div><br>
</div>
]]></ru>
<lv><![CDATA[
<p>  cb <b>bbvcdjyfdyhyhdывепиwstdg</b></p>
]]></lv>
<en><![CDATA[
<p>dfgesgfuyjчнлаг</p><p></p>
]]></en>
</content>
</page>

47
content/template.page.php Normal file
View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<page>
<general>
<!--Kлючевые слова-->
<keywords>
</keywords>
<!--Условия доступа-->
<access>
<read>
<users>
</users>
<groups>
</groups>
</read>
<edit>
<users>
</users>
<groups>
</groups>
</edit>
</access>
</general>
<!--Содержание страницы-->
<!--Основное меню-->
<mainmenu>
<item name="имя" url="урл" title="описание">
</item>
</mainmenu>
<!--Текст страницы-->
<content tclass="btitle" bclass="bfloat">
<ru><![CDATA[
<p>пппппацфакц</p>
]]></ru>
<lv>
<![CDATA[
<p>Uz šo brīdi šeit ne kā nav</p>
]]>
</lv>
<en>
<![CDATA[
<p>??????</p>
]]>
</en>
</content>
<rblock/><lblock/></page>

1523
data/Basic_functions.js Normal file

File diff suppressed because it is too large Load Diff

87
data/createSite.page.php Normal file
View File

@@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<page>
<general>
<!--Kлючевые слова-->
<keywords></keywords>
</general>
<!--Содержание страницы-->
<!--Левые блоки-->
<lblock>
</lblock>
<!--Правые блоки-->
<rblock>
</rblock>
<!--Текст страницы-->
<content tclass="btitle" bclass="bfloat">
<ru><![CDATA[
<p><span style="font-size: 28px;"><span style="font-weight: bold;">Добро пожаловать на страницу создания сайта!</span></span></p>
<p>Для начала редактирования намите на шестерёнку, чтобы открыть меню:</p>
<p><img src="/img/createSite/settings.png" style="width: 250px;"></p>
<hr>
<p>Чтобы редактировать страницу нажмите на <button onclick="basisVis()">Редактор страницы</button>:</p>
<p><img src="/img/createSite/editor.png" style="width: 800px;"></p>
<p>Для сохранения, открытия и создания новой страницы используйте <button onclick="settingsMain.click()">иконку кассеты</button>.</p>
<p>Для создания боковых панелей используйте <button onclick="pluginDropdownContent.focus()">список редактирования плагинов</button>.</p>
<hr>
<p>Чтобы редактировать древо сайта нажмите на <button onclick="basisVisSiteTree()">Древо сайта</button>:</p>
<p><img src="/img/createSite/siteTree.png" style="width: 500px;"></p>
<p>Чтобы сохранить изменения на странице, используйте кнопку <button onclick="treeSettingsSave.click()">Сохранить</button> на панели древа сайта.</p>
<p>Для изменения свойств элемента в древе сайта нажмите на страницу правой кнопкой мыши или зажмите пальцем, выберите <button onclick="treeSettingsProperties.click()">Свойства</button>, внесите нужные изменения и нажмите <button onclick="treePropertiesDivButtonOk.click()">Ок</button>, чтобы сохранить их.</p>
<hr>
<p>Чтобы редактировать файлы нажмите на <button onclick="basisVisManager()">Файловый менеджер</button>:</p>
<p><img src="/img/createSite/manager.png" style="width: 500px;"></p>
<p>Для открытия папок в файловом менеджере используйте одинарный или двойной клик по папке. Перемещаться по папкам можно также с помощью стрелок истории <button onclick="managerHistoryBackFun.click()">Назад</button> и <button onclick="managerHistoryForwFun.click()">Вперёд</button> или кнопки <button onclick="managerBackFun.click()">назад</button> из папки.</p>
<p>Чтобы открыть свойства файла, нажмите или зажмите файл и выберите <button onclick="managerSettingsProperties.click()">Свойства</button>.</p>
]]></ru>
<en><![CDATA[
<p><span style="font-size: 28px;"><span style="font-weight: bold;">Welcome to the site creation page!</span></span></p>
<p>To start editing, click the gear to open the menu:</p>
<p><img src="/img/createSite/settings.png" style="width: 250px;"></p>
<hr>
<p>To edit the page, click <button onclick="basisVis()">Page Editor</button>:</p>
<p><img src="/img/createSite/editor.png" style="width: 800px;"></p>
<p>To save, open, or create a new page, use the <button onclick="settingsMain.click()">cassette icon</button>.</p>
<p>To create side panels use the <button onclick="pluginDropdownContent.focus()">plugin editing list</button>.</p>
<hr>
<p>To edit the site tree click <button onclick="basisVisSiteTree()">Site Tree</button>:</p>
<p><img src="/img/createSite/siteTree.png" style="width: 500px;"></p>
<p>To save changes on the page use the <button onclick="treeSettingsSave.click()">Save</button> button on the site tree panel.</p>
<p>To change the properties of an element in the site tree, right-click the page or press and hold it, select <button onclick="treeSettingsProperties.click()">Properties</button>, make the changes and click <button onclick="treePropertiesDivButtonOk.click()">Ok</button> to save them.</p>
<hr>
<p>To edit files click <button onclick="basisVisManager()">File Manager</button>:</p>
<p><img src="/img/createSite/manager.png" style="width: 500px;"></p>
<p>To open folders in the file manager use a single or double click on the folder. You can also navigate folders using the history arrows <button onclick="managerHistoryBackFun.click()">Back</button> and <button onclick="managerHistoryForwFun.click()">Forward</button> or the folder's <button onclick="managerBackFun.click()">Back</button> button.</p>
<p>To open file properties, click or press and hold the file and choose <button onclick="managerSettingsProperties.click()">Properties</button>.</p>
]]></en>
<lv><![CDATA[
<p><span style="font-size: 28px;"><span style="font-weight: bold;">Laipni lūdzam vietnes izveides lapā!</span></span></p>
<p>Lai sāktu rediģēšanu, noklikšķiniet uz zobrata, lai atvērtu izvēlni:</p>
<p><img src="/img/createSite/settings.png" style="width: 250px;"></p>
<hr>
<p>Lai rediģētu lapu, noklikšķiniet uz <button onclick="basisVis()">Redaktors</button>:</p>
<p><img src="/img/createSite/editor.png" style="width: 800px;"></p>
<p>Lai saglabātu, atvērtu vai izveidotu jaunu lapu, izmantojiet <button onclick="settingsMain.click()">kasetes ikonu</button>.</p>
<p>Sānu paneļu izveidei izmantojiet <button onclick="pluginDropdownContent.focus()">spraudņu rediģēšanas sarakstu</button>.</p>
<hr>
<p>Lai rediģētu vietnes struktūru, noklikšķiniet uz <button onclick="basisVisSiteTree()">Vietnes koks</button>:</p>
<p><img src="/img/createSite/siteTree.png" style="width: 500px;"></p>
<p>Lai saglabātu izmaiņas lapā, izmantojiet pogu <button onclick="treeSettingsSave.click()">Saglabāt</button> uz vietnes koka paneļa.</p>
<p>Lai mainītu elementa īpašības vietnes kokā, noklikšķiniet uz lapas ar peles labo pogu vai paturiet to nospiestu ar pirkstu, izvēlieties <button onclick="treeSettingsProperties.click()">Īpašības</button>, veiciet izmaiņas un nospiediet <button onclick="treePropertiesDivButtonOk.click()">Labi</button>, lai saglabātu tās.</p>
<hr>
<p>Lai rediģētu failus noklikšķiniet uz <button onclick="basisVisManager()">Failu pārvaldnieks</button>:</p>
<p><img src="/img/createSite/manager.png" style="width: 500px;"></p>
<p>Lai atvērtu mapes failu pārvaldniekā, izmantojiet vienreizēju vai dubultklikšķi uz mapes. Pārvietoties pa mapēm var arī ar vēstures bultiņām <button onclick="managerHistoryBackFun.click()">Atpakaļ</button> un <button onclick="managerHistoryForwFun.click()">Uz priekšu</button> vai pogu <button onclick="managerBackFun.click()">atpakaļ</button> mapē.</p>
<p>Lai atvērtu faila īpašības, noklikšķiniet vai paturiet failu un izvēlieties <button onclick="managerSettingsProperties.click()">Īpašības</button>.</p>
]]></lv>
</content>
</page>

9
data/filepath.en.php Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<site>
<!-- title -->
<sitename>Raspberry Pi</sitename>
<!--Слоган-->
<slogan>Raspberry Pi</slogan>
<index url='content/index' name='Home' title='Main page' template='rpi' PageMenu='0,0' users='' group=''>
</index>
</site>

7
data/filepath.lv.php Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<site>
<sitename>RaspberryqePi</sitename>
<slogan>Raspberry Pi</slogan>
<index url='content/index' title='Sākuma lapa' name='index' template='rpi' PageMenu='0,1,2' users='' group=''>
</index>
</site>

19
data/filepath.ru.php Normal file
View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<site>
<sitename>site</sitename>
<slogan>site</slogan>
<index url="content/index" title="Новый ф6нрцуеыке" name="index" template="start" PageMenu="0,0" users="" group="" news="" plugins="">
<page1 url="content/rpi/index" title="Новый ф6нрцуеыкеа" name="page1" template="MedWait" PageMenu="0,1,2" users="" group="" news="" plugins="">
<underpage1 url="content/rpi/index" title="Загловок" name="underpage1" template="rpi" PageMenu="0,1,2" users="" group="" news="" plugins="">
</underpage1>
<underpage2 url="content/rpi/index" title="Загловок" name="underpage2" template="rpi" PageMenu="0,1,2" users="" group="" news="" plugins="SvgEditorM">
</underpage2>
<createSite url="data/createSite" title="Страница создание нового сайта" name="createSite" template="MedWait" PageMenu="0,1,2" users="" group="" news="" plugins="dgrm">
</createSite>
</page1>
<page2 url="content/index" title="Загловок" name="page2" template="rpi" PageMenu="0,1,2" users="" group="" news="" plugins="dgrm,SvgEditorM">
</page2>
<uyr url="content/index" title="Новый syu6e5" name="uyr" template="MedWait" PageMenu="0,1,2" users="" group="" news="" plugins="">
</uyr>
</index>
</site>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

153
data/fonts/fonts.css Normal file
View File

@@ -0,0 +1,153 @@
/*Начало шрифты*/
@font-face {
font-family: 'Lora';
src: url('Lora/Lora-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Lora';
src: url('Lora/Lora-Bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'Lora';
src: url('Lora/Lora-Italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'Merriweather';
src: url('Merriweather/Merriweather-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Merriweather';
src: url('Merriweather/Merriweather-Bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'Merriweather';
src: url('Merriweather/Merriweather-Italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'Montserrat';
src: url('Montserrat/Montserrat-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Montserrat';
src: url('Montserrat/Montserrat-Bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'Montserrat';
src: url('Montserrat/Montserrat-Italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'OpenSans';
src: url('OpenSans/OpenSans-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'OpenSans';
src: url('OpenSans/OpenSans-Bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'OpenSans';
src: url('OpenSans/OpenSans-Italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'Playfair_Display';
src: url('Playfair_Display/PlayfairDisplay-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Playfair_Display';
src: url('Playfair_Display/PlayfairDisplay-Bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'Playfair_Display';
src: url('Playfair_Display/PlayfairDisplay-Italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'PT_Serif';
src: url('PT_Serif/PTSerif-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'PT_Serif';
src: url('PT_Serif/PTSerif-Bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'PT_Serif';
src: url('PT_Serif/PTSerif-Italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto/Roboto-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto/Roboto-Bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto/Roboto-Italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'Source_Sans_3';
src: url('Source_Sans_3/SourceSans3-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Source_Sans_3';
src: url('Source_Sans_3/SourceSans3-Bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'Source_Sans_3';
src: url('Source_Sans_3/SourceSans3-Italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
/*Конец шрифты*/

8
data/foot.php Normal file
View File

@@ -0,0 +1,8 @@
<div id="fclear">
</div>
<div id="footer">
Powered by uText CMS<br>
2013 &#169 gugudze
</div>
</div>

43
data/footer.css.php Normal file
View File

@@ -0,0 +1,43 @@
#fclear{
clear :both;
}
#footer {
text-align :center;
position :relative;
width :100%;
margin :0px auto;
/*
background :#ffffff;
border :1px solid #0ffff0;
height :20px;
*/
}
.left-footer,
.right-footer,
.center-footer {
position :relative;
padding :0px;
/*
border :1px solid #0ffff0;
*/
}
.left-footer {
float :left;
width :200px;
}
.right-footer {
float :right;
width :200px;
}
.center-footer {
float :none;
width :auto;
overflow :hidden;
/*
text-align :left;
*/
}

790
data/func.php Normal file
View File

@@ -0,0 +1,790 @@
<?php
/**
* @file func.php
* @brief Основные php функции страницы
*/
/**
* @brief Выполняет действие, переданное через POST-запрос
* @param string $handleRequestAction Имя действия для выполнения
* @return string JSON-ответ с результатом или ошибкой действия
*/
function handleRequest($handleRequestAction) {
$action = preg_replace('/[^a-zA-Z0-9_]/', '', $handleRequestAction);
if (function_exists($action)) {
call_user_func($action);
} else {
echo json_encode([
'error' => 'Неизвестное действие',
'action' => $handleRequestAction,
'post_data' => $_POST,
'get_data' => $_GET,
'server' => $_SERVER['REQUEST_URI']
]);
}
}
/**
* @brief Обрабатывает входящий JSON-RPC запрос
* @return string JSON-ответ с результатом выполнения метода или ошибкой
*/
function jsonrpcRequest() {
$raw = file_get_contents("php://input");
$data = json_decode($raw, true);
$id = $data["id"] ?? null;
try {
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception("Parse error", -32700);
}
$method = $data["method"] ?? "";
$params = $data["params"] ?? [];
if (!function_exists($method)) {
throw new Exception("Method not found", -32601);
}
$result = $method($params);
header("Content-Type: application/json");
echo json_encode(["jsonrpc" => "2.0", "id" => $id, "result" => $result]);
}
catch (Exception $e) {
header("Content-Type: application/json");
echo json_encode(["jsonrpc" => "2.0", "id" => $id, "error" => ["code" => $e->getCode(), "message" => $e->getMessage()]]);
}
}
/**
* @brief Подключает плагин или плагины из директории main_plugin
* @param array $params Параметры подключения, ключ 'plugin' содержит имя плагина
* @return string HTML-код подключённых плагинов
*/
function includePlugin($params) {
global $path, $config;
$html = '';
$pluginDir = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . 'main_plugin' . DIRECTORY_SEPARATOR;
$requested = isset($params['plugin']) ? trim($params['plugin']) : null;
if ($requested !== null && ($requested === '' || strpos($requested, '..') !== false)) {
throw new Exception("Invalid plugin name", -32602);
}
if (!is_dir($pluginDir)) return $html;
$dirs = $requested ? [$requested] : array_diff(scandir($pluginDir), ['.', '..']);
foreach ($dirs as $dir) {
$dirPath = $pluginDir . $dir;
if (!is_dir($dirPath)) continue;
$file = $dirPath . '/plug.php';
if (is_file($file)) {
ob_start();
include $file;
$html .= ob_get_clean();
}
}
return $html;
}
/**
* @brief Получает список файлов и DOM-элементов плагина
* @param array $params Параметры, ключ 'plugin' содержит имя плагина
* @return array Массив ссылок на CSS, JS файлы и id элементов плагина
*/
function removePluginDom($params) {
global $path;
$plugin = isset($params['plugin']) ? trim($params['plugin']) : null;
if (!$plugin || strpos($plugin, '..') !== false || !preg_match('/^[A-Za-z0-9_\-]+$/', $plugin) || !is_dir($path . 'main_plugin/' . $plugin)) {
throw new Exception("Invalid plugin name");
}
$pluginDir = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . 'main_plugin' . DIRECTORY_SEPARATOR . $plugin;
$plugFile = $pluginDir . '/plug.php';
if (!is_file($plugFile)) throw new Exception("plug.php not found");
ob_start();
include $plugFile;
$html = ob_get_clean();
$files = [];
if (preg_match_all('/<link[^>]+href=["\']([^"\']+)["\']/i', $html, $m)) $files = array_merge($files, $m[1]);
if (preg_match_all('/<script[^>]+src=["\']([^"\']+)["\']/i', $html, $m)) $files = array_merge($files, $m[1]);
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML('<div id="wrapper">' . $html . '</div>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors();
$wrapper = $doc->getElementById('wrapper');
foreach ($wrapper->childNodes as $child) {
if ($child instanceof DOMElement && $child->hasAttribute('id')) {
$files[] = '#' . $child->getAttribute('id');
}
}
return array_values($files);
}
/**
* @brief Подключает все PHP-файлы функций из папки main_plugin
* @return int Количество подключённых файлов
*/
function includePluginsPhp() {
global $path;
$count = 0;
$pluginDir = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . 'main_plugin' . DIRECTORY_SEPARATOR;
if (!is_dir($pluginDir)) return $count;
$dirs = array_diff(scandir($pluginDir), ['.', '..']);
foreach ($dirs as $dir) {
$fullDir = $pluginDir . $dir . DIRECTORY_SEPARATOR;
if (!is_dir($fullDir)) continue;
foreach (glob($fullDir . 'func.*.php') as $file) {
if (is_file($file)) {
include_once $file;
$count++;
}
}
}
return $count;
}
/**
* @brief Устанавливает язык пользователя в сессии
* @param array $params Параметры, ключ 'lng' содержит код языка
* @return string Строка "true" при успешной установке
*/
function setLng($params) {
global $_SESSION;
if (!isset($params['lng'])) {
throw new Exception("Missing parameter: lng", -32602);
}
$_SESSION['lng'] = $params['lng'];
return "true";
}
/**
* @brief Завершает сессию пользователя
* @param array $params Параметры, ключ 'logoff' инициирует выход
* @return string Строка "true" при успешной разлогине
*/
function logoutUser($params) {
if (!isset($params['logoff'])) {
throw new Exception("Missing parameter: logoff", -32602);
}
session_destroy();
return "true";
}
/**
* @brief Выполняет вход пользователя с проверкой логина и пароля
* @param array $params Параметры, ключи 'log', 'login' и 'pass' для авторизации
* @return string "true" если вход успешен, "false" если нет
*/
function loginUser($params) {
global $_SESSION;
if (!isset($params['log']) || $params['log'] !== "Войти" || !isset($params['login']) || !isset($params['pass'])) {
throw new Exception("Missing login action or credentials", -32602);
}
if (check($params['login'], md5($params['pass']))) {
$_SESSION['username'] = $params['login'];
$_SESSION['pass'] = $params['pass'];
$_SESSION['Login'] = 'true';
setcookie('Login', 'true', time() + 2419200, "/");
$_SESSION['log_in'] = false;
return "true";
} else {
$_SESSION['Login'] = 'false';
setcookie('Login', 'false', time() + 2419200, "/");
return "false";
}
}
/**
* @brief Проверяет соответствие логина и пароля с данными пользователей
* @param string $login Имя пользователя
* @param string $pass Хеш пароля пользователя
* @return bool true если пользователь найден и пароль совпадает, false иначе
*/
function check($login, $pass) {
global $config, $uxml, $path;
$xmlstr = simplexml_load_file($path . $config['users']);
$result = false;
foreach ($xmlstr->users->user as $user) {
if ((string)$user['name'] === $login && (string)$user['pass'] === $pass) {
$result = true;
}
}
return $result;
}
/**
* @brief Загружает конфигурацию сайта из XML и пользователей
* @return void Возвращает значения в глобальный массив $config
*/
function SetConfig()
{
global $config, $path;
$xmlstr = simplexml_load_file($path . 'config/config_site.php');
$config['icon'] = $xmlstr->general->icon;
$config['encoding'] = $xmlstr->general->encoding;
$config['users'] = $xmlstr->general->users;
$config['usersRequest'] = $xmlstr->general->usersrequest;
$xmlstr = simplexml_load_file($path . 'data/users.php');
$config['emailAdmin'] = '';
foreach ($xmlstr->users->user as $user) {
$access = explode(',', (string)$user['access']);
$access = array_map('trim', $access);
if (in_array('creatingAccounts', $access)) {
$config['emailAdmin'] = (string)$user['email'];
break;
}
}
}
/**
* @brief Получает список пользователей с правами администратора
* @return array Массив имён пользователей с правами Admin
*/
function adminsConfig() {
global $path;
$xml = simplexml_load_file($path . 'data/users.php');
$admins = [];
foreach ($xml->users->user as $user) {
$accessList = array_map('trim', explode(', ', (string)$user['access']));
if (in_array('Admin', $accessList, true)) {
$admins[] = (string)$user['name'];
}
}
return $admins;
}
/**
* @brief Генерирует HTML-ссылки для меню
* @param array $menuVar Массив пунктов меню с ключами 'url', 'title', 'name'
* @return string Сформированные HTML-ссылки для меню
*/
function GetMenuItems($menuVar){
global $config;
$menu = '';
for ($i = 0; $i <= count($menuVar)-1; $i+=1)
{
$menu.= '<a href="'.$config['server'].$menuVar[$i]['url'].'.html" title="'.$menuVar[$i]['title'].'">'.$menuVar[$i]['name'] . '</a> ';
if ($i <= count($menuVar)-2)
{
$menu.= ':: ';
}
}
return $menu;
}
/**
* @brief Формирует HTML-блоки для отображения на странице
* @param array $BlockVar Массив блоков с ключами 'url', 'title', 'tclass', 'bclass'
* @param string $side Сторона или тип блока
* @return string Сформированные HTML-блоки
*/
function GetBlock ($BlockVar, $side) {
global $path, $ansv, $REQUEST_URI,$menu, $config, $EditPage;
$Block = '';
if (is_countable($BlockVar) && count($BlockVar) > 0){
for ($i = 0; $i <= count($BlockVar)-1; $i+=1){
ob_start();
include $path . $BlockVar[$i]['url'].'plug.php';
$Xblock = ob_get_contents();
ob_end_clean();
$Block.='<div plugin-url="'.$BlockVar[$i]['url'].'">';
if ($BlockVar[$i]['title']!=''){
$Block.='<div plugin-title="pluginTitle" tclass="tclass" class="'.$BlockVar[$i]['tclass'].'">'.$BlockVar[$i]['title'].'</div>';
}
$Block.='<div bclass="bclass" class="'.$BlockVar[$i]['bclass'].'"><div class="bcont">'.$Xblock.'</div></div>';
$Block.= '</br> ';
$Block.='</div>';
}
}
return $Block;
// $Block.='<div class="'.$BlockVar[$i]['bclass'].'"><div class="bcont">ku ku</div></div>';
/*is_countable($$BlockVar) && count($BlockVar)
$Block = "";
if (is_countable($$BlockVar) && count($BlockVar) > 0){
$Block = "true";
}
else{
$Block = "false";
}
$Block = count($BlockVar);*/
}
/**
* @brief Обрабатывает ошибку 404 и выводит страницу ошибки
* @param bool $pageout Если true, выводит содержимое файла 404.shtml
* @param string $encoding Кодировка страницы
* @return void Завершает выполнение скрипта
*/
function error404($pageout = false, $encoding = 'utf-8')
{
header('Cache-Control: no-cache, no-store');
header('Content-Type: text/html; charset=' . $encoding);
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
if ($pageout)
readfile('404.shtml');
die;
}
/**
* @brief Обрабатывает ошибку 405 и выводит страницу ошибки
* @param bool $pageout Если true, выводит содержимое файла 405.shtml
* @param string $encoding Кодировка страницы
* @return void Завершает выполнение скрипта
*/
function error405($pageout = false, $encoding = 'utf-8')
{
header('Cache-Control: no-cache, no-store');
header('Content-Type: text/html; charset=' . $encoding);
header($_SERVER['SERVER_PROTOCOL'] . ' 405 Not Found');
if ($pageout)
readfile('405.shtml');
die;
}
# Функция HTTP авторизации. Логин и пароль задаются в файле users.xml
# Форма авторизации
/* function Log_Form($Vector,$act) {
if ($Vector=='h') $sep = ' ';
else $sep = '<br/>';
$string = '<form action="'.$_SERVER["REQUEST_URI"].'" method="post">';
$string .= '<input type="hidden" name="handleRequestAction" value="API">';
switch ($act){
case 'log_on':{
$string .= '<label>Логин: </label>';
$string .= $sep;
$string .= '<input type = "text" name = "login">';
$string .= $sep;
$string .= '<label>Пароль: </label>';
$string .= $sep;
$string .= '<input type = "password" name = "pass" autocomplete>';
$string .= $sep;
$string .= '<form method="post"><input type="hidden" name="handleRequestAction" value="API">
<input type="submit" name="log" value="Войти"></form>';
break;
}
case 'log_off':{
$string .= '<form method="post"><input type="hidden" name="handleRequestAction" value="API">
<input type="submit" name="logoff" value="Выйти"></form>';
break;
}
case 'log_err':{
$string .= '<label>Фигню написал, батинька!!! </label>';
$string .= $sep;
$string .= '<form method="post"><input type="hidden" name="handleRequestAction" value="API">
<input type="submit" name="LogPage" value="Попробуйте ещё раз"></form>';
break;
}
}
$string .= '</form>';
$_SESSION['Login'] ='';
return $string;
} */
/**
* @brief Генерирует HTML-меню для выбора языка с кнопками для каждого доступного языка
* @return string Сформированный HTML-код меню выбора языка с встроенным скриптом для отправки запроса
*/
function LngMenu() {
$s = '<ul><li>' . $_SESSION['lng'] . '<ul><span id="f">';
if ($_SESSION['lng'] != 'lv') {
$s .= '<button id="lng_lv" onclick="sendLanguageRequest(\'lv\')" type="button" title="Latviski" value="lv"><span>LV</span></button><br>';
}
if ($_SESSION['lng'] != 'en') {
$s .= '<button id="lng_en" onclick="sendLanguageRequest(\'en\')" type="button" title="English" value="en"><span>EN</span></button><br>';
}
if ($_SESSION['lng'] != 'ru') {
$s .= '<button id="lng_ru" onclick="sendLanguageRequest(\'ru\')" type="button" title="По русски" value="ru"><span>RU</span></button><br>';
}
$s .= '</span></ul></li></ul>';
$s .= '
<script>
async function sendLanguageRequest(language) {
if (document.getElementById("basis3")?.style.visibility === "visible" && window.contentIsEdit) {
messageQueue.push("Сохранить данные?");
try {
const confirmed = await messageCreateQuestion();
if (confirmed) {
if (window.newPageFunValue === "newPage") {
document.getElementById("saveHow").click();
messageFunction("Сохраните новую страницу!");
return;
} else {
await saveChanges();
}
}
} catch (e) {
console.error("Ошибка:", e);
}
}
jsonrpcRequest("setLng", { lng: language })
.then(r => {
if (r === "true") {
location.reload();
} else {
messageFunction("{{language_change_error}}");
}
})
.catch(err => {
console.error(err);
messageFunction("{{language_change_error}}");
});
}
</script>
';
return $s;
}
/**
* @brief Определяет текущий язык пользователя и сохраняет его в сессии
* @return string Текущий язык (например, 'en', 'ru', 'lv')
*/
function SetLanguage(){
global $_SESSION, $path;
if (isset($_POST['lng']) && $_POST['lng'] != '')
$_SESSION['lng'] = $_POST['lng'];
if (empty($_SESSION['lng'])){
$s = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$a = explode('-', $s[0]);
$_SESSION['lng'] = $a[0];
}
return $_SESSION['lng'];
}
/**
* @brief Разбирает URL запроса и определяет действие и путь к странице
* @param string $URL URL запроса
* @return array Массив с ключами 'act' и 'str', где 'act' — действие, 'str' — путь к странице
*/
function GetRequestURL($URL){
$c=explode('.',$URL);
if ($c[1]=='html'&&count($c)!=1){
$mURL['act'] ='view';
$mURL['str'] = explode('/',$c[0]);
$mURL['str'][0]="index";
if ($mURL['str'][1]=='index'){
$mURL['str'][1]='';
}
if ($mURL['str'][count($mURL['str'])-1]==''){
array_pop($mURL['str']);
}
}
else{
if ($c[1]=='xml'&&count($c)!=1){
$mURL['act'] ='edit';
$mURL['str'] = explode('/',$c[0]);
$mURL['str'][0]="index";
}
else{
$mURL['str']='error';
}
}
return $mURL;
}
/**
* @brief Получает новости из XML-файла и формирует HTML-блоки для отображения
* @param array $BlockVar Массив блоков с настройками отображения
* @param string $side Сторона страницы, для которой формируются новости
* @return string Сформированные HTML-блоки с новостями
*/
function getNews($BlockVar, $side) {
global $path, $_SESSION;
$lng = $_SESSION['lng'] ?? 'en';
$file = $path . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'filepath.' . $lng . '.php';
$content = @file_get_contents($file);
if (!$content) $content = '';
$content = preg_replace('/^\s*<\?php.*?\?>\s*/s', '', $content);
$xml = @simplexml_load_string($content);
$rootReal = realpath(rtrim($path, DIRECTORY_SEPARATOR));
$html = '';
$tplClass = isset($BlockVar[0]['tclass']) ? $BlockVar[0]['tclass'] : 'btitle';
$bclass = isset($BlockVar[0]['bclass']) ? $BlockVar[0]['bclass'] : 'bfloat';
$now = new DateTime();
$walk = function($node) use (&$walk, &$html, $path, $side, $lng, $rootReal, $tplClass, $bclass, $now) {
$newsAttr = trim((string)$node['news']);
if ($newsAttr === '') {
foreach ($node->children() as $child) $walk($child);
return;
}
$parts = explode(',', $newsAttr);
if (count($parts) === 0) {
foreach ($node->children() as $child) $walk($child);
return;
}
$period = array_shift($parts);
$dates = explode('/', $period);
if (count($dates) !== 2) {
foreach ($node->children() as $child) $walk($child);
return;
}
$parseDate = function($str) {
$parts = explode('.', $str);
if (count($parts) < 5) return false;
list($Y, $m, $d, $H, $i) = $parts;
$dateStr = sprintf('%04d-%02d-%02d %02d:%02d:00', $Y, $m, $d, $H, $i);
return DateTime::createFromFormat('Y-m-d H:i:s', $dateStr);
};
$start = $parseDate($dates[0]);
$end = $parseDate($dates[1]);
if (!$start || !$end || $now < $start || $now > $end) {
foreach ($node->children() as $child) $walk($child);
return;
}
$blocks = array_map('trim', $parts);
if (!empty($blocks) && !in_array($side, $blocks)) {
foreach ($node->children() as $child) $walk($child);
return;
}
$urlAttrRaw = trim((string)$node['url']);
$titleRaw = (string)$node['title'];
$urlPart = trim($urlAttrRaw, "/\\");
$pageFile = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $urlPart . '.page.php';
$pageFileReal = realpath($pageFile);
$pageContent = '';
if ($pageFileReal && strpos($pageFileReal, $rootReal) === 0 && is_file($pageFileReal) && is_readable($pageFileReal)) {
$pageXml = @simplexml_load_file($pageFileReal);
if ($pageXml && isset($pageXml->content->{$lng})) {
$pageContent = strip_tags((string)$pageXml->content->{$lng});
$maxLength = ($side === 'center') ? 300 : 100;
$pageContent = mb_substr($pageContent, 0, $maxLength) . (mb_strlen($pageContent) > $maxLength ? '...' : '');
}
}
$nameRaw = trim((string)$node['name']);
$tagPath = [];
$n = $node;
while ($n) {
$tag = $n->getName();
if ($tag !== 'site' && $tag !== 'index') {
$tagPath[] = $tag;
}
$n = $n->xpath('..') ? $n->xpath('..')[0] : null;
}
$tagPath = array_reverse($tagPath);
if (empty($tagPath)) {
$link = '/';
} else {
$link = implode('/', $tagPath) . '.html';
}
$link = htmlspecialchars($link);
$readMore = '<a href="' . $link . '">читать дальше</a>';
$title = $titleRaw !== '' ? htmlspecialchars($titleRaw) : '';
$html .= '<div>';
if ($side === "center") $html .= '</br> ';
if ($title !== '') $html .= '<div plugin-title="pluginTitle" class="' . htmlspecialchars($tplClass) . '">' . $title . '</div>';
$html .= '<div class="' . htmlspecialchars($bclass) . '"><div class="bcont">' . $pageContent . ' ' . $readMore . '</div></div>';
if ($side !== 'center') $html .= '</br> ';
$html .= '</div>';
foreach ($node->children() as $child) $walk($child);
};
if ($xml && isset($xml->index)) $walk($xml->index);
return $html;
}
/**
* @brief Генерирует HTML-строку горизонтального меню из XML-структуры
* @param object $menuVar XML-объект меню
* @param array $RURLstr Массив сегментов URL для определения вложенности
* @param int $ItemNo Индекс текущего элемента в URL
* @param string $Vector Вертикальное ('v') или горизонтальное отображение
* @return string Сформированное HTML-меню
*/
function GetXMLMenu($menuVar,$RURLstr,$ItemNo,$Vector){
global $config, $path, $_SESSION;
$child_menu = "";
$topURL = '';
if ($ItemNo!=0) {
for ($i = 1; $i <= $ItemNo; $i+=1) {
$topURL .=$RURLstr[$i].'/';
$menuVar =$menuVar->{$RURLstr[$i]};
}
}
$i = 0;
foreach ($menuVar->children() as $child_page) {
if (FindPageUser($child_page['users'],$_SESSION['username'])) {
if ($i!=0) {
if ($Vector!='v') {
$child_menu .=' :: ';
} else {
$child_menu .='<br>';
}
}
$child_menu .= '<a href="'.$config['server'].$topURL.$child_page->getName().'.html">' . $child_page['title'] . '</a>';
$i=$i+1;
}
}
return $child_menu;
}
/**
* @brief Генерирует HTML-блок бокового меню из XML-структуры
* @param object $menuVar XML-объект меню
* @param array $RURLstr Массив сегментов URL для определения вложенности
* @param int $ItemNo Индекс текущего элемента в URL
* @return string Сформированное HTML боковое меню
*/
function GetSideXMLMenu($menuVar,$RURLstr,$ItemNo){
global $config, $path, $_SESSION;
$child_menu = "";
$topURL = '';
if ($ItemNo!=0) {
for ($i = 1; $i <= $ItemNo; $i+=1) {
$topURL .=$RURLstr[$i].'/';
$menuVar =$menuVar->{$RURLstr[$i]};
}
}
$child_menu.='<div class="side-menu-header">';
$child_menu.='<label for="menu-toggle" class="menu-btn close">×</label>';
$child_menu.='<a href="'.$config['server'].'" class="side-home">Home</a>';
$child_menu.='</div>';
foreach ($menuVar->children() as $child_page) {
if (FindPageUser($child_page['users'],$_SESSION['username'])) {
$child_menu.='<a href="'.$config['server'].$topURL.$child_page->getName().'.html" class="side-link">'.$child_page['title'].'</a>';
}
}
return $child_menu;
}
/**
* @brief Проверяет, имеет ли пользователь доступ к странице
* @param string $PageUser Список пользователей, имеющих доступ, через запятую
* @param string $user Имя пользователя
* @return bool true если доступ разрешён, false если нет
*/
function FindPageUser($PageUser,$user){
if ($PageUser==''){
$test =true;
}
else{
$test =false;
$PageUser =explode(',',$PageUser);
for ($i = 0; $i <= count($PageUser)-1; $i+=1){
if ($PageUser[$i]==$user){
$test =true;
}
}
}
return $test;
}
/**
* @brief Разбирает файл XML страницы и возвращает информацию о запрошенном URL
* @param string $FPfile Путь к XML-файлу с описанием страниц
* @param mixed $RURLstr Массив сегментов URL или строка 'error'
* @return array Массив с информацией о странице, включая URL, шаблон, заголовок и плагины
*/
function URLstr($FPfile,$RURLstr){
global $path, $server, $config;
$xmlstr =simplexml_load_file($FPfile);
if (!isset($xmlstr->index)) {
$index = $xmlstr->addChild('index', "\n");
$index->addAttribute('url', 'data/createSite');
$lang = isset($config['lng']) ? $config['lng'] : 'ru';
$titles = [ 'ru' => 'Страница создание нового сайта', 'en' => 'New site creation page', 'lv' => 'Jaunas vietnes izveides lapa' ];
$index->addAttribute('title', isset($titles[$lang]) ? $titles[$lang] : $titles['ru']);
$index->addAttribute('name', 'index');
$index->addAttribute('template', 'MedWait');
$index->addAttribute('PageMenu', '0,1,2');
$index->addAttribute('users', '');
$index->addAttribute('group', '');
$index->addAttribute('news', '');
$index->addAttribute('plugins', '');
$xmlstr->asXML($FPfile);
}
$ansv['sitename'] =$xmlstr->sitename;
$ansv['XML'] =$xmlstr;
$ansv['pageURL'] =$xmlstr->sitename;
$fileURL ='http://'.$_SERVER['HTTP_HOST'];
$ansv['URLLine'] ="";
if ($RURLstr!='error'){
for ($i = 0; $i <= count($RURLstr)-1; $i+=1){
if ($xmlstr->{$RURLstr[$i]}['name']!=''){
if ($i!=count($RURLstr)-1) {
if ($i!=0){
$fileURL .='/'.$xmlstr->{$RURLstr[$i]}->getName();
$end ='.html';
}
else{
$end ='/index.html';
}
$ansv['URLLine'] .= '<a href="'.$fileURL.$end.'" title="'.$xmlstr->{$RURLstr[$i]}['title'].'">'.$xmlstr->{$RURLstr[$i]}['name'].'</a>>>';
}
else{
$ansv['URLLine'] .= $xmlstr->{$RURLstr[$i]}['name'];
$ansv['FileURL'] = $xmlstr->{$RURLstr[$i]}['url'];
$ansv['template'] = $xmlstr->{$RURLstr[$i]}['template'];
$ansv['title'] = $xmlstr->{$RURLstr[$i]}['title'];
$ansv['page'] = $xmlstr->{$RURLstr[$i]};
$ansv['page_plugins'] = (string)($xmlstr->{$RURLstr[$i]}['plugins'] ?? '');
}
$xmlstr = $xmlstr->{$RURLstr[$i]};
}
else {
$ansv['URLLine'] = 'error';
$ansv['FileURL'] = 'error';
}
}
}
return $ansv;
}
/**
* @brief Разбирает файл XML страницы и возвращает информацию о запрошенном URL
* @param string $FPfile Путь к XML-файлу с описанием страниц
* @param mixed $RURLstr Массив сегментов URL или строка 'error'
* @return array Массив с информацией о странице, включая URL, шаблон, заголовок и плагины
*/
function loadPluginsInCenterBlock() {
global $_SESSION, $path, $config;
if ($_SESSION['Login'] == 'true') {
$availablePlugins = ['dgrm', 'SvgEditorM'];
$pluginDir = $path . 'main_plugin/';
if (is_dir($pluginDir)) {
$dirs = array_diff(scandir($pluginDir), ['.', '..']);
foreach ($dirs as $dir) {
if (is_dir($pluginDir . $dir)) {
if (!in_array($dir, $availablePlugins) || strpos($config['page_plugins'] ?? '', $dir) !== false) {
if ($dir === 'SvgEditorM' || $dir === 'dgrm') {
$html .= includePlugin(['plugin' => $dir]);
}
}
}
}
}
}
$html .= includePlugin(['plugin' => 'form_editor']);
return $html;
}
?>

113
data/lang.php Normal file
View File

@@ -0,0 +1,113 @@
<?php
$lang_Basic_functions = [
'ru' => [
'error' => 'Ошибка',
'message' => 'Сообщение:',
'ok' => 'ОК',
'cancel' => 'Отмена',
'yes' => 'Да',
'no' => 'Нет',
'main_block_saved' => 'Изменения главного блока сохранились!',
'main_block_not_saved' => 'Изменения главного блока не сохранились!',
'plugins_not_saved' => 'Плагины не сохранились!',
'page_must_end_with_page_php' => 'Страница должна заканчиваться на ".page.php"!',
'save_file_as' => 'Сохранить файл как:',
'file' => 'Файл',
'exists_overwrite_prompt' => 'уже существует. Перезаписать?',
'new_file' => 'Новый файл!',
'file_save_failed' => 'Не удалось сохранить файл!',
'changes_saved_successfully' => 'Изменения успешно сохранены!',
'data_save_error' => 'Ошибка сохранения данных!',
'created_successfully' => 'успешно создан!',
'file_creation_error' => 'Ошибка при создании файла',
'folder' => 'Папка',
'select_file' => 'Выберите файл',
'file_manager_title' => 'Файловый менеджер',
'name' => 'Имя',
'save' => 'Сохранить',
'open' => 'Открыть',
'choose' => 'Выбрать',
'column_size_bytes' => 'Размер (байт)',
'column_creation_date' => 'Дата создания',
'plugin_title_empty_error' => 'Заголовок пустой!',
'open_page' => 'Откройте страницу на сайте, а не через менеджер, чтобы сохранить заголовки!',
'enter_new_title' => 'Введите новый заголовок:',
'title_saved' => 'Заголовок сохранён!',
'new_file' => 'Новый файл'
],
'en' => [
'error' => 'Error',
'message' => 'Message:',
'ok' => 'OK',
'cancel' => 'Cancel',
'yes' => 'Yes',
'no' => 'No',
'main_block_saved' => 'Main block changes saved!',
'main_block_not_saved' => 'Main block changes not saved!',
'plugins_not_saved' => 'Plugins not saved!',
'page_must_end_with_page_php' => 'Page must end with ".page.php"!',
'save_file_as' => 'Save file as:',
'file' => 'File',
'exists_overwrite_prompt' => 'already exists. Overwrite?',
'new_file' => 'New file!',
'file_save_failed' => 'Failed to save file!',
'changes_saved_successfully' => 'Changes saved successfully!',
'data_save_error' => 'Data save error!',
'created_successfully' => 'created successfully!',
'file_creation_error' => 'Error creating file',
'folder' => 'Folder',
'select_file' => 'Select file',
'file_manager_title' => 'File Manager',
'name' => 'Name',
'save' => 'Save',
'open' => 'Open',
'choose' => 'Choose',
'column_size_bytes' => 'Size (bytes)',
'column_creation_date' => 'Creation Date',
'plugin_title_empty_error' => 'Title is empty!',
'open_page' => 'Open the page on the website, not through the manager, to save the headings!',
'enter_new_title' => 'Enter a new title:',
'title_saved' => 'Title saved!',
'new_file' => 'Jauns fails'
],
'lv' => [
'error' => 'Kļūda',
'message' => 'Ziņojums:',
'ok' => 'Ok',
'cancel' => 'Atcelt',
'yes' => 'Jā',
'no' => 'Nē',
'main_block_saved' => 'Galvenā bloka izmaiņas saglabātas!',
'main_block_not_saved' => 'Galvenā bloka izmaiņas nesaglabājās!',
'plugins_not_saved' => 'Spraudņi nav saglabāti!',
'page_must_end_with_page_php' => 'Lapa jābeidz ar ".page.php"!',
'save_file_as' => 'Saglabāt kā failu:',
'file' => 'Fails',
'exists_overwrite_prompt' => 'jau pastāv. Pārrakstīt?',
'new_file' => 'Jauns fails!',
'file_save_failed' => 'Neizdevās saglabāt failu!',
'changes_saved_successfully' => 'Izmaiņas veiksmīgi saglabātas!',
'data_save_error' => 'Datu saglabāšanas kļūda!',
'created_successfully' => 'veiksmīgi izveidots!',
'file_creation_error' => 'Kļūda, izveidojot failu',
'folder' => 'Mape',
'select_file' => 'Izvēlieties failu',
'file_manager_title' => 'Failu pārvaldnieks',
'name' => 'Nosaukums',
'save' => 'Saglabāt',
'open' => 'Atvērt',
'choose' => 'Izvēlēties',
'column_size_bytes' => 'Izmērs (baiti)',
'column_creation_date' => 'Izveides datums',
'plugin_title_empty_error' => 'Virsraksts ir tukšs!',
'open_page' => 'Atveriet lapu vietnē, nevis caur pārvaldnieku, lai saglabātu virsrakstus!',
'enter_new_title' => 'Ievadiet jauno virsrakstu:',
'title_saved' => 'Virsraksts saglabāts!',
'new_file' => 'Jauns fails'
],
];
return $lang_Basic_functions;

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<users>
<users>
<user name="svjatoslavyeliseev2@gmail.com" pass="svjatoslavyeliseev2@gmail.com" access="" email="svjatoslavyeliseev2@gmail.com" link="1d17bfc70bf2def3c091e17e3779d85e"/>
<user name="srgar" pass="srgar" access="" email="vjatoslavyeliseev2@gmail.com" link="aff04c580bdd5d9bc44379e52468880d"/>
</users>
</users>

24
data/template.page.php Normal file
View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<page>
<general>
<!--Kлючевые слова-->
<keywords></keywords>
</general>
<!--Содержание страницы-->
<!--Левые блоки-->
<lblock>
</lblock>
<!--Правые блоки-->
<rblock>
</rblock>
<!--Текст страницы-->
<content tclass="btitle" bclass="bfloat">
<ru><![CDATA[]]></ru>
<lv><![CDATA[]]></lv>
<en><![CDATA[]]></en>
</content>
</page>

196
data/top.css.php Normal file
View File

@@ -0,0 +1,196 @@
#hbody {
text-align :center;
position :fixed;
width :-webkit-fill-available;
height :1.2em;
padding: 2px 25px;
background :rgb(237,232,237);
background-image :linear-gradient(bottom, rgb(194,194,194) 15%, rgb(237,232,237) 57%);
background-image :-o-linear-gradient(bottom, rgb(194,194,194) 15%, rgb(237,232,237) 57%);
background-image :-moz-linear-gradient(bottom, rgb(194,194,194) 15%, rgb(237,232,237) 57%);
background-image :-webkit-linear-gradient(bottom, rgb(194,194,194) 15%, rgb(237,232,237) 57%);
background-image :-ms-linear-gradient(bottom, rgb(194,194,194) 15%, rgb(237,232,237) 57%);
background-image :-webkit-gradient(linear, left bottom, left top, color-stop(0.15, rgb(194,194,194)), color-stop(0.57, rgb(237,232,237)));
color :#666;
text-shadow :1px 1px 3px #666, -1px -1px 3px #FFF, 1px 1px #666, -1px -1px #FFF;
/*
font-family :Arial, Tahoma, Verdana, sans-serif;
*/
font-size :1.3em;
top :0px;
z-index :1000;
white-space: nowrap;
}
.side-link{
white-space: normal;
overflow-wrap: break-word;
word-break: break-word;
padding: 10px 20px 10px 20px;
}
.side-menu-header{
padding: 30px 20px 20px 20px;
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.15, rgb(233 233 233)), color-stop(0.57, rgb(194 194 194)));
}
/*- меню страниц */
.menu-btn {
cursor: pointer;
position: relative;
float: right;
margin-left: 9px;
}
.side-menu {
position: fixed;
top: 0;
right: -100%;
width: 70%;
max-width: 13em;
height: 100%;
box-sizing: border-box;
transition: left 0.3s ease;
display: flex;
flex-direction: column;
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.15, rgb(194, 194, 194)), color-stop(0.57, rgb(237, 232, 237)));
z-index: 1006;
}
.menu-toggle {
font-size: 2em;
margin: -3px 0px 0px 0px;
}
.menu-toggle:checked ~ .side-menu {
right: 0;
}
#overlay {
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
background: rgba(0, 0, 0, 0.2);
pointer-events: none;
opacity: 0;
transition: opacity 0.3s ease;
z-index: 1005;
}
#overlay.active {
pointer-events: auto;
opacity: 1;
}
#shome{
position :relative;
float :left;
}
#smenu{
position: relative;
margin: 0px auto;
overflow: hidden;
display: inline-block;
margin: 0px 10px;
padding: 0px 3px;
}
#slng{
text-transform :uppercase;
position :relative;
float :right;
}
#slng ul li a,
#slng ul li a:visited {
display :block;
text-decoration :none;
text-align :center;
line-height :20px;
overflow :hidden;
}
#slng ul {
padding :0;
margin :0;
list-style :none;
}
#slng ul li {
float :left;
position :relative;
}
#slng ul li ul {
display :none;
background :rgb(237,232,237);
position: absolute;
right: 4px;
}
/* specific to non IE browsers */
#slng ul li:hover a { }
#slng ul li:hover ul {
display :block;
}
#slng ul li:hover ul li a.hide { }
#slng ul li:hover ul li:hover a.hide { }
#slng ul li:hover ul li ul {
display :none;
}
#slng ul li:hover ul li a {
display :block;
}
#slng ul li:hover ul li a:hover { }
#slng ul li:hover ul li:hover ul {
display :block;
position :absolute;
left :50px;
top :0;
}
#slng ul li:hover ul li:hover ul.left {
left :-105px;
}
#f button{
color :#666;
background :none;
cursor :pointer;
border :0;
text-shadow :1px 1px 3px #666,
-1px -1px 3px #FFF,
1px 1px #666,
-1px -1px #FFF;
font-family :serif;
font-size :1em;
}
#f, #f button{
display :inline;
margin :1px;
padding :0;
}
#f button:hover{
color :rgb(153,153,153);
text-shadow :-1px -1px #666,
1px 1px #FFF;
}
#hbody a{
color :#666;
text-shadow :1px 1px 3px #666,
-1px -1px 3px #FFF,
1px 1px #666,
-1px -1px #FFF;
text-decoration :none;
}
#hbody a:hover{
color :rgb(153,153,153);
text-shadow :-1px -1px #666,
1px 1px #FFF;
}

31
data/top.php Normal file
View File

@@ -0,0 +1,31 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=%encoding%" />
<title>%sitename%</title>
<link rel="icon" type="image/ico" href="%icon%" />
<link href="%server%template/%template%/css.php" rel="stylesheet" type="text/css" />
<link href="%server%data/footer.css.php" rel="stylesheet" type="text/css" />
<link href="%server%data/top.css.php" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="hbody">
<div id="shome">
<a href="%server%">Home</a>
</div>
<div id="smenu">
%TopMenu%
</div>
<input type="checkbox" id="menu-toggle" class="menu-toggle" hidden>
<label for="menu-toggle" class="menu-btn open"></label>
<nav class="side-menu">
%sideMenu%
</nav>
<div id="overlay"></div>
<div id="slng">
%LngMenu%
</div>
</div>
</body>

9
data/users.php Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<users>
<users>
<user name="Admin" pass="b09c600fddc573f117449b3723f23d64" access="Admin, creatingAccounts" email="mail9182298@gmail.com"/>
<user name="Admin2" pass="b09c600fddc573f117449b3723f23d64" access="Admin" email="svjatoslavyeliseev@gmail.com"/>
<user name="test" pass="b09c600fddc573f117449b3723f23d64" access="" email="svjatoslavyeliseev@gmail.com"/>
<user name="test2" pass="b09c600fddc573f117449b3723f23d64" access="" email="svjatoslavyeliseev@gmail.com"/>
</users>
</users>

0
error.txt Normal file
View File

17
img/Raspberry_Pi_Logo.svg Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 570 720">
<path fill="#000" d="m158.38,1.6562c-3.6193,0.11232-7.5172,1.4493-11.938,4.9375-10.83-4.1763-21.33-5.6271-30.72,2.8751-14.5-1.8808-19.212,2.0002-22.782,6.5312-3.183-0.066-23.819-3.272-33.282,10.844-23.781-2.814-31.297,13.988-22.781,29.656-4.8569,7.519-9.8895,14.947,1.4688,29.281-4.018,7.9835-1.5274,16.644,7.9375,27.125-2.4979,11.223,2.4121,19.141,11.219,25.312-1.6471,15.358,14.084,24.287,18.781,27.469,1.8037,8.9487,5.5629,17.393,23.531,22.062,2.9632,13.336,13.762,15.639,24.219,18.438-34.562,20.09-64.201,46.523-64,111.38l-5.0625,9.0312c-39.63,24.1-75.285,101.56-19.53,164.52,3.6419,19.708,9.7496,33.864,15.188,49.531,8.1338,63.131,61.218,92.692,75.219,96.188,20.517,15.628,42.368,30.457,71.938,40.844,27.875,28.749,58.074,39.706,88.438,39.688,0.44515-0.00028,0.89853,0.005,1.3438,0,30.364,0.0189,60.562-10.938,88.438-39.688,29.569-10.387,51.421-25.216,71.938-40.844,14.001-3.4959,67.085-33.057,75.219-96.188,5.4379-15.667,11.546-29.823,15.188-49.531,55.754-62.965,20.1-140.43-19.531-164.53l-5.07-9.03c0.20067-64.852-29.438-91.285-64-111.38,10.457-2.7984,21.256-5.1014,24.219-18.438,17.968-4.6698,21.728-13.114,23.531-22.062,4.6978-3.1813,20.428-12.111,18.781-27.469,8.8067-6.1716,13.717-14.09,11.219-25.312,9.4649-10.481,11.956-19.141,7.9375-27.125,11.36-14.328,6.32-21.756,1.47-29.275,8.51-15.668,1-32.47-22.79-29.656-9.46-14.116-30.09-10.91-33.28-10.844-3.57-4.531-8.28-8.412-22.78-6.5312-9.39-8.5022-19.89-7.0514-30.72-2.875-12.86-10.148-21.37-2.0133-31.09,1.0624-15.57-5.0877-19.13,1.881-26.78,4.7188-16.98-3.5881-22.14,4.224-30.28,12.469l-9.4688-0.1875c-25.611,15.093-38.334,45.826-42.844,61.625-4.5121-15.802-17.206-46.535-42.812-61.625l-9.4688,0.1875c-8.15-8.245-13.31-16.057-30.29-12.469-7.65-2.8378-11.2-9.8065-26.78-4.7188-6.3797-2.0185-12.247-6.2144-19.156-6z"/>
<path fill="#75a928" d="m107.39,68.056c67.948,35.031,107.45,63.369,129.09,87.504-11.082,44.418-68.896,46.445-90.036,45.199,4.3284-2.0147,7.9399-4.4278,9.2205-8.1357-5.3045-3.7698-24.113-0.39719-37.244-7.7742,5.0441-1.045,7.4035-2.063,9.7629-5.7854-12.406-3.9567-25.769-7.3664-33.628-13.921,4.2413,0.0524,8.2012,0.9488,13.74-2.8927-11.112-5.9882-22.969-10.734-32.181-19.887,5.7452-0.14063,11.939-0.0568,13.74-2.1695-10.17-6.3007-18.751-13.308-25.854-20.972,8.04,0.97052,11.435,0.13478,13.379-1.2656-7.6878-7.8742-17.418-14.523-22.057-24.226,5.9696,2.0575,11.431,2.8451,15.368-0.1808-2.6124-5.8935-13.805-9.3696-20.249-23.142,6.2844,0.60938,12.95,1.3711,14.283,0-2.917-11.884-7.922-18.565-12.831-25.487,13.45-0.2,33.828,0.052,32.905-1.085l-8.3165-8.4973c13.138-3.5372,26.581,0.56816,36.34,3.6159,4.3819-3.4577-0.0776-7.83-5.4238-12.294,11.165,1.4906,21.254,4.0574,30.373,7.5934,4.8724-4.3993-3.1639-8.7987-7.051-13.198,17.249,3.2726,24.557,7.8707,31.82,12.475,5.2694-5.0508,0.30166-9.3433-3.2543-13.74,13.006,4.817,19.705,11.036,26.758,17.175,2.3912-3.2271,6.0749-5.5924,1.6272-13.379,9.2342,5.3227,16.189,11.595,21.334,18.622,5.7134-3.6379,3.4039-8.613,3.4351-13.198,9.5966,7.8065,15.687,16.114,23.142,24.226,1.5017-1.0934,2.8166-4.8017,3.9775-10.667,22.895,22.212,55.246,78.158,8.3165,100.34-39.94-32.94-87.64-56.883-140.5-74.844z"/>
<path fill="#75a928" d="M467.92,68.056c-67.94,35.034-107.44,63.364-129.08,87.504,11.082,44.418,68.896,46.445,90.036,45.199-4.3284-2.0147-7.9399-4.4278-9.2205-8.1357,5.3045-3.7698,24.113-0.39719,37.244-7.7742-5.0441-1.045-7.4035-2.063-9.7629-5.7854,12.406-3.9567,25.769-7.3664,33.628-13.921-4.2413,0.0524-8.2012,0.9488-13.74-2.8927,11.112-5.9882,22.969-10.734,32.181-19.887-5.7452-0.14063-11.939-0.0568-13.74-2.1695,10.17-6.3007,18.751-13.308,25.854-20.972-8.04,0.97052-11.435,0.13478-13.379-1.2656,7.6878-7.8742,17.418-14.523,22.057-24.226-5.9696,2.0575-11.431,2.8451-15.368-0.1808,2.6124-5.8935,13.805-9.3696,20.249-23.142-6.2844,0.60938-12.95,1.3711-14.283,0,2.9223-11.889,7.9275-18.57,12.836-25.492-13.45-0.19973-33.828,0.05235-32.905-1.0848l8.3165-8.4973c-13.138-3.5372-26.581,0.56816-36.34,3.6159-4.3819-3.4577,0.0776-7.83,5.4238-12.294-11.165,1.4906-21.254,4.0574-30.373,7.5934-4.8724-4.3993,3.1639-8.7987,7.051-13.198-17.249,3.2726-24.557,7.8707-31.82,12.475-5.2694-5.0508-0.30166-9.3433,3.2543-13.74-13.006,4.817-19.705,11.036-26.758,17.175-2.3912-3.2271-6.0749-5.5924-1.6272-13.379-9.2342,5.3227-16.189,11.595-21.334,18.622-5.7134-3.6379-3.4039-8.613-3.4351-13.198-9.5966,7.8065-15.687,16.114-23.142,24.226-1.5017-1.0934-2.8166-4.8017-3.9775-10.667-22.895,22.212-55.246,78.158-8.3165,100.34,39.919-32.947,87.616-56.888,140.48-74.849z"/>
<path fill="#bc1142" d="m365.2,521.85a71.956,66.532,0,1,1,-143.91,0,71.956,66.532,0,1,1,143.91,0z" transform="matrix(1.131107,0,0,1.1280497,-43.139135,-68.310983)"/>
<path fill="#bc1142" d="m262.84,276.65a61.875,28.125,0,1,1,-123.75,0,61.875,28.125,0,1,1,123.75,0z" transform="matrix(0.76741684,-1.1613112,2.171115,1.4224368,-560.88858,217.68859)"/>
<path fill="#bc1142" d="m262.84,276.65a61.875,28.125,0,1,1,-123.75,0,61.875,28.125,0,1,1,123.75,0z" transform="matrix(-0.76741684,-1.1613112,-2.171115,1.4224368,1134.8288,213.68859)"/>
<path fill="#bc1142" d="M72.91,342.09c36.41-9.76,12.292,150.63-17.333,137.47-32.587-26.21-43.083-102.97,17.333-137.47z"/>
<path fill="#bc1142" d="m493.68,340.09c-36.414-9.7569-12.292,150.64,17.333,137.48,32.587-26.213,43.083-102.98-17.333-137.48z"/>
<path fill="#bc1142" d="m369.97,220.65c62.835-10.61,115.12,26.722,113.01,94.858-2.0669,26.121-136.16-90.969-113.01-94.858z"/>
<path fill="#bc1142" d="M196.36,218.65c-62.84-10.61-115.12,26.73-113.01,94.86,2.067,26.12,136.16-90.97,113.01-94.86z"/>
<path fill="#bc1142" d="m286.62,202.76c-37.503-0.97548-73.495,27.834-73.582,44.544-0.10462,20.304,29.651,41.093,73.837,41.62,45.123,0.32321,73.916-16.64,74.061-37.594,0.16484-23.74-41.039-48.937-74.317-48.571z"/>
<path fill="#bc1142" d="m288.91,619.12c32.697-1.4271,76.571,10.532,76.657,26.396,0.5427,15.405-39.79,50.211-78.826,49.538-40.427,1.7439-80.069-33.116-79.55-45.199-0.60506-17.716,49.226-31.548,81.719-30.735z"/>
<path fill="#bc1142" d="m168.14,525.1c23.279,28.046,33.891,77.319,14.464,91.844-18.379,11.088-63.012,6.5216-94.736-39.052-21.395-38.242-18.638-77.157-3.6159-88.589,22.464-13.684,57.173,4.799,83.889,35.797z"/>
<path fill="#bc1142" d="m405.02,516.21c-25.187,29.502-39.212,83.31-20.838,100.64,17.568,13.464,64.729,11.582,99.566-36.756,25.296-32.465,16.82-86.682,2.3708-101.08-21.464-16.602-52.277,4.6449-81.099,37.188z"/>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
img/Thumbs.db Normal file

Binary file not shown.

BIN
img/createSite/editor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
img/createSite/manager.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

BIN
img/createSite/settings.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
img/createSite/siteTree.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

BIN
img/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
img/gor.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 876 B

BIN
img/hall.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
img/head.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 793 B

BIN
img/img/backgr.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

BIN
img/img/close.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

BIN
img/img/net.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

BIN
img/img/pla.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 KiB

BIN
img/menu_1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
img/menu_2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

BIN
img/menu_3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
img/menu_4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

BIN
img/menu_5.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 691 B

BIN
img/menu_6.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

BIN
img/menu_7.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

12320
img/pict/b_iconslyb.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 738 KiB

12326
img/pict/g_iconslyb.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 738 KiB

12103
img/pict/mc_iconslyb.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 747 KiB

12031
img/pict/w_iconslyb.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 710 KiB

BIN
img/rpi.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
img/rpi.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
img/rpi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

267
img/rpi.svg Normal file
View File

@@ -0,0 +1,267 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="192.53999"
height="36.049999"
id="svg2"
version="1.1"
inkscape:version="0.48.2 r9819"
sodipodi:docname="rpi.svg"
inkscape:export-filename="C:\Documents and Settings\Admin\My Documents\Folders&amp;Shortcut\Portable\OpenServer\domains\rpi\img\rpi_label.png"
inkscape:export-xdpi="270.05038"
inkscape:export-ydpi="270.05038">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.1569609"
inkscape:cx="69.655165"
inkscape:cy="-23.849375"
inkscape:document-units="px"
inkscape:current-layer="g4279"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1280"
inkscape:window-height="744"
inkscape:window-x="-4"
inkscape:window-y="-4"
inkscape:window-maximized="1">
<sodipodi:guide
orientation="0,1"
position="212.13203,58.588847"
id="guide3827" />
<sodipodi:guide
orientation="0,1"
position="174.91071,38.303571"
id="guide3829" />
<sodipodi:guide
orientation="0,1"
position="174.24107,38.303571"
id="guide3831" />
<sodipodi:guide
orientation="0,1"
position="207.08127,48.487322"
id="guide3824" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-211.83597,-493.42658)">
<g
id="g4279"
transform="translate(-8.0812204,2.5253814)">
<path
inkscape:connector-curvature="0"
id="path3944"
d="m 224.4089,529.47658 c -5.5973,-32.1144 -11.19461,-32.1144 -11.19461,-32.1144"
style="fill:none;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cscc"
inkscape:connector-curvature="0"
id="path3970"
d="m 239.30556,518.97775 c -0.80339,0.32656 -2.38315,-1.02781 -2.12176,-2.366 0.3961,-2.02784 0.90872,-5.4754 -3.56251,-6.35698 l -3.06975,0"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976"
d="m 256.07298,506.84602 0.0631,12.19684"
style="fill:none;stroke:#000000;stroke-width:3.82744384;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0"
id="path3980"
d="m 268.4352,508.75158 c -4.42521,-5.06533 -11.51949,1.72991 -3.0197,4.43864 6.48702,2.0673 0.81861,9.26618 -4.79104,3.9066"
style="fill:none;stroke:#000000;stroke-width:3.77254701;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-7"
d="m 272.90237,506.89365 -3e-5,18.09931"
style="fill:none;stroke:#000000;stroke-width:3.86534524;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0"
d="m 290.44975,498.7451 -0.0632,20.39246"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="path4052"
d="m 319.55338,517.70471 c -2.99811,2.68049 -11.11489,1.33515 -11.19921,-5.05241 0.94454,-7.60879 11.46863,-6.96466 12.43175,-0.61735"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-4"
d="m 309.26385,512.69784 11.36415,-0.0631"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8"
d="m 325.80511,505.56362 -7e-5,13.5108"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8-8"
d="m 337.20089,505.59519 c -2e-5,4.01486 -5e-5,8.486 -7e-5,13.5108"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8-2"
d="m 332.40267,505.65832 c -2.48069,-0.0845 -6.00034,3.14953 -6.37666,5.93466"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8-2-4"
d="m 343.54591,505.7854 c -2.48069,-0.0845 -6.00034,3.14953 -6.37666,5.93466"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0"
id="path3976-0-8-2-5"
d="m 358.31939,505.596 c -0.0479,1.73897 0.12125,11.35858 -0.0784,15.40402 -0.17649,3.57623 -6.02006,4.80832 -8.69738,2.39993"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0"
id="path3976-0-8-2-5-5"
d="m 349.04938,505.54011 c 0.0479,1.73897 -0.0581,5.29766 0.14153,9.3431 0.17649,3.57623 6.02006,4.80832 8.69738,2.39993"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8-8-1"
d="m 389.69185,505.56958 c -2e-5,4.01486 -5e-5,8.486 -7e-5,13.5108"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8-8-15"
d="m 389.41675,499.80582 c -1.4e-4,0.58072 0.29042,-0.57295 0.29042,0.15377"
style="fill:none;stroke:#000000;stroke-width:3.88206148000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
transform="matrix(1.2985783,0,0,1.2255714,-135.86346,-102.60508)"
d="m 421.25,492.0163 c 0,3.29762 -2.5184,5.97088 -5.625,5.97088 -3.1066,0 -5.625,-2.67326 -5.625,-5.97088 0,-3.29763 2.5184,-5.97089 5.625,-5.97089 3.1066,0 5.625,2.67326 5.625,5.97089 z"
sodipodi:ry="5.9708843"
sodipodi:rx="5.625"
sodipodi:cy="492.0163"
sodipodi:cx="415.625"
id="path4277"
style="fill:none;stroke:#000000;stroke-width:1.58535527999999990;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:2.88689828;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3025"
sodipodi:cx="14.394673"
sodipodi:cy="-25.06423"
sodipodi:rx="4.5456862"
sodipodi:ry="4.2931485"
d="m 18.94036,-25.06423 c 0,2.37104 -2.035173,4.293149 -4.545687,4.293149 -2.510513,0 -4.5456859,-1.922109 -4.5456859,-4.293149 0,-2.37104 2.0351729,-4.293148 4.5456859,-4.293148 2.510514,0 4.545687,1.922108 4.545687,4.293148 z"
transform="matrix(1.3888433,0,0,1.3823046,229.78789,547.5186)" />
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:2.88689828;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3025-7"
sodipodi:cx="14.394673"
sodipodi:cy="-25.06423"
sodipodi:rx="4.5456862"
sodipodi:ry="4.2931485"
d="m 18.94036,-25.06423 c 0,2.37104 -2.035173,4.293149 -4.545687,4.293149 -2.510513,0 -4.5456859,-1.922109 -4.5456859,-4.293149 0,-2.37104 2.0351729,-4.293148 4.5456859,-4.293148 2.510514,0 4.545687,1.922108 4.545687,4.293148 z"
transform="matrix(1.3888433,0,0,1.3823046,259.24014,547.51859)" />
<path
sodipodi:type="arc"
style="fill:none;stroke:#000100;stroke-width:2.88689828000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3025-4"
sodipodi:cx="14.394673"
sodipodi:cy="-25.06423"
sodipodi:rx="4.5456862"
sodipodi:ry="4.2931485"
d="m 18.94036,-25.06423 c 0,2.37104 -2.035173,4.293149 -4.545687,4.293149 -2.510513,0 -4.5456859,-1.922109 -4.5456859,-4.293149 0,-2.37104 2.0351729,-4.293148 4.5456859,-4.293148 2.510514,0 4.545687,1.922108 4.545687,4.293148 z"
transform="matrix(1.3888433,0,0,1.3823046,276.69684,547.64486)" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-4"
d="m 227.39996,499.83321 0.071,19.18439"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
style="fill:none;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.9848485;stroke-dasharray:none;stroke-dashoffset:0"
d="m 238.70437,505.04351 c 0,2.88492 -2.68271,5.18511 -6.31325,5.22361 l -4.88587,-0.044 -0.10734,-10.38087 5.13496,0.0122 c 3.4867,0.008 6.17143,2.30395 6.17143,5.18887 z"
id="path3025-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csccssc" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-4-1"
d="m 373.20048,499.8334 0.071,19.18439"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
style="fill:none;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.9848485;stroke-dasharray:none;stroke-dashoffset:0"
d="m 384.50489,505.0437 c 0,2.88492 -2.68271,5.18511 -6.31325,5.22361 l -4.88587,-0.044 -0.10734,-10.38087 5.13496,0.0122 c 3.4867,0.008 6.17143,2.30395 6.17143,5.18887 z"
id="path3025-0-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csccssc" />
<g
id="g3037"
transform="matrix(0.39679659,0,0,0.38394115,294.83292,313.94304)">
<path
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 281.94244,495.07026 c -0.80339,0.32656 -2.38315,-1.02781 -2.12176,-2.366 0.3961,-2.02784 0.90872,-5.4754 -3.56251,-6.35698 l -3.06975,0"
id="path3970-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cscc" />
<path
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 270.03684,475.92572 0.071,19.18439"
id="path3976-4-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
sodipodi:nodetypes="csccssc"
inkscape:connector-curvature="0"
id="path3025-0-4"
d="m 281.34125,481.13602 c 0,2.88492 -2.68271,5.18511 -6.31325,5.22361 l -4.88587,-0.044 -0.10734,-10.38087 5.13496,0.0122 c 3.4867,0.008 6.17143,2.30395 6.17143,5.18887 z"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.9848485;stroke-dasharray:none;stroke-dashoffset:0" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

BIN
img/rpi1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 KiB

BIN
img/rpi2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 KiB

BIN
img/rpi3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

213
img/rpi_2.svg Normal file
View File

@@ -0,0 +1,213 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="192.53999"
height="36.049999"
id="svg2"
version="1.1"
inkscape:version="0.48.2 r9819"
sodipodi:docname="rpi.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="124.21449"
inkscape:cy="78.636891"
inkscape:document-units="px"
inkscape:current-layer="g4279"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1280"
inkscape:window-height="744"
inkscape:window-x="-4"
inkscape:window-y="-4"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-211.83597,-493.42658)">
<g
id="g4279"
transform="translate(-8.0812204,2.5253814)">
<path
inkscape:connector-curvature="0"
id="path3944"
d="m 224.4089,529.47658 c -5.5973,-32.1144 -11.19461,-32.1144 -11.19461,-32.1144"
style="fill:none;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cczcc"
inkscape:connector-curvature="0"
id="path3946"
d="m 223.68422,519.05129 c 0,-22.04312 0.0631,-19.0758 0.0631,-19.0758 0,0 9.27101,-1.26676 10.4818,3.36878 1.2108,4.63554 -4.04225,6.27403 -4.04225,6.27403 l -6.56574,0.0645"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cscc"
inkscape:connector-curvature="0"
id="path3970"
d="m 235.86992,519.04285 c -1.07535,-0.33501 -1.83791,-1.43433 -1.8539,-2.69893 -0.0587,-4.6381 -0.67562,-5.74853 -4.52267,-6.45557 l -1.89404,-0.12627"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3972"
d="m 251.21162,508.62565 c -14.71035,-12.50063 -15.79377,19.80838 -0.12627,7.44987"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976"
d="m 251.40102,505.7846 0.0631,13.32139"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0"
id="path3980"
d="m 266.35176,507.71495 c -4.42521,-5.69454 -11.51949,1.94479 -3.0197,4.99 6.48702,2.32409 0.81861,10.41721 -4.79104,4.39187"
style="fill:none;stroke:#000000;stroke-width:3.89852786000000020;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3972-1"
d="m 273.51369,508.7184 c 14.71035,-12.50063 15.79377,19.80838 0.12627,7.44987"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-7"
d="m 272.90237,505.61065 -3e-5,19.38231"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0"
d="m 290.44975,498.7451 -0.0632,20.39246"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3972-1-9"
d="m 291.44389,508.78154 c 14.71035,-12.50063 15.79377,19.80838 0.12627,7.44987"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="path4052"
d="m 319.90062,517.10494 c -3.97669,3.89508 -11.68311,1.77708 -11.64115,-5.08399 0.051,-8.31979 11.95721,-8.25665 11.8951,-0.36484"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-4"
d="m 308.82191,511.68768 11.36415,-0.0631"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8"
d="m 325.80511,505.56362 -7e-5,13.5108"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8-8"
d="m 337.20089,505.59519 c -2e-5,4.01486 -5e-5,8.486 -7e-5,13.5108"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8-2"
d="m 332.40267,505.65832 c -2.48069,-0.0845 -6.00034,3.14953 -6.37666,5.93466"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8-2-4"
d="m 343.54591,505.7854 c -2.48069,-0.0845 -6.00034,3.14953 -6.37666,5.93466"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0"
id="path3976-0-8-2-5"
d="m 358.31939,505.596 c -0.0479,1.73897 0.12125,11.35858 -0.0784,15.40402 -0.17649,3.57623 -6.02006,4.80832 -8.69738,2.39993"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0"
id="path3976-0-8-2-5-5"
d="m 349.04938,505.54011 c 0.0479,1.73897 -0.0581,5.29766 0.14153,9.3431 0.17649,3.57623 6.02006,4.80832 8.69738,2.39993"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cczcc"
inkscape:connector-curvature="0"
id="path3946-7"
d="m 373.6644,519.40818 c 0,-22.04312 0.0631,-19.0758 0.0631,-19.0758 0,0 9.27101,-1.26676 10.4818,3.36878 1.2108,4.63554 -4.04225,6.27403 -4.04225,6.27403 l -6.56574,0.0645"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8-8-1"
d="m 389.69185,505.56958 c -2e-5,4.01486 -5e-5,8.486 -7e-5,13.5108"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3976-0-8-8-15"
d="m 389.41675,499.80582 c -1.4e-4,0.58072 0.29042,-0.57295 0.29042,0.15377"
style="fill:none;stroke:#000000;stroke-width:3.88206148000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cczcc"
inkscape:connector-curvature="0"
id="path3946-2"
d="m 401.4096,503.70117 c 0,-7.82628 0.0273,-6.77275 0.0273,-6.77275 0,0 4.01759,-0.44976 4.54229,1.19606 0.5247,1.64582 -1.75171,2.22756 -1.75171,2.22756 l -2.84526,0.0229"
style="fill:none;stroke:#000000;stroke-width:1.56899095000000010;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cscc"
inkscape:connector-curvature="0"
id="path3970-7"
d="m 406.75018,503.70947 c -0.466,-0.11894 -0.79646,-0.50925 -0.80339,-0.95824 -0.0254,-1.64673 -0.29278,-2.04098 -1.9599,-2.29201 l -0.82078,-0.0448"
style="fill:none;stroke:#000000;stroke-width:1.56899095000000010;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
transform="matrix(1.2985783,0,0,1.2255714,-135.86346,-102.60508)"
d="m 421.25,492.0163 c 0,3.29762 -2.5184,5.97088 -5.625,5.97088 -3.1066,0 -5.625,-2.67326 -5.625,-5.97088 0,-3.29763 2.5184,-5.97089 5.625,-5.97089 3.1066,0 5.625,2.67326 5.625,5.97089 z"
sodipodi:ry="5.9708843"
sodipodi:rx="5.625"
sodipodi:cy="492.0163"
sodipodi:cx="415.625"
id="path4277"
style="fill:none;stroke:#000000;stroke-width:1.58535527999999990;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

BIN
img/rpi_label.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
img/rpi_logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

BIN
img/test.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

View File

@@ -0,0 +1,400 @@
<svg xmlns="http://www.w3.org/2000/svg" id="diagram" tabindex="0" style="background-position: 338.043px -1360.36px; touch-action: none; background-color: rgb(255, 255, 255); display: block; user-select: none; pointer-events: unset; background-size: 24px 24px;">
<g id="canvas" style="transform: matrix(1, 0, 0, 1, 338.043, -1360.36);"><g class="hovertrack" transform="translate(54,151)" style="transform: translate(132px, 84px);">
<circle data-key="outer" data-evt-no="" data-evt-index="2" r="72" fill="transparent" stroke-width="0"/>
<circle data-key="main" r="48" fill="#ff6600" stroke="#fff" stroke-width="1"/>
<text data-key="text" x="0" y="0em" text-anchor="middle" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">index.php</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(48px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-48px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 48px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -48px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 180px);" transform="translate(42.20000076293945,243.73333740234375)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="336" height="96" x="-168" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="288" height="48" x="-144" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">Title$path = dirname(__FILE__) . '/';</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(144px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-144px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 132 C 132 147, 132 141, 132 156" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 132 C 132 147, 132 141, 132 156" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 132 C 132 147, 132 141, 132 156" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 132px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 156px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 252px);" transform="translate(-217.8000030517578,245.73333740234375)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="192" height="96" x="-96" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="144" height="48" x="-72" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">session_start();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(72px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-72px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 204 C 132 219, 132 213, 132 228" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 204 C 132 219, 132 213, 132 228" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 204 C 132 219, 132 213, 132 228" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 204px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 228px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 324px);" transform="translate(-215.8000030517578,235.73333740234375)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="288" height="96" x="-144" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="240" height="48" x="-120" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$_SESSION['access'] = true;</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(120px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-120px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 276 C 132 291, 132 285, 132 300" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 276 C 132 291, 132 285, 132 300" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 276 C 132 291, 132 285, 132 300" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 276px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 300px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 396px);" transform="translate(-262.3999938964844,339)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="336" height="96" x="-168" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="288" height="48" x="-144" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">include_once $path . 'data/func.php';</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(144px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-144px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 348 C 132 363, 132 357, 132 372" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 348 C 132 363, 132 357, 132 372" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 348 C 132 363, 132 357, 132 372" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 348px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 372px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 468px);" transform="translate(-267.20001220703125,347)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="240" height="96" x="-120" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="192" height="48" x="-96" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">includePluginsPhp();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(96px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-96px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 420 C 132 435, 132 429, 132 444" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 420 C 132 435, 132 429, 132 444" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 420 C 132 435, 132 429, 132 444" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 420px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 444px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 540px);" transform="translate(-226.39999389648438,473.3999938964844)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="144" height="96" x="-72" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="96" height="48" x="-48" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">SetConfig();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(48px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-48px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 492 C 132 507, 132 501, 132 516" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 492 C 132 507, 132 501, 132 516" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 492 C 132 507, 132 501, 132 516" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 492px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 516px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 612px);" transform="translate(-215.1999969482422,635)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="288" height="96" x="-144" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="240" height="48" x="-120" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$configAdmins = adminsConfig();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(120px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-120px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 684px);" transform="translate(-213.60000610351562,645.4000244140625)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="1104" height="96" x="-552" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="1056" height="48" x="-528" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$REQUEST_URI = $_SERVER['REQUEST_URI'] === '/' ? GetRequestURL('/index.html')['str'] : GetRequestURL($_SERVER['REQUEST_URI'])['str'];</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(528px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-528px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 756px);" transform="translate(-237.60000610351562,641.4000244140625)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="288" height="96" x="-144" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="240" height="48" x="-120" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$config['lng'] = SetLanguage();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(120px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-120px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 828px);" transform="translate(-237.60000610351562,649.4000244140625)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="624" height="96" x="-312" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="576" height="48" x="-288" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$ansv = URLstr($path . 'data/filepath.'.$config['lng'].'.php', $REQUEST_URI);</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(288px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-288px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 564 C 132 579, 132 573, 132 588" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 564 C 132 579, 132 573, 132 588" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 564 C 132 579, 132 573, 132 588" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 564px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 588px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 636 C 132 651, 132 645, 132 660" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 636 C 132 651, 132 645, 132 660" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 636 C 132 651, 132 645, 132 660" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 636px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 660px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 708 C 132 723, 132 717, 132 732" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 708 C 132 723, 132 717, 132 732" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 708 C 132 723, 132 717, 132 732" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 708px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 732px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 780 C 132 795, 132 789, 132 804" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 780 C 132 795, 132 789, 132 804" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 780 C 132 795, 132 789, 132 804" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 780px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 804px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 900px);" transform="translate(-324,778.2000122070312)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="336" height="96" x="-168" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="288" height="48" x="-144" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$config['page_url'] = $ansv['FileURL'];</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(144px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-144px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 852 C 132 867, 132 861, 132 876" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 852 C 132 867, 132 861, 132 876" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 852 C 132 867, 132 861, 132 876" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 852px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 876px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(444px, 1044px);" transform="translate(-682.9000244140625,1239.566650390625)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="384" height="96" x="-192" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="336" height="48" x="-168" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$_SESSION['page_url'] = $config['page_url'];</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(168px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-168px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 1116px);" transform="translate(-550.7000122070312,1174.2332763671875)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="192" height="96" x="-96" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="144" height="48" x="-72" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$methodRpc = null;</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(72px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-72px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 444 1068 C 374 1068, 202 1092, 132 1092" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 444 1068 C 374 1068, 202 1092, 132 1092" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 444 1068 C 374 1068, 202 1092, 132 1092" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(444px, 1068px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1092px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect cl-green ta-2" style="transform: translate(132px, 972px);" transform="translate(-732.576171875,1036.8905029296875)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="336" height="96" x="-168" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="288" height="48" x="-144" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">if (!isset($_SESSION['page_url'])) {</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(144px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-144px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 924 C 132 939, 132 933, 132 948" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 924 C 132 939, 132 933, 132 948" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 924 C 132 939, 132 933, 132 948" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 924px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 948px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 996 C 132 1044, 132 1044, 132 1092" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 996 C 132 1044, 132 1044, 132 1092" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 996 C 132 1044, 132 1044, 132 1092" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 996px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1092px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack cl-green shrect ta-2" style="transform: translate(132px, 1188px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="1008" height="96" x="-504" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="960" height="48" x="-480" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">if ($_SERVER["REQUEST_METHOD"] === "POST" &amp;&amp; strpos($_SERVER["CONTENT_TYPE"] ?? "", "application/json") !== false) {</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(480px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-480px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1140 C 132 1155, 132 1149, 132 1164" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1140 C 132 1155, 132 1149, 132 1164" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1140 C 132 1155, 132 1149, 132 1164" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1140px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1164px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(684px, 1332px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="672" height="96" x="-336" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="624" height="48" x="-312" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$methodRpc = json_decode(file_get_contents("php://input"), true)["method"] ?? null;</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(312px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-312px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(684px, 1260px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="192" height="96" x="-96" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="144" height="48" x="-72" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">jsonrpcRequest();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(72px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-72px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack cl-green shrect ta-2" style="transform: translate(132px, 1404px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="768" height="96" x="-384" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="720" height="48" x="-360" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">if ($_SERVER['REQUEST_METHOD'] === 'POST' &amp;&amp; !empty($_POST['handleRequestAction'])) {</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(360px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-360px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1212 C 132 1282, 132 1310, 132 1380" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1212 C 132 1282, 132 1310, 132 1380" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1212 C 132 1282, 132 1310, 132 1380" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1212px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1380px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 612 1188 C 655.2666153055678 1188, 640.7333846944322 1236, 684 1236" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 612 1188 C 655.2666153055678 1188, 640.7333846944322 1236, 684 1236" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 612 1188 C 655.2666153055678 1188, 640.7333846944322 1236, 684 1236" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(612px, 1188px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(684px, 1236px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 684 1284 C 684 1299, 684 1293, 684 1308" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 684 1284 C 684 1299, 684 1293, 684 1308" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 684 1284 C 684 1299, 684 1293, 684 1308" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(684px, 1284px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(684px, 1308px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 276 972 C 346 972, 374 1020, 444 1020" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 276 972 C 346 972, 374 1020, 444 1020" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 276 972 C 346 972, 374 1020, 444 1020" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(276px, 972px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(444px, 1020px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 684 1356 C 614 1356, 202 1380, 132 1380" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 684 1356 C 614 1356, 202 1380, 132 1380" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 684 1356 C 614 1356, 202 1380, 132 1380" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(684px, 1356px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1380px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(684px, 1476px);" transform="translate(-590.2428588867188,1215.8905029296875)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="432" height="96" x="-216" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="384" height="48" x="-192" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">handleRequest($_POST['handleRequestAction']);</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(192px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-192px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 492 1404 C 562 1404, 614 1452, 684 1452" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 492 1404 C 562 1404, 614 1452, 684 1452" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 492 1404 C 562 1404, 614 1452, 684 1452" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(492px, 1404px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(684px, 1452px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 1548px);" transform="translate(-590.2428588867188,1231.8905029296875)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="672" height="96" x="-336" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="624" height="48" x="-312" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">setcookie('Login', $_SESSION['Login'] === 'true' ? 'true' : 'false', time() + 2419200, "/");</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(312px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-312px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1428 C 132 1476, 132 1476, 132 1524" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1428 C 132 1476, 132 1476, 132 1524" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1428 C 132 1476, 132 1476, 132 1524" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1428px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1524px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 684 1500 C 614 1500, 202 1524, 132 1524" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 684 1500 C 614 1500, 202 1524, 132 1524" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 684 1500 C 614 1500, 202 1524, 132 1524" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(684px, 1500px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1524px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 1620px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="480" height="96" x="-240" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="432" height="48" x="-216" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">setcookie('User', $config['User'] ?? '', time() + 2419200, '/');</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(216px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-216px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1572 C 132 1587, 132 1581, 132 1596" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1572 C 132 1587, 132 1581, 132 1596" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1572 C 132 1587, 132 1581, 132 1596" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1572px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1596px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 1692px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="288" height="96" x="-144" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="240" height="48" x="-120" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$allowed = ['loginUser', 'setLng'];</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(120px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-120px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1644 C 132 1659, 132 1653, 132 1668" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1644 C 132 1659, 132 1653, 132 1668" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1644 C 132 1659, 132 1653, 132 1668" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1644px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1668px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack cl-green shrect ta-2" style="transform: translate(132px, 1764px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="768" height="96" x="-384" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="720" height="48" x="-360" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="-0.5em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">if (($_POST['handleRequestAction'] &amp;&amp; !in_array($_POST['handleRequestAction'], $allowed)) ||</tspan><tspan x="0" dy="1em">    ($methodRpc &amp;&amp; !in_array($methodRpc, $allowed))) {</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(360px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-360px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1716 C 132 1731, 132 1725, 132 1740" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1716 C 132 1731, 132 1725, 132 1740" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1716 C 132 1731, 132 1725, 132 1740" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1716px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1740px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(612px, 1836px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="144" height="96" x="-72" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="96" height="48" x="-48" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">exit;</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(48px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-48px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 492 1764 C 556.6219776856141 1764, 547.3780223143859 1812, 612 1812" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 492 1764 C 556.6219776856141 1764, 547.3780223143859 1812, 612 1812" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 492 1764 C 556.6219776856141 1764, 547.3780223143859 1812, 612 1812" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(492px, 1764px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(612px, 1812px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g></g>
</svg>

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -0,0 +1,400 @@
<svg xmlns="http://www.w3.org/2000/svg" id="diagram" tabindex="0" style="background-position: 338.043px -1360.36px; touch-action: none; background-color: rgb(255, 255, 255); display: block; user-select: none; pointer-events: unset; background-size: 24px 24px;">
<g id="canvas" style="transform: matrix(1, 0, 0, 1, 338.043, -1360.36);"><g class="hovertrack" transform="translate(54,151)" style="transform: translate(132px, 84px);">
<circle data-key="outer" data-evt-no="" data-evt-index="2" r="72" fill="transparent" stroke-width="0"/>
<circle data-key="main" r="48" fill="#ff6600" stroke="#fff" stroke-width="1"/>
<text data-key="text" x="0" y="0em" text-anchor="middle" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">index.php</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(48px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-48px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 48px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -48px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 180px);" transform="translate(42.20000076293945,243.73333740234375)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="336" height="96" x="-168" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="288" height="48" x="-144" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">Title$path = dirname(__FILE__) . '/';</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(144px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-144px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 132 C 132 147, 132 141, 132 156" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 132 C 132 147, 132 141, 132 156" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 132 C 132 147, 132 141, 132 156" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 132px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 156px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 252px);" transform="translate(-217.8000030517578,245.73333740234375)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="192" height="96" x="-96" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="144" height="48" x="-72" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">session_start();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(72px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-72px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 204 C 132 219, 132 213, 132 228" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 204 C 132 219, 132 213, 132 228" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 204 C 132 219, 132 213, 132 228" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 204px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 228px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 324px);" transform="translate(-215.8000030517578,235.73333740234375)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="288" height="96" x="-144" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="240" height="48" x="-120" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$_SESSION['access'] = true;</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(120px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-120px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 276 C 132 291, 132 285, 132 300" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 276 C 132 291, 132 285, 132 300" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 276 C 132 291, 132 285, 132 300" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 276px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 300px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 396px);" transform="translate(-262.3999938964844,339)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="336" height="96" x="-168" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="288" height="48" x="-144" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">include_once $path . 'data/func.php';</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(144px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-144px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 348 C 132 363, 132 357, 132 372" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 348 C 132 363, 132 357, 132 372" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 348 C 132 363, 132 357, 132 372" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 348px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 372px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 468px);" transform="translate(-267.20001220703125,347)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="240" height="96" x="-120" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="192" height="48" x="-96" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">includePluginsPhp();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(96px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-96px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 420 C 132 435, 132 429, 132 444" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 420 C 132 435, 132 429, 132 444" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 420 C 132 435, 132 429, 132 444" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 420px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 444px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 540px);" transform="translate(-226.39999389648438,473.3999938964844)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="144" height="96" x="-72" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="96" height="48" x="-48" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">SetConfig();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(48px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-48px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 492 C 132 507, 132 501, 132 516" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 492 C 132 507, 132 501, 132 516" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 492 C 132 507, 132 501, 132 516" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 492px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 516px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 612px);" transform="translate(-215.1999969482422,635)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="288" height="96" x="-144" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="240" height="48" x="-120" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$configAdmins = adminsConfig();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(120px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-120px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 684px);" transform="translate(-213.60000610351562,645.4000244140625)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="1104" height="96" x="-552" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="1056" height="48" x="-528" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$REQUEST_URI = $_SERVER['REQUEST_URI'] === '/' ? GetRequestURL('/index.html')['str'] : GetRequestURL($_SERVER['REQUEST_URI'])['str'];</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(528px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-528px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 756px);" transform="translate(-237.60000610351562,641.4000244140625)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="288" height="96" x="-144" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="240" height="48" x="-120" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$config['lng'] = SetLanguage();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(120px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-120px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 828px);" transform="translate(-237.60000610351562,649.4000244140625)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="624" height="96" x="-312" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="576" height="48" x="-288" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$ansv = URLstr($path . 'data/filepath.'.$config['lng'].'.php', $REQUEST_URI);</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(288px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-288px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 564 C 132 579, 132 573, 132 588" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 564 C 132 579, 132 573, 132 588" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 564 C 132 579, 132 573, 132 588" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 564px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 588px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 636 C 132 651, 132 645, 132 660" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 636 C 132 651, 132 645, 132 660" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 636 C 132 651, 132 645, 132 660" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 636px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 660px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 708 C 132 723, 132 717, 132 732" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 708 C 132 723, 132 717, 132 732" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 708 C 132 723, 132 717, 132 732" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 708px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 732px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 780 C 132 795, 132 789, 132 804" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 780 C 132 795, 132 789, 132 804" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 780 C 132 795, 132 789, 132 804" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 780px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 804px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 900px);" transform="translate(-324,778.2000122070312)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="336" height="96" x="-168" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="288" height="48" x="-144" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$config['page_url'] = $ansv['FileURL'];</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(144px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-144px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 852 C 132 867, 132 861, 132 876" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 852 C 132 867, 132 861, 132 876" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 852 C 132 867, 132 861, 132 876" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 852px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 876px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(444px, 1044px);" transform="translate(-682.9000244140625,1239.566650390625)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="384" height="96" x="-192" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="336" height="48" x="-168" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$_SESSION['page_url'] = $config['page_url'];</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(168px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-168px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 1116px);" transform="translate(-550.7000122070312,1174.2332763671875)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="192" height="96" x="-96" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="144" height="48" x="-72" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$methodRpc = null;</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(72px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-72px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 444 1068 C 374 1068, 202 1092, 132 1092" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 444 1068 C 374 1068, 202 1092, 132 1092" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 444 1068 C 374 1068, 202 1092, 132 1092" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(444px, 1068px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1092px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect cl-green ta-2" style="transform: translate(132px, 972px);" transform="translate(-732.576171875,1036.8905029296875)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="336" height="96" x="-168" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="288" height="48" x="-144" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">if (!isset($_SESSION['page_url'])) {</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(144px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-144px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 924 C 132 939, 132 933, 132 948" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 924 C 132 939, 132 933, 132 948" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 924 C 132 939, 132 933, 132 948" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 924px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 948px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 996 C 132 1044, 132 1044, 132 1092" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 996 C 132 1044, 132 1044, 132 1092" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 996 C 132 1044, 132 1044, 132 1092" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 996px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1092px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack cl-green shrect ta-2" style="transform: translate(132px, 1188px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="1008" height="96" x="-504" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="960" height="48" x="-480" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">if ($_SERVER["REQUEST_METHOD"] === "POST" &amp;&amp; strpos($_SERVER["CONTENT_TYPE"] ?? "", "application/json") !== false) {</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(480px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-480px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1140 C 132 1155, 132 1149, 132 1164" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1140 C 132 1155, 132 1149, 132 1164" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1140 C 132 1155, 132 1149, 132 1164" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1140px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1164px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(684px, 1332px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="672" height="96" x="-336" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="624" height="48" x="-312" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$methodRpc = json_decode(file_get_contents("php://input"), true)["method"] ?? null;</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(312px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-312px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack shrect ta-2" style="transform: translate(684px, 1260px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="192" height="96" x="-96" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="144" height="48" x="-72" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">jsonrpcRequest();</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(72px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-72px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="hovertrack cl-green shrect ta-2" style="transform: translate(132px, 1404px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="768" height="96" x="-384" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="720" height="48" x="-360" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">if ($_SERVER['REQUEST_METHOD'] === 'POST' &amp;&amp; !empty($_POST['handleRequestAction'])) {</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(360px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-360px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1212 C 132 1282, 132 1310, 132 1380" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1212 C 132 1282, 132 1310, 132 1380" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1212 C 132 1282, 132 1310, 132 1380" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1212px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1380px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 612 1188 C 655.2666153055678 1188, 640.7333846944322 1236, 684 1236" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 612 1188 C 655.2666153055678 1188, 640.7333846944322 1236, 684 1236" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 612 1188 C 655.2666153055678 1188, 640.7333846944322 1236, 684 1236" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(612px, 1188px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(684px, 1236px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 684 1284 C 684 1299, 684 1293, 684 1308" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 684 1284 C 684 1299, 684 1293, 684 1308" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 684 1284 C 684 1299, 684 1293, 684 1308" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(684px, 1284px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(684px, 1308px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 276 972 C 346 972, 374 1020, 444 1020" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 276 972 C 346 972, 374 1020, 444 1020" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 276 972 C 346 972, 374 1020, 444 1020" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(276px, 972px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(444px, 1020px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 684 1356 C 614 1356, 202 1380, 132 1380" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 684 1356 C 614 1356, 202 1380, 132 1380" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 684 1356 C 614 1356, 202 1380, 132 1380" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(684px, 1356px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1380px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(684px, 1476px);" transform="translate(-590.2428588867188,1215.8905029296875)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="432" height="96" x="-216" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="384" height="48" x="-192" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">handleRequest($_POST['handleRequestAction']);</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(192px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-192px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 492 1404 C 562 1404, 614 1452, 684 1452" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 492 1404 C 562 1404, 614 1452, 684 1452" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 492 1404 C 562 1404, 614 1452, 684 1452" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(492px, 1404px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(684px, 1452px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 1548px);" transform="translate(-590.2428588867188,1231.8905029296875)">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="672" height="96" x="-336" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="624" height="48" x="-312" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">setcookie('Login', $_SESSION['Login'] === 'true' ? 'true' : 'false', time() + 2419200, "/");</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(312px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-312px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1428 C 132 1476, 132 1476, 132 1524" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1428 C 132 1476, 132 1476, 132 1524" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1428 C 132 1476, 132 1476, 132 1524" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1428px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1524px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 684 1500 C 614 1500, 202 1524, 132 1524" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 684 1500 C 614 1500, 202 1524, 132 1524" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 684 1500 C 614 1500, 202 1524, 132 1524" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(684px, 1500px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1524px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 1620px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="480" height="96" x="-240" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="432" height="48" x="-216" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">setcookie('User', $config['User'] ?? '', time() + 2419200, '/');</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(216px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-216px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1572 C 132 1587, 132 1581, 132 1596" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1572 C 132 1587, 132 1581, 132 1596" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1572 C 132 1587, 132 1581, 132 1596" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1572px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1596px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(132px, 1692px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="288" height="96" x="-144" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="240" height="48" x="-120" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">$allowed = ['loginUser', 'setLng'];</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(120px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-120px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1644 C 132 1659, 132 1653, 132 1668" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1644 C 132 1659, 132 1653, 132 1668" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1644 C 132 1659, 132 1653, 132 1668" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1644px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1668px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack cl-green shrect ta-2" style="transform: translate(132px, 1764px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="768" height="96" x="-384" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="720" height="48" x="-360" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="-0.5em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">if (($_POST['handleRequestAction'] &amp;&amp; !in_array($_POST['handleRequestAction'], $allowed)) ||</tspan><tspan x="0" dy="1em">    ($methodRpc &amp;&amp; !in_array($methodRpc, $allowed))) {</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(360px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-360px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 132 1716 C 132 1731, 132 1725, 132 1740" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 132 1716 C 132 1731, 132 1725, 132 1740" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 132 1716 C 132 1731, 132 1725, 132 1740" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(132px, 1716px) rotate(270deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(132px, 1740px) rotate(90deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g><g class="hovertrack shrect ta-2" style="transform: translate(612px, 1836px);">
<rect data-key="outer" data-evt-no="" data-evt-index="2" width="144" height="96" x="-72" y="-48" fill="transparent" stroke="transparent" stroke-width="0"/>
<rect data-key="main" width="96" height="48" x="-48" y="-24" rx="15" ry="15" fill="#1aaee5" stroke="#fff" stroke-width="1"/>
<text data-key="text" y="0em" x="0" style="pointer-events: none;" fill="#fff"><tspan x="0" dy="0.41em">exit;</tspan></text>
<circle data-key="right" data-connect="right" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(48px, 0px);"/>,<circle data-key="left" data-connect="left" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(-48px, 0px);"/>,<circle data-key="bottom" data-connect="bottom" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, 24px);"/>,<circle data-key="top" data-connect="top" class="hovertrack" data-evt-index="2" r="10" cx="0" cy="0" style="transform: translate(0px, -24px);"/></g><g class="shpath arw-e" style="pointer-events: unset;">
<path data-key="outer" d="M 492 1764 C 556.6219776856141 1764, 547.3780223143859 1812, 612 1812" stroke="transparent" stroke-width="20" fill="none"/>
<path data-key="path" class="path" d="M 492 1764 C 556.6219776856141 1764, 547.3780223143859 1812, 612 1812" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
<path data-key="selected" d="M 492 1764 C 556.6219776856141 1764, 547.3780223143859 1812, 612 1812" stroke="transparent" stroke-width="10" fill="none" style="pointer-events: none;"/>
<g data-key="start" style="transform: translate(492px, 1764px) rotate(180deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g>
<g data-key="end" style="transform: translate(612px, 1812px) rotate(0deg);">
<circle data-evt-index="1" class="path-end" r="10" stroke-width="0" fill="transparent"/>
<path class="path" d="M-7 7 l 7 -7 l -7 -7" stroke="#495057" stroke-width="1.8" fill="none" style="pointer-events: none;"/>
</g></g></g>
</svg>

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

210
index.php Normal file
View File

@@ -0,0 +1,210 @@
<?php
/**
* @file index.php
* @brief Главный входной файл сайта, инициализация сессий, подключение конфигов, загрузка страниц и формирование HTML.
*/
/** @brief Путь к текущей директории */
$path = dirname(__FILE__) . '/';
/* if(isset($_SESSION)) { file_put_contents($path . '/error.txt', "" . PHP_EOL, FILE_APPEND); }*/
session_start();
/** @brief Установка флага доступа для текущей сессии */
$_SESSION['access'] = true;
include_once $path . 'data/func.php';
includePluginsPhp();
SetConfig();
/** @brief Массив администраторов */
$configAdmins = adminsConfig();
/** @brief URI запроса, преобразованный в формат страницы */
$REQUEST_URI = $_SERVER['REQUEST_URI'] === '/' ? GetRequestURL('/index.html')['str'] : GetRequestURL($_SERVER['REQUEST_URI'])['str'];
/** @brief Текущий язык сайта */
$config['lng'] = SetLanguage();
/** @brief Результат функции URLstr для текущей страницы */
$ansv = URLstr($path . 'data/filepath.'.$config['lng'].'.php', $REQUEST_URI);
/** @brief URL текущей страницы */
$config['page_url'] = $ansv['FileURL'];
/** @brief Оригинальный URI запроса */
$config['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
if (!isset($_SESSION['page_url'])) {
$_SESSION['page_url'] = $config['page_url'];
}
$methodRpc = null;
if ($_SERVER["REQUEST_METHOD"] === "POST" && strpos($_SERVER["CONTENT_TYPE"] ?? "", "application/json") !== false) {
jsonrpcRequest();
$methodRpc = json_decode(file_get_contents("php://input"), true)["method"] ?? null;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['handleRequestAction'])) {
handleRequest($_POST['handleRequestAction']);
}
setcookie('Login', $_SESSION['Login'] === 'true' ? 'true' : 'false', time() + 2419200, "/");
/** @brief Разрешённые действия для очистки URL страницы из сессии */
$allowed = ['loginUser', 'setLng'];
if (($_POST['handleRequestAction'] && !in_array($_POST['handleRequestAction'], $allowed)) ||
($methodRpc && !in_array($methodRpc, $allowed))) {
exit;
}
if ($_POST['handleRequestAction'] || $methodRpc) {
unset($_SESSION['page_url']);
exit;
}
$config['server'] = 'http://'.$_SERVER['HTTP_HOST'].'/';
if ($_SERVER['REQUEST_URI']=='/')
$REQUESTxURI =GetRequestURL('/index.html');
else
$REQUESTxURI =GetRequestURL($_SERVER['REQUEST_URI']);
/** @brief URI текущей страницы */
$REQUEST_URI = $REQUESTxURI['str'];
/** @brief Путь к корневой директории */
$config['path'] = $path;
/** @brief Полный URL запроса */
$config['request_url'] = $REQUEST_URI;
/** @brief Шаблон страницы */
$config['template'] = $ansv['template'];
/** @brief Название сайта */
$config['sitename'] = $ansv['sitename'];
/** @brief Заголовок страницы */
$config['title'] = $ansv['title'];
/** @brief Sitemap или структура URL */
$config['smap'] = $ansv['URLLine'];
/** @brief Подключённые плагины для страницы */
$config['page_plugins'] = $ansv['page_plugins'];
/** @brief Меню выбора языка */
$config['LngMenu'] = LngMenu();
/* if ($REQUESTxURI['act']=='edit' && $REQUESTxURI['act']!=''){ echo $editXML->saveXML(); } else{ */
/** @brief Массив элементов меню страницы */
$menu = explode(',', $ansv['page']['PageMenu']);
/** @brief Верхнее меню сайта */
$config['TopMenu'] = GetXMLMenu($ansv['XML']->index, $REQUEST_URI, $menu[0], 'h');
/** @brief Боковое меню сайта */
$config['sideMenu'] = GetSideXMLMenu($ansv['XML']->index, $REQUEST_URI, $menu[0]);
/** @brief Основное меню сайта */
$config['SiteMenu'] = GetXMLMenu($ansv['XML']->index, $REQUEST_URI, $menu[1], 'h');
/* && $config['REQUEST_URI']=='/' */
if (empty($config['TopMenu'])) {
if ($_SESSION['Login'] == 'false') {
$_SESSION['formType'] = 'log_err';
} else {
$_SESSION['formType']= 'log_on';
}
}
if (is_file($path . $config['page_url'].".page.php")) {
$xmlstr = simplexml_load_file($path . $config['page_url'].".page.php");
} else {
error405(true, $config['encoding']);
}
/* $EditPage['url'] = $path .'content/scan/index.page.php'; $EditPage['page'] = simplexml_load_file($EditPage['url']); */
/** @brief Полное название сайта с текущей страницей */
$config['sitename'] .= ' > ' . $config['title'];
/** @brief CSS-класс заголовка контента */
$config['ctitle'] = $xmlstr->content['tclass'];
/** @brief CSS-класс блока контента */
$config['cfloat'] = $xmlstr->content['bclass'];
/** @brief Права доступа текущего пользователя к странице */
$access = FindPageUser($ansv['page']['users'], $_SESSION['username']);
if ($access) {
$config['left'] = GetBlock($xmlstr->lblock->block, 'left');
$config['left'] .= getNews($xmlstr->lblock->block, 'left');
$config['left'] = "<div id='left-float'>" . $config['left'] . "</div>";
$config['right'] = GetBlock($xmlstr->rblock->block, 'right');
$config['right'] .= getNews($xmlstr->rblock->block, "right");
$config['right'] = "<div id='right-float'>" . $config['right'] . "</div>";
$center = '<div class="center-float">' . GetBlock($xmlstr->cblock->block, 'center') . '<div>';
$config['content'] = $xmlstr->content->{$config['lng']};
} else {
if ($_SESSION['log_in']) {
$xmlstr = simplexml_load_file($path . 'content/adm/user.page.php');
} else {
$xmlstr = simplexml_load_file($path . 'content/adm/access.page.php');
}
$config['left'] = '';
$config['right'] = '';
$center = '<div class="center-float">' . GetBlock($xmlstr->cblock->block, 'center') . '<div>';
$config['content'] = $xmlstr->content->$config['lng'];
}
foreach ($config as $key=>$value) if ($key!="request_url")
$config['content'] =str_replace('%'.$key.'%', $value, $config['content']);
$config['content'] =str_replace('%center%', $center, $config['content']);
$config['home'] ='index.html';
if (isset($_SESSION['username'])) {
$config['User'] = $_SESSION['username'];
} else {
$config['User'] = 'Гость';
}
setcookie('User', $config['User'], time() + 2419200, '/');
$html .= '<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">';
$html .= file_get_contents($path . 'data/top.php');
$html .= file_get_contents($path . 'template/'.$config['template'].'/page.php');
/* $html .= file_get_contents($path . 'data/foot.php'); */
$html .= '<link rel="stylesheet" href="/data/fonts/fonts.css">';
$lang = include $path . 'data/lang.php';
$lng = $_SESSION['lng'] ?? 'en';
$Js = file_get_contents($path . 'data/Basic_functions.js');
foreach ($lang[$lng] as $key => $value) {
$Js = str_replace('{{' . $key . '}}', $value, $Js);
}
$html .= '<script>' . $Js . '</script>';
$html .= loadPluginsInCenterBlock();
$html .= includePlugin(['plugin' => 'siteSettings']);
$html .= includePlugin(['plugin' => 'auth']);
/* $html .= includePlugin(['plugin' => 'editor']); */
/* $html .= includePlugin(['plugin' => 'manager']); */
/* $html .= includePlugin(['plugin' => 'site_tree']); */
/* $html .= includePlugin(['plugin' => 'pickr']); */
$html .= '<div id="news-placeholder">'.getNews($xmlstr->rblock->block, "center").'</div>';
foreach ($config as $key=>$value)if ($key!="request_url")
$html =str_replace('%'.$key.'%', $value, $html);
header('Content-type: text/html; charset='. $config['encoding']);
echo $html;
/* var_dump($REQUEST_URI); echo password_hash("gena", PASSWORD_DEFAULT); //a004b486e740bb4580a04125975893b0 gettype( } */
?>

View File

@@ -0,0 +1,88 @@
#message {
color: rgb(255, 255, 255);
font-size: 3em;
text-align: center;
}
.sidebar {
display: flex;
flex-direction: column;
height: 80vh;
}
.sidebar__menu {
width: 100px;
float: left;
background-color: #f0f0f0;
box-sizing: border-box;
}
#main {
margin: 7px 10px 7px 110px;
background-color: #ffffff;
box-sizing: border-box;
}
.sidebar__title {
font-size: 1.5em;
text-align: center;
}
.sidebar__buttons {
font-size: 1.3em;
display: flex;
flex-direction: column;
}
.sidebar__button {
border: solid;
text-align: center;
padding: 5px;
margin: 5px;
border: 1px solid rgb(0, 0, 0);
}
.sidebar__shapes {
font-size: 1.3em;
margin-top: 0.5em;
display: flex;
flex-direction: column;
}
.sidebar__shape {
border: solid;
text-align: center;
padding: 5px;
margin: 5px;
border: 1px solid rgb(0, 0, 0);
}
.sidebar__selectors {
display: flex;
flex-direction: column;
margin-top: 0.5em;
font-size: 1.3em;
}
.sidebar__selector {
border: solid;
text-align: center;
padding: 5px;
margin: 5px;
border: 1px solid rgb(0, 0, 0);
}
.sidebar__selector.active {
background-color: #e4e4e4;
}
.sidebar__footer {
text-align: center;
margin-top: auto;
}
.main {
height: 600px;
}
.selection {
position: absolute;
display: none;
outline: rgb(153, 153, 255) solid 2px;
pointer-events: none;
left: 333.617px;
top: 55px;
width: 175.5px;
height: 175.5px;
}

View File

@@ -0,0 +1,762 @@
/**
* @file SvgEditorM.js
* @brief Основной файл SvgEditorM, реализует функционал редактирования SVG-графики на сайте
*/
/**
* @brief Базовый SVG-элемент
* @param width Ширина
* @param height Высота
* @param posX Позиция X
* @param posY Позиция Y
* @param id ID элемента
* @param type Тип SVG-элемента
*/
class SVGElement {
constructor({ width, height, posX, posY, id, type } = {}) {
this.width = width || 100;
this.height = height || 100;
this.posX = posX || 100;
this.posY = posY || 100;
this.id = id || `svgElement_${Date.now()}`;
this.type = type || 'svg';
this.domNode = this.createSVGDOMNode(this.type);
}
createSVGDOMNode(type) {
let { height, width, posY, posX, id } = this;
let svg = document.createElementNS('http://www.w3.org/2000/svg', type);
svg.setAttribute('style', 'border: 1px solid black; box-sizing: border-box;');
svg.setAttribute('id', id);
if (type !== 'svg') {
svg.setAttribute('x', posX);
svg.setAttribute('y', posY);
svg.setAttribute('width', width);
svg.setAttribute('height', height);
} else {
svg.setAttribute('width', width);
svg.setAttribute('height', height);
}
svg.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', 'http://www.w3.org/1999/xlink');
return svg;
}
}
/**
* @brief Класс для модификации SVG-элементов
*/
class SVGElementModifier {
static moveSelectedElement({ handler, event }) {
const { selected, selector, editor, offset } = handler;
const { clientX, clientY } = event;
if (selected) {
if (selected.tagName.toLowerCase() === 'circle') {
selected.setAttribute('cx', clientX + offset.x);
selected.setAttribute('cy', clientY + offset.y);
} else {
selected.setAttribute('x', clientX + offset.x);
selected.setAttribute('y', clientY + offset.y);
selector.updateSelection(selected, editor);
}
selector.updateSelection(selected);
}
}
static deselectElement({ handler }) {
handler.selected = null;
}
static toggelHoveredElement({ handler, target }) {
return handler.selector.updateSelection(target, handler.editor);
}
static selectElement({ handler, event }) {
let { target, clientX, clientY } = event;
const { selector, editor } = handler;
if (selector.isSelectable(target, editor)) {
handler.offset.x = parseFloat(target.getAttribute('x')) - clientX || 0;
handler.offset.y = parseFloat(target.getAttribute('y')) - clientY || 0;
handler.selected = target;
}
}
}
/**
* @brief Прямоугольник
* @param posX Позиция X
* @param posY Позиция Y
* @param width Ширина
* @param height Высота
* @param id ID элемента
*/
class Rect extends SVGElement {
constructor({ posX, posY, width, height, id } = {}) {
super({ type: 'rect', posX, posY, width, height, id });
this.domNode.setAttribute('width', width || 100);
this.domNode.setAttribute('height', height || 100);
this.domNode.setAttribute('x', posX || 100);
this.domNode.setAttribute('y', posY || 100);
this.domNode.setAttribute('fill', 'rgba(0,120,200,0.2)');
this.domNode.setAttribute('stroke', '#0078c8');
}
}
/**
* @brief Класс выбора фигур
* @param id ID селектора
*/
class ShapeSelector {
constructor(id) {
this.id = id;
this.selectorElem = document.getElementById(this.id);
}
isSelectable(element, area) {
if (!element) return false;
if (element.isSameNode(area)) return false;
const tag = element.tagName ? element.tagName.toLowerCase() : '';
return (tag === 'rect' || tag === 'circle' || tag === 'g' || tag === 'path' || tag === 'ellipse');
}
toggleSelectionOverElement(element) {
let bound = element.getBoundingClientRect();
const { style } = this.selectorElem;
style.left = bound.left + 'px';
style.top = bound.top + 'px';
style.width = bound.width + 'px';
style.height = bound.height + 'px';
style.display = 'block';
}
updateSelection(element, area) {
if (this.isSelectable(element, area)) {
return this.toggleSelectionOverElement(element);
}
return this.hideSelection();
}
hideSelection() {
if (this.selectorElem) this.selectorElem.style.display = 'none';
}
}
/**
* @brief Обработчик событий редактора
*/
class EditorEventHandler {
constructor() {
this.editor = null;
this.selector = null;
this.selected = null;
this.offset = { x: 0, y: 0 };
}
startListening({ editor, selector }) {
this.editor = editor;
this.selector = selector;
this.handleEditorEvents();
}
handleEditorEvents() {
this.handleElementsHover();
this.handleElementSelect();
this.handleMoveElement();
this.handleElementDeselect();
}
handleElementsHover() {
this.editor.addEventListener('mouseover', ({ target }) => {
SVGElementModifier.toggelHoveredElement({ handler: this, target });
});
}
handleElementSelect() {
this.editor.addEventListener('mousedown', event => {
SVGElementModifier.selectElement({ handler: this, event });
});
}
handleElementDeselect() {
this.editor.addEventListener('mouseup', event => {
SVGElementModifier.deselectElement({ handler: this });
});
}
handleMoveElement() {
this.editor.addEventListener('mousemove', event => {
SVGElementModifier.moveSelectedElement({ handler: this, event });
});
}
}
/**
* @brief Область для рисования
* @param options Параметры области
*/
class Area extends SVGElement {
constructor(options = {}) {
super({ type: 'svg', width: options.width || 800, height: options.height || 400, id: options.id || 'mySVG' });
this.domNode.style.border = '3px solid black';
}
appendElement(element) {
this.domNode.appendChild(element);
}
setDimentions() { }
}
/**
* @brief Редактор SVG
* @param targetNode Узел-цель
* @param playGround Игровая область
* @param eventHandler Обработчик событий
* @param selector Селектор фигур
*/
class Editor {
constructor({ targetNode, playGround, eventHandler, selector }) {
this.targetNode = targetNode;
this.playGround = playGround;
this.domNode = this.createEditor();
this.selector = selector;
this.svgElements = [];
this.EditorEventHandler = eventHandler;
this.EditorEventHandler.startListening({
editor: this.domNode,
selector: this.selector
});
}
setDimentions(node, width, height) {
node.style.width = '-webkit-fill-available';
node.style.height = '-webkit-fill-available';
return node;
}
createEditor() {
let editor = this.playGround.domNode;
const { width, height } = this.getEditorParams();
this.setDimentions(editor, width, height);
return editor;
}
getEditorParams() {
let width = Math.max(this.targetNode.offsetWidth - 10, 0);
let height = Math.max(this.targetNode.offsetHeight - 10, 0);
return { width, height };
}
addElement(element) {
if (!element || !element.domNode) return;
this.playGround.appendElement(element.domNode);
this.svgElements.push(element);
}
}
/* -----------------------------
Инициализация (выполняется после загрузки DOM)
----------------------------- */
window.addEventListener('DOMContentLoaded', () => {
let main = document.getElementById('main') || document.body;
let selection = document.getElementById('selector');
if (!selection) {
selection = document.createElement('div');
selection.id = 'selector';
Object.assign(selection.style, {
position: 'absolute',
display: 'none',
border: '1px dashed #333',
pointerEvents: 'none',
zIndex: 9999
});
document.body.appendChild(selection);
}
const area = new Area({ id: 'mySVG', width: 800, height: 400 });
main.appendChild(area.domNode);
const selector = new ShapeSelector('selector');
const editorEventHandler = new EditorEventHandler();
const editor = new Editor({
targetNode: main,
playGround: area,
selector,
eventHandler: editorEventHandler
});
const testRect = new Rect({ posX: 20, posY: 20, width: 120, height: 80, id: 'r1' });
const testRect2 = new Rect({ posX: 200, posY: 150, width: 140, height: 90, id: 'r2' });
editor.addElement(testRect);
editor.addElement(testRect2);
area.domNode.addEventListener('mouseover', (e) => {
const tgt = e.target;
selector.updateSelection(tgt, area.domNode);
});
window.addEventListener('resize', () => {
const { width, height } = editor.getEditorParams();
editor.setDimentions(area.domNode, width, height);
});
console.log('SVG Editor initialized', { area, editor, selector });
});
/* -----------------------------
edit
----------------------------- */
/** @brief Селектор основного контейнера */
const MAIN_SEL = "#main";
/** @brief ID элемента outline */
const OUTLINE_ID = "outline";
/** @brief Селектор боковой панели с фигурами */
const SIDEBAR_SHAPES = ".sidebar__shapes";
/** @brief Селектор боковой панели с режимами */
const SIDEBAR_SELECTORS = ".sidebar__selectors";
/** @brief Ключ для сохранения количества изменений */
const saveCountKey = 'SvgEditorM_saveCount';
/** @brief Основной контейнер DOM */
const main = document.querySelector(MAIN_SEL);
if (!main) throw new Error("Не найден #main");
/** @brief Массив svg элементов внутри main */
let svgsInMain = Array.from(main.querySelectorAll("svg"));
/** @brief Рабочий svg элемент */
let svg;
if (svgsInMain.length === 0) {
svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg.setAttribute("style", "border: 1px solid #ccc; box-sizing: border-box; width: -webkit-fill-available; height: -webkit-fill-available;");
svg.setAttribute("width", "1000");
svg.setAttribute("height", "600");
main.appendChild(svg);
} else {
// keep first svg, remove extras to avoid duplicates
svg = svgsInMain[0];
for (let i = 1; i < svgsInMain.length; i++) svgsInMain[i].remove();
}
/** @brief Создает и добавляет маркер стрелки к SVG */
(function ensureArrowMarker() {
let defs = svg.querySelector("defs");
if (!defs) {
defs = document.createElementNS("http://www.w3.org/2000/svg", "defs");
svg.appendChild(defs);
}
if (!svg.querySelector("#arrowhead")) {
const marker = document.createElementNS("http://www.w3.org/2000/svg", "marker");
marker.setAttribute("id", "arrowhead");
marker.setAttribute("markerWidth", "6");
marker.setAttribute("markerHeight", "4");
marker.setAttribute("refX", "4.8");
marker.setAttribute("refY", "2");
marker.setAttribute("orient", "auto");
const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
path.setAttribute("d", "M0,0 L6,2 L0,4 z");
path.setAttribute("fill", "#495057");
marker.appendChild(path);
defs.appendChild(marker);
}
})();
/** @brief Получает элемент outline из DOM */
const outline = document.getElementById(OUTLINE_ID);
/** @brief Счетчик для генерации уникальных ID */
let uid = 1;
/**
* @brief Генерирует уникальный идентификатор для элемента
* @param prefix префикс для ID
*/
function makeId(prefix = "el") { return `${prefix}_${Date.now().toString(36)}_${uid++}`; }
/**
* @brief Преобразует координаты из клиентских в координаты SVG
* @param clientX координата X в пикселях
* @param clientY координата Y в пикселях
*/
function clientToSvgPoint(clientX, clientY) {
const pt = svg.createSVGPoint();
pt.x = clientX; pt.y = clientY;
const ctm = svg.getScreenCTM();
if (!ctm) return { x: clientX, y: clientY };
const inv = ctm.inverse();
const p = pt.matrixTransform(inv);
return { x: p.x, y: p.y };
}
/**
* @brief Возвращает размеры и позицию элемента в координатах экрана
* @param el элемент SVG
*/
function screenBBoxOf(el) {
try {
const bbox = el.getBBox();
const p1 = svg.createSVGPoint(); p1.x = bbox.x; p1.y = bbox.y;
const p2 = svg.createSVGPoint(); p2.x = bbox.x + bbox.width; p2.y = bbox.y + bbox.height;
const s1 = p1.matrixTransform(svg.getScreenCTM());
const s2 = p2.matrixTransform(svg.getScreenCTM());
return {
left: Math.min(s1.x, s2.x),
top: Math.min(s1.y, s2.y),
width: Math.abs(s2.x - s1.x),
height: Math.abs(s2.y - s1.y)
};
} catch (e) {
const r = el.getBoundingClientRect();
return { left: r.left, top: r.top, width: r.width, height: r.height };
}
}
/**
* @brief Показывает или скрывает outline вокруг элемента
* @param el элемент SVG или null
*/
function showOutlineFor(el) {
if (!outline) return;
if (!el) { outline.style.display = "none"; return; }
const b = screenBBoxOf(el);
outline.style.display = "block";
outline.style.position = "fixed";
outline.style.left = `${b.left-2}px`;
outline.style.top = `${b.top-2}px`;
outline.style.width = `${b.width}px`;
outline.style.height = `${b.height}px`;
outline.style.border = "2px solid rgba(0,120,255,0.6)";
outline.style.pointerEvents = "none";
}
/** @brief Режим работы редактора */
let mode = "Move";
/** @brief Текущий выбранный элемент */
let currentSelected = null;
/** @brief Состояние перетаскивания элемента */
let dragState = null;
document.querySelectorAll(`${SIDEBAR_SHAPES} .sidebar__shape`).forEach(node => {
node.addEventListener("click", () => {
const shapeName = node.textContent.trim().toLowerCase();
createShape(shapeName);
});
});
document.querySelectorAll(`${SIDEBAR_SELECTORS} .sidebar__selector`).forEach(node => {
node.addEventListener("click", () => {
document.querySelectorAll(`${SIDEBAR_SELECTORS} .sidebar__selector`).forEach(n => n.classList.remove("active"));
node.classList.add("active");
mode = node.textContent.trim();
});
});
const defaultSel = document.querySelector(`${SIDEBAR_SELECTORS} .sidebar__selector`);
if (defaultSel) {
defaultSel.classList.add("active");
mode = defaultSel.textContent.trim();
}
/**
* @brief Создает фигуру указанного типа в центре SVG
* @param kind тип фигуры: rect, circle, line, arrow
*/
function createShape(kind) {
const center = { x: parseFloat(svg.getAttribute("width"))/2 || 200, y: parseFloat(svg.getAttribute("height"))/2 || 150 };
const id = makeId(kind);
let el = null;
if (kind === "rect") {
el = document.createElementNS("http://www.w3.org/2000/svg", "rect");
el.setAttribute("x", center.x - 50);
el.setAttribute("y", center.y - 25);
el.setAttribute("width", 100);
el.setAttribute("height", 50);
el.setAttribute("fill", "#1aaee5");
} else if (kind === "circle") {
el = document.createElementNS("http://www.w3.org/2000/svg", "circle");
el.setAttribute("cx", center.x);
el.setAttribute("cy", center.y);
el.setAttribute("r", 30);
el.setAttribute("fill", "#ff6600");
} else if (kind === "line") {
el = document.createElementNS("http://www.w3.org/2000/svg", "line");
el.setAttribute("x1", center.x - 60);
el.setAttribute("y1", center.y);
el.setAttribute("x2", center.x + 60);
el.setAttribute("y2", center.y);
el.setAttribute("stroke", "#495057");
el.setAttribute("stroke-width", 4);
} else if (kind === "arrow") {
el = document.createElementNS("http://www.w3.org/2000/svg", "line");
el.setAttribute("x1", center.x - 60);
el.setAttribute("y1", center.y - 10);
el.setAttribute("x2", center.x + 60);
el.setAttribute("y2", center.y + 10);
el.setAttribute("stroke", "#495057");
el.setAttribute("stroke-width", 4);
el.setAttribute("marker-end", "url(#arrowhead)");
} else {
alert("Unknown shape: " + kind);
return;
}
el.setAttribute("id", id);
el.classList.add("draggable");
svg.appendChild(el);
attachShapeListeners(el);
selectElement(el);
}
/**
* @brief Подключает обработчики событий для фигуры
* @param el элемент SVG
*/
function attachShapeListeners(el) {
el.addEventListener("mousedown", (ev) => {
ev.stopPropagation();
const startClient = { x: ev.clientX, y: ev.clientY };
const startSvg = clientToSvgPoint(ev.clientX, ev.clientY);
const startAttrs = readElementAttrs(el);
const action = mode === "Resize" ? "resize" : "move";
dragState = { type: action, el, startClient, startSvg, startAttrs };
selectElement(el);
window.addEventListener("mousemove", onWindowMouseMove);
window.addEventListener("mouseup", onWindowMouseUp);
});
el.addEventListener("click", (e) => { e.stopPropagation(); selectElement(el); });
}
/**
* @brief Считывает атрибуты элемента SVG
* @param el элемент SVG
*/
function readElementAttrs(el) {
const tag = el.tagName.toLowerCase();
if (tag === "rect") {
return {
x: parseFloat(el.getAttribute("x")||0),
y: parseFloat(el.getAttribute("y")||0),
width: parseFloat(el.getAttribute("width")||0),
height: parseFloat(el.getAttribute("height")||0)
};
} else if (tag === "circle") {
return {
cx: parseFloat(el.getAttribute("cx")||0),
cy: parseFloat(el.getAttribute("cy")||0),
r: parseFloat(el.getAttribute("r")||0)
};
} else if (tag === "line") {
return {
x1: parseFloat(el.getAttribute("x1")||0),
y1: parseFloat(el.getAttribute("y1")||0),
x2: parseFloat(el.getAttribute("x2")||0),
y2: parseFloat(el.getAttribute("y2")||0)
};
}
return {};
}
/**
* @brief Обрабатывает движение мыши при перетаскивании/изменении размера
* @param ev событие мыши
*/
function onWindowMouseMove(ev) {
if (!dragState) return;
const { type, el, startSvg, startAttrs } = dragState;
const curSvg = clientToSvgPoint(ev.clientX, ev.clientY);
const dx = curSvg.x - startSvg.x;
const dy = curSvg.y - startSvg.y;
const tag = el.tagName.toLowerCase();
if (type === "move") {
if (tag === "rect") {
el.setAttribute("x", startAttrs.x + dx);
el.setAttribute("y", startAttrs.y + dy);
} else if (tag === "circle") {
el.setAttribute("cx", startAttrs.cx + dx);
el.setAttribute("cy", startAttrs.cy + dy);
} else if (tag === "line") {
el.setAttribute("x1", startAttrs.x1 + dx);
el.setAttribute("y1", startAttrs.y1 + dy);
el.setAttribute("x2", startAttrs.x2 + dx);
el.setAttribute("y2", startAttrs.y2 + dy);
}
} else {
if (tag === "rect") {
const newW = Math.max(6, startAttrs.width + dx);
const newH = Math.max(6, startAttrs.height + dy);
el.setAttribute("width", newW);
el.setAttribute("height", newH);
} else if (tag === "circle") {
const center = { x: startAttrs.cx, y: startAttrs.cy };
const newR = Math.max(4, Math.hypot(curSvg.x - center.x, curSvg.y - center.y));
el.setAttribute("r", newR);
} else if (tag === "line") {
el.setAttribute("x2", startAttrs.x2 + dx);
el.setAttribute("y2", startAttrs.y2 + dy);
}
}
showOutlineFor(el);
}
/**
* @brief Обрабатывает отпускание кнопки мыши при перетаскивании/изменении размера
*/
function onWindowMouseUp() {
if (dragState) {
dragState = null;
window.removeEventListener("mousemove", onWindowMouseMove);
window.removeEventListener("mouseup", onWindowMouseUp);
}
}
svg.addEventListener("mousedown", (ev) => {
if (ev.target === svg) selectElement(null);
});
/**
* @brief Выбирает элемент или снимает выбор
* @param el элемент SVG или null
*/
function selectElement(el) {
if (currentSelected === el) return;
if (currentSelected) currentSelected.classList.remove("selected");
currentSelected = el;
if (el) {
el.classList.add("selected");
showOutlineFor(el);
} else {
showOutlineFor(null);
}
}
Array.from(svg.querySelectorAll(".draggable, rect, circle, line")).forEach(attachShapeListeners);
window.addEventListener("resize", () => showOutlineFor(currentSelected));
window.addEventListener("scroll", () => showOutlineFor(currentSelected));
window.addEventListener("keydown", (ev) => {
if ((ev.key === "Delete" || ev.key === "Backspace") && currentSelected) {
currentSelected.remove();
selectElement(null);
}
});
/** @brief Кнопки панели сайдбара */
const buttons = Array.from(document.querySelectorAll('.sidebar__button'));
/** @brief Кнопка сохранения */
const saveBtn = buttons.find(b => b.textContent.trim().toLowerCase() === 'save');
/** @brief Кнопка загрузки */
const loadBtn = buttons.find(b => b.textContent.trim().toLowerCase() === 'load');
/** @brief Генерирует следующее имя файла для сохранения */
function nextFilename() {
localStorage.setItem(saveCountKey, String((parseInt(localStorage.getItem(saveCountKey) || '0', 10) || 0) + 1));
const n = parseInt(localStorage.getItem(saveCountKey), 10) || 1;
return n === 1 ? 'SvgEditorM.svg' : `SvgEditorM-${n}.svg`;
}
/** @brief Возвращает SVG внутри main */
function getMainSvg() {
return main.querySelector('svg');
}
/**
* @brief Устанавливает атрибуты xmlns для элемента SVG, если их нет
* @param el элемент SVG
*/
function ensureXmlns(el) {
if (!el.getAttribute('xmlns')) el.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
if (!el.getAttribute('xmlns:xlink')) el.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
return el;
}
/** @brief Сохраняет SVG из main в файл */
function saveSvg() {
const svg = getMainSvg();
if (!svg) return;
const clone = svg.cloneNode(true);
ensureXmlns(clone);
const xml = new XMLSerializer().serializeToString(clone);
const blob = new Blob([xml], { type: 'image/svg+xml;charset=utf-8' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = nextFilename();
document.body.appendChild(a);
a.click();
a.remove();
setTimeout(() => URL.revokeObjectURL(url), 10000);
}
/** @brief Элемент input для загрузки файлов */
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = '.svg,image/svg+xml';
fileInput.style.display = 'none';
document.body.appendChild(fileInput);
/**
* @brief Делает узел и его потомков интерактивными
* @param node элемент SVG
*/
function makeInteractiveForNode(node) {
if (!(node instanceof Element)) return;
const tag = node.tagName.toLowerCase();
if (['rect','circle','line','path','polyline','polygon','g'].includes(tag)) {
if (!node.classList.contains('draggable')) node.classList.add('draggable');
if (typeof attachShapeListeners === 'function') {
attachShapeListeners(node);
}
}
Array.from(node.children || []).forEach(ch => makeInteractiveForNode(ch));
}
/**
* @brief Загружает SVG из файла в main
* @param file объект File
*/
async function loadSvgFile(file) {
if (!file) return;
const text = await file.text();
const parser = new DOMParser();
const doc = parser.parseFromString(text, 'image/svg+xml');
const parsedSvg = doc.querySelector('svg');
if (!parsedSvg) {
alert('Выбранный файл не содержит SVG');
return;
}
const targetSvg = getMainSvg();
if (!targetSvg) {
const imported = document.importNode(parsedSvg, true);
ensureXmlns(imported);
main.appendChild(imported);
Array.from(imported.querySelectorAll('*')).forEach(n => makeInteractiveForNode(n));
} else {
const preservedOutline = document.getElementById('outline');
while (targetSvg.firstChild) targetSvg.removeChild(targetSvg.firstChild);
Array.from(parsedSvg.childNodes).forEach(n => {
const imp = document.importNode(n, true);
targetSvg.appendChild(imp);
});
Array.from(parsedSvg.attributes).forEach(attr => {
if (attr.name === 'xmlns' || attr.name === 'xmlns:xlink') return;
targetSvg.setAttribute(attr.name, attr.value);
});
ensureXmlns(targetSvg);
Array.from(targetSvg.querySelectorAll('*')).forEach(n => makeInteractiveForNode(n));
if (preservedOutline && preservedOutline.parentElement !== document.body) {
}
}
main.dispatchEvent(new CustomEvent('svg-loaded', { detail: { fileName: file.name } }));
}
fileInput.addEventListener('change', () => {
const f = fileInput.files && fileInput.files[0];
loadSvgFile(f).finally(() => { fileInput.value = ''; });
});
if (saveBtn) saveBtn.addEventListener('click', (e) => { e.stopPropagation(); saveSvg(); });
if (loadBtn) loadBtn.addEventListener('click', (e) => { e.stopPropagation(); fileInput.click(); });

View File

@@ -0,0 +1,30 @@
<?php
/**
* @file SvgEditorM/index.php
* @brief Интерфейс SVG редактора: боковая панель с кнопками действий, фигурами и селекторами, основная область для работы с SVG
*/
?>
<?php /** @brief Основной контейнер SVG редактора */ $sidebar; ?>
<div id="sidebar" class="bfloat">
<div class="btitle" style="background-color: transparent; padding-bottom: 10px;">SVG редактор</div>
<div class="sidebar__menu">
<div class="sidebar__buttons">
<span class="sidebar__button">Save</span>
<span class="sidebar__button">Load</span>
</div>
<div class="sidebar__shapes">
<span class="sidebar__shape">Circle</span>
<span class="sidebar__shape">Rect</span>
<span class="sidebar__shape">Line</span>
<span class="sidebar__shape">Arrow</span>
</div>
<div class="sidebar__selectors">
<span class="sidebar__selector">Move</span>
<span class="sidebar__selector">Resize</span>
</div>
</div>
<div class="main" id="main">
<span class="selection" id="outline"></span>
</div>
</div>

View File

@@ -0,0 +1,25 @@
<?php
/**
* @file plug.php
* @brief Подключает плагин SvgEditorM для администраторов, перемещает sidebar и подгружает JS-модуль
*/
global $path, $_SESSION, $configAdmins;
if (in_array($_SESSION['username'], $configAdmins, true)) {
include $path . 'main_plugin/SvgEditorM/index.php';
echo '<link rel="stylesheet" type="text/css" href="/main_plugin/SvgEditorM/SvgEditorM.css">';
echo "<script type='module'>
document.addEventListener('DOMContentLoaded', () => {
const c = document.querySelector('.center-float');
const d = document.getElementById('sidebar');
if (c && d) {
c.appendChild(document.createElement('br'));
c.appendChild(d);
import('/main_plugin/SvgEditorM/SvgEditorM.js');
} else if (d) {
d.remove();
}
});
</script>";
}
?>

88
main_plugin/auth/auth.css Normal file
View File

@@ -0,0 +1,88 @@
#authorizationButton {
width: 26px;
height: 26px;
position: relative;
cursor: pointer;
user-select: none;
float: right;
margin-left: 5px;
}
#authorizationButton:hover {
background-image: url(../../img/pict/g_iconslyb.svg);
}
#loginButton {
margin: 0px 3px;
}
#authorizationDiv {
font-size: 0.85em;
display: inline-block;
position: fixed;
user-select: none;
background-color: rgba(255, 255, 255, 0.92);
width: 370px;
border-radius: 5px;
height: 230px;
box-shadow: 0px 0px 5px #777;
color: #000000;
text-shadow: none;
z-index: 100;
min-height: fit-content;
}
#authorizationDiv input, #authorizationDiv textarea, #authorizationDiv select, #authorizationDiv button {
font-size: 0.85em;
}
.authorizationDivTop {
text-align: center;
border: none;
border-bottom: inherit;
padding: 5px;
background-color: rgba(255, 255, 255, 0.6);
}
.authorizationDivCloseFun {
background-image: url(../../img/pict/b_iconslyb.svg);
float: right;
width: 22px;
height: 22px;
background-position: -159px -120px;
cursor: pointer;
}
.authorizationDivMainDiv {
display: flex;
align-items: center;
height: 200px;
justify-content: center;
flex-direction: column;
padding: 10px 0px;
}
.formRow {
display: flex;
justify-content: center;
width: -webkit-fill-available;
margin: 5px 45px;
}
.formRow label {
margin-right: 10px;
white-space: nowrap;
}
.formRow input {
flex: 1;
min-width: 0;
}
#BackArrow {
background-position: -77px -37px;
background-image: url(../../img/pict/b_iconslyb.svg);
width: 26px;
height: 26px;
position: absolute;
left: 0px;
top: 33px;
}
#BackArrow:hover {
background-image: url(../../img/pict/g_iconslyb.svg);
cursor: pointer;
}

161
main_plugin/auth/auth.js Normal file
View File

@@ -0,0 +1,161 @@
/**
* @file auth.js
* @brief Скрипт авторизации, содержит функции и переменные для входа, регистрации и управления блоком авторизации
*/
addEventListener("load", function() {
movementMenu("authorizationDiv");
let authorizationButtonId = document.getElementById("authorizationButton");
const authorizationDivId = document.getElementById("authorizationDiv");
if (getCookie('Login') == "true") {
authorizationButtonId.style.background = "url(../../img/pict/mc_iconslyb.svg) -1038px 1px";
document.documentElement.style.setProperty('--autButBackX', '-1038');
document.documentElement.style.setProperty('--autButBackY', '1');
authorizationButtonId.onclick = function() {
jsonrpcRequest("logoutUser", { logoff: "Выйти" })
.then(response => {
location.reload();
})
};
} else if (getCookie('Login') == "false") {
authorizationButtonId.style.background = "url(../../img/pict/mc_iconslyb.svg) -756px 1px";
document.documentElement.style.setProperty('--autButBackX', '-756');
document.documentElement.style.setProperty('--autButBackY', '1');
authorizationButtonId.onclick = function() {
const el = authorizationDivId;
if (el.style.visibility === "visible") {
el.style.visibility = "hidden";
} else {
el.style.visibility = "visible";
el.style.top = "20%";
el.style.left = "50%";
el.style.transform = "translate(-50%, -20%)";
}
};
}
});
/**
* @brief Закрывает блок авторизации
*/
function authorizationDivCloseFun() {
document.getElementById("authorizationDiv").style.visibility = "hidden";
}
/**
* @brief Создаёт форму кнопки входа
*/
function loginButtonFunCreate() {
document.querySelector(".authorizationDivMainDiv").innerHTML = `
<div id="BackArrow" onClick="mainButtonFunCreate()"></div>
<div class="formRow">
<label>{{login_label}}:</label>
<input type="text" id="loginInput" name="login">
</div>
<div class="formRow">
<label>{{password_label}}:</label>
<input type="password" id="passInput" name="pass" autocomplete="">
</div>
<div class="formRow">
<button type="button" id="loginButton" onClick="loginButtonFun()">{{login}}</button>
</div>
`;
const inputLogin = document.getElementById('loginInput');
const inputPass = document.getElementById('passInput');
const loginBtn = document.getElementById('loginButton');
[inputLogin, inputPass].forEach(input => {
input.addEventListener('keydown', function(e) {
if (e.key === 'Enter') {
if (loginBtn.getAttribute('onClick') === 'loginButtonFun()') {
loginBtn.click();
}
}
});
});
}
/**
* @brief Обрабатывает нажатие кнопки входа
*/
function loginButtonFun() {
var login = document.getElementById("loginInput").value;
var pass = document.getElementById("passInput").value;
jsonrpcRequest("loginUser", { login: login, pass: pass, log: "Войти" })
.then(response => {
if (response == "true") {
location.reload();
} else {
messageFunction("{{incorrect_login_password}}");
}
});
}
/**
* @brief Создаёт форму кнопки регистрации
*/
function registrationButtonFunCreate() {
document.querySelector(".authorizationDivMainDiv").innerHTML = `
<div id="BackArrow" onClick="mainButtonFunCreate()"></div>
<div class="formRow">
<label>{{login_label}}:</label>
<input type="text" id="loginInput" name="login">
</div>
<div class="formRow">
<label>{{password_label}}:</label>
<input type="text" id="passInput" name="pass">
</div>
<div class="formRow">
<label>{{repeat_password_label}}:</label>
<input type="text" id="passСheckInput" name="pass">
</div>
<div class="formRow">
<label>{{email_label}}:</label>
<input id="emailInput">
</div>
<div class="formRow">
<button type="button" id="loginButton" onClick="registrationButtonFun()">{{register}}</button>
</div>
`;
}
/**
* @brief Обрабатывает нажатие кнопки регистрации
*/
function registrationButtonFun() {
var login = document.getElementById("loginInput").value;
var pass = document.getElementById("passInput").value;
var passСheck = document.getElementById("passСheckInput").value;
var email = document.getElementById("emailInput").value;
if (login.trim() == "" || pass.trim() == "" || passСheck.trim() == "" || email.trim() == "" ) {
messageFunction("{{fill_all_fields}}");
return;
}
if (pass != passСheck) {
messageFunction("{{passwords_do_not_match}}");
return;
}
jsonrpcRequest("registerUser", { login: login, pass: pass, email: email }).then(response => {
if (response == "true") {
messageFunction("{{account_creation_request_sent}}");
} else if (response == "name_exists") {
messageFunction("{{user_exists}}");
} else {
messageFunction("{{account_creation_request_error}}");
}
});
}
/**
* @brief Создаёт главную форму выбора между входом и регистрацией
*/
function mainButtonFunCreate() {
document.querySelector(".authorizationDivMainDiv").innerHTML = `
<div class="formRow">{{account_authorization}}</div>
<div class="formRow">
<button type="button" id="loginButton" onClick="loginButtonFunCreate()">{{login}}</button>
<button type="button" id="loginButton" onClick="registrationButtonFunCreate()">{{register}}</button>
</div>
`;
}

43
main_plugin/auth/auth.php Normal file
View File

@@ -0,0 +1,43 @@
<?php
/**
* @file auth.php
* @brief Содержит интерфейс авторизации пользователя
*/
?>
<?php /** @brief Кнопка вызова окна авторизации */ $authorizationButton; ?>
<span id="authorizationButton"></span>
<?php /** @brief Основной контейнер окна авторизации */ $authorizationDiv; ?>
<div id="authorizationDiv" class="borderStyle" style="visibility: hidden; top: 20%; left: 50%; transform: translate(-50%, -20%);">
<div class="authorizationDivTop" class="borderStyle">
<span class="authorizationDivTopTitle">{{authorization}}</span>
<span class="authorizationDivCloseFun" onClick="authorizationDivCloseFun()" class="editib"></span>
</div>
<div class="authorizationDivMainDiv">
<div class="formRow">{{account_authorization}}</div>
<div class="formRow">
<button type="button" id="loginButton" onClick="loginButtonFunCreate()">{{login}}</button>
<button type="button" id="loginButton" onClick="registrationButtonFunCreate()">{{register}}</button>
</div>
</div>
</div>
<script>
window.addEventListener("load", function() {
try {
var buttonHTML = document.getElementById("authorizationButton").outerHTML;
var divHTML = document.getElementById("authorizationDiv").outerHTML;
document.getElementById("authorizationButton").remove();
document.getElementById("authorizationDiv").remove();
var container = document.getElementById("hbody");
if (!container) throw new Error("#hbody не найден для authorization");
container.insertAdjacentHTML("beforeend", buttonHTML);
container.insertAdjacentHTML("beforeend", divHTML);
} catch (e) {
console.error("Ошибка в блоке authorization:", e);
}
});
</script>

Some files were not shown because too many files have changed in this diff Show More