merge
This commit is contained in:
commit
67b3f62728
545 files changed
+22942
-65
No files matched your search
@@ -3,6 +3,7 @@
|
|||||||
namespace kernel\services;
|
namespace kernel\services;
|
||||||
|
|
||||||
use DirectoryIterator;
|
use DirectoryIterator;
|
||||||
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
use kernel\EntityRelation;
|
use kernel\EntityRelation;
|
||||||
use kernel\Flash;
|
use kernel\Flash;
|
||||||
use kernel\helpers\Debug;
|
use kernel\helpers\Debug;
|
||||||
@@ -19,6 +20,12 @@ class ModuleService
|
|||||||
|
|
||||||
protected null|bool $serverAvailable = null;
|
protected null|bool $serverAvailable = null;
|
||||||
|
|
||||||
|
public ModuleShopService $moduleShopService;
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->moduleShopService = new ModuleShopService();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $module
|
* @param string $module
|
||||||
* @return false|array|string
|
* @return false|array|string
|
||||||
@@ -458,12 +465,13 @@ class ModuleService
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws GuzzleException
|
||||||
|
*/
|
||||||
public function isLastVersion(string $slug): bool
|
public function isLastVersion(string $slug): bool
|
||||||
{
|
{
|
||||||
if ($this->isServerAvailable()) {
|
if ($this->isServerAvailable()) {
|
||||||
$modules_info = RESTClient::request($_ENV['MODULE_SHOP_URL'] . '/api/module_shop/gb_slug');
|
$modules_info = $this->moduleShopService->getGroupedBySlugModules();
|
||||||
|
|
||||||
$modules_info = json_decode($modules_info->getBody()->getContents(), true);
|
|
||||||
|
|
||||||
$mod_info = $this->getModuleInfoBySlug($slug);
|
$mod_info = $this->getModuleInfoBySlug($slug);
|
||||||
|
|
||||||
@@ -491,16 +499,18 @@ class ModuleService
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws GuzzleException
|
||||||
|
*/
|
||||||
public function isShopModule(string $slug): bool
|
public function isShopModule(string $slug): bool
|
||||||
{
|
{
|
||||||
if ($this->isServerAvailable()) {
|
if ($this->isServerAvailable()) {
|
||||||
$modules_info = RESTClient::request($_ENV['MODULE_SHOP_URL'] . '/api/module_shop/gb_slug');
|
$modules_info = $this->moduleShopService->getGroupedBySlugModules();
|
||||||
|
|
||||||
if (!$this->issetModuleShopToken()) {
|
if (!$this->issetModuleShopToken()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$modules_info = json_decode($modules_info->getBody()->getContents(), true);
|
|
||||||
if (isset($modules_info)) {
|
if (isset($modules_info)) {
|
||||||
$mod_info = $this->getModuleInfoBySlug($slug);
|
$mod_info = $this->getModuleInfoBySlug($slug);
|
||||||
foreach ($modules_info as $mod) {
|
foreach ($modules_info as $mod) {
|
||||||
|
|||||||
@@ -3,7 +3,11 @@
|
|||||||
namespace kernel\services;
|
namespace kernel\services;
|
||||||
|
|
||||||
use GuzzleHttp\Exception\GuzzleException;
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
|
use kernel\Flash;
|
||||||
|
use kernel\helpers\Debug;
|
||||||
|
use kernel\helpers\Files;
|
||||||
use kernel\helpers\RESTClient;
|
use kernel\helpers\RESTClient;
|
||||||
|
use kernel\Request;
|
||||||
|
|
||||||
class ModuleShopService
|
class ModuleShopService
|
||||||
{
|
{
|
||||||
@@ -17,20 +21,71 @@ class ModuleShopService
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @param string $email
|
||||||
|
* @return mixed
|
||||||
* @throws GuzzleException
|
* @throws GuzzleException
|
||||||
*/
|
*/
|
||||||
public function email_auth(string $email)
|
public function email_auth(string $email): mixed
|
||||||
{
|
{
|
||||||
$request = RESTClient::post($this->url . "/api/secure/email_auth", ['email' => $email], false);
|
$request = RESTClient::post($this->url . "/api/secure/email_auth", ['email' => $email], false);
|
||||||
|
|
||||||
return json_decode($request->getBody()->getContents(), true);
|
return json_decode($request->getBody()->getContents(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function code_check(string $code)
|
/**
|
||||||
|
* @param string $code
|
||||||
|
* @return mixed
|
||||||
|
* @throws GuzzleException
|
||||||
|
*/
|
||||||
|
public function code_check(string $code): mixed
|
||||||
{
|
{
|
||||||
$request = RESTClient::post($this->url . "/api/secure/code_check", ['code' => $code], false);
|
$request = RESTClient::post($this->url . "/api/secure/code_check", ['code' => $code], false);
|
||||||
|
|
||||||
return json_decode($request->getBody()->getContents(), true);
|
return json_decode($request->getBody()->getContents(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return mixed
|
||||||
|
* @throws GuzzleException
|
||||||
|
*/
|
||||||
|
public function getGroupedBySlugModules(): mixed
|
||||||
|
{
|
||||||
|
$modulesInfo = RESTClient::request($_ENV['MODULE_SHOP_URL'] . '/api/module_shop/gb_slug');
|
||||||
|
return json_decode($modulesInfo->getBody()->getContents(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $slug
|
||||||
|
* @return void
|
||||||
|
* @throws GuzzleException
|
||||||
|
*/
|
||||||
|
public function installModule(string $slug): void
|
||||||
|
{
|
||||||
|
$moduleInfo = $this->getModuleInfoBySlug($slug);
|
||||||
|
|
||||||
|
$moduleInfo = RESTClient::request($_ENV['MODULE_SHOP_URL'] . '/api/module_shop/install/' . $moduleInfo['id']);
|
||||||
|
$moduleInfo = json_decode($moduleInfo->getBody()->getContents(), true);
|
||||||
|
|
||||||
|
Files::uploadByUrl($_ENV['MODULE_SHOP_URL'] . $moduleInfo['path_to_archive'], RESOURCES_DIR . "/tmp/modules");
|
||||||
|
|
||||||
|
(new ModuleService())->installModule('/resources/tmp/modules/' . basename($moduleInfo['path_to_archive']));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $slug
|
||||||
|
* @return false|mixed
|
||||||
|
* @throws GuzzleException
|
||||||
|
*/
|
||||||
|
public function getModuleInfoBySlug(string $slug): mixed
|
||||||
|
{
|
||||||
|
$modulesInfo = $this->getGroupedBySlugModules();
|
||||||
|
foreach ($modulesInfo as $module) {
|
||||||
|
if ($module['slug'] === $slug) {
|
||||||
|
return $module;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace kernel\services;
|
namespace kernel\services;
|
||||||
|
|
||||||
use DirectoryIterator;
|
use DirectoryIterator;
|
||||||
|
use kernel\Flash;
|
||||||
use kernel\helpers\Debug;
|
use kernel\helpers\Debug;
|
||||||
use kernel\helpers\Files;
|
use kernel\helpers\Files;
|
||||||
use kernel\helpers\Manifest;
|
use kernel\helpers\Manifest;
|
||||||
@@ -19,12 +20,14 @@ class ThemeService
|
|||||||
|
|
||||||
protected ModuleService $moduleService;
|
protected ModuleService $moduleService;
|
||||||
|
|
||||||
|
protected ModuleShopService $moduleShopService;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->option = new Option();
|
$this->option = new Option();
|
||||||
$this->findActiveTheme();
|
$this->findActiveTheme();
|
||||||
$this->moduleService = new ModuleService();
|
$this->moduleService = new ModuleService();
|
||||||
|
$this->moduleShopService = new ModuleShopService();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -55,7 +58,13 @@ class ThemeService
|
|||||||
return $this->active_theme;
|
return $this->active_theme;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setActiveTheme(string $theme): void
|
|
||||||
|
/**
|
||||||
|
* @param string $theme
|
||||||
|
* @return bool
|
||||||
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||||
|
*/
|
||||||
|
public function setActiveTheme(string $theme): bool
|
||||||
{
|
{
|
||||||
$activeTheme = $this->option::where("key", "active_theme")->first();
|
$activeTheme = $this->option::where("key", "active_theme")->first();
|
||||||
|
|
||||||
@@ -63,21 +72,25 @@ class ThemeService
|
|||||||
if (isset($themeInfo['dependence'])) {
|
if (isset($themeInfo['dependence'])) {
|
||||||
$dependence_array = explode(',', $themeInfo['dependence']);
|
$dependence_array = explode(',', $themeInfo['dependence']);
|
||||||
foreach ($dependence_array as $depend) {
|
foreach ($dependence_array as $depend) {
|
||||||
$this->moduleService->runInitScript($depend);
|
if (!$this->moduleService->isInstall($depend)) {
|
||||||
}
|
if ($this->moduleService->isShopModule($depend)) {
|
||||||
}
|
$this->moduleShopService->installModule($depend);
|
||||||
|
} else {
|
||||||
$currentThemeInfo = $this->getActiveThemeInfo();
|
Flash::setMessage("error", "Модуль не найден в IT Guild Framework Shop.");
|
||||||
|
return false;
|
||||||
if (isset($currentThemeInfo['dependence'])) {
|
}
|
||||||
$dependence_array = explode(',', $currentThemeInfo['dependence']);
|
} else {
|
||||||
foreach ($dependence_array as $depend) {
|
if (!$this->moduleService->isActive($depend)) {
|
||||||
$this->moduleService->runDeactivateScript($depend);
|
$this->moduleService->setActiveModule($depend);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$activeTheme->value = getConst($theme);
|
$activeTheme->value = getConst($theme);
|
||||||
$activeTheme->save();
|
$activeTheme->save();
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getActiveThemeInfo(): false|array|string
|
public function getActiveThemeInfo(): false|array|string
|
||||||
|
|||||||
@@ -9,5 +9,5 @@
|
|||||||
"resource": "/resources/themes/default",
|
"resource": "/resources/themes/default",
|
||||||
"resource_path": "{RESOURCES}/themes/default",
|
"resource_path": "{RESOURCES}/themes/default",
|
||||||
"routs": "routs/default.php",
|
"routs": "routs/default.php",
|
||||||
"dependence": "user,option,menu,secure"
|
"dependence": ""
|
||||||
}
|
}
|
||||||
@@ -79,7 +79,5 @@ if ($moduleService->isActive('module_shop_client')) {
|
|||||||
ModuleTabsWidget::create()->run();
|
ModuleTabsWidget::create()->run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$table->create();
|
$table->create();
|
||||||
$table->render();
|
$table->render();
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
// Responsive images (ensure images don't scale beyond their parents)
|
// Responsive default_user_photo (ensure default_user_photo don't scale beyond their parents)
|
||||||
//
|
//
|
||||||
// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.
|
// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.
|
||||||
// We previously tried the "images are responsive by default" approach in Bootstrap v2,
|
// We previously tried the "default_user_photo are responsive by default" approach in Bootstrap v2,
|
||||||
// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)
|
// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)
|
||||||
// which weren't expecting the images within themselves to be involuntarily resized.
|
// which weren't expecting the default_user_photo within themselves to be involuntarily resized.
|
||||||
// See also https://github.com/twbs/bootstrap/issues/18178
|
// See also https://github.com/twbs/bootstrap/issues/18178
|
||||||
.img-fluid {
|
.img-fluid {
|
||||||
@include img-fluid;
|
@include img-fluid;
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ figure {
|
|||||||
|
|
||||||
img {
|
img {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
border-style: none; // Remove the border on images inside links in IE 10-.
|
border-style: none; // Remove the border on default_user_photo inside links in IE 10-.
|
||||||
}
|
}
|
||||||
|
|
||||||
svg {
|
svg {
|
||||||
|
|||||||
@@ -5,12 +5,12 @@
|
|||||||
|
|
||||||
// Responsive image
|
// Responsive image
|
||||||
//
|
//
|
||||||
// Keep images from scaling beyond the width of their parents.
|
// Keep default_user_photo from scaling beyond the width of their parents.
|
||||||
|
|
||||||
@mixin img-fluid {
|
@mixin img-fluid {
|
||||||
// Part 1: Set a maximum relative to the parent
|
// Part 1: Set a maximum relative to the parent
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
// Part 2: Override the height to auto, otherwise images will be stretched
|
// Part 2: Override the height to auto, otherwise default_user_photo will be stretched
|
||||||
// when setting a width and height attribute on the img element.
|
// when setting a width and height attribute on the img element.
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |
File renamed without changes.
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
@@ -0,0 +1,7 @@
|
|||||||
|
/*!
|
||||||
|
* Bootstrap v4.3.1 (https://getbootstrap.com/)
|
||||||
|
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("resources/admin_themes/custom/js/popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","resources/admin_themes/custom/js/popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t, g, u){"use strict";function i(t, e){for(var n=0; n<e.length; n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function s(t, e, n){return e&&i(t.prototype,e),n&&i(t,n),t}function l(o){for(var t=1; t<arguments.length; t++){var r=null!=arguments[t]?arguments[t]:{},e=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.forEach(function(t){var e,n,i;e=o,i=r[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i})}return o}g=g&&g.hasOwnProperty("default")?g.default:g,u=u&&u.hasOwnProperty("default")?u.default:u;var e="transitionend";function n(t){var e=this,n=!1;return g(this).one(_.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||_.triggerTransitionEnd(e)},t),this}var _={TRANSITION_END:"bsTransitionEnd",getUID:function(t){for(; t+=~~(1e6*Math.random()),document.getElementById(t););return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=g(t).css("transition-duration"),n=g(t).css("transition-delay"),i=parseFloat(e),o=parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){g(t).trigger(e)},supportsTransitionEnd:function(){return Boolean(e)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t, e, n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],s=r&&_.isElement(r)?"element":(a=r,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"!=typeof t.getRootNode)return t instanceof ShadowRoot?t:t.parentNode?_.findShadowRoot(t.parentNode):null;var e=t.getRootNode();return e instanceof ShadowRoot?e:null}};g.fn.emulateTransitionEnd=n,g.event.special[_.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(g(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var o="alert",r="bs.alert",a="."+r,c=g.fn[o],h={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},f="alert",d="fade",m="show",p=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){g.removeData(this._element,r),this._element=null},t._getRootElement=function(t){var e=_.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=g(t).closest("."+f)[0]),n},t._triggerCloseEvent=function(t){var e=g.Event(h.CLOSE);return g(t).trigger(e),e},t._removeElement=function(e){var n=this;if(g(e).removeClass(m),g(e).hasClass(d)){var t=_.getTransitionDurationFromElement(e);g(e).one(_.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){g(t).detach().trigger(h.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(r);e||(e=new i(this),t.data(r,e)),"close"===n&&e[n](this)})},i._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),i}();g(document).on(h.CLICK_DATA_API,'[data-dismiss="alert"]',p._handleDismiss(new p)),g.fn[o]=p._jQueryInterface,g.fn[o].Constructor=p,g.fn[o].noConflict=function(){return g.fn[o]=c,p._jQueryInterface};var v="button",y="bs.button",E="."+y,C=".data-api",T=g.fn[v],S="active",b="btn",I="focus",D='[data-toggle^="button"]',w='[data-toggle="buttons"]',A='input:not([type="hidden"])',N=".active",O=".btn",k={CLICK_DATA_API:"click"+E+C,FOCUS_BLUR_DATA_API:"focus"+E+C+" blur"+E+C},P=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=g(this._element).closest(w)[0];if(n){var i=this._element.querySelector(A);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(S))t=!1;else{var o=n.querySelector(N);o&&g(o).removeClass(S)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disLine truncated
|
||||||
|
//# sourceMappingURL=bootstrap.min.js.map
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 545 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user