Вход Регистрация
Файл: upload/module/link/include/service/link.class.php
Строк: 223
<?php
/**
 * [PHPFOX_HEADER]
 */

defined('PHPFOX') or exit('NO DICE!');

/**
 * 
 * 
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author          Raymond_Benc
 * @package         Phpfox_Service
 * @version         $Id: link.class.php 4569 2012-07-31 08:22:33Z Raymond_Benc $
 */
class Link_Service_Link extends Phpfox_Service 
{
    
/**
     * Class constructor
     */    
    
public function __construct()
    {    
        
$this->_sTable Phpfox::getT('link');    
    }
    
    public function 
getLink($sUrl)
    {
        if (
substr($sUrl07) != 'http://' && substr($sUrl08) != 'https://')
        {
            
$sUrl 'http://' $sUrl;
        }
            
        
$aParts parse_url($sUrl);    
                
        if (!isset(
$aParts['host']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('link.not_a_valid_link'));
        }
        
        
$aReturn = array();        
        
$oVideo json_decode(Phpfox::getLib('request')->send('http://api.embed.ly/1/oembed?format=json&maxwidth=400&url=' urlencode($sUrl), array(), 'GET'$_SERVER['HTTP_USER_AGENT']));

        if (isset(
$oVideo->provider_url))
        {
            
$aReturn = array(
                
'link' => $sUrl,
                
'title' => (isset($oVideo->title) ? strip_tags($oVideo->title) : ''),
                
'description' => (isset($oVideo->description) ? strip_tags($oVideo->description) : ''),
                
'default_image' => ($oVideo->type == 'photo' $oVideo->url : (isset($oVideo->thumbnail_url) ? $oVideo->thumbnail_url '')),
                
'embed_code' => ($oVideo->type == 'video' $oVideo->html '')
            );
                    
            return 
$aReturn;
        }    
        
        
$aParseBuild = array();
        
$sContent Phpfox::getLib('request')->send($sUrl, array(), 'GET'$_SERVER['HTTP_USER_AGENT']);                
        
preg_match_all('/<(meta|link)(.*?)>/i'$sContent$aRegMatches);        
        if (isset(
$aRegMatches[2]))
        {
            foreach (
$aRegMatches as $iKey => $aMatch)
            {
                if (
$iKey !== 2)
                {
                    continue;
                }                
                
                foreach (
$aMatch as $sLine)
                {
                    
$sLine rtrim($sLine'/');
                    
$sLine trim($sLine);
                    
                    
preg_match('/(property|name|rel)=("|')(.*?)("|')/ise', $sLine$aType);
                    if (count(
$aType) && isset($aType[3]))
                    {
                        
$sType = $aType[3];
                        preg_match('/(content|type)=("
|')(.*?)("|')/i', $sLine, $aValue);
                        if (count($aValue) && isset($aValue[3]))
                        {                        
                            if ($sType == '
alternate')
                            {
                                $sType = $aValue[3];
                                preg_match('
/href=("|')(.*?)("|')/i'$sLine$aHref);
                                if (isset(
$aHref[2]))
                                {
                                    
$aValue[3] = $aHref[2];
                                }
                            }
                            
$aParseBuild[$sType] = $aValue[3];
                        }
                    }
                }
            }
            
            if (isset(
$aParseBuild['og:title']))
            {
                
$aReturn['link'] = $sUrl;
                
$aReturn['title'] = $aParseBuild['og:title'];
                
$aReturn['description'] = $aParseBuild['og:description'];
                
$aReturn['default_image'] = $aParseBuild['og:image'];
                if (isset(
$aParseBuild['application/json+oembed']))
                {
                    
$oJson json_decode(Phpfox::getLib('request')->send($aParseBuild['application/json+oembed'], array(), 'GET'$_SERVER['HTTP_USER_AGENT']));                    if (isset($oJson->html))
                    {
                        
$aReturn['embed_code'] = $oJson->html;    
                    }
                }

                return 
$aReturn;
            }
        }        
        
        
$sContent Phpfox::getLib('request')->send($sUrl, array(), 'GET'$_SERVER['HTTP_USER_AGENT']);        
        if( 
function_exists('mb_convert_encoding') )
          {
              
$sContent mb_convert_encoding($sContent'HTML-ENTITIES'"UTF-8");
          }        
                    
          
$aReturn['link'] = $sUrl;
        
        
Phpfox_Error::skip(true);
        
$oDoc = new DOMDocument();
        
$oDoc->loadHTML($sContent);
        
Phpfox_Error::skip(false);
        
        if ((
$oTitle $oDoc->getElementsByTagName('title')->item(0)) && !empty($oTitle->nodeValue))
        {
            
$aReturn['title'] = strip_tags($oTitle->nodeValue);
        }
        
        if (empty(
$aReturn['title']))
        {
            if (
preg_match('/^(.*?).(jpg|png|jpeg|gif)$/i'$sUrl$aImageMatches))
            {
                return array(
                    
'link' => $sUrl,
                    
'title' => '',
                    
'description' => '',
                    
'default_image' => $sUrl,
                    
'embed_code' => ''
                
);
            }

            return 
Phpfox_Error::set(Phpfox::getPhrase('link.not_a_valid_link_unable_to_find_a_title'));
        }
        
        
$oXpath = new DOMXPath($oDoc);    
        
$oMeta $oXpath->query("//meta[@name='description']")->item(0);
        if (
method_exists($oMeta'getAttribute'))
        {
            
$sMeta $oMeta->getAttribute('content');
            if (!empty(
$sMeta))
            {
                
$aReturn['description'] = strip_tags($sMeta);
            }
        }
        
        
$aImages = array();        
        
$oMeta $oXpath->query("//meta[@property='og:image']")->item(0);
        if (
method_exists($oMeta'getAttribute'))
        {            
            
$aReturn['default_image'] = strip_tags($oMeta->getAttribute('content'));
            
$aImages[] = strip_tags($oMeta->getAttribute('content'));
        }        
        
        
$oMeta $oXpath->query("//link[@rel='image_src']")->item(0);
        if (
method_exists($oMeta'getAttribute'))
        {            
            if (empty(
$aReturn['default_image']))
            {
                
$aReturn['default_image'] = strip_tags($oMeta->getAttribute('href'));
            }
            
$aImages[] = strip_tags($oMeta->getAttribute('href'));
        }            
        
        if (!isset(
$aReturn['default_image']))
        {
            
$oImages $oDoc->getElementsByTagName('img');
            
$iIteration 0;
            foreach (
$oImages as $oImage)
            {
                
$sImageSrc $oImage->getAttribute('src');
                
                if (
substr($sImageSrc07) != 'http://' && substr($sImageSrc01) != '/')
                {
                    continue;    
                }
                
                if (
substr($sImageSrc02) == '//')
                {
                    continue;
                }
                
                
$iIteration++;        
                
                if (
substr($sImageSrc01) == '/')
                {                    
                    
$sImageSrc 'http://' $aParts['host'] . $sImageSrc;
                }            
                
                if (
$iIteration === && empty($aReturn['default_image']))
                {
                    
$aReturn['default_image'] = strip_tags($sImageSrc);
                }
                
                if (
$iIteration 10)
                {
                    break;
                }
                
                
$aImages[] = strip_tags($sImageSrc);
            }
        }
        
        if (
count($aImages))
        {
            
$aReturn['images'] = $aImages;
        }
        
        
$oLink $oXpath->query("//link[@type='text/xml+oembed']")->item(0);
        if (
method_exists($oLink'getAttribute'))
        {    
            
$aXml Phpfox::getLib('xml.parser')->parse(Phpfox::getLib('request')->send($oLink->getAttribute('href'), array(), 'GET'$_SERVER['HTTP_USER_AGENT']));            
            if (isset(
$aXml['html']))
            {
                
$aReturn['embed_code'] = $aXml['html'];    
            }
        }                
        
        return 
$aReturn;
    }
    
    public function 
getEmbedCode($iId$bIsPopUp false)
    {
        
$aLinkEmbed $this->database()->select('embed_code')    
            ->
from(Phpfox::getT('link_embed'))
            ->
where('link_id = ' . (int) $iId)
            ->
execute('getSlaveRow');
        
        
$iWidth 640;
        
$iHeight 390;
        if (!
$bIsPopUp)
        {
            
$iWidth 480;
            
$iHeight 295;
        }
        
        
$aLinkEmbed['embed_code'] = preg_replace('/width="(.*?)"/i''width="' $iWidth '"'$aLinkEmbed['embed_code']);
        
$aLinkEmbed['embed_code'] = preg_replace('/height="(.*?)"/i''height="' $iHeight '"'$aLinkEmbed['embed_code']);        
        
$aLinkEmbed['embed_code'] = preg_replace_callback('/<object(.*?)>(.*?)</object>/is', array($this'_embedWmode'), $aLinkEmbed['embed_code']);
        
$aLinkEmbed['embed_code'] = str_replace(array('&lt;''&gt;'), array('<''>'), $aLinkEmbed['embed_code']);
        if (
Phpfox::getParam('video.disable_youtube_related_videos'))
        {
             if (
preg_match('/src=(["'])(.*?)1/', $aLinkEmbed['embed_code'], $aMatch) > 0)
             {
                $aLinkEmbed['
embed_code'] = str_replace($aMatch[2], $aMatch[2] . '&amp;rel=0', $aLinkEmbed['embed_code']);
             }
        }
        
        return $aLinkEmbed['
embed_code'];
    }
    
    public function getLinkById($iId)
    {
        $aLink = $this->database()->select('
l.*, u.user_name')
            ->from(Phpfox::getT('
link'), 'l')
            ->join(Phpfox::getT('
user'), 'u', 'u.user_id l.user_id')
            ->where('
l.link_id ' . (int) $iId)
            ->execute('
getSlaveRow');
        
        if (!isset($aLink['
link_id']))
        {
            return false;
        }
        
        return $aLink;
    }
    
    /**
     * If a call is made to an unknown method attempt to connect
     * it to a specific plug-in with the same name thus allowing 
     * plug-in developers the ability to extend classes.
     *
     * @param string $sMethod is the name of the method
     * @param array $aArguments is the array of arguments of being passed
     */
    public function __call($sMethod, $aArguments)
    {
        /**
         * Check if such a plug-in exists and if it does call it.
         */
        if ($sPlugin = Phpfox_Plugin::get('
link.service_link__call'))
        {
            eval($sPlugin);
            return;
        }
            
        /**
         * No method or plug-in found we must throw a error.
         */
        Phpfox_Error::trigger('
Call to undefined method ' . __CLASS__ . '::' . $sMethod . '()', E_USER_ERROR);
    }    
    
    private function _embedWmode($aMatches)
    {
        return '
<object ' . $aMatches[1] . '><param name="wmode" value="transparent"></param>' . str_replace('<embed ', '<embed  wmode="transparent" ', $aMatches[2]) . '</object>';
    }    
}

?>
Онлайн: 0
Реклама