Files
nibiru-framework.com/core/c/model.php

149 lines
6.0 KiB
PHP
Executable File

<?php
/**
* Created by PhpStorm.
* User: kasdorf
* Date: 08.03.18
* Time: 11:33
*/
namespace Nibiru;
class Model extends Table
{
const PHP_FILE_ENDING = '.php';
public function __construct($argv)
{
if(Config::getInstance()->getConfig()[IMysql::SETTINGS_DATABASE][IMysql::PLACE_IS_ACTIVE])
{
parent::__construct($argv);
$this->createOutFolder();
$this->createClassFiles();
}
else
{
return false;
}
}
private function createOutFolder()
{
if(!is_dir($this->getFolderOut()))
{
mkdir($this->getFolderOut(), 0777, true);
chmod($this->getFolderOut(), 0777);
}
}
private function createClassFiles()
{
if($this->getTable()!="")
{
$this->generateClassByTableName( $this->getTable() );
}
else
{
$tables = array_keys($this->getTables());
foreach ($tables as $table)
{
$this->generateClassByTableName( $table );
}
}
}
private function generateClassByTableName( $table = false )
{
if($table)
{
$pclassname = explode('_', $table);
$classname = "";
for($i=0; count($pclassname)>$i; $i++)
{
if($i!=0)
{
$classname .= ucfirst($pclassname[$i]);
}
else
{
$classname = $pclassname[$i];
}
}
if(Config::getInstance()->getConfig()[self::CONFIG_SECTION][self::DB_OVERWRITE_MODELS])
{
unlink($this->getFolderOut() . '/' . $classname . self::PHP_FILE_ENDING);
}
if(!file_exists($this->getFolderOut() . '/' . $classname . self::PHP_FILE_ENDING))
{
fclose( fopen( $this->getFolderOut() . '/' . $classname . self::PHP_FILE_ENDING, 'w') );
$tablefields = $this->getTables()[$table];
$numItems = count($tablefields);
$i = 0;
$fieldarray = "";
$parameters = "";
foreach($this->getTables()[$table] as $field)
{
if( $i==0 )
{
$fieldarray .= 'array( ' . "\n";
}
if( ++$i === $numItems )
{
$parameters .= "private $".$field.";\n\t";
$setters .= "public function _set".str_replace('_', '', ucfirst($field))."($".$field.")\n\t{\n\t\t\$this->".$field." = $".$field.";\n\t}\n\n\t";
$getters .= "public function get".str_replace('_', '', ucfirst($field))."()\n\t{\n\t\treturn \$this->".$field.";\n\t}\n\n\t";
$fieldarray .= "\t\t\t\t\t\t\t\t'" . $field . "' => '" . $field . "'"."\n\t\t\t\t\t\t)";
}
else
{
$parameters .= "private $".$field.";\n\t";
$setters .= "public function _set".str_replace('_', '', ucfirst($field))."($".$field.")\n\t{\n\t\t\$this->".$field." = $".$field.";\n\t}\n\n\t";
$getters .= "public function get".str_replace('_', '', ucfirst($field))."()\n\t{\n\t\treturn \$this->".$field.";\n\t}\n\n\t";
$fieldarray .= "\t\t\t\t\t\t\t\t'" . $field . "' => '" . $field . "',\n";
}
}
$template = str_replace('[CLASSPARAMETERS]', $parameters, $this->getModelTemplate());
$template = str_replace('[FIELDARRAY]', $fieldarray, $template);
$template = str_replace('[SETTERS]', $setters, $template);
$template = str_replace('[GETTERS]', $getters, $template);
$template = str_replace('[TABLE]', $table, $template);
$template = str_replace('[CLASSNAME]', ucfirst($classname), $template);
$template = str_replace('[FOLDERNAME]', ucfirst($this->getFolderNamespace()), $template);
$template = str_replace('[DBSECTION]', $this->getConfigSection(), $template);
if($this->getDatabaseDriver()==self::DB_DRIVER_POSTGRESS)
{
if(Config::getInstance()->getConfig()[self::CONFIG_SECTION]['odbc'])
{
$template = str_replace('[ADAPTER]', self::ADAPTER_POSTGRES, $template);
$template = str_replace('[CONNECTOR]', self::ADAPTER_POSTGRES, $template);
}
else
{
$template = str_replace('[ADAPTER]', self::ADAPTER_POSTGRESQL, $template);
$template = str_replace('[CONNECTOR]', self::ADAPTER_POSTGRESQL, $template);
}
}
if($this->getDatabaseDriver()==self::DB_DRIVER_MYSQL)
{
$template = str_replace('[ADAPTER]', self::ADAPTER_MYSQL, $template);
$template = str_replace('[CONNECTOR]', self::ADAPTER_PDO, $template);
}
if(Config::getInstance()->getConfig()[self::CONFIG_SECTION][self::DB_OVERWRITE_MODELS])
{
file_put_contents($this->getFolderOut() . '/' . $classname . self::PHP_FILE_ENDING, $template);
chmod($this->getFolderOut() . '/' . $classname . self::PHP_FILE_ENDING, 0777);
}
else
{
if(!filesize($this->getFolderOut() . '/' . $classname . self::PHP_FILE_ENDING))
{
file_put_contents($this->getFolderOut() . '/' . $classname . self::PHP_FILE_ENDING, $template);
chmod($this->getFolderOut() . '/' . $classname . self::PHP_FILE_ENDING, 0777);
}
}
}
}
}
}