Skip to content

Commit e43b803

Browse files
authored
Merge pull request #16 from SimpleREST/develop
Develop
2 parents bbcf21d + ac2a653 commit e43b803

File tree

11 files changed

+284
-21
lines changed

11 files changed

+284
-21
lines changed

src/Console/Base/Command.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* Класс:
1111
* - содержит реализации общих методов для всех команд;
1212
* - инициирует все свойства команд, общие для всех команд;
13-
* - имплементи́рует общий для всех интерфейс;
13+
* - имплементируют общий для всех интерфейс;
1414
*
1515
*/
1616
abstract class Command implements Commands

src/Console/Base/Input.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public function hasCommands(): bool
6262
}
6363

6464
/**
65-
* Ирпизнак присутствия как минимум одной опции
65+
* Признак присутствия как минимум одной опции
6666
* @return bool
6767
*/
6868
public function hasOptions(): bool

src/Console/Base/Output.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ public function writels(string $message)
6868

6969

7070
/**
71-
* Выводит прогреc бар вида: [наименование процесса] .... 50%
71+
* Выводит прогресс бар вида: [наименование процесса] .... 50%
7272
* ---
7373
*
7474
* @param int $percent Численное значение процента выполнения процесса [от 0 до 100], иные значения будут приведены
7575
* к ближайшему пределу (110->100, -20 -> 0) значения отличных от INT типов вызовут исключение
76-
* @param string|null $name Наименование процесса для прогессбара, в случае если требуется его отобразить в именно
76+
* @param string|null $name Наименование процесса для ProgressBar в случае если требуется его отобразить в именно
7777
* в строке прогресс бара, в противном случае параметр указывать нет необходимости, он будет заменен на пустую строку.
7878
* Либо можно поставить вместо наименования отступ (пустой или форматированный)
7979
* @param int|null $totalLengthStringProgressBar Общая итоговая длина прогресс бара в символах (не обязателен)

src/Console/Base/Terminal.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ function readFromProcess($command)
8989
* Кодовая страница:
9090
*
9191
* Элемент массив [0] содержит все сообщение целиком (String)
92-
* Элементы массива [1],[2], [3], [4] и [5] содержат перечисленные ниже заголовка сообщения параметры
92+
* Элементы массива [1], [2], [3], [4] и [5] содержат перечисленные ниже заголовка сообщения параметры
9393
* соответственно. (String) в пределах данного метода преобразование типов не выполняется.
9494
*/
9595
private static function getConsoleMode(): ?array

src/Contracts/Main/Application.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace Stub\Framework\Contracts\Main;
44

5+
use Stub\Framework\Main\MainConfig;
6+
57
/**
68
* Интерфейс приложения
79
*/
@@ -22,6 +24,22 @@ public function version(): string;
2224
*/
2325
public function basePath(string $path = ''): string;
2426

27+
/**
28+
* Пpинимает настройки конфигурации текущего выполнения
29+
*
30+
* @param MainConfig $param
31+
* @return void
32+
*/
33+
public function setConfig(MainConfig $param);
34+
35+
/**
36+
* Возвращает настройки конфигурации текущего выполнения
37+
* с использованием общего интерфейса редактирования конфигурации
38+
*
39+
* @return UserEditable
40+
*/
41+
public function getConfig(): UserEditable;
42+
2543
/**
2644
* Возвращает установленную локаль.
2745
*
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
namespace Stub\Framework\Contracts\Main;
4+
5+
interface UserEditable
6+
{
7+
/**
8+
* Возвращает набор локализаций настроенный в конфигурации
9+
* для отображения на странице
10+
*
11+
* @return array
12+
*/
13+
public static function getLanguageSet(): array;
14+
15+
/**
16+
* Возвращает внутреннее наименованиие директории языкового набора назначенного по умолчанию
17+
* значение может быть пустым, в этом случае языковой ресурс по умолчанию будет назначен дефолтный
18+
* из коробки.
19+
* @return string
20+
*/
21+
public static function getDefaultLanguage(): string;
22+
23+
/**
24+
* Возвращает значение режима автоматического определения языка браузера пользователя
25+
* Если этот режим выключить, система не будет определять предпочтительный язык браузера и назначать соответствующий
26+
* языковой ресурс при отсутствии явных указаний в URI на конкретный язык локализации. В этом случае будет назначен
27+
* язык по умолчанию или (если он не назначен) будет назначен общий основной языковой ресурс находящийся вне
28+
* локализаций
29+
* @return bool
30+
*/
31+
public static function IsAutomaticDetectionBrowserLanguageEnabled(): bool;
32+
33+
/**
34+
* Возвращает значение режима принудительного отключения возможности выбора языка отображения
35+
* Данный режим только сигнализирует о том, элемент интерфейса отвечающий за возможность выбора
36+
* языка будет отключен (в базовом шаблоне). Грубо говоря это признак того, что пользователю не должно
37+
* быть выдано право выбора языка по желанию.
38+
* Однако данный признак не исключает работу логики программы на предмет автоматического определения языка
39+
* отображения на основе настроек языка браузера.
40+
* @return bool
41+
*/
42+
public static function IsLanguageSelectorDisabled(): bool;
43+
44+
/**
45+
* Возвращает значение режима принудительного отключения локализации ресурса совсем.
46+
* Т.е. система не будет определять автоматически предпочтительный язык браузера, даже если флаг этого режима
47+
* установлен как истина (включен), система не будет пытаться назначить и назначать языковой ресурс даже если
48+
* будет передан параметр языкового ресурса через URI. В реализации базового шаблона заглушки, также будет скрыт
49+
* селектор выбора языка локализации ресурса.
50+
* В любом случае будет назначен строковый ресурс указанный в настройках как Язык по умолчанию, а в случае
51+
* отсутствия этого значения, языковой ресурс будет назначен основной (без локализации, который находится вне
52+
* языковых директорий в директории Values)
53+
* @return bool
54+
*/
55+
public static function IsResourceLocaleDisabled(): bool;
56+
}

