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 = (float)max( $versions );
\S::set_session( 'new-version', $version );
return $version;
}
public static function get_version()
{
return (float) @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 );
}
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 )
{
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'] )
{
$htaccess_data = str_replace(
'{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]',
$htaccess_data
);
}
else
{
$htaccess_data = str_replace(
'{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]',
$htaccess_data
);
}
}
else
{
if ( $settings['link_version'] )
{
$htaccess_data = str_replace(
'{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]',
$htaccess_data
);
}
else
{
$htaccess_data = str_replace(
'{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]',
$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&$3 [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( $val )
{
$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", " " => "-", "." => "", "," => "",
":" => "", ";" => "", "—" => "", "–" => "-"
);
$val = strtr( $val, $table );
$val = iconv( 'UTF-8', 'ASCII//TRANSLIT', $val );
$table = Array(
"\xc4\x85" => "a", "\xc4\x84" => "A", "\xc4\x87" => "c", "\xc4\x86" => "C",
"\xc4\x99" => "e", "\xc4\x98" => "E", "\xc5\x82" => "l", "\xc5\x81" => "L",
"\xc3\xb3" => "o", "\xc3\x93" => "O", "\xc5\x9b" => "s", "\xc5\x9a" => "S",
"\xc5\xbc" => "z", "\xc5\xbb" => "Z", "\xc5\xba" => "z", "\xc5\xb9" => "Z",
"\xc5\x84" => "n", "\xc5\x83" => "N"
);
$val = strtr( $val, $table );
return $val;
}
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 ( self::email_check( $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 false;
}
}
?>