<?php
 
 
include_once('class.field.php');
 
session_start();
 
 
 
function genereerCLASS($classname,$comments){
 
    $template = file_get_contents("./sourceData/classTemplate.php");
 
    $template = str_replace("#classname#", $classname,$template);
 
    $template = str_replace("#comments#", $comments,$template);
 
    $fieldoutput = "";
 
    foreach ($_SESSION['fields'] as $field) {
 
        $fieldoutput .= "\tpublic $". $field->name . ";".PHP_EOL;
 
    }
 
    $template = str_replace("#classvars#", $fieldoutput,$template);
 
    return $template;
 
}
 
 
 
/*
 
geneer een databank classe specifiek voor deze php class...
 
-> getAll
 
-> getbyField
 
-> update(class)
 
-> delete
 
-> insert(class)
 
*/
 
function maakDBCLASS($classname,$comments){
 
 
    $foundKeys = "";
 
    $output ="<?php ".PHP_EOL.PHP_EOL;
 
    $output .= "/*".$comments."*/".PHP_EOL.PHP_EOL;
 
    $output .= "require_once('class.databank.php');".PHP_EOL;
 
    $output .= "require_once('class.".$classname.".php');".PHP_EOL.PHP_EOL;
 
    $output .= "class ".$classname."DB extends databank{".PHP_EOL.PHP_EOL;
 
 
 
    /*************************
 
            CONSTRUCT
 
    *************************/
 
 
    $output .= "\t".'public function __construct(){
 
        parent::__construct();
 
        $sql = "
 
            CREATE TABLE IF NOT EXISTS `'.$classname.'` ('.PHP_EOL;
 
 
    $fieldoutput = "";
 
            foreach ($_SESSION['fields'] as $field) {
 
                if ($field->isnullable == "Nullable"){
 
                    $nullable = "NULL";
 
                }else{
 
                    $nullable = "NOT NULL";
 
                }
 
                if (empty($field->isdefault)){
 
                    $default = "";
 
                }else{
 
                    if ($field->isdefault == "CURRENT_TIMESTAMP"){
 
                        $default = "default " . $field->isdefault . "";
 
                    }else{
 
                        $default = "default '" . $field->isdefault . "'";    
 
                    }
 
                }
 
                if ($field->isautoupdate == "Autoupdate"){
 
                    $autoupdate = "ON UPDATE CURRENT_TIMESTAMP";
 
                }else{
 
                    $autoupdate = "";
 
                }
 
                if ($field->iskey == "Key"){
 
                    $key = "AUTO_INCREMENT";
 
                    $foundKeys = $field->name;
 
                }else{
 
                    $key = "";
 
                }
 
                // 
 
                $fieldoutput .= "\t\t\t\t`" . $field->name . "` " . $field->istype . " " . $default . " " . $nullable . " " . $autoupdate . " " . $key . ",".PHP_EOL;
 
            }
 
            if (empty($foundKeys)){
 
                $fieldoutput = PHP_EOL."\t\t\t\t`id` int(11) NOT NULL AUTO_INCREMENT,".PHP_EOL . $fieldoutput;
 
                $fieldoutput = $fieldoutput . "\t\t\t\tPRIMARY KEY (`id`)";
 
            }else{
 
                $fieldoutput = $fieldoutput . "\t\t\t\tPRIMARY KEY (`".$foundKeys."`)";
 
            }
 
        
 
        $output .= $fieldoutput.PHP_EOL;
 
 
 
        $output .= "\t\t\t".') ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;";
 
        try {
 
            $connection = $this->connect();
 
            $connection->exec($sql);
 
            return true;
 
        }catch (PDOException $e) {
 
            return false;
 
        }
 
    }'.PHP_EOL.PHP_EOL;
 
 
 
    /*************************
 
            INSERT
 
    *************************/
 
 
    $foundKeys = "";
 
    $paramBind = "";
 
    $fieldList = "";
 
    $output .= "\t".'public function insertAsObject($object){'.PHP_EOL;
 
    $output .=    "\t\t".'$connection = $this->connect(); 
 
                $stmt = $connection->prepare("insert into '.$classname.' values(';
 
                    foreach ($_SESSION['fields'] as $field) {
 
                        if ($field->iskey == "Key"){
 
                            $fieldList .= "null,";
 
                            $foundKeys = "true";
 
                        }else{
 
                            $fieldList .= ":" . $field->name . ",";
 
                            $paramBind .="\t\t".'$stmt->bindParam(":'.$field->name.'", $object->'.$field->name.');'.PHP_EOL;
 
                        }
 
                        
 
                    }
 
                    if ($foundKeys == ""){
 
                        $output .= "null," . substr($fieldList, 0, -1);
 
                    }else{
 
                        $output .= substr($fieldList, 0, -1);    
 
                    }
 
                    
 
                    $output .= ');");';
 
 
 
    $output .=    PHP_EOL.$paramBind . "\t\t".'return $stmt->execute();'.PHP_EOL;
 
    $output .= "\t".'}'.PHP_EOL.PHP_EOL;
 
 
 
    /*************************
 
            GET ALL
 
    *************************/
 
 
 
    $output .= "\t".'public function getAll(){
 
        $connection = $this->connect(); 
 
        $sql = "SELECT * FROM '.$classname.'";
 
        $result = $connection->query($sql);
 
        return $result->fetchAll(PDO::FETCH_OBJ);
 
    }'.PHP_EOL.PHP_EOL;
 
 
    /*************************
 
            GET BY Key
 
    *************************/
 
    $key = "";
 
    foreach ($_SESSION['fields'] as $field) {
 
            if ($field->iskey == "Key"){
 
                $key = $field;
 
            }
 
        }
 
    $output .= "\t".'public function getByKey($key){
 
        $connection = $this->connect(); 
 
        $stmt = $connection->prepare("SELECT * FROM '.$classname.' WHERE '.$key->name.' = :id");
 
        $stmt->bindParam(":id", $key);
 
        $stmt->execute();
 
        return $stmt->fetchObject("'.$classname.'");
 
    }'.PHP_EOL.PHP_EOL;
 
 
    /*************************
 
            UPDATE
 
    *************************/
 
    $paramBind = "";
 
    $key = "";
 
    $output .= "\t".'public function update($object){
 
        $connection = $this->connect(); 
 
        $sql= "update '.$classname .' set ';
 
        foreach ($_SESSION['fields'] as $field) {
 
            if ($field->iskey != "Key"){
 
                $output .= $field->name.' = :'.$field->name.',';
 
            }else{
 
                $key = $field;
 
            }
 
        }
 
        $output = substr($output, 0, -1);
 
        $output .= ' where '.$key->name.'= :'.$key->name.'";'.PHP_EOL;
 
 
        $output .= "\t\t".'$stmt = $connection->prepare($sql);'.PHP_EOL;
 
 
        foreach ($_SESSION['fields'] as $field) {
 
            $paramBind .="\t\t".'$stmt->bindParam(":'.$field->name.'", $object->'.$field->name.');'.PHP_EOL;
 
        }
 
    $output .=    $paramBind;
 
    $output .= "\t\t".'return $stmt->execute();'.PHP_EOL;
 
    $output .= "\t".'}'.PHP_EOL.PHP_EOL;
 
 
 
 
    /*************************
 
        DELETE
 
    *************************/
 
 
    $key = "";
 
    foreach ($_SESSION['fields'] as $field) {
 
            if ($field->iskey == "Key"){
 
                $key = $field;
 
            }
 
        }
 
    $output .= "\t".'public function delete($id){'.PHP_EOL;
 
 
            $output .= "\t\t".'$connection = $this->connect();'.PHP_EOL;
 
        $output .= "\t\t".'$stmt = $connection->prepare("DELETE FROM '.$classname .' WHERE '.$key->name.' = :'.$key->name.'");    '.PHP_EOL;
 
        $output .= "\t\t".'$stmt->bindParam(":'.$key->name.'", $id);'.PHP_EOL;
 
        $output .= "\t\t".'$stmt->execute();'.PHP_EOL;
 
 
    $output .= "\t".'}'.PHP_EOL.PHP_EOL;
 
    
 
    
 
    $output .= "}".PHP_EOL;
 
    $output .= "?>";
 
    return $output;
 
 
}
 
 
//$tmpName = "./class.".$_POST['classname'].".php";
 
