diff --git a/.vscode/sftp.json b/.vscode/sftp.json new file mode 100644 index 0000000..f49ebbb --- /dev/null +++ b/.vscode/sftp.json @@ -0,0 +1,12 @@ +{ + "name": "inwestprofil.fr", + "host": "inwestprofil.pl", + "protocol": "ftp", + "port": 21, + "username": "ftp@inwestprofil.fr", + "password": "4wCFuWYSQlckbqGBT", + "remotePath": "/public_html", + "uploadOnSave": false, + "useTempFile": false, + "openSsh": false +} diff --git a/admin/templates/articles/article-edit.php b/admin/templates/articles/article-edit.php index 9c2a7f2..6d230f5 100644 --- a/admin/templates/articles/article-edit.php +++ b/admin/templates/articles/article-edit.php @@ -2,7 +2,6 @@
- authors ) ): foreach ( $this -> authors as $author ): $authors[ $author['id'] ] = $author['author']; endforeach; endif;?> + authors ) ): + foreach ( $this -> authors as $author ): + $authors[ $author['id'] ] = $author['author']; + endforeach; + endif; + ?> 'Autor', 'name' => "id_author", 'id' => 'id_author', - 'values' => array_merge( [ '0' => '--- wybierz autora ---' ], $authors ), + 'values' => $authors, 'value' => $this -> article['id_author'] ] );?> $this -> article['show_title'] == 1 ? true : false ) );?> + 'Pokaż spis treści', + 'name' => 'show_table_of_contents', + 'checked' => $this -> article['show_table_of_contents'] == 1 ? true : false + ] );?> 'Pokaż datę dodania', diff --git a/admin/templates/settings/settings.php b/admin/templates/settings/settings.php index ab784f2..0101cc9 100644 --- a/admin/templates/settings/settings.php +++ b/admin/templates/settings/settings.php @@ -351,6 +351,14 @@ ob_start(); 'value' => $this -> settings['link_version'] ? 1 : 0 ] );?>
+
+ "Wersja adresów url", + 'name' => "url_version", + 'values' => [ 0 => 'bez / na końcu adresu url', 1 => 'z / na końcu adresu url' ], + 'value' => $this -> settings['url_version'] ? 1 : 0 + ] );?> +
"Newsletter", diff --git a/admin/templates/site/main-layout.php b/admin/templates/site/main-layout.php index 667a525..9f8eb37 100644 --- a/admin/templates/site/main-layout.php +++ b/admin/templates/site/main-layout.php @@ -207,7 +207,7 @@
  • - + Dodatkowe ustawienia SEO diff --git a/ajax.php b/ajax.php index 2f98490..2c2a54a 100644 --- a/ajax.php +++ b/ajax.php @@ -74,23 +74,27 @@ if ( \S::get( 'a' ) == 'widget-phone-now' ) if ( \S::get( 'a' ) == 'contact_form' ) { $response = [ 'status' => 'error' ]; + $email = trim( (string) \S::get( 'email' ) ); + $phone = trim( (string) \S::get( 'phone' ) ); + $subject = trim( (string) \S::get( 'subject' ) ); + $text = trim( (string) \S::get( 'text' ) ); - if ( \S::get( 'email' ) ) + if ( $email || $phone ) { if ( \S::send_email( $settings['contact_email'], - \S::get( 'subject' ), - '

    Nr telefonu: ' . \S::get( 'phone' ) . '

    ' - . '

    Email: ' . \S::get( 'email' ) . '

    ' - . '

    ' . \S::get( 'text' ) . '

    ', - \S::get( 'email' ) + $subject, + '

    Nr telefonu: ' . $phone . '

    ' + . '

    Email: ' . $email . '

    ' + . '

    ' . $text . '

    ', + $email ) ) { $mdb -> insert( 'pp_contact_emails', [ - 'email' => \S::get( 'email' ), - 'phone' => \S::get('phone' ), - 'title' => \S::get( 'subject' ), - 'mail' => \S::get( 'text' ), + 'email' => $email, + 'phone' => $phone, + 'title' => $subject, + 'mail' => $text, 'add_date' => date("Y-m-d, H:i") ]); diff --git a/autoload/.1645554992.suspected b/autoload/.1645554992.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/.1645576321.suspected b/autoload/.1645576321.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/.1645635829.suspected b/autoload/.1645635829.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/.1645635840.suspected b/autoload/.1645635840.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/.1645641524.suspected b/autoload/.1645641524.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/.1645661211.suspected b/autoload/.1645661211.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/.1645686576.suspected b/autoload/.1645686576.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/.1645704702.suspected b/autoload/.1645704702.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/.1645708327.suspected b/autoload/.1645708327.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/.1645796929.suspected b/autoload/.1645796929.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/.1645796935.suspected b/autoload/.1645796935.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/.1645796948.suspected b/autoload/.1645796948.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/admin/.1645555001.suspected b/autoload/admin/.1645555001.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/admin/.1645576320.suspected b/autoload/admin/.1645576320.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/admin/.1645641515.suspected b/autoload/admin/.1645641515.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/admin/.1645641527.suspected b/autoload/admin/.1645641527.suspected deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/admin/controls/class.Articles.php b/autoload/admin/controls/class.Articles.php index 3c29724..96c2581 100644 --- a/autoload/admin/controls/class.Articles.php +++ b/autoload/admin/controls/class.Articles.php @@ -98,7 +98,7 @@ class Articles $values['params'] = $params; if ( $id = \admin\factory\Articles::article_save( - $values['id'], $values['title'], $values['main_image'], $values['entry'], $values['text'], $values['table_of_contents'], $values['status'], $values['show_title'], $values['show_date_add'], $values['date_add'], + $values['id'], $values['title'], $values['main_image'], $values['entry'], $values['text'], $values['table_of_contents'], $values['status'], $values['show_title'], $values['show_table_of_contents'], $values['show_date_add'], $values['date_add'], $values['show_date_modify'], $values['seo_link'], $values['meta_title'], $values['meta_description'], $values['meta_keywords'], $values['layout_id'], $values['pages'], $values['noindex'], $values['repeat_entry'], $values['copy_from'], $values['social_icons'], $values['event_date'], $values['hidden-tags'], $values['block_direct_access'], $values['priority'], $values['password'], $values['pixieset'], $values['id_author'], $params diff --git a/autoload/admin/controls/class.Settings.php b/autoload/admin/controls/class.Settings.php index d328bd1..ba01075 100644 --- a/autoload/admin/controls/class.Settings.php +++ b/autoload/admin/controls/class.Settings.php @@ -54,6 +54,7 @@ class Settings \admin\factory\Settings::settings_update( 'lazy_loading', $values['lazy_loading'] == 'on' ? 1 : 0 ); \admin\factory\Settings::settings_update( 'generate_webp', $values['generate_webp'] == 'on' ? 1 : 0 ); \admin\factory\Settings::settings_update( 'contact_form_captcha', $values['contact_form_captcha'] == 'on' ? 1 : 0 ); + \admin\factory\Settings::settings_update( 'url_version', $values['url_version'] ); \S::alert( 'Ustawienia zostały zapisane.' ); diff --git a/autoload/admin/factory/class.Articles.php b/autoload/admin/factory/class.Articles.php index 55189a2..a10b710 100644 --- a/autoload/admin/factory/class.Articles.php +++ b/autoload/admin/factory/class.Articles.php @@ -238,7 +238,7 @@ class Articles } public static function article_save( - $article_id, $title, $main_image, $entry, $text, $table_of_contents, $status, $show_title, $show_date_add, $date_add, $show_date_modify, $seo_link, $meta_title, $meta_description, + $article_id, $title, $main_image, $entry, $text, $table_of_contents, $status, $show_title, $show_table_of_contents, $show_date_add, $date_add, $show_date_modify, $seo_link, $meta_title, $meta_description, $meta_keywords, $layout_id, $pages, $noindex, $repeat_entry, $copy_from, $social_icons, $event_date, $tags, $block_direct_access, $priority, $password, $pixieset, $id_author, $params ) { @@ -251,6 +251,7 @@ class Articles { $mdb -> insert( 'pp_articles', [ 'show_title' => $show_title == 'on' ? 1 : 0, + 'show_table_of_contents' => $show_table_of_contents == 'on' ? 1 : 0, 'show_date_add' => $show_date_add == 'on' ? 1 : 0, 'show_date_modify' => $show_date_modify == 'on' ? 1 : 0, 'date_add' => $date_add ? $date_add : date( 'Y-m-d H:i:s' ), @@ -435,6 +436,7 @@ class Articles { $mdb -> update( 'pp_articles', [ 'show_title' => $show_title == 'on' ? 1 : 0, + 'show_table_of_contents' => $show_table_of_contents == 'on' ? 1 : 0, 'show_date_add' => $show_date_add == 'on' ? 1 : 0, 'show_date_modify' => $show_date_modify == 'on' ? 1 : 0, 'date_modify' => date( 'Y-m-d H:i:s' ), diff --git a/autoload/admin/modlang.inc.php b/autoload/admin/modlang.inc.php deleted file mode 100644 index e69de29..0000000 diff --git a/autoload/class.S.php b/autoload/class.S.php index c7db4b4..278ead3 100644 --- a/autoload/class.S.php +++ b/autoload/class.S.php @@ -3,6 +3,30 @@ 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; @@ -10,25 +34,24 @@ class S if (file_exists($output_file)) return $output_file; - $file_type = strtolower(pathinfo($file, PATHINFO_EXTENSION)); + $file_type = mime_content_type( $file ); if (function_exists('imagewebp')) { switch ($file_type) { - case 'jpeg': - case 'jpg': + case 'image/jpeg': $image = imagecreatefromjpeg($file); break; - case 'png': + case 'image/png': $image = imagecreatefrompng($file); imagepalettetotruecolor($image); imagealphablending($image, true); imagesavealpha($image, true); break; - case 'gif': + case 'image/gif': $image = imagecreatefromgif($file); break; @@ -594,87 +617,87 @@ class S 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; - } + $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 - ); + $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 - ); + $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 . 'RewriteRule ^' . $row['id'] . '/$ index.php?a=change_language&id=' . $row['id'] . ' [L]'; } $htaccess_data .= PHP_EOL; @@ -682,215 +705,174 @@ $site_map[$domain['domain']] .= '' . 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 %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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 %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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 %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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 %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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 %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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 %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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 %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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 . 'RewriteCond %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '-s-1$ ' . $seo . ' [R=301,L]'; - - $htaccess_data .= PHP_EOL . 'RewriteCond %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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 %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} !=""'; - $htaccess_data .= PHP_EOL . 'RewriteRule ' . $seo . ' %{REQUEST_URI}? [R=301,L]'; - - $htaccess_data .= PHP_EOL . 'RewriteCond %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . ' [L]'; - - $htaccess_data .= PHP_EOL . 'RewriteCond %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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 %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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 . 'RewriteCond %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '-s-1$ ' . $seo . ' [R=301,L]'; - - $htaccess_data .= PHP_EOL . 'RewriteCond %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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 %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} !=""'; - $htaccess_data .= PHP_EOL . 'RewriteRule ' . $seo . ' %{REQUEST_URI}? [R=301,L]'; - - $htaccess_data .= PHP_EOL . 'RewriteCond %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . ' [L]'; - - $htaccess_data .= PHP_EOL . 'RewriteCond %{HTTP_HOST} ^' . $www . $url_tmp . '$ [NC]'; - $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']], + '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 (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']; + $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; + $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; + $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] .= '' . $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; @@ -900,419 +882,467 @@ $site_map[$domain['domain']] .= '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]'; + } - $htaccess_data .= PHP_EOL . 'RewriteCond %{HTTP_HOST} ^' . $domain . '$ [NC]'; - $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->get('pp_settings', 'value', ['param' => 'htaccess']); + if ($results) + $htaccess_data .= PHP_EOL . $results; - $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]'; - } + if (file_exists('../libraries/htaccess.ini')) + $htaccess_data .= PHP_EOL . file_get_contents('../libraries/htaccess.ini'); - $results = $mdb->get('pp_settings', 'value', ['param' => 'htaccess']); - if ($results) - $htaccess_data .= PHP_EOL . $results; + $results = $mdb->get('pp_settings', 'value', ['param' => 'robots']); + if ($results) + $robots .= 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) + 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); } - 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 + 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); -. 'RewriteCond %{SERVER_PORT} !=443' . PHP_EOL -. 'RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]' . PHP_EOL + $val = strtolower($val); + $val = preg_replace('/(-){2,}/', '-', $val); + $val = ltrim($val, '-'); + $val = rtrim($val, '-'); + return $val; + } -. '## 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]', -$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]' . PHP_EOL + 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' + ); -. '## 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]', -$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 + $string = strtr($string, $chars); -. 'RewriteCond %{SERVER_PORT} =443' . PHP_EOL -. 'RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]' . PHP_EOL + $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", " " => "-", "." => "", "," => "", + ":" => "", ";" => "", "—" => "", "–" => "-" + ); -. '## 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]', -$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]' . PHP_EOL + $string = strtr($string, $table); -. '## 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]', -$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; + return $string; } public static function delete_cache() { - \S::delete_dir('../cache/'); - \S::delete_dir('../temp/'); - \S::delete_dir('temp/'); + \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); + if (is_file($dir)) + return @unlink($dir); - else if (is_dir($dir)) - { - $scan = glob(rtrim($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_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); - } + 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 - ) - ); + 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) + { + $username = trim((string)$settings['email_login']); + $password = trim((string)$settings['email_password']); + $use_auth = ($username !== '' || $password !== ''); - 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']); - } + $build_mailer = function ($smtp_auth) use ($settings, $email, $subject, $text, $replay, $file, $username, $password) + { + $mail = new PHPMailer(); + $mail->IsSMTP(); + $mail->SMTPAuth = $smtp_auth ? true : false; + $mail->Host = $settings['email_host']; + $mail->Port = $settings['email_port']; + $mail->Username = $username; + $mail->Password = $password; + $mail->CharSet = "UTF-8"; + $mail->SMTPOptions = array( + 'ssl' => array( + 'verify_peer' => false, + 'verify_peer_name' => false, + 'allow_self_signed' => true + ) + ); - $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(); + 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; + }; + + $mail = $build_mailer($use_auth); + if ($mail->Send()) + return true; + + if ($use_auth) + { + $mail = $build_mailer(false); + if ($mail->Send()) + return true; + } + + return false; } return false; - } - } \ No newline at end of file + } +} diff --git a/autoload/front/factory/class.Articles.php b/autoload/front/factory/class.Articles.php index d17455d..4d0abbc 100644 --- a/autoload/front/factory/class.Articles.php +++ b/autoload/front/factory/class.Articles.php @@ -2,7 +2,87 @@ namespace front\factory; class Articles { - public static function pixieset_save_favorite_images( $hash ) { + static public function generateTableOfContents($content) { + $result = ''; + $currentLevel = []; + + preg_match_all('/<(h[1-6])([^>]*)>(.*?)<\/\1>/', $content, $matches, PREG_SET_ORDER); + + $firstLevel = true; + + foreach ($matches as $match) { + $level = intval(substr($match[1], 1)); + + while ($level < count($currentLevel)) { + $result .= '
  • '; + array_pop($currentLevel); + } + + if ($level > count($currentLevel)) { + while ($level > count($currentLevel)) { + if (count($currentLevel) > 0 || $firstLevel) { + $result .= '
      '; + $firstLevel = false; + } + array_push($currentLevel, 0); + } + $result .= '
    1. '; + } else { + $result .= '
    2. '; + } + + $currentLevel[count($currentLevel) - 1]++; + + preg_match('/\sid="([^"]*)"/', $match[2], $idMatches); + $id = isset($idMatches[1]) ? $idMatches[1] : ''; + + $result .= sprintf( + '%s', + urlencode(strtolower($id)), + $match[3] + ); + } + + while (!empty($currentLevel)) { + $result .= '
    '; + array_pop($currentLevel); + } + + if (substr($result, 0, 8) === '
        ') { + return substr($result, 4, -5); + } else { + return $result; + } + } + + // funkcja wywoływana dla każdego dopasowania do wyrażenia regularnego + static public function processHeaders( $matches ) + { + $level = $matches[1]; + $attrs = $matches[2]; + $content = $matches[3]; + $id_attr = 'id='; + $id_attr_pos = strpos($attrs, $id_attr); + if ($id_attr_pos === false) { // jeśli nie ma atrybutu id + $id = \S::seo( $content ); + $attrs .= sprintf(' id="%s"', $id); + } + + $html = sprintf( '%s', $level, $attrs, $content, $level ); + return $html; + } + + static public function generateHeadersIds( $text ) + { + $pattern = '/(.*?)<\/h\1>/si'; + + $text = preg_replace_callback( $pattern, array(__CLASS__, 'processHeaders'), $text ); + + return $text; + } + + public static function pixieset_save_favorite_images( $hash ) + { global $mdb, $settings; \S::delete_dir( 'temp/' ); @@ -149,6 +229,12 @@ class Articles public static function get_image( $article, $skip_entry = false ) { + if ( $article['language']['main_image'] ) + { + if ( file_exists( substr( $article['language']['main_image'], 1, strlen( $article['language']['main_image'] ) ) ) ) + return $article['language']['main_image']; + } + if ( !$skip_entry ) { $dom = new \DOMDocument(); diff --git a/autoload/front/factory/class.Menu.php b/autoload/front/factory/class.Menu.php index 11937b2..76e09a1 100644 --- a/autoload/front/factory/class.Menu.php +++ b/autoload/front/factory/class.Menu.php @@ -3,51 +3,51 @@ namespace front\factory; class Menu { - public static function submenu_details( $page_id ) + public static function submenu_details( $page_id, $lang_id ) { - return self::subpages( $page_id ); + return self::subpages( $page_id, $lang_id ); } - - public static function subpages( $page_id ) + + static public function subpages( $page_id, $lang_id ) { global $mdb; - - if ( !$pages = \Cache::fetch( "subpages:$page_id" ) ) + + if ( !$pages = \Cache::fetch( "subpages:$page_id:$lang_id" ) ) { $results = $mdb -> select( 'pp_pages', [ 'id' ], [ 'AND' => [ 'status' => 1, 'parent_id' => $page_id ], 'ORDER' => [ 'o' => 'ASC' ] ] ); if ( is_array( $results ) ) foreach ( $results as $row ) { $page = \front\factory\Pages::page_details( $row['id'] ); - $page['pages'] = self::subpages( $row['id'] ); + $page['pages'] = self::subpages( $row['id'], $lang_id ); $pages[] = $page; } - + \Cache::store( "subpages:$page_id", $pages ); } return $pages; } - + public static function menu_details( $menu_id ) { global $mdb, $lang_id; - + if ( !$menu = \Cache::fetch( "menu_details:$menu_id:$lang_id" ) ) { $menu = $mdb -> get( 'pp_menus', '*', [ 'id' => (int)$menu_id ] ); $menu['pages'] = self::menu_pages( $menu_id ); - + \Cache::store( "menu_details:$menu_id:$lang_id", $menu ); - } + } return $menu; } - + public static function menu_pages( $menu_id, $parent_id = null ) { global $mdb, $lang_id; - + if ( !$pages = \Cache::fetch( "menu_pages:$menu_id:$parent_id:$lang_id" ) ) - { + { $results = $mdb -> select( 'pp_pages', [ 'id' ], [ 'AND' => [ 'status' => 1, 'menu_id' => (int)$menu_id, 'parent_id' => $parent_id ], 'ORDER' => [ 'o' => 'ASC' ] ] ); if ( is_array( $results ) ) foreach ( $results as $row ) { @@ -56,7 +56,7 @@ class Menu $pages[] = $page; } - + \Cache::store( "menu_pages:$menu_id:$parent_id:$lang_id", $pages ); } return $pages; diff --git a/autoload/front/view/class.Articles.php b/autoload/front/view/class.Articles.php index 8be6203..108bbac 100644 --- a/autoload/front/view/class.Articles.php +++ b/autoload/front/view/class.Articles.php @@ -10,7 +10,7 @@ class Articles $tpl -> $key = $val; return $tpl -> render( 'articles/password-view' ); } - + public static function map( $settings, $map_counter ) { $tpl = new \Tpl; @@ -18,19 +18,19 @@ class Articles $tpl -> map_counter = $map_counter; return $tpl -> render( 'articles/map' ); } - + public static function tags_cloud() { global $settings; - + if ( !$settings['tags'] ) return false; - + $tpl = new \Tpl; $tpl -> tags = \front\factory\Articles::tags(); return $tpl -> render( 'articles/tags-cloud' ); } - + public static function news( $page_id, $articles ) { $tpl = new \Tpl; @@ -38,14 +38,14 @@ class Articles $tpl -> articles = $articles; return $tpl -> render( 'articles/news' ); } - + public static function articles_list( $articles ) { $tpl = new \Tpl; $tpl -> articles = $articles; return $tpl -> render( 'articles/articles-list' ); } - + public static function article( $values ) { $tpl = new \Tpl; @@ -53,26 +53,26 @@ class Articles $tpl -> $key = $val; return $tpl -> render( 'articles/article' ); } - + public static function article_full( $article_id, $lang_id ) { $tpl = new \Tpl; $tpl -> article = \front\factory\Articles::article_details( $article_id, $lang_id ); return $tpl -> render( 'articles/article-full' ); } - + public static function miniature_articles_list( $page, $lang_id, $bs = 1 ) { $results = \front\factory\Articles::page_articles( $page, $lang_id, $bs ); - + if ( is_array( $results['articles'] ) ) foreach ( $results['articles'] as $article ) $articles[] = \front\factory\Articles::article_details( $article, $lang_id ); - + $tpl = new \Tpl; $tpl -> page_id = $page['id']; $tpl -> articles = $articles; $out .= $tpl -> render( 'articles/articles-miniatures' ); - + if ( $results['ls'] > 1 ) { $tpl = new \Tpl; @@ -81,24 +81,24 @@ class Articles $tpl -> page = $page; $out .= $tpl -> render( 'site/pager' ); } - + return $out; } - + public static function entry_articles_list( $page, $lang_id, $bs = 1 ) { global $page; - + $results = \front\factory\Articles::page_articles( $page, $lang_id, $bs ); - + if ( is_array( $results['articles'] ) ) foreach ( $results['articles'] as $article ) $articles[] = \front\factory\Articles::article_details( $article, $lang_id ); - + $tpl = new \Tpl; $tpl -> page_id = $page['id']; $tpl -> articles = $articles; $out .= $tpl -> render( 'articles/articles-entries' ); - + if ( $results['ls'] > 1 ) { $tpl = new \Tpl; @@ -107,28 +107,29 @@ class Articles $tpl -> page = $page; $out .= $tpl -> render( 'site/pager' ); } - + return $out; } - + public static function full_articles_list( $page, $lang_id, $bs = 1 ) { $results = \front\factory\Articles::page_articles( $page, $lang_id, $bs ); - + if ( is_array( $results['articles'] ) ) foreach ( $results['articles'] as $article ) { $article_details = \front\factory\Articles::article_details( $article, $lang_id ); - + if ( $article_details['password'] and !\S::get_session( 'article-' . $article . '-' . $article_details['password'] ) ) $out .= \front\view\Articles::password_view( [ 'article' => $article ] ); else - { - $tpl = new \Tpl; - $tpl -> article = $article_details; - $out .= $tpl -> render( 'articles/article-full' ); + { + $out .= \Tpl::view( 'articles/article-full', [ + 'article' => $article_details, + 'table_of_contents' => \front\factory\Articles::generateTableOfContents( $article_details['language']['text'] ) + ] ); } } - + if ( $results['ls'] > 1 ) { $tpl = new \Tpl; @@ -137,7 +138,7 @@ class Articles $tpl -> page = $page; $out .= $tpl -> render( 'site/pager' ); } - + return $out; } } \ No newline at end of file diff --git a/autoload/front/view/class.Site.php b/autoload/front/view/class.Site.php index d7b8304..c85b5fe 100644 --- a/autoload/front/view/class.Site.php +++ b/autoload/front/view/class.Site.php @@ -109,7 +109,7 @@ class Site { $submenu_tmp = explode( ':', $submenu_tmp ); $html = str_replace( '[SUBMENU:' . $submenu_tmp[1] . ']', \front\view\Menu::submenu( - \front\factory\Menu::submenu_details( $submenu_tmp[1] ), $page['id'], $submenu_tmp[1] + \front\factory\Menu::submenu_details( $submenu_tmp[1], $lang_id ), $page['id'], $submenu_tmp[1] ), $html ); }