Skip to content

Commit

Permalink
v1.18.0
Browse files Browse the repository at this point in the history
  • Loading branch information
optipic-io committed Jun 14, 2021
1 parent 775ee46 commit 97ae39c
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 10 deletions.
84 changes: 75 additions & 9 deletions app/addons/optipic/ImgUrlConverter.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class ImgUrlConverter {
/**
* Library version number
*/
const VERSION = '1.15';
const VERSION = '1.18';

/**
* ID of your site on CDN OptiPic.io service
Expand Down Expand Up @@ -48,6 +48,8 @@ class ImgUrlConverter {

public static $enableLog = false;

public static $cdnDomain = 'cdn.optipic.io';

/**
* Constructor
*/
Expand Down Expand Up @@ -180,9 +182,23 @@ public static function convertHtml($content) {
array('\'', '\''), // '<url>'
array('\(', '\)'), // (<url>)
);

$cdnDomains = array(
'cdn.optipic.io',
);

$cdnDomains[] = self::$cdnDomain;
$cdnDomains = array_unique($cdnDomains);

$cdnDomainsForRegexp = array();
foreach($cdnDomains as $cdnDomain) {
$cdnDomainsForRegexp[] = '\/\/'.preg_quote($cdnDomain, '#');
}
$cdnDomainsForRegexp = implode("|", $cdnDomainsForRegexp);

$regexp = array();
foreach($urlBorders as $border) {
$regexp[] = '#('.$border[0].')'.$host.'('.$firstPartOfUrl.'(?!\/\/cdn\.optipic\.io)[^'.$border[1].']+\.(png|jpg|jpeg){1}(\?[^"\'\s]*?)?)('.$border[1].')#siS';
$regexp[] = '#('.$border[0].')'.$host.'('.$firstPartOfUrl.'(?!'.$cdnDomainsForRegexp.')[^'.$border[1].']+\.(png|jpg|jpeg){1}(\?[^"\'\s]*?)?)('.$border[1].')#siS';
}
//var_dump($regexp);exit;

Expand All @@ -198,6 +214,8 @@ public static function convertHtml($content) {

self::$baseUrl = false;

$content = str_replace('<head>', '<head>' . PHP_EOL . self::getPreloadTags(), $content);

if($gziped) {
$content = gzencode($content);

Expand All @@ -214,6 +232,15 @@ public static function convertHtml($content) {
return $content;
}



public static function getPreloadTags() {
return '<link href="//'.self::$cdnDomain.'/preload.css" rel="stylesheet">' . PHP_EOL
. '<link rel="preload" href="//'.self::$cdnDomain.'/preload.png" as="image">';
}



public static function trimList($list) {
$trimmed = array();
foreach ($list as $ind => $item) {
Expand Down Expand Up @@ -272,6 +299,10 @@ public static function loadConfig($source=false) {
self::$enableLog = true;
}
}

if(!empty($source['cdn_domain'])) {
self::$cdnDomain = $source['cdn_domain'];
}
}
elseif(file_exists($source)) {
$config = require($source);
Expand Down Expand Up @@ -326,7 +357,7 @@ public static function callbackForPregReplace($matches) {
}
}

$ext = pathinfo($parseUrl['path'], PATHINFO_EXTENSION);
$ext = strtolower(pathinfo($parseUrl['path'], PATHINFO_EXTENSION));
if(!in_array($ext, array('png', 'jpg', 'jpeg'))) {
return $replaceWithoutOptiPic;
}
Expand All @@ -338,7 +369,7 @@ public static function callbackForPregReplace($matches) {
$urlOriginal = self::getUrlFromRelative($urlOriginal, self::$baseUrl);


$replaceWithOptiPic = $matches[1].'//cdn.optipic.io/site-'.self::$siteId.$urlOriginal.$matches[5];
$replaceWithOptiPic = $matches[1].'//'.self::$cdnDomain.'/site-'.self::$siteId.$urlOriginal.$matches[5];

self::log($urlOriginal, 'callbackForPregReplace -> url original:');
self::log($replaceWithOptiPic, 'callbackForPregReplace -> url with optipic:');
Expand Down Expand Up @@ -423,6 +454,10 @@ public static function isGz($str) {
}

public static function getUrlFromRelative($relativeUrl, $baseUrl=false) {
if(stripos($relativeUrl, '../')!==false) {
$relativeUrl = self::resolveFilename($relativeUrl);
}

if(substr($relativeUrl, 0, 1)=='/') {
return $relativeUrl;
}
Expand All @@ -434,13 +469,31 @@ public static function getUrlFromRelative($relativeUrl, $baseUrl=false) {
//$baseUrl = pathinfo($_SERVER['REQUEST_URI'], PATHINFO_DIRNAME);
$baseUrl = self::getBaseDirOfUrl($_SERVER['REQUEST_URI']);
}
$baseUrl .= '/';
//$baseUrl .= '/';

$url = str_replace('//', '/', $baseUrl.$relativeUrl);
return $url;
}



public static function resolveFilename($filename) {
$filename = str_replace('//', '/', $filename);
$parts = explode('/', $filename);
$out = array();
foreach ($parts as $part){
if ($part == '.') continue;
if ($part == '..') {
array_pop($out);
continue;
}
$out[] = $part;
}
return implode('/', $out);
}



/**
* Get main base path (dir) from full URL
*
Expand All @@ -452,11 +505,24 @@ public static function getBaseDirOfUrl($url) {
return '/';
}
$urlPath = $urlParsed['path'];
$baseUrl = $urlPath;
$pathinfo = pathinfo($urlPath);
if(!empty($pathinfo['extension'])) {
return $pathinfo['dirname'];
$baseUrl = $pathinfo['dirname'];
}
return $urlPath;

if(stripos($url, $baseUrl.'/')!==false) {
$baseUrl .= '/';
}

if(substr($baseUrl, -1)!='/') {
$pathinfo = pathinfo($baseUrl);
if(!empty($pathinfo['dirname'])) {
$baseUrl = $pathinfo['dirname'];
}
}

return $baseUrl;
}

public static function getBaseUrlFromHtml($html) {
Expand All @@ -467,9 +533,9 @@ public static function getBaseUrlFromHtml($html) {
$baseUrl = trim($matches['base_url'], '"/');
$baseUrl = trim($baseUrl, "'");
$baseUrl = self::getBaseDirOfUrl($baseUrl);
if(strlen($baseUrl)>0 && substr($baseUrl, -1, 1)!='/') {
/*if(strlen($baseUrl)>0 && substr($baseUrl, -1, 1)!='/') {
$baseUrl .= '/';
}
}*/
}
return $baseUrl;
}
Expand Down
1 change: 1 addition & 0 deletions app/addons/optipic/Optipic.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public function getSettings()
'exclusions_url' => Registry::get('addons.optipic.exclusions_url')!='' ? explode("\n", Registry::get('addons.optipic.exclusions_url')) : array(),
'whitelist_img_urls' => Registry::get('addons.optipic.whitelist_img_urls')!='' ? explode("\n", Registry::get('addons.optipic.whitelist_img_urls')) : array(),
'srcset_attrs' => Registry::get('addons.optipic.srcset_attrs')!='' ? explode("\n", Registry::get('addons.optipic.srcset_attrs')) : array(),
'cdn_domain' => Registry::get('addons.optipic.cdn_domain'),
);
}

