File Manager

Current Path : /webspace/www.promiel.be/html/lib/classes/
Upload File :
Current File : //webspace/www.promiel.be/html/lib/classes/class.cms_content_tree.php

<?php // -*- mode:php; tab-width:4; indent-tabs-mode:t; c-basic-offset:4; -*-
#BEGIN_LICENSE
#-------------------------------------------------------------------------
# Module: cms_content_tree (c) 2010 by Robert Campbell 
#         (calguy1000@cmsmadesimple.org)
#  A caching tree for CMSMS content objects.
# 
#-------------------------------------------------------------------------
# CMS - CMS Made Simple is (c) 2005 by Ted Kulp (wishy@cmsmadesimple.org)
# This project's homepage is: http://www.cmsmadesimple.org
#
#-------------------------------------------------------------------------
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# However, as a special exception to the GPL, this software is distributed
# as an addon module to CMS Made Simple.  You may not use this software
# in any Non GPL version of CMS Made simple, or in any version of CMS
# Made simple that does not indicate clearly and obviously in its admin 
# section that the site was built with CMS Made simple.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Or read it online: http://www.gnu.org/licenses/licenses.html#GPL
#
#-------------------------------------------------------------------------
#END_LICENSE

/**
 * @package CMS
 */

/**
 * A tree class that allows backward compatibility (somewhat) to the old Tree class used
 * in CMSMS versions prior to 1.9, and provides content retrieval abilities, with interface
 * into the content cache.
 *
 * @package CMS
 * @author  Robert Campbell
 * @copyright Copyright (c) 2010, Robert Campbell <calguy1000@cmsmadesimple.org>
 * @since 1.9
 */
class cms_content_tree extends cms_tree
{
  /**
   * Find a tree node given a specfied tag and value.
   *
   * @param string The tag name to search for
   * @param mixed  The tag value to search for
   * @param boolean Wether the value should be treated as case insensitive.
   * @return cms_tree or null on failure.
   */
  public function find_by_tag($tag_name,$value,$case_insensitive = FALSE)
  {
	  if( $tag_name == 'id' && $case_insensitive == FALSE && ($this->getParent() == null || $this->get_tag('id') == '') ) {
		  return cmsms()->GetContentOperations()->quickfind_node_by_id($value);
	  }
	  return parent::find_by_tag($tag_name,$value,$case_insensitive);
  }

  /**
   * Retrieve a node by it's id.
   *
   * A backwards compatibility method.
   *
   * @deprecated
   * @return cms_content_tree
   */
  public function sureGetNodeById($id)
  {
    return $this->find_by_tag('id',$id);
  }


  /**
   * Retrieve a node by it's id.
   *
   * A backwards compatibility method.
   *
   * @deprecated
   * @return cms_content_tree
   */
  public function getNodeById($id)
  {
    return $this->find_by_tag('id',$id);
  }


  /**
   * Retrieve a node by it's alias
   *
   * A backwards compatibility method.
   *
   * @deprecated
   * @return cms_content_tree
   */
  public function sureGetNodeByAlias($alias)
  {
	  if( is_numeric($alias) )
	  {
		  return $this->find_by_tag('id',$alias,true);
	  }
	  return $this->find_by_tag('alias',$alias,true);
  }


  /**
   * Retrieve a node by it's alias
   *
   * A backwards compatibility method.
   *
   * @deprecated
   * @return cms_content_tree
   */
  public function getNodeByAlias($alias)
  {
	  return $this->find_by_tag('alias',$alias,true);
  }


  /**
   * Retrieve a node by hierarchy position.
   *
   * @return cms_content_tree or null.
   */
  function getNodeByHierarchy($position)
  {
    $result = null;
	$gCms = cmsms();
    $contentops = $gCms->GetContentOperations();
    $id = $contentops->GetPageIDFromHierarchy($position);
    if ($id)  $result = $this->find_by_tag('id',$id);
    return $result;
  }


  /**
   * Test if this node has children.
   *
   * A backwards compatibility method.
   *
   * @deprecated
   * @see cms_tree:has_children()
   * @return boolean.
   */
  public function hasChildren()
  {
    return $this->has_children();
  }


  /**
   * Set a tag value
   *
   * A backwards compatibility method
   *
   * @deprecated
   * @see cms_tree::set_tag
   * @param string The tag name/key
   * @param mixed  The tag value
   */
  public function setTag($key,$value)
  {
    return $this->set_tag($key,$value);
  }


  /**
   * Get this nodes id.
   *
   * A backwards compatibility method
   *
   * @deprecated
   * @see cms_tree::get_tag('id')
   * @return integer The node id.
   */
  public function getId()
  {
    return $this->get_tag('id');
  }


  /**
   * Get a node tag.
   *
   * A backwards compatibility method
   *
   * @deprecated
   * @see cms_tree::get_tag('id')
   * @param  string Tag name/key
   * @return mixed Node value.
   */
  public function &getTag($key = 'id')
  {
    return $this->get_tag($key);
  }



