'com_deployer', 'tp' => 'com_tovar_price', ]; if(isset($map_alias_option[$option])){ $option = $_REQUEST['option'] = $map_alias_option[$option]; } $mainframe = mosMainFrame::getInstance(true); $option = str_replace('com_', '', $option); $file_com = joosPack::getPathApp('components/com_'.$option.'/'.$option.'.cli.php'); // перевіряємо, який файл необхідно підключити, дані беруться з запиту GET if(file_exists($file_com)) { $stopwatch = new Symfony\Component\Stopwatch\Stopwatch(); $stopwatch->start($option.'/'.$task); // if(!in_array($option.'/'.$task, ['console/every_minutes', 'console/every_hour'])){ // joosCli::log($option.'/'.$task); // } joosCli::grey('-> Start '.$option.'/'.$task); try { require_once ($file_com); JoiAdmin::dispatch(); $event = $stopwatch->stop($option.'/'.$task); $str_stopwatch = sprintf('%.2F MiB, %.3F s', $event->getMemory() / 1024 / 1024, $event->getDuration() / 1000); joosCli::grey( '<- Complite '.$option.'/'.$task.' - '.$str_stopwatch); // if($event->getDuration() > 200 || $event->getMemory() > 10*1024*1024){ joosCli::log($option.'/'.$task, ['stopwatch' => $str_stopwatch, 'start_time' => _CURRENT_SERVER_TIME, 'file_com' => $file_com, 'argv' => $argv]); // } }catch (Exception $e){ $event = $stopwatch->stop($option.'/'.$task); $str_stopwatch = sprintf('%.2F MiB, %.3F s', $event->getMemory() / 1024 / 1024, $event->getDuration() / 1000); joosCli::error('<- Exception '.$option.'/'.$task.' - '.$str_stopwatch); joosCli::log($option.'/'.$task, [ 'Exception' => [ 'message' => $e->getMessage(), 'code' => $e->getCode(), 'file' => $e->getFile().':'.$e->getLine(), 'trace' => $e->getTrace(), ], 'stopwatch' => $str_stopwatch, 'start_time' => _CURRENT_SERVER_TIME, ], \Monolog\Level::Critical ); dump($e); } echo PHP_EOL; } else { joosCli::error('error - '.$option.'::'.$task.' - not file exists: '.$file_com); } unset($mainframe); } joosEvents::has_events('terminate') ? joosEvents::fire_events('terminate', []) : null; exit; } define('JVERBOSITY', false); //сайт offline if(joosConfig::get('offline')) { require (JPATH_BASE.DS.'templates'.DS.'offline.php'); return; } // редирект с HTTP на HTTPS $https = false; if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && mosGetParam($_SERVER, 'HTTP_X_FORWARDED_PROTO') == 'https'){ $https = true; }elseif(isset($_SERVER['REQUEST_SCHEME']) && mosGetParam($_SERVER, 'REQUEST_SCHEME') == 'https'){ $https = true; }elseif(isset($_SERVER['HTTPS']) && mosGetParam($_SERVER, 'HTTP_X_FORWARDED_PROTO') == 'on'){ $https = true; } //if(joosConfig::get('only_https') && !$https){ // $redirect = "https://".mosGetParam($_SERVER, 'HTTP_HOST').mosGetParam($_SERVER, 'REQUEST_URI'); // header("HTTP/1.1 301 Moved Permanently"); // header("Location: $redirect"); // exit(); //} // якщо AJAX запит до сраниці if ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && mosGetParam($_SERVER, 'HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest') || isset($_GET['ajax'])) { define('JAJAX', true); require_once (JPATH_BASE.DS.'ajax.index.php'); joosEvents::has_events('terminate') ? joosEvents::fire_events('terminate', []) : null; return; } define('JAJAX', false); $mainframe = mosMainFrame::getInstance(); $option = $mainframe->option; //компонент $task = (string)mosGetParam($_REQUEST, 'task', ''); // ua_redirect $lang = mosGetParam($_GET, 'lang'); if('ua' !== joosConfig::get('lang_default') && joosConfig::get('seo:ua_redirect') && !in_array($option, ['api', 'sitemap'])){ // перевірка укр.мови в заголовках браузера $is_header_lang_ua = false; $header_langs = mosGetParam($_SERVER, 'HTTP_ACCEPT_LANGUAGE'); if($header_langs){ $header_langs = Symfony\Component\HttpFoundation\HeaderUtils::split($header_langs, ',;'); foreach ($header_langs as $hl){ $l = $hl[0]; if(in_array($l, ['uk', 'uk-UA'])){ $is_header_lang_ua = true; } } } try{ // якщо головна if('/' === mosGetParam($_SERVER, 'REQUEST_URI')){ if(empty($_COOKIE['slang'])){ $reader = new GeoIp2\Database\Reader(JPATH_BASE.'/media/data/GeoLite2-Country.mmdb'); $record = $reader->country(mosMainFrame::getIP()); $ip_country = mb_strtolower($record->country->isoCode ?? ''); if('ua' === $ip_country || $is_header_lang_ua){ // якщо ру версія та клієнт з України - редирект if('ua' !== $lang){ ob_end_clean(); header('HTTP/1.1 302 Found'); header("Location: " . mosGetParam($_GET, 'uri_ua')); exit(); } // якщо немає куки мовної - записуємо if('undefined' !== $lang){ setcookie('slang', $lang , time()+3600*24*30, '/'); } } }elseif('ua' === $_COOKIE['slang']){ ob_end_clean(); header('HTTP/1.1 302 Found'); header("Location: " . JPATH_SITE.'/ua'); exit(); } } // // якщо не потрібно визначати мову // if(!empty($_SERVER['HTTP_REFERER']) // || false !== mb_stripos(($_SERVER['REQUEST_URI'] ?? ''), 'gclid=') // || false !== mb_stripos(($_SERVER['REQUEST_URI'] ?? ''), 'utm_medium=cpc') // // якщо не головна і не має обраної мови у куках не намагаємось редіректити // || ('/' !== mosGetParam($_SERVER, 'REQUEST_URI') && empty($_COOKIE['slang'])) // ){ // setcookie('slang', '', time() - 3600, '/'); // // новий візит // }elseif(empty($_COOKIE['slang'])) { // // // черговий візит // }elseif($lang !== $_COOKIE['slang'] && 'undefined' !== $_COOKIE['slang']){ // ob_end_clean(); // header('HTTP/1.1 302 Found'); // // header("Location: " . mosGetParam($_GET, 'uri_'.$_COOKIE['slang'])); // exit(); // } }catch (GeoIp2\Exception\AddressNotFoundException $e){ }catch (Exception $e){ if(JDEBUG){ dd($e); } } } // Asset Preloading //if(in_array($option, ['shop', 'pages'])) { // if(file_exists(joosPack::getPathApp('templates/css/assets.header.min.css'))){ // ob_start(); //// header('HTTP/1.1 103 Early Hints'); // // header('Link: <' . str_replace(JPATH_SITE, '', joosPack::getUrlApp('templates/css/assets.header.min.css')) . '>; rel=preload; as=style', false); // // $finder = new \Symfony\Component\Finder\Finder(); // $finder->files()->in(joosPack::getPathApp('templates/js'))->name('assets.*.js'); // $finder->sortByAccessedTime(); // /** @var SplFileInfo $f */ // foreach ($finder as $f) { // header('Link: <' . str_replace(JPATH_BASE, '', $f->getPath()) . '/' . $f->getFilename() . '>; rel=preload; as=script', false); // break; // } // ob_flush(); // flush(); // } //} $my = User::current(); /*** * @global - Місця для зберігання інформації обробки компонента */ $_MOS_OPTION = array(); // початок буферизації основного вмісту ob_start(); if($path = $mainframe->getPath('front')) { require_once ($path); JoiAdmin::dispatch(); } else { joosRoute::page404(); } $_MOS_OPTION['buffer'] = ob_get_contents(); ob_end_clean(); //hreflang $lang_second = joosConfig::get('lang_second'); mosMainFrame::getInstance()->addCustomHeadTag(''); if(in_array($lang_second, joosConfig::get('lang')) && $lang_second !== joosConfig::get('lang_default')){ mosMainFrame::getInstance()->addCustomHeadTag(''); mosMainFrame::getInstance()->addCustomHeadTag(''); mosMainFrame::getInstance()->addCustomHeadTag(''); mosMainFrame::getInstance()->addCustomHeadTag(''); } $_uri = explode('?', mosGetParam($_GET, 'uri')); if(empty(isset($_GET['page'])) && joosConfig::get('com_seo:canonical_all')){ mosMainFrame::getInstance()->addCustomHeadTag(''); } //SEO //індивідуальне SEO на сторінку if($task != 'doc_search'){ $url = joosRoute::$url_path_filter; $type_marka = mosGetParam($_GET, 'type_marka'); if($type_marka && $type_marka !== joosConfig::get('doc:type_transport_default')){ $url .= '_'.$type_marka; } $mainframe->getDBO()->setQuery("SELECT * FROM jos_seo WHERE url = '".$url."' AND state = 1"); $mainframe->getDBO()->loadObject($seo_i); } if(isset($seo_i)){ mosMainFrame::getInstance()->strartWrapJS(); ?> endWrapJS(); if(!isset($seo)){ $seo = new stdClass(); } $seo->title_page = __obj($seo_i, 'title_page', false) ?: ($seo->title_page ?? ''); $seo->title = __obj($seo_i, 'title', false) ?: ($seo->title ?? ''); $seo->meta_keywords = __obj($seo_i, 'meta_keywords', false) ?: ($seo->meta_keywords ?? ''); $seo->meta_description = __obj($seo_i, 'meta_description', false) ?: ($seo->meta_description ?? ''); $seo->text = __obj($seo_i, 'text', false) ?: ($seo->text ?? ''); $seo->faq = __obj($seo_i, 'faq', false) ?: (isset($seo->faq) ? __obj($seo, 'faq', false) : ''); $seo->faq_2colum = $seo_i->faq_2colum ?? ''; $seo->html_editor = $seo_i->html_editor ?? ''; // автоматично додавання номера сторінки при пагінації дл я індивідуального СЕО опису $page = mosGetParam($_GET, 'page'); if ($page > 1 && false === mb_stripos($seo->title_page, __('Страница'))) { $seo->title_page = rtrim($seo->title_page, '.') . '. ' . __('Страница') . ' ' . $page; } if ($page > 1 && false === mb_stripos($seo->meta_description, __('Страница'))) { $seo->meta_description = rtrim($seo->meta_description, '.') . '. ' . __('Страница') . ' ' . $page; } } if(isset($seo) && $seo){ if($seo->title_page){ mosMainFrame::getInstance()->setPageTitle($seo->title_page); } if($seo->meta_keywords){ mosMainFrame::getInstance()->addMetaTag('keywords', $seo->meta_keywords); } if($seo->meta_description){ mosMainFrame::getInstance()->addMetaTag('description', $seo->meta_description); } if($seo->title){ $find = preg_match('#]*)>(.(?!))*?.?#is', $_MOS_OPTION['buffer'], $current_h1_pregs); $new_h1 = '' . $seo->title . ''; if($find){ $_MOS_OPTION['buffer'] = str_replace($current_h1_pregs[0], $new_h1, $_MOS_OPTION['buffer']); } } if($seo->faq){ $seo->faq = json_decode($seo->faq); } } header('Cache-Control: no-store, no-cache, must-revalidate'); header('Content-type: text/html; charset=UTF-8'); joosShield::securityHeaders(); $noindex = joosRoute::noindex($option, $task, $seo_i ?? null); if(joosConfig::get('seo:self_canonical') && false === $noindex){ joosRoute::self_canonical(); } ob_start(); require_once joosPack::getPathApp('templates/index.php'); $_template_body = ob_get_contents(); ob_end_clean(); //робимо посилання абсолютними //$_template_body = str_replace(array('href="/', 'src="/'), array('href="'.JPATH_SITE.'/', 'src="'.JPATH_SITE.'/'), $_template_body); joosEvents::has_events('index.php:before_render_html') ? joosEvents::fire_events('index.php:before_render_html', [&$_template_body]) : null; echo $_template_body; // підрахунок часу генерації сторінки echo JDEBUG ? mosMainFrame::debug(_TIME_START) : "\n".''; joosEvents::has_events('terminate') ? joosEvents::fire_events('terminate', []) : null;