git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_IntranetNueva/trunk@8 77cfc57b-8ef4-1849-9df6-4a38aa5da120
96 lines
2.6 KiB
PHP
96 lines
2.6 KiB
PHP
<?php
|
|
/**
|
|
* Fextures generator
|
|
* @author denis <thebucefal@gmail.com>
|
|
* @link https://bitbucket.org/BuCeFaL/ext4yii/src
|
|
*/
|
|
class FixtureCode extends CCodeModel
|
|
{
|
|
public $modelPath = 'application.models';
|
|
public $fixturePath = 'application.tests.fixtures';
|
|
|
|
public $rowsLimit = null;
|
|
|
|
protected $_models = array();
|
|
|
|
public function rules()
|
|
{
|
|
return array_merge(parent::rules(), array(
|
|
array('modelPath, fixturePath', 'filter', 'filter'=>'trim'),
|
|
array('modelPath, fixturePath', 'required'),
|
|
array('rowsLimit', 'numerical','allowEmpty' => true),
|
|
));
|
|
}
|
|
|
|
public function attributeLabels()
|
|
{
|
|
return array_merge(parent::attributeLabels(), array(
|
|
'modelPath'=>'Models Path',
|
|
'fixturePath'=>'Fixtures Path',
|
|
));
|
|
}
|
|
/**
|
|
* @see CCodeModel::requiredTemplates()
|
|
*/
|
|
public function requiredTemplates()
|
|
{
|
|
return array(
|
|
'fixture.php'
|
|
);
|
|
}
|
|
/**
|
|
* @see CCodeModel::prepare()
|
|
*/
|
|
public function prepare()
|
|
{
|
|
Yii::import($this->modelPath);
|
|
$path = Yii::getPathOfAlias($this->modelPath);
|
|
$this->scandir($path);
|
|
$templatePath = Yii::getPathOfAlias('application.gii.fixture.templates.default');
|
|
$tableNames = array();
|
|
foreach ($this->_models as $modelName)
|
|
{
|
|
$class = pathinfo($modelName,PATHINFO_FILENAME);
|
|
$obj = new $class;
|
|
if ($obj instanceof CActiveRecord)
|
|
{
|
|
//fix issues #6 reported by "oceatoon"
|
|
$prefix = $obj->getDbConnection()->tablePrefix;
|
|
$tableName = str_replace(array('{{','}}'), array($prefix,''),$obj->tableName());
|
|
$writeTo = Yii::getPathOfAlias($this->fixturePath).DIRECTORY_SEPARATOR.$tableName.'.php';
|
|
if (!in_array($tableName, $tableNames) && !file_exists($writeTo))
|
|
{
|
|
$tableNames[] = $tableName;
|
|
if (!empty($this->rowsLimit))
|
|
{
|
|
$criteria = new CDbCriteria();
|
|
$criteria->limit = intval($this->rowsLimit);
|
|
|
|
$models = $class::model()->findAll($criteria);
|
|
} else
|
|
$models = $class::model()->findAll();
|
|
|
|
$this->files[] = new CCodeFile(
|
|
$writeTo,
|
|
$this->render($templatePath . DIRECTORY_SEPARATOR . 'fixture.php', array('models' => $models))
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Scan directory and sub directory
|
|
* @param string $path
|
|
*/
|
|
protected function scanDir($path){
|
|
foreach (scandir($path) as $file)
|
|
if ('.' !== $file && '..' !== $file)
|
|
if (is_file($filename = $path . DIRECTORY_SEPARATOR . $file) && 'php' === pathinfo($file,PATHINFO_EXTENSION))
|
|
$this->_models[] = $file;
|
|
else if (is_dir($filename))
|
|
{
|
|
Yii::import($this->modelPath . '.' . $file . '.*');
|
|
$this->scanDir($filename);
|
|
}
|
|
}
|
|
} |