src/Http/View/Stub.php

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
class Stub implements View
1313
{
1414

15+
private $app;
1516
private $docType;
1617
private $head;
1718
private $body;
@@ -29,21 +30,23 @@ class Stub implements View
2930
public function __construct(Application $app, BaseDefaultStubResource $r)
3031
{
3132
$this->stringResources = $r;
32-
$this->generate($app);
33+
$this->app = $app;
34+
$this->generate();
3335
}
3436

3537
/**
3638
* Выполняется генерация наполнения основных блоков HTML документа заглушки
37-
* @param Application $app
3839
* @return void
3940
*/
40-
private function generate(Application $app)
41+
private function generate()
4142
{
4243
/**
4344
* Технический комментарий
44-
* @var \Stub\Framework\Main\Assets\BaseDefaultStubResource $r
45+
* @var BaseDefaultStubResource $r
4546
*/
47+
$app = $this->app;
4648
$r = $this->stringResources;
49+
$c = $app->getConfig();
4750
$this->docType = "<!DOCTYPE html>";
4851
$this->head = /** @lang text */
4952
"
@@ -57,15 +60,21 @@ private function generate(Application $app)
5760
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Raleway:300,300i,400,400i,600,600i,700,700i">
5861
5962
<!-- Favicons -->
60-
<link href="img/favicon.png" rel="icon">
61-
<link href="img/apple-touch-icon.png" rel="apple-touch-icon">
63+
<link href="/img/favicon.png" rel="icon">
64+
<link href="/img/apple-touch-icon.png" rel="apple-touch-icon">
6265
6366
<!-- Vendor CSS Files -->
64-
<link href="vendor/twbs/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
65-
<link href="vendor/simplerest/icofont/icofont.min.css" rel="stylesheet">
67+
<link href="/vendor/twbs/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
68+
<link href="/vendor/simplerest/icofont/icofont.min.css" rel="stylesheet">
69+
70+
<!-- Flag-icons-->
71+
<link
72+
rel="stylesheet"
73+
href="https://cdn.jsdelivr.net/gh/lipis/flag-icons@6.14.0/css/flag-icons.min.css"
74+
/>
6675
6776
<!-- Template Main CSS File -->
68-
<link href="css/main.css" rel="stylesheet">
77+
<link href="/css/main.css" rel="stylesheet">
6978
';
7079

7180
$this->body = /** @lang text */
@@ -78,10 +87,13 @@ private function generate(Application $app)
7887
<a href="index.php">
7988
<span>' . $r::$domain . ' </span>
8089
</a>
81-
</h1>
90+
</h1>
8291
</div>
92+
8393
<div class="contact-link float-right">
84-
<a href="#contacts" class="scrollto">' . $r::$contacts_link_text . '</a>
94+
' . (($c::IsLanguageSelectorDisabled()) ? "" : $this->putLanguageSelector($r::$lang, $c::getLanguageSet())) . '
95+
96+
<a href="#contacts" class="scrollto"><span class="fi fi-' . $r::$lang . '"></span> ' . $r::$contacts_link_text . '</a>
8597
</div>
8698
</div>
8799
</header>
@@ -90,7 +102,7 @@ private function generate(Application $app)
90102
<div class="container-fluid" style="padding-right: 0; padding-left: 0;">
91103
<!-- ======= Base Stub Section ======= -->
92104
<section id="stub"
93-
style="background-image: url(\'img/' . $r::$base_background . '\')">
105+
style="background-image: url(\'/img/' . $r::$base_background . '\')">
94106
<div class="stub-container">
95107
<BR><BR>
96108
<h1>' . $r::$base_title . "</h1>
@@ -164,7 +176,7 @@ private function generate(Application $app)
164176
</footer><!-- End #footer -->
165177
';
166178
$this->endHtmlScripts = /** @lang text */
167-
'<script src="js/main.js"></script>';
179+
'<script src="/js/main.js"></script>';
168180
}
169181

170182
/**
@@ -181,4 +193,26 @@ public function getDocumentResult(): string
181193
$this->body,
182194
$this->endHtmlScripts);
183195
}
196+
197+
private function putLanguageSelector(string $languageCode, array $c = array()): string
198+
{
199+
$tpl = "";
200+
if (empty($c)) {
201+
$tpl .= '';
202+
} elseif (count($c) == 1) {
203+
$tpl .= strtoupper(key($c));
204+
} else {
205+
$tpl .= '<a><select onchange="window.location.href = this.options[this.selectedIndex].value">';
206+
foreach ($c as $key => $item) {
207+
$tpl .= '<option value="/' . strtolower($key) . '"';
208+
if (strtolower($key) == strtolower($languageCode)) {
209+
$tpl .= 'selected="selected"';
210+
}
211+
$tpl .= '>' . $item . '</option>';
212+
}
213+
$tpl .= ' </select></a>';
214+
}
215+
216+
return $tpl;
217+
}
184218
}

src/Main/Application.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Stub\Framework\Main;
44

55
use Stub\Framework\Contracts\Main\Application as BaseApplicationContract;
6+
use Stub\Framework\Contracts\Main\UserEditable;
67

78
/**
89
* Основной класс приложения (единый для консоли, http rest APi
@@ -15,7 +16,7 @@ class Application implements BaseApplicationContract
1516
*
1617
* @var string
1718
*/
18-
const VERSION = '0.1.2';
19+
const VERSION = '0.1.3';
1920

2021
/**
2122
* The base path for the SimpleStub installation.
@@ -31,6 +32,12 @@ class Application implements BaseApplicationContract
3132
*/
3233
protected $namespace;
3334

35+
/**
36+
* The application configuration object.
37+
*
38+
* @var string
39+
*/
40+
private $config;
3441

3542
/**
3643
* Конструктор экземпляра класса приложения
@@ -78,4 +85,14 @@ public function getNamespace(): string
7885
{
7986
return __NAMESPACE__;
8087
}
88+
89+
public function setConfig(MainConfig $param)
90+
{
91+
$this->config = $param;
92+
}
93+
94+
public function getConfig():UserEditable
95+
{
96+
return $this->config;
97+
}
8198
}

src/Main/Assets/BaseDefaultStubResource.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ abstract class BaseDefaultStubResource implements ContainingResources
6060
* ----
6161
* Значение строки содержащее ключевые слова отражающие содержание страницы, в виде строки в которой
6262
* ключевые слова или фразы перечислены через запятую.
63-
* ####<i>!!!Может учитываться поисковыми системами при определении соответствия страницы поисковым запросам!!!</i>
63+
* ####<i>!!! Может учитываться поисковыми системами при определении соответствия страницы поисковым запросам!!!</i>
6464
* @var string
6565
*/
6666
public static $domain = "SimpleStub";
@@ -190,5 +190,5 @@ abstract class BaseDefaultStubResource implements ContainingResources
190190
* Код языка по ISO 639-1 (двухбуквенный) содержимого страницы
191191
* @var string
192192
*/
193-
public static $lang = "en";
193+
public static $lang = "";
194194
}

src/Main/Http/Kernel.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44

55
use DateTime;
66
use Stub\Framework\Contracts\Main\Application;
7+
use Stub\Framework\Contracts\Main\UserEditable;
78
use Stub\Framework\Http\View\Stub;
89
use Stub\Framework\Main\Assets\BaseDefaultStubResource;
10+
use Stub\Framework\Main\MainConfig;
911

1012
/**
1113
* Класс ядра НТТР
@@ -18,6 +20,8 @@ class Kernel implements \Stub\Framework\Contracts\Http\Kernel
1820
*/
1921
protected $app;
2022

23+
private $config;
24+
2125
/**
2226
* Дата и время старта обрабатываемого запроса
2327
* @var DateTime|Null
@@ -76,4 +80,15 @@ public function terminate($request = null, $response = null)
7680
$this->app->terminate();
7781
exit($response);
7882
}
83+
84+
public function setConfig(MainConfig $param)
85+
{
86+
$this->config = $param;
87+
$this->app->setConfig($param);
88+
}
89+
90+
public function getConfig(): UserEditable
91+
{
92+
return $this->app->getConfig();
93+
}
7994
}

0 commit comments

Comments
 (0)