Вход Регистрация
Файл: IPBMafia.ru_IPB_3.4.6_Final_Rus _Nulled/board/upload/admin/sources/classes/mapping/bootstrap.php
Строк: 237
<?php

/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.4.6
 * Generic Mapping Class
 * Owner: Matt Mecham
 * Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
 *
 * @author         $Author: bfarber $
 * @copyright    (c) 2001 - 2009 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @link        http://www.invisionpower.com
 * @since        9th March 2005 11:03
 * @version        $Revision: 10721 $
 */

/**
 * Factory class
 *
 * @author matt
 *
 */
class classes_mapping
{
    
/**
     * App object
     * @var object
     */
    
static protected $_app;
    
    
/**
     * Construct
     */
    
static public function bootstrap$engine )
    {
        if ( ! 
$engine )
        {
            
trigger_error"No engine specified for class_mapping"E_USER_WARNING );
        }
        
        
/* Pointless comment! */
        
$_file  IPS_ROOT_PATH 'sources/classes/mapping/engines/' $engine '.php';
        
        if ( 
is_file$_file ) )
        {
            
$classToLoad IPSLib::loadLibrary$_file'classes_mapping_' $engine );
            
            if ( 
class_exists$classToLoad ) )
            {
                
self::$_app = new $classToLoad();
            }
            else
            {
                throw new 
Exception"No mapping engine class available for $engine);
            }
        }
        else
        {
            throw new 
Exception"No mapping engine class available for $engine);
        }
        
        return 
self::$_app;
    }
    
}

/**
 * Composite class
 */
abstract class classes_mapping_composite
{
    
/**
     * 
     * Location services available flag
     * @return    boolean
     */
    
public function enabled()
    {
        return ( 
$this->fetchApiKey() ) ? true false;
    }
    
    
/**
     * Return application key
     * @return string
     */
    
public function fetchApiKey()
    {
        return 
false;
    }
    
    
/**
     * Reverse geocode look up
     * I know. Seriously. This is really technical.
     * 
     * @access    public
     * @param    int        Lat
     * @param    int        Lon
     * @return    array    Decoded JSON in an array
     */
    
public function reverseGeoCodeLookUp$lat$lon )
    {
        if ( 
$this->enabled() !== true )
        {
            return 
false;
        }
        
        
/* First check the DB, this is bound to be cheaper than sockets and Yahoo APIs
         * and it's likely that in an album of images one has already has set the geo location */
        
$test $this->DB->buildAndFetch( array( 'select' => '*',
                                                 
'from'   => 'core_geolocation_cache',
                                                 
'where'  => 'geocache_key='' . $this->getDbKey( $lat, $lon ) . ''',
                                                 
'limit'  => array( 0) ) );
        
        if ( ! empty( 
$test['geocache_country'] ) )
        {
            return 
$test;
        }
        
        
/* Still here? Oh well, lets do it. */ 
        
$data      $this->liveReverseLookUp$lat$lon );
        
        if ( ! 
is_array$data ) )
        {
            return 
null;
        }
    
        
$formatted $this->formatReverseLookUp$data );
        
        
/* Save to db */
        
if ( $formatted !== false && ! empty( $formatted['country'] ) )
        {
            
$save = array( 'geocache_key'       => $this->getDbKey$lat$lon ),
                           
'geocache_lat'        => $lat,
                           
'geocache_lon'        => $lon,
                           
'geocache_raw'        => serialize$data ),
                           
'geocache_country'   => $formatted['country'],
                           
'geocache_district'  => $formatted['district'],
                           
'geocache_district2' => $formatted['district2'],
                           
'geocache_locality'  => $formatted['locality'],
                           
'geocache_type'      => $formatted['type'],
                           
'geocache_engine'    => $formatted['engine'],
                           
'geocache_added'        => time(),
                           
'geocache_short'        => $formatted['short'] );
            
            
$this->DB->replace'core_geolocation_cache'$save, array( 'geocache_key' ) );
            
            return 
$save;
        }
        else
        {
            return 
false;
        }
    }
    
    
/*
     * Fetch image URLS
     * Returns an array with 2 image URLs for use next to the image
     * Yes.
     * 
     * @access public
     * @param    string    lat
     * @param    string    lon
     * @param    string    Image size (200x200 is default)
     */
    
