]> git.andy128k.dev Git - ipf.git/commitdiff
models in application
authorAndrey Kutejko <andy128k@gmail.com>
Sun, 16 Jun 2013 22:07:21 +0000 (01:07 +0300)
committerAndrey Kutejko <andy128k@gmail.com>
Sun, 16 Jun 2013 22:07:21 +0000 (01:07 +0300)
ipf/project.php

index 3f2de1baf43f04206e95e21dd2c0a3b18475f10a..60328b34874723d05e60055826891b7da2df7303 100644 (file)
@@ -1,37 +1,42 @@
 <?php
 
-final class IPF_Project{
-
+final class IPF_Project
+{
     private $apps = array();
     public $sqlProfiler = null;
 
     static private $instance = NULL;
 
-    static function getInstance(){
+    static function getInstance()
+    {
         if (self::$instance == NULL)
-            self::$instance = new IPF_Project();
+            self::$instance = new IPF_Project;
         return self::$instance;
     }
 
-    private function __construct(){
+    private function __construct()
+    {
         $applist = IPF::get('applications');
-        foreach( $applist as &$appname){
+        foreach ($applist as &$appname) {
             if (!IPF_Utils::isValidName($appname))
                 throw new IPF_Exception_Panic("Application name \"$name\" is incorrect");
             $this->apps[$appname] = null;
         }
     }
 
-    private function __clone(){
+    private function __clone()
+    {
     }
 
-    private function appClassName($name){
-        return $name.'_App';
+    private function appClassName($name)
+    {
+        return $name . '_App';
     }
 
-    public function appList(){
-        foreach($this->apps as $appName=>&$app){
-            if ($app==null){
+    public function appList()
+    {
+        foreach($this->apps as $appName => &$app) {
+            if ($app == null) {
                 $app = $this->getApp($appName);
             }
         }
@@ -39,65 +44,94 @@ final class IPF_Project{
     }
 
     // Lazy Application Loader
-    public function getApp($name){
-        if (!array_key_exists($name,$this->apps))
+    public function getApp($name)
+    {
+        if (!array_key_exists($name, $this->apps))
             throw new IPF_Exception_Panic("Application \"$name\" not found");
-        if ($this->apps[$name]==null){
-                $className = $this->appClassName($name);
-                $this->apps[$name] = new $className();
+        if ($this->apps[$name] == null) {
+            $className = $this->appClassName($name);
+            $this->apps[$name] = new $className();
         }
         return $this->apps[$name];
     }
 
-    public function checkApps(){
-        foreach( $this->apps as $appname=>&$app)
+    public function checkApps()
+    {
+        foreach ($this->apps as $appname => &$app)
             $this->getApp($appname);
     }
 
-    public function generateModels(){
+    protected function frameworkApps()
+    {
+        $result = array();
+        foreach ($this->apps as $appname => &$app) {
+            if (substr($appname, 0, 4) === 'IPF_')
+                $result[] = $this->getApp($appname);
+        }
+        return $result;
+    }
+
+    protected function customApps()
+    {
+        $result = array();
+        foreach ($this->apps as $appname => &$app) {
+            if (substr($appname, 0, 4) !== 'IPF_')
+                $result[] = $this->getApp($appname);
+        }
+        return $result;
+    }
+
+    public function generateModels()
+    {
         IPF_ORM::generateModelsFromYaml(
             IPF::get('project_path').DIRECTORY_SEPARATOR.'models.yml',
             IPF::get('project_path').DIRECTORY_SEPARATOR.'models'
         );
+        foreach ($this->customApps() as $app)
+            $app->generateModels();
     }
 
-    public function generateContribModels(){
-        foreach( $this->apps as $appname=>&$app){
-            if (substr($appname,0,4)=='IPF_')
-                $this->getApp($appname)->generateModels();
-        }
+    public function generateContribModels()
+    {
+        foreach ($this->frameworkApps() as $app)
+            $app->generateModels();
     }
 
-    public function createTablesFromModels(){
-        foreach( $this->apps as $appname=>&$app){
-            if (substr($appname,0,4)=='IPF_')
-                $this->getApp($appname)->createTablesFromModels();
-        }
-        return IPF_ORM::createTablesFromModels(IPF::get('project_path').DIRECTORY_SEPARATOR.'models');
+    public function createTablesFromModels()
+    {
+        foreach ($this->frameworkApps() as $app)
+            $app->createTablesFromModels();
+        IPF_ORM::createTablesFromModels(IPF::get('project_path').DIRECTORY_SEPARATOR.'models');
+        foreach ($this->customApps() as $app)
+            $app->createTablesFromModels();
     }
     
     public function createPermissionsFromModels()
     {
         $pathes = array();
-        
-        foreach( $this->apps as $appname=>&$app)
-        {
-            if (substr($appname,0,4)=='IPF_')
-                $pathes[] = $this->getApp($appname)->getPath().'models';
+
+        foreach ($this->apps as $appname => &$app) {
+            $app = $this->getApp($appName);
+            $pathes[] = $app->getPath().'models';
         }
-        
+
         $pathes[] = IPF::get('project_path').DIRECTORY_SEPARATOR.'models';
-        
+
         return IPF_Auth_App::createPermissionsFromModels($pathes);
     }
 
-    public function generateSql(){
+    public function generateSql()
+    {
         $sql = '';
-        foreach( $this->apps as $appname=>&$app){
-            if (substr($appname,0,4)=='IPF_')
-                $sql .= $this->getApp($appname)->generateSql()."\n";
-        }
+
+        foreach ($this->frameworkApps() as $app)
+            $sql .= $app->generateSql()."\n";
+
         $sql .= IPF_ORM::generateSqlFromModels(IPF::get('project_path').DIRECTORY_SEPARATOR.'models')."\n";
+
+        foreach ($this->customApps() as $app)
+            $sql .= $app->generateSql()."\n";
+
         return $sql;
     }
 
@@ -140,20 +174,25 @@ final class IPF_Project{
         }
     }
 
-    public function loadModels(){
-        foreach( $this->apps as $appname=>&$app){
-            if (substr($appname,0,4)=='IPF_')
-                $this->getApp($appname)->loadModels();
-        }
+    public function loadModels()
+    {
+        foreach ($this->frameworkApps() as $app)
+            $app->loadModels();
+
         IPF_ORM::loadModels(IPF::get('project_path').DIRECTORY_SEPARATOR.'models');
+
+        foreach ($this->customApps() as $app)
+            $app->loadModels();
     }
 
-    private function cli(){
+    private function cli()
+    {
         $cli = new IPF_Cli();
         $cli->run();
     }
 
-    public function run() {
+    public function run()
+    {
         if (IPF::get('debug')) {
             $this->sqlProfiler = new IPF_ORM_Connection_Profiler();
             IPF_ORM_Manager::getInstance()->dbListeners[] = $this->sqlProfiler;