readImage($file);
if ($file_type === 'png')
{
$image->setImageFormat('webp');
$image->setImageCompressionQuality($compression_quality);
$image->setOption('webp:lossless', 'true');
}
$image->writeImage($output_file);
return $output_file;
}
return false;
}
static public function is_array_fix($value)
{
if (is_array($value) and count($value))
return true;
return false;
}
public static function suAppendHtmlById(&$s, $sId, $sHtml, &$oDoc = null)
{
return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, true, false);
}
public static function suInsertHtmlById(&$s, $sId, $sHtml, &$oDoc = null)
{
return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, false, true);
}
public static function suAddHtmlBeforeById(&$s, $sId, $sHtml, &$oDoc = null)
{
return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, false, true, true);
}
public static function suAddHtmlAfterById(&$s, $sId, $sHtml, &$oDoc = null)
{
return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, true, false, true);
}
public static function suSetHtmlById(&$s, $sId, $sHtml, &$oDoc = null)
{
return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, true, true);
}
public static function suReplaceHtmlElementById(&$s, $sId, $sHtml, &$oDoc = null)
{
return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, false, false);
}
public static function suRemoveHtmlElementById(&$s, $sId, &$oDoc = null)
{
return \S::suSetHtmlElementById($oDoc, $s, $sId, null, false, false);
}
public static function suSetHtmlElementById(&$oDoc, &$s, $sId, $sHtml, $bAppend = false, $bInsert = false, $bAddToOuter = false)
{
if (\S::suIsValidString($s) && \S::suIsValidString($sId))
{
$bCreate = true;
if (is_object($oDoc))
{
if (!($oDoc instanceof DOMDocument))
{
return false;
}
$bCreate = false;
}
if ($bCreate)
{
$oDoc = new DOMDocument();
}
libxml_use_internal_errors(true);
$oDoc->loadHTML($s, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_use_internal_errors(false);
$oNode = $oDoc->getElementById($sId);
if (is_object($oNode))
{
$bReplaceOuter = (!$bAppend && !$bInsert);
$sId = uniqid('SHEBI-');
$aId = array("", "");
if ($bReplaceOuter)
{
if (\S::suIsValidString($sHtml))
{
$oNode->parentNode->replaceChild($oDoc->createComment($sId), $oNode);
$s = $oDoc->saveHtml();
$s = str_replace($aId, $sHtml, $oDoc->saveHtml());
}
else
{
$oNode->parentNode->removeChild($oNode);
$s = $oDoc->saveHtml();
}
return true;
}
$bReplaceInner = ($bAppend && $bInsert);
$sThis = null;
if (!$bReplaceInner)
{
$sThis = $oDoc->saveHTML($oNode);
$sThis = ($bInsert ? $sHtml : '') . ($bAddToOuter ? $sThis : (substr($sThis, strpos($sThis, '>') + 1, - (strlen($oNode->nodeName) + 3)))) . ($bAppend ? $sHtml : '');
}
if (!$bReplaceInner && $bAddToOuter)
{
$oNode->parentNode->replaceChild($oDoc->createComment($sId), $oNode);
$sId = &$aId;
}
else
{
$oNode->nodeValue = $sId;
}
$s = str_replace($sId, $bReplaceInner ? $sHtml : $sThis, $oDoc->saveHtml());
return true;
}
}
return false;
}
public static function suIsValidString(&$s, &$iLen = null, $minLen = null, $maxLen = null)
{
if (!is_string($s) || !isset($s{
0}))
{
return false;
}
if ($iLen !== null)
{
$iLen = strlen($s);
}
return (($minLen === null ? true : ($minLen > 0 && isset($s{
$minLen - 1}))) &&
$maxLen === null ? true : ($maxLen >= $minLen && !isset($s{
$maxLen})));
}
public static function log_db_error($db_tmp, $debug)
{
global $settings;
if ($settings['mysql_debug'])
{
$out .= date('Y-m-d H:i:s') . PHP_EOL;
$out .= $db_tmp->error()[2] . PHP_EOL;
$out .= $db_tmp->last() . PHP_EOL;
$out .= $debug[0]['file'] . ' | ' . $debug[0]['line'] . PHP_EOL;
$out .= '--------------------------------------------------------------------------------------------' . PHP_EOL;
if (!is_dir('logs'))
mkdir('logs', 0755, true);
$content = file_get_contents('logs/' . date('Y-m-d') . '.txt');
$content = $out . $content;
file_put_contents('logs/' . date('Y-m-d') . '.txt', $content);
die('Blad bazy danych.');
}
}
public static function lang($text)
{
global $lang;
return $lang[$text] ? $lang[$text] : 'LANG-' . $text;
}
public static function cache_read($path)
{
$f = fopen($path, 'r');
$buffer = '';
while (!feof($f))
{
$buffer .= fread($f, 2048);
}
fclose($f);
return $buffer;
}
public static function cache_write($cache_url, $cache_file, $html)
{
$dir = md5($cache_url);
$dir = 'cache/' . $dir[0] . '/' . $dir[1] . '/';
if (!is_dir($dir))
mkdir($dir, 0755, true);
$f = fopen($cache_file, 'w');
fwrite($f, $html, strlen($html));
fclose($f);
return true;
}
public static function cache_file_url($cache_url)
{
$cache = md5($cache_url);
return 'cache/' . $cache{
1} . '/' . $cache{
2} . '/' . $cache;
}
public static function date_diff($data1, $data2, $rodz = '60')
{
$data1 = date('Y-m-d H:i:s', strtotime($data1));
$data2 = date('Y-m-d H:i:s', strtotime($data2));
$d1_t = explode(' ', $data1);
$d1_tt = explode('-', $d1_t[0]);
$rok1 = $d1_tt[0];
$mc1 = $d1_tt[1];
$d1 = $d1_tt[2];
$d1_tt = explode(':', $d1_t[1]);
$g1 = $d1_tt[0];
$m1 = $d1_tt[1];
$s1 = $d1_tt[2];
$d2_t = explode(' ', $data2);
$d2_tt = explode('-', $d2_t[0]);
$rok2 = $d2_tt[0];
$mc2 = $d2_tt[1];
$d2 = $d2_tt[2];
$d2_tt = explode(':', $d2_t[1]);
$g2 = $d2_tt[0];
$m2 = $d2_tt[1];
$s2 = $d2_tt[2];
$lt = mktime($g2, $m2, $s2, $mc2, $d2, $rok2);
$st = mktime($g1, $m1, $s1, $mc1, $d1, $rok1);
return round(($lt - $st) / $rodz);
}
public static function is_token_valid($token)
{
if (!empty($_SESSION['tokens'][$token]))
{
unset($_SESSION['tokens'][$token]);
return true;
}
return false;
}
public static function get_token()
{
$token = sha1(mt_rand());
if (!isset($_SESSION['tokens']))
$_SESSION['tokens'] = [$token => 1];
else
$_SESSION['tokens'][$token] = 1;
return $token;
}
public static function get_domain($url)
{
$parseUrl = parse_url(trim($url));
return trim($parseUrl[host] ? str_replace('www.', '', $parseUrl[host]) : str_replace('www.', '', array_shift(explode('/', $parseUrl[path], 2))));
}
public static function get_domain_url($url)
{
global $settings;
$settings['link_version'] ? $www = 'www.' : $www = '';
$settings['ssl'] == true ? $domain_prefix = 'https' : $domain_prefix = 'http';
return $domain_prefix . '://' . $www . \S::get_domain($url);
}
public static function max_db_value($table, $column)
{
global $mdb;
$results = $mdb->query('SELECT MAX(' . $column . ') FROM ' . $table)->fetchAll();
return $results[0][0];
}
public static function shuffle_assoc($list)
{
if (!is_array($list))
return $list;
$keys = array_keys($list);
shuffle($keys);
$random = array();
foreach ($keys as $key)
$random[$key] = $list[$key];
return $random;
}
public static function escape($value)
{
$return = '';
for ($i = 0; $i < strlen($value); ++$i)
{
$char = $value[$i];
$ord = ord($char);
if ($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126)
$return .= $char;
else
$return .= '\\x' . dechex($ord);
}
return $return;
}
public static function is_bot()
{
$bots = ["Slurp", "Scooter", "URL_Spider_SQL", "Googlebot", "Firefly", "WebBug", "WebFindBot", "crawler", "appie", "msnbot", "InfoSeek", "FAST", "Spade", "NationalDirectory"];
$agent = strtolower($_SERVER['HTTP_USER_AGENT']);
foreach ($bots as $bot)
if (stripos($agent, $bot) !== false)
return true;
return false;
}
public static function months()
{
return array(1 => 'Styczeń', 2 => 'Luty', 3 => 'Marzec', 4 => 'Kwiecień', 5 => 'Maj', 6 => 'Czerwiec', 7 => 'Lipiec', 8 => 'Sierpień', 9 => 'Wrzesień', 10 => 'Październik', 11 => 'Listopad', 12 => 'Grudzień');
}
public static function months_short()
{
return [1 => 'sty', 2 => 'lut', 3 => 'mar', 4 => 'kwi', 5 => 'maj', 6 => 'cze', 7 => 'lip', 8 => 'sie', 9 => 'wrz', 10 => 'paź', 11 => 'lis', 12 => 'gru'];
}
public static function chmod_r($path, $chmod = 0755)
{
$dir = new DirectoryIterator($path);
foreach ($dir as $item)
{
chmod($item->getPathname(), $chmod);
if ($item->isDir() && !$item->isDot())
self::chmod_r($item->getPathname());
}
}
public static function rrmdir($dir)
{
if (is_dir($dir))
{
$files = scandir($dir);
foreach ($files as $file)
if ($file != "." && $file != "..")
\S::rrmdir("$dir/$file");
rmdir($dir);
}
else if (file_exists($dir))
unlink($dir);
}
public static function rcopy($src, $dst)
{
if (is_dir($src))
{
mkdir($dst, 0755);
$files = scandir($src);
foreach ($files as $file)
if ($file != "." && $file != "..")
\S::rcopy("$src/$file", "$dst/$file");
}
else if (file_exists($src))
copy($src, $dst);
\S::rrmdir($src);
}
public static function is_mobile()
{
$detect = new \Mobile_Detect;
return $detect->isMobile();
}
public static function get_new_version()
{
global $settings;
if ($version = \S::get_session('new-version'))
return $version;
$versions = file_get_contents('http://www.cmspro.project-dc.pl/updates/versions.php?key=' . $settings['update_key']);
$versions = explode(PHP_EOL, $versions);
$version = str_replace(',', '.', max($versions));
\S::set_session('new-version', $version);
return $version;
}
public static function get_version()
{
return str_replace(',', '.', @file_get_contents('../libraries/version.ini'));
}
public static function pre($data, $type = '')
{
$data = str_replace('Array
(', '', $data);
$data = str_replace(')', '', $data);
echo '
' . print_r($data, true) . '
';
}
public static function json_to_array($json)
{
$values_tmp = json_decode($json, true);
if (is_array($values_tmp))
foreach ($values_tmp as $val)
{
if (isset($values[$val['name']]))
{
if (is_array($values[$val['name']]))
$values[$val['name']][] = $val['value'];
else
$values[$val['name']] = array($values[$val['name']], $val['value']);
}
else
$values[$val['name']] = $val['value'];
}
return $values;
}
public static function set_session($var, $val)
{
$_SESSION[$var] = $val;
}
public static function get_session($var)
{
return $_SESSION[$var];
}
public static function delete_session($var)
{
unset($_SESSION[$var]);
}
public static function get($var, $strip_tags = false)
{
if (isset($_POST[$var]))
{
if (is_string($_POST[$var]))
{
if ($strip_tags)
return trim(strip_tags($_POST[$var]));
else
return trim($_POST[$var]);
}
else
return $_POST[$var];
}
else
{
if (isset($_GET[$var]))
{
if (is_string($_GET[$var]))
{
if ($strip_tags)
return trim(strip_tags($_GET[$var]));
else
return trim($_GET[$var]);
}
else
return $_GET[$var];
}
}
}
public static function set_message($text)
{
self::set_session('message', $text);
}
public static function alert($text, $class = 'alert-success')
{
self::set_session('alert', $text);
self::set_session('alert-class', $class);
}
static public function get_language_domain($lang_id)
{
global $mdb;
$settings = \front\factory\Settings::settings_details();
$default_domain = \admin\factory\Languages::default_domain();
$settings['link_version'] ? $www = 'www.' : $www = '';
$domain = $mdb->get('pp_langs', 'domain', ['id' => $lang_id]);
if (!$domain)
{
if ($default_domain)
return $www . $default_domain;
else
return $www . preg_replace('#^(http(s)?://)?w{3}\.#', '$1', $_SERVER['SERVER_NAME']);
}
else
{
return $www . $domain;
}
}
public static function htacces($dir = '../')
{
global $mdb;
$settings = \front\factory\Settings::settings_details();
$default_domain = \admin\factory\Languages::default_domain();
$available_domains = \admin\factory\Languages::available_domains();
$settings['link_version'] ? $www = 'www.' : $www = '';
$settings['ssl'] == true ? $domain_prefix = 'https' : $domain_prefix = 'http';
$default_domain ? $url = $default_domain : $url = preg_replace('#^(http(s)?://)?w{3}\.#', '$1', $_SERVER['SERVER_NAME']);
$robots = 'User-agent: *' . PHP_EOL;
$robots .= 'Allow: /' . PHP_EOL;
unlink('../sitemap.xml');
if (is_array($available_domains) and !empty($available_domains))
{
foreach ($available_domains as $domain)
{
$site_map[$domain['domain']] = '' . PHP_EOL;
$site_map[$domain['domain']] .= '' . PHP_EOL;
$site_map[$domain['domain']] .= '' . PHP_EOL;
$site_map[$domain['domain']] .= '' . $domain_prefix . '://' . $www . $domain['domain'] . '' . PHP_EOL;
$site_map[$domain['domain']] .= '' . date('Y-m-d') . '' . PHP_EOL;
$site_map[$domain['domain']] .= 'daily' . PHP_EOL;
$site_map[$domain['domain']] .= '1' . PHP_EOL;
$site_map[$domain['domain']] .= '' . PHP_EOL;
}
}
else
{
$site_map[$url] = '' . PHP_EOL;
$site_map[$url] .= '' . PHP_EOL;
$site_map[$url] .= '' . PHP_EOL;
$site_map[$url] .= '' . $domain_prefix . '://' . $www . $url . '' . PHP_EOL;
$site_map[$url] .= '' . date('Y-m-d') . '' . PHP_EOL;
$site_map[$url] .= 'daily' . PHP_EOL;
$site_map[$url] .= '1' . PHP_EOL;
$site_map[$url] .= '' . PHP_EOL;
}
$htaccess_data = file_get_contents($dir . 'libraries/htaccess.conf');
/* cache */
if ($settings['htaccess_cache'])
{
$htaccess_data = str_replace(
'{HTACCESS_CACHE}',
'' . PHP_EOL
. 'AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript' . PHP_EOL
. '' . PHP_EOL
. '' . PHP_EOL
. 'ExpiresActive on' . PHP_EOL
. 'ExpiresDefault "access plus 1 year"' . PHP_EOL
. 'ExpiresByType text/css "access plus 1 year"' . PHP_EOL
. 'ExpiresByType application/json "access plus 0 seconds"' . PHP_EOL
. 'ExpiresByType application/xml "access plus 0 seconds"' . PHP_EOL
. 'ExpiresByType text/xml "access plus 0 seconds"' . PHP_EOL
. 'ExpiresByType image/x-icon "access plus 1 week"' . PHP_EOL
. 'ExpiresByType text/x-component "access plus 1 year"' . PHP_EOL
. 'ExpiresByType text/html "access plus 0 seconds"' . PHP_EOL
. 'ExpiresByType application/javascript "access plus 1 year"' . PHP_EOL
. 'ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"' . PHP_EOL
. 'ExpiresByType text/cache-manifest "access plus 0 seconds"' . PHP_EOL
. 'ExpiresByType audio/ogg "access plus 1 year"' . PHP_EOL
. 'ExpiresByType image/gif "access plus 1 year"' . PHP_EOL
. 'ExpiresByType image/jpeg "access plus 1 year"' . PHP_EOL
. 'ExpiresByType image/webp "access plus 1 year"' . PHP_EOL
. 'ExpiresByType image/png "access plus 1 year"' . PHP_EOL
. 'ExpiresByType video/mp4 "access plus 1 year"' . PHP_EOL
. 'ExpiresByType video/ogg "access plus 1 year"' . PHP_EOL
. 'ExpiresByType video/webm "access plus 1 year"' . PHP_EOL
. 'ExpiresByType application/atom+xml "access plus 1 hour"' . PHP_EOL
. 'ExpiresByType application/rss+xml "access plus 1 hour"' . PHP_EOL
. 'ExpiresByType application/font-woff "access plus 1 year"' . PHP_EOL
. 'ExpiresByType application/vnd.ms-fontobject "access plus 1 year"' . PHP_EOL
. 'ExpiresByType application/x-font-ttf "access plus 1 year"' . PHP_EOL
. 'ExpiresByType font/opentype "access plus 1 year"' . PHP_EOL
. 'ExpiresByType image/svg+xml "access plus 1 year"' . PHP_EOL
. '',
$htaccess_data
);
}
else
{
$htaccess_data = str_replace(
'{HTACCESS_CACHE}',
'' . PHP_EOL
. 'Header set Cache-Control "no-cache, no-store, must-revalidate"' . PHP_EOL
. 'Header set Pragma "no-cache"' . PHP_EOL
. 'Header set Expires 0' . PHP_EOL
. '',
$htaccess_data
);
}
/* języki w domenie głównej */
$results = $mdb->select('pp_langs', ['id'], ['AND' => ['status' => 1, 'domain' => null], 'ORDER' => ['o' => 'ASC']]);
if (is_array($results)) foreach ($results as $row)
{
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $row['id'] . '/$ index.php?a=change_language&id=' . $row['id'] . ' [L]';
}
$htaccess_data .= PHP_EOL;
$results = $mdb->select('pp_langs', ['id', 'start', 'domain', 'main_domain'], ['status' => 1, 'ORDER' => ['o' => 'ASC']]);
if (is_array($results)) foreach ($results as $row)
{
$row['domain'] ? $url_tmp = $row['domain'] : $url_tmp = $url;
!$row['start'] ? $language_link = $row['id'] . '/' : $language_link = '';
$results2 = $mdb->select(
'pp_pages_langs',
['[><]pp_pages' => ['page_id' => 'id']],
['seo_link', 'title', 'page_id', 'noindex', 'start', 'page_type'],
['AND' => ['status' => 1, 'lang_id' => $row['id'], 'block_direct_access' => 0], 'ORDER' => ['start' => 'DESC', 'o' => 'ASC']]
);
if (is_array($results2)) foreach ($results2 as $row2)
{
if ($row2['title'])
{
/* sitemap.xml */
if ($row2['page_type'] != 3 and !$row2['noindex'])
{
$site_map[$url_tmp] .= '' . PHP_EOL;
if ($row2['seo_link'])
{
if ($settings['links_structure'])
$seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row[id], 0, 0, $row2['seo_link'], $language_link);
else
$seo = $language_link . \S::seo($row2['seo_link']);
$site_map[$url_tmp] .= '' . $domain_prefix . '://' . $www . $url_tmp . '/' . $seo . '' . PHP_EOL;
}
else
{
if ($settings['links_structure'])
$seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row['id'], 0, 0, $row2['seo_link'], $language_link);
else
$seo = $language_link . 's-' . $row2['page_id'] . '-' . \S::seo($row2['title']);
$site_map[$url_tmp] .= '' . $domain_prefix . '://' . $www . $url_tmp . '/' . $seo . '' . PHP_EOL;
}
$site_map[$url_tmp] .= '' . date('Y-m-d') . '' . PHP_EOL;
$site_map[$url_tmp] .= 'daily' . PHP_EOL;
$row['start'] ? $priority = 1 : $priority = 0.8;
$site_map[$url_tmp] .= '' . $priority . '' . PHP_EOL;
$site_map[$url_tmp] .= '' . PHP_EOL;
}
/* robotx.txt */
if ($row2['noindex'] and $row2['page_type'] != 3)
{
$robots .= 'User-agent: GoogleBot' . PHP_EOL;
if ($row2['seo_link'])
{
if ($settings['links_structure'])
$seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row[id], 0, 0, $row2['seo_link'], $language_link);
else
$seo = $language_link . \S::seo($row2['seo_link']);
$robots .= 'Disallow: /' . $seo . '$' . PHP_EOL;
$robots .= 'Disallow: /' . $seo . '/s/*' . PHP_EOL;
}
else
{
if ($settings['links_structure'])
$seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row['id'], 0, 0, $row2['seo_link'], $language_link);
else
$seo = $language_link . 's-' . $row2['page_id'] . '-' . \S::seo($row2['title']);
$robots .= 'Disallow: /' . $seo . '$' . PHP_EOL;
$robots .= 'Disallow: /' . $seo . '/s/*$' . PHP_EOL;
}
}
/* htaccess */
if ($row2['page_type'] != 3)
{
if ($row['start'] and $row2['start'])
{
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} ^(.*)(?:^|&)(utm_source|gclid|hash)=[^&]+(&.*)?';
$htaccess_data .= PHP_EOL . 'RewriteRule ^$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&%{QUERY_STRING} [L]' . PHP_EOL;
if ($row2['seo_link'])
{
$htaccess_data .= PHP_EOL . 'RewriteCond %{REQUEST_URI} ^/' . \S::seo($row2['seo_link']) . '$';
$htaccess_data .= PHP_EOL . 'RewriteRule ^(.*)$ ' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . ' [R=301,L]';
$htaccess_data .= PHP_EOL . 'RewriteCond %{REQUEST_URI} ^/' . \S::seo($row2['seo_link']) . '/s/1$';
$htaccess_data .= PHP_EOL . 'RewriteRule ^(.*)$ ' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . ' [R=301,L]';
}
else
{
$htaccess_data .= PHP_EOL . 'RewriteCond %{REQUEST_URI} ^/s-' . $row2['page_id'] . '-' . \S::seo($row2['title']) . '$';
$htaccess_data .= PHP_EOL . 'RewriteRule ^(.*)$ ' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . ' [R=301,L]';
$htaccess_data .= PHP_EOL . 'RewriteCond %{REQUEST_URI} ^/s-' . $row2['page_id'] . '-' . \S::seo($row2['title']) . '-s-1$';
$htaccess_data .= PHP_EOL . 'RewriteRule ^(.*)$ ' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . ' [R=301,L]';
}
$htaccess_data .= PHP_EOL . 'RewriteCond %{REQUEST_URI} "^/$"';
$htaccess_data .= PHP_EOL . 'RewriteRule ^$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . ' [L]';
$htaccess_data .= PHP_EOL;
}
if ($row2['seo_link'])
{
if ($settings['links_structure'])
$seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row[id], 0, 0, $row2['seo_link'], $language_link);
else
$seo = $language_link . \S::seo($row2['seo_link']);
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} ^(.*)(?:^|&)(utm_source|gclid)=[^&]+(&.*)?';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&%{QUERY_STRING} [L]';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '/s/1(|/)$ ' . $seo . ' [R=301,L]';
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} ^(.*)(?:^|&)(utm_source|gclid)=[^&]+(&.*)?';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '/s/([0-9]+)(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&bs=$1&%{QUERY_STRING} [L]';
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} !=""';
$htaccess_data .= PHP_EOL . 'RewriteRule ' . $seo . '(|/) %{REQUEST_URI}? [R=301,L]';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . ' [L]';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '/s/([0-9]+)(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&bs=$1 [L]';
}
else
{
if ($settings['links_structure'])
$seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row['id'], 0, 0, $row2['seo_link'], $language_link);
else
$seo = $language_link . 's-' . $row2['page_id'] . '-' . \S::seo($row2['title']);
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} ^(.*)(?:^|&)(utm_source|gclid)=[^&]+(&.*)?';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&%{QUERY_STRING} [L]';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '/s/1(|/)$ ' . $seo . ' [R=301,L]';
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} ^(.*)(?:^|&)(utm_source|gclid)=[^&]+(&.*)?';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '/s/([0-9]+)(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&bs=$1&%{QUERY_STRING} [L]';
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} !=""';
$htaccess_data .= PHP_EOL . 'RewriteRule ' . $seo . '(|/) %{REQUEST_URI}? [R=301,L]';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . ' [L]';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '/s/([0-9]+)(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&bs=$1 [L]';
}
$htaccess_data .= PHP_EOL;
}
}
}
$results2 = $mdb->select(
'pp_articles_langs',
['[><]pp_articles' => ['article_id' => 'id']],
['seo_link', 'title', 'article_id', 'noindex', 'copy_from', 'block_direct_access'],
['AND' => ['status' => 1, 'lang_id' => $row['id']]]
);
if (is_array($results2)) foreach ($results2 as $row2)
{
$domain = \S::get_language_domain($row['id']);
if ($row2['copy_from'] != null)
{
$results_tmp = $mdb->get(
'pp_articles_langs',
[
'seo_link',
'title'
],
[
'AND' => [
'article_id' => $row2['article_id'],
'lang_id' => $row2['copy_from']
]
]
);
$row2['seo_link'] = $results_tmp['seo_link'];
$row2['title'] = $results_tmp['title'];
}
/* sitemap */
if (!$row2['block_direct_access'] and $row2['title'])
{
$site_map[$url_tmp] .= '' . PHP_EOL;
if ($row2['seo_link'])
$site_map[$url_tmp] .= '' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . \S::seo($row2['seo_link']) . '' . PHP_EOL;
else
$site_map[$url_tmp] .= '' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . 'a-' . $row2['article_id'] . '-' . self::seo($row2['title']) . '' . PHP_EOL;
$site_map[$url_tmp] .= '' . date('Y-m-d') . '' . PHP_EOL;
$site_map[$url_tmp] .= 'daily' . PHP_EOL;
$site_map[$url_tmp] .= '0.6' . PHP_EOL;
$site_map[$url_tmp] .= '' . PHP_EOL;
}
/* robots.txt */
if ($row2['noindex'])
{
$robots .= 'User-agent: GoogleBot' . PHP_EOL;
if ($row2['seo_link'])
$robots .= 'Disallow: /' . $row2['seo_link'] . '$' . PHP_EOL;
else
$robots .= 'Disallow: /a-' . $row2['article_id'] . '-' . self::seo($row2['title']) . '$' . PHP_EOL;
}
if (!$row2['block_direct_access'])
{
if ($row2['seo_link'])
{
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} ^(.*)(?:^|&)(utm_source|gclid)=[^&]+(&.*)?';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $language_link . \S::seo($row2['seo_link']) . '(|/)$ index.php?article=' . $row2['article_id'] . '&lang=' . $row['id'] . '&%{QUERY_STRING} [L]';
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} !=""';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $language_link . \S::seo($row2['seo_link']) . '(|/) %{REQUEST_URI}? [R=301,L]';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $language_link . \S::seo($row2['seo_link']) . '(|/)$ index.php?article=' . $row2['article_id'] . '&lang=' . $row['id'] . ' [L]';
}
else if ($row2['title'] != null)
{
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} ^(.*)(?:^|&)(utm_source|gclid)=[^&]+(&.*)?';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $language_link . 'a-' . $row2['article_id'] . '-' . \S::seo($row2['title']) . '(|/)$ index.php?article=' . $row2['article_id'] . '&lang=' . $row['id'] . '&%{QUERY_STRING} [L]';
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} !=""';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $language_link . 'a-' . $row2['article_id'] . '-' . \S::seo($row2['title']) . '(|/) %{REQUEST_URI}? [R=301,L]';
$htaccess_data .= PHP_EOL . 'RewriteRule ^' . $language_link . 'a-' . $row2['article_id'] . '-' . \S::seo($row2['title']) . '(|/)$ index.php?article=' . $row2['article_id'] . '&lang=' . $row['id'] . ' [L]';
}
$htaccess_data .= PHP_EOL;
}
}
}
$results = $mdb->query('SELECT '
. 'name, tag_id '
. 'FROM '
. 'pp_tags AS pt '
. 'INNER JOIN '
. 'pp_articles_tags AS pat ON pat.tag_id = pt.id '
. 'GROUP BY '
. 'tag_id')->fetchAll();
if (is_array($results) and !empty($results)) foreach ($results as $row)
{
$htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} !=""';
$htaccess_data .= PHP_EOL . 'RewriteRule tag/' . \S::seo( $row['name'] ) . '(|/) %{REQUEST_URI}? [R=301,L]';
$htaccess_data .= PHP_EOL . 'RewriteRule ^tag/' . \S::seo( $row['name'] ) . '(|/)$ index.php?tag=' . $row['tag_id'] . ' [L]';
}
$results = $mdb->get('pp_settings', 'value', ['param' => 'htaccess']);
if ($results)
$htaccess_data .= PHP_EOL . $results;
if (file_exists('../libraries/htaccess.ini'))
$htaccess_data .= PHP_EOL . file_get_contents('../libraries/htaccess.ini');
$results = $mdb->get('pp_settings', 'value', ['param' => 'robots']);
if ($results)
$robots .= PHP_EOL . $results;
if (is_array($available_domains) and !empty($available_domains))
{
foreach ($available_domains as $domain)
$site_map[$domain['domain']] .= '';
}
else
$site_map[$url] .= '';
if ( $settings['ssl'] )
{
if ( $settings['link_version'] )
{
$redirect = 'RewriteCond %{HTTP_HOST} !^www\.' . PHP_EOL
. 'RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]' . PHP_EOL
. 'RewriteCond %{SERVER_PORT} !=443' . PHP_EOL
. 'RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]' . PHP_EOL;
if ( !$settings['url_version'] )
$redirect .= '## Remove trailing slash' . PHP_EOL
. 'RewriteCond %{REQUEST_FILENAME} !-d [NC]' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !^/admin/(.*) [NC]' . PHP_EOL
. 'RewriteRule ^(.*)/$ https://%{HTTP_HOST}/$1 [L,R=301]';
else
$redirect .= '## Add trailing slash' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !(/$|\.)' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !^/admin/(.*) [NC]' . PHP_EOL
. 'RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]';
$htaccess_data = str_replace( '{REDIRECT}', $redirect, $htaccess_data );
}
else
{
$redirect = 'RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]' . PHP_EOL
. 'RewriteRule ^(.*)$ https://%1/$1 [R=301,L]' . PHP_EOL
. 'RewriteCond %{SERVER_PORT} !=443' . PHP_EOL
. 'RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]' . PHP_EOL;
if ( !$settings['url_version'] )
$redirect .= '## Remove trailing slash' . PHP_EOL
. 'RewriteCond %{REQUEST_FILENAME} !-d [NC]' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !^/admin/(.*) [NC]' . PHP_EOL
. 'RewriteRule ^(.*)/$ https://%{HTTP_HOST}/$1 [L,R=301]';
else
$redirect .= '## Add trailing slash' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !(/$|\.)' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !^/admin/(.*) [NC]' . PHP_EOL
. 'RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]';
$htaccess_data = str_replace( '{REDIRECT}', $redirect, $htaccess_data );
}
}
else
{
if ($settings['link_version'])
{
$redirect = 'RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]' . PHP_EOL
. 'RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]' . PHP_EOL
. 'RewriteCond %{SERVER_PORT} =443' . PHP_EOL
. 'RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]' . PHP_EOL;
if ( !$settings['url_version'] )
$redirect .= '## Remove trailing slash' . PHP_EOL
. 'RewriteCond %{REQUEST_FILENAME} !-d [NC]' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !^/admin/(.*) [NC]' . PHP_EOL
. 'RewriteRule ^(.*)/$ http://%{HTTP_HOST}/$1 [L,R=301]';
else
$redirect .= '## Add trailing slash' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !(/$|\.)' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !^/admin/(.*) [NC]' . PHP_EOL
. 'RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]';
$htaccess_data = str_replace( '{REDIRECT}', $redirect, $htaccess_data );
}
else
{
$redirect = 'RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]' . PHP_EOL
. 'RewriteRule ^(.*)$ http://%1/$1 [R=301,L]' . PHP_EOL
. 'RewriteCond %{SERVER_PORT} =443' . PHP_EOL
. 'RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]' . PHP_EOL;
if ( !$settings['url_version'] )
$redirect .= '## Remove trailing slash' . PHP_EOL
. 'RewriteCond %{REQUEST_FILENAME} !-d [NC]' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !^/admin/(.*) [NC]' . PHP_EOL
. 'RewriteRule ^(.*)/$ http://%{HTTP_HOST}/$1 [L,R=301]';
else
$redirect .= '## Add trailing slash' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !(/$|\.)' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !^/admin/(.*) [NC]' . PHP_EOL
. 'RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]';
$htaccess_data = str_replace( '{REDIRECT}', $redirect, $htaccess_data );
}
}
$additional_classes = file_get_contents('../libraries/additional-classes.ini');
$additional_classes = explode(PHP_EOL, $additional_classes);
$additional_classes = array_filter($additional_classes);
if (is_array($additional_classes) and !empty($additional_classes))
{
foreach ($additional_classes as $class)
{
$classes .= 'RewriteCond %{REQUEST_URI} ^/' . trim($class) . '/(.*) [NC]' . PHP_EOL;
$classes .= 'RewriteRule ^([^/]*)/([^/]*)(|/([^/]*))$ index.php?module=$1&action=$2&$4 [L]' . PHP_EOL;
}
}
$htaccess_data = str_replace('{ADDITIONAL_CLASSES}', $classes, $htaccess_data);
/* pozostałe linki */
$htaccess_data .= PHP_EOL;
$htaccess_data .= 'RewriteRule ^newsletter/signin$ index.php?module=newsletter&action=signin [L]' . PHP_EOL;
$htaccess_data .= 'RewriteRule ^newsletter/confirm/hash=(.*)$ index.php?module=newsletter&action=confirm&hash=$1 [L]' . PHP_EOL;
$htaccess_data .= 'RewriteRule ^newsletter/unsubscribe/hash=(.*)$ index.php?module=newsletter&action=unsubscribe&hash=$1 [L]' . PHP_EOL;
/* pixieset */
$results = $mdb->select('pp_articles', 'id', ['pixieset' => 1]);
if (is_array($results) and count($results))
{
$pixieset = 'RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?' . $url_tmp . ' [NC]' . PHP_EOL;
$pixieset .= 'RewriteCond %{REQUEST_URI} ^(';
foreach ($results as $row)
{
$pixieset .= '/upload/article_images/article_' . $row . '/';
if ($row != end($results))
$pixieset .= '|';
}
$pixieset .= ') [NC]' . PHP_EOL . 'RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]' . PHP_EOL;
$htaccess_data = str_replace('{PIXIESET]', $pixieset, $htaccess_data);
}
else
{
$htaccess_data = str_replace('{PIXIESET]', '', $htaccess_data);
}
$fp = fopen($dir . '.htaccess', 'w');
fwrite($fp, $htaccess_data);
fclose($fp);
$class = '\admin\factory\Sitemap';
$action = 'sitemap';
if (class_exists($class) and method_exists(new $class, $action))
$site_map = call_user_func_array(array($class, $action), array($site_map, $available_domains, $domain_prefix, $www, $url));
if (is_array($available_domains) and !empty($available_domains))
{
foreach ($available_domains as $domain)
{
$fp = fopen($dir . 'sitemap_' . \S::seo($domain['domain']) . '.xml', 'w');
fwrite($fp, $site_map[$domain['domain']]);
fclose($fp);
}
}
else
{
$fp = fopen($dir . 'sitemap.xml', 'w');
fwrite($fp, $site_map[$url]);
fclose($fp);
}
$fp = fopen($dir . 'robots.txt', 'w');
fwrite($fp, $robots);
fclose($fp);
}
public static function seo( $val, $delete_rhombs = false )
{
$array_rep1 = array('*', '_', ' ', '+', '"', "'", '?', '-', ',', '!', '~', '<', '>', '@', '#', '$', '%', '^', '&', '*' . '(', ')' . '-', '=', '\\', '|', '[', ']', ':', '(', ')');
$array_rep2 = array('-', '-', '-', '-', '', '', '', '-', '-', '', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '', '-', '-', '-', '-', '-', '-', '-', '-');
$val = self::noPl($val);
$val = str_replace($array_rep1, $array_rep2, $val);
if ($delete_rhombs)
$val = str_replace('/', '', $val);
$val = strtolower($val);
$val = preg_replace('/(-){2,}/', '-', $val);
$val = ltrim($val, '-');
$val = rtrim($val, '-');
return $val;
}
public static function noPL($string)
{
$chars = array( // Decompositions for Latin-1 Supplement chr(195).chr(128)=> 'A', chr(195).chr(129) => 'A',
chr(195) . chr(130) => 'A', chr(195) . chr(131) => 'A',
chr(195) . chr(132) => 'A', chr(195) . chr(133) => 'A',
chr(195) . chr(135) => 'C', chr(195) . chr(136) => 'E',
chr(195) . chr(137) => 'E', chr(195) . chr(138) => 'E',
chr(195) . chr(139) => 'E', chr(195) . chr(140) => 'I',
chr(195) . chr(141) => 'I', chr(195) . chr(142) => 'I',
chr(195) . chr(143) => 'I', chr(195) . chr(145) => 'N',
chr(195) . chr(146) => 'O', chr(195) . chr(147) => 'O',
chr(195) . chr(148) => 'O', chr(195) . chr(149) => 'O',
chr(195) . chr(150) => 'O', chr(195) . chr(153) => 'U',
chr(195) . chr(154) => 'U', chr(195) . chr(155) => 'U',
chr(195) . chr(156) => 'U', chr(195) . chr(157) => 'Y',
chr(195) . chr(159) => 's', chr(195) . chr(160) => 'a',
chr(195) . chr(161) => 'a', chr(195) . chr(162) => 'a',
chr(195) . chr(163) => 'a', chr(195) . chr(164) => 'a',
chr(195) . chr(165) => 'a', chr(195) . chr(167) => 'c',
chr(195) . chr(168) => 'e', chr(195) . chr(169) => 'e',
chr(195) . chr(170) => 'e', chr(195) . chr(171) => 'e',
chr(195) . chr(172) => 'i', chr(195) . chr(173) => 'i',
chr(195) . chr(174) => 'i', chr(195) . chr(175) => 'i',
chr(195) . chr(177) => 'n', chr(195) . chr(178) => 'o',
chr(195) . chr(179) => 'o', chr(195) . chr(180) => 'o',
chr(195) . chr(181) => 'o', chr(195) . chr(182) => 'o',
chr(195) . chr(182) => 'o', chr(195) . chr(185) => 'u',
chr(195) . chr(186) => 'u', chr(195) . chr(187) => 'u',
chr(195) . chr(188) => 'u', chr(195) . chr(189) => 'y',
chr(195) . chr(191) => 'y',
// Decompositions for Latin Extended-A
chr(196) . chr(128) => 'A', chr(196) . chr(129) => 'a',
chr(196) . chr(130) => 'A', chr(196) . chr(131) => 'a',
chr(196) . chr(132) => 'A', chr(196) . chr(133) => 'a',
chr(196) . chr(134) => 'C', chr(196) . chr(135) => 'c',
chr(196) . chr(136) => 'C', chr(196) . chr(137) => 'c',
chr(196) . chr(138) => 'C', chr(196) . chr(139) => 'c',
chr(196) . chr(140) => 'C', chr(196) . chr(141) => 'c',
chr(196) . chr(142) => 'D', chr(196) . chr(143) => 'd',
chr(196) . chr(144) => 'D', chr(196) . chr(145) => 'd',
chr(196) . chr(146) => 'E', chr(196) . chr(147) => 'e',
chr(196) . chr(148) => 'E', chr(196) . chr(149) => 'e',
chr(196) . chr(150) => 'E', chr(196) . chr(151) => 'e',
chr(196) . chr(152) => 'E', chr(196) . chr(153) => 'e',
chr(196) . chr(154) => 'E', chr(196) . chr(155) => 'e',
chr(196) . chr(156) => 'G', chr(196) . chr(157) => 'g',
chr(196) . chr(158) => 'G', chr(196) . chr(159) => 'g',
chr(196) . chr(160) => 'G', chr(196) . chr(161) => 'g',
chr(196) . chr(162) => 'G', chr(196) . chr(163) => 'g',
chr(196) . chr(164) => 'H', chr(196) . chr(165) => 'h',
chr(196) . chr(166) => 'H', chr(196) . chr(167) => 'h',
chr(196) . chr(168) => 'I', chr(196) . chr(169) => 'i',
chr(196) . chr(170) => 'I', chr(196) . chr(171) => 'i',
chr(196) . chr(172) => 'I', chr(196) . chr(173) => 'i',
chr(196) . chr(174) => 'I', chr(196) . chr(175) => 'i',
chr(196) . chr(176) => 'I', chr(196) . chr(177) => 'i',
chr(196) . chr(178) => 'IJ', chr(196) . chr(179) => 'ij',
chr(196) . chr(180) => 'J', chr(196) . chr(181) => 'j',
chr(196) . chr(182) => 'K', chr(196) . chr(183) => 'k',
chr(196) . chr(184) => 'k', chr(196) . chr(185) => 'L',
chr(196) . chr(186) => 'l', chr(196) . chr(187) => 'L',
chr(196) . chr(188) => 'l', chr(196) . chr(189) => 'L',
chr(196) . chr(190) => 'l', chr(196) . chr(191) => 'L',
chr(197) . chr(128) => 'l', chr(197) . chr(129) => 'L',
chr(197) . chr(130) => 'l', chr(197) . chr(131) => 'N',
chr(197) . chr(132) => 'n', chr(197) . chr(133) => 'N',
chr(197) . chr(134) => 'n', chr(197) . chr(135) => 'N',
chr(197) . chr(136) => 'n', chr(197) . chr(137) => 'N',
chr(197) . chr(138) => 'n', chr(197) . chr(139) => 'N',
chr(197) . chr(140) => 'O', chr(197) . chr(141) => 'o',
chr(197) . chr(142) => 'O', chr(197) . chr(143) => 'o',
chr(197) . chr(144) => 'O', chr(197) . chr(145) => 'o',
chr(197) . chr(146) => 'OE', chr(197) . chr(147) => 'oe',
chr(197) . chr(148) => 'R', chr(197) . chr(149) => 'r',
chr(197) . chr(150) => 'R', chr(197) . chr(151) => 'r',
chr(197) . chr(152) => 'R', chr(197) . chr(153) => 'r',
chr(197) . chr(154) => 'S', chr(197) . chr(155) => 's',
chr(197) . chr(156) => 'S', chr(197) . chr(157) => 's',
chr(197) . chr(158) => 'S', chr(197) . chr(159) => 's',
chr(197) . chr(160) => 'S', chr(197) . chr(161) => 's',
chr(197) . chr(162) => 'T', chr(197) . chr(163) => 't',
chr(197) . chr(164) => 'T', chr(197) . chr(165) => 't',
chr(197) . chr(166) => 'T', chr(197) . chr(167) => 't',
chr(197) . chr(168) => 'U', chr(197) . chr(169) => 'u',
chr(197) . chr(170) => 'U', chr(197) . chr(171) => 'u',
chr(197) . chr(172) => 'U', chr(197) . chr(173) => 'u',
chr(197) . chr(174) => 'U', chr(197) . chr(175) => 'u',
chr(197) . chr(176) => 'U', chr(197) . chr(177) => 'u',
chr(197) . chr(178) => 'U', chr(197) . chr(179) => 'u',
chr(197) . chr(180) => 'W', chr(197) . chr(181) => 'w',
chr(197) . chr(182) => 'Y', chr(197) . chr(183) => 'y',
chr(197) . chr(184) => 'Y', chr(197) . chr(185) => 'Z',
chr(197) . chr(186) => 'z', chr(197) . chr(187) => 'Z',
chr(197) . chr(188) => 'z', chr(197) . chr(189) => 'Z',
chr(197) . chr(190) => 'z', chr(197) . chr(191) => 's'
);
$string = strtr($string, $chars);
$table = array(
"А" => "a", "Б" => "b", "В" => "v", "Г" => "g", "Д" => "d",
"Е" => "e", "Ё" => "yo", "Ж" => "zh", "З" => "z", "И" => "i",
"Й" => "j", "К" => "k", "Л" => "l", "М" => "m", "Н" => "n",
"О" => "o", "П" => "p", "Р" => "r", "С" => "s", "Т" => "t",
"У" => "u", "Ф" => "f", "Х" => "kh", "Ц" => "ts", "Ч" => "ch",
"Ш" => "sh", "Щ" => "sch", "Ъ" => "", "Ы" => "y", "Ь" => "",
"Э" => "e", "Ю" => "yu", "Я" => "ya", "а" => "a", "б" => "b",
"в" => "v", "г" => "g", "д" => "d", "е" => "e", "ё" => "yo",
"ж" => "zh", "з" => "z", "и" => "i", "й" => "j", "к" => "k",
"л" => "l", "м" => "m", "н" => "n", "о" => "o", "п" => "p",
"р" => "r", "с" => "s", "т" => "t", "у" => "u", "ф" => "f",
"х" => "kh", "ц" => "ts", "ч" => "ch", "ш" => "sh", "щ" => "sch",
"ъ" => "", "ы" => "y", "ь" => "", "э" => "e", "ю" => "yu",
"я" => "ya", " " => "-", "." => "", "," => "",
":" => "", ";" => "", "—" => "", "–" => "-"
);
$string = strtr($string, $table);
return $string;
}
public static function delete_cache()
{
\S::delete_dir('../cache/');
\S::delete_dir('../temp/');
\S::delete_dir('temp/');
}
public static function delete_dir($dir)
{
if (is_file($dir))
return @unlink($dir);
else if (is_dir($dir))
{
$scan = glob(rtrim($dir, '/') . '/*');
if (is_array($scan))
foreach ($scan as $index => $path)
self::delete_dir($path);
if (is_dir($dir) && self::is_empty_dir($dir) and $dir != '../temp/')
return @rmdir($dir);
}
}
public static function is_empty_dir($dir)
{
return (($files = @scandir($dir)) && count($files) <= 2);
}
public static function email_check($email)
{
return filter_var($email, FILTER_VALIDATE_EMAIL);
}
public static function send_email($email, $subject, $text, $replay = '', $file = '')
{
global $settings;
if (file_exists('libraries/phpmailer/class.phpmailer.php')) require_once 'libraries/phpmailer/class.phpmailer.php';
if (file_exists('libraries/phpmailer/class.smtp.php')) require_once 'libraries/phpmailer/class.smtp.php';
if (file_exists('../libraries/phpmailer/class.phpmailer.php')) require_once '../libraries/phpmailer/class.phpmailer.php';
if (file_exists('../libraries/phpmailer/class.smtp.php')) require_once '../libraries/phpmailer/class.smtp.php';
if ($email and $subject)
{
$mail = new PHPMailer();
$mail->IsSMTP();
// $mail->SMTPDebug = 2;
$mail->SMTPAuth = true;
$mail->Host = $settings['email_host'];
$mail->Port = $settings['email_port'];
$mail->Username = $settings['email_login'];
$mail->Password = $settings['email_password'];
$mail->CharSet = "UTF-8";
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
if (self::email_check($replay))
{
$mail->AddReplyTo($replay, $replay);
$mail->SetFrom($settings['contact_email'], $settings['contact_email']);
}
else
{
$mail->AddReplyTo($settings['contact_email'], $settings['firm_name']);
$mail->SetFrom($settings['contact_email'], $settings['firm_name']);
}
$mail->AddAddress($email, '');
$mail->Subject = $subject;
$mail->Body = $text;
if (is_array($file))
{
foreach ($file as $file_tmp)
{
if (file_exists($file_tmp))
$mail->AddAttachment($file_tmp);
}
}
else
{
if (file_exists($file))
$mail->AddAttachment($file);
}
$mail->IsHTML(true);
return $mail->Send();
}
return false;
}
}