Procházet zdrojové kódy

[core] extract BridgeAbstract methods to make them functions

Method validateData is now afunction in lib/validation.php
validateTextValue, validateNumberValue, validateCheckboxValue
and validateListValue are now anonymous functions
defined in validateData

Signed-off-by: Pierre Mazière <pierre.maziere@gmx.com>
Pierre Mazière před 7 roky
rodič
revize
a1ef589ffe
3 změnil soubory, kde provedl 106 přidání a 100 odebrání
  1. 1 100
      lib/BridgeAbstract.php
  2. 2 0
      lib/RssBridge.php
  3. 103 0
      lib/validation.php

+ 1 - 100
lib/BridgeAbstract.php

@@ -21,105 +21,6 @@ abstract class BridgeAbstract implements BridgeInterface {
 		return $this->items;
 	}
 
-	protected function validateTextValue($value, $pattern = null){
-		if(!is_null($pattern)){
-			$filteredValue = filter_var($value
-			, FILTER_VALIDATE_REGEXP
-			, array('options' => array(
-					'regexp' => '/^' . $pattern . '$/'
-				))
-			);
-		} else {
-			$filteredValue = filter_var($value);
-		}
-
-		if($filteredValue === false)
-			return null;
-
-		return $filteredValue;
-	}
-
-	protected function validateNumberValue($value){
-		$filteredValue = filter_var($value, FILTER_VALIDATE_INT);
-
-		if($filteredValue === false && !empty($value))
-			return null;
-
-		return $filteredValue;
-	}
-
-	protected function validateCheckboxValue($value){
-		$filteredValue = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
-
-		if(is_null($filteredValue))
-			return null;
-
-		return $filteredValue;
-	}
-
-	protected function validateListValue($value, $expectedValues){
-		$filteredValue = filter_var($value);
-
-		if($filteredValue === false)
-			return null;
-
-		if(!in_array($filteredValue, $expectedValues)){ // Check sub-values?
-			foreach($expectedValues as $subName => $subValue){
-				if(is_array($subValue) && in_array($filteredValue, $subValue))
-					return $filteredValue;
-			}
-			return null;
-		}
-
-		return $filteredValue;
-	}
-
-	protected function validateData(&$data){
-		if(!is_array($data))
-			return false;
-
-		foreach($data as $name => $value){
-			$registered = false;
-			foreach(static::PARAMETERS as $context => $set){
-				if(array_key_exists($name, $set)){
-					$registered = true;
-					if(!isset($set[$name]['type'])){
-						$set[$name]['type'] = 'text';
-					}
-
-					switch($set[$name]['type']){
-					case 'number':
-						$data[$name] = $this->validateNumberValue($value);
-						break;
-					case 'checkbox':
-						$data[$name] = $this->validateCheckboxValue($value);
-						break;
-					case 'list':
-						$data[$name] = $this->validateListValue($value, $set[$name]['values']);
-						break;
-					default:
-					case 'text':
-						if(isset($set[$name]['pattern'])){
-							$data[$name] = $this->validateTextValue($value, $set[$name]['pattern']);
-						} else {
-							$data[$name] = $this->validateTextValue($value);
-						}
-						break;
-					}
-
-					if(is_null($data[$name])){
-						echo 'Parameter \'' . $name . '\' is invalid!' . PHP_EOL;
-						return false;
-					}
-				}
-			}
-
-			if(!$registered)
-				return false;
-		}
-
-		return true;
-	}
 
 	protected function setInputs(array $inputs, $queriedContext){
 		// Import and assign all inputs to their context
@@ -256,7 +157,7 @@ abstract class BridgeAbstract implements BridgeInterface {
 			return;
 		}
 
-		if(!$this->validateData($inputs)){
+		if(!validateData($inputs, static::PARAMETERS)){
 			returnClientError('Invalid parameters value(s)');
 		}
 

+ 2 - 0
lib/RssBridge.php

@@ -15,6 +15,8 @@ require __DIR__ . '/BridgeAbstract.php';
 require __DIR__ . '/FeedExpander.php';
 require __DIR__ . '/Cache.php';
 require __DIR__ . '/CacheAbstract.php';
+
+require __DIR__ . '/validation.php';
 require __DIR__ . '/html.php';
 require __DIR__ . '/error.php';
 require __DIR__ . '/contents.php';

+ 103 - 0
lib/validation.php

@@ -0,0 +1,103 @@
+<?php
+function validateData(&$data,$parameters){
+	$validateTextValue = function($value, $pattern = null){
+		if(!is_null($pattern)){
+			$filteredValue = filter_var($value
+				, FILTER_VALIDATE_REGEXP
+				, array('options' => array(
+					'regexp' => '/^' . $pattern . '$/'
+				))
+			);
+		} else {
+			$filteredValue = filter_var($value);
+		}
+
+		if($filteredValue === false)
+			return null;
+
+		return $filteredValue;
+	};
+
+	$validateNumberValue = function($value){
+		$filteredValue = filter_var($value, FILTER_VALIDATE_INT);
+
+		if($filteredValue === false && !empty($value))
+			return null;
+
+		return $filteredValue;
+	};
+
+	$validateCheckboxValue = function($value){
+		$filteredValue = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
+
+		if(is_null($filteredValue))
+			return null;
+
+		return $filteredValue;
+	};
+
+	$validateListValue = function($value, $expectedValues){
+		$filteredValue = filter_var($value);
+
+		if($filteredValue === false)
+			return null;
+
+		if(!in_array($filteredValue, $expectedValues)){ // Check sub-values?
+			foreach($expectedValues as $subName => $subValue){
+				if(is_array($subValue) && in_array($filteredValue, $subValue))
+					return $filteredValue;
+			}
+			return null;
+		}
+
+		return $filteredValue;
+	};
+
+
+	if(!is_array($data))
+		return false;
+
+	foreach($data as $name => $value){
+		$registered = false;
+		foreach($parameters as $context => $set){
+			if(array_key_exists($name, $set)){
+				$registered = true;
+				if(!isset($set[$name]['type'])){
+					$set[$name]['type'] = 'text';
+				}
+
+				switch($set[$name]['type']){
+				case 'number':
+					$data[$name] = $validateNumberValue($value);
+					break;
+				case 'checkbox':
+					$data[$name] = $validateCheckboxValue($value);
+					break;
+				case 'list':
+					$data[$name] = $validateListValue($value, $set[$name]['values']);
+					break;
+				default:
+				case 'text':
+					if(isset($set[$name]['pattern'])){
+						$data[$name] = $validateTextValue($value, $set[$name]['pattern']);
+					} else {
+						$data[$name] = $validateTextValue($value);
+					}
+					break;
+				}
+
+				if(is_null($data[$name])){
+					echo 'Parameter \'' . $name . '\' is invalid!' . PHP_EOL;
+					return false;
+				}
+			}
+		}
+
+		if(!$registered)
+			return false;
+	}
+
+	return true;
+}
+
+?>