Location: PHPKode > scripts > ecSQL > ecsql/System.php
<?php
/*
Copyright 2001 Rikard Bartholf <hide@address.com>

This file is part of ecSQL.

ecSQL is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

ecSQL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with ecSQL; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
?>
<?php
/**
 * This is two example classes that should be altered in order to fit another
 * table structure. Only contained here for reference.
 * This is a sort of stored procedures that is found on many other database
 * servers but not mySQL.
 */
class SysRecipe extends sysGlobals {
	var $cColl;
	function prepareByID($inID) {
		$aQuery = "	SELECT *
					FROM RECIPES
					WHERE RECIPE_ID = $inID";
		$aRS = mysql_query($aQuery);
		$this->cColl = $this->makeCollectionOfTypes($aRS, "Recipe");
	}
	function prepareAll() {
		$aQuery = "	SELECT *
					FROM RECIPES
					ORDER BY NAME";
		$aRS = mysql_query($aQuery);
		$this->cColl = $this->makeCollectionOfTypes($aRS, "Recipe");
	}
}

class SysIngredient extends sysGlobals {
	var $cColl;
	function prepareByID($inID) {
		$aQuery = "	SELECT *
					FROM INGREDIENTS
					WHERE INGREDIENT_ID = $inID";
		$aRS = mysql_query($aQuery);
		$this->cColl = $this->makeCollectionOfTypes($aRS, "Ingredient");
	}
	function prepareByRecipeId($inRecipeId) {
		$aQuery = "	SELECT *
					FROM INGREDIENTS
					WHERE RECIPE_ID = '" . $inRecipeId ."'
					ORDER BY INGREDIENT_ID";
		$aRS = mysql_query($aQuery);
		$this->cColl = $this->makeCollectionOfTypes($aRS, "Ingredient");
	}
}




/**
 * This is a class which allows "browsing" an entire Coll with standard methods
 * such as ->moveNext().
 * Example:
 *
 *  $cRecipeObj = new sysRecipe();
 *  $cRecipeObj->prepareAll();
 *  $cBrowser = $cRecipeObj->getBrowser();
 *
 * This code prepares all the recipes we have in our database. We call the method
 * ->getBrowser() which returns a sysBrowser, loaded with the Coll that was last
 * created. Use it like this later on in the code:
 *
 * 	while ( $cBrowser->moveNext() ) {
 *		echo $cBrowser->getValue("NAME") . "<br>";
 *	}
 *
 * @author	Rikard Bartholf <hide@address.com>
 */
class sysBrowser {
	var $cBrwsColl;
	var $cIndex;
	var $cIndex2;
	
	/**
	 * Returns true or false if the index is at the end of the Coll or not.
	 */
	function eof() {
		return ($this->cIndex > $this->cnt()) ? 1 : 0;
	}
	
	/**
	 * Sets $cBrwsColl to supplied $inColl.
	 *
	 * @param	$inColl	This is the collection the class will be working with.
	 */
	function setColl($inColl) {
		$this->cBrwsColl = $inColl;
		$this->cIndex = 0;
		$this->cIndex2 = 0;
	}
	function moveNext() {
		if ( !$this->eof() ) {
			$this->cIndex2 = $this->cIndex;
			$this->cIndex++;
			return true;
		} else {
			return false;
		}
	}
	function moveFirst() {
		$this->cIndex = 0;
		$this->cIndex2 = 0;
	}
	function cnt() {
		return count($this->cBrwsColl)-1;
	}
	
	/**
	 * Returns the value for the given key. In order for the ->moveNext() function
	 * to behave as it should we need two index variables.
	 *
	 * @param	$inKey
	 */
	function getValue($inKey) {
		return $this->cBrwsColl[$this->cIndex2]->getValue($inKey);
	}
	
	/**
	 * A very important function that returns the whole object instead of just the value
	 * of a given key. Required before a call to both the ->store() and ->remove()
	 * methods of the type in question.
	 *
	 * @return	A Type
	 */
	function getObject() {
		return $this->cBrwsColl[$this->cIndex2];
	}
}




/**
 * Generic functions that is used in all "Typemanagers" created above.
 *
 * @author	Rikard Bartholf <hide@address.com>
 */
class sysGlobals extends sysBrowser {
	/**
	 * This is one of the most important functions of the class. It converts a
	 * recordset into a Collection of types.
	 *
	 * @param	$inRS	The recordset that is to be converted into a Collection.
	 * @param	$inType	Typename of the class that is to be created from each row
	 *					of the recordset.
	 */
	function makeCollectionOfTypes($inRS, $inType) {
		$aColl = array();
		while($out = mysql_fetch_assoc($inRS)) {
			eval("\$cObj = new $inType;");
			$cObj->init();
			while(list($key,$val) = each($out)) {
				$cObj->add($key,$val);
			}
			array_push($aColl, $cObj);
		}
		return $aColl;
	}

	function cnt() {
		return count($this->cColl);
	}
	
	function getColl(){
		if( count($this->cColl) ) {
			return $this->cColl;
		} else {
			return 0;
		}
	}
	
	/**
	 * Returns a sysBrowser that is prepared with the most recent Coll.
	 */
	function getBrowser() {
		$aBrowser = New sysBrowser();
		$aBrowser->setColl($this->cColl);
		return $aBrowser;
	}
}




?>
Return current item: ecSQL