ver.0.3
This commit is contained in:
parent
5468b1d286
commit
987effd67f
@ -1,9 +1,20 @@
|
|||||||
Билай;Станислав;Романович;2002-03-11;Мужчина;+7;9493761924;stasbilay02@yandex.ru
|
last_id=19;table_name=user_info
|
||||||
Иванова;Мария;Сергеевна;2002-04-05;Женжина;+38;2222222222;sdguhnlnoih@gmail.com
|
id;surname;name;patronymic;dateOfBirth;gender;countryCode;phoneNumber;email;status
|
||||||
Иванов;Иван;Иванович;2002-03-11;Мужчина;+7;1111111111;dsjgbdskgb@yandex.ru
|
id;Фамилия;Имя;Отчество;Дата рождения;Пол;Код страны;Номер телефона;Email;Статус
|
||||||
Плешкова;Анастасия;Денисовна;2006-11-10;Женжина;+7;3333333333;ple.anastasiya@gmail.com
|
3;Билай;Станислав;Романович;2002-03-11;Мужчина;+7;9493761924;stasbilay02@yandex.ru;0
|
||||||
Зайцева;Анжела;Игоревна;1998-12-12;Женжина;+7;4444444444;aksjfhfka@mail.ru
|
4;Иванова;Мария;Сергеевна;2002-04-05;Женжина;+38;2222222222;sdguhnlnoih@gmail.com;1
|
||||||
Петров;Петр;Петрович;1987-03-02;Мужчина;+7;7777777777;jksghhsdkj@gmail.com
|
5;Иванов;Иван;Иванович;2002-03-11;Мужчина;+7;1111111111;dsjgbdskgb@yandex.ru;1
|
||||||
Зайцев;Федор;Александрович;2014-12-22;Мужчина;+7;6667774441;asert@mail.ru
|
6;Плешкова;Анастасия;Денисовна;2006-11-10;Женжина;+7;3333333333;ple.anastasiya@gmail.com;0
|
||||||
Иванов;Петр;Михайлович;2002-03-11;Мужчина;+7;1111111111;asert@mail.ru
|
7;Зайцева;Анжела;Игоревна;1998-12-12;Женжина;+7;4444444444;aksjfhfka@mail.ru;0
|
||||||
Иванов;Роман;Сергеевич;2002-03-11;Мужчина;+7;1111111111;ple.anastasiya@gmail.com
|
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
|
<?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/Information.php";
|
||||||
//require_once "src/FullName.php";
|
//require_once "src/FullName.php";
|
||||||
//require_once "src/Contacts.php";
|
//require_once "src/Contacts.php";
|
||||||
//require_once "src/AdditionallyInfo.php";
|
//require_once "src/AdditionallyInfo.php";
|
||||||
//require_once "info.php";
|
//require_once "info.php";
|
||||||
//require_once "table.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*/
|
|
51
info.php
51
info.php
@ -2,10 +2,12 @@
|
|||||||
|
|
||||||
namespace src;
|
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 "vendor/autoload.php";
|
||||||
/*require_once "Search.php";*/
|
|
||||||
|
|
||||||
$fileName = "Information.txt";
|
$fileName = "Information.txt";
|
||||||
$fileModeOpen = "a";
|
$fileModeOpen = "a";
|
||||||
@ -13,44 +15,11 @@ $fileModeOpen = "a";
|
|||||||
$fullInformation = new Information();
|
$fullInformation = new Information();
|
||||||
$fullInformation->load($_REQUEST);
|
$fullInformation->load($_REQUEST);
|
||||||
|
|
||||||
echo "<pre>";
|
|
||||||
print_r($fullInformation);
|
|
||||||
$string = $fullInformation->toString();
|
$string = $fullInformation->toString();
|
||||||
|
|
||||||
$file = fopen($fileName, $fileModeOpen);
|
$obj = new FileDatabaseDriver();
|
||||||
fwrite($file, $string);
|
$obj->connect(__DIR__ . "/Information.txt");
|
||||||
fclose($file);
|
$obj->save($string);
|
||||||
|
$obj->close();
|
||||||
|
|
||||||
$formSearch =
|
require "views/search.php";
|
||||||
'<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";
|
|
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
|
<?php
|
||||||
|
|
||||||
|
namespace src;
|
||||||
|
|
||||||
|
use src\dto\BaseDTO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @property int $id
|
||||||
* @property string $surname
|
* @property string $surname
|
||||||
* @property string $name
|
* @property string $name
|
||||||
* @property string $patronymic
|
* @property string $patronymic
|
||||||
@ -10,8 +15,9 @@
|
|||||||
* @property string $phoneNumber
|
* @property string $phoneNumber
|
||||||
* @property string $email
|
* @property string $email
|
||||||
*/
|
*/
|
||||||
class Information
|
class Information extends BaseDTO
|
||||||
{
|
{
|
||||||
|
public int $id;
|
||||||
public string $surname;
|
public string $surname;
|
||||||
public string $name;
|
public string $name;
|
||||||
public string $patronymic;
|
public string $patronymic;
|
||||||
@ -20,51 +26,22 @@ class Information
|
|||||||
public string $countryCode;
|
public string $countryCode;
|
||||||
public string $phoneNumber;
|
public string $phoneNumber;
|
||||||
public string $email;
|
public string $email;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $dataArray
|
* @return array
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function load(array $dataArray): void
|
public function fillable(): array
|
||||||
{
|
{
|
||||||
if ($dataArray) {
|
// return [
|
||||||
$this->surname = $dataArray['surname'] ?? '';
|
// 'surname', 'name', 'patronymic', 'dateOfBirth', 'gender', 'countryCode', 'phoneNumber', 'email'
|
||||||
$this->name = $dataArray['name'] ?? '';
|
// ];
|
||||||
$this->patronymic = $dataArray['patronymic'] ?? '';
|
return [
|
||||||
$this->dateOfBirth = $dataArray['dateOfBirth'] ?? '';
|
$this->surname, $this->name, $this->patronymic, $this->dateOfBirth, $this->gender, $this->countryCode, $this->phoneNumber, $this->email, "\n"
|
||||||
$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";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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>
|
<body>
|
||||||
<?php
|
<?php
|
||||||
$file = fopen("Information.txt", "r");
|
$file = fopen("Information.txt", "r");
|
||||||
function PrintStringOfTable($file)
|
function PrintStringOfTable($file): void
|
||||||
{
|
{
|
||||||
$buf = fgets($file, filesize("Information.txt")); ?>
|
$buf = fgets($file, filesize("Information.txt")); ?>
|
||||||
<tr>
|
<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
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 42ab26a3db1cef8319985fc3a0f5d23d2dff4e3b
|
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>
|
Loading…
Reference in New Issue
Block a user