|
From: <rd...@us...> - 2012-08-21 21:03:18
|
Revision: 2034
http://digir.svn.sourceforge.net/digir/?rev=2034&view=rev
Author: rdg
Date: 2012-08-21 21:03:07 +0000 (Tue, 21 Aug 2012)
Log Message:
-----------
Fixed bug in search operation when more than one KVP orderby parameter is passed. Also replaced the function that converts multiple parameters with the same name into arrays.
Modified Paths:
--------------
tapirlink/trunk/classes/TpInventoryParameters.php
tapirlink/trunk/classes/TpOperationParameters.php
tapirlink/trunk/classes/TpSearchParameters.php
Modified: tapirlink/trunk/classes/TpInventoryParameters.php
===================================================================
--- tapirlink/trunk/classes/TpInventoryParameters.php 2012-03-28 21:54:09 UTC (rev 2033)
+++ tapirlink/trunk/classes/TpInventoryParameters.php 2012-08-21 21:03:07 UTC (rev 2034)
@@ -36,27 +36,25 @@
function LoadKvpParameters()
{
- // Since there can be multiple parameters with the same name
- // (concept and tagname) we need a custom HTTP query string parser
- $parameters = $this->_ParseQueryString();
+ parent::LoadKvpParameters();
// Concepts
- if ( isset( $parameters['concept'] ) )
+ if ( isset( $_REQUEST['concept'] ) )
{
- $concept = $parameters['concept'];
+ $concept = $_REQUEST['concept'];
}
- else if ( isset( $parameters['c'] ) )
+ else if ( isset( $_REQUEST['c'] ) )
{
- $concept = $parameters['c'];
+ $concept = $_REQUEST['c'];
}
- if ( isset( $parameters['tagname'] ) )
+ if ( isset( $_REQUEST['tagname'] ) )
{
- $tag_name = $parameters['tagname'];
+ $tag_name = $_REQUEST['tagname'];
}
- else if ( isset( $parameters['n'] ) )
+ else if ( isset( $_REQUEST['n'] ) )
{
- $tag_name = $parameters['n'];
+ $tag_name = $_REQUEST['n'];
}
if ( isset( $concept ) )
@@ -92,67 +90,10 @@
}
}
- return parent::LoadKvpParameters();
+ return true;
} // end of member function LoadKvpParameters
- function _ParseQueryString( )
- {
- $parameters = array();
-
- // See if there is any raw post
- $raw_post = '';
-
- if ( $fp = fopen( 'php://input', 'r' ) )
- {
- while ( $data = fread( $fp, 4096 ) )
- {
- $raw_post .= $data;
- }
-
- fclose( $fp );
- }
- else
- {
- // TODO: raise an error here!
- }
-
- // Concatenate with query string and raw post before spliting
- $raw_input_items = split( '&', $_SERVER['QUERY_STRING'] . '&' . $raw_post );
-
- foreach ( $raw_input_items as $input_item )
- {
- // split into name/value pair
- if ( $input_item != '' )
- {
- $item = split( '=', $input_item );
-
- $key = urldecode( $item[0] );
-
- $value = ( empty( $item[1] ) ) ? '' : urldecode( $item[1] );
-
- if ( ! isset( $parameters[$key] ) )
- {
- $parameters[$key] = $value;
- }
- elseif ( ! is_array( $parameters[$key] ) )
- {
- $first = $parameters[$key];
- $parameters[$key] = array();
- $parameters[$key][]= $first;
- $parameters[$key][]= $value;
- }
- else
- {
- $parameters[$key][]= $value;
- }
- }
- }
-
- return $parameters;
-
- } // end of member function _ParseQueryString
-
function StartElement( $parser, $qualified_name, $attrs )
{
$name = TpUtils::GetUnqualifiedName( $qualified_name );
Modified: tapirlink/trunk/classes/TpOperationParameters.php
===================================================================
--- tapirlink/trunk/classes/TpOperationParameters.php 2012-03-28 21:54:09 UTC (rev 2033)
+++ tapirlink/trunk/classes/TpOperationParameters.php 2012-08-21 21:03:07 UTC (rev 2034)
@@ -53,6 +53,10 @@
function LoadKvpParameters()
{
+ // Since there can be multiple parameters with the same name
+ // (concept and tagname) we need a custom HTTP query string parser
+ $this->_FixRawQuery();
+
// Filter
if ( isset( $_REQUEST['filter'] ) )
{
@@ -198,6 +202,104 @@
} // end of member function GetFilter
/**
+ * Converts HTTP variables into an array when more than one parameter with
+ * the same name is passed. Deliberately taken from:
+ * http://www.php.net/manual/en/reserved.variables.get.php#92439
+ */
+ function _FixRawQuery( ) {
+
+ $post = '';
+
+ // Try globals array
+ if ( !$post && isset($_GLOBALS) && isset($_GLOBALS["HTTP_RAW_POST_DATA"]) )
+ {
+ $post = $_GLOBALS["HTTP_RAW_POST_DATA"];
+ }
+
+ // Try globals variable
+ if ( !$post && isset($HTTP_RAW_POST_DATA) )
+ {
+ $post = $HTTP_RAW_POST_DATA;
+ }
+
+ // Try stream
+ if ( !$post )
+ {
+ if ( !function_exists('file_get_contents') )
+ {
+ $fp = fopen("php://input", "r");
+
+ if ( $fp )
+ {
+ $post = '';
+
+ while ( !feof($fp) )
+ {
+ $post = fread($fp, 1024);
+ }
+
+ fclose($fp);
+ }
+ }
+ else
+ {
+ $post = "" . file_get_contents("php://input");
+ }
+ }
+
+ $raw = !empty($_SERVER['QUERY_STRING']) ? sprintf('%s&%s', $_SERVER['QUERY_STRING'], $post) : $post;
+
+ $arr = array();
+ $pairs = explode('&', $raw);
+
+ foreach ( $pairs as $i )
+ {
+ if ( !empty($i) )
+ {
+ list($name, $value) = explode('=', $i, 2);
+
+ if ( isset($arr[$name]) )
+ {
+ if ( is_array($arr[$name]) )
+ {
+ $arr[$name][] = $value;
+ }
+ else
+ {
+ $arr[$name] = array($arr[$name], $value);
+ }
+ }
+ else
+ {
+ $arr[$name] = $value;
+ }
+ }
+ }
+
+ foreach ( $_POST as $key => $value )
+ {
+ if ( is_array($arr[$key]) )
+ {
+ $_POST[$key] = $arr[$name];
+ $_REQUEST[$key] = $arr[$name];
+ }
+ }
+
+ foreach ( $_GET as $key => $value )
+ {
+ if ( is_array($arr[$key]) )
+ {
+ $_GET[$key] = $arr[$name];
+ $_REQUEST[$key] = $arr[$name];
+ }
+ }
+
+ # optionally return result array
+ return $arr;
+
+ } // end of member function _FixRawQuery
+
+ /**
* Internal method called before serialization
*
* @return array Properties that should be considered during serialization
Modified: tapirlink/trunk/classes/TpSearchParameters.php
===================================================================
--- tapirlink/trunk/classes/TpSearchParameters.php 2012-03-28 21:54:09 UTC (rev 2033)
+++ tapirlink/trunk/classes/TpSearchParameters.php 2012-08-21 21:03:07 UTC (rev 2034)
@@ -54,6 +54,8 @@
function LoadKvpParameters()
{
+ parent::LoadKvpParameters();
+
// Output model
if ( isset( $_REQUEST['model'] ) )
{
@@ -152,7 +154,7 @@
}
}
- return parent::LoadKvpParameters();
+ return true;
} // end of member function LoadKvpParameters
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|