mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-20 09:08:42 +02:00
Implemented Track #582: "stable name" for synchro_data_xxx tables.
SVN:trunk[2132]
This commit is contained in:
@@ -54,7 +54,8 @@ class SynchroDataSource extends cmdbAbstractObject
|
||||
MetaModel::Init_AddAttribute(new AttributeExternalKey("user_id", array("targetclass"=>"User", "jointype"=>null, "allowed_values"=>null, "sql"=>"user_id", "is_null_allowed"=>true, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeExternalKey("notify_contact_id", array("targetclass"=>"Contact", "jointype"=>null, "allowed_values"=>null, "sql"=>"notify_contact_id", "is_null_allowed"=>true, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeClass("scope_class", array("class_category"=>"bizmodel,addon/authentication", "more_values"=>"", "sql"=>"scope_class", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
|
||||
MetaModel::Init_AddAttribute(new AttributeString("database_table_name", array("allowed_values"=>null, "sql"=>"database_table_name", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array(), "validation_pattern" => "^[A-Za-z0-9_]*$")));
|
||||
|
||||
// Declared here for a future usage, but ignored so far
|
||||
MetaModel::Init_AddAttribute(new AttributeString("scope_restriction", array("allowed_values"=>null, "sql"=>"scope_restriction", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
|
||||
@@ -86,7 +87,7 @@ class SynchroDataSource extends cmdbAbstractObject
|
||||
// Display lists
|
||||
MetaModel::Init_SetZListItems('details', array(
|
||||
'col:0'=> array(
|
||||
'fieldset:SynchroDataSource:Description' => array('name','description','status','scope_class','user_id','notify_contact_id','url_icon','url_application')),
|
||||
'fieldset:SynchroDataSource:Description' => array('name','description','status','scope_class','user_id','notify_contact_id','url_icon','url_application', 'database_table_name')),
|
||||
'col:1'=> array(
|
||||
'fieldset:SynchroDataSource:Reconciliation' => array('reconciliation_policy','action_on_zero','action_on_one','action_on_multiple'),
|
||||
'fieldset:SynchroDataSource:Deletion' => array('user_delete_policy','full_load_periodicity','delete_policy','delete_policy_update','delete_policy_retention'))
|
||||
@@ -98,6 +99,15 @@ class SynchroDataSource extends cmdbAbstractObject
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||
}
|
||||
|
||||
public function DisplayBareProperties(WebPage $oPage, $bEditMode = false, $sPrefix = '', $aExtraParams = array())
|
||||
{
|
||||
if (!$this->IsNew())
|
||||
{
|
||||
$this->Set('database_table_name', $this->GetDataTable());
|
||||
}
|
||||
parent::DisplayBareProperties($oPage, $bEditMode, $sPrefix, $aExtraParams);
|
||||
}
|
||||
|
||||
public function DisplayBareRelations(WebPage $oPage, $bEditMode = false)
|
||||
{
|
||||
if (!$this->IsNew())
|
||||
@@ -476,7 +486,7 @@ EOF
|
||||
|
||||
public function GetAttributeFlags($sAttCode, &$aReasons = array(), $sTargetState = '')
|
||||
{
|
||||
if (($sAttCode == 'scope_class') && (!$this->IsNew()))
|
||||
if ( (($sAttCode == 'scope_class') || ($sAttCode == 'database_table_name')) && (!$this->IsNew()))
|
||||
{
|
||||
return OPT_ATT_READONLY;
|
||||
}
|
||||
@@ -574,6 +584,13 @@ EOF
|
||||
|
||||
if ($this->IsNew())
|
||||
{
|
||||
// Compute the database_table_name
|
||||
$sDataTable = $this->Get('database_table_name');
|
||||
if (!empty($sDataTable))
|
||||
{
|
||||
$this->Set('database_table_name', $this->ComputeDataTableName());
|
||||
}
|
||||
|
||||
// When inserting a new datasource object, also create the SynchroAttribute objects
|
||||
// for each field of the target class
|
||||
// Create all the SynchroAttribute records
|
||||
@@ -659,6 +676,17 @@ EOF
|
||||
{
|
||||
$this->m_aCheckIssues[] = Dict::Format('Class:SynchroDataSource/Error:DeletePolicyUpdateMustBeSpecified');
|
||||
}
|
||||
|
||||
// When creating the data source with a specified database_table_name, this table must NOT exist
|
||||
if ($this->IsNew())
|
||||
{
|
||||
$sDataTable = $this->GetDataTable();
|
||||
if (!empty($sDataTable) && CMDBSource::IsTable($this->GetDataTable()))
|
||||
{
|
||||
// Hmm, the synchro_data_xxx table already exists !!
|
||||
$this->m_aCheckIssues[] = Dict::Format('Class:SynchroDataSource/Error:DataTableAlreadyExists', $this->GetDataTable());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function GetTargetClass()
|
||||
@@ -668,12 +696,34 @@ EOF
|
||||
|
||||
public function GetDataTable()
|
||||
{
|
||||
$sName = strtolower($this->GetTargetClass());
|
||||
$sName = str_replace('\'"&@|\\/ ', '_', $sName); // Remove forbidden characters from the table name
|
||||
$sName .= '_'.$this->GetKey(); // Add a suffix for unicity
|
||||
$sTable = MetaModel::GetConfig()->GetDBSubName()."synchro_data_$sName"; // Add the prefix if any
|
||||
$sTable = $this->Get('database_table_name');
|
||||
if (empty($sTable))
|
||||
{
|
||||
$sTable = $this->ComputeDataTableName();
|
||||
}
|
||||
return $sTable;
|
||||
}
|
||||
|
||||
protected function ComputeDataTableName()
|
||||
{
|
||||
$sDBTableName = $this->Get('database_table_name');
|
||||
if (empty($sDBTableName))
|
||||
{
|
||||
$sDBTableName = strtolower($this->GetTargetClass());
|
||||
$sDBTableName = preg_replace('/[^A-za-z0-9_]/', '_', $sDBTableName); // Remove forbidden characters from the table name
|
||||
$sDBTableName .= '_'.$this->GetKey(); // Add a suffix for unicity
|
||||
}
|
||||
else
|
||||
{
|
||||
$sDBTableName = preg_replace('/[^A-za-z0-9_]/', '_', $sDBTableName); // Remove forbidden characters from the table name
|
||||
}
|
||||
$sPrefix = MetaModel::GetConfig()->GetDBSubName()."synchro_data_";
|
||||
if (strpos($sDBTableName, $sPrefix) !== 0)
|
||||
{
|
||||
$sDBTableName = $sPrefix.$sDBTableName;
|
||||
}
|
||||
return $sDBTableName;
|
||||
}
|
||||
|
||||
/**
|
||||
* When the new datasource has been created, let's create the synchro_data table
|
||||
|
||||
Reference in New Issue
Block a user