diff --git a/.gitignore b/.gitignore
index d53f0eb3a..0c762ac6b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,4 @@
!.gitignore
include/config.codekit3
/include/build
+/.htaccess
diff --git a/README.md b/README.md
index d8ebae621..c8dd8d795 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@ Link your browser to the related URL and follow the install instructions.
Server system requirements
--------------------------
-**phpwcms** version 1.9.7 requires a web server with PHP (minimum version 5.3 up to 7.x)
+**phpwcms** version 1.9.25 requires a web server with PHP (minimum version 5.5 up to 8.x)
and a MySQL database (minimum version 5.1, recommend 5.5+).
diff --git a/_.htaccess b/_.htaccess
index 2c5d9492c..e1e6793be 100644
--- a/_.htaccess
+++ b/_.htaccess
@@ -1,83 +1,346 @@
-# PHP: These settings are recommend - check phpinfo() before try these
-# register_globals ON
-# php_flag magic_quotes_gpc Off
-# php_flag magic_quotes_runtime Off
-# php_flag register_globals Off
-
-#Sometimes necessary to add special types
-# AddType application/x-javascript .js
-# AddType text/css .css
-# AddType video/ogg .ogv
-# AddType video/ogg .ogg
-# AddType video/mp4 .mp4
-# AddType video/x-m4v .m4v
-# AddType video/webm .webm
-# AddType image/svg+xml .svg
-# AddType application/font-woff .woff
-# AddType application/vnd.ms-fontobject .eot
-# AddType application/x-font-ttf .ttf
-# AddType application/x-font-opentype .otf
-
-# Options:
-# Options +FollowSymlinks
-# AcceptPathInfo On
-
-# All 404 error should link to phpwcms then
-# it is easy to define internal routing/redirection
-# ErrorDocument 404 /index.php?r404
-# Installed in Subfolder www.example.com/subfolder/
-# ErrorDocument 404 /subfolder/index.php?r404
-
-# Rewrite:
+#####
+#
+# Example .htaccess file for phpwcms - for use with Apache Webserver
+#
+# This file includes settings for the following configuration options:
+#
+# - Compression
+# - Caching
+# - MIME types
+# - Cross Origin requests
+# - Rewriting and Access
+# - Miscellaneous
+# - PHP optimisation
+#
+# If you want to use it, you have to copy it to the root folder of your TYPO3 installation (if its
+# not there already) and rename it to '.htaccess'. To make .htaccess files work, you might need to
+# adjust the 'AllowOverride' directive in your Apache configuration file.
+#
+# IMPORTANT: You may need to change this file depending on your phpwcms installation!
+# Consider adding this file's content to your webserver's configuration directly for speed improvement
+#
+# Lots of the options are taken from https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess
+#
+####
+
+
+### Begin: Compression ###
+
+#
+# AddType "text/javascript" .gzip
+#
+#
+# AddType "text/css" .gzip
+#
+#AddEncoding gzip .gzip
+
+
+ # Force compression for mangled `Accept-Encoding` request headers
+
+
+ SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
+ RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
+
+
+
+ # Compress all output labeled with one of the following media types.
+ #
+ # (!) For Apache versions below version 2.3.7 you don't need to
+ # enable `mod_filter` and can remove the ``
+ # and `` lines as `AddOutputFilterByType` is still in
+ # the core directives.
+ #
+ # https://httpd.apache.org/docs/current/mod/mod_filter.html#addoutputfilterbytype
+
+
+ AddOutputFilterByType DEFLATE application/atom+xml \
+ application/javascript \
+ application/json \
+ application/ld+json \
+ application/manifest+json \
+ application/rdf+xml \
+ application/rss+xml \
+ application/schema+json \
+ application/vnd.geo+json \
+ application/vnd.ms-fontobject \
+ application/x-font-ttf \
+ application/x-javascript \
+ application/x-web-app-manifest+json \
+ application/xhtml+xml \
+ application/xml \
+ font/eot \
+ font/opentype \
+ image/bmp \
+ image/svg+xml \
+ image/vnd.microsoft.icon \
+ image/x-icon \
+ text/cache-manifest \
+ text/css \
+ text/html \
+ text/javascript \
+ text/plain \
+ text/vcard \
+ text/vnd.rim.location.xloc \
+ text/vtt \
+ text/x-component \
+ text/x-cross-domain-policy \
+ text/xml
+
+
+
+ AddEncoding gzip svgz
+
+
+
+### End: Compression ###
+
+
+### Begin: Browser caching of resource files ###
+
+# This affects Frontend and Backend and increases performance.
+
+
+ ExpiresActive on
+ ExpiresDefault "access plus 1 month"
+
+ ExpiresByType application/atom+xml "access plus 1 hour"
+ ExpiresByType application/rdf+xml "access plus 1 hour"
+ ExpiresByType application/rss+xml "access plus 1 hour"
+
+ ExpiresByType application/json "access plus 0 seconds"
+ ExpiresByType application/ld+json "access plus 0 seconds"
+ ExpiresByType application/schema+json "access plus 0 seconds"
+ ExpiresByType application/geo+json "access plus 0 seconds"
+ ExpiresByType application/xml "access plus 0 seconds"
+ ExpiresByType text/calendar "access plus 0 seconds"
+ ExpiresByType text/xml "access plus 0 seconds"
+
+ ExpiresByType image/vnd.microsoft.icon "access plus 1 week"
+ ExpiresByType image/x-icon "access plus 1 week"
+
+ ExpiresByType text/x-component "access plus 1 month"
+
+ ExpiresByType text/html "access plus 0 seconds"
+
+ ExpiresByType application/javascript "access plus 1 year"
+ ExpiresByType application/x-javascript "access plus 1 year"
+ ExpiresByType text/javascript "access plus 1 year"
+
+ ExpiresByType application/manifest+json "access plus 1 week"
+ ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
+ ExpiresByType text/cache-manifest "access plus 0 seconds"
+
+ ExpiresByType text/markdown "access plus 0 seconds"
+
+ ExpiresByType audio/ogg "access plus 1 month"
+ ExpiresByType image/apng "access plus 1 month"
+ ExpiresByType image/avif "access plus 1 month"
+ ExpiresByType image/avif-sequence "access plus 1 month"
+ ExpiresByType image/bmp "access plus 1 month"
+ ExpiresByType image/gif "access plus 1 month"
+ ExpiresByType image/jpeg "access plus 1 month"
+ ExpiresByType image/png "access plus 1 month"
+ ExpiresByType image/svg+xml "access plus 1 month"
+ ExpiresByType image/webp "access plus 1 month"
+ ExpiresByType video/mp4 "access plus 1 month"
+ ExpiresByType video/ogg "access plus 1 month"
+ ExpiresByType video/webm "access plus 1 month"
+
+ ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
+ ExpiresByType font/eot "access plus 1 month"
+ ExpiresByType font/opentype "access plus 1 month"
+ ExpiresByType font/otf "access plus 1 month"
+ ExpiresByType application/x-font-ttf "access plus 1 month"
+ ExpiresByType font/ttf "access plus 1 month"
+ ExpiresByType application/font-woff "access plus 1 month"
+ ExpiresByType application/x-font-woff "access plus 1 month"
+ ExpiresByType font/woff "access plus 1 month"
+ ExpiresByType application/font-woff2 "access plus 1 month"
+ ExpiresByType font/woff2 "access plus 1 month"
+
+ ExpiresByType text/x-cross-domain-policy "access plus 1 week"
+
+
+
+### End: Browser caching of resource files ###
+
+
+### Begin: MIME types ###
+
+# Proper MIME types for all files
+
+ # Security configuration
+ RemoveType .html .htm
+
+ AddType text/html .html .htm
+
+
+ RemoveType .svg .svgz
+
+ AddType image/svg+xml .svg .svgz
+
+
+ # Data interchange
+ AddType application/atom+xml atom
+ AddType application/json json map topojson
+ AddType application/ld+json jsonld
+ AddType application/rss+xml rss
+ AddType application/geo+json geojson
+ AddType application/rdf+xml rdf
+ AddType application/xml xml
+
+ # JavaScript
+ AddType text/javascript js mjs
+
+ # Manifest files
+ AddType application/manifest+json webmanifest
+ AddType application/x-web-app-manifest+json webapp
+ AddType text/cache-manifest appcache
+
+ # Media files
+ AddType audio/mp4 f4a f4b m4a
+ AddType audio/ogg oga ogg opus
+ AddType image/avif avif
+ AddType image/avif-sequence avifs
+ AddType image/bmp bmp
+ AddType image/webp webp
+ AddType video/mp4 f4v f4p m4v mp4
+ AddType video/ogg ogv
+ AddType video/webm webm
+ AddType video/x-flv flv
+ AddType image/x-icon cur ico
+
+ # Web fonts
+ AddType font/woff woff
+ AddType font/woff2 woff2
+ AddType application/vnd.ms-fontobject eot
+ AddType font/ttf ttf
+ AddType font/collection ttc
+ AddType font/otf otf
+
+ # Other
+ AddType application/octet-stream safariextz
+ AddType application/x-bb-appworld bbaw
+ AddType application/x-chrome-extension crx
+ AddType application/x-opera-extension oex
+ AddType application/x-xpinstall xpi
+ AddType text/calendar ics
+ AddType text/markdown markdown md
+ AddType text/vcard vcard vcf
+ AddType text/vnd.rim.location.xloc xloc
+ AddType text/vtt vtt
+ AddType text/x-component htc
+
+
+
+# UTF-8 encoding
+AddDefaultCharset utf-8
+
+ AddCharset utf-8 .atom .css .htc .ics .js .json .manifest .map .markdown .md .mjs .rdf .rss .vtt .vcard .vcf .webapp .webmanifest .xloc .xml
+
+
+### End: MIME types ###
+
+
+### Begin: Cross Origin ###
+
+# Send the CORS header for images when browsers request it.
+
+
+
+ SetEnvIf Origin ":" IS_CORS
+ Header set Access-Control-Allow-Origin "*" env=IS_CORS
+
+
+
+
+# Allow cross-origin access to web fonts.
+
+
+ Header set Access-Control-Allow-Origin "*"
+
+
+
+# Allow cross-origin access to the timing information for all resources.
+#
+# Header set Timing-Allow-Origin: "*"
+#
+
+### End: Cross Origin ###
+
+
+# Force Internet Explorer 8/9/10 to render pages in the highest mode
+# available in various cases when it may not.
+
+ Header always set X-UA-Compatible "IE=edge" "expr=%{CONTENT_TYPE} =~ m#text/html#i"
+
+
+
+# Customize what Apache returns to the client in case of an error.
+ErrorDocument 404 /dev-phpwcms/index.php?r404
+
+
+### Begin: Rewriting and Access ###
+
+# You need rewriting, if you use a URL-Rewriting.
+
+ # Enable URL rewriting
RewriteEngine On
- # Force everything to www. and keep or force SSL status too
- #RewriteCond %{HTTP_HOST} !^$
- #RewriteCond %{HTTPS} off [OR]
- #RewriteCond %{HTTP_HOST} !^www\. [NC]
- #RewriteCond %{HTTPS}s ^on(s)|
- #RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
- #RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
+ # Store the current location in an environment variable CWD to use
+ # mod_rewrite in .htaccess files without knowing the RewriteBase
+ RewriteCond $0#%{REQUEST_URI} ([^#]*)#(.*)\1$
+ RewriteRule ^.*$ - [E=CWD:%2]
- # Some more simple redirect example
- #RewriteCond %{HTTP_HOST} ^example.com [OR]
- #RewriteCond %{HTTP_HOST} ^example-two.com [OR]
- #RewriteCond %{HTTP_HOST} ^www.example-two.de [OR]
- #RewriteCond %{SERVER_PORT} 80
- #RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
+ # For rewriting www to NON-www or force https and so check
+ # https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess#L270
- DirectoryIndex index.html index.php
+ # Rule for static files:
+ # IMPORTANT: This rule has to be the very first RewriteCond in order to work!
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ %{ENV:CWD}$1.$3 [L]
- # Redirect /en and /en/ to english home
- #RewriteRule ^(en|de)(/{0,1})$ ./index.php?$1/index [L,QSA]
+ # Access block for folders
+ RewriteRule ^(?:upload|content/tmp|filearchive) - [F]
+ RewriteRule (?:include)/[^/]+/(?:config|inc_front|inc_lang|inc_lib|inc_tmpl)/ - [F]
+ RewriteRule (?:template)/[^/]+/(?:inc_cntpart|inc_default|template_lang|inc_script/frontend_init|inc_script/frontend_render)/ - [F]
- # Use RewriteBase - always start in Document Root
- RewriteBase /
- # If installed in a subfolder
- #RewriteBase /subfolder/
-
- # Ignore all files and folders that exists
- RewriteCond %{REQUEST_FILENAME} -f [OR]
- RewriteCond %{REQUEST_FILENAME} -d
- RewriteRule ^(.+) - [PT,L]
+ # Block access to all hidden files and directories with the exception of
+ # the visible content from within the `/.well-known/` hidden directory (RFC 5785).
+ RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC]
+ RewriteCond %{SCRIPT_FILENAME} -d [OR]
+ RewriteCond %{SCRIPT_FILENAME} -f
+ RewriteRule (?:^|/)\. - [F]
# In case of config setting `$phpwcms['rewrite_url']=1` (Default)
# ===============================================================
# Resized image /img/cmsimage.php/… -> /im/…
- RewriteRule ^im\/(.+?)$ ./img/cmsimage.php?$1 [L]
+ RewriteRule ^im\/(.+)$ %{ENV:CWD}img/cmsimage.php?$1 [QSA,L]
# File download /dl/… -> /download.php?…
- RewriteRule ^dl\/([a-fA-Z0-9]+)\/(.*?)$ ./download.php?f=$1&%{QUERY_STRING} [L]
+ RewriteRule ^dl\/([a-fA-Z0-9]+)\/(.*?)$ %{ENV:CWD}download.php?f=$1 [QSA,L]
+
+ # Stop rewrite processing, if we are in the typo3/ directory or any other known directory
+ # NOTE: Add your additional local storages here
+ RewriteRule ^(?:template/|content/|picture/|uploads/) - [L]
+
+ # If the file/symlink/directory does not exist => Redirect to index.php.
+ # For httpd.conf, you need to prefix each '%{REQUEST_FILENAME}' with '%{DOCUMENT_ROOT}'.
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_FILENAME} !-l
- # In case of config setting `$phpwcms['rewrite_ext']='.html'` -> /alias.html (Default)
- RewriteRule ^(.+)\.html$ ./index.php?$1&%{QUERY_STRING} [L]
RewriteRule ^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\.html$ ./index.php?id=$1,$2,$3,$4,$5,$6&%{QUERY_STRING} [L]
+ RewriteRule ^(.+)\.html$ ./index.php?$1&%{QUERY_STRING} [L]
# Rewrite anything else and link it against phpwcms
# Check redirect settings under admin in the backend
- RewriteRule ^(.+)/?$ ./index.php?$1&%{QUERY_STRING}
+ # Be careful activating this – might makes only sense if
+ # the rewrite extension is only a slash "/"
+ #RewriteRule ^(.+)/?$ ./index.php?$1&%{QUERY_STRING} [L]
\ No newline at end of file
diff --git a/filebrowser.php b/filebrowser.php
index 698ae675c..e6769ce5d 100644
--- a/filebrowser.php
+++ b/filebrowser.php
@@ -279,7 +279,7 @@ function addFile(obj,text,value) {
switch($js_aktion) {
case 6:
- $file_sql .= "f_ext IN ('swf', 'mp3', 'flv', 'mp4', 'm4v', 'f4v', 'jpg', 'jpeg', 'png', 'gif', 'mp3', 'aac') AND ";
+ $file_sql .= "f_ext IN ('swf', 'mp3', 'flv', 'mp4', 'm4v', 'f4v', 'jpg', 'jpeg', 'png', 'gif', 'mp3', 'aac', 'webp') AND ";
break;
// H.264
diff --git a/image_resized.php b/image_resized.php
index 910d5203f..d5767cd20 100644
--- a/image_resized.php
+++ b/image_resized.php
@@ -88,19 +88,19 @@
switch($img_info[2]) {
- case IMAGETYPE_GIF: // GIF
+ case IMG_GIF: // GIF
$img_source = imagecreatefromgif($img_file);
break;
- case IMAGETYPE_JPEG: // JPG
+ case IMG_JPEG: // JPG
$img_source = imagecreatefromjpeg($img_file);
break;
- case IMAGETYPE_PNG: // PNG
+ case IMG_PNG: // PNG
$img_source = imagecreatefrompng($img_file);
break;
- case IMAGETYPE_WEBP: // WEBP
+ case IMG_WEBP: // WEBP
$img_source = imagecreatefromwebp($img_file);
break;
}
diff --git a/img/mapimage.php b/img/mapimage.php
index ddf584884..4e40f1f8b 100644
--- a/img/mapimage.php
+++ b/img/mapimage.php
@@ -32,7 +32,7 @@
$img_file = PHPWCMS_TEMPLATE . 'inc_cntpart/map/map_img/' . $img_file;
switch ( $img_info[2] ) {
- case IMAGETYPE_GIF: // GIF
+ case IMG_GIF: // GIF
if ( function_exists( 'imagegif' ) ) {
$img_mimetype = 'image/gif';
$img_target = 'gif';
@@ -44,21 +44,21 @@
$do = 1;
break;
- case IMAGETYPE_JPEG: // JPG
+ case IMG_JPEG: // JPG
$img_mimetype = 'image/jpeg';
$img_target = 'jpg';
$img_source = imagecreatefromjpeg( $img_file );
$do = 1;
break;
- case IMAGETYPE_PNG: // PNG
+ case IMG_PNG: // PNG
$img_mimetype = 'image/png';
$img_target = 'png';
$img_source = imagecreatefrompng( $img_file );
$do = 1;
break;
- case IMAGETYPE_WEBP: // WEBP
+ case IMG_WEBP: // WEBP
$img_mimetype = 'image/webp';
$img_target = 'webp';
$img_source = imagecreatefromwebp( $img_file );
diff --git a/img/random_image.php b/img/random_image.php
index abc976209..5f2d4a6e2 100644
--- a/img/random_image.php
+++ b/img/random_image.php
@@ -53,10 +53,10 @@
switch($imageinfo[2]) {
//1 = GIF, 2 = JPG, 3 = PNG
- case IMAGETYPE_GIF: header("Content-Type: image/gif"); break;
- case IMAGETYPE_JPEG: header("Content-Type: image/jpeg"); break;
- case IMAGETYPE_PNG: header("Content-Type: image/png"); break;
- case IMAGETYPE_WEBP: header("Content-Type: image/webp"); break;
+ case IMG_GIF: header("Content-Type: image/gif"); break;
+ case IMG_JPEG: header("Content-Type: image/jpeg"); break;
+ case IMG_PNG: header("Content-Type: image/png"); break;
+ case IMG_WEBP: header("Content-Type: image/webp"); break;
default: header("Content-Type: image/gif");
}
diff --git a/include/inc_act/act_export.php b/include/inc_act/act_export.php
index 9aeb345ae..57754f661 100644
--- a/include/inc_act/act_export.php
+++ b/include/inc_act/act_export.php
@@ -166,7 +166,7 @@
$ext = which_ext($export[$x][$key]);
$export[$x][$key] = html($export[$x][$key]);
- if($ext == 'jpg' || $ext == 'gif' || $ext == 'png') {
+ if($ext == 'jpg' || $ext == 'gif' || $ext == 'png' || (PHPWCMS_WEBP && $ext == 'webp')) {
echo '';
} else {
echo ''.$export[$x][$key].'';
diff --git a/include/inc_act/act_formmailer.php b/include/inc_act/act_formmailer.php
index 0aea84a89..ad78489e7 100644
--- a/include/inc_act/act_formmailer.php
+++ b/include/inc_act/act_formmailer.php
@@ -325,11 +325,12 @@ function phpwcms_form_encode($in_str, $charset) {
$false = '';
- if(isset($send_copy_to)) {
+ $mail->setFrom($recipient, $phpwcms['SMTP_FROM_NAME']);
+ $mail->addReplyTo($recipient);
- $mail->setFrom($recipient, $phpwcms['SMTP_FROM_NAME']);
- $mail->addReplyTo($recipient);
- $mail->addAddress($send_copy_to);
+ if(isset($send_copy_to)) {
+
+ $mail->addAddress($send_copy_to);
if(!$mail->send()) {
$false .= '(1) '.html($mail->ErrorInfo).'
';
@@ -338,14 +339,9 @@ function phpwcms_form_encode($in_str, $charset) {
$mail->setFrom($send_copy_to);
$mail->addReplyTo($send_copy_to);
- } else {
-
- $mail->setFrom($recipient, $phpwcms['SMTP_FROM_NAME']);
- $mail->addReplyTo($recipient);
-
}
- $mail->clearAddresses();
+ $mail->clearAddresses();
$mail->addAddress($recipient);
if(!$mail->send()) {
diff --git a/include/inc_act/act_ftptakeover.php b/include/inc_act/act_ftptakeover.php
index 94983b39a..c43f7db33 100644
--- a/include/inc_act/act_ftptakeover.php
+++ b/include/inc_act/act_ftptakeover.php
@@ -39,10 +39,16 @@
$ftp["file"][$key] = base64_decode($ftp["file"][$key]);
$ftp["filename"][$key] = clean_slweg($ftp["filename"][$key]);
} else {
- unset($ftp["mark"][$key], $ftp["file"][$key], $ftp["filename"][$key]);
+ unset(
+ $ftp["mark"][$key],
+ $ftp["file"][$key],
+ $ftp["filename"][$key]
+ );
}
}
- if(!count($ftp["mark"])) $ftp["error"] = 1;
+ if(!count($ftp["mark"])) {
+ $ftp["error"] = 1;
+ }
} else {
$ftp["error"] = 1;
}
@@ -85,18 +91,19 @@
require_once PHPWCMS_ROOT.'/include/inc_lib/classes/class.convertibletimestamp.php';
}
- $ftp["dir"] = intval($_POST["file_dir"]);
- $ftp["short_info"] = clean_slweg($_POST["file_shortinfo"]);
- $ftp["title"] = clean_slweg($_POST["file_title"]);
- $ftp["alt"] = clean_slweg($_POST["file_alt"]);
- $ftp["aktiv"] = empty($_POST["file_aktiv"]) ? 0 : 1;
- $ftp["public"] = empty($_POST["file_public"]) ? 0 : 1;
- $ftp["replace"] = empty($_POST["file_replace"]) ? 0 : 1;
- $ftp["long_info"] = slweg($_POST["file_longinfo"]);
- $ftp["copyright"] = slweg($_POST["file_copyright"]);
- $ftp["tags"] = trim( trim( clean_slweg($_POST["file_tags"]), ',') );
- $ftp["keywords"] = isset($_POST["file_keywords"]) ? $_POST["file_keywords"] : array();
- $ftp["keys"] = "";
+ $ftp['dir'] = intval($_POST['file_dir']);
+ $ftp['dir_new'] = empty($_POST['file_dir_new']) ? '' : clean_slweg($_POST['file_dir_new']);
+ $ftp['short_info'] = clean_slweg($_POST['file_shortinfo']);
+ $ftp['title'] = clean_slweg($_POST['file_title']);
+ $ftp['alt'] = clean_slweg($_POST['file_alt']);
+ $ftp['aktiv'] = empty($_POST['file_aktiv']) ? 0 : 1;
+ $ftp['public'] = empty($_POST['file_public']) ? 0 : 1;
+ $ftp['replace'] = empty($_POST['file_replace']) ? 0 : 1;
+ $ftp['long_info'] = slweg($_POST['file_longinfo']);
+ $ftp['copyright'] = slweg($_POST['file_copyright']);
+ $ftp['tags'] = trim( trim( clean_slweg($_POST['file_tags']), ',') );
+ $ftp['keywords'] = isset($_POST['file_keywords']) ? $_POST['file_keywords'] : array();
+ $ftp['keys'] = '';
$ftp['file_vars'] = array();
if(is_array($ftp["keywords"]) && count($ftp["keywords"])) {
@@ -113,7 +120,6 @@
}
if(count($phpwcms['allowed_lang']) > 1) {
-
foreach($phpwcms['allowed_lang'] as $lang) {
$lang = strtolower($lang);
@@ -144,9 +150,38 @@
$ftp['file_vars'][$lang]['alt'] = clean_slweg($_POST['file_alt_'.$lang]);
}
}
-
}
+ if ($ftp['dir_new']) {
+ if ($ftp['dir']) {
+ $where = 'f_kid=0 AND f_trash=0 AND f_id=' . $ftp['dir'];
+ if(empty($_SESSION["wcs_user_admin"])) {
+ $where .= ' AND f_uid='.intval($_SESSION["wcs_user_id"]);
+ }
+ $target_dir = _dbGet('phpwcms_file', '*', $where, '', '', 1);
+ }
+ if (isset($target_dir[0]['f_id'])) {
+ $dir_new_public = intval($target_dir[0]['f_public']);
+ $dir_new_active = intval($target_dir[0]['f_aktiv']);
+ } else {
+ $ftp['dir'] = 0;
+ $dir_new_public = $ftp["public"];
+ $dir_new_active = $ftp["aktiv"];
+ }
+ $data = array(
+ 'f_pid' => $ftp['dir'],
+ 'f_uid' => intval($_SESSION["wcs_user_id"]),
+ 'f_kid' => 0,
+ 'f_aktiv' => $dir_new_active,
+ 'f_public' => $dir_new_public,
+ 'f_name' => $ftp['dir_new'],
+ 'f_created' => now()
+ );
+ $new_dir = _dbInsert('phpwcms_file', $data);
+ if (isset($new_dir['INSERT_ID'])) {
+ $ftp['dir'] = intval($new_dir['INSERT_ID']);
+ }
+ }
?>
Selected files will be taken over!
Copy article, Copy strutures http://fernandobatista.net
//31-03-2005 Fernando Batista -> Copy/Cut Article Content http://fernandobatista.net
-use JetBrains\PhpStorm\Pure;
session_start();
$phpwcms = array();
@@ -441,7 +440,7 @@
_setConfig('structure_array_vmode_admin', '', 'frontend_render', 1);
if(isset($_POST['SubmitClose'])) {
- headerRedirect(PHPWCMS_URL.'phpwcms.php?'.get_token_get_string().'&do=admin&p=6&'.get_token_get_string('csrftoken'));
+ headerRedirect(PHPWCMS_URL.'phpwcms.php?'.get_token_get_string().'&do=admin&p=6');
} else {
headerRedirect($ref);
}
diff --git a/include/inc_ext/ckeditor/CHANGES.md b/include/inc_ext/ckeditor/CHANGES.md
index f545b64bf..cfa34a222 100644
--- a/include/inc_ext/ckeditor/CHANGES.md
+++ b/include/inc_ext/ckeditor/CHANGES.md
@@ -1,6 +1,18 @@
CKEditor 4 Changelog
====================
+## CKEditor 4.16.1
+
+Fixed Issues:
+* [#4617](https://github.com/ckeditor/ckeditor4/issues/4617): Fixed: [Autocomplete](https://ckeditor.com/cke4/addon/autocomplete) is not accessible in inline editors.
+* [#4493](https://github.com/ckeditor/ckeditor4/issues/4493): Fixed: The [drop-down](https://ckeditor.com/cke4/addon/richcombo) label does not reflect the current value of the drop-down.
+* [#1572](https://github.com/ckeditor/ckeditor4/issues/1572): Fixed: A paragraph before or after a [widget](https://ckeditor.com/cke4/addon/widget) cannot be removed. Thanks to [bunglegrind](https://github.com/bunglegrind)!
+* [#4301](https://github.com/ckeditor/ckeditor4/issues/4301): Fixed: Pasted content is overwritten when pasted in an initially empty editor with the [`div` Enter mode](https://ckeditor.com/docs/ckeditor4/latest/features/enterkey.html).
+* [#4351](https://github.com/ckeditor/ckeditor4/issues/4351): Fixed: Incorrect values for RGBA/HSLA colors in [Color Dialog](https://ckeditor.com/cke4/addon/colordialog).
+* [#4509](https://github.com/ckeditor/ckeditor4/issues/4509): Fixed: Incorrect handling of drag & drop inside [widgets](https://ckeditor.com/cke4/addon/widget) and nested editables.
+* [#4611](https://github.com/ckeditor/ckeditor4/issues/4611): [Android, iOS] Fixed: Incorrect hover styles for buttons in the toolbar on mobile devices.
+* [#4652](https://github.com/ckeditor/ckeditor4/issues/4652): Fixed: [Event data](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_eventInfo.html) set to `false` is treated as an event cancelation.
+
## CKEditor 4.16
**Security Updates:**
diff --git a/include/inc_ext/ckeditor/ckeditor.js b/include/inc_ext/ckeditor/ckeditor.js
index 5ec91609b..05f2e10aa 100644
--- a/include/inc_ext/ckeditor/ckeditor.js
+++ b/include/inc_ext/ckeditor/ckeditor.js
@@ -2,15 +2,15 @@
Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
-(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,d={timestamp:"L0QD",version:"4.16.0",revision:"17a1555f7f",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var c=window.CKEDITOR_BASEPATH||"";if(!c)for(var b=document.getElementsByTagName("script"),d=0;de.getListenerIndex(d)){e=e.listeners;f||(f=this);isNaN(h)&&(h=10);var z=this;k.fn=d;k.priority=h;for(var w=e.length-1;0<=w;w--)if(e[w].priority<=h)return e.splice(w+1,0,k),{removeListener:p};e.unshift(k)}return{removeListener:p}},
-once:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},f=0,l=function(){f=1};return function(h,k,p){var e=d(this)[h];h=a;var z=f;a=f=0;if(e){var w=e.listeners;if(w.length)for(var w=w.slice(0),y,G=0;Gy.getListenerIndex(c)){y=y.listeners;l||(l=this);isNaN(k)&&(k=10);p.fn=c;p.priority=k;for(var z=y.length-1;0<=z;z--)if(y[z].priority<=k)return y.splice(z+1,0,p),{removeListener:f};
+y.unshift(p)}return{removeListener:f}},once:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var c=0,e=function(){c=1},d=0,h=function(){d=1};return function(k,p,f){var x=b(this)[k];k=c;var y=d;c=d=0;if(x){var z=x.listeners;if(z.length)for(var z=z.slice(0),
+C,w=0;wdocument.documentMode),mobile:-1c||b.quirks);b.gecko&&(d=a.match(/rv:([\d\.]+)/))&&(d=d[1].split("."),c=1E4*d[0]+100*(d[1]||0)+1*(d[2]||0));b.air&&(c=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));
b.webkit&&(c=parseFloat(a.match(/ applewebkit\/(\d+)/)[1]));b.version=c;b.isCompatible=!(b.ie&&7>c)&&!(b.gecko&&4E4>c)&&!(b.webkit&&534>c);b.hidpi=2<=window.devicePixelRatio;b.needsBrFiller=b.gecko||b.webkit||b.ie&&10c;b.cssClass="cke_browser_"+(b.ie?"ie":b.gecko?"gecko":b.webkit?"webkit":"unknown");b.quirks&&(b.cssClass+=" cke_browser_quirks");b.ie&&(b.cssClass+=" cke_browser_ie"+(b.quirks?"6 cke_browser_iequirks":b.version));b.air&&(b.cssClass+=" cke_browser_air");
@@ -19,44 +19,44 @@ b.iOS&&(b.cssClass+=" cke_browser_ios");b.hidpi&&(b.cssClass+=" cke_hidpi");retu
CKEDITOR.loadFullCore,d=CKEDITOR.loadFullCoreTimeout;a&&(CKEDITOR.status="basic_ready",a&&a._load?a():d&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},1E3*d))})})();CKEDITOR.status="basic_loaded"}();"use strict";CKEDITOR.VERBOSITY_WARN=1;CKEDITOR.VERBOSITY_ERROR=2;CKEDITOR.verbosity=CKEDITOR.VERBOSITY_WARN|CKEDITOR.VERBOSITY_ERROR;CKEDITOR.warn=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_WARN&&CKEDITOR.fire("log",{type:"warn",errorCode:a,additionalData:d})};
CKEDITOR.error=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_ERROR&&CKEDITOR.fire("log",{type:"error",errorCode:a,additionalData:d})};
CKEDITOR.on("log",function(a){if(window.console&&window.console.log){var d=console[a.data.type]?a.data.type:"log",b=a.data.errorCode;if(a=a.data.additionalData)console[d]("[CKEDITOR] Error code: "+b+".",a);else console[d]("[CKEDITOR] Error code: "+b+".");console[d]("[CKEDITOR] For more information about this error go to https://ckeditor.com/docs/ckeditor4/latest/guide/dev_errors.html#"+b)}},null,null,999);CKEDITOR.dom={};
-(function(){function a(a,w,b){this._minInterval=a;this._context=b;this._lastOutput=this._scheduledTimer=0;this._output=CKEDITOR.tools.bind(w,b||{});var e=this;this.input=function(){function a(){e._lastOutput=(new Date).getTime();e._scheduledTimer=0;e._call()}if(!e._scheduledTimer||!1!==e._reschedule()){var z=(new Date).getTime()-e._lastOutput;z/g,l=/|\s) /g,function(a,b){return b+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",b=0;8>b;b++)a+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return a},override:function(a,
-b){var e=b(a);e.prototype=a.prototype;return e},setTimeout:function(a,b,e,c,h){h||(h=window);e||(e=h);return h.setTimeout(function(){c?a.apply(e,[].concat(c)):a.apply(e)},b||0)},throttle:function(a,b,e){return new this.buffers.throttle(a,b,e)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(b){return b.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(b){return b.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(b){return b.replace(a,
-"")}}(),indexOf:function(a,b){if("function"==typeof b)for(var e=0,c=a.length;eparseFloat(b);e&&(b=b.replace("-",""));a.setStyle("width",b);b=a.$.clientWidth;return e?-b:b}return b}}(),repeat:function(a,b){return Array(b+1).join(a)},tryThese:function(){for(var a,b=0,e=arguments.length;bb;b++)a[b]=("0"+parseInt(a[b],10).toString(16)).slice(-2);return"#"+a.join("")})},normalizeHex:function(a){return a.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(a,b,e,c){a=b.toLowerCase();3==a.length&&
-(a=a.split(""),a=[a[0],a[0],a[1],a[1],a[2],a[2]].join(""));return"#"+a+c})},_isValidColorFormat:function(a){if(!a)return!1;a=a.replace(/\s+/g,"");return/^[a-z0-9()#%,./]+$/i.test(a)},parseCssText:function(a,b,e){var c={};e&&(a=(new CKEDITOR.dom.element("span")).setAttribute("style",a).getAttribute("style")||"");a&&(a=CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(a)));if(!a||";"==a)return c;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,e,z){b&&(e=
-e.toLowerCase(),"font-family"==e&&(z=z.replace(/\s*,\s*/g,",")),z=CKEDITOR.tools.trim(z));c[e]=z});return c},writeCssText:function(a,b){var e,c=[];for(e in a)c.push(e+":"+a[e]);b&&c.sort();return c.join("; ")},objectCompare:function(a,b,e){var c;if(!a&&!b)return!0;if(!a||!b)return!1;for(c in a)if(a[c]!=b[c])return!1;if(!e)for(c in b)if(a[c]!=b[c])return!1;return!0},objectKeys:function(a){return CKEDITOR.tools.object.keys(a)},convertArrayToObject:function(a,b){var e={};1==arguments.length&&(b=!0);
-for(var c=0,h=a.length;ce;e++)a.push(Math.floor(256*Math.random()));for(e=0;en)for(d=n;3>d;d++)h[d]=0;k[0]=(h[0]&252)>>2;k[1]=(h[0]&3)<<4|h[1]>>4;k[2]=(h[1]&15)<<2|(h[2]&192)>>6;k[3]=h[2]&63;for(d=0;4>d;d++)b=d<=n?b+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(k[d]):b+"\x3d"}return b},style:{parse:{_borderStyle:"none hidden dotted dashed solid double groove ridge inset outset".split(" "),_widthRegExp:/^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/,
-_rgbaRegExp:/rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi,_hslaRegExp:/hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi,background:function(a){var b={},e=this._findColor(a);e.length&&(b.color=e[0],CKEDITOR.tools.array.forEach(e,function(b){a=a.replace(b,"")}));if(a=CKEDITOR.tools.trim(a))b.unprocessed=a;return b},margin:function(a){return CKEDITOR.tools.style.parse.sideShorthand(a,function(a){return a.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset|revert)/g)||
-["0px"]})},sideShorthand:function(a,b){function e(a){c.top=h[a[0]];c.right=h[a[1]];c.bottom=h[a[2]];c.left=h[a[3]]}var c={},h=b?b(a):a.split(/\s+/);switch(h.length){case 1:e([0,0,0,0]);break;case 2:e([0,1,0,1]);break;case 3:e([0,1,2,1]);break;case 4:e([0,1,2,3])}return c},border:function(a){return CKEDITOR.tools.style.border.fromCssRule(a)},_findColor:function(a){var b=[],e=CKEDITOR.tools.array,b=b.concat(a.match(this._rgbaRegExp)||[]),b=b.concat(a.match(this._hslaRegExp)||[]);return b=b.concat(e.filter(a.split(/\s+/),
-function(a){return a.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi)?!0:a.toLowerCase()in CKEDITOR.tools.style.parse._colors}))}}},array:{filter:function(a,b,e){var c=[];this.forEach(a,function(h,n){b.call(e,h,n,a)&&c.push(h)});return c},find:function(a,b,e){for(var c=a.length,h=0;hCKEDITOR.env.version&&(!a||"object"!==typeof a)){b=[];if("string"===typeof a)for(e=0;eCKEDITOR.env.version)for(h=0;h/g,l=/|\s) /g,function(a,b){return b+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",b=0;8>b;b++)a+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return a},override:function(a,
+b){var c=b(a);c.prototype=a.prototype;return c},setTimeout:function(a,b,c,f,h){h||(h=window);c||(c=h);return h.setTimeout(function(){f?a.apply(c,[].concat(f)):a.apply(c)},b||0)},throttle:function(a,b,c){return new this.buffers.throttle(a,b,c)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(b){return b.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(b){return b.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(b){return b.replace(a,
+"")}}(),indexOf:function(a,b){if("function"==typeof b)for(var c=0,f=a.length;cparseFloat(b);c&&(b=b.replace("-",""));a.setStyle("width",b);b=a.$.clientWidth;return c?-b:b}return b}}(),repeat:function(a,b){return Array(b+1).join(a)},tryThese:function(){for(var a,b=0,c=arguments.length;bb;b++)a[b]=("0"+parseInt(a[b],10).toString(16)).slice(-2);return"#"+a.join("")})},normalizeHex:function(a){return a.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(a,b,c,f){a=b.toLowerCase();3==a.length&&
+(a=a.split(""),a=[a[0],a[0],a[1],a[1],a[2],a[2]].join(""));return"#"+a+f})},_isValidColorFormat:function(a){if(!a)return!1;a=a.replace(/\s+/g,"");return/^[a-z0-9()#%,./]+$/i.test(a)},parseCssText:function(a,b,c){var f={};c&&(a=(new CKEDITOR.dom.element("span")).setAttribute("style",a).getAttribute("style")||"");a&&(a=CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(a)));if(!a||";"==a)return f;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,x){b&&(c=
+c.toLowerCase(),"font-family"==c&&(x=x.replace(/\s*,\s*/g,",")),x=CKEDITOR.tools.trim(x));f[c]=x});return f},writeCssText:function(a,b){var c,f=[];for(c in a)f.push(c+":"+a[c]);b&&f.sort();return f.join("; ")},objectCompare:function(a,b,c){var f;if(!a&&!b)return!0;if(!a||!b)return!1;for(f in a)if(a[f]!=b[f])return!1;if(!c)for(f in b)if(a[f]!=b[f])return!1;return!0},objectKeys:function(a){return CKEDITOR.tools.object.keys(a)},convertArrayToObject:function(a,b){var c={};1==arguments.length&&(b=!0);
+for(var f=0,h=a.length;fc;c++)a.push(Math.floor(256*Math.random()));for(c=0;cn)for(d=n;3>d;d++)h[d]=0;k[0]=(h[0]&252)>>2;k[1]=(h[0]&3)<<4|h[1]>>4;k[2]=(h[1]&15)<<2|(h[2]&192)>>6;k[3]=h[2]&63;for(d=0;4>d;d++)b=d<=n?b+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(k[d]):b+"\x3d"}return b},style:{parse:{_borderStyle:"none hidden dotted dashed solid double groove ridge inset outset".split(" "),_widthRegExp:/^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/,
+_rgbaRegExp:/rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi,_hslaRegExp:/hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi,background:function(a){var b={},c=this._findColor(a);c.length&&(b.color=c[0],CKEDITOR.tools.array.forEach(c,function(b){a=a.replace(b,"")}));if(a=CKEDITOR.tools.trim(a))b.unprocessed=a;return b},margin:function(a){return CKEDITOR.tools.style.parse.sideShorthand(a,function(a){return a.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset|revert)/g)||
+["0px"]})},sideShorthand:function(a,b){function c(a){f.top=h[a[0]];f.right=h[a[1]];f.bottom=h[a[2]];f.left=h[a[3]]}var f={},h=b?b(a):a.split(/\s+/);switch(h.length){case 1:c([0,0,0,0]);break;case 2:c([0,1,0,1]);break;case 3:c([0,1,2,1]);break;case 4:c([0,1,2,3])}return f},border:function(a){return CKEDITOR.tools.style.border.fromCssRule(a)},_findColor:function(a){var b=[],c=CKEDITOR.tools.array,b=b.concat(a.match(this._rgbaRegExp)||[]),b=b.concat(a.match(this._hslaRegExp)||[]);return b=b.concat(c.filter(a.split(/\s+/),
+function(a){return a.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi)?!0:a.toLowerCase()in CKEDITOR.tools.style.parse._colors}))}}},array:{filter:function(a,b,c){var f=[];this.forEach(a,function(h,n){b.call(c,h,n,a)&&f.push(h)});return f},find:function(a,b,c){for(var f=a.length,h=0;hCKEDITOR.env.version&&(!a||"object"!==typeof a)){b=[];if("string"===typeof a)for(c=0;cCKEDITOR.env.version)for(h=0;hd.sourceIndex||0>b.sourceIndex?CKEDITOR.POSITION_DISCONNECTED:d.sourceIndex=document.documentMode||!d||(a=d+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0];
+this.$.documentElement,c=0;b&&c=document.documentMode||!d||(a=d+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0];
return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),!0)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*]*?>)|^/i,'$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e('+
CKEDITOR.tools.fixDomain+")();\x3c/script\x3e"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");a||(a=this.$.createDocumentFragment(),CKEDITOR.tools.enableHtml5Elements(a,!0),this.setCustomData("html5ShivFrag",a));return a}});CKEDITOR.dom.nodeList=function(a){this.$=a};
CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){return 0>a||a>=this.$.length?null:(a=this.$[a])?new CKEDITOR.dom.node(a):null},toArray:function(){return CKEDITOR.tools.array.map(this.$,function(a){return new CKEDITOR.dom.node(a)})}};CKEDITOR.dom.element=function(a,d){"string"==typeof a&&(a=(d?d.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)};
CKEDITOR.dom.element.get=function(a){return(a="string"==typeof a?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(a,d){var b=new CKEDITOR.dom.element("div",d);b.setHtml(a);return b.getFirst().remove()};
-CKEDITOR.dom.element.setMarker=function(a,d,b,c){var g=d.getCustomData("list_marker_id")||d.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),f=d.getCustomData("list_marker_names")||d.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[g]=d;f[b]=1;return d.setCustomData(b,c)};CKEDITOR.dom.element.clearAllMarkers=function(a){for(var d in a)CKEDITOR.dom.element.clearMarkers(a,a[d],1)};
-CKEDITOR.dom.element.clearMarkers=function(a,d,b){var c=d.getCustomData("list_marker_names"),g=d.getCustomData("list_marker_id"),f;for(f in c)d.removeCustomData(f);d.removeCustomData("list_marker_names");b&&(d.removeCustomData("list_marker_id"),delete a[g])};
-(function(){function a(a,b){return-1<(" "+a+" ").replace(f," ").indexOf(" "+b+" ")}function d(a){var b=!0;a.$.id||(a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber(),b=!1);return function(){b||a.removeAttribute("id")}}function b(a,b){var c=CKEDITOR.tools.escapeCss(a.$.id);return"#"+c+" "+b.split(/,\s*/).join(", #"+c+" ")}function c(a){for(var b=0,c=0,e=l[a].length;cCKEDITOR.env.version?this.$.text+=a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();a&&a.is&&a.is("br")||(a=this.getDocument().createElement("br"),CKEDITOR.env.gecko&&a.setAttribute("type","_moz"),this.append(a))}},breakParent:function(a,b){var c=new CKEDITOR.dom.range(this.getDocument());c.setStartAfter(this);c.setEndAfter(a);
-var e=c.extractContents(!1,b||!1),d;c.insertNode(this.remove());if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){for(c=new CKEDITOR.dom.element("div");d=e.getFirst();)d.$.style.backgroundColor&&(d.$.style.backgroundColor=d.$.style.backgroundColor),c.append(d);c.insertAfter(this);c.remove(!0)}else e.insertAfterNode(this)},contains:document.compareDocumentPosition?function(a){return!!(this.$.compareDocumentPosition(a.$)&16)}:function(a){var b=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?b.contains(a.getParent().$):
+var f=c.extractContents(!1,b||!1),d;c.insertNode(this.remove());if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){for(c=new CKEDITOR.dom.element("div");d=f.getFirst();)d.$.style.backgroundColor&&(d.$.style.backgroundColor=d.$.style.backgroundColor),c.append(d);c.insertAfter(this);c.remove(!0)}else f.insertAfterNode(this)},contains:document.compareDocumentPosition?function(a){return!!(this.$.compareDocumentPosition(a.$)&16)}:function(a){var b=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?b.contains(a.getParent().$):
b!=a.$&&b.contains(a.$)},focus:function(){function a(){try{this.$.focus()}catch(b){}}return function(b){b?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(!0));return a.innerHTML},getClientRect:function(a){var b=CKEDITOR.tools.extend({},
-this.$.getBoundingClientRect());!b.width&&(b.width=b.right-b.left);!b.height&&(b.height=b.bottom-b.top);return a?CKEDITOR.tools.getAbsoluteRectPosition(this.getWindow(),b):b},setHtml:CKEDITOR.env.ie&&9>CKEDITOR.env.version?function(a){try{var b=this.$;if(this.getParent())return b.innerHTML=a;var c=this.getDocument()._getHtml5ShivFrag();c.appendChild(b);b.innerHTML=a;c.removeChild(b);return a}catch(e){this.$.innerHTML="";b=new CKEDITOR.dom.element("body",this.getDocument());b.$.innerHTML=a;for(b=b.getChildren();b.count();)this.append(b.getItem(0));
+this.$.getBoundingClientRect());!b.width&&(b.width=b.right-b.left);!b.height&&(b.height=b.bottom-b.top);return a?CKEDITOR.tools.getAbsoluteRectPosition(this.getWindow(),b):b},setHtml:CKEDITOR.env.ie&&9>CKEDITOR.env.version?function(a){try{var b=this.$;if(this.getParent())return b.innerHTML=a;var c=this.getDocument()._getHtml5ShivFrag();c.appendChild(b);b.innerHTML=a;c.removeChild(b);return a}catch(f){this.$.innerHTML="";b=new CKEDITOR.dom.element("body",this.getDocument());b.$.innerHTML=a;for(b=b.getChildren();b.count();)this.append(b.getItem(0));
return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p");a.innerHTML="x";a=a.textContent;return function(b){this.$[a?"textContent":"innerText"]=b}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":return a=this.$.getAttribute(a,
-2),0!==a&&0===this.$.tabIndex&&(a=null),a;case "checked":return a=this.$.attributes.getNamedItem(a),(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getAttributes:function(a){var b={},c=this.$.attributes,e;a=CKEDITOR.tools.isArray(a)?
-a:[];for(e=0;e=document.documentMode){var b=this.$.scopeName;"HTML"!=b&&(a=b.toLowerCase()+":"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var b=this.$.firstChild;(b=b&&new CKEDITOR.dom.node(b))&&a&&!a(b)&&(b=b.getNext(a));return b},getLast:function(a){var b=this.$.lastChild;(b=b&&new CKEDITOR.dom.node(b))&&a&&!a(b)&&(b=b.getPrevious(a));return b},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},
is:function(){var a=this.getName();if("object"==typeof arguments[0])return!!arguments[0][a];for(var b=0;bCKEDITOR.env.version&&this.is("a")){var c=this.getParent();c.type==CKEDITOR.NODE_ELEMENT&&(c=c.clone(),c.setHtml(b),b=c.getHtml(),c.setHtml(a),a=c.getHtml())}return b==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&"hidden"!=this.getComputedStyle("visibility"),b,c;a&&CKEDITOR.env.webkit&&(b=this.getWindow(),!b.equals(CKEDITOR.document.getWindow())&&(c=b.$.frameElement)&&(a=(new CKEDITOR.dom.element(c)).isVisible()));return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return!1;
-for(var a=this.getChildren(),b=0,c=a.count();bCKEDITOR.env.version?function(b){return"name"==b?!!this.$.name:a.call(this,b)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,b){var c=this.$;a=a.$;if(c!=a){var e;if(b)for(;e=c.lastChild;)a.insertBefore(c.removeChild(e),a.firstChild);else for(;e=c.firstChild;)a.appendChild(c.removeChild(e))}},mergeSiblings:function(){function a(b,c,e){if(c&&c.type==CKEDITOR.NODE_ELEMENT){for(var d=
-[];c.data("cke-bookmark")||c.isEmptyInlineRemoveable();)if(d.push(c),c=e?c.getNext():c.getPrevious(),!c||c.type!=CKEDITOR.NODE_ELEMENT)return;if(b.isIdentical(c)){for(var h=e?b.getLast():b.getFirst();d.length;)d.shift().move(b,!e);c.moveChildren(b,!e);c.remove();h&&h.type==CKEDITOR.NODE_ELEMENT&&h.mergeSiblings()}}}return function(b){if(!1===b||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"",
+c.specified:!1}return CKEDITOR.env.ie?8>CKEDITOR.env.version?function(b){return"name"==b?!!this.$.name:a.call(this,b)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,b){var c=this.$;a=a.$;if(c!=a){var f;if(b)for(;f=c.lastChild;)a.insertBefore(c.removeChild(f),a.firstChild);else for(;f=c.firstChild;)a.appendChild(c.removeChild(f))}},mergeSiblings:function(){function a(b,c,f){if(c&&c.type==CKEDITOR.NODE_ELEMENT){for(var d=
+[];c.data("cke-bookmark")||c.isEmptyInlineRemoveable();)if(d.push(c),c=f?c.getNext():c.getPrevious(),!c||c.type!=CKEDITOR.NODE_ELEMENT)return;if(b.isIdentical(c)){for(var h=f?b.getLast():b.getFirst();d.length;)d.shift().move(b,!f);c.moveChildren(b,!f);c.remove();h&&h.type==CKEDITOR.NODE_ELEMENT&&h.mergeSiblings()}}}return function(b){if(!1===b||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"",
visibility:""})},setAttribute:function(){var a=function(a,b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(b,c){"class"==b?this.$.className=c:"style"==b?this.$.style.cssText=c:"tabindex"==b?this.$.tabIndex=c:"checked"==b?this.$.checked=c:"contenteditable"==b?a.call(this,"contentEditable",c):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(b,c){if("src"==b&&c.match(/^http:\/\//))try{a.apply(this,
-arguments)}catch(e){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,a[b]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){"class"==a?a="className":"tabindex"==a?a="tabIndex":"contenteditable"==a&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b=
-0;bCKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select",
-"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,e=b.count();cg||0g?g:d);c&&(0>f||0f?f:e,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+
+arguments)}catch(f){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,a[b]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){"class"==a?a="className":"tabindex"==a?a="tabIndex":"contenteditable"==a&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b=
+0;bCKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select",
+"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,f=b.count();cg||0g?g:d);c&&(0>e||0e?e:f,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+
"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",!0);c&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",!0);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off"),this.removeClass(b+"_on"),this.removeClass(b+"_disabled"),c&&this.removeAttribute("aria-pressed"),c&&this.removeAttribute("aria-disabled")}},
-getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,b){var c=this.$.attributes;b=b||{};for(var e=0;eCKEDITOR.env.version){var d=e.ownerDocument.createEventObject(),f;for(f in b)d[f]=b[f];e.fireEvent(c,
-d)}else e[e[a]?a:c](b)},isDetached:function(){var a=this.getDocument(),b=a.getDocumentElement();return b.equals(this)||b.contains(this)?!CKEDITOR.env.ie||8CKEDITOR.env.version){var d=f.ownerDocument.createEventObject(),e;for(e in b)d[e]=b[e];f.fireEvent(c,
+d)}else f[f[a]?a:c](b)},isDetached:function(){var a=this.getDocument(),b=a.getDocumentElement();return b.equals(this)||b.contains(this)?!CKEDITOR.env.ie||8=F.getChildCount()?(F=F.getChild(A-1),r=!0):F=F.getChild(A):D=r=!0;m.type==CKEDITOR.NODE_TEXT?k?u=!0:m.split(M):0da)for(;L;)L=g(L,B,!0);B=C}k||
-h()}}function b(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!0),d=CKEDITOR.dom.walker.bogus();return function(g){return c(g)||b(g)?!0:d(g)&&!a?a=!0:g.type==CKEDITOR.NODE_TEXT&&(g.hasAscendant("pre")||CKEDITOR.tools.trim(g.getText()).length)||g.type==CKEDITOR.NODE_ELEMENT&&!g.is(f)?!1:!0}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?!0:!a&&l(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}
-function g(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&p(a)&&(b=a);return k(a)&&!(l(a)&&a.equals(b))})}}var f={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},l=CKEDITOR.dom.walker.bogus(),h=/^[\t\r\n ]*(?: |\xa0)$/,k=CKEDITOR.dom.walker.editable(),p=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a=
-new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){a?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer),this.startOffset=this.endOffset);this.collapsed=!0},cloneContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||
-d(this,2,b,!1,"undefined"==typeof a?!0:a);return b},deleteContents:function(a){this.collapsed||d(this,0,null,a)},extractContents:function(a,b){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,1,c,a,"undefined"==typeof b?!0:b);return c},equals:function(a){return this.startOffset===a.startOffset&&this.endOffset===a.endOffset&&this.startContainer.equals(a.startContainer)&&this.endContainer.equals(a.endContainer)},createBookmark:function(a){function b(a){return a.getAscendant(function(a){var b;
-if(b=a.data&&a.data("cke-temp"))b=-1===CKEDITOR.tools.array.indexOf(["cke_copybin","cke_pastebin"],a.getAttribute("id"));return b},!0)}var c=this.startContainer,d=this.endContainer,f=this.collapsed,g,n,h,l;g=this.document.createElement("span");g.data("cke-bookmark",1);g.setStyle("display","none");g.setHtml("\x26nbsp;");a&&(h="cke_bm_"+CKEDITOR.tools.getNextNumber(),g.setAttribute("id",h+(f?"C":"S")));f||(n=g.clone(),n.setHtml("\x26nbsp;"),a&&n.setAttribute("id",h+"E"),l=this.clone(),b(d)&&(d=b(d),
-l.moveToPosition(d,CKEDITOR.POSITION_AFTER_END)),l.collapse(),l.insertNode(n));l=this.clone();b(c)&&(d=b(c),l.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START));l.collapse(!0);l.insertNode(g);n?(this.setStartAfter(g),this.setEndBefore(n)):this.moveToPosition(g,CKEDITOR.POSITION_AFTER_END);return{startNode:a?h+(f?"C":"S"):g,endNode:a?h+"E":n,serializable:a,collapsed:f}},createBookmark2:function(){function a(b){var e=b.container,d=b.offset,f;f=e;var g=d;f=f.type!=CKEDITOR.NODE_ELEMENT||0===g||g==f.getChildCount()?
-0:f.getChild(g-1).type==CKEDITOR.NODE_TEXT&&f.getChild(g).type==CKEDITOR.NODE_TEXT;f&&(e=e.getChild(d-1),d=e.getLength());if(e.type==CKEDITOR.NODE_ELEMENT&&0=a.offset&&(a.offset=d.getIndex(),a.container=d.getParent()))}}var c=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,!0);return function(c){var d=this.collapsed,f={container:this.startContainer,offset:this.startOffset},n={container:this.endContainer,offset:this.endOffset};c&&(a(f),b(f,this.root),
-d||(a(n),b(n,this.root)));return{start:f.container.getAddress(c),end:d?null:n.container.getAddress(c),startOffset:f.offset,endOffset:n.offset,normalized:c,collapsed:d,is2:!0}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized);a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(!0)}else b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode,a=c?this.document.getById(a.endNode):
-a.endNode,this.setStartBefore(b),b.remove(),a?(this.setEndBefore(a),a.remove()):this.collapse(!0)},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,f;if(a.type==CKEDITOR.NODE_ELEMENT)if(f=a.getChildCount(),f>c)a=a.getChild(c);else if(1>f)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}if(b.type==CKEDITOR.NODE_ELEMENT)if(f=b.getChildCount(),f>d)b=b.getChild(d).getPreviousSourceNode(!0);
-else if(1>f)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;
+(function(){function a(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function d(a,b,c,d,e){function g(a,b,c,f){var D=c?a.getPrevious():a.getNext();if(f&&l)return D;k||f?b.append(a.clone(!0,e),c):(a.remove(),p&&b.append(a,c));return D}function n(){var a,b,c,f=Math.min(S.length,t.length);for(a=0;a=G.getChildCount()?(G=G.getChild(A-1),r=!0):G=G.getChild(A):E=r=!0;m.type==CKEDITOR.NODE_TEXT?k?u=!0:m.split(L):0fa)for(;aa;)aa=g(aa,
+B,!0);B=D}k||h()}}function b(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!0),d=CKEDITOR.dom.walker.bogus();return function(g){return c(g)||b(g)?!0:d(g)&&!a?a=!0:g.type==CKEDITOR.NODE_TEXT&&(g.hasAscendant("pre")||CKEDITOR.tools.trim(g.getText()).length)||g.type==CKEDITOR.NODE_ELEMENT&&!g.is(e)?!1:!0}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?!0:!a&&l(d)||d.type==CKEDITOR.NODE_ELEMENT&&
+d.is(CKEDITOR.dtd.$removeEmpty)}}function g(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&p(a)&&(b=a);return k(a)&&!(l(a)&&a.equals(b))})}}var e={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},l=CKEDITOR.dom.walker.bogus(),h=/^[\t\r\n ]*(?: |\xa0)$/,k=CKEDITOR.dom.walker.editable(),p=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype=
+{clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){a?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer),this.startOffset=this.endOffset);this.collapsed=!0},cloneContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);
+this.collapsed||d(this,2,b,!1,"undefined"==typeof a?!0:a);return b},deleteContents:function(a){this.collapsed||d(this,0,null,a)},extractContents:function(a,b){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,1,c,a,"undefined"==typeof b?!0:b);return c},equals:function(a){return this.startOffset===a.startOffset&&this.endOffset===a.endOffset&&this.startContainer.equals(a.startContainer)&&this.endContainer.equals(a.endContainer)},createBookmark:function(a){function b(a){return a.getAscendant(function(a){var b;
+if(b=a.data&&a.data("cke-temp"))b=-1===CKEDITOR.tools.array.indexOf(["cke_copybin","cke_pastebin"],a.getAttribute("id"));return b},!0)}var c=this.startContainer,d=this.endContainer,e=this.collapsed,g,n,h,l;g=this.document.createElement("span");g.data("cke-bookmark",1);g.setStyle("display","none");g.setHtml("\x26nbsp;");a&&(h="cke_bm_"+CKEDITOR.tools.getNextNumber(),g.setAttribute("id",h+(e?"C":"S")));e||(n=g.clone(),n.setHtml("\x26nbsp;"),a&&n.setAttribute("id",h+"E"),l=this.clone(),b(d)&&(d=b(d),
+l.moveToPosition(d,CKEDITOR.POSITION_AFTER_END)),l.collapse(),l.insertNode(n));l=this.clone();b(c)&&(d=b(c),l.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START));l.collapse(!0);l.insertNode(g);n?(this.setStartAfter(g),this.setEndBefore(n)):this.moveToPosition(g,CKEDITOR.POSITION_AFTER_END);return{startNode:a?h+(e?"C":"S"):g,endNode:a?h+"E":n,serializable:a,collapsed:e}},createBookmark2:function(){function a(b){var f=b.container,d=b.offset,e;e=f;var g=d;e=e.type!=CKEDITOR.NODE_ELEMENT||0===g||g==e.getChildCount()?
+0:e.getChild(g-1).type==CKEDITOR.NODE_TEXT&&e.getChild(g).type==CKEDITOR.NODE_TEXT;e&&(f=f.getChild(d-1),d=f.getLength());if(f.type==CKEDITOR.NODE_ELEMENT&&0=a.offset&&(a.offset=d.getIndex(),a.container=d.getParent()))}}var c=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,!0);return function(c){var d=this.collapsed,e={container:this.startContainer,offset:this.startOffset},n={container:this.endContainer,offset:this.endOffset};c&&(a(e),b(e,this.root),
+d||(a(n),b(n,this.root)));return{start:e.container.getAddress(c),end:d?null:n.container.getAddress(c),startOffset:e.offset,endOffset:n.offset,normalized:c,collapsed:d,is2:!0}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized);a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(!0)}else b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode,a=c?this.document.getById(a.endNode):
+a.endNode,this.setStartBefore(b),b.remove(),a?(this.setEndBefore(a),a.remove()):this.collapse(!0)},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,e;if(a.type==CKEDITOR.NODE_ELEMENT)if(e=a.getChildCount(),e>c)a=a.getChild(c);else if(1>e)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}if(b.type==CKEDITOR.NODE_ELEMENT)if(e=b.getChildCount(),e>d)b=b.getChild(d).getPreviousSourceNode(!0);
+else if(1>e)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;
a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&a.is("span")&&a.data("cke-bookmark")&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&b.is&&b.is("span")&&b.data("cke-bookmark")&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,
-b){var c=this.startContainer,d=this.startOffset,f=this.collapsed;if((!a||f)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength())d=c.getIndex()+1,c=c.getParent();else{var g=c.split(d),d=c.getIndex()+1,c=c.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(g,this.endOffset-this.startOffset):c.equals(this.endContainer)&&(this.endOffset+=1)}else d=c.getIndex(),c=c.getParent();this.setStart(c,d);if(f){this.collapse(!0);return}}c=this.endContainer;d=this.endOffset;b||f||!c||c.type!=
-CKEDITOR.NODE_TEXT||(d?(d>=c.getLength()||c.split(d),d=c.getIndex()+1):d=c.getIndex(),c=c.getParent(),this.setEnd(c,d))},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=new RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var f=1;case CKEDITOR.ENLARGE_ELEMENT:var g=function(a,b){var c=new CKEDITOR.dom.range(h);c.setStart(a,b);c.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),e;for(c.guard=
-function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};e=c.next();){if(e.type!=CKEDITOR.NODE_TEXT)return!1;N=e!=a?e.getText():e.substring(b);if(d.test(N))return!1}return!0};if(this.collapsed)break;var n=this.getCommonAncestor(),h=this.root,l,p,k,m,F,M=!1,A,N;A=this.startContainer;var r=this.startOffset;A.type==CKEDITOR.NODE_TEXT?(r&&(A=!CKEDITOR.tools.trim(A.substring(0,r)).length&&A,M=!!A),A&&((m=A.getPrevious())||(k=A.getParent()))):(r&&(m=A.getChild(r-1)||A.getLast()),m||(k=A));
-for(k=c(k);k||m;){if(k&&!m){!F&&k.equals(n)&&(F=!0);if(f?k.isBlockBoundary():!h.contains(k))break;M&&"inline"==k.getComputedStyle("display")||(M=!1,F?l=k:this.setStartBefore(k));m=k.getPrevious()}for(;m;)if(A=!1,m.type==CKEDITOR.NODE_COMMENT)m=m.getPrevious();else{if(m.type==CKEDITOR.NODE_TEXT)N=m.getText(),d.test(N)&&(m=null),A=/[\s\ufeff]$/.test(N);else if((m.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&m.is("br"))&&!m.data("cke-bookmark"))if(M&&CKEDITOR.dtd.$removeEmpty[m.getName()]){N=m.getText();
-if(d.test(N))m=null;else for(var r=m.$.getElementsByTagName("*"),E=0,D;D=r[E++];)if(!CKEDITOR.dtd.$removeEmpty[D.nodeName.toLowerCase()]){m=null;break}m&&(A=!!N.length)}else m=null;A&&(M?F?l=k:k&&this.setStartBefore(k):M=!0);if(m){A=m.getPrevious();if(!k&&!A){k=m;m=null;break}m=A}else k=null}k&&(k=c(k.getParent()))}A=this.endContainer;r=this.endOffset;k=m=null;F=M=!1;A.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(A.substring(r)).length?M=!0:(M=!A.getLength(),r==A.getLength()?(m=A.getNext())||(k=A.getParent()):
-g(A,r)&&(k=A.getParent())):(m=A.getChild(r))||(k=A);for(;k||m;){if(k&&!m){!F&&k.equals(n)&&(F=!0);if(f?k.isBlockBoundary():!h.contains(k))break;M&&"inline"==k.getComputedStyle("display")||(M=!1,F?p=k:k&&this.setEndAfter(k));m=k.getNext()}for(;m;){A=!1;if(m.type==CKEDITOR.NODE_TEXT)N=m.getText(),g(m,0)||(m=null),A=/^[\s\ufeff]/.test(N);else if(m.type==CKEDITOR.NODE_ELEMENT){if((0=c.getLength())d=c.getIndex()+1,c=c.getParent();else{var g=c.split(d),d=c.getIndex()+1,c=c.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(g,this.endOffset-this.startOffset):c.equals(this.endContainer)&&(this.endOffset+=1)}else d=c.getIndex(),c=c.getParent();this.setStart(c,d);if(e){this.collapse(!0);return}}c=this.endContainer;d=this.endOffset;b||e||!c||c.type!=
+CKEDITOR.NODE_TEXT||(d?(d>=c.getLength()||c.split(d),d=c.getIndex()+1):d=c.getIndex(),c=c.getParent(),this.setEnd(c,d))},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=new RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var e=1;case CKEDITOR.ENLARGE_ELEMENT:var g=function(a,b){var c=new CKEDITOR.dom.range(h);c.setStart(a,b);c.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),f;for(c.guard=
+function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};f=c.next();){if(f.type!=CKEDITOR.NODE_TEXT)return!1;M=f!=a?f.getText():f.substring(b);if(d.test(M))return!1}return!0};if(this.collapsed)break;var n=this.getCommonAncestor(),h=this.root,l,p,k,m,G,L=!1,A,M;A=this.startContainer;var r=this.startOffset;A.type==CKEDITOR.NODE_TEXT?(r&&(A=!CKEDITOR.tools.trim(A.substring(0,r)).length&&A,L=!!A),A&&((m=A.getPrevious())||(k=A.getParent()))):(r&&(m=A.getChild(r-1)||A.getLast()),m||(k=A));
+for(k=c(k);k||m;){if(k&&!m){!G&&k.equals(n)&&(G=!0);if(e?k.isBlockBoundary():!h.contains(k))break;L&&"inline"==k.getComputedStyle("display")||(L=!1,G?l=k:this.setStartBefore(k));m=k.getPrevious()}for(;m;)if(A=!1,m.type==CKEDITOR.NODE_COMMENT)m=m.getPrevious();else{if(m.type==CKEDITOR.NODE_TEXT)M=m.getText(),d.test(M)&&(m=null),A=/[\s\ufeff]$/.test(M);else if((m.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&m.is("br"))&&!m.data("cke-bookmark"))if(L&&CKEDITOR.dtd.$removeEmpty[m.getName()]){M=m.getText();
+if(d.test(M))m=null;else for(var r=m.$.getElementsByTagName("*"),F=0,E;E=r[F++];)if(!CKEDITOR.dtd.$removeEmpty[E.nodeName.toLowerCase()]){m=null;break}m&&(A=!!M.length)}else m=null;A&&(L?G?l=k:k&&this.setStartBefore(k):L=!0);if(m){A=m.getPrevious();if(!k&&!A){k=m;m=null;break}m=A}else k=null}k&&(k=c(k.getParent()))}A=this.endContainer;r=this.endOffset;k=m=null;G=L=!1;A.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(A.substring(r)).length?L=!0:(L=!A.getLength(),r==A.getLength()?(m=A.getNext())||(k=A.getParent()):
+g(A,r)&&(k=A.getParent())):(m=A.getChild(r))||(k=A);for(;k||m;){if(k&&!m){!G&&k.equals(n)&&(G=!0);if(e?k.isBlockBoundary():!h.contains(k))break;L&&"inline"==k.getComputedStyle("display")||(L=!1,G?p=k:k&&this.setEndAfter(k));m=k.getNext()}for(;m;){A=!1;if(m.type==CKEDITOR.NODE_TEXT)M=m.getText(),g(m,0)||(m=null),A=/^[\s\ufeff]/.test(M);else if(m.type==CKEDITOR.NODE_ELEMENT){if((0=n.getLength()?g.setStartAfter(n):(g.setStartBefore(n),c=0):g.setStartBefore(n));h&&h.type==CKEDITOR.NODE_TEXT&&(k?k>=h.getLength()?g.setEndAfter(h):(g.setEndAfter(h),p=0):g.setEndBefore(h));var g=new CKEDITOR.dom.walker(g),m=CKEDITOR.dom.walker.bookmark(),F=CKEDITOR.dom.walker.bogus();g.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var M;g.guard=function(b,c){if(f&&F(b)||m(b))return!0;if(a==CKEDITOR.SHRINK_ELEMENT&&
-b.type==CKEDITOR.NODE_TEXT||c&&b.equals(M)||!1===d&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return!1;c||b.type!=CKEDITOR.NODE_ELEMENT||(M=b);return!0};c&&(n=g[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(n,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);p&&(g.reset(),(g=g[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(g,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END));
+a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?e:O;u=t=Q=null;k=k.lastForward();u=u||h;this.setEndAt(u,!k&&this.checkEndOfBlock()||k&&u.contains(k)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);Q&&this.setEndAfter(Q)}},shrink:function(a,b,c){var d="boolean"===typeof c?c:c&&"boolean"===typeof c.shrinkOnBlockBoundary?c.shrinkOnBlockBoundary:!0,e=c&&c.skipBogus;if(!this.collapsed){a=a||CKEDITOR.SHRINK_TEXT;var g=this.clone(),n=this.startContainer,h=this.endContainer,l=this.startOffset,k=this.endOffset,
+p=c=1;n&&n.type==CKEDITOR.NODE_TEXT&&(l?l>=n.getLength()?g.setStartAfter(n):(g.setStartBefore(n),c=0):g.setStartBefore(n));h&&h.type==CKEDITOR.NODE_TEXT&&(k?k>=h.getLength()?g.setEndAfter(h):(g.setEndAfter(h),p=0):g.setEndBefore(h));var g=new CKEDITOR.dom.walker(g),m=CKEDITOR.dom.walker.bookmark(),G=CKEDITOR.dom.walker.bogus();g.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var L;g.guard=function(b,c){if(e&&G(b)||m(b))return!0;if(a==CKEDITOR.SHRINK_ELEMENT&&
+b.type==CKEDITOR.NODE_TEXT||c&&b.equals(L)||!1===d&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return!1;c||b.type!=CKEDITOR.NODE_ELEMENT||(L=b);return!0};c&&(n=g[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(n,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);p&&(g.reset(),(g=g[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(g,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END));
return!(!c&&!p)}},insertNode:function(a){this.optimizeBookmark();this.trim(!1,!0);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(!0)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,
a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex(),b=b.getParent());this._setStartContainer(b);this.startOffset=c;this.endContainer||(this._setEndContainer(b),this.endOffset=c);a(this)},setEnd:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex()+1,b=b.getParent());this._setEndContainer(b);this.endOffset=c;this.startContainer||(this._setStartContainer(b),
this.startOffset=c);a(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setStart(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setStart(b,b.getLength()):this.setStart(b,
b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(b)}a(this)},setEndAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setEnd(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setEnd(b,b.getLength()):this.setEnd(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(b)}a(this)},fixBlock:function(a,
-b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();this.insertNode(d);var f=d.getBogus();f&&f.remove();d.appendBogus();this.moveToBookmark(c);return d},splitBlock:function(a,b){var c=new CKEDITOR.dom.elementPath(this.startContainer,this.root),d=new CKEDITOR.dom.elementPath(this.endContainer,this.root),f=c.block,g=d.block,n=null;if(!c.blockLimit.equals(d.blockLimit))return null;"br"!=
-a&&(f||(f=this.fixBlock(!0,a),g=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),g||(g=this.fixBlock(!1,a)));c=f&&this.checkStartOfBlock();d=g&&this.checkEndOfBlock();this.deleteContents();f&&f.equals(g)&&(d?(n=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(g,CKEDITOR.POSITION_AFTER_END),g=null):c?(n=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START),f=null):(g=this.splitElement(f,b||
-!1),f.is("ul","ol")||f.appendBogus()));return{previousBlock:f,nextBlock:g,wasStartOfBlock:c,wasEndOfBlock:d,elementPath:n}},splitElement:function(a,b){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var c=this.extractContents(!1,b||!1),d=a.clone(!1,b||!1);c.appendTo(d);d.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return d},removeEmptyBlocksAtEnd:function(){function a(e){return function(a){return b(a)||c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()||
-e.is("table")&&a.is("caption")?!1:!0}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!1);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),f=d.block||d.blockLimit,g;f&&!f.equals(d.root)&&!f.getFirst(a(f));)g=f.getParent(),this[b?"setEndAt":"setStartAt"](f,CKEDITOR.POSITION_AFTER_END),f.remove(1),f=g;this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,
-this.root)},checkBoundaryOfElement:function(a,b){var d=b==CKEDITOR.START,f=this.clone();f.collapse(d);f[d?"setStartAt":"setEndAt"](a,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);f=new CKEDITOR.dom.walker(f);f.evaluator=c(d);return f[d?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.ltrim(a.substring(0,c)),h.test(a)&&this.trim(0,1));this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,
+b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();this.insertNode(d);var e=d.getBogus();e&&e.remove();d.appendBogus();this.moveToBookmark(c);return d},splitBlock:function(a,b){var c=new CKEDITOR.dom.elementPath(this.startContainer,this.root),d=new CKEDITOR.dom.elementPath(this.endContainer,this.root),e=c.block,g=d.block,n=null;if(!c.blockLimit.equals(d.blockLimit))return null;"br"!=
+a&&(e||(e=this.fixBlock(!0,a),g=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),g||(g=this.fixBlock(!1,a)));c=e&&this.checkStartOfBlock();d=g&&this.checkEndOfBlock();this.deleteContents();e&&e.equals(g)&&(d?(n=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(g,CKEDITOR.POSITION_AFTER_END),g=null):c?(n=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e=null):(g=this.splitElement(e,b||
+!1),e.is("ul","ol")||e.appendBogus()));return{previousBlock:e,nextBlock:g,wasStartOfBlock:c,wasEndOfBlock:d,elementPath:n}},splitElement:function(a,b){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var c=this.extractContents(!1,b||!1),d=a.clone(!1,b||!1);c.appendTo(d);d.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return d},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()||
+d.is("table")&&a.is("caption")?!1:!0}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!1);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),e=d.block||d.blockLimit,g;e&&!e.equals(d.root)&&!e.getFirst(a(e));)g=e.getParent(),this[b?"setEndAt":"setStartAt"](e,CKEDITOR.POSITION_AFTER_END),e.remove(1),e=g;this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,
+this.root)},checkBoundaryOfElement:function(a,b){var d=b==CKEDITOR.START,e=this.clone();e.collapse(d);e[d?"setStartAt":"setEndAt"](a,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);e.evaluator=c(d);return e[d?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.ltrim(a.substring(0,c)),h.test(a)&&this.trim(0,1));this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,
this.root);c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkBackward()},checkEndOfBlock:function(){var a=this.endContainer,c=this.endOffset;CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.rtrim(a.substring(c)),h.test(a)&&this.trim(1,0));this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(!1);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);
a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==
CKEDITOR.NODE_ELEMENT){if("false"==b.getAttribute("contentEditable")&&!b.data("cke-editable"))return 0;if(b.is("html")||"true"==b.getAttribute("contentEditable")&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(!1))return this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START),
!0;for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&h.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),c=1;else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);
-else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),!0;var d=a,f=c,g=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(!1)&&(g=d[b?"getLast":"getFirst"](p));f||g||(g=d[b?"getPrevious":"getNext"](p));a=g}return!!c},moveToClosestEditablePosition:function(a,b){var c,d=0,f,g,n=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(c=new CKEDITOR.dom.range(this.root),c.moveToPosition(a,n[b?0:1])):c=this.clone();if(a&&
-!a.is(CKEDITOR.dtd.$block))d=1;else if(f=c[b?"getNextEditableNode":"getPreviousEditableNode"]())d=1,(g=f.type==CKEDITOR.NODE_ELEMENT)&&f.is(CKEDITOR.dtd.$block)&&"false"==f.getAttribute("contenteditable")?(c.setStartAt(f,CKEDITOR.POSITION_BEFORE_START),c.setEndAt(f,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&g&&f.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(c.setEnd(f,0),c.collapse()):c.moveToPosition(f,n[b?1:0]);d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},
+else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),!0;var d=a,e=c,g=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(!1)&&(g=d[b?"getLast":"getFirst"](p));e||g||(g=d[b?"getPrevious":"getNext"](p));a=g}return!!c},moveToClosestEditablePosition:function(a,b){var c,d=0,e,g,n=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(c=new CKEDITOR.dom.range(this.root),c.moveToPosition(a,n[b?0:1])):c=this.clone();if(a&&
+!a.is(CKEDITOR.dtd.$block))d=1;else if(e=c[b?"getNextEditableNode":"getPreviousEditableNode"]())d=1,(g=e.type==CKEDITOR.NODE_ELEMENT)&&e.is(CKEDITOR.dtd.$block)&&"false"==e.getAttribute("contenteditable")?(c.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),c.setEndAt(e,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&g&&e.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(c.setEnd(e,0),c.collapse()):c.moveToPosition(e,n[b?1:0]);d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},
moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,!0)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(!1,!0),c=CKEDITOR.dom.walker.whitespaces(!0);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;
return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:g(),getPreviousEditableNode:g(1),_getTableElement:function(a){a=a||{td:1,th:1,tr:1,tbody:1,thead:1,tfoot:1,table:1};var b=this.getTouchedStartNode(),c=this.getTouchedEndNode(),d=b.getAscendant("table",!0),c=c.getAscendant("table",!0);return d&&!this.root.contains(d)?
-null:this.getEnclosedNode()?this.getEnclosedNode().getAscendant(a,!0):d&&c&&(d.equals(c)||d.contains(c)||c.contains(d))?b.getAscendant(a,!0):null},scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",this.document),b,c,d,f=this.clone();f.optimize();(d=f.startContainer.type==CKEDITOR.NODE_TEXT)?(c=f.startContainer.getText(),b=f.startContainer.split(f.startOffset),a.insertAfter(f.startContainer)):f.insertNode(a);a.scrollIntoView();d&&(f.startContainer.setText(c),
+null:this.getEnclosedNode()?this.getEnclosedNode().getAscendant(a,!0):d&&c&&(d.equals(c)||d.contains(c)||c.contains(d))?b.getAscendant(a,!0):null},scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",this.document),b,c,d,e=this.clone();e.optimize();(d=e.startContainer.type==CKEDITOR.NODE_TEXT)?(c=e.startContainer.getText(),b=e.startContainer.split(e.startOffset),a.insertAfter(e.startContainer)):e.insertNode(a);a.scrollIntoView();d&&(e.startContainer.setText(c),
b.remove());a.remove()},getClientRects:function(){function a(b,c){var d=CKEDITOR.tools.array.map(b,function(a){return a}),e=new CKEDITOR.dom.range(c.root),f,g,h;c.startContainer instanceof CKEDITOR.dom.element&&(g=0===c.startOffset&&c.startContainer.hasAttribute("data-widget"));c.endContainer instanceof CKEDITOR.dom.element&&(h=(h=c.endOffset===(c.endContainer.getChildCount?c.endContainer.getChildCount():c.endContainer.length))&&c.endContainer.hasAttribute("data-widget"));g&&e.setStart(c.startContainer.getParent(),
c.startContainer.getIndex());h&&e.setEnd(c.endContainer.getParent(),c.endContainer.getIndex()+1);if(g||h)c=e;e=c.cloneContents().find("[data-cke-widget-id]").toArray();if(e=CKEDITOR.tools.array.map(e,function(a){var b=c.root.editor;a=a.getAttribute("data-cke-widget-id");return b.widgets.instances[a].element}))return e=CKEDITOR.tools.array.map(e,function(a){var b;b=a.getParent().hasClass("cke_widget_wrapper")?a.getParent():a;f=this.root.getDocument().$.createRange();f.setStart(b.getParent().$,b.getIndex());
f.setEnd(b.getParent().$,b.getIndex()+1);b=f.getClientRects();b.widgetRect=a.getClientRect();return b},c),CKEDITOR.tools.array.forEach(e,function(a){function b(e){CKEDITOR.tools.array.forEach(d,function(b,f){var g=CKEDITOR.tools.objectCompare(a[e],b);g||(g=CKEDITOR.tools.objectCompare(a.widgetRect,b));g&&(Array.prototype.splice.call(d,f,a.length-e,a.widgetRect),c=!0)});c||(earguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function d(a){var b=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function b(a,c,f,g){a:{null==g&&(g=d(f));for(var h;h=g.shift();)if(h.getDtd().p){g={element:h,remaining:g};break a}g=null}if(!g)return 0;if((h=CKEDITOR.filter.instances[g.element.data("cke-filter")])&&!h.check(c))return b(a,
-c,f,g.remaining);c=new CKEDITOR.dom.range(g.element);c.selectNodeContents(g.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:g.element,container:f,remaining:g.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return!1;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var g=/^[\r\n\t ]+$/,f=CKEDITOR.dom.walker.bookmark(!1,!0),l=CKEDITOR.dom.walker.whitespaces(!0),
-h=function(a){return f(a)&&l(a)},k={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var d,l,w,y,G;a=a||"p";if(this._.nestedEditable){if(d=this._.nestedEditable.iterator.getNextParagraph(a))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,d;this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(a);this._.nestedEditable=
-null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var q=this.range.clone();l=q.startPath();var n=q.endPath(),H=!q.collapsed&&c(q,l.block),x=!q.collapsed&&c(q,n.block,1);q.shrink(CKEDITOR.SHRINK_ELEMENT,!0);H&&q.setStartAt(l.block,CKEDITOR.POSITION_BEFORE_END);x&&q.setEndAt(n.block,CKEDITOR.POSITION_AFTER_START);l=q.endContainer.hasAscendant("pre",!0)||q.startContainer.hasAscendant("pre",!0);q.enlarge(this.forceBrBreak&&!l||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);
-q.collapsed||(l=new CKEDITOR.dom.walker(q.clone()),n=CKEDITOR.dom.walker.bookmark(!0,!0),l.evaluator=n,this._.nextNode=l.next(),l=new CKEDITOR.dom.walker(q.clone()),l.evaluator=n,l=l.previous(),this._.lastNode=l.getNextSourceNode(!0,null,q.root),this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(n=this.range.clone(),n.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),n.checkEndOfBlock()&&
-(n=new CKEDITOR.dom.elementPath(n.endContainer,n.root),this._.lastNode=(n.block||n.blockLimit).getNextSourceNode(!0))),this._.lastNode&&q.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=q.document.createText(""),this._.lastNode.insertAfter(l)),q=null);this._.started=1;l=q}n=this._.nextNode;q=this._.lastNode;for(this._.nextNode=null;n;){var H=0,x=n.hasAscendant("pre"),I=n.type!=CKEDITOR.NODE_ELEMENT,K=0;if(I)n.type==CKEDITOR.NODE_TEXT&&g.test(n.getText())&&(I=0);else{var m=n.getName();
-if(CKEDITOR.dtd.$block[m]&&"false"==n.getAttribute("contenteditable")){d=n;b(this,a,d);break}else if(n.isBlockBoundary(this.forceBrBreak&&!x&&{br:1})){if("br"==m)I=1;else if(!l&&!n.getChildCount()&&"hr"!=m){d=n;w=n.equals(q);break}l&&(l.setEndAt(n,CKEDITOR.POSITION_BEFORE_START),"br"!=m&&(this._.nextNode=n));H=1}else{if(n.getFirst()){l||(l=this.range.clone(),l.setStartAt(n,CKEDITOR.POSITION_BEFORE_START));n=n.getFirst();continue}I=1}}I&&!l&&(l=this.range.clone(),l.setStartAt(n,CKEDITOR.POSITION_BEFORE_START));
-w=(!H||I)&&n.equals(q);if(l&&!H)for(;!n.getNext(h)&&!w;){m=n.getParent();if(m.isBlockBoundary(this.forceBrBreak&&!x&&{br:1})){H=1;I=0;w||m.equals(q);l.setEndAt(m,CKEDITOR.POSITION_BEFORE_END);break}n=m;I=1;w=n.equals(q);K=1}I&&l.setEndAt(n,CKEDITOR.POSITION_AFTER_END);n=this._getNextSourceNode(n,K,q);if((w=!n)||H&&l)break}if(!d){if(!l)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;d=new CKEDITOR.dom.elementPath(l.startContainer,l.root);n=d.blockLimit;H={div:1,th:1,td:1};
-d=d.block;!d&&n&&!this.enforceRealBlocks&&H[n.getName()]&&l.checkStartOfBlock()&&l.checkEndOfBlock()&&!n.equals(l.root)?d=n:!d||this.enforceRealBlocks&&d.is(k)?(d=this.range.document.createElement(a),l.extractContents().appendTo(d),d.trim(),l.insertNode(d),y=G=!0):"li"!=d.getName()?l.checkStartOfBlock()&&l.checkEndOfBlock()||(d=d.clone(!1),l.extractContents().appendTo(d),d.trim(),G=l.splitBlock(),y=!G.wasStartOfBlock,G=!G.wasEndOfBlock,l.insertNode(d)):w||(this._.nextNode=d.equals(q)?null:this._getNextSourceNode(l.getBoundaryNodes().endNode,
-1,q))}y&&(y=d.getPrevious())&&y.type==CKEDITOR.NODE_ELEMENT&&("br"==y.getName()?y.remove():y.getLast()&&"br"==y.getLast().$.nodeName.toLowerCase()&&y.getLast().remove());G&&(y=d.getLast())&&y.type==CKEDITOR.NODE_ELEMENT&&"br"==y.getName()&&(!CKEDITOR.env.needsBrFiller||y.getPrevious(f)||y.getNext(f))&&y.remove();this._.nextNode||(this._.nextNode=w||d.equals(q)||!q?null:this._getNextSourceNode(d,1,q));return d},_getNextSourceNode:function(a,b,c){function d(a){return!(a.equals(c)||a.equals(g))}var g=
-this.range.root;for(a=a.getNextSourceNode(b,null,d);!f(a);)a=a.getNextSourceNode(b,null,d);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})();
+(function(){function a(a){1>arguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function d(a){var b=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function b(a,c,e,g){a:{null==g&&(g=d(e));for(var h;h=g.shift();)if(h.getDtd().p){g={element:h,remaining:g};break a}g=null}if(!g)return 0;if((h=CKEDITOR.filter.instances[g.element.data("cke-filter")])&&!h.check(c))return b(a,
+c,e,g.remaining);c=new CKEDITOR.dom.range(g.element);c.selectNodeContents(g.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:g.element,container:e,remaining:g.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return!1;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var g=/^[\r\n\t ]+$/,e=CKEDITOR.dom.walker.bookmark(!1,!0),l=CKEDITOR.dom.walker.whitespaces(!0),
+h=function(a){return e(a)&&l(a)},k={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var d,l,y,z,C;a=a||"p";if(this._.nestedEditable){if(d=this._.nestedEditable.iterator.getNextParagraph(a))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,d;this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(a);this._.nestedEditable=
+null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var w=this.range.clone();l=w.startPath();var n=w.endPath(),H=!w.collapsed&&c(w,l.block),q=!w.collapsed&&c(w,n.block,1);w.shrink(CKEDITOR.SHRINK_ELEMENT,!0);H&&w.setStartAt(l.block,CKEDITOR.POSITION_BEFORE_END);q&&w.setEndAt(n.block,CKEDITOR.POSITION_AFTER_START);l=w.endContainer.hasAscendant("pre",!0)||w.startContainer.hasAscendant("pre",!0);w.enlarge(this.forceBrBreak&&!l||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);
+w.collapsed||(l=new CKEDITOR.dom.walker(w.clone()),n=CKEDITOR.dom.walker.bookmark(!0,!0),l.evaluator=n,this._.nextNode=l.next(),l=new CKEDITOR.dom.walker(w.clone()),l.evaluator=n,l=l.previous(),this._.lastNode=l.getNextSourceNode(!0,null,w.root),this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(n=this.range.clone(),n.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),n.checkEndOfBlock()&&
+(n=new CKEDITOR.dom.elementPath(n.endContainer,n.root),this._.lastNode=(n.block||n.blockLimit).getNextSourceNode(!0))),this._.lastNode&&w.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=w.document.createText(""),this._.lastNode.insertAfter(l)),w=null);this._.started=1;l=w}n=this._.nextNode;w=this._.lastNode;for(this._.nextNode=null;n;){var H=0,q=n.hasAscendant("pre"),I=n.type!=CKEDITOR.NODE_ELEMENT,K=0;if(I)n.type==CKEDITOR.NODE_TEXT&&g.test(n.getText())&&(I=0);else{var m=n.getName();
+if(CKEDITOR.dtd.$block[m]&&"false"==n.getAttribute("contenteditable")){d=n;b(this,a,d);break}else if(n.isBlockBoundary(this.forceBrBreak&&!q&&{br:1})){if("br"==m)I=1;else if(!l&&!n.getChildCount()&&"hr"!=m){d=n;y=n.equals(w);break}l&&(l.setEndAt(n,CKEDITOR.POSITION_BEFORE_START),"br"!=m&&(this._.nextNode=n));H=1}else{if(n.getFirst()){l||(l=this.range.clone(),l.setStartAt(n,CKEDITOR.POSITION_BEFORE_START));n=n.getFirst();continue}I=1}}I&&!l&&(l=this.range.clone(),l.setStartAt(n,CKEDITOR.POSITION_BEFORE_START));
+y=(!H||I)&&n.equals(w);if(l&&!H)for(;!n.getNext(h)&&!y;){m=n.getParent();if(m.isBlockBoundary(this.forceBrBreak&&!q&&{br:1})){H=1;I=0;y||m.equals(w);l.setEndAt(m,CKEDITOR.POSITION_BEFORE_END);break}n=m;I=1;y=n.equals(w);K=1}I&&l.setEndAt(n,CKEDITOR.POSITION_AFTER_END);n=this._getNextSourceNode(n,K,w);if((y=!n)||H&&l)break}if(!d){if(!l)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;d=new CKEDITOR.dom.elementPath(l.startContainer,l.root);n=d.blockLimit;H={div:1,th:1,td:1};
+d=d.block;!d&&n&&!this.enforceRealBlocks&&H[n.getName()]&&l.checkStartOfBlock()&&l.checkEndOfBlock()&&!n.equals(l.root)?d=n:!d||this.enforceRealBlocks&&d.is(k)?(d=this.range.document.createElement(a),l.extractContents().appendTo(d),d.trim(),l.insertNode(d),z=C=!0):"li"!=d.getName()?l.checkStartOfBlock()&&l.checkEndOfBlock()||(d=d.clone(!1),l.extractContents().appendTo(d),d.trim(),C=l.splitBlock(),z=!C.wasStartOfBlock,C=!C.wasEndOfBlock,l.insertNode(d)):y||(this._.nextNode=d.equals(w)?null:this._getNextSourceNode(l.getBoundaryNodes().endNode,
+1,w))}z&&(z=d.getPrevious())&&z.type==CKEDITOR.NODE_ELEMENT&&("br"==z.getName()?z.remove():z.getLast()&&"br"==z.getLast().$.nodeName.toLowerCase()&&z.getLast().remove());C&&(z=d.getLast())&&z.type==CKEDITOR.NODE_ELEMENT&&"br"==z.getName()&&(!CKEDITOR.env.needsBrFiller||z.getPrevious(e)||z.getNext(e))&&z.remove();this._.nextNode||(this._.nextNode=y||d.equals(w)||!w?null:this._getNextSourceNode(d,1,w));return d},_getNextSourceNode:function(a,b,c){function d(a){return!(a.equals(c)||a.equals(g))}var g=
+this.range.root;for(a=a.getNextSourceNode(b,null,d);!e(a);)a=a.getNextSourceNode(b,null,d);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})();
CKEDITOR.command=function(a,d){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return!1;this.editorFocus&&a.focus();return!1===this.fire("exec")?!0:!1!==d.exec.call(this,a,b)};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return!0;if(this.context&&!b.isContextFor(this.context)||!this.checkAllowed(!0))return this.disable(),!0;this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&&this.disable();return!1===this.fire("refresh",
{editor:a,path:b})?!0:d.refresh&&!1!==d.refresh.apply(this,arguments)};var b;this.checkAllowed=function(c){return c||"boolean"!=typeof b?b=a.activeFilter.checkFeature(this):b};CKEDITOR.tools.extend(this,d,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!d.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)};
CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(this.preserveState&&"undefined"!=typeof this.previousState?this.previousState:CKEDITOR.TRISTATE_OFF)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return!1;this.previousState=this.state;this.state=a;this.fire("state");return!0},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?
this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3;
CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"\x3c!DOCTYPE html\x3e",bodyId:"",bodyClass:"",fullPage:!1,height:200,contentsCss:CKEDITOR.getUrl("contents.css"),extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]};
-(function(){function a(a,b,c,d,f){var e,g;a=[];for(e in b){g=b[e];g="boolean"==typeof g?{}:"function"==typeof g?{match:g}:E(g);"$"!=e.charAt(0)&&(g.elements=e);c&&(g.featureName=c.toLowerCase());var m=g;m.elements=l(m.elements,/\s+/)||null;m.propertiesOnly=m.propertiesOnly||!0===m.elements;var v=/\s*,\s*/,r=void 0;for(r in S){m[r]=l(m[r],v)||null;var D=m,t=T[r],n=l(m[T[r]],v),h=m[r],u=[],B=!0,P=void 0;n?B=!1:n={};for(P in h)"!"==P.charAt(0)&&(P=P.slice(1),u.push(P),n[P]=!0,B=!1);for(;P=u.pop();)h[P]=
-h["!"+P],delete h["!"+P];D[t]=(B?!1:n)||null}m.match=m.match||null;d.push(g);a.push(g)}b=f.elements;f=f.generic;var F;c=0;for(d=a.length;c=--k&&(f&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),z(b))},y=function(b,c){a[b]=1;var f=d[b];delete d[b];for(var e=0;e=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?e.$.onreadystatechange=function(){if("loaded"==e.$.readyState||"complete"==e.$.readyState)e.$.onreadystatechange=null,y(b,!0)}:(e.$.onload=function(){setTimeout(function(){e.$.onload=null;e.$.onerror=null;y(b,!0)},0)},e.$.onerror=function(){e.$.onload=null;e.$.onerror=null;y(b,!1)}));e.appendTo(CKEDITOR.document.getHead())}}};f&&CKEDITOR.document.getDocumentElement().setStyle("cursor",
-"wait");for(var q=0;q=--k&&(e&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),x(b))},z=function(b,c){a[b]=1;var e=d[b];delete d[b];for(var f=0;f=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?f.$.onreadystatechange=function(){if("loaded"==f.$.readyState||"complete"==f.$.readyState)f.$.onreadystatechange=null,z(b,!0)}:(f.$.onload=function(){setTimeout(function(){f.$.onload=null;f.$.onerror=null;z(b,!0)},0)},f.$.onerror=function(){f.$.onload=null;f.$.onerror=null;z(b,!1)}));f.appendTo(CKEDITOR.document.getHead())}}};e&&CKEDITOR.document.getDocumentElement().setStyle("cursor",
+"wait");for(var w=0;w]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}};
-(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,d={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,g,f=0,l;c=this._.htmlPartsRegex.exec(b);){g=c.index;if(g>f)if(f=b.substring(f,g),l)l.push(f);else this.onText(f);
-f=this._.htmlPartsRegex.lastIndex;if(g=c[1])if(g=g.toLowerCase(),l&&CKEDITOR.dtd.$cdata[g]&&(this.onCDATA(l.join("")),l=null),!l){this.onTagClose(g);continue}if(l)l.push(c[0]);else if(g=c[3]){if(g=g.toLowerCase(),!/="/.test(g)){var h={},k,p=c[4];c=!!c[5];if(p)for(;k=a.exec(p);){var e=k[1].toLowerCase();k=k[2]||k[3]||k[4]||"";h[e]=!k&&d[e]?e:CKEDITOR.tools.htmlDecodeAttr(k)}this.onTagOpen(g,h,c);!l&&CKEDITOR.dtd.$cdata[g]&&(l=[])}}else if(g=c[2])this.onComment(g)}if(b.length>f)this.onText(b.substring(f,
+CKEDITOR.ELEMENT_MODE_INLINE=3;CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--!?>)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}};
+(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,d={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,g,e=0,l;c=this._.htmlPartsRegex.exec(b);){g=c.index;if(g>e)if(e=b.substring(e,g),l)l.push(e);else this.onText(e);
+e=this._.htmlPartsRegex.lastIndex;if(g=c[1])if(g=g.toLowerCase(),l&&CKEDITOR.dtd.$cdata[g]&&(this.onCDATA(l.join("")),l=null),!l){this.onTagClose(g);continue}if(l)l.push(c[0]);else if(g=c[3]){if(g=g.toLowerCase(),!/="/.test(g)){var h={},k,p=c[4];c=!!c[5];if(p)for(;k=a.exec(p);){var f=k[1].toLowerCase();k=k[2]||k[3]||k[4]||"";h[f]=!k&&d[f]?f:CKEDITOR.tools.htmlDecodeAttr(k)}this.onTagOpen(g,h,c);!l&&CKEDITOR.dtd.$cdata[g]&&(l=[])}}else if(g=c[2])this.onComment(g)}if(b.length>e)this.onText(b.substring(e,
b.length))}}})();
CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("\x3c",a)},openTagClose:function(a,d){d?this._.output.push(" /\x3e"):this._.output.push("\x3e")},attribute:function(a,d){"string"==typeof d&&(d=CKEDITOR.tools.htmlEncodeAttr(d));this._.output.push(" ",a,'\x3d"',d,'"')},closeTag:function(a){this._.output.push("\x3c/",a,"\x3e")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("\x3c!--",a,
"--\x3e")},write:function(a){this._.output.push(a)},reset:function(){this._.output=[];this._.indent=!1},getHtml:function(a){var d=this._.output.join("");a&&this.reset();return d}}});"use strict";
@@ -305,51 +305,51 @@ CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlPar
(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:!1}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,d){if(!(this.value=a.onText(d,this.value,this)))return this.remove(),!1},writeHtml:function(a,d){d&&this.filter(d);a.text(this.value)}})})();"use strict";
(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:!0,hasInlineStarted:!1}};
(function(){function a(a){return a.attributes["data-cke-survive"]?!1:"a"==a.name&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var d=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),g={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=
-function(f,l,h){function k(a){var b;if(0l;l++)if(f=d[l]){f=f.exec(a,c,this);if(!1===f)return null;if(f&&f!=c)return this.onNode(a,f);if(c.parent&&!c.name)break}return c},
-onNode:function(a,c){var d=c.type;return d==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):d==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value,c)):d==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value,c)):null},onAttribute:function(a,c,d,f){return(d=this.attributesRules[d])?d.exec(a,f,c,this):f}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,d){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:d})},addMany:function(a,
-c,d){for(var f=[this.findIndex(c),0],l=0,h=a.length;ll;l++)if(e=d[l]){e=e.exec(a,c,this);if(!1===e)return null;if(e&&e!=c)return this.onNode(a,e);if(c.parent&&!c.name)break}return c},
+onNode:function(a,c){var d=c.type;return d==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):d==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value,c)):d==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value,c)):null},onAttribute:function(a,c,d,e){return(d=this.attributesRules[d])?d.exec(a,e,c,this):e}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,d){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:d})},addMany:function(a,
+c,d){for(var e=[this.findIndex(c),0],l=0,h=a.length;l/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function z(a){return a.replace(T,function(a,b){return decodeURIComponent(b)})}function w(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g,
-function(a){return"\x3c!--"+x+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function y(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)})}function G(a,b){var c=b._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function q(a,b){var c=[],d=b.config.protectedSource,f=b._.dataStore||(b._.dataStore=
-{id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,d=[/' : '';
+function getJavaScriptSourceLink($src, $prefix = ' ') {
+ return ($src) ? $prefix . '' : '';
}
-function convertStringToArray( $string = '', $seperator = ',', $mode = 'UNIQUE', $rmvDblWSp = true ) {
+function convertStringToArray($string = '', $seperator = ',', $mode = 'UNIQUE', $rmvDblWSp = true) {
// clean up a seperator seperated string and return as array
- if ( trim( $string ) === '' ) {
+ if (trim($string) === '') {
return array();
}
// replace all duplicate white chars by single space
- if ( $rmvDblWSp ) {
- $string = preg_replace( '/\s\s+/', ' ', $string );
+ if ($rmvDblWSp) {
+ $string = preg_replace('/\s\s+/', ' ', $string);
}
- $string = explode( $seperator, $string );
- $string = array_map( 'trim', $string );
- $string = array_diff( $string, array( '', null, false ) );
- if ( $mode == 'UNIQUE' ) {
- $string = array_unique( $string );
+ $string = explode($seperator, $string);
+ $string = array_map('trim', $string);
+ $string = array_diff($string, array('', null, false));
+ if ($mode == 'UNIQUE') {
+ $string = array_unique($string);
}
return $string;
}
-function decode_entities( $text ) {
- $text = @html_entity_decode( $text, ENT_QUOTES, PHPWCMS_CHARSET );
- if ( strpos( $text, '&' ) === false ) {
+function decode_entities($text) {
+ $text = @html_entity_decode($text, ENT_QUOTES, PHPWCMS_CHARSET);
+ if (strpos($text, '&') === false) {
return $text;
}
- $text = preg_replace_callback( '/([0-9a-f]+);/i', 'convertHexNumericToChar', $text );
- $text = preg_replace_callback( '/([0-9]+);/', 'convertNumericToChar', $text );
+ $text = preg_replace_callback('/([0-9a-f]+);/i', 'convertHexNumericToChar', $text);
+ $text = preg_replace_callback('/([0-9]+);/', 'convertNumericToChar', $text);
return $text;
}
-function convertHexNumericToChar( $matches ) {
- return convertDecChar( hexdec( $matches[1] ) );
+function convertHexNumericToChar($matches) {
+ return convertDecChar(hexdec($matches[1]));
}
-function convertNumericToChar( $matches ) {
- return convertDecChar( $matches[1] );
+function convertNumericToChar($matches) {
+ return convertDecChar($matches[1]);
}
-function convertDecChar( $decChar ) {
- if ( $decChar < 128 ) {
- return chr( $decChar );
- } elseif ( $decChar < 2048 ) {
- return chr( ( $decChar >> 6 ) + 192 ) . chr( ( $decChar & 63 ) + 128 );
- } elseif ( $decChar < 65536 ) {
- return chr( ( $decChar >> 12 ) + 224 ) . chr( ( ( $decChar >> 6 ) & 63 ) + 128 ) . chr( ( $decChar & 63 ) + 128 );
- } elseif ( $decChar < 2097152 ) {
- return chr( $decChar >> 18 + 240 ) . chr( ( ( $decChar >> 12 ) & 63 ) + 128 ) . chr( ( $decChar >> 6 ) & 63 + 128 ) . chr( $decChar & 63 + 128 );
+function convertDecChar($decChar) {
+ if ($decChar < 128) {
+ return chr($decChar);
+ } elseif ($decChar < 2048) {
+ return chr(($decChar >> 6) + 192) . chr(($decChar & 63) + 128);
+ } elseif ($decChar < 65536) {
+ return chr(($decChar >> 12) + 224) . chr((($decChar >> 6) & 63) + 128) . chr(($decChar & 63) + 128);
+ } elseif ($decChar < 2097152) {
+ return chr($decChar >> 18 + 240) . chr((($decChar >> 12) & 63) + 128) . chr(($decChar >> 6) & 63 + 128) . chr($decChar & 63 + 128);
}
return $decChar;
}
-function is_html( $string = '' ) {
- $length_1 = strlen( $string );
- $length_2 = strlen( strip_tags( $string ) );
- if ( $length_1 != $length_2 ) {
+function is_html($string = '') {
+ $length_1 = strlen($string);
+ $length_2 = strlen(strip_tags($string));
+ if ($length_1 != $length_2) {
return true;
}
- $length_2 = strlen( decode_entities( $string ) );
- if ( $length_1 != $length_2 ) {
+ $length_2 = strlen(decode_entities($string));
+ if ($length_1 != $length_2) {
return true;
}
return false;
}
-function stripped_cache_content( $page = '' ) {
+function stripped_cache_content($page = '') {
// clean up html page
- $page = preg_replace( '@@si', '', $page );
- $page = str_replace( '><', '> <', $page );
- $page = strip_tags( $page );
- $page = decode_entities( $page );
- $page = preg_replace( '/\s+/s', ' ', $page );
+ $page = preg_replace('@@si', '', $page);
+ $page = str_replace('><', '> <', $page);
+ $page = strip_tags($page);
+ $page = decode_entities($page);
+ $page = preg_replace('/\s+/s', ' ', $page);
return $page;
}
@@ -1237,92 +1166,91 @@ function stripped_cache_content( $page = '' ) {
function optimizeForSearch() {
// used to build a string optimized for search
$numargs = func_num_args();
- $text = '';
- if ( $numargs ) {
- for ( $i = 0; $i < $numargs; $i ++ ) {
- $text .= ' ' . func_get_arg( $i );
+ $text = '';
+ if ($numargs) {
+ for ($i = 0; $i < $numargs; $i++) {
+ $text .= ' ' . func_get_arg($i);
}
-
- $text = stripped_cache_content( $text );
- $text = cleanUpSpecialHtmlEntities( $text );
- $text = decode_entities( $text );
- $text = str_replace( array(
- '!',
- '"',
- "'",
- '.',
- '#',
- ';',
- '~',
- '+',
- '*',
- '%',
- '&',
- '$',
- '§',
- ':',
- '@',
- ',',
- '|',
- ), ' ', $text );
- $text = preg_replace( '/\[.*?\]/', '', $text );
- $text = preg_replace( '/\{.*?\}/', '', $text );
- $text = strtoupper( $text );
- $text = implode( ' ', convertStringToArray( $text, ' ', 'UNIQUE', false ) );
+ $text = stripped_cache_content($text);
+ $text = cleanUpSpecialHtmlEntities($text);
+ $text = decode_entities($text);
+ $text = str_replace(array(
+ '!',
+ '"',
+ "'",
+ '.',
+ '#',
+ ';',
+ '~',
+ '+',
+ '*',
+ '%',
+ '&',
+ '$',
+ '§',
+ ':',
+ '@',
+ ',',
+ '|',
+ ), ' ', $text);
+ $text = preg_replace('/\[.*?\]/', '', $text);
+ $text = preg_replace('/\{.*?\}/', '', $text);
+ $text = strtoupper($text);
+ $text = implode(' ', convertStringToArray($text, ' ', 'UNIQUE', false));
}
return $text;
}
-function return_bytes_shorten( $val, $round = 2, $return_bytes = 0 ) {
- $val = strtolower( trim( $val ) );
- $last = substr( $val, - 1 );
- if ( empty( $return_bytes ) ) {
+function return_bytes_shorten($val, $round = 2, $return_bytes = 0) {
+ $val = strtolower(trim($val));
+ $last = substr($val, -1);
+ if (empty($return_bytes)) {
$space = '';
- $byte = '';
+ $byte = '';
} else {
$space = $return_bytes === '1' ? ' ' : $return_bytes;
- $byte = 'B';
+ $byte = 'B';
}
- if ( $last === 'k' || $last === 'm' || $last === 'g' || $last === 't' ) {
- if ( $byte ) {
+ if ($last === 'k' || $last === 'm' || $last === 'g' || $last === 't') {
+ if ($byte) {
$val .= $space . 'Byte';
}
return $val;
}
- $val = ceil( $val );
- if ( $val >= ( 1024 * 1024 * 1024 * 1024 ) ) {
+ $val = ceil($val);
+ if ($val >= (1024 * 1024 * 1024 * 1024)) {
//T
- $val = round( $val / ( 1024 * 1024 * 1024 * 1024 ), $round );
+ $val = round($val / (1024 * 1024 * 1024 * 1024), $round);
$val .= $space . 'T' . $byte;
- } elseif ( $val >= ( 1024 * 1024 * 1024 ) ) {
+ } elseif ($val >= (1024 * 1024 * 1024)) {
//G
- $val = round( $val / ( 1024 * 1024 * 1024 ), $round );
+ $val = round($val / (1024 * 1024 * 1024), $round);
$val .= $space . 'G' . $byte;
- } elseif ( $val >= ( 1024 * 1024 ) ) {
+ } elseif ($val >= (1024 * 1024)) {
//M
- $val = round( $val / ( 1024 * 1024 ), $round );
+ $val = round($val / (1024 * 1024), $round);
$val .= $space . 'M' . $byte;
- } elseif ( $val >= 1024 ) {
+ } elseif ($val >= 1024) {
//K
- $val = round( $val / 1024, $round );
+ $val = round($val / 1024, $round);
$val .= $space . 'K' . $byte;
- } elseif ( $val < 1024 ) {
+ } elseif ($val < 1024) {
//Byte but as 0.xxx KB
- $val = round( $val / 1024, $round + 1 );
+ $val = round($val / 1024, $round + 1);
$val .= $space . 'K' . $byte;
}
return $val;
}
-function return_bytes( $val ) {
+function return_bytes($val) {
// taken from: http://de3.php.net/manual/en/function.ini-get.php
- $val = strtolower( trim( $val ) );
- $last = substr( $val, - 1 );
- $val = floatval( $val );
- switch ( $last ) {
+ $val = strtolower(trim($val));
+ $last = substr($val, -1);
+ $val = floatval($val);
+ switch ($last) {
case 't':
$val *= 1024;
case 'g':
@@ -1333,16 +1261,16 @@ function return_bytes( $val ) {
$val *= 1024;
}
- return ceil( $val );
+ return ceil($val);
}
-function return_upload_errormsg( $value ) {
+function return_upload_errormsg($value) {
$err = '';
- switch ( $value ) {
+ switch ($value) {
case 0:
break;
case 1:
- $err = "The uploaded file exceeds the upload_max_filesize directive (" . @ini_get( "upload_max_filesize" ) . ") in php.ini.";
+ $err = "The uploaded file exceeds the upload_max_filesize directive (" . @ini_get("upload_max_filesize") . ") in php.ini.";
break;
case 2:
$err = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.";
@@ -1366,194 +1294,171 @@ function return_upload_errormsg( $value ) {
return $err;
}
-function csvFileToArray( $csvfile, $delimiter = ';', $heading = false, $enclosure = '"', $linelength = 1000 ) {
+function csvFileToArray($csvfile, $delimiter = ';', $heading = false, $enclosure = '"', $linelength = 1000) {
//import CSV file and convert to array
-
- if ( ! is_file( $csvfile ) ) {
+ if (!is_file($csvfile)) {
return false;
}
-
$first = 0;
$datas = array();
-
- $phpver = version_compare( '4.3.0', phpversion(), '<' );
- if ( $phpver ) {
- $oldini = ini_get( 'auto_detect_line_endings' );
- @ini_set( 'auto_detect_line_endings', '1' );
+ $phpver = version_compare('4.3.0', phpversion(), '<');
+ if ($phpver) {
+ $oldini = ini_get('auto_detect_line_endings');
+ @ini_set('auto_detect_line_endings', '1');
}
-
- $handle = fopen( $csvfile, 'rb' );
-
- while ( ( $data = fgetcsv( $handle, $linelength, $delimiter, $enclosure ) ) !== false ) {
+ $handle = fopen($csvfile, 'rb');
+ while (($data = fgetcsv($handle, $linelength, $delimiter, $enclosure)) !== false) {
// continue in case there is header row
- if ( $heading && ! $first ) {
- foreach ( $data as $key => $value ) {
- $value = trim( $value );
- $datas[0][ $key ] = $value ? $value : 'Column' . $key;
+ if ($heading && !$first) {
+ foreach ($data as $key => $value) {
+ $value = trim($value);
+ $datas[0][$key] = $value ? $value : 'Column' . $key;
}
- $first ++;
+ $first++;
continue;
}
- if ( trim( implode( '', $data ) ) == '' ) {
+ if (trim(implode('', $data)) == '') {
continue;
}
- $datas[ $first ] = $data;
- $first ++;
+ $datas[$first] = $data;
+ $first++;
}
-
- fclose( $handle );
-
- if ( $phpver ) {
- @ini_set( 'auto_detect_line_endings', $oldini );
+ fclose($handle);
+ if ($phpver) {
+ @ini_set('auto_detect_line_endings', $oldini);
}
return $datas;
}
-function shortHash( $string = '', $_Hash_function = 'md5' ) {
- return rtrim( base64_encode( pack( 'H*', $_Hash_function( $string ) ) ), '=' );
+function shortHash($string = '', $_Hash_function = 'md5') {
+ return rtrim(base64_encode(pack('H*', $_Hash_function($string))), '=');
}
-function replaceGlobalRT( $string = '' ) {
- $string = str_replace( array( '{SITE}', '{PHPWCMS_URL}' ), PHPWCMS_URL, $string );
- $string = str_replace( '{PHPWCMS_TEMPLATE}', TEMPLATE_PATH, $string );
- $string = str_replace( '{IP}', PHPWCMS_GDPR_MODE ? getAnonymizedIp() : getRemoteIP(), $string );
- $string = renderRTDate( $string );
+function replaceGlobalRT($string = '') {
+ $string = str_replace(array('{SITE}', '{PHPWCMS_URL}'), PHPWCMS_URL, $string);
+ $string = str_replace('{PHPWCMS_TEMPLATE}', TEMPLATE_PATH, $string);
+ $string = str_replace('{IP}', PHPWCMS_GDPR_MODE ? getAnonymizedIp() : getRemoteIP(), $string);
+ $string = renderRTDate($string);
return $string;
}
-function renderRTDate( $string = '' ) {
- return preg_replace_callback( '/\{(DATE|GMDATE):(.*?)\}/', 'formatRTDate', $string );
+function renderRTDate($string = '') {
+ return preg_replace_callback('/\{(DATE|GMDATE):(.*?)\}/', 'formatRTDate', $string);
}
-function formatRTDate( $matches ) {
+function formatRTDate($matches) {
// very cool function to render date or gmdate
// - {DATE:DATE_FORMAT}, {GMDATE:DATE_FORMAT},
// - {DATE:DATE_FORMAT SET:TIMESTAMP}, {GMDATE:DATE_FORMAT SET:TIMESTAMP}
- $type = strtolower( $matches[1] );
- $matches = explode( ' SET:', $matches[2] );
- if ( empty( $matches[1] ) ) {
- return $type( $matches[0] );
+ $type = strtolower($matches[1]);
+ $matches = explode(' SET:', $matches[2]);
+ if (empty($matches[1])) {
+ return $type($matches[0]);
}
- $matches[1] = trim( $matches[1] );
- if ( is_numeric( $matches[1] ) ) {
- $matches[1] = intval( $matches[1] );
+ $matches[1] = trim($matches[1]);
+ if (is_numeric($matches[1])) {
+ $matches[1] = intval($matches[1]);
- return $type( $matches[0], $matches[1] );
+ return $type($matches[0], $matches[1]);
}
- return $type( $matches[0], phpwcms_strtotime( $matches[1], null, now() ) );
+ return $type($matches[0], phpwcms_strtotime($matches[1], null, now()));
}
-function makeCharsetConversion( $string = '', $in_charset = 'utf-8', $out_charset = 'utf-8', $entityEncode = false ) {
+function makeCharsetConversion($string = '', $in_charset = 'utf-8', $out_charset = 'utf-8', $entityEncode = false) {
global $phpwcms;
-
- $in_charset = strtolower( $in_charset );
- $out_charset = strtolower( $out_charset );
- if ( empty( $string ) || $in_charset == $out_charset || empty( $in_charset ) || empty( $out_charset ) ) {
+ $in_charset = strtolower($in_charset);
+ $out_charset = strtolower($out_charset);
+ if (empty($string) || $in_charset == $out_charset || empty($in_charset) || empty($out_charset)) {
return $string;
}
- $phpCharsetSuppport = returnCorrectCharset( $in_charset );
- if ( $phpCharsetSuppport ) {
- $string = doHtmlEntityPHPCleanUp( $string, $phpCharsetSuppport );
+ $phpCharsetSuppport = returnCorrectCharset($in_charset);
+ if ($phpCharsetSuppport) {
+ $string = doHtmlEntityPHPCleanUp($string, $phpCharsetSuppport);
}
-
- if ( $entityEncode ) {
+ if ($entityEncode) {
$convertInOut = $in_charset . $out_charset . 'EntitiesOn';
$entityEncode = true;
} else {
$convertInOut = $in_charset . $out_charset . 'EntitiesOff';
$entityEncode = false;
}
-
- if ( ! isset( $phpwcms['convert_charsets'] ) ) {
+ if (!isset($phpwcms['convert_charsets'])) {
$phpwcms['convert_charsets'] = array();
}
- if ( ! isset( $phpwcms['convert_charsets'][ $convertInOut ] ) ) {
+ if (!isset($phpwcms['convert_charsets'][$convertInOut])) {
require_once PHPWCMS_ROOT . '/include/inc_ext/ConvertCharset/ConvertCharset.class.php';
- $phpwcms['convert_charsets'][ $convertInOut ] = new ConvertCharset( $in_charset, $out_charset, $entityEncode );
+ $phpwcms['convert_charsets'][$convertInOut] = new ConvertCharset($in_charset, $out_charset, $entityEncode);
}
+ $NewEncoding =& $phpwcms['convert_charsets'][$convertInOut];
- $NewEncoding =& $phpwcms['convert_charsets'][ $convertInOut ];
-
- return $NewEncoding->Convert( $string );
+ return $NewEncoding->Convert($string);
}
-function doHtmlEntityPHPCleanUp( $string, $charset ) {
- $string = html_entities( $string );
+function doHtmlEntityPHPCleanUp($string, $charset) {
+ $string = html_entities($string);
- return decode_entities( $string );
+ return decode_entities($string);
}
-function returnCorrectCharset( $in_charset = '' ) {
- $in_charset = strtolower( $in_charset );
- switch ( $in_charset ) {
+function returnCorrectCharset($in_charset = '') {
+ $in_charset = strtolower($in_charset);
+ switch ($in_charset) {
case 'iso-8859-1':
case 'iso8859-1':
$in_charset = 'iso-8859-1';
break;
-
case 'iso-8859-15':
case 'iso8859-15':
$in_charset = 'iso-8859-15';
break;
-
case 'utf-8':
$in_charset = 'utf-8';
break;
-
case 'cp866':
case 'ibm866':
case '866':
- $in_charset = version_compare( phpversion(), '4.3.2', '<' ) ? false : 'cp866';
+ $in_charset = version_compare(phpversion(), '4.3.2', '<') ? false : 'cp866';
break;
-
case 'cp1251':
case 'windows-1251':
case 'win-1251':
case '1251':
- $in_charset = version_compare( phpversion(), '4.3.2', '<' ) ? false : 'windows-1251';
+ $in_charset = version_compare(phpversion(), '4.3.2', '<') ? false : 'windows-1251';
break;
-
case 'cp1252':
case 'windows-1252':
case 'win-1252':
case '1252':
$in_charset = 'windows-1252';
break;
-
case 'koi8-r':
case 'koi8-ru':
case 'koi8r':
- $in_charset = version_compare( phpversion(), '4.3.2', '<' ) ? false : 'koi8-r';
+ $in_charset = version_compare(phpversion(), '4.3.2', '<') ? false : 'koi8-r';
break;
-
case 'big5':
case '950':
$in_charset = 'big5';
break;
-
case 'gb2312':
case '936':
$in_charset = 'gb2312';
break;
-
case 'big5-hkscs':
$in_charset = 'big5-hkscs';
break;
-
case 'shift_jis':
case 'sjis':
case '932':
$in_charset = 'shift_jis';
break;
-
case 'euc-jp':
case 'eucjp':
$in_charset = 'euc-jp';
break;
-
default:
$in_charset = false;
}
@@ -1561,61 +1466,59 @@ function returnCorrectCharset( $in_charset = '' ) {
return $in_charset;
}
-function returnSubdirListAsArray( $dir = '' ) {
+function returnSubdirListAsArray($dir = '') {
// browse a given path and return all sub directories
- if ( empty( $dir ) || ! is_dir( $dir ) ) {
+ if (empty($dir) || !is_dir($dir)) {
return false;
}
$subdir = array();
- $ph = opendir( $dir );
- while ( $pf = readdir( $ph ) ) {
- if ( substr( $pf, 0, 1 ) !== '.' && is_dir( $dir . '/' . $pf ) ) {
+ $ph = opendir($dir);
+ while ($pf = readdir($ph)) {
+ if (substr($pf, 0, 1) !== '.' && is_dir($dir . '/' . $pf)) {
$subdir[] = $pf;
}
}
- closedir( $ph );
+ closedir($ph);
return $subdir;
}
-
-function returnFileListAsArray( $dir = '', $extfilter = '' ) {
+function returnFileListAsArray($dir = '', $extfilter = '') {
// browse a given path and return all contained files
- if ( empty( $dir ) || ! is_dir( $dir ) ) {
+ if (empty($dir) || !is_dir($dir)) {
return false;
}
-
$files = array();
- $ph = opendir( $dir );
- if ( empty( $extfilter ) ) {
+ $ph = opendir($dir);
+ if (empty($extfilter)) {
$extfilter = array();
- } elseif ( is_string( $extfilter ) ) {
- $extfilter = convertStringToArray( strtolower( trim( $extfilter ) ) );
- } elseif ( ! is_array( $extfilter ) ) {
+ } elseif (is_string($extfilter)) {
+ $extfilter = convertStringToArray(strtolower(trim($extfilter)));
+ } elseif (!is_array($extfilter)) {
$extfilter = array();
}
- $dofilter = count( $extfilter ) ? true : false;
-
- while ( $pf = readdir( $ph ) ) {
- if ( substr( $pf, 0, 1 ) !== '.' && is_file( $dir . '/' . $pf ) ) {
- $ext = which_ext( $pf );
- if ( $dofilter && ! in_array( $ext, $extfilter ) ) {
+ $dofilter = count($extfilter) ? true : false;
+ while ($pf = readdir($ph)) {
+ if (substr($pf, 0, 1) !== '.' && is_file($dir . '/' . $pf)) {
+ $ext = which_ext($pf);
+ if ($dofilter && !in_array($ext, $extfilter)) {
continue;
}
- $files[ $pf ] = array(
+ $files[$pf] = array(
'filename' => $pf,
- 'filesize' => filesize( $dir . '/' . $pf ),
- 'filetime' => filemtime( $dir . '/' . $pf ),
- 'ext' => $ext,
+ 'filesize' => filesize($dir . '/' . $pf),
+ 'filetime' => filemtime($dir . '/' . $pf),
+ 'ext' => $ext,
+ 'path' => $dir . '/' . $pf
);
}
}
- closedir( $ph );
+ closedir($ph);
return $files;
}
-function parse_ini_str( $Str, $ProcessSections = true, $SplitInNameValue = false ) {
+function parse_ini_str($Str, $ProcessSections = true, $SplitInNameValue = false) {
/*
for parsing a string formatted like INI file
[Files]
@@ -1623,101 +1526,96 @@ function parse_ini_str( $Str, $ProcessSections = true, $SplitInNameValue = false
y=File2
*/
$Section = null;
- $Data = array();
- $Escape = array(
- 'search' => array( '\t', '\r', '\n', '\;', '\#', '\=', '\:', "\\\\" ),
- 'replace' => array( "\t", "\r", "\n", ';', '#', '=', ':', "\\" ),
+ $Data = array();
+ $Escape = array(
+ 'search' => array('\t', '\r', '\n', '\;', '\#', '\=', '\:', "\\\\"),
+ 'replace' => array("\t", "\r", "\n", ';', '#', '=', ':', "\\"),
);
- if ( $Temp = strtok( $Str, "\r\n" ) ) {
+ if ($Temp = strtok($Str, "\r\n")) {
do {
- switch ( substr( $Temp, 0, 1 ) ) {
+ switch (substr($Temp, 0, 1)) {
case ';':
-
case '#':
break;
-
case '[':
- if ( ! $ProcessSections ) {
+ if (!$ProcessSections) {
break;
}
- $Pos = strpos( $Temp, '[' );
- $Section = mb_substr( $Temp, $Pos + 1, strpos( $Temp, ']', $Pos ) - 1 );
- if ( $Section ) {
- $Data[ $Section ] = array();
+ $Pos = strpos($Temp, '[');
+ $Section = mb_substr($Temp, $Pos + 1, strpos($Temp, ']', $Pos) - 1);
+ if ($Section) {
+ $Data[$Section] = array();
}
break;
-
default:
- $Pos = strpos( $Temp, '=' );
- if ( $Pos === false ) {
+ $Pos = strpos($Temp, '=');
+ if ($Pos === false) {
break;
}
- if ( ! $SplitInNameValue ) {
- $key = trim( mb_substr( $Temp, 0, $Pos ) );
- $val = str_replace( $Escape['search'], $Escape['replace'],
- trim( mb_substr( $Temp, $Pos + 1 ), ' "' ) );
- if ( $ProcessSections && $Section ) {
- $Data[ $Section ][ $key ] = $val;
+ if (!$SplitInNameValue) {
+ $key = trim(mb_substr($Temp, 0, $Pos));
+ $val = str_replace($Escape['search'], $Escape['replace'], trim(mb_substr($Temp, $Pos + 1), ' "'));
+ if ($ProcessSections && $Section) {
+ $Data[$Section][$key] = $val;
} else {
- $Data[ $key ] = $val;
+ $Data[$key] = $val;
}
} else {
- $Value = array();
- $Value["NAME"] = trim( mb_substr( $Temp, 0, $Pos ) );
- $Value["VALUE"] = str_replace( $Escape['search'], $Escape['replace'],
- trim( mb_substr( $Temp, $Pos + 1 ), ' "' ) );
- if ( $ProcessSections && $Section ) {
- $Data[ $Section ][] = $Value;
+ $Value = array();
+ $Value["NAME"] = trim(mb_substr($Temp, 0, $Pos));
+ $Value["VALUE"] = str_replace($Escape['search'], $Escape['replace'], trim(mb_substr($Temp, $Pos + 1), ' "'));
+ if ($ProcessSections && $Section) {
+ $Data[$Section][] = $Value;
} else {
$Data[] = $Value;
}
}
break;
}
- } while ( $Temp = strtok( "\r\n" ) );
+ } while ($Temp = strtok("\r\n"));
}
return $Data;
}
function getCookieDomain() {
- $domain = parse_url( PHPWCMS_URL );
- $domain = strtolower( $domain['host'] );
- if ( strpos( $domain, 'www' ) === 0 ) {
- $domain = substr( $domain, 3 );
+ $domain = parse_url(PHPWCMS_URL);
+ $domain = strtolower($domain['host']);
+ if (strpos($domain, 'www') === 0) {
+ $domain = substr($domain, 3);
}
return $domain;
}
-function _mkdir( $target ) {
+function _mkdir($target) {
// taken from WordPress
- if ( file_exists( $target ) ) { // from php.net/mkdir user contributed notes
- return ( ! @is_dir( $target ) ) ? false : true;
+ if (file_exists($target)) { // from php.net/mkdir user contributed notes
+ return (!@is_dir($target)) ? false : true;
}
- umask( 0 );
- if ( @mkdir( $target ) ) { // Attempting to create the directory may clutter up our display.
- $stat = @stat( dirname( $target ) );
+ umask(0);
+ if (@mkdir($target)) { // Attempting to create the directory may clutter up our display.
+ $stat = @stat(dirname($target));
$dir_perms = $stat['mode'] & 0007777; // Get the permission bits.
- @chmod( $target, $dir_perms );
+ @chmod($target, $dir_perms);
return true;
- } elseif ( is_dir( dirname( $target ) ) ) {
+ } elseif (is_dir(dirname($target))) {
return false;
}
- if ( _mkdir( dirname( $target ) ) ) { // If the above failed, attempt to create the parent node, then try again.
- return _mkdir( $target );
+ if (_mkdir(dirname($target))) { // If the above failed, attempt to create the parent node, then try again.
+ return _mkdir($target);
}
return false;
}
-function sanitize_filename( $filename ) {
+function sanitize_filename($filename) {
//Filename anpassen und säubern
- if ( ! IS_PHP7 && get_magic_quotes_gpc() ) {
- $filename = stripslashes( $filename );
+ if (!IS_PHP7 && get_magic_quotes_gpc()) {
+ $filename = stripslashes($filename);
}
- $remove = array(
+ $remove = array(
"?",
"[",
"]",
@@ -1743,89 +1641,82 @@ function sanitize_filename( $filename ) {
"!",
"{",
"}",
- chr( 0 ),
+ chr(0),
);
- $filename = str_replace( $remove, '', $filename );
- $filename = preg_replace( '/[\s-]+/', '-', $filename );
- $filename = trim( $filename, ' .-_' );
+ $filename = str_replace($remove, '', $filename);
+ $filename = preg_replace('/[\s-]+/', '-', $filename);
+ $filename = trim($filename, ' .-_');
return $filename;
}
-function saveUploadedFile( $file, $target, $exttype = '', $imgtype = '', $rename = 0, $maxsize = 0 ) {
+function saveUploadedFile($file, $target, $exttype = '', $imgtype = '', $rename = 0, $maxsize = 0) {
// imgtype can be all exif_imagetype supported by your PHP install
// see http://www.php.net/exif_imagetype
$file_status = array(
- 'status' => false,
- 'error' => '',
- 'name' => '',
- 'tmp_name' => '',
- 'size' => 0,
- 'path' => '',
- 'ext' => '',
- 'rename' => '',
- 'maxsize' => intval( $maxsize ),
+ 'status' => false,
+ 'error' => '',
+ 'name' => '',
+ 'tmp_name' => '',
+ 'size' => 0,
+ 'path' => '',
+ 'ext' => '',
+ 'rename' => '',
+ 'maxsize' => intval($maxsize),
'error_num' => 0,
- 'type' => '',
+ 'type' => '',
);
-
- if ( ! isset( $_FILES[ $file ] ) || ! is_uploaded_file( $_FILES[ $file ]['tmp_name'] ) ) {
+ if (!isset($_FILES[$file]) || !is_uploaded_file($_FILES[$file]['tmp_name'])) {
$file_status['error'] = 'Upload not defined';
return $file_status;
}
-
- $file_status['name'] = sanitize_filename( $_FILES[ $file ]['name'] );
- $file_status['ext'] = which_ext( $file_status['name'] );
- $file_status['tmp_name'] = $_FILES[ $file ]['tmp_name'];
- $file_status['size'] = $_FILES[ $file ]['size'];
- $file_status['type'] = empty( $_FILES[ $file ]['type'] ) || ! is_mimetype_format( $_FILES[ $file ]['type'] ) ? get_mimetype_by_extension( $file_status['ext'] ) : $_FILES[ $file ]['type'];
- $file_status['path'] = $target;
- $file_status['rename'] = $file_status['name'];
- $file_status['maxsize'] = empty( $file_status['maxsize'] ) ? $GLOBALS['phpwcms']['file_maxsize'] : $file_status['maxsize'];
-
- if ( intval( $file_status['size'] ) > $file_status['maxsize'] ) {
- $file_status['error'] = 'File is too large';
+ $file_status['name'] = sanitize_filename($_FILES[$file]['name']);
+ $file_status['ext'] = which_ext($file_status['name']);
+ $file_status['tmp_name'] = $_FILES[$file]['tmp_name'];
+ $file_status['size'] = $_FILES[$file]['size'];
+ $file_status['type'] = empty($_FILES[$file]['type']) || !is_mimetype_format($_FILES[$file]['type']) ? get_mimetype_by_extension($file_status['ext']) : $_FILES[$file]['type'];
+ $file_status['path'] = $target;
+ $file_status['rename'] = $file_status['name'];
+ $file_status['maxsize'] = empty($file_status['maxsize']) ? $GLOBALS['phpwcms']['file_maxsize'] : $file_status['maxsize'];
+ if (intval($file_status['size']) > $file_status['maxsize']) {
+ $file_status['error'] = 'File is too large';
$file_status['error_num'] = 400;
return $file_status;
}
-
- if ( empty( $target ) ) {
- $file_status['error'] = 'Target directory not defined';
+ if (empty($target)) {
+ $file_status['error'] = 'Target directory not defined';
$file_status['error_num'] = 412;
return $file_status;
}
- if ( ! @_mkdir( $target ) ) {
- $file_status['error'] = 'The target directory "' . $target . '" can not be found or generated';
+ if (!@_mkdir($target)) {
+ $file_status['error'] = 'The target directory "' . $target . '" can not be found or generated';
$file_status['error_num'] = 412;
return $file_status;
}
- if ( $_FILES[ $file ]['error'] ) {
- $file_status['error'] = $_FILES[ $file ]['error'];
+ if ($_FILES[$file]['error']) {
+ $file_status['error'] = $_FILES[$file]['error'];
$file_status['error_num'] = 409;
return $file_status;
}
-
- if ( $imgtype ) {
- $imgtype = convertStringToArray( strtolower( $imgtype ) );
-
- if ( count( $imgtype ) ) {
- $data = @getimagesize( $_FILES[ $file ]['tmp_name'] );
-
+ if ($imgtype) {
+ $imgtype = convertStringToArray(strtolower($imgtype));
+ if (count($imgtype)) {
+ $data = @getimagesize($_FILES[$file]['tmp_name']);
$exif_imagetype = array(
- 1 => 'gif',
- 2 => 'jpg',
- 3 => 'png',
- 4 => 'swf',
- 5 => 'psd',
- 6 => 'bmp',
- 7 => 'tif',
- 8 => 'tiff',
- 9 => 'jpc',
+ 1 => 'gif',
+ 2 => 'jpg',
+ 3 => 'png',
+ 4 => 'swf',
+ 5 => 'psd',
+ 6 => 'bmp',
+ 7 => 'tif',
+ 8 => 'tiff',
+ 9 => 'jpc',
10 => 'jp2',
11 => 'jpx',
12 => 'jb2',
@@ -1834,152 +1725,136 @@ function saveUploadedFile( $file, $target, $exttype = '', $imgtype = '', $rename
15 => 'wbmp',
16 => 'xbm',
);
-
- if ( ! $data && ! $exttype ) {
- $file_status['error'] = 'Format' . ( $file_status['ext'] ? ' *.' . $file_status['ext'] : '' ) . ' not supported (';
- $allowed = array();
- foreach ( $imgtype as $value ) {
- if ( ( $value = intval( $value ) ) && isset( $exif_imagetype[ $value ] ) ) {
- $allowed[] = '*.' . $exif_imagetype[ $value ];
+ if (!$data && !$exttype) {
+ $file_status['error'] = 'Format' . ($file_status['ext'] ? ' *.' . $file_status['ext'] : '') . ' not supported (';
+ $allowed = array();
+ foreach ($imgtype as $value) {
+ if (($value = intval($value)) && isset($exif_imagetype[$value])) {
+ $allowed[] = '*.' . $exif_imagetype[$value];
}
}
- $file_status['error'] .= implode( ', ', $allowed ) . ')';
+ $file_status['error'] .= implode(', ', $allowed) . ')';
$file_status['error_num'] = 415;
- @unlink( $_FILES[ $file ]['tmp_name'] );
+ @unlink($_FILES[$file]['tmp_name']);
return $file_status;
- } elseif ( $data ) {
- if ( empty( $exif_imagetype[ $data[2] ] ) || ! in_array( $data[2], $imgtype ) ) {
+ } elseif ($data) {
+ if (empty($exif_imagetype[$data[2]]) || !in_array($data[2], $imgtype)) {
$file_status['error'] = 'File type ';
- $file_status['error'] .= empty( $exif_imagetype[ $data[2] ] ) ? $data[2] : $exif_imagetype[ $data[2] ];
+ $file_status['error'] .= empty($exif_imagetype[$data[2]]) ? $data[2] : $exif_imagetype[$data[2]];
$file_status['error'] .= ' is not supported for this upload (';
- foreach ( $imgtype as $imgt ) {
- $file_status['error'] .= empty( $exif_imagetype[ $imgt ] ) ? $imgt : $exif_imagetype[ $imgt ];
+ foreach ($imgtype as $imgt) {
+ $file_status['error'] .= empty($exif_imagetype[$imgt]) ? $imgt : $exif_imagetype[$imgt];
$file_status['error'] .= ', ';
}
- $file_status['error'] = trim( trim( $file_status['error'] ), ',' );
+ $file_status['error'] = trim(trim($file_status['error']), ',');
$file_status['error'] .= ' only)';
-
$file_status['error_num'] = 415;
- @unlink( $_FILES[ $file ]['tmp_name'] );
+ @unlink($_FILES[$file]['tmp_name']);
return $file_status;
}
-
$file_status['image'] = $data;
- $exttype = '';
+ $exttype = '';
}
}
}
-
- if ( $exttype ) {
- $exttype = convertStringToArray( strtolower( $exttype ) );
- if ( ! in_array( $file_status['ext'], $exttype ) ) {
- $file_status['error'] = 'File type *.' . $file_status['ext'] . ' is not supported for this upload (*.' . implode( ', *.',
- $exttype ) . ' only)';
+ if ($exttype) {
+ $exttype = convertStringToArray(strtolower($exttype));
+ if (!in_array($file_status['ext'], $exttype)) {
+ $file_status['error'] = 'File type *.' . $file_status['ext'] . ' is not supported for this upload (*.' . implode(', *.', $exttype) . ' only)';
$file_status['error_num'] = 415;
- @unlink( $_FILES[ $file ]['tmp_name'] );
+ @unlink($_FILES[$file]['tmp_name']);
return $file_status;
}
}
- if ( ! is_writable( $target ) ) {
- $file_status['error'] = 'Target directory ' . str_replace( PHPWCMS_ROOT, '',
- $target ) . ' is not writable';
+ if (!is_writable($target)) {
+ $file_status['error'] = 'Target directory ' . str_replace(PHPWCMS_ROOT, '', $target) . ' is not writable';
$file_status['error_num'] = 412;
- @unlink( $_FILES[ $file ]['tmp_name'] );
+ @unlink($_FILES[$file]['tmp_name']);
return $file_status;
}
- $rename = convertStringToArray( $rename );
- if ( count( $rename ) ) {
- $_temp_name = cut_ext( $file_status['rename'] );
-
- foreach ( $rename as $value ) {
- switch ( $value ) {
+ $rename = convertStringToArray($rename);
+ if (count($rename)) {
+ $_temp_name = cut_ext($file_status['rename']);
+ foreach ($rename as $value) {
+ switch ($value) {
case 1:
- $_temp_name = str_replace( array( ':', '/', "\\", ' ' ), array( '-', '-', '-', '_' ),
- phpwcms_remove_accents( $_temp_name ) );
- $_temp_name = preg_replace( '/[^0-9a-z_\-\.]/i', '', $_temp_name );
+ $_temp_name = str_replace(array(':', '/', "\\", ' '), array('-', '-', '-', '_'), phpwcms_remove_accents($_temp_name));
+ $_temp_name = preg_replace('/[^0-9a-z_\-\.]/i', '', $_temp_name);
break;
case 2:
$_temp_name = time() . '_' . $_temp_name;
break;
case 3:
- $_temp_name = date( 'Ymd-His' ) . '_' . $_temp_name;
+ $_temp_name = date('Ymd-His') . '_' . $_temp_name;
break;
case 4:
- $_temp_name = date( 'Ymd' ) . '_' . $_temp_name;
+ $_temp_name = date('Ymd') . '_' . $_temp_name;
break;
case 5:
- $_temp_name = generic_string( 6 ) . '_' . $_temp_name;
+ $_temp_name = generic_string(6) . '_' . $_temp_name;
break;
case 6:
- $_temp_name = md5( $_temp_name . ( $file_status['ext'] ? '.' . $file_status['ext'] : '' ) );
+ $_temp_name = md5($_temp_name . ($file_status['ext'] ? '.' . $file_status['ext'] : ''));
break;
case 7:
- $_temp_name = shortHash( $_temp_name . ( $file_status['ext'] ? '.' . $file_status['ext'] : '' ) );
+ $_temp_name = shortHash($_temp_name . ($file_status['ext'] ? '.' . $file_status['ext'] : ''));
break;
}
}
-
- $file_status['rename'] = $_temp_name . ( $file_status['ext'] ? '.' . $file_status['ext'] : '' );
+ $file_status['rename'] = $_temp_name . ($file_status['ext'] ? '.' . $file_status['ext'] : '');
}
- @umask( 0 );
- if ( ! @move_uploaded_file( $_FILES[ $file ]['tmp_name'], $target . $file_status['rename'] ) ) {
- if ( ! copy( $_FILES[ $file ]['tmp_name'], $target . $file_status['rename'] ) ) {
- $file_status['error'] = 'Saving uploaded file ' . html( $file_status['name'] ) . ' to ' . html( str_replace( PHPWCMS_ROOT,
- '', $target . $file_status['rename'] ) ) . ' failed';
+ @umask(0);
+ if (!@move_uploaded_file($_FILES[$file]['tmp_name'], $target . $file_status['rename'])) {
+ if (!copy($_FILES[$file]['tmp_name'], $target . $file_status['rename'])) {
+ $file_status['error'] = 'Saving uploaded file ' . html($file_status['name']) . ' to ' . html(str_replace(PHPWCMS_ROOT, '', $target . $file_status['rename'])) . ' failed';
$file_status['error_num'] = 412;
- @unlink( $_FILES[ $file ]['tmp_name'] );
+ @unlink($_FILES[$file]['tmp_name']);
return $file_status;
}
}
- @chmod( $target . $file_status['rename'], 0644 );
-
+ @chmod($target . $file_status['rename'], 0644);
$file_status['status'] = true;
return $file_status;
}
-function get_alnum_dashes( $string, $remove_accents = false, $replace_space = '-', $allow_slashes = false ) {
- $string = str_replace( array( ' ', '?', ':', '&', '\\', ';', '#', '=', '+' ), $replace_space, $string );
- if ( $remove_accents ) {
- $string = phpwcms_remove_accents( $string );
- $string = preg_replace( '/[^a-z0-9\-_\.' . ( $allow_slashes ? '\/' : '' ) . ']/i', '', $string );
+function get_alnum_dashes($string, $remove_accents = false, $replace_space = '-', $allow_slashes = false) {
+ $string = str_replace(array(' ', '?', ':', '&', '\\', ';', '#', '=', '+'), $replace_space, $string);
+ if ($remove_accents) {
+ $string = phpwcms_remove_accents($string);
+ $string = preg_replace('/[^a-z0-9\-_\.' . ($allow_slashes ? '\/' : '') . ']/i', '', $string);
} else {
- $string = preg_replace( '/[^a-z0-9\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\-_\.' . ( $allow_slashes ? '\/' : '' ) . ']/iu',
- '', $string );
+ $string = preg_replace('/[^a-z0-9\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\-_\.' . ($allow_slashes ? '\/' : '') . ']/iu', '', $string);
}
- return trim( preg_replace( '/\-+/', $replace_space, $string ), '._/' . $replace_space );
+ return trim(preg_replace('/\-+/', $replace_space, $string), '._/' . $replace_space);
}
// Thanks to: http://quickwired.com/smallprojects/php_xss_filter_function.php
-function xss_clean( $val ) {
+function xss_clean($val) {
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
// this prevents some character re-spacing such as
// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
- $val = preg_replace( '/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val );
-
+ $val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);
// straight replacements, the user should never need these since they're normal characters
// this prevents like
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:?+/={}[]-_|\'\\';
- for ( $i = 0; $i < strlen( $search ); $i ++ ) {
+ for ($i = 0; $i < strlen($search); $i++) {
// ;? matches the ;, which is optional
// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
-
// @ @ search for the hex values
- $val = preg_replace( '/([x|X]0{0,8}' . dechex( ord( $search[ $i ] ) ) . ';?)/i', $search[ $i ],
- $val ); // with a ;
+ $val = preg_replace('/([x|X]0{0,8}' . dechex(ord($search[$i])) . ';?)/i', $search[$i], $val); // with a ;
// @ @ 0{0,7} matches '0' zero to seven times
- $val = preg_replace( '/({0,8}' . ord( $search[ $i ] ) . ';?)/', $search[ $i ], $val ); // with a ;
+ $val = preg_replace('/({0,8}' . ord($search[$i]) . ';?)/', $search[$i], $val); // with a ;
}
-
// now the only remaining whitespace attacks are \t, \n, and \r
$ra1 = array(
'javascript',
@@ -2083,26 +1958,25 @@ function xss_clean( $val ) {
'onsubmit',
'onunload',
);
- $ra = array_merge( $ra1, $ra2 );
-
+ $ra = array_merge($ra1, $ra2);
$found = true; // keep replacing as long as the previous round replaced something
- while ( $found == true ) {
+ while ($found == true) {
$val_before = $val;
- for ( $i = 0; $i < count( $ra ); $i ++ ) {
+ for ($i = 0; $i < count($ra); $i++) {
$pattern = '/';
- for ( $j = 0; $j < strlen( $ra[ $i ] ); $j ++ ) {
- if ( $j > 0 ) {
+ for ($j = 0; $j < strlen($ra[$i]); $j++) {
+ if ($j > 0) {
$pattern .= '(';
$pattern .= '([x|X]0{0,8}([9][a][b]);?)?';
$pattern .= '|({0,8}([9][10][13]);?)?';
$pattern .= ')?';
}
- $pattern .= $ra[ $i ][ $j ];
+ $pattern .= $ra[$i][$j];
}
- $pattern .= '/i';
- $replacement = substr( $ra[ $i ], 0, 2 ) . '' . substr( $ra[ $i ], 2 ); // add in <> to nerf the tag
- $val = preg_replace( $pattern, $replacement, $val ); // filter out the hex tags
- if ( $val_before == $val ) {
+ $pattern .= '/i';
+ $replacement = substr($ra[$i], 0, 2) . '' . substr($ra[$i], 2); // add in <> to nerf the tag
+ $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
+ if ($val_before == $val) {
// no replacements were made, so exit the loop
$found = false;
}
@@ -2112,36 +1986,33 @@ function xss_clean( $val ) {
return $val;
}
-function sanitize_multiple_emails( $string ) {
- $string = preg_replace( '/\s|\,]/', ';', $string );
- $string = convertStringToArray( $string, ';' );
- $string = implode( ';', $string );
+function sanitize_multiple_emails($string) {
+ $string = preg_replace('/\s|\,]/', ';', $string);
+ $string = convertStringToArray($string, ';');
+ $string = implode(';', $string);
return $string;
}
-function checkLogin( $mode = 'REDIRECT' ) {
- $sql = "UPDATE " . DB_PREPEND . "phpwcms_userlog SET logged_in=0, logged_change=" . _dbEscape( time() ) . " ";
- $sql .= "WHERE logged_in=1 AND (" . time() . "-logged_change) > " . intval( $GLOBALS['phpwcms']["max_time"] );
- _dbQuery( $sql, 'UPDATE' );
-
+function checkLogin($mode = 'REDIRECT') {
+ $sql = "UPDATE " . DB_PREPEND . "phpwcms_userlog SET logged_in=0, logged_change=" . _dbEscape(time()) . " ";
+ $sql .= "WHERE logged_in=1 AND (" . time() . "-logged_change) > " . intval($GLOBALS['phpwcms']["max_time"]);
+ _dbQuery($sql, 'UPDATE');
checkLoginCount();
-
- if ( empty( $_SESSION["wcs_user"] ) ) {
+ if (empty($_SESSION["wcs_user"])) {
@session_destroy();
- if ( ! empty( $_SERVER['QUERY_STRING'] ) ) {
- $ref_url = '?ref=' . rawurlencode( PHPWCMS_URL . 'phpwcms.php?' . xss_clean( $_SERVER['QUERY_STRING'] ) );
+ if (!empty($_SERVER['QUERY_STRING'])) {
+ $ref_url = '?ref=' . rawurlencode(PHPWCMS_URL . 'phpwcms.php?' . xss_clean($_SERVER['QUERY_STRING']));
} else {
$ref_url = '';
}
- if ( $mode == 'REDIRECT' ) {
+ if ($mode == 'REDIRECT') {
// check again if user was logged in and this is a valid redirect request
- $sql = 'SELECT COUNT(*) FROM ' . DB_PREPEND . 'phpwcms_userlog WHERE ';
- $sql .= "logged_ip=" . _dbEscape( PHPWCMS_GDPR_MODE ? getAnonymizedIp() : getRemoteIP() ) . " AND ";
- $sql .= '( ' . time() . ' - logged_change ) < 3600';
- $ref_url = _dbCount( $sql ) > 0 ? get_login_file() . $ref_url : '';
-
- headerRedirect( PHPWCMS_URL . $ref_url, 401 );
+ $sql = 'SELECT COUNT(*) FROM ' . DB_PREPEND . 'phpwcms_userlog WHERE ';
+ $sql .= "logged_ip=" . _dbEscape(PHPWCMS_GDPR_MODE ? getAnonymizedIp() : getRemoteIP()) . " AND ";
+ $sql .= '( ' . time() . ' - logged_change ) < 3600';
+ $ref_url = _dbCount($sql) > 0 ? get_login_file() . $ref_url : '';
+ headerRedirect(PHPWCMS_URL . $ref_url, 401);
} else {
return false;
}
@@ -2150,41 +2021,38 @@ function checkLogin( $mode = 'REDIRECT' ) {
return true;
}
-function logout_user( $reason = '', $type = '' ) {
- $sql = "UPDATE " . DB_PREPEND . "phpwcms_userlog SET logged_change=" . _dbEscape( time() ) . ", logged_in=0 ";
- $sql .= "WHERE logged_user=" . _dbEscape( $_SESSION["wcs_user"] ) . " AND logged_in=1";
- _dbQuery( $sql, 'UPDATE' );
-
+function logout_user($reason = '', $type = '') {
+ $sql = "UPDATE " . DB_PREPEND . "phpwcms_userlog SET logged_change=" . _dbEscape(time()) . ", logged_in=0 ";
+ $sql .= "WHERE logged_user=" . _dbEscape($_SESSION["wcs_user"]) . " AND logged_in=1";
+ _dbQuery($sql, 'UPDATE');
$_SESSION = array();
@session_destroy();
-
- $login_url = PHPWCMS_URL . get_login_file();
+ $login_url = PHPWCMS_URL . get_login_file();
$get_parameter = array();
- if ( $reason ) {
- $get_parameter[] = 'reason=' . rawurlencode( $reason );
+ if ($reason) {
+ $get_parameter[] = 'reason=' . rawurlencode($reason);
}
- if ( $type ) {
- $get_parameter[] = 'type=' . rawurlencode( $type );
+ if ($type) {
+ $get_parameter[] = 'type=' . rawurlencode($type);
}
- if ( count( $get_parameter ) ) {
- $login_url .= '?' . implode( '&', $get_parameter );
+ if (count($get_parameter)) {
+ $login_url .= '?' . implode('&', $get_parameter);
}
- headerRedirect( $login_url, 401 );
+ headerRedirect($login_url, 401);
}
/**
* Convert 2 to x line breaks of plain text into correct and
*/
-function plaintext_htmlencode( $text = '', $encode_function = 'html_specialchars', $render_bbcode = true ) {
- $text = trim( $text );
- if ( $text ) {
- $text = '[p]' . preg_replace( '/\s{0,}\n\s{0,}\n\s{0,}/s', '[/p][p]', $text ) . '[/p]';
- $text = preg_replace( '/\s{0,}\n\s{0,}/s', '[br]', $text );
- $text = $encode_function( $text );
- $text = str_replace( array( '[/p][p]', '[p]', '[/p]', '[br]' ), array( "
\n", '
', '
', "
\n" ),
- $text );
- if ( $render_bbcode ) {
- return render_bbcode_basics( $text );
+function plaintext_htmlencode($text = '', $encode_function = 'html_specialchars', $render_bbcode = true) {
+ $text = trim($text);
+ if ($text) {
+ $text = '[p]' . preg_replace('/\s{0,}\n\s{0,}\n\s{0,}/s', '[/p][p]', $text) . '[/p]';
+ $text = preg_replace('/\s{0,}\n\s{0,}/s', '[br]', $text);
+ $text = $encode_function($text);
+ $text = str_replace(array('[/p][p]', '[p]', '[/p]', '[br]'), array("\n", '
', '
', "
\n"), $text);
+ if ($render_bbcode) {
+ return render_bbcode_basics($text);
}
}
@@ -2194,10 +2062,10 @@ function plaintext_htmlencode( $text = '', $encode_function = 'html_specialchars
/**
* Convert line break to
*/
-function br_htmlencode( $text = '', $encode_function = 'html_specialchars' ) {
- if ( $text ) {
- $text = $encode_function( $text );
- $text = nl2br( $text );
+function br_htmlencode($text = '', $encode_function = 'html_specialchars') {
+ if ($text) {
+ $text = $encode_function($text);
+ $text = nl2br($text);
}
return $text;
@@ -2206,15 +2074,13 @@ function br_htmlencode( $text = '', $encode_function = 'html_specialchars' ) {
/**
* Render simple BBCode
**/
-function render_bbcode_basics( $text = '', $mode = 'basic' ) {
- if ( $text === '' ) {
+function render_bbcode_basics($text = '', $mode = 'basic') {
+ if ($text === '') {
return $text;
}
-
- $text = render_bbcode_url( $text );
-
- if ( $mode == 'basic' ) {
- $search = array(
+ $text = render_bbcode_url($text);
+ if ($mode == 'basic') {
+ $search = array(
'[i]',
'[/i]',
'[u]',
@@ -2253,104 +2119,100 @@ function render_bbcode_basics( $text = '', $mode = 'basic' ) {
'',
);
- return str_replace( $search, $replace, $text );
+ return str_replace($search, $replace, $text);
}
-
- $search = array();
+ $search = array();
$replace = array();
-
- $search[0] = '/\[i\](.*?)\[\/i\]/is';
- $replace[0] = '$1';
- $search[1] = '/\[u\](.*?)\[\/u\]/is';
- $replace[1] = '$1';
- $search[2] = '/\[s\](.*?)\[\/s\]/is';
- $replace[2] = '$1';
- $search[3] = '/\[b\](.*?)\[\/b\]/is';
- $replace[3] = '$1';
- $search[4] = '/\[br\]/i';
- $replace[4] = '
';
- $search[5] = '/\[em\](.*?)\[\/em\]/is';
- $replace[5] = '$1';
- $search[6] = '/\[code\](.*?)\[\/code\]/is';
- $replace[6] = '$1
';
- $search[7] = '/\[cite\](.*?)\[\/cite\]/is';
- $replace[7] = '$1';
- $search[8] = '/\[li\](.*?)\[\/li\]/is';
- $replace[8] = '$1';
- $search[9] = '/\[dt\](.*?)\[\/dt\]/is';
- $replace[9] = '$1';
- $search[10] = '/\[dd\](.*?)\[\/dd\]/is';
+ $search[0] = '/\[i\](.*?)\[\/i\]/is';
+ $replace[0] = '$1';
+ $search[1] = '/\[u\](.*?)\[\/u\]/is';
+ $replace[1] = '$1';
+ $search[2] = '/\[s\](.*?)\[\/s\]/is';
+ $replace[2] = '$1';
+ $search[3] = '/\[b\](.*?)\[\/b\]/is';
+ $replace[3] = '$1';
+ $search[4] = '/\[br\]/i';
+ $replace[4] = '
';
+ $search[5] = '/\[em\](.*?)\[\/em\]/is';
+ $replace[5] = '$1';
+ $search[6] = '/\[code\](.*?)\[\/code\]/is';
+ $replace[6] = '$1
';
+ $search[7] = '/\[cite\](.*?)\[\/cite\]/is';
+ $replace[7] = '$1';
+ $search[8] = '/\[li\](.*?)\[\/li\]/is';
+ $replace[8] = '$1';
+ $search[9] = '/\[dt\](.*?)\[\/dt\]/is';
+ $replace[9] = '$1';
+ $search[10] = '/\[dd\](.*?)\[\/dd\]/is';
$replace[10] = '$1';
- $search[11] = '/\[ul\](.*?)\[\/ul\]/is';
+ $search[11] = '/\[ul\](.*?)\[\/ul\]/is';
$replace[11] = '';
- $search[12] = '/\[ol\](.*?)\[\/ol\]/is';
+ $search[12] = '/\[ol\](.*?)\[\/ol\]/is';
$replace[12] = '$1
';
- $search[13] = '/\[dl\](.*?)\[\/dl\]/is';
+ $search[13] = '/\[dl\](.*?)\[\/dl\]/is';
$replace[13] = '$1
';
- $search[14] = '/\[h1\](.*?)\[\/h1\]/is';
+ $search[14] = '/\[h1\](.*?)\[\/h1\]/is';
$replace[14] = '$1
';
- $search[15] = '/\[h2\](.*?)\[\/h2\]/is';
+ $search[15] = '/\[h2\](.*?)\[\/h2\]/is';
$replace[15] = '$1
';
- $search[16] = '/\[h3\](.*?)\[\/h3\]/is';
+ $search[16] = '/\[h3\](.*?)\[\/h3\]/is';
$replace[16] = '$1
';
- $search[17] = '/\[h4\](.*?)\[\/h4\]/is';
+ $search[17] = '/\[h4\](.*?)\[\/h4\]/is';
$replace[17] = '$1
';
- $search[18] = '/\[h5\](.*?)\[\/h5\]/is';
+ $search[18] = '/\[h5\](.*?)\[\/h5\]/is';
$replace[18] = '$1
';
- $search[19] = '/\[h6\](.*?)\[\/h6\]/is';
+ $search[19] = '/\[h6\](.*?)\[\/h6\]/is';
$replace[19] = '$1
';
- $search[20] = '/\[p\](.*?)\[\/p\]/is';
+ $search[20] = '/\[p\](.*?)\[\/p\]/is';
$replace[20] = '$1
';
- $search[21] = '/\[strong\](.*?)\[\/strong\]/is';
+ $search[21] = '/\[strong\](.*?)\[\/strong\]/is';
$replace[21] = '$1';
- $search[22] = '/\[nowrap\](.*?)\[\/nowrap\]/is';
+ $search[22] = '/\[nowrap\](.*?)\[\/nowrap\]/is';
$replace[22] = '$1';
-
- $search[23] = '/\[blockquote\](.*?)\[\/blockquote\]/is';
+ $search[23] = '/\[blockquote\](.*?)\[\/blockquote\]/is';
$replace[23] = '$1
';
- return preg_replace( $search, $replace, $text );
+ return preg_replace($search, $replace, $text);
}
-function render_bbcode_url( $text ) {
- if ( $text === '' ) {
+function render_bbcode_url($text) {
+ if ($text === '') {
return $text;
}
- $text = preg_replace_callback( array( '/\[url=([^ ]+)(.*?)\](.*?)\[\/url\]/', '/\[a=([^ ]+)(.*?)\](.*?)\[\/a\]/' ),
- 'get_bbcode_ahref', $text );
+ $text = preg_replace_callback(array('/\[url=([^ ]+)(.*?)\](.*?)\[\/url\]/', '/\[a=([^ ]+)(.*?)\](.*?)\[\/a\]/'), 'get_bbcode_ahref', $text);
// Fallback for URL parameter having =[http://
- if ( strpos( $text, '=[' ) !== false ) {
- $text = str_replace( '=[[', '=####[#[####', $text );
- $text = str_replace( '=[', '=####[####', $text );
- $text = preg_replace_callback( '/\[(http|https|ftp):\/\/([^ ]+)(.*?)\]/', 'get_link_ahref', $text );
- $text = str_replace( '=####[#[####', '=[[', $text );
- $text = str_replace( '=####[####', '=[', $text );
+ if (strpos($text, '=[') !== false) {
+ $text = str_replace('=[[', '=####[#[####', $text);
+ $text = str_replace('=[', '=####[####', $text);
+ $text = preg_replace_callback('/\[(http|https|ftp):\/\/([^ ]+)(.*?)\]/', 'get_link_ahref', $text);
+ $text = str_replace('=####[#[####', '=[[', $text);
+ $text = str_replace('=####[####', '=[', $text);
} else {
- $text = preg_replace_callback( '/\[(http|https|ftp):\/\/([^ ]+)(.*?)\]/', 'get_link_ahref', $text );
+ $text = preg_replace_callback('/\[(http|https|ftp):\/\/([^ ]+)(.*?)\]/', 'get_link_ahref', $text);
}
return $text;
}
-function get_bbcode_ahref( $match ) {
- $href = empty( $match[1] ) ? '#' : xss_clean( $match[1] );
- $target = trim( $match[2] ) == '' ? '' : ' target="' . trim( $match[2] ) . '"';
- $text = empty( $match[3] ) ? $href : $match[3];
+function get_bbcode_ahref($match) {
+ $href = empty($match[1]) ? '#' : xss_clean($match[1]);
+ $target = trim($match[2]) == '' ? '' : ' target="' . trim($match[2]) . '"';
+ $text = empty($match[3]) ? $href : $match[3];
return '' . $text . '';
}
-function get_link_ahref( $match ) {
- $href = empty( $match[2] ) ? '#' : xss_clean( $match[2] );
- $text = empty( $match[3] ) ? $href : trim( $match[3] );
+function get_link_ahref($match) {
+ $href = empty($match[2]) ? '#' : xss_clean($match[2]);
+ $text = empty($match[3]) ? $href : trim($match[3]);
return '' . $text . '';
}
-function strip_bbcode( $text ) {
- $text = str_replace( array( '[br]', '[BR]' ), ' ', $text );
- $text = preg_replace( '|[[\/\!]*?[^\[\]]*?]|si', '', $text );
- $text = preg_replace( '/\s\s+/', ' ', $text );
+function strip_bbcode($text) {
+ $text = str_replace(array('[br]', '[BR]'), ' ', $text);
+ $text = preg_replace('|[[\/\!]*?[^\[\]]*?]|si', '', $text);
+ $text = preg_replace('/\s\s+/', ' ', $text);
return $text;
}
@@ -2358,43 +2220,37 @@ function strip_bbcode( $text ) {
/**
* Convert short file size (100M) to bytes
*/
-function getBytes( $size ) {
- if ( is_numeric( $size ) ) {
+function getBytes($size) {
+ if (is_numeric($size)) {
return $size;
- } elseif ( $size ) {
+ } elseif ($size) {
$_unit = array(
-
'B' => 1,
'K' => 1024,
'M' => 1048576,
'G' => 1073741824,
'T' => 1099511627776,
-
'KB' => 1024,
'MB' => 1048576,
'GB' => 1073741824,
'TB' => 1099511627776,
-
- 'BYTE' => 1,
+ 'BYTE' => 1,
'KILOBYTE' => 1024,
'MEGABYTE' => 1048576,
'GIGABYTE' => 1073741824,
'TERABYTE' => 1099511627776,
-
);
+ $size = trim($size);
+ foreach ($_unit as $key => $value) {
+ if (preg_match('/.*?' . $key . '$/i', $size)) {
+ $num = trim(preg_replace('/(.*?)' . $key . '$/i', '$1', $size));
- $size = trim( $size );
-
- foreach ( $_unit as $key => $value ) {
- if ( preg_match( '/.*?' . $key . '$/i', $size ) ) {
- $num = trim( preg_replace( '/(.*?)' . $key . '$/i', '$1', $size ) );
-
- return ceil( $num * $value );
+ return ceil($num * $value);
}
}
}
- return $size == false ? 0 : floatval( $size );
+ return $size == false ? 0 : floatval($size);
}
/**
@@ -2402,42 +2258,40 @@ function getBytes( $size ) {
* handle the image in RAM to avoid
* errors based on memory limit.
*/
-function getRealImageSize( $imginfo ) {
+function getRealImageSize($imginfo) {
$size = 0;
-
// check image width and height
- if ( ! empty( $imginfo[0] ) && ! empty( $imginfo[1] ) ) {
+ if (!empty($imginfo[0]) && !empty($imginfo[1])) {
$size = $imginfo[0] * $imginfo[1];
}
// handle possible alpha channel for PNG and TIF
- $alpha = ( $imginfo[2] == 3 || $imginfo[2] == 7 || $imginfo[2] == 6 ) ? 1 : 0;
- if ( $size && ! empty( $imginfo['channels'] ) ) {
+ $alpha = ($imginfo[2] == 3 || $imginfo[2] == 7 || $imginfo[2] == 6) ? 1 : 0;
+ if ($size && !empty($imginfo['channels'])) {
// channel - in general this is 3 (RGB) or 4 (CMYK)
- $size = $size * ( $imginfo['channels'] + $alpha );
- } elseif ( $size && ! empty( $imginfo['bits'] ) ) {
+ $size = $size * ($imginfo['channels'] + $alpha);
+ } elseif ($size && !empty($imginfo['bits'])) {
// bits - general value is 8Bit, but can be higher too
- $size = $size * ( log( $imginfo['bits'], 2 ) + $alpha );
- } elseif ( $size ) {
+ $size = $size * (log($imginfo['bits'], 2) + $alpha);
+ } elseif ($size) {
// use a default of 4 like for CMYK
// should meet general usage
- $size = $size * ( 4 + $alpha );
+ $size = $size * (4 + $alpha);
}
return $size;
}
-function is_intval( $str, $signed = true ) {
+function is_intval($str, $signed = true) {
$reg_expr = $signed ? '/^[\-+]?[0-9]+$/' : '/^[0-9]+$/';
- return (bool) preg_match( $reg_expr, $str );
+ return (bool)preg_match($reg_expr, $str);
}
-function attribute_name_clean( $name = '' ) {
- $name = trim( phpwcms_remove_accents( $name ) );
- $name = str_replace( array( ' ', '/', '\\', '#', '+', ':', '.' ), array( '_', '-', '-', '_', '-', '-', '-' ),
- $name );
- $name = preg_replace( '/[^a-zA-Z0-9\-_]/', '', $name );
- $name = preg_replace( '/^\d+/', '', $name );
+function attribute_name_clean($name = '') {
+ $name = trim(phpwcms_remove_accents($name));
+ $name = str_replace(array(' ', '/', '\\', '#', '+', ':', '.'), array('_', '-', '-', '_', '-', '-', '-'), $name);
+ $name = preg_replace('/[^a-zA-Z0-9\-_]/', '', $name);
+ $name = preg_replace('/^\d+/', '', $name);
return $name;
}
@@ -2445,23 +2299,21 @@ function attribute_name_clean( $name = '' ) {
/**
* Try alternative way to test for bool value
*
- * @param mixed
- * @param bool
+ * @param mixed
+ * @param bool
*/
-function phpwcms_boolval( $BOOL, $STRICT = false ) {
- if ( function_exists( 'boolval' ) ) {
- return boolval( $BOOL );
+function phpwcms_boolval($BOOL, $STRICT = false) {
+ if (function_exists('boolval')) {
+ return boolval($BOOL);
}
-
- if ( is_string( $BOOL ) ) {
- $BOOL = strtoupper( $BOOL );
+ if (is_string($BOOL)) {
+ $BOOL = strtoupper($BOOL);
}
-
// no strict test, check only against false bool
- if ( ! $STRICT && in_array( $BOOL, array( false, 0, null, 'FALSE', 'NO', 'N', 'OFF', '0' ), true ) ) {
+ if (!$STRICT && in_array($BOOL, array(false, 0, null, 'FALSE', 'NO', 'N', 'OFF', '0'), true)) {
return false;
// strict, check against true bool
- } elseif ( $STRICT && in_array( $BOOL, array( true, 1, 'TRUE', 'YES', 'Y', 'ON', '1' ), true ) ) {
+ } elseif ($STRICT && in_array($BOOL, array(true, 1, 'TRUE', 'YES', 'Y', 'ON', '1'), true)) {
return true;
}
@@ -2470,100 +2322,90 @@ function phpwcms_boolval( $BOOL, $STRICT = false ) {
}
// sanitize a text for nice URL/alias or whatever
-function uri_sanitize( $text ) {
- $text = str_replace( array( '[br]', '__', '[b]', '[/b]', '[i]', '[/i]' ), ' ',
- $text ); // cleanup special bbcode and __
- $text = get_alnum_dashes( $text, ! PHPWCMS_ALIAS_UTF8, '-', PHPWCMS_ALIAS_WSLASH );
- $text = trim( $text );
- if ( $text !== '' ) {
- $text = trim( preg_replace( '/\-\-+/', '-', $text ), '-' );
- $text = trim( preg_replace( '/__+/', '_', $text ), '_' );
- if ( PHPWCMS_ALIAS_WSLASH ) {
- $text = trim( preg_replace( '/\/+/', '/', $text ), '/' );
- $text = preg_replace( '/\-\/\-/', '/', $text );
+function uri_sanitize($text) {
+ $text = str_replace(array('[br]', '__', '[b]', '[/b]', '[i]', '[/i]'), ' ', $text); // cleanup special bbcode and __
+ $text = get_alnum_dashes($text, !PHPWCMS_ALIAS_UTF8, '-', PHPWCMS_ALIAS_WSLASH);
+ $text = trim($text);
+ if ($text !== '') {
+ $text = trim(preg_replace('/\-\-+/', '-', $text), '-');
+ $text = trim(preg_replace('/__+/', '_', $text), '_');
+ if (PHPWCMS_ALIAS_WSLASH) {
+ $text = trim(preg_replace('/\/+/', '/', $text), '/');
+ $text = preg_replace('/\-\/\-/', '/', $text);
}
}
return $text;
}
-function phpwcms_strtotime( $date, $date_format = null, $empty_return = false ) {
- $strtotime = strtotime( $date );
- if ( $strtotime < 0 || $strtotime === false ) {
+function phpwcms_strtotime($date, $date_format = null, $empty_return = false) {
+ $strtotime = strtotime($date);
+ if ($strtotime < 0 || $strtotime === false) {
return $empty_return;
}
- return is_string( $date_format ) ? date( $date_format, $strtotime ) : $strtotime;
+ return is_string($date_format) ? date($date_format, $strtotime) : $strtotime;
}
-function dec_num_count( $value ) {
- if ( (int) $value == $value ) {
+function dec_num_count($value) {
+ if ((int)$value == $value) {
return 0;
- } elseif ( ! is_numeric( $value ) ) {
+ } elseif (!is_numeric($value)) {
return false;
}
- return strlen( $value ) - strrpos( $value, '.' ) - 1;
+ return strlen($value) - strrpos($value, '.') - 1;
}
-function convert_rel2abs( $text, $base ) {
- if ( empty( $base ) ) {
+function convert_rel2abs($text, $base) {
+ if (empty($base)) {
return $text;
}
-
// Base URL needs trailing /
- if ( substr( $base, - 1, 1 ) !== '/' ) {
+ if (substr($base, -1, 1) !== '/') {
$base .= '/';
}
-
// Fix a href
$pattern = "/]*) href=\"([^http|ftp|https|mailto|tel|fax|###DELETE_LINK###|###SITE_URL###][^\"]*)\"/";
$replace = "]*) src=\"([^http|ftp|https][^\"]*)\"/";
$replace = "width, $this->height);
- if ($this->image_type === 3 || $this->image_type === 1) // png and gif, preserve transparency
+ if ($this->image_type === 3 || $this->image_type === 1 || $this->image_type === 32) // png, gif and webp, preserve transparency
{
imagealphablending($dst_img, false);
imagesavealpha($dst_img, true);
@@ -685,25 +685,25 @@ function image_process_netpbm($action = 'resize') {
}
// Build the resizing command
switch ($this->image_type) {
- case IMAGETYPE_GIF:
+ case IMG_GIF:
$cmd_in = 'giftopnm';
$cmd_out = 'ppmtogif';
break;
- case IMAGETYPE_JPEG:
+ case IMG_JPEG:
$cmd_in = 'jpegtopnm';
$cmd_out = 'ppmtojpeg';
if ($this->colorspace == 'GRAY') {
$cmd_out .= ' -grayscale';
}
break;
- case IMAGETYPE_PNG:
+ case IMG_PNG:
$cmd_in = 'pngtopnm';
$cmd_out = 'ppmtopng';
if (strtoupper($this->colorspace) == 'GRAY') {
$cmd_out .= ' -grayscale';
}
break;
- case IMAGETYPE_WEBP:
+ case IMG_WEBP:
$cmd_in = 'webptopnm';
$cmd_out = 'ppmtowebp';
if (strtoupper($this->colorspace) == 'GRAY') {
@@ -1087,28 +1087,28 @@ function image_create_gd($path = '', $image_type = '') {
$image_type = $this->image_type;
}
switch ($image_type) {
- case IMAGETYPE_GIF:
+ case IMG_GIF:
if (!function_exists('imagecreatefromgif')) {
$this->set_error(array('imglib_unsupported_imagecreate', 'imglib_gif_not_supported'));
return false;
}
$im = @imagecreatefromgif($path);
break;
- case IMAGETYPE_JPEG:
+ case IMG_JPEG:
if (!function_exists('imagecreatefromjpeg')) {
$this->set_error(array('imglib_unsupported_imagecreate', 'imglib_jpg_not_supported'));
return false;
}
$im = @imagecreatefromjpeg($path);
break;
- case IMAGETYPE_PNG:
+ case IMG_PNG:
if (!function_exists('imagecreatefrompng')) {
$this->set_error(array('imglib_unsupported_imagecreate', 'imglib_png_not_supported'));
return false;
}
$im = @imagecreatefrompng($path);
break;
- case IMAGETYPE_WEBP:
+ case IMG_WEBP:
if (!function_exists('imagecreatefromwebp')) {
$this->set_error(array('imglib_unsupported_imagecreate', 'imglib_webp_not_supported'));
return false;
@@ -1185,7 +1185,7 @@ function image_save_gd($resource) {
return true;
}
switch ($this->image_type) {
- case IMAGETYPE_GIF:
+ case IMG_GIF:
if (!function_exists('imagegif')) {
$this->set_error(array('imglib_unsupported_imagecreate', 'imglib_gif_not_supported'));
return false;
@@ -1195,7 +1195,7 @@ function image_save_gd($resource) {
return false;
}
break;
- case IMAGETYPE_JPEG:
+ case IMG_JPEG:
if (!function_exists('imagejpeg')) {
$this->set_error(array('imglib_unsupported_imagecreate', 'imglib_jpg_not_supported'));
return false;
@@ -1205,7 +1205,7 @@ function image_save_gd($resource) {
return false;
}
break;
- case IMAGETYPE_PNG:
+ case IMG_PNG:
if (!function_exists('imagepng')) {
$this->set_error(array('imglib_unsupported_imagecreate', 'imglib_png_not_supported'));
return false;
@@ -1215,7 +1215,7 @@ function image_save_gd($resource) {
return false;
}
break;
- case IMAGETYPE_WEBP:
+ case IMG_WEBP:
if (!function_exists('imagewebp')) {
$this->set_error(array('imglib_unsupported_imagecreate', 'imglib_png_not_supported'));
return false;
@@ -1247,16 +1247,16 @@ function image_display_gd($resource) {
header('Content-Transfer-Encoding: binary');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
switch ($this->image_type) {
- case IMAGETYPE_GIF:
+ case IMG_GIF:
imagegif($resource);
break;
- case IMAGETYPE_JPEG:
+ case IMG_JPEG:
imagejpeg($resource, null, $this->quality);
break;
- case IMAGETYPE_PNG:
+ case IMG_PNG:
imagepng($resource);
break;
- case IMAGETYPE_WEBP:
+ case IMG_WEBP:
imagewebp($resource, null, $this->quality);
break;
default:
@@ -1341,10 +1341,10 @@ function get_image_properties($path = '', $return = false) {
return true; // the image lib might handle this format
}
$types = array(
- IMAGETYPE_GIF => 'gif',
- IMAGETYPE_JPEG => 'jpeg',
- IMAGETYPE_PNG => 'png',
- IMAGETYPE_WEBP => 'webp'
+ IMG_GIF => 'gif',
+ IMG_JPEG => 'jpeg',
+ IMG_PNG => 'png',
+ IMG_WEBP => 'webp'
);
$mime = isset($vals[2]) && isset($types[$vals[2]]) ? 'image/' . $types[$vals[2]] : 'image/jpg';
$this->image_current_vals = $vals;
diff --git a/include/inc_lib/imagick.convert.inc.php b/include/inc_lib/imagick.convert.inc.php
index 89f72fe0b..dba26696f 100755
--- a/include/inc_lib/imagick.convert.inc.php
+++ b/include/inc_lib/imagick.convert.inc.php
@@ -206,7 +206,10 @@ function get_cached_image($val=array(), $db_track=true, $return_all_imageinfo=tr
);
$imgCache = false; //do not insert file information in db image cache
- $thumb_image_info = array(0 => false, 'svg' => false);
+ $thumb_image_info = array(
+ 0 => false,
+ 'svg' => false
+ );
if($val['target_ext'] === 'svg' && is_file($val['image_dir'].$val['image_name'])) {
@@ -267,38 +270,31 @@ function get_cached_image($val=array(), $db_track=true, $return_all_imageinfo=tr
}
- if(empty($val['img_filename'])) {
-
- // now check if thumbnail was created - proof for GIF, PNG, JPG
- $thumb_check = $val['thumb_dir'] . $val['thumb_name'];
-
- } else {
+ if(!empty($val['img_filename'])) {
$thumb_spec_info = '';
- if($val['crop_image']) {
+ if ($val['crop_image']) {
$thumb_spec_info .= 'c' . $val['crop_image'];
- if($val['crop_pos']) {
+ if ($val['crop_pos']) {
$thumb_spec_info .= $val['crop_pos'];
}
}
- if($val['sharpen_level']) {
+ if ($val['sharpen_level']) {
$thumb_spec_info .= 's' . $val['sharpen_level'];
}
- if($val['target_ext'] === 'jpg' || $val['target_ext'] === 'webp') {
+ if ($val['target_ext'] === 'jpg' || $val['target_ext'] === 'webp') {
$thumb_spec_info .= 'q' . $val['quality'];
}
- if(!isset($thumb_filename_basis)) {
+ if (!isset($thumb_filename_basis)) {
$thumb_filename_basis = cut_ext($val['img_filename']);
}
$val['thumb_name'] = substr($thumb_filename_basis, 0, 230) . '_' . $val['max_width'] . 'x' . $val['max_height'];
- if($thumb_spec_info) {
+ if ($thumb_spec_info) {
$val['thumb_name'] .= '-' . $thumb_spec_info;
}
-
- $thumb_check = $val['thumb_dir'] . $val['thumb_name'];
-
}
+ $thumb_check = $val['thumb_dir'] . $val['thumb_name'];
if (PHPWCMS_WEBP) {
if (is_file($thumb_check . '.webp')) {
@@ -520,35 +516,30 @@ function phpwcms_svg_getimagesize($svg_file) {
}
function is_animated_gif($file) {
- $fp = null;
- if (is_string($file)) {
- $fp = fopen($file, "rb");
- } else {
- $fp = $file;
-
- /* Make sure that we are at the beginning of the file */
- fseek($fp, 0);
- }
+ if (is_string($file) && is_file($file) && $fp = fopen($file, 'rb')) {
- if (fread($fp, 3) !== "GIF") {
- fclose($fp);
+ if (fread($fp, 3) !== 'GIF') {
+ fclose($fp);
- return false;
- }
+ return false;
+ }
- $frames = 0;
+ $frames = 0;
- while (!feof($fp) && $frames < 2) {
- if (fread($fp, 1) === "\x00") {
- /* Some of the animated GIFs do not contain graphic control extension (starts with 21 f9) */
- if (fread($fp, 1) === "\x21" || fread($fp, 2) === "\x21\xf9") {
- $frames++;
+ while (!feof($fp) && $frames < 2) {
+ if (fread($fp, 1) === "\x00") {
+ /* Some of the animated GIFs do not contain graphic control extension (starts with 21 f9) */
+ if (fread($fp, 1) === "\x21" || fread($fp, 2) === "\x21\xf9") {
+ $frames++;
+ }
}
}
- }
- fclose($fp);
+ fclose($fp);
+
+ return $frames > 1;
+ }
- return $frames > 1;
+ return false;
}
\ No newline at end of file
diff --git a/include/inc_lib/lib.php_special_entities.php b/include/inc_lib/lib.php_special_entities.php
index 968b63dc7..96bb31107 100644
--- a/include/inc_lib/lib.php_special_entities.php
+++ b/include/inc_lib/lib.php_special_entities.php
@@ -6,13 +6,12 @@
* @copyright Copyright (c) 2002-2021, Oliver Georgi
* @license http://opensource.org/licenses/GPL-2.0 GNU GPL-2
* @link http://www.phpwcms.org
- *
**/
// this is a html entities and its decode parameter
// based on list at http://www.htmlhelp.com/reference/html40/entities/
-$SPECIAL_ENTITIES_TABLES['latin1_encode'] = array (
+$SPECIAL_ENTITIES_TABLES['latin1_encode'] = array(
' ',
'¡',
'¢',
@@ -108,7 +107,7 @@
'ü',
'ý',
'þ',
- 'ÿ'
+ 'ÿ',
);
$SPECIAL_ENTITIES_TABLES['symbol_encode'] = array(
@@ -235,7 +234,7 @@
'♠',
'♣',
'♥',
- '♦'
+ '♦',
);
$SPECIAL_ENTITIES_TABLES['specialchars_encode'] = array(
@@ -270,233 +269,233 @@
'‰',
'‹',
'›',
- '€'
+ '€',
);
-$SPECIAL_ENTITIES_TABLES['latin1_decode'] = array (
+$SPECIAL_ENTITIES_TABLES['latin1_decode'] = array(
' ',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?',
- '?'
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
);
$SPECIAL_ENTITIES_TABLES['symbol_decode'] = array(
- 'ƒ',
- 'Α',
- 'Β',
- 'Γ',
- 'Δ',
- 'Ε',
- 'Ζ',
- 'Η',
- 'Θ',
- 'Ι',
- 'Κ',
- 'Λ',
- 'Μ',
- 'Ν',
- 'Ξ',
- 'Ο',
- 'Π',
- 'Ρ',
- 'Σ',
- 'Τ',
- 'Υ',
- 'Φ',
- 'Χ',
- 'Ψ',
- 'Ω',
- 'α',
- 'β',
- 'γ',
- 'δ',
- 'ε',
- 'ζ',
- 'η',
- 'θ',
- 'ι',
- 'κ',
- 'λ',
- 'μ',
- 'ν',
- 'ξ',
- 'ο',
- 'π',
- 'ρ',
- 'ς',
- 'σ',
- 'τ',
- 'υ',
- 'φ',
- 'χ',
- 'ψ',
- 'ω',
- 'ϑ',
- 'ϒ',
- 'ϖ',
- '•',
- '…',
- '′',
- '″',
- '‾',
- '⁄',
- '℘',
- 'ℑ',
- 'ℜ',
- '™',
- 'ℵ',
- '←',
- '↑',
- '→',
- '↓',
- '↔',
- '↵',
- '⇐',
- '⇑',
- '⇒',
- '⇓',
- '⇔',
- '∀',
- '∂',
- '∃',
- '∅',
- '∇',
- '∈',
- '∉',
- '∋',
- '∏',
- '∑',
- '−',
- '∗',
- '√',
- '∝',
- '∞',
- '∠',
- '∧',
- '∨',
- '∩',
- '∪',
- '∫',
- '∴',
- '∼',
- '≅',
- '≈',
- '≠',
- '≡',
- '≤',
- '≥',
- '⊂',
- '⊃',
- '⊄',
- '⊆',
- '⊇',
- '⊕',
- '⊗',
- '⊥',
- '⋅',
- '⌈',
- '⌉',
- '⌊',
- '⌋',
- '〈',
- '〉',
- '◊',
- '♠',
- '♣',
- '♥',
- '♦'
+ 'ƒ',
+ 'Α',
+ 'Β',
+ 'Γ',
+ 'Δ',
+ 'Ε',
+ 'Ζ',
+ 'Η',
+ 'Θ',
+ 'Ι',
+ 'Κ',
+ 'Λ',
+ 'Μ',
+ 'Ν',
+ 'Ξ',
+ 'Ο',
+ 'Π',
+ 'Ρ',
+ 'Σ',
+ 'Τ',
+ 'Υ',
+ 'Φ',
+ 'Χ',
+ 'Ψ',
+ 'Ω',
+ 'α',
+ 'β',
+ 'γ',
+ 'δ',
+ 'ε',
+ 'ζ',
+ 'η',
+ 'θ',
+ 'ι',
+ 'κ',
+ 'λ',
+ 'μ',
+ 'ν',
+ 'ξ',
+ 'ο',
+ 'π',
+ 'ρ',
+ 'ς',
+ 'σ',
+ 'τ',
+ 'υ',
+ 'φ',
+ 'χ',
+ 'ψ',
+ 'ω',
+ 'ϑ',
+ 'ϒ',
+ 'ϖ',
+ '•',
+ '…',
+ '′',
+ '″',
+ '‾',
+ '⁄',
+ '℘',
+ 'ℑ',
+ 'ℜ',
+ '™',
+ 'ℵ',
+ '←',
+ '↑',
+ '→',
+ '↓',
+ '↔',
+ '↵',
+ '⇐',
+ '⇑',
+ '⇒',
+ '⇓',
+ '⇔',
+ '∀',
+ '∂',
+ '∃',
+ '∅',
+ '∇',
+ '∈',
+ '∉',
+ '∋',
+ '∏',
+ '∑',
+ '−',
+ '∗',
+ '√',
+ '∝',
+ '∞',
+ '∠',
+ '∧',
+ '∨',
+ '∩',
+ '∪',
+ '∫',
+ '∴',
+ '∼',
+ '≅',
+ '≈',
+ '≠',
+ '≡',
+ '≤',
+ '≥',
+ '⊂',
+ '⊃',
+ '⊄',
+ '⊆',
+ '⊇',
+ '⊕',
+ '⊗',
+ '⊥',
+ '⋅',
+ '⌈',
+ '⌉',
+ '⌊',
+ '⌋',
+ '〈',
+ '〉',
+ '◊',
+ '♠',
+ '♣',
+ '♥',
+ '♦',
);
$SPECIAL_ENTITIES_TABLES['specialchars_decode'] = array(
@@ -504,32 +503,32 @@
'&',
'<',
'>',
- 'Œ',
- 'œ',
- 'Š',
- 'š',
- 'Ÿ',
- 'ˆ',
- '˜',
- ' ',
- ' ',
- ' ',
- '',
- '',
- '',
- '',
- '–',
- '—',
- '‘',
- '’',
- '‚',
- '“',
- '”',
- '„',
- '†',
- '‡',
- '‰',
- '‹',
- '›',
- '€'
+ 'Œ',
+ 'œ',
+ 'Š',
+ 'š',
+ 'Ÿ',
+ 'ˆ',
+ '˜',
+ ' ',
+ ' ',
+ ' ',
+ '',
+ '',
+ '',
+ '',
+ '–',
+ '—',
+ '‘',
+ '’',
+ '‚',
+ '“',
+ '”',
+ '„',
+ '†',
+ '‡',
+ '‰',
+ '‹',
+ '›',
+ '€',
);
diff --git a/include/inc_lib/lib.php_special_entities.utf-8.php b/include/inc_lib/lib.php_special_entities.utf-8.php
index 55ace2446..3d1e6a577 100644
--- a/include/inc_lib/lib.php_special_entities.utf-8.php
+++ b/include/inc_lib/lib.php_special_entities.utf-8.php
@@ -6,13 +6,12 @@
* @copyright Copyright (c) 2002-2021, Oliver Georgi
* @license http://opensource.org/licenses/GPL-2.0 GNU GPL-2
* @link http://www.phpwcms.org
- *
**/
// this is a html entities and its decode parameter
// based on list at http://www.htmlhelp.com/reference/html40/entities/
-$SPECIAL_ENTITIES_TABLES['latin1_encode'] = array (
+$SPECIAL_ENTITIES_TABLES['latin1_encode'] = array(
" ",
"¡",
"¢",
@@ -108,7 +107,7 @@
"ü",
"ý",
"þ",
- "ÿ"
+ "ÿ",
);
$SPECIAL_ENTITIES_TABLES['symbol_encode'] = array(
@@ -235,7 +234,7 @@
"♠",
"♣",
"♥",
- "♦"
+ "♦",
);
$SPECIAL_ENTITIES_TABLES['specialchars_encode'] = array(
@@ -270,10 +269,10 @@
"‰",
"‹",
"›",
- "€"
+ "€",
);
-$SPECIAL_ENTITIES_TABLES['latin1_decode'] = array (
+$SPECIAL_ENTITIES_TABLES['latin1_decode'] = array(
" ",
"¡",
"¢",
@@ -369,134 +368,134 @@
"ü",
"ý",
"þ",
- "ÿ"
+ "ÿ",
);
$SPECIAL_ENTITIES_TABLES['symbol_decode'] = array(
- "ƒ",
- "Α",
- "Β",
- "Γ",
- "Δ",
- "Ε",
- "Ζ",
- "Η",
- "Θ",
- "Ι",
- "Κ",
- "Λ",
- "Μ",
- "Ν",
- "Ξ",
- "Ο",
- "Π",
- "Ρ",
- "Σ",
- "Τ",
- "Υ",
- "Φ",
- "Χ",
- "Ψ",
- "Ω",
- "α",
- "β",
- "γ",
- "δ",
- "ε",
- "ζ",
- "η",
- "θ",
- "ι",
- "κ",
- "λ",
- "μ",
- "ν",
- "ξ",
- "ο",
- "π",
- "ρ",
- "ς",
- "σ",
- "τ",
- "υ",
- "φ",
- "χ",
- "ψ",
- "ω",
- "ϑ",
- "ϒ",
- "ϖ",
- "•",
- "…",
- "′",
- "″",
- "‾",
- "⁄",
- "℘",
- "ℑ",
- "ℜ",
- "™",
- "ℵ",
- "←",
- "↑",
- "→",
- "↓",
- "↔",
- "↵",
- "⇐",
- "⇑",
- "⇒",
- "⇓",
- "⇔",
- "∀",
- "∂",
- "∃",
- "∅",
- "∇",
- "∈",
- "∉",
- "∋",
- "∏",
- "∑",
- "−",
- "∗",
- "√",
- "∝",
- "∞",
- "∠",
- "∧",
- "∨",
- "∩",
- "∪",
- "∫",
- "∴",
- "∼",
- "≅",
- "≈",
- "≠",
- "≡",
- "≤",
- "≥",
- "⊂",
- "⊃",
- "⊄",
- "⊆",
- "⊇",
- "⊕",
- "⊗",
- "⊥",
- "⋅",
- "⌈",
- "⌉",
- "⌊",
- "⌋",
- "〈",
- "〉",
- "◊",
- "♠",
- "♣",
- "♥",
- "♦"
+ "ƒ",
+ "Α",
+ "Β",
+ "Γ",
+ "Δ",
+ "Ε",
+ "Ζ",
+ "Η",
+ "Θ",
+ "Ι",
+ "Κ",
+ "Λ",
+ "Μ",
+ "Ν",
+ "Ξ",
+ "Ο",
+ "Π",
+ "Ρ",
+ "Σ",
+ "Τ",
+ "Υ",
+ "Φ",
+ "Χ",
+ "Ψ",
+ "Ω",
+ "α",
+ "β",
+ "γ",
+ "δ",
+ "ε",
+ "ζ",
+ "η",
+ "θ",
+ "ι",
+ "κ",
+ "λ",
+ "μ",
+ "ν",
+ "ξ",
+ "ο",
+ "π",
+ "ρ",
+ "ς",
+ "σ",
+ "τ",
+ "υ",
+ "φ",
+ "χ",
+ "ψ",
+ "ω",
+ "ϑ",
+ "ϒ",
+ "ϖ",
+ "•",
+ "…",
+ "′",
+ "″",
+ "‾",
+ "⁄",
+ "℘",
+ "ℑ",
+ "ℜ",
+ "™",
+ "ℵ",
+ "←",
+ "↑",
+ "→",
+ "↓",
+ "↔",
+ "↵",
+ "⇐",
+ "⇑",
+ "⇒",
+ "⇓",
+ "⇔",
+ "∀",
+ "∂",
+ "∃",
+ "∅",
+ "∇",
+ "∈",
+ "∉",
+ "∋",
+ "∏",
+ "∑",
+ "−",
+ "∗",
+ "√",
+ "∝",
+ "∞",
+ "∠",
+ "∧",
+ "∨",
+ "∩",
+ "∪",
+ "∫",
+ "∴",
+ "∼",
+ "≅",
+ "≈",
+ "≠",
+ "≡",
+ "≤",
+ "≥",
+ "⊂",
+ "⊃",
+ "⊄",
+ "⊆",
+ "⊇",
+ "⊕",
+ "⊗",
+ "⊥",
+ "⋅",
+ "⌈",
+ "⌉",
+ "⌊",
+ "⌋",
+ "〈",
+ "〉",
+ "◊",
+ "♠",
+ "♣",
+ "♥",
+ "♦",
);
$SPECIAL_ENTITIES_TABLES['specialchars_decode'] = array(
@@ -504,32 +503,32 @@
'&',
'<',
'>',
- "Œ",
- "œ",
- "Š",
- "š",
- "Ÿ",
- "ˆ",
- "˜",
- " ",
- " ",
- " ",
- "",
- "",
- "",
- "",
- "–",
- "—",
- "‘",
- "’",
- "‚",
- "“",
- "”",
- "„",
- "†",
- "‡",
- "‰",
- "‹",
- "›",
- "€"
+ "Œ",
+ "œ",
+ "Š",
+ "š",
+ "Ÿ",
+ "ˆ",
+ "˜",
+ " ",
+ " ",
+ " ",
+ "",
+ "",
+ "",
+ "",
+ "–",
+ "—",
+ "‘",
+ "’",
+ "‚",
+ "“",
+ "”",
+ "„",
+ "†",
+ "‡",
+ "‰",
+ "‹",
+ "›",
+ "€",
);
diff --git a/include/inc_lib/profile.updateaccount.inc.php b/include/inc_lib/profile.updateaccount.inc.php
index 13d706c71..3329cf134 100644
--- a/include/inc_lib/profile.updateaccount.inc.php
+++ b/include/inc_lib/profile.updateaccount.inc.php
@@ -34,7 +34,7 @@
$err = str_replace('{VAL}', html($new_username), $BL['be_profile_account_err1'])."\n";
}
}
- if ($_POST["form_password"] == $_POST["form_password2"]) {
+ if ($_POST["form_password"] === $_POST["form_password2"]) {
if(strlen($_POST["form_password"]) > 0) {
$new_password = slweg($_POST["form_password"]);
if ( strlen($new_password) < 5) $err .= str_replace('{VAL}', strlen($new_password), $BL['be_profile_account_err2'])."\n";
@@ -49,49 +49,28 @@
}
}
- if($_POST["form_lang"]) {
- $new_language = slweg(trim($_POST["form_lang"]));
- } else {
- $new_language = $phpwcms["default_lang"];
- }
+ $new_language = isset($_POST["form_lang"]) ? slweg(trim($_POST["form_lang"])) : $phpwcms["default_lang"];
$new_wysiwyg = empty($_POST['form_wysiwyg']) ? 0 : intval($_POST['form_wysiwyg']);
$user_var['template'] = empty($_POST['form_wysiwyg_template']) ? '' : clean_slweg($_POST['form_wysiwyg_template']);
+ $user_var['selected_cp'] = array();
if(isset($_POST['profile_cp_total'])) {
$profile_cp_total = intval($_POST['profile_cp_total']);
$profile_account_cp_total = isset($_POST['profile_account_cp']) && is_array($_POST['profile_account_cp']) ? count($_POST['profile_account_cp']) : 0;
- if(!$profile_account_cp_total || $profile_account_cp_total === $profile_cp_total) {
-
- $user_var['selected_cp'] = array();
-
- } else {
-
- $user_var['selected_cp'] = array();
-
- foreach($_POST['profile_account_cp'] as $cp) {
-
+ if($profile_account_cp_total && $profile_account_cp_total !== $profile_cp_total) {
+ foreach ($_POST['profile_account_cp'] as $cp) {
$cp = intval($cp);
$user_var['selected_cp'][$cp] = $cp;
-
}
-
}
-
- } else {
-
- $user_var['selected_cp'] = array();
-
}
- //Jetzt die Daten aktualisieren
-
if(empty($err)) {
- $sql = "UPDATE ".DB_PREPEND."phpwcms_user SET ";
- $sql .= " usr_login="._dbEscape($new_username).", ";
+ $sql = "UPDATE ".DB_PREPEND."phpwcms_user SET usr_login="._dbEscape($new_username).", ";
if(!empty($new_password)) {
$sql .= "usr_pass="._dbEscape(md5(makeCharsetConversion($new_password, PHPWCMS_CHARSET, 'utf-8'))).", ";
diff --git a/include/inc_lib/revision/revision.php b/include/inc_lib/revision/revision.php
index d8ae8c009..a09d30d2f 100644
--- a/include/inc_lib/revision/revision.php
+++ b/include/inc_lib/revision/revision.php
@@ -9,6 +9,6 @@
*
**/
-define('PHPWCMS_VERSION', '1.9.24');
-define('PHPWCMS_RELEASE_DATE', '2021/04/05');
+define('PHPWCMS_VERSION', '1.9.25');
+define('PHPWCMS_RELEASE_DATE', '2021/05/22');
define('PHPWCMS_REVISION', '551');
diff --git a/include/inc_lib/subscriberimport.form.inc.php b/include/inc_lib/subscriberimport.form.inc.php
index 42a0d3f69..fe3fe3206 100644
--- a/include/inc_lib/subscriberimport.form.inc.php
+++ b/include/inc_lib/subscriberimport.form.inc.php
@@ -32,75 +32,56 @@
}
// check uploaded FILE
-if(getimagesize($_FILES['cvsfile']['tmp_name'])) {
-
- $_userInfo['csvError'] = 'False MIME TYPE. Be sure to upload CSV file only.';
-
-} elseif(is_uploaded_file($_FILES['cvsfile']['tmp_name']) && !$_FILES['cvsfile']['error']) {
-
- $_userInfo['csvFileTyper'] = strtolower(trim($_FILES['cvsfile']['type']));
-
- switch($_userInfo['csvFileTyper']) {
-
- case 'application/vnd-ms-excel':
- case 'application/vnd.ms-excel':
- case 'text/plain':
- case 'text/csv':
- case 'text/x-csv':
- case 'application/x-csv':
- case 'application/csv':
- case 'text/comma-separated-values':
- case 'application/octet-stream':
-
- $_userInfo['csv'] = csvFileToArray($_FILES['cvsfile']['tmp_name'], $_userInfo['delimeter']);
-
- if(is_array($_userInfo['csv'])) {
-
- $_userInfo['nonImported'] = array();
- $c = 1;
- $_userInfo['csvTime'] = time();
-
- foreach($_userInfo['csv'] as $row) {
-
- if(!isset($row[1])) {
- $row[1] = '';
- }
-
- if(!empty($row[0]) && is_valid_email($row[0])) {
-
- $sql = "INSERT INTO " . DB_PREPEND . "phpwcms_address (";
- $sql .= "address_email, address_name, address_key, address_subscription, address_verified, address_tstamp) VALUES (";
- $sql .= "'" . aporeplace($row[0]) . "', ";
- $sql .= "'" . aporeplace($row[1]) . "', ";
- $sql .= "'" . aporeplace(shortHash($row[0] . time())) . "', ";
- $sql .= "'" . ($_userInfo['subscribe_all'] ? '' : aporeplace(serialize($_userInfo['subscribe_select']))) . "', ";
- $sql .= $_userInfo['subscribe_active'] . ", FROM_UNIXTIME(" . $_userInfo['csvTime'] . ") )";
-
- $sql = _dbQuery($sql, 'INSERT');
- if(empty($sql['INSERT_ID'])) {
- $_userInfo['nonImported'][ $c ] = $row[0] . '; ' . $row[1] . ' (' . _dbError() . ')';
- }
-
- } else {
-
- $_userInfo['nonImported'][ $c ] = $row[0] . '; ' . $row[1];
-
- }
-
- $c++;
- }
-
- }
-
- break;
-
- default:
- $_userInfo['csvError'] = 'False MIME TYPE. Be sure to upload CSV file only.';
- @unlink($_FILES['cvsfile']['tmp_name']);
- }
-
-} elseif($_FILES['cvsfile']['error']) {
-
- $_userInfo['csvError'] = return_upload_errormsg($_FILES['cvsfile']['error']);
-
-}
+if (isset($_FILES['cvsfile']['tmp_name'])) {
+ if (getimagesize($_FILES['cvsfile']['tmp_name'])) {
+ $_userInfo['csvError'] = 'False MIME TYPE. Be sure to upload CSV file only.';
+ } elseif (is_uploaded_file($_FILES['cvsfile']['tmp_name']) && !$_FILES['cvsfile']['error']) {
+ $_userInfo['csvFileTyper'] = strtolower(trim($_FILES['cvsfile']['type']));
+ switch ($_userInfo['csvFileTyper']) {
+ case 'application/vnd-ms-excel':
+ case 'application/vnd.ms-excel':
+ case 'text/plain':
+ case 'text/csv':
+ case 'text/x-csv':
+ case 'application/x-csv':
+ case 'application/csv':
+ case 'text/comma-separated-values':
+ case 'application/octet-stream':
+ $_userInfo['csv'] = csvFileToArray($_FILES['cvsfile']['tmp_name'], $_userInfo['delimeter']);
+ if (is_array($_userInfo['csv'])) {
+ $_userInfo['nonImported'] = array();
+ $c = 1;
+ $_userInfo['csvTime'] = time();
+ foreach ($_userInfo['csv'] as $row) {
+ if (!isset($row[1])) {
+ $row[1] = '';
+ }
+ if (!empty($row[0]) && is_valid_email($row[0])) {
+ $sql = "INSERT INTO ".DB_PREPEND."phpwcms_address (";
+ $sql .= "address_email, address_name, address_key, address_subscription, address_verified, address_tstamp) VALUES (";
+ $sql .= "'".aporeplace($row[0])."', ";
+ $sql .= "'".aporeplace($row[1])."', ";
+ $sql .= "'".aporeplace(shortHash($row[0].time()))."', ";
+ $sql .= "'".($_userInfo['subscribe_all'] ? '' : aporeplace(serialize($_userInfo['subscribe_select'])))."', ";
+ $sql .= $_userInfo['subscribe_active'].", FROM_UNIXTIME(".$_userInfo['csvTime'].") )";
+ $sql = _dbQuery($sql, 'INSERT');
+ if (empty($sql['INSERT_ID'])) {
+ $_userInfo['nonImported'][$c] = $row[0].'; '.$row[1].' ('._dbError().')';
+ }
+ } else {
+ $_userInfo['nonImported'][$c] = $row[0].'; '.$row[1];
+ }
+ $c++;
+ }
+ }
+ break;
+ default:
+ $_userInfo['csvError'] = 'False MIME TYPE. Be sure to upload CSV file only.';
+ @unlink($_FILES['cvsfile']['tmp_name']);
+ }
+ } elseif ($_FILES['cvsfile']['error']) {
+ $_userInfo['csvError'] = return_upload_errormsg($_FILES['cvsfile']['error']);
+ }
+} else {
+ $_userInfo['csvError'] = 'Please do not forget to upload a CSV file.';
+}
\ No newline at end of file
diff --git a/include/inc_module/mod_shop/frontend.init.php b/include/inc_module/mod_shop/frontend.init.php
index 1f77ae952..efd5639f7 100644
--- a/include/inc_module/mod_shop/frontend.init.php
+++ b/include/inc_module/mod_shop/frontend.init.php
@@ -159,7 +159,7 @@ function get_shop_category_name($id=0, $subid=0) {
function get_payment_options() {
$payment_prefs = _getConfig( 'shop_pref_payment', '_shopPref' );
- $supported = array('prepay' => 0, 'pod' => 0, 'onbill' => 0);
+ $supported = array('prepay' => 0, 'pod' => 0, 'onbill' => 0, 'cash' => 0);
$available = array();
foreach($supported as $key => $value) {
if(!empty($payment_prefs[$key])) {
diff --git a/include/inc_module/mod_shop/frontend.render.php b/include/inc_module/mod_shop/frontend.render.php
index 675d379a0..2b91822ea 100644
--- a/include/inc_module/mod_shop/frontend.render.php
+++ b/include/inc_module/mod_shop/frontend.render.php
@@ -203,6 +203,9 @@
'label_payby_prepay' => "@@Cash with order@@",
'label_payby_pod' => "@@Cash on delivery@@",
'label_payby_onbill' => "@@On account@@",
+ 'label_payby_cash' => "@@Cash@@",
+ 'label_selfpickup' => "@@Self pickup@@",
+ 'label_selfpickup_freeshipping' => "@@Self pickup, free shipping@@",
'order_number_style' => 'RANDOM',
'cat_list_sort_by' => 'shopprod_name1 ASC',
'shop_css' => '',
@@ -223,8 +226,10 @@
'pagetitle' => '%1$s%2$s%3$s%4$s',
'product_option_1_prefix' => '',
'product_option_1_suffix' => '',
+ 'product_option_1_required' => 'required="required"',
'product_option_2_prefix' => '',
'product_option_2_suffix' => '',
+ 'product_option_2_required' => 'required="required"',
'amount_input_prefix' => '',
'amount_input_suffix' => '',
'amount_input_position' => 'after'
@@ -241,13 +246,13 @@
'shop_pref_email_paypal',
'shop_pref_shipping',
'shop_pref_shipping_calc',
+ 'shop_pref_shipping_selfpickup',
'shop_pref_payment',
'shop_pref_discount',
'shop_pref_loworder'
) as $value ) {
_getConfig( $value, '_shopPref' );
-
}
if(!isset($_tmpl['config']['shop_url'])) {
@@ -343,13 +348,12 @@
// add product to shopping
if(isset($_SESSION[CART_KEY]['products'][$shop_prod_id][$opt_1][$opt_2])) {
$_SESSION[CART_KEY]['products'][$shop_prod_id][$opt_1][$opt_2] += $shop_prod_amount;
- $_SESSION[CART_KEY]['options1'][$shop_prod_id][$opt_1][$opt_2] = $opt_1;
- $_SESSION[CART_KEY]['options2'][$shop_prod_id][$opt_1][$opt_2] = $opt_2;
} else {
$_SESSION[CART_KEY]['products'][$shop_prod_id][$opt_1][$opt_2] = $shop_prod_amount;
- $_SESSION[CART_KEY]['options1'][$shop_prod_id][$opt_1][$opt_2] = $opt_1;
- $_SESSION[CART_KEY]['options2'][$shop_prod_id][$opt_1][$opt_2] = $opt_2;
}
+ $_SESSION[CART_KEY]['options1'][$shop_prod_id][$opt_1][$opt_2] = $opt_1;
+ $_SESSION[CART_KEY]['options2'][$shop_prod_id][$opt_1][$opt_2] = $opt_2;
+
//this sessionvar holds the products for the small cart
if(isset($_SESSION[CART_KEY]['total'][$shop_prod_id.$opt_1.$opt_2])) {
$_SESSION[CART_KEY]['total'][$shop_prod_id.$opt_1.$opt_2] += $shop_prod_amount;
@@ -393,6 +397,12 @@
$_SESSION[CART_KEY]['delivery_address'] = '';
$_SESSION[CART_KEY]['distance'] = false;
+ if (empty($_shopPref['shop_pref_shipping_selfpickup'])) {
+ $_SESSION[CART_KEY]['selfpickup'] = false;
+ } else {
+ $_SESSION[CART_KEY]['selfpickup'] = empty($_POST['shopping_selfpickup']) ? false : true;
+ }
+
// handle invoice address -> checkout
$_SESSION[CART_KEY]['step1'] = array(
@@ -487,7 +497,6 @@
}
}
-
// first we take categories
if( $_shop_load_cat !== false ) {
@@ -512,7 +521,7 @@
$shop_cat = array();
- $shop_cat_selected = isset($GLOBALS['_getVar']['shop_cat']) ? $GLOBALS['_getVar']['shop_cat'] : 'all';
+ $shop_cat_selected = isset($GLOBALS['_getVar']['shop_cat']) ? $GLOBALS['_getVar']['shop_cat'] : 'all';
if(strpos($shop_cat_selected, '_')) {
$shop_cat_selected = explode('_', $shop_cat_selected, 2);
if(isset($shop_cat_selected[1])) {
@@ -576,7 +585,7 @@
$shop_subcat[$z] .= 'class="' . $_tmpl['config']['cat_class_subitem_link'] . '">';
$shop_subcat[$z] .= '@@' . html($srow['cat_name']) . '@@';
if ($_tmpl['config']['cat_count_products']) {
- $count_cat_products_sql = "SELECT COUNT(*) FROM ".DB_PREPEND.'phpwcms_shop_products WHERE ';
+ $count_cat_products_sql = "SELECT COUNT(*) FROM ".DB_PREPEND.'phpwcms_shop_products WHERE ';
$count_cat_products_sql .= "shopprod_status=1 AND (";
$count_cat_products_sql .= "shopprod_category = '" . $srow['cat_id'] . "' OR ";
$count_cat_products_sql .= "shopprod_category LIKE '%," . $srow['cat_id'] . ",%' OR ";
@@ -614,7 +623,7 @@
$shop_cat[$x] .= 'class="' . $_tmpl['config']['cat_class_item_link'] . '">';
$shop_cat[$x] .= '@@' . html($row['cat_name']) . '@@';
if ($_tmpl['config']['cat_count_products']) {
- $count_cat_products_sql = "SELECT COUNT(*) FROM ".DB_PREPEND.'phpwcms_shop_products WHERE ';
+ $count_cat_products_sql = "SELECT COUNT(*) FROM ".DB_PREPEND.'phpwcms_shop_products WHERE ';
$count_cat_products_sql .= "shopprod_status=1 AND (";
$count_cat_products_sql .= "shopprod_category = '" . $row['cat_id'] . "' OR ";
$count_cat_products_sql .= "shopprod_category LIKE '%," . $row['cat_id'] . ",%' OR ";
@@ -809,7 +818,7 @@
foreach($_cart_opt_1 as $key => $value){
//title - first row in textarea - string
if($key === 0 && ($value = trim($value))) {
- $_cart_prod_opt1 .= '';
+ $_cart_prod_opt1 .= '';
continue;
}
@@ -819,8 +828,8 @@
$_cart_prod_opt1 .= html($value[0]) . $value['option'];
$_cart_prod_opt1 .= '';
}
-
- $_cart_prod_opt1 = '';
+ $_cart_req_opt1 = empty($_tmpl['config']['product_option_1_required']) ? '' : ' ' . $_tmpl['config']['product_option_1_required'];
+ $_cart_prod_opt1 = '';
}
//order options 2
@@ -830,7 +839,7 @@
foreach($_cart_opt_2 as $key => $value){
//title - first row in textarea - string
if($key === 0 && ($value = trim($value))) {
- $_cart_prod_opt2 .= '';
+ $_cart_prod_opt2 .= '';
continue;
}
@@ -841,8 +850,8 @@
$_cart_prod_opt2 .= '';
}
-
- $_cart_prod_opt2 = '';
+ $_cart_req_opt2 = empty($_tmpl['config']['product_option_2_required']) ? '' : ' ' . $_tmpl['config']['product_option_2_required'];
+ $_cart_prod_opt2 = '';
}
if($_tmpl['config']['on_request_trigger'] == $row['net']) {
@@ -1226,6 +1235,27 @@ function($match) use ($row) {
$order_process = render_cnt_template($order_process, 'ERROR_'.$item_key, $field_error);
}
+ if ($_shopPref['shop_pref_shipping_selfpickup']) {
+ $selfpickup_field = '