Files
cmsPRO/autoload/class.S.php
2026-02-22 21:59:33 +01:00

1283 lines
45 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
class S
{
static public function generate_webp_image($file, $compression_quality = 85)
{
if ( strpos( $file, 'thumb/' ) !== false )
{
$file_tmp = explode( '/', $file );
$width = $file_tmp[1];
if ( empty( $width ) and $width !== '0' )
$width = 500;
$height = $file_tmp[2];
if ( empty( $height ) and $height !== '0' )
$height = 500;
for ( $i = 0; $i <= 2; $i++ )
unset( $file_tmp[$i] );
$img_src = implode( '/', $file_tmp );
$crop_w = $_GET['c_w'];
$crop_h = $_GET['c_h'];
$img_md5 = md5( $img_src . $height . $width . $crop_h . $crop_w );
$file = 'thumbs/' . $img_md5[0] . '/' . $img_md5[1] . '/' . $img_md5[2] . '/' . $img_md5;
}
if (!file_exists($file))
return false;
$output_file = 'cache/' . $file . '.webp';
if (file_exists($output_file))
return $output_file;
$file_type = mime_content_type( $file );
if (function_exists('imagewebp'))
{
switch ($file_type)
{
case 'image/jpeg':
$image = imagecreatefromjpeg($file);
break;
case 'image/png':
$image = imagecreatefrompng($file);
imagepalettetotruecolor($image);
imagealphablending($image, true);
imagesavealpha($image, true);
break;
case 'image/gif':
$image = imagecreatefromgif($file);
break;
default:
return false;
}
$dir = dirname($output_file);
if (!is_dir($dir))
mkdir($dir, 0755, true);
$result = imagewebp($image, $output_file, $compression_quality);
if (false === $result)
return false;
imagedestroy($image);
return $output_file;
}
elseif (class_exists('Imagick'))
{
$dir = dirname($output_file);
if (!is_dir($dir))
mkdir($dir, 0755, true);
$image = new \Imagick();
$image->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("<!-- $sId -->", "<!--$sId-->");
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 '<pre';
if ($type == 'error')
echo ' style="color: #cc0000;" ';
else if ($type == 'info')
echo ' style="color: #2c539e;" ';
else
echo ' style="color: #8fc400;" ';
echo '>' . print_r($data, true) . '</pre>';
}
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']] = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
$site_map[$domain['domain']] .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
$site_map[$domain['domain']] .= '<url>' . PHP_EOL;
$site_map[$domain['domain']] .= '<loc>' . $domain_prefix . '://' . $www . $domain['domain'] . '</loc>' . PHP_EOL;
$site_map[$domain['domain']] .= '<lastmod>' . date('Y-m-d') . '</lastmod>' . PHP_EOL;
$site_map[$domain['domain']] .= '<changefreq>daily</changefreq>' . PHP_EOL;
$site_map[$domain['domain']] .= '<priority>1</priority>' . PHP_EOL;
$site_map[$domain['domain']] .= '</url>' . PHP_EOL;
}
}
else
{
$site_map[$url] = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
$site_map[$url] .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
$site_map[$url] .= '<url>' . PHP_EOL;
$site_map[$url] .= '<loc>' . $domain_prefix . '://' . $www . $url . '</loc>' . PHP_EOL;
$site_map[$url] .= '<lastmod>' . date('Y-m-d') . '</lastmod>' . PHP_EOL;
$site_map[$url] .= '<changefreq>daily</changefreq>' . PHP_EOL;
$site_map[$url] .= '<priority>1</priority>' . PHP_EOL;
$site_map[$url] .= '</url>' . PHP_EOL;
}
$htaccess_data = file_get_contents($dir . 'libraries/htaccess.conf');
/* cache */
if ($settings['htaccess_cache'])
{
$htaccess_data = str_replace(
'{HTACCESS_CACHE}',
'<IfModule mod_deflate.c>' . 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
. '</IfModule>' . PHP_EOL
. '<IfModule mod_expires.c>' . 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
. '</IfModule>',
$htaccess_data
);
}
else
{
$htaccess_data = str_replace(
'{HTACCESS_CACHE}',
'<IfModule mod_headers.c>' . 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
. '</IfModule>',
$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] .= '<url>' . 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] .= '<loc>' . $domain_prefix . '://' . $www . $url_tmp . '/' . $seo . '</loc>' . 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] .= '<loc>' . $domain_prefix . '://' . $www . $url_tmp . '/' . $seo . '</loc>' . PHP_EOL;
}
$site_map[$url_tmp] .= '<lastmod>' . date('Y-m-d') . '</lastmod>' . PHP_EOL;
$site_map[$url_tmp] .= '<changefreq>daily</changefreq>' . PHP_EOL;
$row['start'] ? $priority = 1 : $priority = 0.8;
$site_map[$url_tmp] .= '<priority>' . $priority . '</priority>' . PHP_EOL;
$site_map[$url_tmp] .= '</url>' . 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 . '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 . '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 . 'RewriteRule ^' . $seo . '/s/([0-9]+)(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&bs=$1&%{QUERY_STRING} [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 . '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 . '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;
}
}
}
$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] .= '<url>' . PHP_EOL;
if ($row2['seo_link'])
$site_map[$url_tmp] .= '<loc>' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . \S::seo($row2['seo_link']) . '</loc>' . PHP_EOL;
else
$site_map[$url_tmp] .= '<loc>' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . 'a-' . $row2['article_id'] . '-' . self::seo($row2['title']) . '</loc>' . PHP_EOL;
$site_map[$url_tmp] .= '<lastmod>' . date('Y-m-d') . '</lastmod>' . PHP_EOL;
$site_map[$url_tmp] .= '<changefreq>daily</changefreq>' . PHP_EOL;
$site_map[$url_tmp] .= '<priority>0.6</priority>' . PHP_EOL;
$site_map[$url_tmp] .= '</url>' . 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 . 'RewriteRule ^' . $language_link . \S::seo($row2['seo_link']) . '(|/)$ index.php?article=' . $row2['article_id'] . '&lang=' . $row['id'] . '&%{QUERY_STRING} [L]';
}
else if ($row2['title'] != null)
{
$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;
}
}
}
$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']] .= '</urlset>';
}
else
$site_map[$url] .= '</urlset>';
$redirect = 'RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)$'. PHP_EOL;
if ( $settings['ssl'] )
{
$redirect .= 'RewriteCond %{HTTPS} off' . PHP_EOL
. 'RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]';
}
else
{
$redirect .= 'RewriteCond %{HTTPS} on' . PHP_EOL
. 'RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]';
}
$redirect .= 'RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)$'. PHP_EOL;
if ( $settings['link_version'] )
{
$redirect .= 'RewriteCond %{HTTP_HOST} !^www\. [NC]' . PHP_EOL
. 'RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]' . PHP_EOL;
}
else
{
$redirect .= 'RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]' . PHP_EOL
. 'RewriteRule ^ %{REQUEST_SCHEME}://%1%{REQUEST_URI} [L,R=301]' . PHP_EOL;
}
$redirect .= 'RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)$'. PHP_EOL;
if ( $settings['url_version'] )
{
$redirect .= 'RewriteCond %{REQUEST_URI} !^/admin(?:/.*)?$ [NC]' . PHP_EOL
. 'RewriteRule ^(.+)/$ %{REQUEST_SCHEME}://%{HTTP_HOST}/$1 [L,R=301]' . PHP_EOL;
}
else
{
$redirect .= 'RewriteCond %{REQUEST_URI} !^/admin(/|$) [NC]' . PHP_EOL
. 'RewriteCond %{REQUEST_FILENAME} !-f' . PHP_EOL
. 'RewriteCond %{REQUEST_FILENAME} !-d' . PHP_EOL
. 'RewriteCond %{REQUEST_URI} !/$' . PHP_EOL
. 'RewriteRule ^(.+)$ %{REQUEST_SCHEME}://%{HTTP_HOST}/$1/ [L,R=301]' . PHP_EOL;
}
$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->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 true;
}
}