From 0d4f6eb5ecbd99fc27f4d5d62c80fe833618a5a0 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Sun, 23 Oct 2016 12:54:30 +0200 Subject: [PATCH] (mvc, migrations) remove the need for empty boilerplates by using BaseModelMigration when no custom migration is available for the current version. --- .../app/models/OPNsense/Base/BaseModel.php | 12 ++++--- .../OPNsense/Base/BaseModelMigration.php | 2 +- .../TrafficShaper/Migrations/M1_0_1.php | 36 ------------------- 3 files changed, 9 insertions(+), 41 deletions(-) delete mode 100644 src/opnsense/mvc/app/models/OPNsense/TrafficShaper/Migrations/M1_0_1.php diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php b/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php index 2def10eeb..1ba570980 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php @@ -241,7 +241,7 @@ abstract class BaseModel $this->internal_mountpoint = $model_xml->mount; if (!empty($model_xml->version)) { - $this->internal_model_version = $model_xml->version; + $this->internal_model_version = (string)$model_xml->version; } // use an xpath expression to find the root of our model in the config.xml file @@ -537,21 +537,25 @@ abstract class BaseModel $class_info = new \ReflectionClass($this); // fetch version migrations $versions = array(); + // set default migration for current model version + $versions[$this->internal_model_version] =__DIR__."/BaseModelMigration.php"; foreach (glob(dirname($class_info->getFileName())."/Migrations/M*.php") as $filename) { $version = str_replace('_', '.', explode('.', substr(basename($filename), 1))[0]); $versions[$version] = $filename; } + uksort($versions, "version_compare"); foreach ($versions as $mig_version => $filename) { if (version_compare($this->internal_current_model_version, $mig_version, '<') && version_compare($this->internal_model_version, $mig_version, '>=') ) { // execute upgrade action - $tmp = explode('.', basename($filename))[0]; - $mig_classname = "\\".$class_info->getNamespaceName()."\\Migrations\\".$tmp; + $mig_classname = explode('.', explode('/mvc/app/models', $filename)[1])[0]; + $mig_classname = str_replace('/', '\\', $mig_classname); // Phalcon's autoloader uses _ as a directory locator, we need to import these files ourselves require_once $filename; $mig_class = new \ReflectionClass($mig_classname); - if ($mig_class->getParentClass()->name == 'OPNsense\Base\BaseModelMigration') { + $chk_class = empty($mig_class->getParentClass()) ? $mig_class : $mig_class->getParentClass(); + if ($chk_class->name == 'OPNsense\Base\BaseModelMigration') { $migobj = $mig_class->newInstance(); try { $migobj->run($this); diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/BaseModelMigration.php b/src/opnsense/mvc/app/models/OPNsense/Base/BaseModelMigration.php index a3fda20b2..9bf9fe9d9 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/BaseModelMigration.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/BaseModelMigration.php @@ -35,7 +35,7 @@ use Phalcon\Logger\Adapter\Syslog; /** * @package OPNsense\Base */ -abstract class BaseModelMigration +class BaseModelMigration { /** * Walk through all nodes and check required defaults diff --git a/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/Migrations/M1_0_1.php b/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/Migrations/M1_0_1.php deleted file mode 100644 index 2fc0ff790..000000000 --- a/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/Migrations/M1_0_1.php +++ /dev/null @@ -1,36 +0,0 @@ -