Arquivos
wMind/mind3rd/API/classes/DAO/Project.php
T
Felipe Nascimento de Moura 04aa11aaab fixed bugs around default values and fks which were also pks
Also, added the program dqb to build DDL codes
Working on postgres DDL generator
2011-03-30 22:09:55 -03:00

260 linhas
6.0 KiB
PHP
Arquivo Executável

<?php
/**
* This file is part of TheWebMind 3rd generation.
*
* Notice that, these packages are being used only for documentation,
* not to organize the classes.
*
* @author Felipe Nascimento de Moura <felipenmoura@gmail.com>
* @license licenses/mind3rd.license
*/
namespace DAO;
/**
* Deals with the SQLite to retrieve or interact with project's information.
* It deals a lot with version control of the current project.
*
* @package VCS
* @subpackage DAO
* @author felipe
*/
class Project{
public $data= null;
public $versionId= 0;
public $tag= '';
public $description= '';
public $originalCode= '';
public $framework= '';
/**
* Gets the list of entities in the current version of the analyzed project.
* It returns an array with all the entity's name, id and version.
*
* @param integer $vs
* @return Array An array with all the entities for the project in the curret
* or passed(if passed) version.
*/
public function getCurrentEntities($vs=false, $name=false, $pk=false)
{
$qr= "SELECT entity.name as name,
pk_entity,
entity.version as version
from entity,
version
where fk_project = ".\Mind::$currentProject['pk_project']."
and fk_version= pk_version
and status = ".\COMMIT_STATUS_OK;
if($vs)
$qr.= " and fk_version = ".$vs."";
if($name)
$qr.= " and entity.name = '".$name."'";
if($pk)
$qr.= " and pk_entity = ".$pk."";
$entities= $this->db->query($qr);
return $entities;
}
/**
* Inserts the passed property into the SQLite database.
* It inserts the passed property as a property of the table with the
* id equals to the passed $enKey.
*
* @param \MindProperty $prop
* @param integer $enKey
* @return boolean True if everything went ok, an error otherwise
*/
public function insertProperty(\MindProperty $prop, $enKey)
{
$refs= "";
if($prop->refTo)
{
$refs= $prop->refTo[0]->name.".".$prop->refTo[1]->name;
}
$qr= "INSERT into property
(
name,
type,
size,
options,
is_pk,
default_value,
unique_value,
required,
comment,
status,
fk_entity,
ref_to_property
)
VALUES
(
'".$prop->name."',
'".$prop->type."',
'".$prop->size."',
'".JSON_encode($prop->options)."',
'".(($prop->key)? 1: 0)."',
'".$prop->default."',
'".$prop->unique."',
'".$prop->required."',
'".$prop->comment."',
".\COMMIT_STATUS_OK.",
".$enKey.",
'".$refs."'
)";
return $this->db->execute($qr);
}
/**
* Get all the properties of the passed entity.
* It returns an associative array(with the property name in each index) of
* all the properties the passed entity has.
*
* @param array $entity
* @return Array
*/
public function getProperties(Array $entity)
{
$qr= "select pk_property,
property.name as name,
type,
size,
options,
is_pk,
default_value,
unique_value,
required,
comment,
ref_to_property
from property,
entity
where pk_entity = fk_entity
and entity.pk_entity='".$entity['pk_entity']."'";
$props= $this->db->query($qr);
$ret= Array();
foreach($props as $prop)
{
$ret[$prop['name']]= $prop;
}
return $ret;
}
/**
* Marks an entity as changed from the last version.
* It updates the entity's status to changed, in the previous version,
* the new version will have it with the OK flag.
*
* @param array $en
* @return boolean True in case of success, otherwise, generates an error
*/
public function markAsChanged(Array $en)
{
$qr= "UPDATE entity
SET status= ".\COMMIT_STATUS_CHANGED."
WHERE pk_entity= ".$en['pk_entity'];
return $this->db->execute($qr);
}
/**
* Marks an entity as dropped from the last version.
* The next version has not the passed entity, so, it will be marked
* as dropped, in the previous version.
*
* @param array $en
* @return boolean True in case of success, otherwise, generates an error
*/
public function markAsDopped(Array $en)
{
$qr= "UPDATE entity
SET status= ".\COMMIT_STATUS_DROP."
WHERE pk_entity= ".$en['pk_entity'];
return $this->db->execute($qr);
}
/**
* Inserts a new version into the SQLite database.
* It also starts the versonId variable to the next version.
*
* @return boolean True in case of success, otherwise, generates an error
*/
public function addNewVersion()
{
$this->data['version']++;
$qr_vsProj= "INSERT into version
(
version,
tag,
obs,
originalcode,
machine_lang,
framework,
database,
fk_project,
fk_user
)
values
(
'".$this->data['version']."',
'".$this->tag."',
'".$this->description."',
'".$this->originalCode."',
'".$this->data['technology']."',
'".$this->framework."',
'".$this->data['database_drive']."',
".$this->data['pk_project'].",
".$_SESSION['pk_user']."
)";
if($this->db->execute($qr_vsProj))
{
$this->versionId= $this->db->lastInsertedId;
return true;
}
return false;
}
/**
* Inserts an entity into the SQLite database.
* Adds an entity into the database, marking it with the passed status
* and version.
*
* @param \MindEntity $entity
* @param integer $vs
* @param integer $status
* @return integer the inserted entity id(the primary key, itself)
*/
public function insertEntity(\MindEntity $entity,
$vs=1,
$status=\COMMIT_STATUS_OK)
{
$qr= "INSERT into entity
(
name,
version,
status,
fk_version
)
VALUES
(
'".$entity->name."',
".$vs.",
".$status.",
".$this->versionId."
)";
$entities= $this->db->execute($qr);
$enKey= $this->db->lastInsertedId;
foreach($entity->properties as &$prop)
{
$this->insertProperty($prop, $enKey);
}
return $enKey;
}
/**
* The constructor.
*/
public function __construct()
{
$this->db= new \MindDB();
}
}