/**
  * Loads the full ElggObject when given a guid.
  *
  * @param int $guid Guid of an ElggObject
  *
  * @return bool
  * @throws InvalidClassException
  */
 protected function load($guid)
 {
     // Test to see if we have the generic stuff
     if (!parent::load($guid)) {
         return false;
     }
     // Check the type
     if ($this->attributes['type'] != 'object') {
         $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($guid, get_class()));
         throw new InvalidClassException($msg);
     }
     // Load missing data
     $row = get_object_entity_as_row($guid);
     if ($row && !$this->isFullyLoaded()) {
         // If $row isn't a cached copy then increment the counter
         $this->attributes['tables_loaded']++;
     }
     // Now put these into the attributes array as core values
     $objarray = (array) $row;
     foreach ($objarray as $key => $value) {
         $this->attributes[$key] = $value;
     }
     // guid needs to be an int  http://trac.elgg.org/ticket/4111
     $this->attributes['guid'] = (int) $this->attributes['guid'];
     return true;
 }
Exemplo n.º 2
0
 /**
  * Overridden from ElggEntity and ElggObject::load(). Core always inits plugins with
  * a query joined to the objects_entity table, so all the info is there.
  *
  * @param mixed $guid GUID of an ElggObject or the stdClass object from entities table
  *
  * @return bool
  * @throws InvalidClassException
  */
 protected function load($guid)
 {
     $expected_attributes = $this->attributes;
     unset($expected_attributes['tables_split']);
     unset($expected_attributes['tables_loaded']);
     // this was loaded with a full join
     $needs_loaded = false;
     if ($guid instanceof stdClass) {
         $row = (array) $guid;
         $missing_attributes = array_diff_key($expected_attributes, $row);
         if ($missing_attributes) {
             $needs_loaded = true;
             $old_guid = $guid;
             $guid = $row['guid'];
         } else {
             $this->attributes = $row;
         }
     } else {
         $needs_loaded = true;
     }
     if ($needs_loaded) {
         $entity = (array) get_entity_as_row($guid);
         $object = (array) get_object_entity_as_row($guid);
         if (!$entity || !$object) {
             return false;
         }
         $this->attributes = array_merge($this->attributes, $entity, $object);
     }
     $this->attributes['tables_loaded'] = 2;
     // Check the type
     if ($this->attributes['type'] != 'object') {
         $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($guid, get_class()));
         throw new InvalidClassException($msg);
     }
     // guid needs to be an int  http://trac.elgg.org/ticket/4111
     $this->attributes['guid'] = (int) $this->attributes['guid'];
     // cache the entity
     if ($this->attributes['guid']) {
         cache_entity($this);
     }
     return true;
 }