To create a MetaModel instance, either call @link{MetaModelFactory::byId()} or @link{MetaModelFactory::byTableName()}
Inheritance: implements metamodels\IFactory
示例#1
0
 /**
  * Test to add an attribute factory to a factory and retrieve it again.
  *
  * @return void
  */
 public function testGetMetaModelNameFromId()
 {
     $serviceContainer = $this->mockServiceContainer();
     $factory = new Factory();
     $factory->setServiceContainer($serviceContainer);
     $serviceContainer->getEventDispatcher()->addListener(GetMetaModelNameFromIdEvent::NAME, function (GetMetaModelNameFromIdEvent $event) {
         $event->setMetaModelName('mm_with_id_' . $event->getMetaModelId());
     });
     $this->assertSame('mm_with_id_10', $factory->translateIdToMetaModelName(10));
     $factory->getMetaModel('mm_test');
 }
 /**
  * @param \DataContainer $dataContainer
  * @return array
  */
 public function getAttributeNames($dataContainer)
 {
     $options = array();
     if ($dataContainer->activeRecord->mm_metamodel) {
         $metaModel = $this->metaModelsFactory->byId($dataContainer->activeRecord->mm_metamodel);
         if ($metaModel) {
             $attributes = $metaModel->getAttributes();
             foreach ($attributes as $name => $attribute) {
                 $options[$attribute->get('id')] = $attribute->getName();
             }
         }
     }
     return $options;
 }
 /**
  * @param CreateProviderEvent $event
  */
 public function createProvider(CreateProviderEvent $event)
 {
     $model = $event->getProviderModel();
     if ($model->type != 'metamodels') {
         return;
     }
     $metaModel = MetaModelsFactory::byId($model->mm_metamodel);
     // metamodel does not exists. break it here
     if (!$metaModel) {
         return;
     }
     $provider = MetaModelsProvider::create($metaModel, $model->id)->setParent($model->mm_parent_type, $model->mm_parent_page);
     $attributeMappings = deserialize($model->mm_attributes, true);
     foreach ($attributeMappings as $config) {
         if ($config['id'] && $config['html']) {
             $provider->addAttributeMapping($config['id'], $config['html'], $config['type'], $config['format']);
         }
     }
     if ($model->mm_filter) {
         $filter = MetaModelsFilterFactory::byId($model->mm_filter);
         $params = $this->createFilterParams($filter);
         if ($filter) {
             $provider->setFilter($filter, $params);
         }
     }
     if ($model->mm_render_setting) {
         $renderSetting = Factory::byId($metaModel, $model->mm_render_setting);
         $provider->setRenderSetting($renderSetting);
     }
     if ($model->mm_sort_by) {
         $provider->setSorting($model->mm_sort_by, $model->mm_sort_direction ?: 'ASC');
     }
     $event->setProvider($provider);
 }
 /**
  * Get all attribute ids of a metamodel.
  *
  * @param \DataContainer $dataContainer The data container driver.
  *
  * @return array
  */
 public function getAttributes($dataContainer)
 {
     $options = array();
     if ($dataContainer->activeRecord) {
         $layer = LayerModel::findByPk($dataContainer->activeRecord->pid);
         if (!$layer) {
             return $options;
         }
         $name = $this->metaModelsFactory->translateIdToMetaModelName($layer->metamodel);
         $metaModel = $this->metaModelsFactory->getMetaModel($name);
         if ($metaModel) {
             foreach ($metaModel->getAttributes() as $attribute) {
                 $options[$attribute->get('id')] = $attribute->getName();
             }
         }
     }
     return $options;
 }
 public function createCondition(CreateConditionEvent $event)
 {
     $model = $event->getConditionModel();
     if ($model->type == 'metamodels_attribute') {
         $condition = new MetaModelsAttributeCondition();
         $condition->setAttribute($model->mm_attribute)->setOperator($model->mm_operator)->setValue($model->mm_value);
     } elseif ($model->type == 'metamodels') {
         $condition = new MetaModelsCondition();
         $metaModel = Factory::byId($model->mm_metamodel);
         if ($metaModel) {
             $condition->setMetaModel($metaModel);
         }
     }
     if (isset($condition)) {
         if ($model->invert) {
             $condition = new NotCondition($condition);
         }
         $event->setCondition($condition);
     }
 }
 /**
  * Instantiate the Input Provider
  *
  * @param int    $mmID The ID of an existing MetaModels
  * @param int    $maskID The ID of an existing InputMask
  * @param string $uploadPath The UUID value of an DBAFS Folder
  * @throws \Exception
  */
 public function __construct($mmID, $maskID, $uploadPath)
 {
     $this->objMM = \MetaModels\Factory::byId($mmID);
     $this->setUploadPath($uploadPath);
     $this->maskID = $maskID;
 }
