imagefallback.php 2.53 KB
<?php

class NextendImageFallBack {

    static public function findImage($s) {
        preg_match_all('/(<img.*?src=[\'"](.*?)[\'"][^>]*>)|(background(-image)??\s*?:.*?url\((["|\']?)?(.+?)(["|\']?)?\))/i', $s, $r);
        if (isset($r[2]) && !empty($r[2][0])) {
            $s = $r[2][0];
        } else if (isset($r[6]) && !empty($r[6][0])) {
            $s = trim($r[6][0], "'\" \t\n\r\0\x0B");
        } else {
            $s = '';
        }
        return $s;
    }

    static public function siteURL() {
        $protocol   = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        $domainName = $_SERVER['HTTP_HOST'];
        return $protocol . $domainName;
    }

    static public function fallback($root, $imageVars, $textVars = array()) {
        $return = '';
        if (is_array($imageVars)) {
            foreach ($imageVars as $image) {
                if (!empty($image)) {
                    $return = N2ImageHelper::dynamic($root . $image);
                    break;
                }
            }
            if ($return == '' && !empty($textVars)) {
                foreach ($textVars as $text) {
                    $imageInText = self::findImage($text);
                    if (!empty($imageInText)) {
                        $file = $root . $imageInText;
                        if (N2Filesystem::existsFile($file)) {
                            $return = N2ImageHelper::dynamic($root . $imageInText);
                        } else {
                            $slashes = array('/','\\');
							if(in_array(substr(self::siteURL(), -1), $slashes) || in_array(substr($imageInText, 0, 1), $slashes)){
								$return = N2ImageHelper::dynamic(self::siteURL() . $imageInText);
							} else {
								$return = N2ImageHelper::dynamic(self::siteURL() . '/' . $imageInText);
							}
                        }
                        if ($return != '$/') {
                            break;
                        } else {
                            $return = '';
                        }
                    }
                }
            }
            if ($return != '') {
                if (strpos($return, '$/http:') !== false || strpos($return, '$/https:') !== false) {
                    $return = substr($return, 2);
                } else if (strpos($return, '$http:') !== false || strpos($return, '$https:') !== false || strpos($return, '$//') !== false) {
                    $return = substr($return, 1);
                }
            }
        }
        return $return;
    }
}