ver.0.3
This commit is contained in:
		@@ -1,9 +1,20 @@
 | 
			
		||||
Билай;Станислав;Романович;2002-03-11;Мужчина;+7;9493761924;stasbilay02@yandex.ru
 | 
			
		||||
Иванова;Мария;Сергеевна;2002-04-05;Женжина;+38;2222222222;sdguhnlnoih@gmail.com
 | 
			
		||||
Иванов;Иван;Иванович;2002-03-11;Мужчина;+7;1111111111;dsjgbdskgb@yandex.ru
 | 
			
		||||
Плешкова;Анастасия;Денисовна;2006-11-10;Женжина;+7;3333333333;ple.anastasiya@gmail.com
 | 
			
		||||
Зайцева;Анжела;Игоревна;1998-12-12;Женжина;+7;4444444444;aksjfhfka@mail.ru
 | 
			
		||||
Петров;Петр;Петрович;1987-03-02;Мужчина;+7;7777777777;jksghhsdkj@gmail.com
 | 
			
		||||
Зайцев;Федор;Александрович;2014-12-22;Мужчина;+7;6667774441;asert@mail.ru
 | 
			
		||||
Иванов;Петр;Михайлович;2002-03-11;Мужчина;+7;1111111111;asert@mail.ru
 | 
			
		||||
Иванов;Роман;Сергеевич;2002-03-11;Мужчина;+7;1111111111;ple.anastasiya@gmail.com
 | 
			
		||||
last_id=19;table_name=user_info
 | 
			
		||||
id;surname;name;patronymic;dateOfBirth;gender;countryCode;phoneNumber;email;status
 | 
			
		||||
id;Фамилия;Имя;Отчество;Дата рождения;Пол;Код страны;Номер телефона;Email;Статус
 | 
			
		||||
3;Билай;Станислав;Романович;2002-03-11;Мужчина;+7;9493761924;stasbilay02@yandex.ru;0
 | 
			
		||||
4;Иванова;Мария;Сергеевна;2002-04-05;Женжина;+38;2222222222;sdguhnlnoih@gmail.com;1
 | 
			
		||||
5;Иванов;Иван;Иванович;2002-03-11;Мужчина;+7;1111111111;dsjgbdskgb@yandex.ru;1
 | 
			
		||||
6;Плешкова;Анастасия;Денисовна;2006-11-10;Женжина;+7;3333333333;ple.anastasiya@gmail.com;0
 | 
			
		||||
7;Зайцева;Анжела;Игоревна;1998-12-12;Женжина;+7;4444444444;aksjfhfka@mail.ru;0
 | 
			
		||||
8;Петров;Петр;Петрович;1987-03-02;Мужчина;+7;7777777777;jksghhsdkj@gmail.com;1
 | 
			
		||||
9;Зайцев;Федор;Александрович;2014-12-22;Мужчина;+7;6667774441;asert@mail.ru;1
 | 
			
		||||
10;Иванов;Петр;Михайлович;2002-03-11;Мужчина;+7;1111111111;asert@mail.ru;1
 | 
			
		||||
11;Иванов;Роман;Сергеевич;2002-03-11;Мужчина;+7;1111111111;ple.anastasiya@gmail.com;0
 | 
			
		||||
12;Билай;Станислав;Романович;4444-04-04;Мужчина;+7;9493761924;stasbilay02@yandex.ru;0
 | 
			
		||||
13;Билай;Станислав;Романович;4444-04-04;Мужчина;+7;9493761924;stasbilay02@yandex.ru;1
 | 
			
		||||
14;Билай;Станислав;Романович;4444-04-04;Мужчина;+7;9493761924;stasbilay02@yandex.ru;0
 | 
			
		||||
15;Билай;Станислав;Романович;4444-04-04;Мужчина;+7;9493761924;stasbilay02@yandex.ru;0
 | 
			
		||||
16;Билай;Станислав;Романович;4444-04-04;Женщина;+38;9493761924;stasbilay02@yandex.ru;1
 | 
			
		||||
17;Зайцева;Анжела;Игоревна;7777-07-07;Мужчина;+7;4444444444;aksjfhfka@mail.ru;1
 | 
			
		||||
18;Зайцева;Анжела;Игоревна;7777-07-07;Мужчина;+7;4444444444;aksjfhfka@mail.ru;1
 | 
			
		||||
19;Зайцева;Анжела;Игоревна;7777-07-07;Мужчина;+7;4444444444;aksjfhfka@mail.ru;1
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								Search.php
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Search.php
									
									
									
									
									
								
							@@ -1,10 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
