+ add loadExtension() method.
This commit is contained in:
@@ -172,49 +172,21 @@ class helper
|
||||
{
|
||||
$modelClass = $moduleName . 'Model';
|
||||
$extModelClass = 'ext' . $modelClass;
|
||||
$modelLines = "<?php \ninclude '$mainModelFile';\n";
|
||||
$modelLines = trim(file_get_contents($mainModelFile));
|
||||
$modelLines = rtrim($modelLines, '?>'); // To make sure the last end tag is removed.
|
||||
$modelLines .= "class $extModelClass extends $modelClass {\n";
|
||||
|
||||
/* Cycle all the extension files. */
|
||||
$encryptFiles = array();
|
||||
foreach($extFiles as $extFile)
|
||||
{
|
||||
$className = $moduleName . str_replace('.php', '', basename($extFile));
|
||||
$extLines = trim(file_get_contents($extFile));
|
||||
if(preg_match('/function +/i', $extLines) == 1)
|
||||
{
|
||||
$extLines = trim($extLines);
|
||||
if(strpos($extLines, '<?php') === 0) $extLines = ltrim($extLines, '<?php');
|
||||
if(strpos($extLines, '?>') !== false)$extLines = rtrim($extLines, '?\>');
|
||||
$modelLines .= $extLines . "\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$encryptFiles[$className] = $extFile;
|
||||
}
|
||||
if(strpos($extLines, '<?php') !== false) $extLines = ltrim($extLines, '<?php');
|
||||
if(strpos($extLines, '?>') !== false) $extLines = rtrim($extLines, '?>');
|
||||
$modelLines .= $extLines . "\n";
|
||||
}
|
||||
$extClasses = '';
|
||||
$modelLines .= "\tpublic function __call(\$method, \$params)\n\t{\n";
|
||||
foreach($encryptFiles as $extClass => $encryptFile)
|
||||
{
|
||||
$modelLines .= "\t\tinclude '$encryptFile';\n";
|
||||
$extClasses .= "'$extClass',";
|
||||
}
|
||||
$extClasses = rtrim($extClasses, ',');
|
||||
$modelLines .=<<<EOD
|
||||
\$extClasses = array($extClasses);
|
||||
foreach(\$extClasses as \$extClass)
|
||||
{
|
||||
if(method_exists(\$extClass, \$method))
|
||||
{
|
||||
\$class = new \$extClass();
|
||||
return call_user_func_array(array(&\$class, \$method), \$params);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EOD;
|
||||
|
||||
/* Create the merged model file. */
|
||||
$modelLines .= "}";
|
||||
file_put_contents($mergedModelFile, $modelLines);
|
||||
|
||||
return $mergedModelFile;
|
||||
|
||||
@@ -185,6 +185,38 @@ class model
|
||||
return $this->$moduleName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load extension class of a model. Saved to $moduleName/ext/model/class/$extensionName.class.php.
|
||||
*
|
||||
* @param string $extensionName
|
||||
* @param string $moduleName
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function loadExtension($extensionName, $moduleName = '')
|
||||
{
|
||||
if(empty($extensionName)) return false;
|
||||
|
||||
/* Set extenson name and extension file. */
|
||||
$extensionName = strtolower($extensionName);
|
||||
$moduleName = $moduleName ? $moduleName : $this->getModuleName();
|
||||
$extensionFile = $this->app->getModuleExtPath($moduleName, 'model') . 'class/' . $extensionName . '.class.php';
|
||||
|
||||
/* Try to import parent model file auto and then import the extension file. */
|
||||
if(!class_exists($moduleName . 'Model')) helper::import($this->app->getModulePath($moduleName) . 'model.php');
|
||||
if(!helper::import($extensionFile)) return false;
|
||||
|
||||
/* Set the extension class name. */
|
||||
$extensionClass = $extensionName . ucfirst($moduleName);
|
||||
if(!class_exists($extensionClass)) return false;
|
||||
|
||||
/* Create an instance of the extension class and return it. */
|
||||
$extensionObject = new $extensionClass;
|
||||
$extensionClass = str_replace('Model', '', $extensionClass);
|
||||
$this->$extensionClass = $extensionObject;
|
||||
return $extensionObject;
|
||||
}
|
||||
|
||||
//-------------------- DAO related method s--------------------//
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user