From 208d267f56f5353ad8256d14858f4553a364d50e Mon Sep 17 00:00:00 2001
From: Franco Fichtner <franco@opnsense.org>
Date: Thu, 9 Feb 2017 22:43:28 +0100
Subject: [PATCH] mvc: flatten ModelRelationField logic and always use continue

(cherry picked from commit 70c502ba51c2867584eaf8277e9bd7af95ee2a03)
---
 .../Base/FieldTypes/ModelRelationField.php    | 58 ++++++++++---------
 1 file changed, 31 insertions(+), 27 deletions(-)

diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ModelRelationField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ModelRelationField.php
index bede7c6ec..ebfdc5f82 100644
--- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ModelRelationField.php
+++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ModelRelationField.php
@@ -2,7 +2,6 @@
 
 /**
  *    Copyright (C) 2015 Deciso B.V.
- *
  *    All rights reserved.
  *
  *    Redistribution and use in source and binary forms, with or without
@@ -25,8 +24,8 @@
  *    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  *    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  *    POSSIBILITY OF SUCH DAMAGE.
- *
  */
+
 namespace OPNsense\Base\FieldTypes;
 
 use Phalcon\Validation\Validator\InclusionIn;
@@ -83,36 +82,41 @@ class ModelRelationField extends BaseField
             self::$internalOptionList[$this->internalCacheKey] = array();
             foreach ($mdlStructure as $modelData) {
                 // only handle valid model sources
-                if (isset($modelData['source']) && isset($modelData['items']) && isset($modelData['display'])) {
-                    $className = str_replace(".", "\\", $modelData['source']);
-                    // handle optional/missing classes, i.e. from plugins
-                    if (!class_exists($className)) {
-                        continue;
-                    }
-                    $modelObj = new $className;
-                    foreach ($modelObj->getNodeByReference($modelData['items'])->__items as $node) {
-                        $displayKey = $modelData['display'];
-                        if (isset($node->getAttributes()["uuid"]) && $node->$displayKey != null) {
-                            // check for filters and apply if found
-                            $isMatched = true;
-                            if (isset($modelData['filters'])) {
-                                foreach ($modelData['filters'] as $filterKey => $filterValue) {
-                                    $fieldData = $node->$filterKey;
-                                    if (!preg_match($filterValue, $fieldData) && $fieldData != null) {
-                                        $isMatched = false;
-                                        break;
-                                    }
+                if (!isset($modelData['source']) || !isset($modelData['items']) || !isset($modelData['display'])) {
+                    continue;
+                }
+
+                // handle optional/missing classes, i.e. from plugins
+                $className = str_replace('.', '\\', $modelData['source']);
+                if (!class_exists($className)) {
+                    continue;
+                }
+
+                $modelObj = new $className;
+
+                foreach ($modelObj->getNodeByReference($modelData['items'])->__items as $node) {
+                    $displayKey = $modelData['display'];
+                    if (isset($node->getAttributes()["uuid"]) && $node->$displayKey != null) {
+                        // check for filters and apply if found
+                        $isMatched = true;
+                        if (isset($modelData['filters'])) {
+                            foreach ($modelData['filters'] as $filterKey => $filterValue) {
+                                $fieldData = $node->$filterKey;
+                                if (!preg_match($filterValue, $fieldData) && $fieldData != null) {
+                                    $isMatched = false;
+                                    break;
                                 }
                             }
-                            if ($isMatched) {
-                                $uuid = $node->getAttributes()['uuid'];
-                                self::$internalOptionList[$this->internalCacheKey][$uuid] =
-                                    $node->$displayKey->__toString();
-                            }
+                        }
+                        if ($isMatched) {
+                            $uuid = $node->getAttributes()['uuid'];
+                            self::$internalOptionList[$this->internalCacheKey][$uuid] =
+                                $node->$displayKey->__toString();
                         }
                     }
-                    unset($modelObj);
                 }
+
+                unset($modelObj);
             }
         }
     }
-- 
2.21.0