All pastes #443499 Raw Edit

Mine

public text v1 · immutable
·published 2007-04-16 20:52 UTC
rendered paste body
filter.xml
==========

<filters>
	<topfilters name="Logic">
		<middlefilters>
			<filter>=</filter>
			<filter>!=</filter>
		</middlefilters>
		<lowfilters>
			<filter>QF_IDL</filter>
			<filter>QF_UFBV</filter>
			<filter>QF_IDL</filter>
			<filter>QF_LRA</filter>
			<filter>QF_AULIA</filter>
			<filter>QF_LIA</filter>
		</lowfilters>
	</topfilters>
	<topfilters name="Update">
		<middlefilters>
			<filter>=</filter>
			<filter>&lt;=</filter>
			<filter>&gt;=</filter>
		</middlefilters>
	</topfilters>
	<topfilters name="Status">
		<middlefilters>
			<filter>=</filter>
			<filter>!=</filter>
		</middlefilters>
		<lowfilters>
			<filter>sat</filter>
			<filter>unsat</filter>
		</lowfilters>
	</topfilters>
</filters>


test.php
============

<?php



function is_selected ( $to_compare, $from_compare )

{

	if ( $to_compare == $from_compare )

		echo 'selected';

}



function output_form ( $top_level_value=NULL, $middle_level_value=NULL, $low_level_value=NULL )

{



	echo '<select name = "top_filter[]" onchange="this.form.submit()">'; 

		

	$doc = new DOMDocument;

	$doc->load('filter.xml');



	$doc->preserveWhiteSpace = false;



	$entries = 	$doc->getElementsByTagName('topfilters'); #$xpath->query($query);

		

	foreach ( $entries as $entry )

	{	

		echo '<option value="' . $entry->getAttribute ( 'name' );

		echo '" ';

		echo is_selected ( $top_level_value, $entry->getAttribute ( 'name' ) );

		echo '>';

		echo $entry->getAttribute ( 'name' ) . '</option>';

	}	



	echo '</select>';

	

	if ( $top_level_value != NULL )

	{

	

		$middle_filter 	= '/filters/topfilters[@name="' . $top_level_value . '"]/middlefilters/filter';

		$low_filter		= '/filters/topfilters[@name="' . $top_level_value . '"]/lowfilters/filter';



		$xpath 			= new DOMXPath($doc);



		/* out put for middle and low filters and select appropriate default values if possible */

		$entries = $xpath->query ( $middle_filter );



		echo '<select name="middle_filter[]">';

		foreach ( $entries as $entry )

		{

			echo '<option value="';

			echo $entry->nodeValue;

			echo '" ';

			echo is_selected ( $entry->nodeValue, $middle_level_value );

			echo ' >' . $entry->nodeValue . '</option>';  

		}



		echo '</select>';



		/* for the low filter i have to keep a count coz if there is no filter, that means we have to put a text box */

		$count = 0;



		$entries = $xpath->query ( $low_filter );



		/* first get the count */

		foreach ( $entries as $entry )

			$count++;



		if ( $count != 0 )

		{

			echo '<select name="low_filter[]">';

			foreach ( $entries as $entry )

			{



				echo '<option value="';

				echo $entry->nodeValue;

				echo '" ';

				echo is_selected ( $entry->nodeValue, $low_level_value);

				echo ' >' . $entry->nodeValue . '</option>';  

			}



			echo '</select>';



		}

		else

		{	

			echo '<input type="text" size=25 value="' . $low_level_value . '" />';

		}	

	}



	echo '<br>';



} 

?>

<html>

<head><title>Search SMT Libs</title>

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf8">



<script type="text/javascript">



function updateandsubmit()

{

	this.document.forms['filter']['isquery'].value = '1';

	this.document.forms['filter'].submit();

	return true;

}



function setVisible()

{



	var  toshow = this.document.forms['filter']['formstoshow'].value;



	for ( i=0; i<toshow; i++ )

	{

		document.write ( "came" );

		this.document.forms['filter']['middle_filter'][i].visible = true;

		document.write(i + "<br>" );	

	}

}



</script>



</head>



<body> 



<form name="filter" method="post" action="sedna.php">

<input type="hidden" name="isquery" value="0" />

<input type="hidden" name="formstoshow" value="1" />

<?php



	/* we output one extra always */	

	if ( isset ( $_POST['isquery'] ) && $_POST['isquery'] == 1 )

	{

		/* do a search and show the result */

	}

	else

	{



		if ( isset ( $_POST['formstoshow'] ) )

			$toshow = $_POST['formstoshow'];

		else

			$toshow = 1;

 

		/* initialize the form depending upon the last form value */

		/* change 4 if you want to increase the number of selection in the first step */

		for ( $i=0; $i < $toshow; $i++ )

		{

			/* sanity check when we are coming for the first time .. we will require count too */

			if ( isset ( $_POST['top_filter'] ) )

			{	

				#echo $i;

				if ( array_key_exists ( $i, $_POST['top_filter'] ) )

				{

					#echo 'reaced 1';

					output_form( $_POST['top_filter'][$i], $_POST['middle_filter'][$i], $_POST['low_filter'][$i] );

				}

				else

				{

					#echo 'reaached 2';

					output_form ( 'Logic' );

				}

			}

			else

			{

				output_form ( 'Logic' );

			}	

		}

	}



?>



<p>

<input type='submit' value='Search' onClick="updateandsubmit();" />



</form>



</body>



</html>