0011758: allow creation of apps only by defining model: filter
authorPhilipp Schüle <p.schuele@metaways.de>
Mon, 4 Jul 2016 16:07:11 +0000 (18:07 +0200)
committerPhilipp Schüle <p.schuele@metaways.de>
Tue, 5 Jul 2016 16:21:55 +0000 (18:21 +0200)
* get default model from configured models if not set
* apply model config to generic filter group if custom filter class
 is missing

https://forge.tine20.org/view.php?id=11758

Change-Id: I74ccaab5f54554fe066b5ef71134aa7ca9dab87e
Reviewed-on: http://gerrit.tine20.com/customers/3304
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
tests/tine20/Tinebase/Frontend/Json/PersistentFilterTest.php
tine20/Tinebase/Controller/Abstract.php
tine20/Tinebase/Frontend/Json.php
tine20/Tinebase/Model/Filter/FilterGroup.php
tine20/Tinebase/ModelConfiguration.php

index ca535aa..f69c516 100644 (file)
@@ -5,7 +5,7 @@
  * Test class for Tinebase_Frontend_Json_PersistentFilter
  * 
  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
- * @copyright   Copyright (c) 2009-2015 Metaways Infosystems GmbH (http://www.metaways.de)
+ * @copyright   Copyright (c) 2009-2016 Metaways Infosystems GmbH (http://www.metaways.de)
  * @author      Cornelius Weiss <c.weiss@metaways.de>
  * 
  */
index 909e339..61a9651 100755 (executable)
@@ -180,11 +180,18 @@ abstract class Tinebase_Controller_Abstract extends Tinebase_Pluggable_Abstract
     
     /**
      * returns the default model of this application
+     *
      * @return string
      */
-    public static function getDefaultModel()
+    public function getDefaultModel()
     {
-        return static::$_defaultModel;
+        if (static::$_defaultModel !== null) {
+            return static::$_defaultModel;
+        }
+
+        // no default model defined, using first model of app...
+        $models = $this->getModels();
+        return (count($models) > 0) ? $models[0] : null;
     }
     
     /**
index 47e9691..a3e752c 100644 (file)
@@ -865,7 +865,7 @@ class Tinebase_Frontend_Json extends Tinebase_Frontend_Json_Abstract
                     $appController = Tinebase_Core::getApplicationInstance($application->name);
                     $models = $appController->getModels();
                     $appRegistry['models'] = Tinebase_ModelConfiguration::getFrontendConfigForModels($models);
-                    $appRegistry['defaultModel'] = $appController::getDefaultModel();
+                    $appRegistry['defaultModel'] = $appController->getDefaultModel();
 
                 } else {
                     $appRegistry = array_merge_recursive($appRegistry, $customAppRegistry);
index 81b583e..f558aca 100644 (file)
@@ -219,9 +219,9 @@ class Tinebase_Model_Filter_FilterGroup implements Iterator
             $m = $this->_configuredModel;
             $filterConfig = $m::getConfiguration()->getFilterModel();
 
-            if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' 
+            if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' '
                 . ' Filter config: ' . print_r($filterConfig, TRUE));
-            
+
             foreach ($filterConfig as $prop => $val) {
                 $this->{$prop} = $val;
             }
@@ -229,7 +229,7 @@ class Tinebase_Model_Filter_FilterGroup implements Iterator
             $this->_modelName = $this->_applicationName . '_Model_' . $this->_modelName;
         }
     }
-    
+
     /**
      * clone filters after creating clone of filter group
      */
@@ -259,7 +259,7 @@ class Tinebase_Model_Filter_FilterGroup implements Iterator
                 if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' 
                     . ' Adding FilterGroup: ' . $this->_className);
                 
-                if (empty($this->_className)) {
+                if (empty($this->_className) || ! class_exists($this->_className)) {
                     $this->_className = get_class($this);
                     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' 
                         . ' _className was not set, using get_class: ' . $this->_className);
@@ -579,6 +579,8 @@ class Tinebase_Model_Filter_FilterGroup implements Iterator
     public function setConfiguredModel($configuredModel)
     {
         $this->_configuredModel = $configuredModel;
+
+        $this->_createFromModelConfiguration();
     }
     
     /**
index 0a6369c..5eb5fa6 100644 (file)
@@ -1138,7 +1138,7 @@ class Tinebase_ModelConfiguration {
     }
     
     /**
-     * returns the filterconfiguration needed in the filtergroup for this model
+     * returns the filter configuration needed in the filtergroup for this model
      * 
      * @return array
      */