public function testGlobalMetadata() { $globalMetadata = new GlobalMetadata(); $globalMetadata->className = 'Whatever'; $globalMetadata->serializedMetadata = serialize(array('stuff', 1)); $this->assertTrue($globalMetadata->save()); unset($globalMetadata); $globalMetadata = GlobalMetadata::getByClassName('Whatever'); $this->assertEquals('a:2:{i:0;s:5:"stuff";i:1;i:1;}', $globalMetadata->serializedMetadata); }
/** * Sets metadata for the model. * @see getDefaultMetadata() * @returns An array of metadata. */ public static function setMetadata(array $metadata) { if (YII_DEBUG) { self::assertMetadataIsValid($metadata); } $className = get_called_class(); foreach (array_reverse(RuntimeUtil::getClassHierarchy($className, static::$lastClassInBeanHeirarchy)) as $modelClassName) { if ($modelClassName::getCanHaveBean()) { if ($modelClassName::canSaveMetadata()) { if (isset($metadata[$modelClassName])) { try { $globalMetadata = GlobalMetadata::getByClassName($modelClassName); } catch (NotFoundException $e) { $globalMetadata = new GlobalMetadata(); $globalMetadata->className = $modelClassName; } $globalMetadata->serializedMetadata = serialize($metadata[$modelClassName]); $saved = $globalMetadata->save(); // TODO: decide how to deal with this properly if it fails. // ie: throw or return false, or something other than // this naughty assert. assert('$saved'); } } } } self::forgetBeanModel(get_called_class()); RedBeanModelsCache::forgetAllByModelType(get_called_class()); GeneralCache::forgetEntry(get_called_class() . 'Metadata'); }
public static function setMetadata(array $metadata) { if (YII_DEBUG) { self::assertMetadataIsValid($metadata); } // Save the mixed in Person metadata. if (isset($metadata['Person'])) { $modelClassName = 'Person'; try { $globalMetadata = GlobalMetadata::getByClassName($modelClassName); } catch (NotFoundException $e) { $globalMetadata = new GlobalMetadata(); $globalMetadata->className = $modelClassName; } $globalMetadata->serializedMetadata = serialize($metadata[$modelClassName]); $saved = $globalMetadata->save(); assert('$saved'); } if (isset($metadata['User'])) { parent::setMetadata($metadata); } GeneralCache::forgetEntry(get_called_class() . 'Metadata'); }
/** * Sets new metadata. * @param $metadata An array of metadata. * @param $user The current user. */ public static function setMetadata($className, array $metadata, User $user = null) { assert('is_string($className) && $className != ""'); if ($user instanceof User && isset($metadata['perUser'])) { try { $perUserMetadata = PerUserMetadata::getByClassNameAndUser($className, $user); } catch (NotFoundException $e) { $perUserMetadata = new PerUserMetadata(); $perUserMetadata->className = $className; $perUserMetadata->user = $user; } $perUserMetadata->serializedMetadata = serialize($metadata['perUser']); $saved = $perUserMetadata->save(); assert('$saved'); } if (isset($metadata['global'])) { try { $globalMetadata = GlobalMetadata::getByClassName($className); } catch (NotFoundException $e) { $globalMetadata = new GlobalMetadata(); $globalMetadata->className = $className; } $globalMetadata->serializedMetadata = serialize($metadata['global']); $saved = $globalMetadata->save(); assert('$saved'); } }