PHP Classes
elePHPant
Icontem

File: DAOFormatter.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Christian Velin  >  DbCodeBuilder  >  DAOFormatter.class.php  >  Download  
File: DAOFormatter.class.php
Role: Class source
Content type: text/plain
Description: Code generator for DAOs
Class: DbCodeBuilder
Generate code to access databases as data objects
Author: By
Last change: Changed license type
Date: 7 years ago
Size: 8,537 bytes
 

Contents

Class file image Download
<?php
/**
 * A class to generate data access objects from database tables.
 *
 * @author Christian Velin, christian.velin@conjurer.org
 * @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;
    }
}
?>