public function getImageUrls$lat$lon$size='200x200' )
    {
        return array( 
falsefalse );
    }
    
    
/**
     * 
     * Parses the result of the look up to return info we need
     * @param array $array
     * @return array $return
     */
    
public function formatReverseLookUp( array $array )
    {    
        return 
$array;
    }
    
    
/**
     * Returns a URL for the main map (click event)
     * @param string $lat
     * @param string $lon
     * @return    string URL
     */
    
public function getMapUrl$lat$lon )
    {
        return 
false;
    }
    
    
/**
     * Make a key for the DB
     * @param string $lat
     * @param string $lon
     * @return string
     */
    
protected function getDbKey$lat$lon )
    {
        return 
md5trim($lat) . ',' trim($lon) );
    }
    
    
/**
     * Attempt to get images from the cache
     * @param string $lat
     * @param string $lon
     * @param string $size
     */
    
protected function _getImagesFromCache$lat$lon$size )
    {
        
$file_0 md5$lat ',' $lon ',' $size ) . '_0.png';
        
$file_1 md5$lat ',' $lon ',' $size ) . '_1.png';
        
        if ( 
is_file$this->_getCachePath() . '/' $file_0 ) && is_file$this->_getCachePath() . '/' $file_1 ) )
        {
            return array( 
$this->_getCacheUrl() . '/' $file_0$this->_getCacheUrl() . '/' $file_1 );
        }
        else
        {
            return 
false;
        }
    }
    
    
/**
     * Write images to cache
     * @param string $lat
     * @param string $lon
     * @param string $size
     */
    
protected function _setImageCache$lat$lon$size$key$data )
    {
        if ( ! 
is_dir$this->settings['upload_dir'] . '/maps' ) )
        {
            @
mkdir$this->settings['upload_dir'] . '/maps'IPS_FOLDER_PERMISSION );
            @
chmod$this->settings['upload_dir'] . '/maps'IPS_FOLDER_PERMISSION );
        }
        
        
$filename md5$lat ',' $lon ',' $size ) . '_' $key;
    
        
/* Extension less */
        
if ( @file_put_contents$this->_getCachePath() . '/' $filename$data ) )
        {
            
$data = @getimagesize$this->_getCachePath() . '/' $filename );
            
            if ( ! 
is_array$data ) OR ! count$data ) )
            {
                
unlink$this->_getCachePath() . '/' $filename );
                return 
false;
            }
            else
            {
                if ( 
$data['mime'] == 'image/png' )
                {
                    
/* Add ext */
                    
if ( ! @rename$this->_getCachePath() . '/' $filename$this->_getCachePath() . '/' $filename '.png' ) )
                    {
                        
unlink$this->_getCachePath() . '/' $filename );
                        return 
false;
                    }
                }
                else
                {
                    if ( 
$data['mime'] == 'image/jpg' )
                    {
                        
$gd = @imagecreatefromjpeg$this->_getCachePath() . '/' $filename );
                        
                        if ( ! @
imagepng$gd$this->_getCachePath() . '/' $filename '.png' ) )
                        {
                            
unlink$this->_getCachePath() . '/' $filename );
                            return 
false;
                        }
                    }
                    else if ( 
$data['mime'] == 'image/gif' )
                    {
                        
$gd = @imagecreatefromgif$this->_getCachePath() . '/' $filename );
                        
                        if ( ! @
imagepng$gd$this->_getCachePath() . '/' $filename '.png' ) )
                        {
                            
unlink$this->_getCachePath() . '/' $filename );
                            return 
false;
                        }
                    }
                }
            }
            
        }
        else
        {
            return 
false;
        }
        
        return 
true;
    }
    
    
/**
     * Returns cache path
     * @return string
     */
    
protected function _getCachePath()
    {
        return ( 
is_dir$this->settings['upload_dir'] . '/maps' )  ) ? $this->settings['upload_dir'] . '/maps' $this->settings['upload_dir'];
    }
    
    
/**
     * Returns cache path
     * @return string
     */
    
protected function _getCacheUrl()
    {
        return ( 
is_dir$this->settings['upload_dir'] . '/maps' )  ) ? $this->settings['upload_url'] . '/maps' $this->settings['upload_url'];
    }
}
Онлайн: 1
Реклама