//file_put_contents($tmpName, genereerCLASS($_POST['classname'],$_POST['comments']));
 
file_put_contents("output/class.".$_POST['classname'].".php", genereerCLASS($_POST['classname'],$_POST['comments']));
 
file_put_contents("output/class.".$_POST['classname']."DB.php", maakDBCLASS($_POST['classname'],$_POST['comments']));
 
 
 
 
/*
 
copieer ook de DATabank klasse zelf mee...
 
*/
 
copy("./sourceData/class.databank.php", "./output/class.databank.php");
 
 
 
 
 
 
 
 
// Get real path for our folder
 
$rootPath = realpath('output');
 
 
// Initialize archive object
 
$zip = new ZipArchive();
 
$tijd = date("U");
 
$zip->open("./zips/".$_POST['classname'].$tijd.'.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
 
 
// Create recursive directory iterator
 
/** @var SplFileInfo[] $files */
 
$files = new RecursiveIteratorIterator(
 
    new RecursiveDirectoryIterator($rootPath),
 
    RecursiveIteratorIterator::LEAVES_ONLY
 
);
 
 
foreach ($files as $name => $file)
 
{
 
    // Skip directories (they would be added automatically)
 
    if (!$file->isDir())
 
    {
 
        // Get real and relative path for current file
 
        $filePath = $file->getRealPath();
 
        $relativePath = substr($filePath, strlen($rootPath) + 1);
 
 
        // Add current file to archive
 
        $zip->addFile($filePath, $relativePath);
 
    }
 
}
 
echo "Zip file created: " . $zip->numFiles . " files in zip<br>";
 
// Zip archive will be created only after closing object
 
$zip->close();
 
 
echo "<a href='./zips/".$_POST['classname'].$tijd.".zip''>download zip file</a>";
 
 
// delete all files in the output folder (cleanup)
 
 
 
?>
 
 |