Вход Регистрация
Файл: gapps/vendor/fzaninotto/faker/src/Faker/ORM/Propel/EntityPopulator.php
Строк: 188
<?php

namespace FakerORMPropel;

use 
FakerProviderBase;
use 
ColumnMap;

/**
 * Service class for populating a table through a Propel ActiveRecord class.
 */
class EntityPopulator
{
    protected 
$class;
    protected 
$columnFormatters = array();
    protected 
$modifiers = array();

    
/**
     * Class constructor.
     *
     * @param string $class A Propel ActiveRecord classname
     */
    
public function __construct($class)
    {
        
$this->class $class;
    }

    
/**
     * @return string
     */
    
public function getClass()
    {
        return 
$this->class;
    }

    public function 
setColumnFormatters($columnFormatters)
    {
        
$this->columnFormatters $columnFormatters;
    }

    
/**
     * @return array
     */
    
public function getColumnFormatters()
    {
        return 
$this->columnFormatters;
    }

    public function 
mergeColumnFormattersWith($columnFormatters)
    {
        
$this->columnFormatters array_merge($this->columnFormatters$columnFormatters);
    }

    
/**
     * @param FakerGenerator $generator
     * @return array
     */
    
public function guessColumnFormatters(FakerGenerator $generator)
    {
        
$formatters = array();
        
$class $this->class;
        
$peerClass $class::PEER;
        
$tableMap $peerClass::getTableMap();
        
$nameGuesser = new FakerGuesserName($generator);
        
$columnTypeGuesser = new FakerORMPropelColumnTypeGuesser($generator);
        foreach (
$tableMap->getColumns() as $columnMap) {
            
// skip behavior columns, handled by modifiers
            
if ($this->isColumnBehavior($columnMap)) {
                continue;
            }
            if (
$columnMap->isForeignKey()) {
                
$relatedClass $columnMap->getRelation()->getForeignTable()->getClassname();
                
$formatters[$columnMap->getPhpName()] = function ($inserted) use ($relatedClass) {
                    return isset(
$inserted[$relatedClass]) ? $inserted[$relatedClass][mt_rand(0count($inserted[$relatedClass]) - 1)] : null;
                };
                continue;
            }
            if (
$columnMap->isPrimaryKey()) {
                continue;
            }
            if (
$formatter $nameGuesser->guessFormat($columnMap->getPhpName(), $columnMap->getSize())) {
                
$formatters[$columnMap->getPhpName()] = $formatter;
                continue;
            }
            if (
$formatter $columnTypeGuesser->guessFormat($columnMap)) {
                
$formatters[$columnMap->getPhpName()] = $formatter;
                continue;
            }
        }

        return 
$formatters;
    }

    
/**
     * @param ColumnMap $columnMap
     * @return bool
     */
    
protected function isColumnBehavior(ColumnMap $columnMap)
    {
        foreach (
$columnMap->getTable()->getBehaviors() as $name => $params) {
            
$columnName Base::toLower($columnMap->getName());
            switch (
$name) {
                case 
'nested_set':
                    
$columnNames = array($params['left_column'], $params['right_column'], $params['level_column']);
                    if (
in_array($columnName$columnNames)) {
                        return 
true;
                    }
                    break;
                case 
'timestampable':
                    
$columnNames = array($params['create_column'], $params['update_column']);
                    if (
in_array($columnName$columnNames)) {
                        return 
true;
                    }
                    break;
            }
        }

        return 
false;
    }

    public function 
setModifiers($modifiers)
    {
        
$this->modifiers $modifiers;
    }

    
/**
     * @return array
     */
    
public function getModifiers()
    {
        return 
$this->modifiers;
    }

    public function 
mergeModifiersWith($modifiers)
    {
        
$this->modifiers array_merge($this->modifiers$modifiers);
    }

    
/**
     * @param FakerGenerator $generator
     * @return array
     */
    
public function guessModifiers(FakerGenerator $generator)
    {
        
$modifiers = array();
        
$class $this->class;
        
$peerClass $class::PEER;
        
$tableMap $peerClass::getTableMap();
        foreach (
$tableMap->getBehaviors() as $name => $params) {
            switch (
$name) {
                case 
'nested_set':
                    
$modifiers['nested_set'] = function ($obj$inserted) use ($class$generator) {
                        if (isset(
$inserted[$class])) {
                            
$queryClass $class 'Query';
                            
$parent $queryClass::create()->findPk($generator->randomElement($inserted[$class]));
                            
$obj->insertAsLastChildOf($parent);
                        } else {
                            
$obj->makeRoot();
                        }
                    };
                    break;
                case 
'sortable':
                    
$modifiers['sortable'] = function ($obj$inserted) use ($class) {
                        
$maxRank = isset($inserted[$class]) ? count($inserted[$class]) : 0;
                        
$obj->insertAtRank(mt_rand(1$maxRank 1));
                    };
                    break;
            }
        }

        return 
$modifiers;
    }

    
/**
     * Insert one new record using the Entity class.
     */
    
public function execute($con$insertedEntities)
    {
        
$obj = new $this->class();
        foreach (
$this->getColumnFormatters() as $column => $format) {
            if (
null !== $format) {
                
$obj->setByName($columnis_callable($format) ? $format($insertedEntities$obj) : $format);
            }
        }
        foreach (
$this->getModifiers() as $modifier) {
            
$modifier($obj$insertedEntities);
        }
        
$obj->save($con);

        return 
$obj->getPrimaryKey();
    }
}
Онлайн: 2
Реклама