<?php
namespace ProjectBiz\DatabaseBundle\Entity;
use ProjectBiz\DatabaseBundle\Database\GenericRepositoryFactory;
use ProjectBiz\DatabaseBundle\Database\Criteria\CriteriaComposite;
use Doctrine\ORM\Mapping as ORM;
use ProjectBiz\DatabaseBundle\Database\Criteria\CriteriaBuilder;
/**
* @ORM\Entity
* @ORM\Table(name="ColumnDefinition")
*/
class ColumnDefinition
{
/**
* @ORM\Id
* @ORM\Column(type="integer", name="ColDefinition_ID")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(name="ColDefinition_InternalTablename", type="string", length=50)
*/
private $table;
/**
* @ORM\Column(name="ColDefinition_InternalColumnname", type="string", length=50)
*/
private $column;
/**
* @ORM\Column(name="ColDefinition_ColumnCaption", type="string", length=50)
*/
private $caption;
/**
* @ORM\Column(name="ColDefinition_StandardValue", type="string", length=50)
*/
private $defaultValue;
/**
* @ORM\Column(name="ColDefinition_ColumnType", type="string", length=50)
*/
private $type;
/**
* @ORM\Column(name="ColDefinition_Tooltip", type="string", length=500)
*/
private $tooltip;
/**
* @ORM\Column(name="ColDefinition_Responsible_Name",type="string", length=500)
*/
private $responsible;
/**
* @ORM\Column(name="ColDefinition_WidthPx", type="integer")
*/
private $width;
/**
* @ORM\Column(name="ColDefinition_PermissionRead", type="bigint")
*/
private $read_rights;
/**
* Invalidates $read_rights to ensure some columns are unvisible
* if $read_rights are set by mistake
*
* @ORM\Column(name="ColDefinition_PermissionReadOverwrite", type="bigint")
*/
private $read_rights_overwrite;
/**
* @ORM\Column(name="ColDefinition_PermissionWrite", type="bigint")
*/
private $write_rights;
/**
* Invalidates $write_rights to ensure some columns are unwritable
* if $write_rights are set by mistake
*
* @ORM\Column(name="ColDefinition_PermissionWriteOverwrite", type="bigint")
*/
private $write_rights_overwrite;
/**
* @ORM\Column(name="ColDefinition_BackColour", type="string", length=50)
*/
private $background_color;
/**
* @ORM\Column(name="ColDefinition_ColorCondition", type="string", length=20)
*/
private $color_condition;
/**
* @ORM\Column(name="ColDefinition_Active", type="boolean")
*/
private $active;
/**
* @ORM\Column(name="ColDefinition_SourceTable", type="string", length=50)
*/
private $source_table;
/**
* @ORM\Column(name="ColDefinition_SourceFK", type="string", length=50)
*/
private $source_foreign_key;
/**
* SourceCriterias for querying data from DB.
*
* An example is:
* {"type":"comparison","operator":"=",
* "left":{"type":"unmapped_column","column_name":"Price01_LINK_PriceListOverview_ID"},
* "right":{"type":"constant","value":"null"}
* }
*
* @ORM\Column(name="ColDefinition_SourceCriteria", type="string")
*/
private $source_criteria;
/**
* Inject varibales into source_criteria.
*
* An example is {"[request][price_list_id]":"[right][value]"}
*
* @ORM\Column(name="ColDefinition_SourceCriteriaInjection", type="string")
*/
private $source_criteria_injection;
/**
* @ORM\Column(name="ColDefinition_SecHeaderType", type="string", length=50)
*/
private $secondary_header;
/**
* @ORM\Column(name="ColDefinition_SourceColumn", type="string", length=50)
*/
private $source_column;
/**
* @ORM\Column(name="ColDefinition_SourceView", type="string", length=255)
*/
private $source_view;
/**
* @ORM\Column(name="ColDefinition_ControllingClass", type="string", length=255)
*/
private $controlling_class;
/**
* @ORM\Column(name="ColDefinition_AutoIncrementID", type="bigint")
*/
private $auto_increment_id;
/**
* @ORM\Column(name="ColDefinition_NotNull", type="boolean")
*/
private $not_null;
/**
* @ORM\Column(name="ColDefinition_ExcludeFromCloning", type="boolean")
*/
private $exclude_from_cloning;
/**
* @ORM\Column(name="ColDefinition_Encrypt", type="boolean")
*/
private $encrypt;
/**
* Permissions as bitsum for direct cell editing.
*
* @ORM\Column(name="ColDefinition_DirectEditPermissions", type="bigint")
*/
private $direct_edit_permissions;
/**
* @ORM\Column(name="ColDefinition_InputConstraint", type="string", length=255)
*/
private $input_constraint;
/**
* @ORM\Column(name="ColDefinition_MaximumLength", type="bigint")
*/
private $maximum_length;
private $typeCache = null;
private $reverseCache = null;
private $typeInitialized = false;
public function getId()
{
return $this->id;
}
public function getTable()
{
return $this->table;
}
public function getColumn()
{
return $this->column;
}
public function getCaption()
{
return $this->caption;
}
public function isActive()
{
return $this->active;
}
public function getDefault()
{
return $this->defaultValue;
}
public function getReverseProperty()
{
if (!$this->typeInitialized) {
$this->buildType();
}
return $this->reverseCache;
}
private function buildType()
{
$this->typeCache = null;
if (isset($this->type) && !empty($this->type)) {
if (strpos($this->type, 'fer:') === 0) {
$parts = explode(':', $this->type);
$this->typeCache = 'fer';
$this->reverseCache = $parts[1];
} else {
$this->typeCache = $this->type;
}
}
$this->typeInitialized = true;
}
public function getTooltip()
{
$lasttooltip = $this->tooltip;
$lastresponsible = $this->responsible;
$lasttooltip =str_replace("<p>","", str_replace("</p>","",$lasttooltip));
if (null !== $lastresponsible) {
$lasttooltip=$lasttooltip." --Verantwortlicher:".$lastresponsible." --";
}
return $lasttooltip;
}
public function getWidth()
{
return isset($this->width)?$this->width:0;
}
public function getBackgroundColor()
{
return $this->background_color;
}
public function getColorCondition()
{
return $this->color_condition;
}
public function getSource()
{
if ((!empty($this->source_table) && !empty($this->source_foreign_key) && !empty($this->source_column))) {
return [
'table' => $this->source_table,
'foreign_key' => $this->source_foreign_key,
'display_column' => $this->source_column,
'view' => array_unique(
array_merge(
[$this->source_column, $this->source_foreign_key],
!empty($this->source_view)?explode(',', $this->source_view):[]
)
),
];
} else {
return null;
}
}
/**
* @param bool $asArray
* @return mixed
*/
public function getSourceCriteria($asArray = false)
{
if ($asArray) {
return json_decode($this->source_criteria, true);
}
$result = null;
if (null !== $this->source_criteria) {
$result = (new CriteriaBuilder())->buildFromJson($this->source_criteria);
}
return $result;
}
public function getSourceCriteriaInjection()
{
return json_decode($this->source_criteria_injection, true);
}
public function getControllingClass()
{
return isset($this->controlling_class)?explode(',', $this->controlling_class):[];
}
public function getSecondaryHeader()
{
return $this->secondary_header;
}
public function isVirtual()
{
return ($this->getType() === 'ref') || ($this->getType() === 'fer');
}
public function getType()
{
if (!$this->typeInitialized) {
$this->buildType();
}
return $this->typeCache;
}
public function checkReadRights($value)
{
try {
/*
* read_rights_overwrite are set by superadmin only and have a higher priority
*/
if ($this->read_rights_overwrite) {
return (gmp_cmp(gmp_and(gmp_init($this->read_rights_overwrite), gmp_init($value)), 0) > 0);
}
return (gmp_cmp(gmp_and(gmp_init($this->read_rights), gmp_init($value)), 0) > 0);
} catch (\Exception $e) {
throw new \Exception('Error while checking read permissions for column: ' . $this->column, 0, $e);
}
}
public function getReadRights()
{
return $this->read_rights;
}
public function getReadRightsOverwrite()
{
return $this->read_rights_overwrite;
}
public function checkWriteRights($value)
{
try {
/*
* write_rights_overwrite are set by superadmin only and have a higher priority
*/
if ($this->write_rights_overwrite) {
return (gmp_cmp(gmp_and(gmp_init($this->write_rights_overwrite), gmp_init($value)), 0) > 0);
}
return (gmp_cmp(gmp_and(gmp_init($this->write_rights), gmp_init($value)), 0) > 0);
} catch (\Exception $e) {
throw new \Exception('Error while checking write permissions for column: ' . $this->column, 0, $e);
}
}
public function getWriteRights()
{
return $this->write_rights;
}
public function getWriteRightsOverwrite()
{
return $this->write_rights_overwrite;
}
public function getAutoIncrementID()
{
return $this->auto_increment_id;
}
public function getNotNull()
{
return $this->not_null;
}
public function getEncrypt()
{
return $this->encrypt;
}
public function getExcludeFromCloning()
{
return $this->exclude_from_cloning;
}
public function getDirectEditPermissions()
{
return $this->direct_edit_permissions;
}
public function getInputConstraint()
{
return $this->input_constraint;
}
public function getMaximumLength()
{
return $this->maximum_length;
}
}