Server IP : 66.29.132.124 / Your IP : 18.119.134.196 Web Server : LiteSpeed System : Linux business141.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : wavevlvu ( 1524) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/wavevlvu/book24.ng/vendor/fzaninotto/faker/src/Faker/ORM/Propel2/ |
Upload File : |
<?php namespace Faker\ORM\Propel2; use \Faker\Provider\Base; use \Propel\Runtime\Map\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 \Faker\Generator $generator * @return array */ public function guessColumnFormatters(\Faker\Generator $generator) { $formatters = array(); $class = $this->class; $peerClass = $class::TABLE_MAP; $tableMap = $peerClass::getTableMap(); $nameGuesser = new \Faker\Guesser\Name($generator); $columnTypeGuesser = new \Faker\ORM\Propel2\ColumnTypeGuesser($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) { $relatedClass = trim($relatedClass, "\\"); return isset($inserted[$relatedClass]) ? $inserted[$relatedClass][mt_rand(0, count($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 \Faker\Generator $generator * @return array */ public function guessModifiers(\Faker\Generator $generator) { $modifiers = array(); $class = $this->class; $peerClass = $class::TABLE_MAP; $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($column, is_callable($format) ? $format($insertedEntities, $obj) : $format); } } foreach ($this->getModifiers() as $modifier) { $modifier($obj, $insertedEntities); } $obj->save($con); return $obj->getPrimaryKey(); } }