<?php
class codehelp {
var $name;
var $db;
var $prefix;
var $details = array();
// Constructor
function codehelp($name){
$this->name = $name;
}
function setdb($db, $prefix) {
$this->db = $db;
$this->prefix = $prefix;
}
function addDetails ($var, $fieldtype, $pk, $display, $vartype ) {
$this->details[] = array(
"var"=>$var,
"fieldtype"=>$fieldtype,
"pk"=>$pk,
"display"=>$display,
"vartype"=>$vartype);
}
// this is for testing only
function debug(){
print_r ($this->details);
}
//public
function generateSQLSchema(){
$echo = 'CREATE TABLE '.$this->db.' ( ';
for ($x=0; $x<count($this->details); $x++){
$echo .= $this->prefix.$this->details[$x]['var'].' '. $this->details[$x]['fieldtype'];
if ($this->details[$x]['pk']==1){
$echo .= ' NOT NULL AUTO_INCREMENT ';
$pk .= $this->prefix.$this->details[$x]['var'].', ';
}
$echo .= ', ';
}
$pk = substr($pk,0,strlen($pk)-2);
$echo .= 'PRIMARY KEY ('.$pk.'));';
echo $echo;
}
// private function
function generateShow(){
$echo .= '<a href=\'.$PHP_SELF.\'?id=\'.$this->model->id.\'&action=1>Editar</a> | <br>';
$echo .= ' <a href=\'.$PHP_SELF.\'?action=2>Nuevo </a><br>';
$echo .= ' <table border="0" cellspacing="1" width="50%"><br>';
$echo .= ' <tr><th colspan=2>'.$this->name.'</th></tr><br>';
for ($x=0; $x<count($this->details); $x++){
$mark = strpos($this->details[$x]['vartype'], '+');
$type = $mark > 0 ? substr($this->details[$x]['vartype'],0 ,$mark): $this->details[$x]['vartype'];
switch ($type){
case 'browse':
$echo .= ' <tr><td>'.$this->details[$x]['display'].'</td><td>f_busca($this->model->'.$this->details[$x]['var'].')</td></tr><br>';
break;
case 'option':
$echo .= ' <tr><td>'.$this->details[$x]['display'].'</td><td>f_menu($this->model->'.$this->details[$x]['var'].')</td></tr><br>';
break;
default:
$echo .= ' <tr><td>'.$this->details[$x]['display'].'</td><td>\'.$this->model->'.$this->details[$x]['var'].'.\'</td></tr><br>';
break;
}
}
$echo .= ' </table>';
return $echo;
}
// private function
function generateEdit(){
$echo .= '<form method=post action=\'.$PHP_SELF.\'><br>';
$echo .= ' <input type=text name=find> <input type=submit name=search value=Buscar><br>';
$echo .= ' </form><br>';
$echo .= ' <form method=post action=\'.$PHP_SELF.\'?action=\'.$action.\'><br>';
$echo .= ' <input type=hidden name=id value=\'.$this->model->id.\'><br>';
$echo .= ' <input type=submit name=submit value=Guardar><br>';
$echo .= ' <table border="0" cellspacing="1" width="50%"><br>';
$echo .= ' <tr><th colspan=2>'.$this->name.'</th></tr><br>';
for ($x=0; $x<count($this->details); $x++){
$mark = strpos($this->details[$x]['vartype'], '+');
$type = $mark > 0 ? substr($this->details[$x]['vartype'],0 ,$mark): $this->details[$x]['vartype'];
switch ($type){
case 'no':
$echo .= ' <tr><td>'.$this->details[$x]['display'].'</td><td>\'.$this->model->'.$this->details[$x]['var'].'.\'</td></tr><br>';
break;
case 'browse':
$echo .= ' <tr><td>'.$this->details[$x]['display'].'</td><td>
<input type=text name='.$this->details[$x]['var'].' value="\'.$this->model->'.$this->details[$x]['var'].'.\'"> Buscar</td></tr><br>';
break;
case 'option':
$echo .= ' <tr><td>'.$this->details[$x]['display'].'</td><td>
<input type=text name='.$this->details[$x]['var'].' value="\'.$this->model->'.$this->details[$x]['var'].'.\'"> Opcion</td></tr><br>';
break;
default:
$echo .= ' <tr><td>'.$this->details[$x]['display'].'</td><td>
<input type=text name='.$this->details[$x]['var'].' value="\'.$this->model->'.$this->details[$x]['var'].'.\'"></td></tr><br>';
break;
}
}
$echo .= ' </table></form>';
return $echo;
}
// private function
function generateList() {
$echo .='echo \'<table border="0" cellspacing="1" width="100%"><br>';
$echo .=' <tr><br>';
for ($x=1; $x<count($this->details); $x++){
$echo .= ' <th>'.$this->details[$x]['display'].'</th><br>';
}
$echo .=' </tr>\';<br>';
$echo .= ' while ($row=mysql_fetch_array($result)) {<br>';
$echo .= ' echo \'<tr><td><a href=\'.$PHP_SELF.\'?id=\'.$row[\''.$this->prefix.'id\'].\'&action=1>';
$echo .= '\'.$row[\''.$this->prefix.$this->details[1]['var'].'\'].\'</a></td>';
for ($x=2; $x<count($this->details); $x++){
$echo .= '<br> <td>\'.$row[\''.$this->prefix.$this->details[$x]['var'].'\'].\'</td>';
}
$echo .= '\';<br>';
$echo .= ' }<br>';
$echo .=' echo \'</table>\';';
return $echo;
}
// private function
function generateSqlSelect(){
$echo = 'SELECT * FROM '.$this->db.' WHERE '.$this->prefix.$this->details[0]['var'].'= "\'.$this->id.\'"';
return $echo;
}
// private function
function generateSqlInsert(){
$echo = 'INSERT INTO '.$this->db.' SET <br>';
for ($x=0; $x<count($this->details); $x++){
$echo .= ' '.$this->prefix.$this->details[$x]['var'].' = "\'.$this->'.$this->details[$x]['var'].'.\'", <br>';
}
$echo = substr($echo,0,strlen($echo)-6);
return $echo;
}
// private function
function generateSqlUpdate(){
$echo = 'UPDATE '.$this->db.' SET <br>';
for ($x=1; $x<count($this->details); $x++){
$echo .= ' '.$this->prefix.$this->details[$x]['var'].'= "\'.$this->'.$this->details[$x]['var'].'.\'", <br>';
}
$echo = substr($echo,0,strlen($echo)-6);
$echo .= ' <br> WHERE '.$this->prefix.'id = "\'.$this->id.\'"';
return $echo;
}
// public
function generateModelClass(){
$echo = '<pre><code>class '.$this->name.'Model {<br>';
for ($x=0; $x<count($this->details); $x++){
$echo .= 'var $'.$this->details[$x]['var'].';<br>';
}
$echo .= '<br> <br>';
$echo .= 'function setData($id';
for ($x=1; $x<count($this->details); $x++){
$echo .= ', $'.$this->details[$x]['var'];
}
$echo .= ') {<br>';
for ($x=0; $x<count($this->details); $x++){
$echo .= ' $this->'.$this->details[$x]['var'].' = strtoupper($'.$this->details[$x]['var'].');<br>';
}
$echo .= '<br>';
$echo .= '}<br><br>';
$echo .= 'function select($id) { <br>';
$echo .= ' $this->id = $id; <br>';
$echo .= ' $sql = \''.$this->generateSqlSelect().'\';<br>';
$echo .= ' $result = mysql_query($sql);<br> $row = mysql_fetch_array($result);<br>';
for ($x=1; $x<count($this->details); $x++){
$echo .= ' $this->'.$this->details[$x]['var'].' = $row[\''.$this->prefix.$this->details[$x]['var'].'\'];<br>';
}
$echo .= '<br>';
$echo .= '}<br><br>';
$echo .= 'function insert() { <br>';
$echo .= ' $sql = \''.$this->generateSqlInsert().'\';<br>';
$echo .= ' mysql_query($sql);<br> $this->id = mysql_insert_id();<br>';
$echo .= '}<br><br>';
$echo .= 'function update() { <br>';
$echo .= ' $sql = \''.$this->generateSqlUpdate().'\';<br>';
$echo .= ' mysql_query($sql);<br>';
$echo .= '}<br><br>';
$echo .= 'function result($find) { <br>';
$echo .= ' $sql = \'SELECT * FROM '.$this->db.' \';<br>';
$echo .= ' if ($find>\'\')$sql.=\'WHERE '.$this->prefix.$this->details[1]['var'].' LIKE "\'.$find.\'%"\';<br>';
$echo .= ' $result=mysql_query($sql);<br>';
$echo .= ' return $result;';
$echo .= '}<br><br>';
$echo .= '}</code></pre>';
return $echo;
}
// public
function generateViewClass(){
$echo = '<pre><code>class '.$this->name.'View {<br>';
$echo .= 'var $model;<br>';
$echo .= '<br> <br>';
$echo .= 'function '.$this->name.'View($model) { <br>';
$echo .= ' $this->model = $model;<br>';
$echo .= '}<br><br>';
$echo .= 'function show() { <br>';
$echo .= ' echo \''.$this->generateShow().'\';<br>';
$echo .= '}<br><br>';
$echo .= 'function edit($action) { <br>';
$echo .= ' echo \''.$this->generateEdit().'\';<br>';
$echo .= '}<br>';
$echo .= 'function browse($result) { <br>';
$echo .= ' '.$this->generateList().'<br>';
$echo .= '}<br>';
$echo .= '}</code></pre>';
return $echo;
}
//public
function generatePageController() {
$echo = '<pre><code>include_once(\'db.php\');
$model = new '.$this->name.'Model();
if (isset($submit)) {
$model->setData($id';
for ($x=1; $x<count($this->details); $x++){
$echo .= ', $'.$this->details[$x]['var'];
}
$echo.=');
switch ($action) {
case 1:
$model->update();
break;
default:
$model->insert();
break;
}
header("Location: $PHP_SELF?id=$model->id&action=1");
}
include(\'header.php\');
echo \'<p><font class=title>'.$this->name.'</font></p>\';
if (isset($find)) {
$result=$model->result($find);
$view = new '.$this->name.'View(&$model);
$view->browse($result);
die();
}
if(isset($id))$model->select($id);
$view = new '.$this->name.'View(&$model);
if (!isset($action)) $action=0;
$view->edit($action);
</code></pre>';
return $echo;
}
}
?>