Location: PHPKode > scripts > DbCodeBuilder > dbcodebuilder/DAOFormatter.class.php
<?php
/**
 * A class to generate data access objects from database tables.
 * 
 * @author Christian Velin, hide@address.com
 * @version 0.2
 * @since 0.1 Added phpdoc tags to each generated variable and method.
 * @package DbCodeBuilder
 * 
 * Copyright (C) 2007  Christian Velin
 *
 * This program is free software; distributed under the artistic license.
 */
class DAOFormatter
{
	/**
	 * The String variable to store all the generated code.
	 *
	 * @var String
	 */
	private $output;
	
	
	public function __construct($tables, $columns)
	{
		$this -> generate($tables, $columns);
	}
	
	
	
	/**
	 * Master method to produce workable DAO's to work with VO's.
	 *
	 * @param Array $tables array of the tables in the db.
	 * @param Array $columns recursive array containing all column information.
	 */
	private function generate($tables, $columns)
	{
		for ($i = 0; $i < sizeOf($tables); $i++)
		{
			$this->output .= '============ ' . ucfirst($tables[$i]) . '.DAO.php ============<br><br>';
			$this->output .= 'require_once(\'' . ucfirst($tables[$i]) . '.VO.php\');<br>';
			$this->output .= '/**<br>';
			$this->output .= ' *<br>'; 
			$this->output .= ' */<br>';
			$this->output .= 'class ' . ucfirst($tables[$i]) . 'DAO<br>';
			$this->output .= '{<br>';
			$this->output .= '	/**<br>';
			$this->output .= '	 * Enter description here...<br>';
			$this->output .= '	 *<br>';
			$this->output .= '	 * @var unknown_type<br>';
			$this->output .= '	 */<br>';
			$this->output .= '	private $link;<br><br><br><br>';
			$this->output .= '	/**<br>';
			$this->output .= '	 * Enter description here...<br>';
			$this->output .= '	 *<br>';
			$this->output .= '	 * @param unknown_type $link<br>';
			$this->output .= '	 */<br>';
			$this->output .= '	public function __construct($link)<br>';
			$this->output .= '	{<br>';
			$this->output .= '		$this -> link = $link;<br>';
			$this->output .= '	}<br><br><br><br>';
			$this->output .= '	/**<br>';
			$this->output .= '	 * Enter description here...<br>';
			$this->output .= '	 *<br>';
			$this->output .= '	 * @param unknown_type $vo<br>';
			$this->output .= '	 */<br>';
			$this->output .= '	public function save($vo)<br>';
			$this->output .= '	{<br>';
			$this->output .= '		if ($vo->get' . ucfirst($columns[$i][0]['Field']) . '() == 0)<br>';
			$this->output .= '		{<br>';
			$this->output .= '			$this->insert($vo);<br>';
			$this->output .= '		}<br>';
			$this->output .= '		else<br>';
			$this->output .= '		{<br>';
			$this->output .= '			$this->update($vo);<br>';
			$this->output .= '		}<br>';
			$this->output .= '	}<br><br><br><br>';
			$this->output .= '	/**<br>';
			$this->output .= '	 * Enter description here...<br>';
			$this->output .= '	 *<br>';
			$this->output .= '	 * @param Integer $id<br>';
			$this->output .= '	 * @return unknown_type<br>';
			$this->output .= '	 */<br>';
			$this->output .= '	public function get($id)<br>';
			$this->output .= '	{<br>';
			$this->output .= '		$sql = \'SELECT * FROM ' . $tables[$i] . ' WHERE ' . $columns[$i][0]['Field'] . ' = \' . $id;<br>';
			$this->output .= '		$query = mysql_query($sql, $this->link);<br>';
			$this->output .= '		$result = mysql_fetch_assoc($query);<br>';
			$this->output .= '		$vo = new ' . ucfirst($tables[$i]) . 'VO();<br>';
			$this->output .= '		$this->getFromResult($vo, $result);<br>';
			$this->output .= '		return $vo;<br>';
			$this->output .= '	}<br><br><br><br>';
			$this->output .= '	/**<br>';
			$this->output .= '	 * Enter description here...<br>';
			$this->output .= '	 *<br>';
			$this->output .= '	 * @param unknown_type $vo<br>';
			$this->output .= '	 */<br>';
			$this->output .= '	public function delete($vo)<br>';
			$this->output .= '	{<br>';
			$this->output .= '		$sql = \'DELETE FROM ' . $tables[$i] . ' WHERE ' . $columns[$i][0]['Field'] . ' = \' . $vo->get' . ucfirst($columns[$i][0]['Field']) . '();<br>';
			$this->output .= '		$result = mysql_query($sql, $this->link);<br>';
			$this->output .= '		$vo->set' . ucfirst($columns[$i][0]['Field']) . '(0);<br>';
			$this->output .= '	}<br><br><br><br>';
			$this->output .= '	/**<br>';
			$this->output .= '	 * Enter description here...<br>';
			$this->output .= '	 *<br>';
			$this->output .= '	 * @param unknown_type $vo<br>';
			$this->output .= '	 * @param unknown_type $result<br>';
			$this->output .= '	 */<br>';
			$this->output .= '	private function getFromResult($vo, $result)<br>';
			$this->output .= '	{<br>';
			$this->output .= $this->generateUpdateVO($i, $columns);
			$this->output .= '	}<br><br><br><br>';
			$this->output .= '	/**<br>';
			$this->output .= '	 * Enter description here...<br>';
			$this->output .= '	 *<br>';
			$this->output .= '	 * @param unknown_type $vo<br>';
			$this->output .= '	 */<br>';
			$this->output .= '	private function update($vo)<br>';
			$this->output .= '	{<br>';
			$this->output .= $this->generateUpdateQuery($i, $tables, $columns);
			$this->output .= '		mysql_query($sql, $this->link) or die (mysql_error());<br>';
			$this->output .= '	}<br><br><br><br>';
			$this->output .= '	/**<br>';
			$this->output .= '	 * Enter description here...<br>';
			$this->output .= '	 *<br>';
			$this->output .= '	 * @param unknown_type $vo<br>';
			$this->output .= '	 */<br>';
			$this->output .= '	private function insert($vo)<br>';
			$this->output .= '	{<br>';
			$this->output .= $this->generateInsertQuery($i, $tables, $columns);
			$this->output .= '		mysql_query($sql, $this->link) or die (mysql_error());<br>';
			$this->output .= '		$vo->setId(mysql_insert_id());<br>';
			$this->output .= '	}<br>';
			$this->output .= '}<br>';
			$this->output .= '============ ' . ucfirst($tables[$i]) . '.DAO.php ============<br><br>';
		}
	}
	
	
	
