class IPF_Admin_App extends IPF_Application
{
- public function __construct()
- {
- parent::__construct(array(
- 'models'=>array('AdminLog')
- ));
- }
-
public static function urls()
{
return array(
return new IPF_HTTP_Response($html);
}
+ public static function loadAllModels()
+ {
+ foreach (IPF_Project::getInstance()->appList() as $appname => $app)
+ foreach (IPF_Legacy_ORM_App::appModelList($app) as $modelName)
+ new $modelName;
+ }
+
static function checkAdminAuth($request)
{
$ok = true;
if (!$ok)
return new IPF_HTTP_Response_Redirect(IPF_HTTP_URL::urlForView('IPF_Admin_Views_Login'));
- IPF_Project::getInstance()->loadAllModels();
+ self::loadAllModels();
return true;
}
static function appByModel($model)
{
foreach (IPF_Project::getInstance()->appList() as $app)
- foreach ($app->modelList() as $m)
+ foreach (IPF_Legacy_ORM_App::appModelList($app) as $m)
if ($model == $m)
return $app;
return null;
{
foreach (IPF_Project::getInstance()->appList() as $app) {
if ($app->getSlug() == $lapp) {
- foreach ($app->modelList() as $m) {
+ foreach (IPF_Legacy_ORM_App::appModelList($app) as $m) {
if (strtolower($m) == $lmodel)
return array('app' => $app, 'modelname' => $m);
}
print "COLLECTED PERMS:\n----\n";
$permissions = array();
foreach (IPF_Project::getInstance()->appList() as $appname => $app) {
- foreach ($app->modelList() as $modelName) {
+ foreach (IPF_Legacy_ORM_App::appModelList($app) as $modelName) {
$adminModel = IPF_Admin_Model::getModelAdmin($modelName);
if ($adminModel) {
foreach ($adminModel->getPerms(null) as $permName) {
$apps = array();
$app_list = new IPF_Template_ContextVars();
- foreach (IPF_Project::getInstance()->appList() as $app){
- if (count($app->modelList())>0){
- $models = new IPF_Template_ContextVars();
- $models_found = false;
- foreach($app->modelList() as $m){
- $ma = IPF_Admin_Model::getModelAdmin($m);
- if ($ma!==null && !$ma->hidden){
- $perms = $ma->getPerms($request);
- if (array_search('view', $perms)!==false){
- $user_perms = IPF_Auth_App::checkPermissions($request, $app, $m, array('view'));
- if ($user_perms['view'])
- {
- $models[] = new IPF_Template_ContextVars(array(
- 'name'=>$ma->verbose_name(),
- 'path'=>strtolower($m),
- 'perms'=>$perms,
- ));
- $models_found = true;
- }
+ foreach (IPF_Project::getInstance()->appList() as $app) {
+ $appModels = IPF_Legacy_ORM_App::appModelList($app);
+ if (!$appModels)
+ continue;
+
+ $models = new IPF_Template_ContextVars();
+ $models_found = false;
+ foreach ($appModels as $m) {
+ $ma = IPF_Admin_Model::getModelAdmin($m);
+ if ($ma!==null && !$ma->hidden){
+ $perms = $ma->getPerms($request);
+ if (array_search('view', $perms)!==false){
+ $user_perms = IPF_Auth_App::checkPermissions($request, $app, $m, array('view'));
+ if ($user_perms['view'])
+ {
+ $models[] = new IPF_Template_ContextVars(array(
+ 'name'=>$ma->verbose_name(),
+ 'path'=>strtolower($m),
+ 'perms'=>$perms,
+ ));
+ $models_found = true;
}
}
}
- if ($models_found){
- $app_list[$app->getName()] = new IPF_Template_ContextVars(array(
- 'name' => $app->getTitle(),
- 'path' => $app->getSlug(),
- 'additions' => $app->getAdditions(),
- 'models' => $models,
- ));
- }
+ }
+ if ($models_found){
+ $app_list[$app->getName()] = new IPF_Template_ContextVars(array(
+ 'name' => $app->getTitle(),
+ 'path' => $app->getSlug(),
+ 'additions' => $app->getAdditions(),
+ 'models' => $models,
+ ));
}
}
abstract class IPF_Application
{
- protected $models = array();
protected $name = null;
public function __construct($data=array())
$rc = new ReflectionClass($this);
$this->path = dirname($rc->getFileName()).DIRECTORY_SEPARATOR;
-
- $models = array();
- try {
- $it = new DirectoryIterator($this->path.DIRECTORY_SEPARATOR.'models');
- foreach ($it as $file) {
- $e = explode('.', $file->getFileName(), 2);
- if (count($e) == 2 && $e[1] === 'php') {
- $models[] = $e[0];
- }
- }
- } catch (RuntimeException $e) {
- // nothing to do
- }
-
- // reorder models according to a given parameter
- if (array_key_exists('models', $data)) {
- foreach ($data['models'] as $modelname) {
- if (!in_array($modelname, $models))
- throw new IPF_Exception_Panic("Model \"$modelname\" does not exist.");
- }
- $models = array_merge($data['models'], array_diff($models, $data['models']));
- }
-
- $this->models = $models;
- }
-
- public function modelList()
- {
- return $this->models;
}
public function getName()
class IPF_Auth_App extends IPF_Application
{
- public function __construct()
+ public function admin_models_order()
{
- parent::__construct(array(
- 'models' => array(
- 'User',
- 'Role',
- )));
+ return array('User', 'Role');
}
static function login($request, $user)
class IPF_Legacy_ORM_App extends IPF_Application
{
- public function __construct()
+ private static $appModels = array();
+
+ public static function appModelList($app)
{
- parent::__construct();
+ if (!array_key_exists($app->getName(), self::$appModels)) {
+ $models = array();
+ try {
+ $it = new DirectoryIterator($app->getPath().DIRECTORY_SEPARATOR.'models');
+ foreach ($it as $file) {
+ $e = explode('.', $file->getFileName(), 2);
+ if (count($e) == 2 && $e[1] === 'php') {
+ $models[] = $e[0];
+ }
+ }
+ } catch (RuntimeException $e) {
+ // nothing to do
+ }
+
+ // reorder models according to a given option
+ if (method_exists($app, 'admin_models_order')) {
+ $ordered = $app->admin_models_order();
+ foreach ($ordered as $modelname) {
+ if (!in_array($modelname, $models))
+ throw new IPF_Exception_Panic("Model \"$modelname\" does not exist.");
+ }
+ $models = array_merge($ordered, array_diff($models, $ordered));
+ }
+
+ self::$appModels[$app->getName()] = $models;
+ }
+ return self::$appModels[$app->getName()];
}
public function commands()
{
$models = array();
foreach ($project->frameworkApps() as $app)
- $models = array_merge($models, $app->modelList());
+ $models = array_merge($models, IPF_Legacy_ORM_App::appModelList($app));
return $models;
}
}
$models = array();
foreach ($project->appList() as $app)
- $models = array_merge($models, $app->modelList());
+ $models = array_merge($models, IPF_Legacy_ORM_App::appModelList($app));
IPF_ORM::createTablesFromModels($models);
}
public static function generateSqlFromModels($app)
{
- $sql = IPF_ORM_Manager::connection()->export->exportSortedClassesSql($app->modelList(), false);
+ $sql = IPF_ORM_Manager::connection()->export->exportSortedClassesSql(IPF_Legacy_ORM_App::appModelList($app), false);
$build = '';
foreach ($sql as $query) {