Expand Down
7 changes: 6 additions & 1 deletion app/addons/optipic/addon.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<!-- Описание аддона -->
<description>OptiPic.io - image optimization via smart CDN. The module automates the process of optimizing and compressing all images on the site according to the recommendations of Google PageSpeed Insights.</description>
<!-- Версия аддона -->
<version>1.15.0</version>
<version>1.18.0</version>
<!-- Родной язык аддона (по умолчанию). Необязательный параметр; если не указан, то язык будет распознаваться как английский (EN). -->
<default_language>en</default_language>
<!-- Приоритет аддона. Чем выше, тем позже аддон подключается. -->
Expand Down Expand Up @@ -78,6 +78,11 @@
<type>textarea</type>
<variants/>
</item>
<item id="cdn_domain">
<type>input</type>
<variants/>
<default_value>cdn.optipic.io</default_value>
</item>
<item id="info">
<type>info</type>
<handler>fn_optipic_settings_field_info</handler>
Expand Down
2 changes: 2 additions & 0 deletions app/addons/optipic/func.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ function fn_optipic_settings_field_info() {

$html = '';

$html .= '<div class="muted" style="margin: 20px 0;">'.__('optipic.cdn_domain_description').'</div>';

//$html .= var_export(\optipic\cdn\ImgUrlConverter::getDefaultSettings(), true);
$defaultSettings = \optipic\cdn\ImgUrlConverter::getDefaultSettings();
$defaultDomains = implode("\\n", $defaultSettings['domains']);
Expand Down
8 changes: 8 additions & 0 deletions var/langs/en/addons/optipic.po
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,11 @@ msgstr "Replace only URLs of images starting with a mask"
msgctxt "SettingsOptions::optipic::srcset_attrs"
msgid "List of 'srcset' attributes"
msgstr "List of 'srcset' attributes"

msgctxt "SettingsOptions::optipic::cdn_domain"
msgid "CDNdomain"
msgstr "CDN domain"

msgctxt "Languages::optipic.cdn_domain_description"
msgid "cdn_domain_description"
msgstr "CDN domain: Domain through which CDN OptiPic will work. You can use your subdomain (img.yourdomain.com, optipic.yourdomain.com, etc.) instead of the standard cdn.optipic.io. To connect your subdomain, contact OptiPic technical support."
8 changes: 8 additions & 0 deletions var/langs/ru/addons/optipic.po
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,11 @@ msgstr "Подменять только URL изображений, начина
msgctxt "SettingsOptions::optipic::srcset_attrs"
msgid "List of 'srcset' attributes"
msgstr "Список 'srcset' атрибутов"

msgctxt "SettingsOptions::optipic::cdn_domain"
msgid "CDNdomain"
msgstr "CDN домен"

msgctxt "Languages::optipic.cdn_domain_description"
msgid "cdn_domain_description"
msgstr "CDN домен: Домен через который будет работать CDN OptiPic. Вы можете использовать поддомен вашего домена (img.yourdomain.com, optipic.yourdomain.com и т.п.) вместо стандартного cdn.optipic.io. Для подключению своего поддомена обратитесь в техподдержку OptiPic."

0 comments on commit 97ae39c

Please sign in to comment.