Вход Регистрация
Файл: upload/module/egift/include/service/egift.class.php
Строк: 196
<?php

/**
 * [PHPFOX_HEADER]
 */
defined('PHPFOX') or exit('NO DICE!');

/**
 * 
 * 
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author          Miguel Espinoza
 * @package         Phpfox_Service
 * @version         $Id: service.class.php 67 2009-01-20 11:32:45Z Raymond_Benc $
 */
class Egift_Service_Egift extends Phpfox_Service
{

    
/**
     * Class constructor
     */
    
public function __construct()
    {
        
$this->_sTable Phpfox::getT('egift_category');
        
/* This array holds the sizes for the thumbnails of the egifts */
        
$this->_aSizes = array(120);
    }

    
/**
     * Getter function that returns a list of categories.
     * @param bool $bHideEmpty Should we remove empty categories?
     * @return array
     */
    
public function getCategories($bHideEmpty false)
    {
        
$sCacheId $this->cache()->set('egift_category');
        if (!(
$aCategories $this->cache()->get($sCacheId)))
        {
            
$aCategories $this->database()
                            ->
select('ec.*, eg.egift_id')
                            ->
leftjoin(Phpfox::getT('egift'), 'eg''eg.category_id=ec.category_id')
                            ->
group('ec.category_id')
                            ->
order('ec.ordering ASC')
                            ->
from($this->_sTable'ec')
                            ->
execute('getSlaveRows');
            if (!
is_array($aCategories))
            {
                
$aCategories = array();
            }
            foreach (
$aCategories as $iKey => $aCat)
            {
                
$aPhraseIds $this->database()->select('phrase_id, language_id, text')
                                ->
from(Phpfox::getT('language_phrase'))
                                ->
where('module_id = "egift" AND var_name = "' str_replace('egift.'''$aCat['phrase']) . '"')
                                ->
execute('getSlaveRows');
                foreach (
$aPhraseIds as $aPhrase)
                {
                    
$aCategories[$iKey]['phrase_ids'][$aPhrase['language_id']] = array(
                        
'phrase_id' => $aPhrase['phrase_id'],
                        
'text' => $aPhrase['text']);
                    
/* Not needed anymore but lets leave it for safety */
                    
if (preg_match('/{phrase var=/'$aPhrase['text']))
                    {
                        
$aCategories[$iKey]['phrase_ids'][$aPhrase['language_id']]['text'] = str_replace(array('{phrase var='''', '"', '}'), '', $aPhrase['text']);
                    }
                }
            }
            
$this->cache()->save($sCacheId$aCategories);
        }
        if (!is_array(
$aCategories))
        {
            
$aCategories = array();
        }
        if (
$bHideEmpty)
        {
            foreach (
$aCategories as $iKey => $aCat)
            {
                if (!isset(
$aCat['egift_id']) || empty($aCat['egift_id']))
                {
                    unset(
$aCategories[$iKey]);
                }
            }
        }
        /* Now we make sure there is at least an empty string for the missing languages */
        return 
$aCategories;
    }

    /**
     * Gets one single category
     * @param int 
$iId
     * @return array
     */
    public function getCategoryById(
$iId)
    {
        
$aCategories = $this->getCategories();
        foreach (
$aCategories as $aCategory)
        {
            if (
$aCategory['category_id'] == $iId)
            {
                return 
$aCategory;
            }
        }
        return array();
    }

    /**
     * This function returns every egift available grouped by category and with
     * the prices unserialized
     * @return array
     */
    public function getEgifts()
    {
        
$sCacheId = $this->cache()->set('egift_item');
        if (!(
$aEgifts = $this->cache()->get($sCacheId)))
        {
            
$aOut = array();
            
$aEgifts = $this->database()->select('*')
                            ->join(
$this->_sTable, 'ec', 'ec.category_id = e.category_id')
                            ->from(Phpfox::getT('egift'), 'e')
                            ->execute('getSlaveRows');

            foreach (
$aEgifts as $aGift)
            {
                
$aGift['price'] = unserialize($aGift['price']);
                
$aOut[Phpfox::getPhrase($aGift['phrase'])][] = $aGift;
            }

            
$this->cache()->save($sCacheId$aOut);
            
$aEgifts = $aOut;
        }
        if (!is_array(
$aEgifts))
        {
            
$aEgifts = array();
        }
        return 
$aEgifts;
    }

    /**
     * Gets a gift for editing. It accepts an optional second param to get the
     * gift from there.
     * Careful, this function serves very specific purposes.
     * @param int 
$iEdit
     * @param array 
$aCache Optional
     * @param array 
$aCategories (Optional) If present, this function searches for the category of iEdit
     * @return array or false
     */
    public function getForEdit(
$iEdit$aCache = array(), $aCategories = array())
    {
        foreach (
$aCache as $sCategory => $aCategory)
        {
            foreach (
$aCategory as $aGift)
            {
                if (
$aGift['egift_id'] == $iEdit)
                {
                    if (!empty(
$aCategories) && is_array($aCategories))
                    {
                        foreach (
$aCategories as $aCat)
                        {
                            if (
$aGift['category_id'] == $aCat['category_id'])
                            {
                                
$aGift['category'] = $aCat;
                            }
                        }
                    }
                    return 
$aGift;
                }
            }
        }
        
$aCache = $this->getEgifts();
        /* Yes, it could be recursive but to allow only one step makes little sense */
        foreach (
$aCache as $sCategory => $aCategory)
        {
            foreach (
$aCategory as $aGift)
            {
                if (
$aGift['category_id'] == $iEdit)
                {
                    return 
$aGift;
                }
            }
        }
        return false;
    }

    /** Gets only one gift
     * @param int 
$iId
     */
    public function getEgift(
$iId)
    {
        
$aCache = $this->getEgifts();
        foreach (
$aCache as $sCategory => $aCategory)
        {
            foreach (
$aCategory as $aGift)
            {
                if (
$aGift['egift_id'] == $iId)
                {
                    return 
$aGift;
                }
            }
        }
        return array();
    }

    /**
     * Gets the invoice for when processing the callback from paypal
     * @param int 
$iId
     */
    public function getEgiftInvoice(
$iId)
    {
        return 
$this->database()->select('*')
                ->from(Phpfox::getT('egift_invoice'))
                ->where('invoice_id = ' . (int) 
$iId)
                ->execute('getSlaveRow');
    }

    /**
     * This function returns the cost of an egift in the currency specified by the user
     * @param int 
$iEgift egift_id
     * @return int|float price
     */
    public function getCost(
$iEgift)
    {
        
$aGift = $this->getForEdit($iEgift$this->getEgifts());
        if (isset(
$aGift['price'][Phpfox::getService('user')->getCurrency()]))
        {
            return 
$aGift['price'][Phpfox::getService('user')->getCurrency()];
        }
        return 0;
    }

    /**
     * This function returns an array with all the ecards that this user has sent, 
     * in cronological order (newer first), with their invoice if available
     * @param int 
$iUser 
     * @return array
     */
    public function getSentEcards(
$iUser)
    {
        
$aAll = $this->database()->select('*, ei.status AS invoice_status')
                        ->from(Phpfox::getT('friend_birthday'), 'fb')
                        ->leftjoin(Phpfox::getT('egift_invoice'), 'ei', 'ei.birthday_id = fb.birthday_id')
                        ->leftjoin(Phpfox::getT('user'), 'u', 'u.user_id = fb.birthday_user_receiver')
                        ->where('fb.birthday_user_sender = ' . (int) 
$iUser)
                        ->execute('getSlaveRows');
        return 
$aAll;
    }

    /**
     * This function is similar to getSentEcards except this one is tailored to the adminCP
     * the information it gets is different, allows more filters and groups information differently.
     * Its purpsoe is to get information about invoices
     */
    public function getInvoices()
    {
        
$aInvoices = $this->database()->select('ei.*, ' . Phpfox::getUserField('userTo', 'to_') . ',' . Phpfox::getUserField('userFrom', 'from_'))
                        ->from(Phpfox::getT('egift_invoice'), 'ei')
                        ->join(Phpfox::getT('user'), 'userTo', 'userTo.user_id = ei.user_to')
                        ->join(Phpfox::getT('user'), 'userFrom', 'userFrom.user_id = ei.user_from')
                        ->order('ei.invoice_id DESC')
                        ->execute('getSlaveRows');

        foreach (
$aInvoices as $sKey => $aInvoice)
        {
            
$aInvoices[$sKey]['from'] = array();
            
$aInvoices[$sKey]['to'] = array();
            foreach (
$aInvoice as $sField => $sValue)
            {
                if (strpos(
$sField, 'from_') !== false)
                {
                    
$aInvoices[$sKey]['from'][str_replace('from_', '', $sField)] = $sValue;
                    unset(
$aInvoices[$sKey][$sField]);
                }
                if (strpos(
$sField, 'to_') !== false)
                {
                    
$aInvoices[$sKey]['to'][str_replace('to_', '', $sField)] = $sValue;
                    unset(
$aInvoices[$sKey][$sField]);
                }
                //
$aInvoices[$sKey]['invoice_status'] = 'purefan';
            }
        }

        return 
$aInvoices;
    }

    /**
     * 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('egift.service_egift__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);
    }

}

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