Seditio Source
Root |
./othercms/b2evolution_7.2.3/inc/items/model/_itemtypecache.class.php
<?php
/**
 * This file implements the post type cache class.
 *
 * This file is part of the evoCore framework - {@link http://evocore.net/}
 * See also {@link https://github.com/b2evolution/b2evolution}.
 *
 * @license GNU GPL v2 - {@link http://b2evolution.net/about/gnu-gpl-license}
 *
 * @copyright (c)2003-2020 by Francois Planque - {@link http://fplanque.com/}
 * Parts of this file are copyright (c)2005-2006 by PROGIDISTRI - {@link http://progidistri.com/}.
 *
 * @package evocore
 */
if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' );

load_class( '_core/model/dataobjects/_dataobjectcache.class.php', 'DataObjectCache' );

/**
 * ItemTypeCache Class
 *
 * @package evocore
 */
class ItemTypeCache extends DataObjectCache
{
   
/**
     * Post type cache for each collection
     */
   
var $col_cache = array();

   
/**
     * Default post type for each collection
     */
   
var $col_default = array();

   
/**
     * Object array by template name
     */
   
var $cache_template = array();

   
/**
     * Constructor
     *
     * @param table Database row
     */
   
function __construct()
    {
       
// Call parent constructor:
       
parent::__construct( 'ItemType', true, 'T_items__type', 'ityp_', 'ityp_ID', 'ityp_name', 'ityp_ID' );
    }


   
/**
     * Returns a form option list which only contains post types that can
     * be used by the current user (and in the current blog's context).
     *
     * The user cannot use any post type IDs listed in the {@see $posttypes_reserved_IDs}
     * array; to use the "Page", "Intro-*", "Podcast" and "Sidebar link"
     * post types, the current blog must grant the blog_page, blog_intro,
     * blog_podcast and blog_sidebar permission, respectively (see blog
     * user/group permissions).
     *
     * @deprecated
     *
     * @param integer The selected ID.
     * @param boolean Provide a choice for "none" with ID ''
     * @param string  Callback method name.
     * @return string
     */
   
function get_option_list_usable_only( $default = 0, $allow_none = false, $method = 'get_name' )
    {
        return
$this->get_option_list( $default, $allow_none, $method );
    }


   
/**
     * For use by Universal Item List widget
     *
     * @param array IDs to ignore.
     * @return array
     */
   
function get_option_array( $ignore_IDs = array() )
    {
        return
$this->get_option_array_worker( 'get_name', $ignore_IDs );
    }


   
/**
     * For use by Universal Item List widget and item type edit form
     *
     * @return array
     */
   
function get_usage_option_array()
    {
        return array(
               
T_('In content flow') => array(
                       
'post' => /* TRANS: noun */ T_('Post')
                    ),
               
T_('Out of content flow') => array(
                       
'page'          => T_('Content Page'),
                       
'widget-page'   => T_('Widget Page'),
                       
'special'       => T_('Special'),
                       
'content-block' => T_('Content Block'),
                    ),
               
T_('Intros') => array(
                       
'intro-front' => T_('Intro-Front'),
                       
'intro-main'  => T_('Intro-Main'),
                       
'intro-cat'   => T_('Intro-Cat'),
                       
'intro-tag'   => T_('Intro-Tag'),
                       
'intro-sub'   => T_('Intro-Sub'),
                       
'intro-all'   => T_('Intro-All'),
                    ),
            );
    }


   
/**
     * Get an Item Type from cache by template name
     *
     * Load the cache if necessary (all at once if allowed).
     *
     * @param string Template name
     * @param boolean true if function should die on error
     * @param boolean true if function should die on empty/null
     * @return object|NULL|boolean Reference on cached object, NULL - if request with empty template name, FALSE - if requested object does not exist
     */
   
function & get_by_template( $template_name, $halt_on_error = true, $halt_on_empty = true )
    {
        global
$DB, $Debuglog;

        if( empty(
$template_name ) )
        {    
// Don't allow request with empty template name:
           
if( $template_name )
            {
               
debug_die( 'Requested '.$this->objtype.' from '.$this->dbtablename.' without template name!' );
            }
           
$r = NULL;
            return
$r;
        }

        if( isset(
$this->cache_template[ $template_name ] ) )
        {    
// Get object from cache by template name:
           
$Debuglog->add( 'Accessing <strong>'.$this->objtype.'('.$template_name.')</strong> from cache by template name', 'dataobjects' );
            return
$this->cache_template[ $template_name ];
        }

       
// Load just the requested object:
       
$Debuglog->add( 'Loading <strong>'.$this->objtype.'('.$template_name.')</strong>', 'dataobjects' );
       
$SQL = $this->get_SQL_object();
       
$SQL->WHERE_and( $this->dbprefix.'template_name = '.$DB->quote( $template_name ) );

        if(
$db_row = $DB->get_row( $SQL->get(), OBJECT, 0, __CLASS__.'::'.__FUNCTION__.'()' ) )
        {
           
$resolved_ID = $db_row->{$this->dbIDname};
           
$Debuglog->add( 'success; ID = '.$resolved_ID, 'dataobjects' );
            if( ! isset(
$this->cache[$resolved_ID] ) )
            {    
// Object is not already in cache:
               
$Debuglog->add( 'Adding to cache...', 'dataobjects' );
               
//$Obj = new $this->objtype( $row ); // COPY !!
               
if( ! $this->add( $this->new_obj( $db_row ) ) )
                {    
// could not add
                   
$Debuglog->add( 'Could not add() object to cache!', 'dataobjects' );
                }
            }
            if( ! isset(
$this->cache_template[ $template_name ] ) )
            {    
// Add object in cache by template name:
               
$this->cache_template[ $template_name ] = $this->new_obj( $db_row );
            }
        }

        if( empty(
$this->cache_template[ $template_name ] ) )
        {    
// Object does not exist by requested template name:
           
$Debuglog->add( 'Could not get ItemType by template name.', 'dataobjects' );
            if(
$halt_on_error )
            {
               
debug_die( 'Requested '.$this->objtype.' does not exist!' );
            }
           
$this->cache_template[ $template_name ] = false;
        }

        return
$this->cache_template[ $template_name ];
    }
}

?>