Ветка 07_11_25
13
404.shtml
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
87
data/createSite.page.php
Normal 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
@@ -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
@@ -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
@@ -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>
|
||||||
BIN
data/fonts/Lora/Lora-Bold.ttf
Normal file
BIN
data/fonts/Lora/Lora-Italic.ttf
Normal file
BIN
data/fonts/Lora/Lora-Regular.ttf
Normal file
BIN
data/fonts/Merriweather/Merriweather-Bold.ttf
Normal file
BIN
data/fonts/Merriweather/Merriweather-Italic.ttf
Normal file
BIN
data/fonts/Merriweather/Merriweather-Regular.ttf
Normal file
BIN
data/fonts/Montserrat/Montserrat-Bold.ttf
Normal file
BIN
data/fonts/Montserrat/Montserrat-Italic.ttf
Normal file
BIN
data/fonts/Montserrat/Montserrat-Regular.ttf
Normal file
BIN
data/fonts/OpenSans/OpenSans-Bold.ttf
Normal file
BIN
data/fonts/OpenSans/OpenSans-Italic.ttf
Normal file
BIN
data/fonts/OpenSans/OpenSans-Regular.ttf
Normal file
BIN
data/fonts/PT_Serif/PTSerif-Bold.ttf
Normal file
BIN
data/fonts/PT_Serif/PTSerif-Italic.ttf
Normal file
BIN
data/fonts/PT_Serif/PTSerif-Regular.ttf
Normal file
BIN
data/fonts/Playfair_Display/PlayfairDisplay-Bold.ttf
Normal file
BIN
data/fonts/Playfair_Display/PlayfairDisplay-Italic.ttf
Normal file
BIN
data/fonts/Playfair_Display/PlayfairDisplay-Regular.ttf
Normal file
BIN
data/fonts/Roboto/Roboto-Bold.ttf
Normal file
BIN
data/fonts/Roboto/Roboto-Italic.ttf
Normal file
BIN
data/fonts/Roboto/Roboto-Regular.ttf
Normal file
BIN
data/fonts/Source_Sans_3/SourceSans3-Bold.ttf
Normal file
BIN
data/fonts/Source_Sans_3/SourceSans3-Italic.ttf
Normal file
BIN
data/fonts/Source_Sans_3/SourceSans3-Regular.ttf
Normal file
153
data/fonts/fonts.css
Normal 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
@@ -0,0 +1,8 @@
|
|||||||
|
<div id="fclear">
|
||||||
|
</div>
|
||||||
|
<div id="footer">
|
||||||
|
Powered by uText CMS<br>
|
||||||
|
2013 © gugudze
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
43
data/footer.css.php
Normal 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
@@ -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
@@ -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;
|
||||||
7
data/request_on_users.php
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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>
|
||||||
17
img/Raspberry_Pi_Logo.svg
Normal 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
BIN
img/createSite/editor.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
img/createSite/manager.png
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
img/createSite/settings.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
img/createSite/siteTree.png
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
img/favicon.ico
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
img/gor.jpg
Normal file
|
After Width: | Height: | Size: 876 B |
BIN
img/hall.jpg
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
img/head.jpg
Normal file
|
After Width: | Height: | Size: 793 B |
BIN
img/img/backgr.jpg
Normal file
|
After Width: | Height: | Size: 309 B |
BIN
img/img/close.png
Normal file
|
After Width: | Height: | Size: 302 B |
BIN
img/img/net.jpg
Normal file
|
After Width: | Height: | Size: 302 B |
BIN
img/img/pla.jpg
Normal file
|
After Width: | Height: | Size: 287 KiB |
BIN
img/menu_1.jpg
Normal file
|
After Width: | Height: | Size: 733 B |
BIN
img/menu_2.jpg
Normal file
|
After Width: | Height: | Size: 701 B |
BIN
img/menu_3.jpg
Normal file
|
After Width: | Height: | Size: 627 B |
BIN
img/menu_4.jpg
Normal file
|
After Width: | Height: | Size: 678 B |
BIN
img/menu_5.jpg
Normal file
|
After Width: | Height: | Size: 691 B |
BIN
img/menu_6.jpg
Normal file
|
After Width: | Height: | Size: 678 B |
BIN
img/menu_7.jpg
Normal file
|
After Width: | Height: | Size: 648 B |
12320
img/pict/b_iconslyb.svg
Normal file
|
After Width: | Height: | Size: 738 KiB |
12326
img/pict/g_iconslyb.svg
Normal file
|
After Width: | Height: | Size: 738 KiB |
12103
img/pict/mc_iconslyb.svg
Normal file
|
After Width: | Height: | Size: 747 KiB |
12031
img/pict/w_iconslyb.svg
Normal file
|
After Width: | Height: | Size: 710 KiB |
BIN
img/rpi.gif
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
img/rpi.ico
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
img/rpi.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
267
img/rpi.svg
Normal 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&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
|
After Width: | Height: | Size: 446 KiB |
BIN
img/rpi2.jpg
Normal file
|
After Width: | Height: | Size: 425 KiB |
BIN
img/rpi3.jpg
Normal file
|
After Width: | Height: | Size: 451 KiB |
213
img/rpi_2.svg
Normal 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
|
After Width: | Height: | Size: 12 KiB |
BIN
img/rpi_logo.jpg
Normal file
|
After Width: | Height: | Size: 274 KiB |
BIN
img/test.jpg
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 146 KiB |
400
img/users_img/Admin/dgrm.svg
Normal 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" && 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' && !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'] && !in_array($_POST['handleRequestAction'], $allowed)) ||</tspan><tspan x="0" dy="1em"> ($methodRpc && !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 |
400
img/users_img/Admin/dgrm_1.svg
Normal 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" && 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' && !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'] && !in_array($_POST['handleRequestAction'], $allowed)) ||</tspan><tspan x="0" dy="1em"> ($methodRpc && !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 |
BIN
img/users_img/Admin/Рисунок.png
Normal file
|
After Width: | Height: | Size: 363 KiB |
BIN
img/users_img/Admin/Рисунок_1.png
Normal file
|
After Width: | Height: | Size: 363 KiB |
BIN
img/users_img/Admin/Рисунок_2.png
Normal file
|
After Width: | Height: | Size: 363 KiB |
BIN
img/users_img/Admin/Рисунок_3.png
Normal file
|
After Width: | Height: | Size: 363 KiB |
210
index.php
Normal 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( } */
|
||||||
|
?>
|
||||||
88
main_plugin/SvgEditorM/SvgEditorM.css
Normal 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;
|
||||||
|
}
|
||||||
762
main_plugin/SvgEditorM/SvgEditorM.js
Normal 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(); });
|
||||||
30
main_plugin/SvgEditorM/index.php
Normal 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>
|
||||||
25
main_plugin/SvgEditorM/plug.php
Normal 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
@@ -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
@@ -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
@@ -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>
|
||||||