mirror of
https://github.com/YunoHost-Apps/limesurvey_ynh.git
synced 2024-09-03 19:36:32 +02:00
78 lines
No EOL
2.1 KiB
PHP
78 lines
No EOL
2.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Dynamic model used by plugins to access their table(s).
|
|
*/
|
|
class PluginDynamic extends LSActiveRecord
|
|
{
|
|
private static $_models = array();
|
|
|
|
private $_md; // meta data
|
|
|
|
protected $tableName;
|
|
|
|
/**
|
|
* @param string $scenario
|
|
* @param string $sTableName
|
|
*/
|
|
public function __construct($sTableName = null, $scenario = 'insert')
|
|
{
|
|
if (!isset($sTableName))
|
|
{
|
|
//Yii::trace('sTableName missing.');
|
|
throw new Exception('sTableName missing.');
|
|
}
|
|
$this->tableName = $sTableName;
|
|
parent::__construct($scenario);
|
|
}
|
|
|
|
|
|
protected function instantiate($attributes = null)
|
|
{
|
|
$class=get_class($this);
|
|
$model=new $class($this->tableName(), null);
|
|
return $model;
|
|
}
|
|
/**
|
|
* We have a custom implementation here since the parents' implementation
|
|
* does not create a new model for each table name.
|
|
* @param type $className
|
|
* @return Plugin
|
|
*/
|
|
public static function model($sTableName = null)
|
|
{
|
|
if (isset($sTableName))
|
|
{
|
|
if (!isset(self::$_models[$sTableName]))
|
|
{
|
|
$model = self::$_models[$sTableName] = new PluginDynamic($sTableName, null);
|
|
$model->_md = new CActiveRecordMetaData($model);
|
|
$model->attachBehaviors($model->behaviors());
|
|
}
|
|
return self::$_models[$sTableName];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the tablename for the current model.
|
|
*/
|
|
public function tableName() {
|
|
return $this->tableName;
|
|
}
|
|
|
|
/**
|
|
* Override
|
|
* @return CActiveRecordMetaData the meta for this AR class.
|
|
*/
|
|
public function getMetaData()
|
|
{
|
|
if($this->_md!==null)
|
|
return $this->_md;
|
|
else
|
|
return $this->_md=self::model($this->tableName())->_md;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|