	/**
	 * Method to generate code needed to update the corresponding VO class.
	 *
	 * @param Integer $i keeps track of which table for which we are constructing a DAO.
	 * @param Array $columns recursive array containing all column information.
	 * @return String the generated code for updating a VO class.
	 */
	private function generateUpdateVO($i, $columns)
	{
		$method = '';
		for ($j = 0; $j < sizeOf($columns[$i]); $j++)
		{
			$method .= '$vo->set' . ucfirst($columns[$i][$j]['Field']) . '($result[\'' . $columns[$i][$j]['Field'] . '\']);<br>';
		}
		return $method;
	}
	
	
	
	/**
	 * Method to generate the update query used to update the db from a VO class.
	 *
	 * @param Integer $i keeps track of which table for which we are constructing a DAO.
	 * @param Array $tables array of the tables in the db.
	 * @param Array $columns recursive array containing all column information.
	 * @return String the generated update query.
	 */
	private function generateUpdateQuery($i, $tables, $columns)
	{
		$query = '$sql = \'UPDATE ' . $tables[$i] . ' SET ';
		$size = sizeOf($columns[0])-1;
		for ($j = 0; $j < $size; $j++)
		{
			$query .= $columns[$i][$j]['Field'] .' = \\\'\'.$vo->get' . ucfirst($columns[$i][$j]['Field']) . '().\'\\\', ';
		}
		$query .= $columns[$i][$size]['Field'] .' = \\\'\'.$vo->get' . ucfirst($columns[$i][$size]['Field']) . '().\'\\\'';
		$query .=  ' WHERE ' . $columns[$i][0]['Field'] . ' = \\\'\'.$vo->get' . ucfirst($columns[$i][0]['Field']) . '().\'\\\'\';<br>';
		return $query;
	}
	
	
	
	/**
	 * Method to generate the insert query used to create a new row in the db from a VO class.
	 *
	 * @param Integer $i keeps track of which table for which we are constructing a DAO.
	 * @param Array $tables array of the tables in the db.
	 * @param Array $columns recursive array containing all column information.
	 * @return String the generated insert query.
	 */
	private function generateInsertQuery($i, $tables, $columns)
	{
		$query = '$sql = \'INSERT INTO ' . $tables[$i] . ' (';
		$size = sizeOf($columns[0])-1;
		for ($j = 1; $j < $size; $j++)
		{
			$query .= $columns[$i][$j]['Field'] . ', ';
		}
		$query .= $columns[$i][$size]['Field'] . ') VALUES (';
		for ($j = 1; $j < $size; $j++)
		{
			$query .= '\\\'\'.$vo->get' . ucfirst($columns[$i][$j]['Field']) . '().\'\\\', ';
		}
		$query .= '\\\'\'.$vo->get' . ucfirst($columns[$i][$size]['Field']) . '().\'\\\')\';<br>';
		return $query;
	}
	
	
	
	/**
	 * Method to get the generated code.
	 *
	 * @return String the generated DAO(s).
	 */
	public function getOutput()
	{
		return $this->output;
	}
}
?>
Return current item: DbCodeBuilder