Example #1
0
 /**
  * Adds methods from the extensions.
  * Called by Object::__construct() once per class.
  */
 function defineMethods()
 {
     if ($this->class == 'DataObject') {
         return;
     }
     parent::defineMethods();
     // Define the extra db fields - this is only necessary for extensions added in the
     // class definition.  Object::add_extension() will call this at definition time for
     // those objects, which is a better mechanism.  Perhaps extensions defined inside the
     // class def can somehow be applied at definiton time also?
     if ($this->extension_instances) {
         foreach ($this->extension_instances as $i => $instance) {
             if (!$instance->class) {
                 $class = get_class($instance);
                 user_error("DataObject::defineMethods(): Please ensure {$class}::__construct() calls parent::__construct()", E_USER_ERROR);
             }
             DataObjectDecorator::load_extra_statics($this->class, $instance->class);
         }
     }
     // Set up accessors for joined items
     if ($manyMany = $this->many_many()) {
         foreach ($manyMany as $relationship => $class) {
             $this->addWrapperMethod($relationship, 'getManyManyComponents');
         }
     }
     if ($hasMany = $this->has_many()) {
         foreach ($hasMany as $relationship => $class) {
             $this->addWrapperMethod($relationship, 'getComponents');
         }
     }
     if ($hasOne = $this->has_one()) {
         foreach ($hasOne as $relationship => $class) {
             $this->addWrapperMethod($relationship, 'getComponent');
         }
     }
 }
 /**
  * Prepare static variables before processing a {@link get_static} or {@link set_static}
  * call.
  */
 private static function prepare_statics($class)
 {
     // _cache_statics_prepared setting must come first to prevent infinite loops when we call
     // get_static below
     self::$_cache_statics_prepared[$class] = true;
     // load statics now for DataObject classes
     if (is_subclass_of($class, 'DataObject')) {
         $extensions = Object::uninherited_static($class, 'extensions');
         if ($extensions) {
             foreach ($extensions as $extension) {
                 DataObjectDecorator::load_extra_statics($class, $extension);
             }
         }
     }
 }
 /**
  * Prepare static variables before processing a {@link get_static} or {@link set_static}
  * call.
  */
 private static function prepare_statics($class)
 {
     // _cache_statics_prepared setting must come first to prevent infinite loops when we call
     // get_static below
     self::$_cache_statics_prepared[$class] = true;
     // load statics now for DataObject classes
     if (is_subclass_of($class, 'DataObject')) {
         $extensions = Object::uninherited_static($class, 'extensions');
         if ($extensions) {
             foreach ($extensions as $extension) {
                 $extensionClass = $extension;
                 if (preg_match('/^([^(]*)/', $extension, $matches)) {
                     $extensionClass = $matches[1];
                 }
                 if (is_subclass_of($extensionClass, 'DataObjectDecorator')) {
                     DataObjectDecorator::load_extra_statics($class, $extension);
                 } else {
                     user_error("{$extensionClass} cannot be applied to {$class} without being a DataObjectDecorator", E_USER_ERROR);
                 }
             }
         }
     }
 }