API CHANGE LeftAndMain.php: Removed $extra_menu_items, $replaced_menu_items, $removed_menu_items (all handled in $menu_items now)

API CHANGE Deprecated menu manipulation through Object::addStaticVars(), changed internal representation of menu_item array to always use associative arrays
ENHANCEMENT Added LeftAndMain::add_menu_item(), LeftAndMain::replace_menu_item(), LeftAndMain::remove_menu_item()
ENHANCEMENT Moved default menu items from LeftAndMain->MainMenu() to cms/_config.php
ENHANCEMENT Added ReportAdmin::has_reports()
ENHANCEMENT Object::addStaticVars() can replace the whole array optionally
ENHANCEMENT Object::stat() optionally returns uncached results
ENHANCEMENT Moved Object::useCustomClass('SSDateTime') from Object.php to sapphire/_config.php
ENHANCEMENT Misc documentation and formatting in LeftAndMain and Object classes

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@52171 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Ingo Schommer 2008-04-05 03:43:58 +00:00
parent a42b76bc73
commit d713777d73
2 changed files with 47 additions and 41 deletions

View File

@ -17,6 +17,13 @@
* @subpackage core
*/
/**
* PHP 5.2 has a namespace conflict with our datetime class,
* for legacy support, we use this overload method.
* // ENFORCE STRONG_CREATE
*/
Object::useCustomClass('Datetime','SSDatetime',true);
/**
* Add pear parser to include path
*/

View File

@ -1,17 +1,13 @@
<?php
/**
* @package sapphire
* @subpackage core
*/
/**
* Base object that all others should inherit from.
* This object provides a number of helper methods that patch over PHP's deficiencies.
*
* @package sapphire
* @subpackage core
*/
class Object {
/**
* This DataObjects extensions, eg Versioned.
* @var array
@ -44,6 +40,23 @@ class Object {
private static $strong_classes = array();
function __construct() {
$this->class = get_class($this);
// Set up the extensions
if($extensions = $this->stat('extensions')) {
foreach($extensions as $extension) {
$instance = eval("return new $extension;");
$instance->setOwner($this);
$this->extension_instances[$instance->class] = $instance;
}
}
if(!isset(Object::$classConstructed[$this->class])) {
$this->defineMethods();
Object::$classConstructed[$this->class] = true;
}
}
/**
* This function allows you to overload class creation methods, so certain classes are
@ -120,25 +133,6 @@ class Object {
}
function __construct() {
$this->class = get_class($this);
// Set up the extensions
if($extensions = $this->stat('extensions')) {
foreach($extensions as $extension) {
$instance = eval("return new $extension;");
$instance->setOwner($this);
$this->extension_instances[$instance->class] = $instance;
}
}
if(!isset(Object::$classConstructed[$this->class])) {
$this->defineMethods();
Object::$classConstructed[$this->class] = true;
}
}
/**
* Returns true if this object "exists", i.e., has a sensible value.
* Overload this in subclasses.
@ -285,14 +279,20 @@ class Object {
}
/**
* This method lets us extend a built-in class by adding static variables to it
* This method lets us extend a built-in class by adding pseudo-static variables to it.
*
* @param string $class Classname
* @param array $statics Statics to add, with keys being static property names on the class
* @param boolean $replace Replace the whole variable instead of merging arrays
*/
static function addStaticVars($class, $statics) {
if (empty(Object::$extraStatics[$class])) {
static function addStaticVars($class, $statics, $replace = false) {
if(empty(Object::$extraStatics[$class])) {
Object::$extraStatics[$class] = (array)$statics;
} elseif($replace) {
Object::$extraStatics[$class] = $statics;
} else {
$ar1 = (array)Object::$extraStatics[$class]; // First Array To Merge
$ar2 = (array)$statics; // Second Array To Merge
$ar1 = (array)Object::$extraStatics[$class];
$ar2 = (array)$statics;
Object::$extraStatics[$class] = array_merge_recursive($ar1, $ar2);
}
}
@ -300,6 +300,7 @@ class Object {
function parentClass() {
return get_parent_class($this);
}
function is_a($class) {
return is_a($this, $class);
}
@ -310,6 +311,7 @@ class Object {
function set_uninherited($name, $val) {
return Object::$uninherited_statics[$this->class][$name] = $val;
}
/**
* Get an uninherited static variable
*/
@ -341,12 +343,16 @@ class Object {
protected static $static_cached = array();
/**
* Get a static variable
* Get a static variable.
*
* @param string $name
* @param boolean $uncached
* @return mixed
*/
function stat($name) {
function stat($name, $uncached = false) {
if(!$this->class) $this->class = get_class($this);
if(!isset(Object::$static_cached[$this->class][$name])) {
if(!isset(Object::$static_cached[$this->class][$name]) || $uncached) {
$classes = ClassInfo::ancestry($this->class);
foreach($classes as $class) {
if(isset(Object::$extraStatics[$class][$name])) {
@ -436,7 +442,6 @@ class Object {
// CACHE METHODS (added by simon_w (simon -at- simon -dot- geek -dot- nz))
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Loads a current cache from the filesystem, if it can.
*
@ -549,10 +554,4 @@ class Object {
return $data;
}
}
/**
* PHP 5.2 has a namespace conflict with our datetime class,
* for legacy support, we use this overload method.
* // ENFORCE STRONG_CREATE
*/
Object::useCustomClass('Datetime','SSDatetime',true);
?>