  /**
   * Get this nodes parent.
   *
   * A backwards compatibility method
   *
   * @deprecated
   * @see cms_tree::get_parent()
   * @return cms_tree or null.
   */
  public function &getParentNode()
  {
    return $this->getParent();
  }


  /**
   * Add a node to the tree
   *
   * A backwards compatibility method.
   *
   * @deprecated
   * @see cms_tree::add_node()
   * @param cms_content_tree The node to add
   */
  public function addNode(cms_content_tree &$node)
  {
    return $this->add_node($node);
  }


  /**
   * Retrieve the content object associated with this node.
   *
   * This method will return the content object associated with this node, loading it
   * if necessary, and placing it in the cache for subsequent requests.
   *
   * @param bool Optionally load all child proeprties for the content object if loading is required.
   * @param bool Optionally load all the siblings for the selected content object at the same time (a preformance optimization)
   * @param bool If loading siblings, include inactive/disabled pages.
   */
  public function &getContent($deep = false,$loadsiblings = true,$loadall = false) // loadall used to be true: calguy1000, June 25 2011
  {
	  if( !cms_content_cache::content_exists($this->get_tag('id')) ) {
		  // not in cache
		  $parent = $this->getParent();
		  if( !$loadsiblings || !$parent ) {
			  // only load this content object
			  $gCms = cmsms();
			  $contentops = $gCms->GetContentOperations();
			  // todo: LoadContentFromId should use content cache.
			  $content = $contentops->LoadContentFromId($this->get_tag('id'), $deep);
			  return $content;
		  }
		  else {
			  $parent->getChildren($deep,$loadall);
			  if( cms_content_cache::content_exists($this->get_tag('id')) ) {
				  return cms_content_cache::get_content($this->get_tag('id'));
			  }
		  }
      }
	  return cms_content_cache::get_content($this->get_tag('id'));
  }

 
  /**
   * Count the number of children
   *
   * A backwards compatibility function
   *
   * @deprecated
   * @see cms_tree::count_children()
   * @return integer
   */
  public function getChildrenCount()
  {
    return $this->count_children();
  }


  /**
   * Count the number of siblings
   *
   * A backwards compatibility function
   *
   * @deprecated
   * @see cms_tree::count_siblings()
   * @return integer
   */
  public function getSiblingCount()
  {
    return $this->count_siblings();
  }


  /**
   * Get this nodes depth in the tree
   *
   * A backwards compatibility function
   *
   * @deprecated
   * @see cms_tree::get_level()
   * @return integer
   */
  public function getLevel()
  {
    return $this->get_level();
  }


  /**
   * Get the children for this node.
   *
   * This method will retrieve a list of the children of this node, loading
   * their content objects at the same time (as a preformance improvement).
   *
   * This method takes advantage of the content cache.
   *
   * @param boolean Optionally load the properties of the children (only used when loadcontent is true)
   * @param boolean Load all children, including inactive/disabled ones (only used when loadcontent is true)
   * @param boolean Load content objects for children
   * @return Array of cms_tree objects.
   */
  public function &getChildren($deep = false,$all = false,$loadcontent = true)
  {
    $children = $this->get_children();
    if( is_array($children) && count($children) && $loadcontent ) {
		// check to see if we need to load anything.
		$ids = array();
		for( $i = 0; $i < count($children); $i++ ) {
			if( !$children[$i]->isContentCached() ) $ids[] = $children[$i]->get_tag('id');
		}
		  
		if( count($ids) ) {
			// load the children that aren't loaded yet.
			$gCms = cmsms();
			$contentops = $gCms->GetContentOperations();
			$contentops->LoadChildren($this->get_tag('id'),$deep,$all,$ids);
		}
	}

    return $children;
  }


  /**
   * A function to build an array of cms_tree nodes, containing this node and all of the
   * children.
   *
   * This method changed in CMSMS 1.11.8 to return a hash instead of a flat array.  The keys of the hash
   * are the content ids.
   *
   * @return Array of cms_tree nodes.
   */
  public function &getFlatList()
  {
    $result = array();

    if( $this->has_children() ) {
		$children = $this->get_children();
		for( $i = 0; $i < count($children); $i++ ) {
			$result[$children[$i]->get_tag('id')] =& $children[$i];
			if( $children[$i]->has_children() ) {
				$tmp = $children[$i]->getFlatList();
				foreach( $tmp as $key => &$node ) {
					$result[$key] = $node;
				}
			}
		}
    }

    return $result;
  }


  /**
   * A method to indicate wether the content object for this node is cached.
   *
   * @return boolean
   */
  public function isContentCached()
  {
	  if( cms_content_cache::content_exists($this->get_tag('id')) ) return TRUE;
	  return FALSE;
  }
} // end of class.

?>

File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com