function search(string $strForSearch, string $strFromFile): ?string
 | 
			
		||||
{
 | 
			
		||||
    if($strFromFile) {
 | 
			
		||||
        if (preg_match($strForSearch, $strFromFile))
 | 
			
		||||
            return $strFromFile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return null;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,2 +1,10 @@
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
    "require": {
 | 
			
		||||
        "itguild/tables": "^0.1.0"
 | 
			
		||||
    },
 | 
			
		||||
    "autoload": {
 | 
			
		||||
        "psr-4": {
 | 
			
		||||
            "src\\": "src"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								composer.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								composer.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
{
 | 
			
		||||
    "_readme": [
 | 
			
		||||
        "This file locks the dependencies of your project to a known state",
 | 
			
		||||
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
 | 
			
		||||
        "This file is @generated automatically"
 | 
			
		||||
    ],
 | 
			
		||||
    "content-hash": "fc8ab2b89b81d894996f3c1d3b16ea8e",
 | 
			
		||||
    "packages": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "itguild/tables",
 | 
			
		||||
            "version": "0.1",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://git.itguild.info/ItGuild/tables",
 | 
			
		||||
                "reference": "42ab26a3db1cef8319985fc3a0f5d23d2dff4e3b"
 | 
			
		||||
            },
 | 
			
		||||
            "type": "library",
 | 
			
		||||
            "autoload": {
 | 
			
		||||
                "psr-4": {
 | 
			
		||||
                    "Itguild\\Tables\\": "src/"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
            "license": [
 | 
			
		||||
                "MIT"
 | 
			
		||||
            ],
 | 
			
		||||
            "authors": [
 | 
			
		||||
                {
 | 
			
		||||
                    "name": "Kavalar",
 | 
			
		||||
                    "email": "apuc06@mail.ru"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "time": "2024-05-27T09:59:44+00:00"
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "packages-dev": [],
 | 
			
		||||
    "aliases": [],
 | 
			
		||||
    "minimum-stability": "stable",
 | 
			
		||||
    "stability-flags": [],
 | 
			
		||||
    "prefer-stable": false,
 | 
			
		||||
    "prefer-lowest": false,
 | 
			
		||||
    "platform": [],
 | 
			
		||||
    "platform-dev": [],
 | 
			
		||||
    "plugin-api-version": "2.2.0"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										37
									
								
								form.html
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								form.html
									
									
									
									
									
								
							@@ -1,37 +0,0 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="ru">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title>Form ФИО</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<!--<form action="info.php" target="_blank" method="post">
 | 
			
		||||
    Фамилия: <br>
 | 
			
		||||
    <input type = "text" name = "surname" required size="50" autofocus placeholder="Фамилия"> <br> <br>
 | 
			
		||||
    Имя: <br>
 | 
			
		||||
    <input type = "text" name = "name" required size="50" placeholder="Имя"> <br> <br>
 | 
			
		||||
    Отчество (если есть): <br>
 | 
			
		||||
    <input type = "text" name = "patronymic" size="50" placeholder="Отчество"> <br> <br>
 | 
			
		||||
 | 
			
		||||
    Дата Рождения: <br>
 | 
			
		||||
    <input type="date" name="dateOfBirth" required> <br> <br>
 | 
			
		||||
 | 
			
		||||
    Ваш пол: <br>
 | 
			
		||||
    <input type="radio" name="gender" value="Мужчина" checked> Мужчина
 | 
			
		||||
    <input type="radio" name="gender" value="Женжина"> Женжина<br> <br>
 | 
			
		||||
 | 
			
		||||
    Номер телефона (Например 1234567890): <br>
 | 
			
		||||
    <select name="countryCode">
 | 
			
		||||
        <option value="+7" >Russia +7</option>
 | 
			
		||||
        <option value="+38">Ukraine +38</option>
 | 
			
		||||
    </select>
 | 
			
		||||
    <input type="tel" name="phoneNumber" pattern="[0-9]{10}" maxlength="10" required placeholder="1234567890"> <br> <br>
 | 
			
		||||
 | 
			
		||||
    Email адрес: <br>
 | 
			
		||||
    <input type="Email" name="email" required> <br><br>
 | 
			
		||||
 | 
			
		||||
    <input type = "submit" value="Подтвердить">
 | 
			
		||||
    <input type="reset">
 | 
			
		||||
</form>-->
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										37
									
								
								form.php
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								form.php
									
									
									
									
									
								
							@@ -1,37 +0,0 @@
 | 
			
		||||
<?php $form = '<form action="info.php" target="_blank" method="post">
 | 
			
		||||
    Фамилия:<br>
 | 
			
		||||
    <input type = "text" name = "surname" required size="50" autofocus placeholder="Фамилия"> <br> <br>
 | 
			
		||||
    
 | 
			
		||||
    Имя:<br>
 | 
			
		||||
    <input type = "text" name = "name" required size="50" placeholder="Имя"> <br> <br>
 | 
			
		||||
    
 | 
			
		||||
    Отчество (если есть):<br>
 | 
			
		||||
    <input type = "text" name = "patronymic" size="50" placeholder="Отчество"> <br> <br>
 | 
			
		||||
 | 
			
		||||
    Дата Рождения: <br>
 | 
			
		||||
    <input type="date" name="dateOfBirth" required> <br> <br>
 | 
			
		||||
 | 
			
		||||
    Ваш пол: <br>
 | 
			
		||||
    <input type="radio" name="gender" value="Мужчина" checked> Мужчина
 | 
			
		||||
    <input type="radio" name="gender" value="Женжина"> Женжина<br> <br>
 | 
			
		||||
 | 
			
		||||
    Номер телефона (Например 1234567890): <br>
 | 
			
		||||
    <select name="countryCode">
 | 
			
		||||
        <option value="+7" >Russia +7</option>
 | 
			
		||||
        <option value="+38">Ukraine +38</option>
 | 
			
		||||
    </select>
 | 
			
		||||
    <input type="tel" name="phoneNumber" pattern="[0-9]{10}" maxlength="10" required placeholder="1234567890"> <br> <br>
 | 
			
		||||
 | 
			
		||||
    Email адрес: <br>
 | 
			
		||||
    <input type="Email" name="email" required> <br><br>
 | 
			
		||||
 | 
			
		||||
    <input type = "submit" value="Подтвердить">
 | 
			
		||||
    <input type="reset">
 | 
			
		||||
</form>';
 | 
			
		||||
    echo $form;
 | 
			
		||||
 | 
			
		||||
/*    $formSearch =
 | 
			
		||||
        '<form action="info.php" target="_blank" method="post">
 | 
			
		||||
        <input type="search" name="result_search"> <br> <br>
 | 
			
		||||
        <input type="submit" value="Поиск">
 | 
			
		||||
        </form>';*/
 | 
			
		||||
							
								
								
									
										46
									
								
								index.php
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								index.php
									
									
									
									
									
								
							@@ -1,42 +1,18 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
require_once "form.php";
 | 
			
		||||
//require_once "form.php";
 | 
			
		||||
 | 
			
		||||
namespace src;
 | 
			
		||||
 | 
			
		||||
//use src\Forms;
 | 
			
		||||
 | 
			
		||||
require_once "vendor/autoload.php";
 | 
			
		||||
 | 
			
		||||
require "views/form.php";
 | 
			
		||||
 | 
			
		||||
//require_once "src/Information.php";
 | 
			
		||||
//require_once "src/FullName.php";
 | 
			
		||||
//require_once "src/Contacts.php";
 | 
			
		||||
//require_once "src/AdditionallyInfo.php";
 | 
			
		||||
//require_once "info.php";
 | 
			
		||||
//require_once "table.php";
 | 
			
		||||
 | 
			
		||||
/*$flag = false;
 | 
			
		||||
 | 
			
		||||
$surname = $_REQUEST["surname"];
 | 
			
		||||
$name = $_REQUEST["name"];
 | 
			
		||||
$patronymic = $_REQUEST["patronymic"];
 | 
			
		||||
 | 
			
		||||
$fullName = new FullName($surname, $name, $patronymic);
 | 
			
		||||
$fullName = $fullName->getFoolName();
 | 
			
		||||
 | 
			
		||||
$gender = $_REQUEST["gender"];
 | 
			
		||||
$dateOfBirth = $_REQUEST["dateOfBirth"];
 | 
			
		||||
 | 
			
		||||
$additionallyInfo = new AdditionallyInfo($dateOfBirth, $gender);
 | 
			
		||||
$additionallyInfo = $additionallyInfo->getAdditionallyInfo();
 | 
			
		||||
 | 
			
		||||
$countryCode = $_REQUEST["countryCode"];
 | 
			
		||||
$phoneNumber = $_REQUEST["phoneNumber"];
 | 
			
		||||
$email = $_REQUEST["email"];
 | 
			
		||||
 | 
			
		||||
$contacts = new Contacts($countryCode, $phoneNumber, $email);
 | 
			
		||||
$contacts = $contacts->getContacts();
 | 
			
		||||
 | 
			
		||||
$fullInformation = new Information($fullName, $additionallyInfo, $contacts);
 | 
			
		||||
$fullInformation = $fullInformation->getFullInformation();
 | 
			
		||||
 | 
			
		||||
$flag = isFullInfo($fullName, $additionallyInfo, $contacts);
 | 
			
		||||
 | 
			
		||||
if($flag) {
 | 
			
		||||
    $file = fopen("Information.txt", "a");
 | 
			
		||||
    fwrite($file, $fullInformation);
 | 
			
		||||
    fclose($file);
 | 
			
		||||
} // if*/
 | 
			
		||||
//require_once "table.php";
 | 
			
		||||
							
								
								
									
										51
									
								
								info.php
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								info.php
									
									
									
									
									
								
							@@ -2,10 +2,12 @@
 | 
			
		||||
 | 
			
		||||
namespace src;
 | 
			
		||||
 | 
			
		||||
use Information;
 | 
			
		||||
use src\debug\Debug;
 | 
			
		||||
use src\file_db_driver\FileDatabaseDriver;
 | 
			
		||||
use src\Information;
 | 
			
		||||
use src\Forms;
 | 
			
		||||
 | 
			
		||||
require_once "src/Information.php";
 | 
			
		||||
/*require_once "Search.php";*/
 | 
			
		||||
require_once "vendor/autoload.php";
 | 
			
		||||
 | 
			
		||||
$fileName = "Information.txt";
 | 
			
		||||
$fileModeOpen = "a";
 | 
			
		||||
@@ -13,44 +15,11 @@ $fileModeOpen = "a";
 | 
			
		||||
$fullInformation = new Information();
 | 
			
		||||
$fullInformation->load($_REQUEST);
 | 
			
		||||
 | 
			
		||||
echo "<pre>";
 | 
			
		||||
print_r($fullInformation);
 | 
			
		||||
$string = $fullInformation->toString();
 | 
			
		||||
 | 
			
		||||
$file = fopen($fileName, $fileModeOpen);
 | 
			
		||||
fwrite($file, $string);
 | 
			
		||||
fclose($file);
 | 
			
		||||
$obj = new FileDatabaseDriver();
 | 
			
		||||
$obj->connect(__DIR__ . "/Information.txt");
 | 
			
		||||
$obj->save($string);
 | 
			
		||||
$obj->close();
 | 
			
		||||
 | 
			
		||||
$formSearch =
 | 
			
		||||
    '<form action="search_result.php" target="_blank" method="post">
 | 
			
		||||
        <input type="search" name="result_search"> <br> <br>
 | 
			
		||||
        <input type="submit" value="Поиск">
 | 
			
		||||
        </form>';
 | 
			
		||||
 | 
			
		||||
echo $formSearch;
 | 
			
		||||
 | 
			
		||||
/*$file = fopen($fileName, "r");
 | 
			
		||||
 | 
			
		||||
$arrKey = array('surname', 'name', 'patronymic', 'dateOfBirth', 'gender', 'countryCode', 'phoneNumber', 'email');
 | 
			
		||||
 | 
			
		||||
$parsingArray = array();
 | 
			
		||||
 | 
			
		||||
echo "<pre>";
 | 
			
		||||
print_r($_REQUEST);
 | 
			
		||||
 | 
			
		||||
$forSearch = $_REQUEST['result_search'];
 | 
			
		||||
 | 
			
		||||
while (!feof($file)) {
 | 
			
		||||
    $str = fgets($file);
 | 
			
		||||
    //if(search($str, '/\b(иванов)\b/ui')){
 | 
			
		||||
    if(search($str, $forSearch)){
 | 
			
		||||
        $array = array_combine($arrKey, explode(";", $str));
 | 
			
		||||
        $obj = new Information();
 | 
			
		||||
        $obj->load($array);
 | 
			
		||||
        $parsingArray[] = $obj;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
echo "<pre>";
 | 
			
		||||
print_r($parsingArray);*/
 | 
			
		||||
 | 
			
		||||
require "table.php";
 | 
			
		||||
require "views/search.php";
 | 
			
		||||
							
								
								
									
										17
									
								
								mySimple.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								mySimple.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
{
 | 
			
		||||
  "meta": {
 | 
			
		||||
    "title": "form 1",
 | 
			
		||||
    "columns": {
 | 
			
		||||
      "surname": "Фамилия",
 | 
			
		||||
      "name": "Имя",
 | 
			
		||||
      "patronymic":"Отчество",
 | 
			
		||||
      "dateOfBirth": "Дата рождения",
 | 
			
		||||
      "gender": "Пол",
 | 
			
		||||
      "countryCode": "Код страны",
 | 
			
		||||
      "phoneNumber": "Номер телефона",
 | 
			
		||||
      "email": "Email"
 | 
			
		||||
    },
 | 
			
		||||
    "params": {"class":  "table table-bordered", "border": "1"}
 | 
			
		||||
  },
 | 
			
		||||
  "data": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								search.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								search.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use src\debug\Debug;
 | 
			
		||||
use src\Information;
 | 
			
		||||
use src\Processing;
 | 
			
		||||
 | 
			
		||||
require_once "vendor/autoload.php";
 | 
			
		||||
 | 
			
		||||
$rep = new \src\file_db_driver\FileDatabaseDriver();
 | 
			
		||||
$rep->connect(__DIR__ . "/Information.txt");
 | 
			
		||||
 | 
			
		||||
$columnKeys = $rep->getHeadKeys();
 | 
			
		||||
$columnValues = $rep->getHeadValues();
 | 
			
		||||
 | 
			
		||||
$columns = array_combine($columnKeys, $columnValues);
 | 
			
		||||
 | 
			
		||||
//$res = $rep->find([$_REQUEST['key'] => $_REQUEST['result_search']])->limit(7)->all();
 | 
			
		||||
//$fooArr = [
 | 
			
		||||
//    'surname' => 'Билай',
 | 
			
		||||
//    'dateOfBirth' => '4444-04-04',
 | 
			
		||||
//    'status' => '1',
 | 
			
		||||
//    'gender' => 'Мужчина'
 | 
			
		||||
//];
 | 
			
		||||
//Debug::dd($_REQUEST);
 | 
			
		||||
$res = $rep->find($_REQUEST)->limit(10)->all();
 | 
			
		||||
 | 
			
		||||
$rep->close();
 | 
			
		||||
 | 
			
		||||
$infArr = [];
 | 
			
		||||
foreach ($res as $key){
 | 
			
		||||
    $inf = new Information();
 | 
			
		||||
    $inf->load($key);
 | 
			
		||||
    $infArr[] = $inf;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$json = new Processing();
 | 
			
		||||
$infArr = $json->createJsonArray($columns, $infArr, "form1");
 | 
			
		||||
 | 
			
		||||
$table = new \Itguild\Tables\ListJsonTable($infArr);
 | 
			
		||||
$table->create();
 | 
			
		||||
$table->render();
 | 
			
		||||
@@ -1,36 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
namespace src;
 | 
			
		||||
 | 
			
		||||
use Information;
 | 
			
		||||
 | 
			
		||||
require_once "src/Information.php";
 | 
			
		||||
require_once "Search.php";
 | 
			
		||||
 | 
			
		||||
$fileName = "Information.txt";
 | 
			
		||||
 | 
			
		||||
$file = fopen($fileName, "r");
 | 
			
		||||
 | 
			
		||||
$arrKey = array('surname', 'name', 'patronymic', 'dateOfBirth', 'gender', 'countryCode', 'phoneNumber', 'email');
 | 
			
		||||
 | 
			
		||||
$parsingArray = array();
 | 
			
		||||
 | 
			
		||||
echo "<pre>";
 | 
			
		||||
print_r($_REQUEST);
 | 
			
		||||
 | 
			
		||||
$forSearch = '/\b(' . $_REQUEST['result_search'] . ')\b/ui';
 | 
			
		||||
 | 
			
		||||
while (!feof($file)) {
 | 
			
		||||
    $str = fgets($file);
 | 
			
		||||
    if(search($forSearch, $str)){
 | 
			
		||||
    //if(search($str, $forSearch)){
 | 
			
		||||
        $array = array_combine($arrKey, explode(";", $str));
 | 
			
		||||
/*        echo "<pre>";
 | 
			
		||||
        print_r($array);*/
 | 
			
		||||
        $obj = new Information();
 | 
			
		||||
        $obj->load($array);
 | 
			
		||||
        $parsingArray[] = $obj;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
echo "<pre>";
 | 
			
		||||
print_r($parsingArray);
 | 
			
		||||
							
								
								
									
										71
									
								
								src/Forms.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/Forms.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
<?php
 | 
			
		||||
//
 | 
			
		||||
//namespace src;
 | 
			
		||||
//
 | 
			
		||||
//class Forms
 | 
			
		||||
//{
 | 
			
		||||
//    public string $infoForm;
 | 
			
		||||
//    public string $forSearchForm;
 | 
			
		||||
//
 | 
			
		||||
//    public function __construct()
 | 
			
		||||
//    {
 | 
			
		||||
//        $this->infoForm = '
 | 
			
		||||
//        <form action="../info.php" target="_blank" method="post">
 | 
			
		||||
//            Фамилия:<br>
 | 
			
		||||
//            <input type = "text" name = "surname" required size="50" autofocus placeholder="Фамилия"> <br> <br>
 | 
			
		||||
//
 | 
			
		||||
//            Имя:<br>
 | 
			
		||||
//            <input type = "text" name = "name" required size="50" placeholder="Имя"> <br> <br>
 | 
			
		||||
//
 | 
			
		||||
//            Отчество (если есть):<br>
 | 
			
		||||
//            <input type = "text" name = "patronymic" size="50" placeholder="Отчество"> <br> <br>
 | 
			
		||||
//
 | 
			
		||||
//            Дата Рождения: <br>
 | 
			
		||||
//            <input type="date" name="dateOfBirth" required> <br> <br>
 | 
			
		||||
//
 | 
			
		||||
//            Ваш пол: <br>
 | 
			
		||||
//            <input type="radio" name="gender" value="Мужчина" checked> Мужчина
 | 
			
		||||
//            <input type="radio" name="gender" value="Женжина"> Женжина<br> <br>
 | 
			
		||||
//
 | 
			
		||||
//            Номер телефона (Например 1234567890): <br>
 | 
			
		||||
//            <select name="countryCode">
 | 
			
		||||
//                <option value="+7" >Russia +7</option>
 | 
			
		||||
//                <option value="+38">Ukraine +38</option>
 | 
			
		||||
//            </select>
 | 
			
		||||
//            <input type="tel" name="phoneNumber" pattern="[0-9]{10}" maxlength="10" required placeholder="1234567890"> <br> <br>
 | 
			
		||||
//
 | 
			
		||||
//            Email адрес: <br>
 | 
			
		||||
//            <input type="Email" name="email" required> <br><br>
 | 
			
		||||
//
 | 
			
		||||
//            <input type = "submit" value="Подтвердить">
 | 
			
		||||
//            <input type="reset">
 | 
			
		||||
//        </form>';
 | 
			
		||||
//
 | 
			
		||||
//        $this->forSearchForm = '
 | 
			
		||||
//        <form action="../search.php" target="_blank" method="post">
 | 
			
		||||
//        <input type="search" placeholder="Поиск" name="result_search"> <br> <br>
 | 
			
		||||
//        Среди чего найти? <br>
 | 
			
		||||
//        <select name="key">
 | 
			
		||||
//            <option value="surname">Фамилия</option>
 | 
			
		||||
//            <option value="name">Имя</option>
 | 
			
		||||
//            <option value="patronymic">Отчество</option>
 | 
			
		||||
//            <option value="dateOfBirth">Дата рождения</option>
 | 
			
		||||
//            <option value="gender">Пол</option>
 | 
			
		||||
//            <option value="countryCode">Код страны</option>
 | 
			
		||||
//            <option value="phoneNumber">Номер телефона</option>
 | 
			
		||||
//            <option value="email">Email</option>
 | 
			
		||||
//        </select>       <br><br>
 | 
			
		||||
//        <input type="submit" value="Поиск">
 | 
			
		||||
//        </form>';
 | 
			
		||||
//    }
 | 
			
		||||
//
 | 
			
		||||
//    public function getInfoForm(): string
 | 
			
		||||
//    {
 | 
			
		||||
//        return $this->infoForm;
 | 
			
		||||
//    }
 | 
			
		||||
//
 | 
			
		||||
//    public function getForSearchForm(): string
 | 
			
		||||
//    {
 | 
			
		||||
//        return $this->forSearchForm;
 | 
			
		||||
//    }
 | 
			
		||||
//}
 | 
			
		||||
@@ -1,6 +1,11 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace src;
 | 
			
		||||
 | 
			
		||||
use src\dto\BaseDTO;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @property int $id
 | 
			
		||||
 * @property string $surname
 | 
			
		||||
 * @property string $name
 | 
			
		||||
 * @property string $patronymic
 | 
			
		||||
@@ -10,8 +15,9 @@
 | 
			
		||||
 * @property string $phoneNumber
 | 
			
		||||
 * @property string $email
 | 
			
		||||
 */
 | 
			
		||||
class Information
 | 
			
		||||
class Information extends BaseDTO
 | 
			
		||||
{
 | 
			
		||||
    public int $id;
 | 
			
		||||
    public string $surname;
 | 
			
		||||
    public string $name;
 | 
			
		||||
    public string $patronymic;
 | 
			
		||||
@@ -20,51 +26,22 @@ class Information
 | 
			
		||||
    public string $countryCode;
 | 
			
		||||
    public string $phoneNumber;
 | 
			
		||||
    public string $email;
 | 
			
		||||
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array $dataArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function load(array $dataArray): void
 | 
			
		||||
    public function fillable(): array
 | 
			
		||||
    {
 | 
			
		||||
        if ($dataArray) {
 | 
			
		||||
            $this->surname = $dataArray['surname'] ?? '';
 | 
			
		||||
            $this->name = $dataArray['name'] ?? '';
 | 
			
		||||
            $this->patronymic = $dataArray['patronymic'] ?? '';
 | 
			
		||||
            $this->dateOfBirth = $dataArray['dateOfBirth'] ?? '';
 | 
			
		||||
            $this->gender = $dataArray['gender'] ?? '';
 | 
			
		||||
            $this->countryCode = $dataArray['countryCode'] ?? '';
 | 
			
		||||
            $this->phoneNumber = $dataArray['phoneNumber'] ?? '';
 | 
			
		||||
            $this->email = $dataArray['email'] ?? '';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $key
 | 
			
		||||
     * @return string|null
 | 
			
		||||
     */
 | 
			
		||||
    public function getByKey(string $key): ?string
 | 
			
		||||
    {
 | 
			
		||||
        if (isset($this->{$key})) {
 | 
			
		||||
            return $this->{$key};
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public function toString(): string
 | 
			
		||||
    {
 | 
			
		||||
        return $this->surname . ';' . $this->name . ';' . $this->patronymic . ';' . $this->dateOfBirth . ';' .
 | 
			
		||||
            $this->gender . ';' . $this->countryCode . ';' . $this->phoneNumber . ';' . $this->email . "\n";
 | 
			
		||||
//        return [
 | 
			
		||||
//            'surname', 'name', 'patronymic', 'dateOfBirth', 'gender', 'countryCode', 'phoneNumber', 'email'
 | 
			
		||||
//        ];
 | 
			
		||||
        return [
 | 
			
		||||
            $this->surname, $this->name, $this->patronymic, $this->dateOfBirth, $this->gender, $this->countryCode, $this->phoneNumber, $this->email, "\n"
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								src/Processing.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/Processing.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace src;
 | 
			
		||||
 | 
			
		||||
class Processing
 | 
			
		||||
{
 | 
			
		||||
    public array $informationArray;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array $columns
 | 
			
		||||
     * @param array $data
 | 
			
		||||
     * @return string|null
 | 
			
		||||
     */
 | 
			
		||||
    public function createJsonArray(array $columns, array $data, string $title): ?string
 | 
			
		||||
    {
 | 
			
		||||
        if($columns && $data) {
 | 
			
		||||
            $this->informationArray = [
 | 
			
		||||
                "meta" => [
 | 
			
		||||
                    "title" => $title,
 | 
			
		||||
                    "columns" => $columns,
 | 
			
		||||
                    "params" =>
 | 
			
		||||
                        [
 | 
			
		||||
                            "class" => "table table-bordered",
 | 
			
		||||
                            "border" => "1"
 | 
			
		||||
                        ]
 | 
			
		||||
                ],
 | 
			
		||||
                "data" => $data
 | 
			
		||||
            ];
 | 
			
		||||
            return $this->toJson($this->informationArray);
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array $infArr
 | 
			
		||||
     * @return string|null
 | 
			
		||||
     */
 | 
			
		||||
    protected function toJson(array $infArr): ?string
 | 
			
		||||
    {
 | 
			
		||||
        if($infArr)
 | 
			
		||||
            return json_encode($infArr,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										8
									
								
								src/collections/BaseCollection.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/collections/BaseCollection.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace src\collections;
 | 
			
		||||
 | 
			
		||||
class BaseCollection
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								src/collections/InformationCollection.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/collections/InformationCollection.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace src\collections;
 | 
			
		||||
 | 
			
		||||
class InformationCollection
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public array $itemArr = [];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								src/debug/Debug.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/debug/Debug.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace src\debug;
 | 
			
		||||
 | 
			
		||||
class Debug
 | 
			
		||||
{
 | 
			
		||||
    public static function prn($content)
 | 
			
		||||
    {
 | 
			
		||||
        echo '<pre style="background: lightgray; border: 1px solid black; padding: 2px">';
 | 
			
		||||
        print_r($content);
 | 
			
		||||
        echo '</pre>';
 | 
			
		||||
    }
 | 
			
		||||
    public static function dd($content)
 | 
			
		||||
    {
 | 
			
		||||
        echo '<pre style="background: lightgray; border: 1px solid black; padding: 2px">';
 | 
			
		||||
        print_r($content);
 | 
			
		||||
        echo '</pre>';
 | 
			
		||||
        die();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								src/dto/BaseDTO.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/dto/BaseDTO.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace src\dto;
 | 
			
		||||
 | 
			
		||||
class BaseDTO
 | 
			
		||||
{
 | 
			
		||||
    public int $id;
 | 
			
		||||
 | 
			
		||||
    public function fillable(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function load(array $array): void
 | 
			
		||||
    {
 | 
			
		||||
        if (is_array($array)) {
 | 
			
		||||
            foreach ($array as $key => $value) {
 | 
			
		||||
                $this->{$key} = $value;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function toString(): string
 | 
			
		||||
    {
 | 
			
		||||
        return implode(";", $this->fillable());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $key
 | 
			
		||||
     * @return string|null
 | 
			
		||||
     */
 | 
			
		||||
    public function getByKey(string $key): ?string
 | 
			
		||||
    {
 | 
			
		||||
        if (isset($this->{$key})) {
 | 
			
		||||
            return $this->{$key};
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										164
									
								
								src/file_db_driver/FileDatabaseDriver.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								src/file_db_driver/FileDatabaseDriver.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace src\file_db_driver;
 | 
			
		||||
 | 
			
		||||
use src\debug\Debug;
 | 
			
		||||
 | 
			
		||||
class FileDatabaseDriver
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public string $filePath;
 | 
			
		||||
    public $file;
 | 
			
		||||
    public array $headKeys = [];
 | 
			
		||||
    public array $headValues = [];
 | 
			
		||||
 | 
			
		||||
    private array $resArr = [];
 | 
			
		||||
    private array $query = [];
 | 
			
		||||
    private int $limitInt = 10;
 | 
			
		||||
 | 
			
		||||
    public array $serviceInfo = [];
 | 
			
		||||
 | 
			
		||||
    public function connect(string $filePath): bool
 | 
			
		||||
    {
 | 
			
		||||
        $this->filePath = $filePath;
 | 
			
		||||
        if (file_exists($this->filePath)) {
 | 
			
		||||
            $this->file = fopen($this->filePath, "a+");
 | 
			
		||||
            if ($this->file) {
 | 
			
		||||
                $this->getServiceInfo();
 | 
			
		||||
                $this->setHeadKeys();
 | 
			
		||||
                $this->setHeadValues();
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getServiceInfo(): void
 | 
			
		||||
    {
 | 
			
		||||
        $serviceInfo = explode(';', fgets($this->file));
 | 
			
		||||
        foreach ($serviceInfo as $item){
 | 
			
		||||
            $item = str_replace("\n", "", $item);
 | 
			
		||||
            $item = str_replace("\r", "", $item);
 | 
			
		||||
            $itemArr = explode("=", $item);
 | 
			
		||||
            $this->serviceInfo[$itemArr[0]] = $itemArr[1];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setHeadKeys(): void
 | 
			
		||||
    {
 | 
			
		||||
        $headArr = explode(';', fgets($this->file));
 | 
			
		||||
        foreach ($headArr as $item){
 | 
			
		||||
            $item = str_replace("\n", "", $item);
 | 
			
		||||
            $item = str_replace("\r", "", $item);
 | 
			
		||||
            $this->headKeys[] = $item;
 | 
			
		||||
        }
 | 
			
		||||
//        $this->head = explode(';', fgets($this->file));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getHeadKeys(): array
 | 
			
		||||
    {
 | 
			
		||||
        return $this->headKeys;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setHeadValues(): void
 | 
			
		||||
    {
 | 
			
		||||
        $headArr = explode(';', fgets($this->file));
 | 
			
		||||
        foreach ($headArr as $item){
 | 
			
		||||
            $item = str_replace("\n", "", $item);
 | 
			
		||||
            $item = str_replace("\r", "", $item);
 | 
			
		||||
            $this->headValues[] = $item;
 | 
			
		||||
        }
 | 
			
		||||
//        $this->head = explode(';', fgets($this->file));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getHeadValues(): array
 | 
			
		||||
    {
 | 
			
		||||
        return $this->headValues;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function find(array $query): self
 | 
			
		||||
    {
 | 
			
		||||
        $j = 0;
 | 
			
		||||
        foreach ($query as $key => $value) {
 | 
			
		||||
            if(strlen($value) > 0) {
 | 
			
		||||
                $this->query['column'][$j] = $key;
 | 
			
		||||
                $this->query['value'][$j] = $value;
 | 
			
		||||
                $j++;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function limit(int $limit): self
 | 
			
		||||
    {
 | 
			
		||||
        $this->limitInt = $limit;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function search(): array
 | 
			
		||||
    {
 | 
			
		||||
        $resArr = [];
 | 
			
		||||
        $i = 1;
 | 
			
		||||
        while (!feof($this->file)) {
 | 
			
		||||
            if ($i > $this->limitInt){
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            $str = fgets($this->file);
 | 
			
		||||
            if (!empty($str)){
 | 
			
		||||
                $str = str_replace("\n", "", $str);
 | 
			
		||||
                $str = str_replace("\r", "", $str);
 | 
			
		||||
 | 
			
		||||
                $item = explode(";", $str);
 | 
			
		||||
                $item = array_combine($this->headKeys, $item);
 | 
			
		||||
 | 
			
		||||
                $cnt = count($this->query['column']);
 | 
			
		||||
                for ($j = 0; $j < $cnt; $j++) {
 | 
			
		||||
                    if (strlen($this->searchInStr($this->query['value'][$j], $item, $this->query['column'][$j])) > 0) {
 | 
			
		||||
                        $flag = true;
 | 
			
		||||
                    } else {
 | 
			
		||||
                        $flag = false;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if ($flag){
 | 
			
		||||
                    $resArr[] = $item;
 | 
			
		||||
                    $i++;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $resArr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function searchInStr(string $strForSearch, array $item, string $column): ?string
 | 
			
		||||
    {
 | 
			
		||||
        if (isset($item[$column])) {
 | 
			
		||||
            if (preg_match("/" . $strForSearch . "/", $item[$column])) {
 | 
			
		||||
                return $item[$column];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function all(): array
 | 
			
		||||
    {
 | 
			
		||||
        $this->resArr = $this->search();
 | 
			
		||||
        return $this->resArr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function close(): void
 | 
			
		||||
    {
 | 
			
		||||
        fclose($this->file);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function save(string $string): void
 | 
			
		||||
    {
 | 
			
		||||
//        $file = fopen($fileName, "a");
 | 
			
		||||
        fwrite($this->file, $string);
 | 
			
		||||
//        fclose($file);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
    <?php
 | 
			
		||||
        $file = fopen("Information.txt", "r");
 | 
			
		||||
        function PrintStringOfTable($file)
 | 
			
		||||
        function PrintStringOfTable($file): void
 | 
			
		||||
        {
 | 
			
		||||
            $buf = fgets($file, filesize("Information.txt")); ?>
 | 
			
		||||
            <tr>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								table2.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								table2.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use src\debug\Debug;
 | 
			
		||||
 | 
			
		||||
require_once "vendor/autoload.php";
 | 
			
		||||
 | 
			
		||||
$json = file_get_contents(__DIR__ . '/vendor/itguild/tables/simple.json');
 | 
			
		||||
 | 
			
		||||
$json2 = file_get_contents(__DIR__ . '/mySimple.json');
 | 
			
		||||
 | 
			
		||||
$table = new \Itguild\Tables\ListJsonTable($json);
 | 
			
		||||
$table2 = new \Itguild\Tables\ListJsonTable($json2);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$table->create();
 | 
			
		||||
$table->render();
 | 
			
		||||
 | 
			
		||||
$table2->create();
 | 
			
		||||
$table2->render();
 | 
			
		||||
//$table->beginTable();
 | 
			
		||||
 | 
			
		||||
/*echo "<pre>";
 | 
			
		||||
print_r($table);*/
 | 
			
		||||
							
								
								
									
										7
									
								
								vendor/autoload.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								vendor/autoload.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
require_once __DIR__ . '/composer/autoload_real.php';
 | 
			
		||||
 | 
			
		||||
return ComposerAutoloaderInit5983c395e598dae0283c3b233c3f9cc1::getLoader();
 | 
			
		||||
							
								
								
									
										572
									
								
								vendor/composer/ClassLoader.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										572
									
								
								vendor/composer/ClassLoader.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,572 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of Composer.
 | 
			
		||||
 *
 | 
			
		||||
 * (c) Nils Adermann <naderman@naderman.de>
 | 
			
		||||
 *     Jordi Boggiano <j.boggiano@seld.be>
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace Composer\Autoload;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
 | 
			
		||||
 *
 | 
			
		||||
 *     $loader = new \Composer\Autoload\ClassLoader();
 | 
			
		||||
 *
 | 
			
		||||
 *     // register classes with namespaces
 | 
			
		||||
 *     $loader->add('Symfony\Component', __DIR__.'/component');
 | 
			
		||||
 *     $loader->add('Symfony',           __DIR__.'/framework');
 | 
			
		||||
 *
 | 
			
		||||
 *     // activate the autoloader
 | 
			
		||||
 *     $loader->register();
 | 
			
		||||
 *
 | 
			
		||||
 *     // to enable searching the include path (eg. for PEAR packages)
 | 
			
		||||
 *     $loader->setUseIncludePath(true);
 | 
			
		||||
 *
 | 
			
		||||
 * In this example, if you try to use a class in the Symfony\Component
 | 
			
		||||
 * namespace or one of its children (Symfony\Component\Console for instance),
 | 
			
		||||
 * the autoloader will first look for the class under the component/
 | 
			
		||||
 * directory, and it will then fallback to the framework/ directory if not
 | 
			
		||||
 * found before giving up.
 | 
			
		||||
 *
 | 
			
		||||
 * This class is loosely based on the Symfony UniversalClassLoader.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Fabien Potencier <fabien@symfony.com>
 | 
			
		||||
 * @author Jordi Boggiano <j.boggiano@seld.be>
 | 
			
		||||
 * @see    https://www.php-fig.org/psr/psr-0/
 | 
			
		||||
 * @see    https://www.php-fig.org/psr/psr-4/
 | 
			
		||||
 */
 | 
			
		||||
class ClassLoader
 | 
			
		||||
{
 | 
			
		||||
    /** @var ?string */
 | 
			
		||||
    private $vendorDir;
 | 
			
		||||
 | 
			
		||||
    // PSR-4
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array[]
 | 
			
		||||
     * @psalm-var array<string, array<string, int>>
 | 
			
		||||
     */
 | 
			
		||||
    private $prefixLengthsPsr4 = array();
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array[]
 | 
			
		||||
     * @psalm-var array<string, array<int, string>>
 | 
			
		||||
     */
 | 
			
		||||
    private $prefixDirsPsr4 = array();
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array[]
 | 
			
		||||
     * @psalm-var array<string, string>
 | 
			
		||||
     */
 | 
			
		||||
    private $fallbackDirsPsr4 = array();
 | 
			
		||||
 | 
			
		||||
    // PSR-0
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array[]
 | 
			
		||||
     * @psalm-var array<string, array<string, string[]>>
 | 
			
		||||
     */
 | 
			
		||||
    private $prefixesPsr0 = array();
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array[]
 | 
			
		||||
     * @psalm-var array<string, string>
 | 
			
		||||
     */
 | 
			
		||||
    private $fallbackDirsPsr0 = array();
 | 
			
		||||
 | 
			
		||||
    /** @var bool */
 | 
			
		||||
    private $useIncludePath = false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string[]
 | 
			
		||||
     * @psalm-var array<string, string>
 | 
			
		||||
     */
 | 
			
		||||
    private $classMap = array();
 | 
			
		||||
 | 
			
		||||
    /** @var bool */
 | 
			
		||||
    private $classMapAuthoritative = false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var bool[]
 | 
			
		||||
     * @psalm-var array<string, bool>
 | 
			
		||||
     */
 | 
			
		||||
    private $missingClasses = array();
 | 
			
		||||
 | 
			
		||||
    /** @var ?string */
 | 
			
		||||
    private $apcuPrefix;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var self[]
 | 
			
		||||
     */
 | 
			
		||||
    private static $registeredLoaders = array();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param ?string $vendorDir
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct($vendorDir = null)
 | 
			
		||||
    {
 | 
			
		||||
        $this->vendorDir = $vendorDir;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return string[]
 | 
			
		||||
     */
 | 
			
		||||
    public function getPrefixes()
 | 
			
		||||
    {
 | 
			
		||||
        if (!empty($this->prefixesPsr0)) {
 | 
			
		||||
            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return array();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array[]
 | 
			
		||||
     * @psalm-return array<string, array<int, string>>
 | 
			
		||||
     */
 | 
			
		||||
    public function getPrefixesPsr4()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->prefixDirsPsr4;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array[]
 | 
			
		||||
     * @psalm-return array<string, string>
 | 
			
		||||
     */
 | 
			
		||||
    public function getFallbackDirs()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->fallbackDirsPsr0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array[]
 | 
			
		||||
     * @psalm-return array<string, string>
 | 
			
		||||
     */
 | 
			
		||||
    public function getFallbackDirsPsr4()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->fallbackDirsPsr4;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return string[] Array of classname => path
 | 
			
		||||
     * @psalm-return array<string, string>
 | 
			
		||||
     */
 | 
			
		||||
    public function getClassMap()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->classMap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string[] $classMap Class to filename map
 | 
			
		||||
     * @psalm-param array<string, string> $classMap
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function addClassMap(array $classMap)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->classMap) {
 | 
			
		||||
            $this->classMap = array_merge($this->classMap, $classMap);
 | 
			
		||||
        } else {
 | 
			
		||||
            $this->classMap = $classMap;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers a set of PSR-0 directories for a given prefix, either
 | 
			
		||||
     * appending or prepending to the ones previously set for this prefix.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string          $prefix  The prefix
 | 
			
		||||
     * @param string[]|string $paths   The PSR-0 root directories
 | 
			
		||||
     * @param bool            $prepend Whether to prepend the directories
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function add($prefix, $paths, $prepend = false)
 | 
			
		||||
    {
 | 
			
		||||
        if (!$prefix) {
 | 
			
		||||
            if ($prepend) {
 | 
			
		||||
                $this->fallbackDirsPsr0 = array_merge(
 | 
			
		||||
                    (array) $paths,
 | 
			
		||||
                    $this->fallbackDirsPsr0
 | 
			
		||||
                );
 | 
			
		||||
            } else {
 | 
			
		||||
                $this->fallbackDirsPsr0 = array_merge(
 | 
			
		||||
                    $this->fallbackDirsPsr0,
 | 
			
		||||
                    (array) $paths
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $first = $prefix[0];
 | 
			
		||||
        if (!isset($this->prefixesPsr0[$first][$prefix])) {
 | 
			
		||||
            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
 | 
			
		||||
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if ($prepend) {
 | 
			
		||||
            $this->prefixesPsr0[$first][$prefix] = array_merge(
 | 
			
		||||
                (array) $paths,
 | 
			
		||||
                $this->prefixesPsr0[$first][$prefix]
 | 
			
		||||
            );
 | 
			
		||||
        } else {
 | 
			
		||||
            $this->prefixesPsr0[$first][$prefix] = array_merge(
 | 
			
		||||
                $this->prefixesPsr0[$first][$prefix],
 | 
			
		||||
                (array) $paths
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers a set of PSR-4 directories for a given namespace, either
 | 
			
		||||
     * appending or prepending to the ones previously set for this namespace.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string          $prefix  The prefix/namespace, with trailing '\\'
 | 
			
		||||
     * @param string[]|string $paths   The PSR-4 base directories
 | 
			
		||||
     * @param bool            $prepend Whether to prepend the directories
 | 
			
		||||
     *
 | 
			
		||||
     * @throws \InvalidArgumentException
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function addPsr4($prefix, $paths, $prepend = false)
 | 
			
		||||
    {
 | 
			
		||||
        if (!$prefix) {
 | 
			
		||||
            // Register directories for the root namespace.
 | 
			
		||||
            if ($prepend) {
 | 
			
		||||
                $this->fallbackDirsPsr4 = array_merge(
 | 
			
		||||
                    (array) $paths,
 | 
			
		||||
                    $this->fallbackDirsPsr4
 | 
			
		||||
                );
 | 
			
		||||
            } else {
 | 
			
		||||
                $this->fallbackDirsPsr4 = array_merge(
 | 
			
		||||
                    $this->fallbackDirsPsr4,
 | 
			
		||||
                    (array) $paths
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
 | 
			
		||||
            // Register directories for a new namespace.
 | 
			
		||||
            $length = strlen($prefix);
 | 
			
		||||
            if ('\\' !== $prefix[$length - 1]) {
 | 
			
		||||
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
 | 
			
		||||
            }
 | 
			
		||||
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
 | 
			
		||||
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
 | 
			
		||||
        } elseif ($prepend) {
 | 
			
		||||
            // Prepend directories for an already registered namespace.
 | 
			
		||||
            $this->prefixDirsPsr4[$prefix] = array_merge(
 | 
			
		||||
                (array) $paths,
 | 
			
		||||
                $this->prefixDirsPsr4[$prefix]
 | 
			
		||||
            );
 | 
			
		||||
        } else {
 | 
			
		||||
            // Append directories for an already registered namespace.
 | 
			
		||||
            $this->prefixDirsPsr4[$prefix] = array_merge(
 | 
			
		||||
                $this->prefixDirsPsr4[$prefix],
 | 
			
		||||
                (array) $paths
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers a set of PSR-0 directories for a given prefix,
 | 
			
		||||
     * replacing any others previously set for this prefix.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string          $prefix The prefix
 | 
			
		||||
     * @param string[]|string $paths  The PSR-0 base directories
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function set($prefix, $paths)
 | 
			
		||||
    {
 | 
			
		||||
        if (!$prefix) {
 | 
			
		||||
            $this->fallbackDirsPsr0 = (array) $paths;
 | 
			
		||||
        } else {
 | 
			
		||||
            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers a set of PSR-4 directories for a given namespace,
 | 
			
		||||
     * replacing any others previously set for this namespace.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string          $prefix The prefix/namespace, with trailing '\\'
 | 
			
		||||
     * @param string[]|string $paths  The PSR-4 base directories
 | 
			
		||||
     *
 | 
			
		||||
     * @throws \InvalidArgumentException
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function setPsr4($prefix, $paths)
 | 
			
		||||
    {
 | 
			
		||||
        if (!$prefix) {
 | 
			
		||||
            $this->fallbackDirsPsr4 = (array) $paths;
 | 
			
		||||
        } else {
 | 
			
		||||
            $length = strlen($prefix);
 | 
			
		||||
            if ('\\' !== $prefix[$length - 1]) {
 | 
			
		||||
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
 | 
			
		||||
            }
 | 
			
		||||
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
 | 
			
		||||
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Turns on searching the include path for class files.
 | 
			
		||||
     *
 | 
			
		||||
     * @param bool $useIncludePath
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function setUseIncludePath($useIncludePath)
 | 
			
		||||
    {
 | 
			
		||||
        $this->useIncludePath = $useIncludePath;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Can be used to check if the autoloader uses the include path to check
 | 
			
		||||
     * for classes.
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function getUseIncludePath()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->useIncludePath;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Turns off searching the prefix and fallback directories for classes
 | 
			
		||||
     * that have not been registered with the class map.
 | 
			
		||||
     *
 | 
			
		||||
     * @param bool $classMapAuthoritative
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function setClassMapAuthoritative($classMapAuthoritative)
 | 
			
		||||
    {
 | 
			
		||||
        $this->classMapAuthoritative = $classMapAuthoritative;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Should class lookup fail if not found in the current class map?
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function isClassMapAuthoritative()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->classMapAuthoritative;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string|null $apcuPrefix
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function setApcuPrefix($apcuPrefix)
 | 
			
		||||
    {
 | 
			
		||||
        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The APCu prefix in use, or null if APCu caching is not enabled.
 | 
			
		||||
     *
 | 
			
		||||
     * @return string|null
 | 
			
		||||
     */
 | 
			
		||||
    public function getApcuPrefix()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->apcuPrefix;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers this instance as an autoloader.
 | 
			
		||||
     *
 | 
			
		||||
     * @param bool $prepend Whether to prepend the autoloader or not
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function register($prepend = false)
 | 
			
		||||
    {
 | 
			
		||||
        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
 | 
			
		||||
 | 
			
		||||
        if (null === $this->vendorDir) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($prepend) {
 | 
			
		||||
            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
 | 
			
		||||
        } else {
 | 
			
		||||
            unset(self::$registeredLoaders[$this->vendorDir]);
 | 
			
		||||
            self::$registeredLoaders[$this->vendorDir] = $this;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Unregisters this instance as an autoloader.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function unregister()
 | 
			
		||||
    {
 | 
			
		||||
        spl_autoload_unregister(array($this, 'loadClass'));
 | 
			
		||||
 | 
			
		||||
        if (null !== $this->vendorDir) {
 | 
			
		||||
            unset(self::$registeredLoaders[$this->vendorDir]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Loads the given class or interface.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string    $class The name of the class
 | 
			
		||||
     * @return true|null True if loaded, null otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public function loadClass($class)
 | 
			
		||||
    {
 | 
			
		||||
        if ($file = $this->findFile($class)) {
 | 
			
		||||
            includeFile($file);
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Finds the path to the file where the class is defined.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $class The name of the class
 | 
			
		||||
     *
 | 
			
		||||
     * @return string|false The path if found, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public function findFile($class)
 | 
			
		||||
    {
 | 
			
		||||
        // class map lookup
 | 
			
		||||
        if (isset($this->classMap[$class])) {
 | 
			
		||||
            return $this->classMap[$class];
 | 
			
		||||
        }
 | 
			
		||||
        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        if (null !== $this->apcuPrefix) {
 | 
			
		||||
            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
 | 
			
		||||
            if ($hit) {
 | 
			
		||||
                return $file;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $file = $this->findFileWithExtension($class, '.php');
 | 
			
		||||
 | 
			
		||||
        // Search for Hack files if we are running on HHVM
 | 
			
		||||
        if (false === $file && defined('HHVM_VERSION')) {
 | 
			
		||||
            $file = $this->findFileWithExtension($class, '.hh');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (null !== $this->apcuPrefix) {
 | 
			
		||||
            apcu_add($this->apcuPrefix.$class, $file);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (false === $file) {
 | 
			
		||||
            // Remember that this class does not exist.
 | 
			
		||||
            $this->missingClasses[$class] = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $file;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the currently registered loaders indexed by their corresponding vendor directories.
 | 
			
		||||
     *
 | 
			
		||||
     * @return self[]
 | 
			
		||||
     */
 | 
			
		||||
    public static function getRegisteredLoaders()
 | 
			
		||||
    {
 | 
			
		||||
        return self::$registeredLoaders;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param  string       $class
 | 
			
		||||
     * @param  string       $ext
 | 
			
		||||
     * @return string|false
 | 
			
		||||
     */
 | 
			
		||||
    private function findFileWithExtension($class, $ext)
 | 
			
		||||
    {
 | 
			
		||||
        // PSR-4 lookup
 | 
			
		||||
        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
 | 
			
		||||
 | 
			
		||||
        $first = $class[0];
 | 
			
		||||
        if (isset($this->prefixLengthsPsr4[$first])) {
 | 
			
		||||
            $subPath = $class;
 | 
			
		||||
            while (false !== $lastPos = strrpos($subPath, '\\')) {
 | 
			
		||||
                $subPath = substr($subPath, 0, $lastPos);
 | 
			
		||||
                $search = $subPath . '\\';
 | 
			
		||||
                if (isset($this->prefixDirsPsr4[$search])) {
 | 
			
		||||
                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
 | 
			
		||||
                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
 | 
			
		||||
                        if (file_exists($file = $dir . $pathEnd)) {
 | 
			
		||||
                            return $file;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // PSR-4 fallback dirs
 | 
			
		||||
        foreach ($this->fallbackDirsPsr4 as $dir) {
 | 
			
		||||
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
 | 
			
		||||
                return $file;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // PSR-0 lookup
 | 
			
		||||
        if (false !== $pos = strrpos($class, '\\')) {
 | 
			
		||||
            // namespaced class name
 | 
			
		||||
            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
 | 
			
		||||
                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
 | 
			
		||||
        } else {
 | 
			
		||||
            // PEAR-like class name
 | 
			
		||||
            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (isset($this->prefixesPsr0[$first])) {
 | 
			
		||||
            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
 | 
			
		||||
                if (0 === strpos($class, $prefix)) {
 | 
			
		||||
                    foreach ($dirs as $dir) {
 | 
			
		||||
                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
 | 
			
		||||
                            return $file;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // PSR-0 fallback dirs
 | 
			
		||||
        foreach ($this->fallbackDirsPsr0 as $dir) {
 | 
			
		||||
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
 | 
			
		||||
                return $file;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // PSR-0 include paths.
 | 
			
		||||
        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
 | 
			
		||||
            return $file;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Scope isolated include.
 | 
			
		||||
 *
 | 
			
		||||
 * Prevents access to $this/self from included files.
 | 
			
		||||
 *
 | 
			
		||||
 * @param  string $file
 | 
			
		||||
 * @return void
 | 
			
		||||
 * @private
 | 
			
		||||
 */
 | 
			
		||||
function includeFile($file)
 | 
			
		||||
{
 | 
			
		||||
    include $file;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										350
									
								
								vendor/composer/InstalledVersions.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										350
									
								
								vendor/composer/InstalledVersions.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,350 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of Composer.
 | 
			
		||||
 *
 | 
			
		||||
 * (c) Nils Adermann <naderman@naderman.de>
 | 
			
		||||
 *     Jordi Boggiano <j.boggiano@seld.be>
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace Composer;
 | 
			
		||||
 | 
			
		||||
use Composer\Autoload\ClassLoader;
 | 
			
		||||
use Composer\Semver\VersionParser;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class is copied in every Composer installed project and available to all
 | 
			
		||||
 *
 | 
			
		||||
 * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
 | 
			
		||||
 *
 | 
			
		||||
 * To require its presence, you can require `composer-runtime-api ^2.0`
 | 
			
		||||
 */
 | 
			
		||||
class InstalledVersions
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var mixed[]|null
 | 
			
		||||
     * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
 | 
			
		||||
     */
 | 
			
		||||
    private static $installed;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var bool|null
 | 
			
		||||
     */
 | 
			
		||||
    private static $canGetVendors;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array[]
 | 
			
		||||
     * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
 | 
			
		||||
     */
 | 
			
		||||
    private static $installedByVendor = array();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a list of all package names which are present, either by being installed, replaced or provided
 | 
			
		||||
     *
 | 
			
		||||
     * @return string[]
 | 
			
		||||
     * @psalm-return list<string>
 | 
			
		||||
     */
 | 
			
		||||
    public static function getInstalledPackages()
 | 
			
		||||
    {
 | 
			
		||||
        $packages = array();
 | 
			
		||||
        foreach (self::getInstalled() as $installed) {
 | 
			
		||||
            $packages[] = array_keys($installed['versions']);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (1 === \count($packages)) {
 | 
			
		||||
            return $packages[0];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a list of all package names with a specific type e.g. 'library'
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string   $type
 | 
			
		||||
     * @return string[]
 | 
			
		||||
     * @psalm-return list<string>
 | 
			
		||||
     */
 | 
			
		||||
    public static function getInstalledPackagesByType($type)
 | 
			
		||||
    {
 | 
			
		||||
        $packagesByType = array();
 | 
			
		||||
 | 
			
		||||
        foreach (self::getInstalled() as $installed) {
 | 
			
		||||
            foreach ($installed['versions'] as $name => $package) {
 | 
			
		||||
                if (isset($package['type']) && $package['type'] === $type) {
 | 
			
		||||
                    $packagesByType[] = $name;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $packagesByType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks whether the given package is installed
 | 
			
		||||
     *
 | 
			
		||||
     * This also returns true if the package name is provided or replaced by another package
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string $packageName
 | 
			
		||||
     * @param  bool   $includeDevRequirements
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public static function isInstalled($packageName, $includeDevRequirements = true)
 | 
			
		||||
    {
 | 
			
		||||
        foreach (self::getInstalled() as $installed) {
 | 
			
		||||
            if (isset($installed['versions'][$packageName])) {
 | 
			
		||||
                return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks whether the given package satisfies a version constraint
 | 
			
		||||
     *
 | 
			
		||||
     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
 | 
			
		||||
     *
 | 
			
		||||
     *   Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
 | 
			
		||||
     *
 | 
			
		||||
     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality
 | 
			
		||||
     * @param  string        $packageName
 | 
			
		||||
     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public static function satisfies(VersionParser $parser, $packageName, $constraint)
 | 
			
		||||
    {
 | 
			
		||||
        $constraint = $parser->parseConstraints($constraint);
 | 
			
		||||
        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
 | 
			
		||||
 | 
			
		||||
        return $provided->matches($constraint);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a version constraint representing all the range(s) which are installed for a given package
 | 
			
		||||
     *
 | 
			
		||||
     * It is easier to use this via isInstalled() with the $constraint argument if you need to check
 | 
			
		||||
     * whether a given version of a package is installed, and not just whether it exists
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string $packageName
 | 
			
		||||
     * @return string Version constraint usable with composer/semver
 | 
			
		||||
     */
 | 
			
		||||
    public static function getVersionRanges($packageName)
 | 
			
		||||
    {
 | 
			
		||||
        foreach (self::getInstalled() as $installed) {
 | 
			
		||||
            if (!isset($installed['versions'][$packageName])) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $ranges = array();
 | 
			
		||||
            if (isset($installed['versions'][$packageName]['pretty_version'])) {
 | 
			
		||||
                $ranges[] = $installed['versions'][$packageName]['pretty_version'];
 | 
			
		||||
            }
 | 
			
		||||
            if (array_key_exists('aliases', $installed['versions'][$packageName])) {
 | 
			
		||||
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
 | 
			
		||||
            }
 | 
			
		||||
            if (array_key_exists('replaced', $installed['versions'][$packageName])) {
 | 
			
		||||
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
 | 
			
		||||
            }
 | 
			
		||||
            if (array_key_exists('provided', $installed['versions'][$packageName])) {
 | 
			
		||||
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return implode(' || ', $ranges);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param  string      $packageName
 | 
			
		||||
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
 | 
			
		||||
     */
 | 
			
		||||
    public static function getVersion($packageName)
 | 
			
		||||
    {
 | 
			
		||||
        foreach (self::getInstalled() as $installed) {
 | 
			
		||||
            if (!isset($installed['versions'][$packageName])) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!isset($installed['versions'][$packageName]['version'])) {
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return $installed['versions'][$packageName]['version'];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param  string      $packageName
 | 
			
		||||
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
 | 
			
		||||
     */
 | 
			
		||||
    public static function getPrettyVersion($packageName)
 | 
			
		||||
    {
 | 
			
		||||
        foreach (self::getInstalled() as $installed) {
 | 
			
		||||
            if (!isset($installed['versions'][$packageName])) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!isset($installed['versions'][$packageName]['pretty_version'])) {
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return $installed['versions'][$packageName]['pretty_version'];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param  string      $packageName
 | 
			
		||||
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
 | 
			
		||||
     */
 | 
			
		||||
    public static function getReference($packageName)
 | 
			
		||||
    {
 | 
			
		||||
        foreach (self::getInstalled() as $installed) {
 | 
			
		||||
            if (!isset($installed['versions'][$packageName])) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!isset($installed['versions'][$packageName]['reference'])) {
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return $installed['versions'][$packageName]['reference'];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param  string      $packageName
 | 
			
		||||
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
 | 
			
		||||
     */
 | 
			
		||||
    public static function getInstallPath($packageName)
 | 
			
		||||
    {
 | 
			
		||||
        foreach (self::getInstalled() as $installed) {
 | 
			
		||||
            if (!isset($installed['versions'][$packageName])) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array
 | 
			
		||||
     * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
 | 
			
		||||
     */
 | 
			
		||||
    public static function getRootPackage()
 | 
			
		||||
    {
 | 
			
		||||
        $installed = self::getInstalled();
 | 
			
		||||
 | 
			
		||||
        return $installed[0]['root'];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the raw installed.php data for custom implementations
 | 
			
		||||
     *
 | 
			
		||||
     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
 | 
			
		||||
     * @return array[]
 | 
			
		||||
     * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
 | 
			
		||||
     */
 | 
			
		||||
    public static function getRawData()
 | 
			
		||||
    {
 | 
			
		||||
        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
 | 
			
		||||
 | 
			
		||||
        if (null === self::$installed) {
 | 
			
		||||
            // only require the installed.php file if this file is loaded from its dumped location,
 | 
			
		||||
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
 | 
			
		||||
            if (substr(__DIR__, -8, 1) !== 'C') {
 | 
			
		||||
                self::$installed = include __DIR__ . '/installed.php';
 | 
			
		||||
            } else {
 | 
			
		||||
                self::$installed = array();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return self::$installed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the raw data of all installed.php which are currently loaded for custom implementations
 | 
			
		||||
     *
 | 
			
		||||
     * @return array[]
 | 
			
		||||
     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
 | 
			
		||||
     */
 | 
			
		||||
    public static function getAllRawData()
 | 
			
		||||
    {
 | 
			
		||||
        return self::getInstalled();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Lets you reload the static array from another file
 | 
			
		||||
     *
 | 
			
		||||
     * This is only useful for complex integrations in which a project needs to use
 | 
			
		||||
     * this class but then also needs to execute another project's autoloader in process,
 | 
			
		||||
     * and wants to ensure both projects have access to their version of installed.php.
 | 
			
		||||
     *
 | 
			
		||||
     * A typical case would be PHPUnit, where it would need to make sure it reads all
 | 
			
		||||
     * the data it needs from this class, then call reload() with
 | 
			
		||||
     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
 | 
			
		||||
     * the project in which it runs can then also use this class safely, without
 | 
			
		||||
     * interference between PHPUnit's dependencies and the project's dependencies.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array[] $data A vendor/composer/installed.php data set
 | 
			
		||||
     * @return void
 | 
			
		||||
     *
 | 
			
		||||
     * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
 | 
			
		||||
     */
 | 
			
		||||
    public static function reload($data)
 | 
			
		||||
    {
 | 
			
		||||
        self::$installed = $data;
 | 
			
		||||
        self::$installedByVendor = array();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array[]
 | 
			
		||||
     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
 | 
			
		||||
     */
 | 
			
		||||
    private static function getInstalled()
 | 
			
		||||
    {
 | 
			
		||||
        if (null === self::$canGetVendors) {
 | 
			
		||||
            self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $installed = array();
 | 
			
		||||
 | 
			
		||||
        if (self::$canGetVendors) {
 | 
			
		||||
            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
 | 
			
		||||
                if (isset(self::$installedByVendor[$vendorDir])) {
 | 
			
		||||
                    $installed[] = self::$installedByVendor[$vendorDir];
 | 
			
		||||
                } elseif (is_file($vendorDir.'/composer/installed.php')) {
 | 
			
		||||
                    $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
 | 
			
		||||
                    if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
 | 
			
		||||
                        self::$installed = $installed[count($installed) - 1];
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (null === self::$installed) {
 | 
			
		||||
            // only require the installed.php file if this file is loaded from its dumped location,
 | 
			
		||||
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
 | 
			
		||||
            if (substr(__DIR__, -8, 1) !== 'C') {
 | 
			
		||||
                self::$installed = require __DIR__ . '/installed.php';
 | 
			
		||||
            } else {
 | 
			
		||||
                self::$installed = array();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        $installed[] = self::$installed;
 | 
			
		||||
 | 
			
		||||
        return $installed;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								vendor/composer/LICENSE
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/composer/LICENSE
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
Copyright (c) Nils Adermann, Jordi Boggiano
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is furnished
 | 
			
		||||
to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										21
									
								
								vendor/composer/autoload_classmap.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/composer/autoload_classmap.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload_classmap.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
$vendorDir = dirname(dirname(__FILE__));
 | 
			
		||||
$baseDir = dirname($vendorDir);
 | 
			
		||||
 | 
			
		||||
return array(
 | 
			
		||||
    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
 | 
			
		||||
    'Itguild\\Tables\\ListJsonTable' => $vendorDir . '/itguild/tables/src/ListJsonTable.php',
 | 
			
		||||
    'Itguild\\Tables\\Pagination' => $vendorDir . '/itguild/tables/src/Pagination.php',
 | 
			
		||||
    'Itguild\\Tables\\ViewJsonTable' => $vendorDir . '/itguild/tables/src/ViewJsonTable.php',
 | 
			
		||||
    'Itguild\\Tables\\actionBtn\\ActionBtn' => $vendorDir . '/itguild/tables/src/actionBtn/ActionBtn.php',
 | 
			
		||||
    'Itguild\\Tables\\actionBtn\\ToDeleteBtn' => $vendorDir . '/itguild/tables/src/actionBtn/ToDeleteBtn.php',
 | 
			
		||||
    'Itguild\\Tables\\actionBtn\\ToEditBtn' => $vendorDir . '/itguild/tables/src/actionBtn/ToEditBtn.php',
 | 
			
		||||
    'Itguild\\Tables\\actionBtn\\ToListBtn' => $vendorDir . '/itguild/tables/src/actionBtn/ToListBtn.php',
 | 
			
		||||
    'Itguild\\Tables\\traits\\CreateOption' => $vendorDir . '/itguild/tables/src/traits/CreateOption.php',
 | 
			
		||||
    'Itguild\\Tables\\traits\\CreateParams' => $vendorDir . '/itguild/tables/src/traits/CreateParams.php',
 | 
			
		||||
    'src\\debug\\Debug' => $baseDir . '/src/debug/Debug.php',
 | 
			
		||||
    'src\\file_db_driver\\FileDatabaseDriver' => $baseDir . '/src/file_db_driver/FileDatabaseDriver.php',
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										9
									
								
								vendor/composer/autoload_namespaces.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/composer/autoload_namespaces.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload_namespaces.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
$vendorDir = dirname(dirname(__FILE__));
 | 
			
		||||
$baseDir = dirname($vendorDir);
 | 
			
		||||
 | 
			
		||||
return array(
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										11
									
								
								vendor/composer/autoload_psr4.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								vendor/composer/autoload_psr4.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload_psr4.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
$vendorDir = dirname(dirname(__FILE__));
 | 
			
		||||
$baseDir = dirname($vendorDir);
 | 
			
		||||
 | 
			
		||||
return array(
 | 
			
		||||
    'src\\' => array($baseDir . '/src'),
 | 
			
		||||
    'Itguild\\Tables\\' => array($vendorDir . '/itguild/tables/src'),
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										55
									
								
								vendor/composer/autoload_real.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								vendor/composer/autoload_real.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload_real.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
class ComposerAutoloaderInit5983c395e598dae0283c3b233c3f9cc1
 | 
			
		||||
{
 | 
			
		||||
    private static $loader;
 | 
			
		||||
 | 
			
		||||
    public static function loadClassLoader($class)
 | 
			
		||||
    {
 | 
			
		||||
        if ('Composer\Autoload\ClassLoader' === $class) {
 | 
			
		||||
            require __DIR__ . '/ClassLoader.php';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return \Composer\Autoload\ClassLoader
 | 
			
		||||
     */
 | 
			
		||||
    public static function getLoader()
 | 
			
		||||
    {
 | 
			
		||||
        if (null !== self::$loader) {
 | 
			
		||||
            return self::$loader;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        spl_autoload_register(array('ComposerAutoloaderInit5983c395e598dae0283c3b233c3f9cc1', 'loadClassLoader'), true, true);
 | 
			
		||||
        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
 | 
			
		||||
        spl_autoload_unregister(array('ComposerAutoloaderInit5983c395e598dae0283c3b233c3f9cc1', 'loadClassLoader'));
 | 
			
		||||
 | 
			
		||||
        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
 | 
			
		||||
        if ($useStaticLoader) {
 | 
			
		||||
            require __DIR__ . '/autoload_static.php';
 | 
			
		||||
 | 
			
		||||
            call_user_func(\Composer\Autoload\ComposerStaticInit5983c395e598dae0283c3b233c3f9cc1::getInitializer($loader));
 | 
			
		||||
        } else {
 | 
			
		||||
            $map = require __DIR__ . '/autoload_namespaces.php';
 | 
			
		||||
            foreach ($map as $namespace => $path) {
 | 
			
		||||
                $loader->set($namespace, $path);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $map = require __DIR__ . '/autoload_psr4.php';
 | 
			
		||||
            foreach ($map as $namespace => $path) {
 | 
			
		||||
                $loader->setPsr4($namespace, $path);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $classMap = require __DIR__ . '/autoload_classmap.php';
 | 
			
		||||
            if ($classMap) {
 | 
			
		||||
                $loader->addClassMap($classMap);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $loader->register(true);
 | 
			
		||||
 | 
			
		||||
        return $loader;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										55
									
								
								vendor/composer/autoload_static.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								vendor/composer/autoload_static.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload_static.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
namespace Composer\Autoload;
 | 
			
		||||
 | 
			
		||||
class ComposerStaticInit5983c395e598dae0283c3b233c3f9cc1
 | 
			
		||||
{
 | 
			
		||||
    public static $prefixLengthsPsr4 = array (
 | 
			
		||||
        's' => 
 | 
			
		||||
        array (
 | 
			
		||||
            'src\\' => 4,
 | 
			
		||||
        ),
 | 
			
		||||
        'I' => 
 | 
			
		||||
        array (
 | 
			
		||||
            'Itguild\\Tables\\' => 15,
 | 
			
		||||
        ),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    public static $prefixDirsPsr4 = array (
 | 
			
		||||
        'src\\' => 
 | 
			
		||||
        array (
 | 
			
		||||
            0 => __DIR__ . '/../..' . '/src',
 | 
			
		||||
        ),
 | 
			
		||||
        'Itguild\\Tables\\' => 
 | 
			
		||||
        array (
 | 
			
		||||
            0 => __DIR__ . '/..' . '/itguild/tables/src',
 | 
			
		||||
        ),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    public static $classMap = array (
 | 
			
		||||
        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
 | 
			
		||||
        'Itguild\\Tables\\ListJsonTable' => __DIR__ . '/..' . '/itguild/tables/src/ListJsonTable.php',
 | 
			
		||||
        'Itguild\\Tables\\Pagination' => __DIR__ . '/..' . '/itguild/tables/src/Pagination.php',
 | 
			
		||||
        'Itguild\\Tables\\ViewJsonTable' => __DIR__ . '/..' . '/itguild/tables/src/ViewJsonTable.php',
 | 
			
		||||
        'Itguild\\Tables\\actionBtn\\ActionBtn' => __DIR__ . '/..' . '/itguild/tables/src/actionBtn/ActionBtn.php',
 | 
			
		||||
        'Itguild\\Tables\\actionBtn\\ToDeleteBtn' => __DIR__ . '/..' . '/itguild/tables/src/actionBtn/ToDeleteBtn.php',
 | 
			
		||||
        'Itguild\\Tables\\actionBtn\\ToEditBtn' => __DIR__ . '/..' . '/itguild/tables/src/actionBtn/ToEditBtn.php',
 | 
			
		||||
        'Itguild\\Tables\\actionBtn\\ToListBtn' => __DIR__ . '/..' . '/itguild/tables/src/actionBtn/ToListBtn.php',
 | 
			
		||||
        'Itguild\\Tables\\traits\\CreateOption' => __DIR__ . '/..' . '/itguild/tables/src/traits/CreateOption.php',
 | 
			
		||||
        'Itguild\\Tables\\traits\\CreateParams' => __DIR__ . '/..' . '/itguild/tables/src/traits/CreateParams.php',
 | 
			
		||||
        'src\\debug\\Debug' => __DIR__ . '/../..' . '/src/debug/Debug.php',
 | 
			
		||||
        'src\\file_db_driver\\FileDatabaseDriver' => __DIR__ . '/../..' . '/src/file_db_driver/FileDatabaseDriver.php',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    public static function getInitializer(ClassLoader $loader)
 | 
			
		||||
    {
 | 
			
		||||
        return \Closure::bind(function () use ($loader) {
 | 
			
		||||
            $loader->prefixLengthsPsr4 = ComposerStaticInit5983c395e598dae0283c3b233c3f9cc1::$prefixLengthsPsr4;
 | 
			
		||||
            $loader->prefixDirsPsr4 = ComposerStaticInit5983c395e598dae0283c3b233c3f9cc1::$prefixDirsPsr4;
 | 
			
		||||
            $loader->classMap = ComposerStaticInit5983c395e598dae0283c3b233c3f9cc1::$classMap;
 | 
			
		||||
 | 
			
		||||
        }, null, ClassLoader::class);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/composer/installed.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/composer/installed.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
    "packages": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "itguild/tables",
 | 
			
		||||
            "version": "0.1",
 | 
			
		||||
            "version_normalized": "0.1.0.0",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://git.itguild.info/ItGuild/tables",
 | 
			
		||||
                "reference": "42ab26a3db1cef8319985fc3a0f5d23d2dff4e3b"
 | 
			
		||||
            },
 | 
			
		||||
            "time": "2024-05-27T09:59:44+00:00",
 | 
			
		||||
            "type": "library",
 | 
			
		||||
            "installation-source": "source",
 | 
			
		||||
            "autoload": {
 | 
			
		||||
                "psr-4": {
 | 
			
		||||
                    "Itguild\\Tables\\": "src/"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
            "license": [
 | 
			
		||||
                "MIT"
 | 
			
		||||
            ],
 | 
			
		||||
            "authors": [
 | 
			
		||||
                {
 | 
			
		||||
                    "name": "Kavalar",
 | 
			
		||||
                    "email": "apuc06@mail.ru"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "install-path": "../itguild/tables"
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "dev": true,
 | 
			
		||||
    "dev-package-names": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								vendor/composer/installed.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								vendor/composer/installed.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
<?php return array(
 | 
			
		||||
    'root' => array(
 | 
			
		||||
        'pretty_version' => 'dev-master',
 | 
			
		||||
        'version' => 'dev-master',
 | 
			
		||||
        'type' => 'library',
 | 
			
		||||
        'install_path' => __DIR__ . '/../../',
 | 
			
		||||
        'aliases' => array(),
 | 
			
		||||
        'reference' => '5468b1d2860f8173bf9ab0050803fb54beff40ed',
 | 
			
		||||
        'name' => '__root__',
 | 
			
		||||
        'dev' => true,
 | 
			
		||||
    ),
 | 
			
		||||
    'versions' => array(
 | 
			
		||||
        '__root__' => array(
 | 
			
		||||
            'pretty_version' => 'dev-master',
 | 
			
		||||
            'version' => 'dev-master',
 | 
			
		||||
            'type' => 'library',
 | 
			
		||||
            'install_path' => __DIR__ . '/../../',
 | 
			
		||||
            'aliases' => array(),
 | 
			
		||||
            'reference' => '5468b1d2860f8173bf9ab0050803fb54beff40ed',
 | 
			
		||||
            'dev_requirement' => false,
 | 
			
		||||
        ),
 | 
			
		||||
        'itguild/tables' => array(
 | 
			
		||||
            'pretty_version' => '0.1',
 | 
			
		||||
            'version' => '0.1.0.0',
 | 
			
		||||
            'type' => 'library',
 | 
			
		||||
            'install_path' => __DIR__ . '/../itguild/tables',
 | 
			
		||||
            'aliases' => array(),
 | 
			
		||||
            'reference' => '42ab26a3db1cef8319985fc3a0f5d23d2dff4e3b',
 | 
			
		||||
            'dev_requirement' => false,
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/itguild/tables
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								vendor/itguild/tables
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule vendor/itguild/tables added at 42ab26a3db
									
								
							
							
								
								
									
										48
									
								
								views/form.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								views/form.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
<form action="../info.php" target="_blank" method="post">
 | 
			
		||||
    Фамилия:<br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type = "text" name = "surname" required size="50" autofocus placeholder="Фамилия">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
 | 
			
		||||
    Имя:<br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type = "text" name = "name" required size="50" placeholder="Имя">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
 | 
			
		||||
    Отчество (если есть):<br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type = "text" name = "patronymic" size="50" placeholder="Отчество">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
 | 
			
		||||
    Дата Рождения: <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="date" name="dateOfBirth">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
 | 
			
		||||
    Ваш пол: <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="radio" name="gender" value="Мужчина" checked>
 | 
			
		||||
    </label> Мужчина
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="radio" name="gender" value="Женжина">
 | 
			
		||||
    </label> Женжина<br> <br>
 | 
			
		||||
 | 
			
		||||
    Номер телефона (Например 1234567890): <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <select name="countryCode">
 | 
			
		||||
            <option value="+7" >Russia +7</option>
 | 
			
		||||
            <option value="+38">Ukraine +38</option>
 | 
			
		||||
        </select>
 | 
			
		||||
    </label>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="tel" name="phoneNumber" pattern="[0-9]{10}" maxlength="10" required placeholder="1234567890">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
 | 
			
		||||
    Email адрес: <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="Email" name="email" required>
 | 
			
		||||
    </label> <br><br>
 | 
			
		||||
 | 
			
		||||
    <input type = "submit" value="Подтвердить">
 | 
			
		||||
    <input type="reset">
 | 
			
		||||
</form>
 | 
			
		||||
							
								
								
									
										43
									
								
								views/search.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								views/search.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
<form action="../search.php" target="_blank" method="post">
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="search" placeholder="Фамилия" name="surname">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="search" placeholder="Имя" name="name">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="search" placeholder="Отчество" name="patronymic">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="search" placeholder="Дата рождения(гггг-мм-дд)" name="dateOfBirth">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="search" placeholder="Пол" name="gender">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="search" placeholder="Код страны" name="countryCode">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="search" placeholder="Номер телефона" name="phoneNumber">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="search" placeholder="Email" name="email">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
    <label>
 | 
			
		||||
        <input type="search" placeholder="Статус" name="status">
 | 
			
		||||
    </label> <br> <br>
 | 
			
		||||
<!--    Среди чего найти? <br>-->
 | 
			
		||||
<!--    <label>-->
 | 
			
		||||
<!--        <select name="key">-->
 | 
			
		||||
<!--            <option value="surname">Фамилия</option>-->
 | 
			
		||||
<!--            <option value="name">Имя</option>-->
 | 
			
		||||
<!--            <option value="patronymic">Отчество</option>-->
 | 
			
		||||
<!--            <option value="dateOfBirth">Дата рождения</option>-->
 | 
			
		||||
<!--            <option value="gender">Пол</option>-->
 | 
			
		||||
<!--            <option value="countryCode">Код страны</option>-->
 | 
			
		||||
<!--            <option value="phoneNumber">Номер телефона</option>-->
 | 
			
		||||
<!--            <option value="email">Email</option>-->
 | 
			
		||||
<!--        </select>-->
 | 
			
		||||
<!--    </label> <br><br>-->
 | 
			
		||||
    <input type="submit" value="Поиск">
 | 
			
		||||
</form>
 | 
			
		||||
		Reference in New Issue
	
	Block a user