示例#7
0
文件: Factory.php 项目: zonky2/core
 /**
  * {@inheritdoc}
  *
  * @deprecated Use an instance of the factory and method createAttribute().
  */
 public static function createFromArray($arrData)
 {
     return self::getDefaultFactory()->createAttribute($arrData, \MetaModels\Factory::byId($arrData['pid']));
 }
 * Backend Module.
 */
$GLOBALS['BE_MOD']['leaflet']['leaflet_layer']['tables'][] = 'tl_leaflet_mm_renderer';
/*
 * Register models.
 */
$GLOBALS['TL_MODELS']['tl_leaflet_mm_renderer'] = 'Netzmacht\\Contao\\Leaflet\\MetaModels\\Model\\RendererModel';
/*
 * Add leaflet mapper.
 */
$GLOBALS['LEAFLET_MAPPERS'][] = 'Netzmacht\\Contao\\Leaflet\\MetaModels\\LayerMapper';
/*
 * Add metamodels layer.
 */
$GLOBALS['LEAFLET_LAYERS']['metamodels'] = array('children' => false, 'icon' => 'system/modules/leaflet-metamodels/assets/img/layer.png', 'metamodels' => true, 'boundsMode' => array('extend' => true, 'fit' => true), 'label' => function ($row, $label) {
    $metaModel = \MetaModels\Factory::byId($row['metamodel']);
    if (!$metaModel) {
        return $label;
    }
    return $label . sprintf(' <span><a href="%s" class="tl_gray">(%s)</a></span>', \Backend::addToUrl(sprintf('do=metamodel_%s&amp;table=%s', $metaModel->getTableName(), $metaModel->getTableName())), $metaModel->getName());
});
/*
 * Metamodels layer renderers
 */
$GLOBALS['LEAFLET_MM_RENDERER']['marker'] = 'Netzmacht\\Contao\\Leaflet\\MetaModels\\Renderer\\MarkerRenderer';
$GLOBALS['LEAFLET_MM_RENDERER']['geojson'] = 'Netzmacht\\Contao\\Leaflet\\MetaModels\\Renderer\\GeoJsonRenderer';
$GLOBALS['LEAFLET_MM_RENDERER']['reference'] = 'Netzmacht\\Contao\\Leaflet\\MetaModels\\Renderer\\ReferenceRenderer';
/*
 * MetaModel attribute factory.
 */
$GLOBALS['TL_EVENTS'][\MetaModels\MetaModelsEvents::ATTRIBUTE_FACTORY_CREATE][] = function (\MetaModels\Attribute\Events\CreateAttributeFactoryEvent $event) {
 /**
  * {@inheritdoc}
  */
 public function handleGeoJson(\Model $model, DefinitionMapper $mapper, Filter $filter = null)
 {
     $collection = new FeatureCollection();
     $metaModel = Factory::byId($model->metamodel);
     $items = $this->getItems($metaModel, $model, $filter);
     $renderers = $this->getRenderers($model, $metaModel, $items, $mapper, $filter, true);
     foreach ($items as $item) {
         foreach ($renderers as $renderer) {
             $renderer->loadData($item, $collection, $mapper, $model->alias, $filter, true);
         }
     }
     return $collection;
 }
 /**
  * Test destruction of the auxiliary data.
  *
  * @return void
  */
 public function testDestroyAUX()
 {
     // This marks the test skipped upon error as Contao related testing is not available.
     if (!$this->prepareDb()) {
         return;
     }
     $metamodel = Factory::byTableName('mm_movies');
     /** @var Rating $rating */
     $rating = $metamodel->getAttribute('rating');
     $rating->destroyAUX();
     $query1 = \Database::getInstance()->execute('SELECT * FROM tl_metamodel_rating WHERE mid=1 AND aid=1');
     $this->assertEquals(0, $query1->numRows);
     $this->assertEquals(array(), $query1->fetchAllAssoc());
     // Ensure the data from the other attribute is still present.
     $query2 = \Database::getInstance()->execute('SELECT * FROM tl_metamodel_rating WHERE mid=1 AND aid=2');
     $this->assertEquals(1, $query2->numRows);
     $this->assertEquals(array(array('id' => 2, 'mid' => 1, 'aid' => 2, 'iid' => 1, 'votecount' => 1, 'meanvalue' => 1.0)), $query2->fetchAllAssoc());
 }