Read-only mode - draft

SVN:trunk[961]
This commit is contained in:
Romain Quetiez
2010-11-22 14:13:49 +00:00
parent b30d6c4888
commit d0f168adbb
5 changed files with 79 additions and 7 deletions

View File

@@ -661,6 +661,15 @@ EOF
} }
$sLogOffMenu .= "</ul>\n</li>\n</ul></span>\n"; $sLogOffMenu .= "</ul>\n</li>\n</ul></span>\n";
if (MetaModel::DBIsReadOnly())
{
$sApplicationMode = Dict::S('UI:ApplicationReadOnly');
}
else
{
$sApplicationMode = '';
}
//$sLogOffMenu = "<span id=\"logOffBtn\" style=\"height:55px;padding:0;margin:0;\"><img src=\"../images/onOffBtn.png\"></span>"; //$sLogOffMenu = "<span id=\"logOffBtn\" style=\"height:55px;padding:0;margin:0;\"><img src=\"../images/onOffBtn.png\"></span>";
echo '<div id="left-pane" class="ui-layout-west">'; echo '<div id="left-pane" class="ui-layout-west">';
@@ -687,8 +696,8 @@ EOF
echo '<div class="ui-layout-center">'; echo '<div class="ui-layout-center">';
echo ' <div id="top-bar" style="width:100%">'; echo ' <div id="top-bar" style="width:100%">';
echo ' <div id="global-search"><form action="../pages/UI.php"><table><tr><td id="g-search-input"><input type="text" name="text" value="'.$sText.'"'.$sOnClick.'/></td>'; echo ' <div id="global-search"><form action="../pages/UI.php"><table><tr><td></td><td id="g-search-input"><input type="text" name="text" value="'.$sText.'"'.$sOnClick.'/></td>';
echo '<td><input type="image" src="../images/searchBtn.png"/></a></td>'; echo '<td><input type="image" src="../images/searchBtn.png"/></a></td><td>'.$sApplicationMode.'</td>';
echo '<td><a style="background:transparent;" href="http://www.combodo.com/itop-help" target="_blank"><img style="border:0;padding-left:20px;padding-right:10px;" title="'.Dict::S('UI:Help').'" src="../images/help.png"/></td>'; echo '<td><a style="background:transparent;" href="http://www.combodo.com/itop-help" target="_blank"><img style="border:0;padding-left:20px;padding-right:10px;" title="'.Dict::S('UI:Help').'" src="../images/help.png"/></td>';
echo '<td style="padding-right:20px;padding-left:10px;">'.$sLogOffMenu.'</td><td><input type="hidden" name="operation" value="full_text"/></td></tr></table></form></div>'; echo '<td style="padding-right:20px;padding-left:10px;">'.$sLogOffMenu.'</td><td><input type="hidden" name="operation" value="full_text"/></td></tr></table></form></div>';
//echo '<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="hidden" name="operation" value="full_text"/></td></tr></table></form></div>'; //echo '<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="hidden" name="operation" value="full_text"/></td></tr></table></form></div>';

View File

@@ -134,6 +134,14 @@ class Config
'source_of_value' => '', 'source_of_value' => '',
'show_in_conf_sample' => false, 'show_in_conf_sample' => false,
), ),
'read_only' => array(
'type' => 'bool',
'description' => 'Freeze the data for administration purposes - administrators can still do anything... in appearance!',
'default' => false,
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => false,
),
); );
public function IsProperty($sPropCode) public function IsProperty($sPropCode)

View File

@@ -849,7 +849,14 @@ abstract class DBObject
$sInsertSQL = "INSERT INTO `$sTable` (".join(",", $aFieldsToWrite).") VALUES (".join(", ", $aValuesToWrite).")"; $sInsertSQL = "INSERT INTO `$sTable` (".join(",", $aFieldsToWrite).") VALUES (".join(", ", $aValuesToWrite).")";
$iNewKey = CMDBSource::InsertInto($sInsertSQL); if (MetaModel::DBIsReadOnly())
{
$iNewKey = -1;
}
else
{
$iNewKey = CMDBSource::InsertInto($sInsertSQL);
}
// Note that it is possible to have a key defined here, and the autoincrement expected, this is acceptable in a non root class // Note that it is possible to have a key defined here, and the autoincrement expected, this is acceptable in a non root class
if (empty($this->m_iKey)) if (empty($this->m_iKey))
{ {
@@ -1009,7 +1016,10 @@ abstract class DBObject
$oFilter->AddCondition('id', $this->m_iKey, '='); $oFilter->AddCondition('id', $this->m_iKey, '=');
$sSQL = MetaModel::MakeUpdateQuery($oFilter, $aChanges); $sSQL = MetaModel::MakeUpdateQuery($oFilter, $aChanges);
CMDBSource::Query($sSQL); if (!MetaModel::DBIsReadOnly())
{
CMDBSource::Query($sSQL);
}
} }
$this->DBWriteLinks(); $this->DBWriteLinks();
@@ -1053,7 +1063,10 @@ abstract class DBObject
$this->OnDelete(); $this->OnDelete();
$sSQL = MetaModel::MakeDeleteQuery($oFilter); $sSQL = MetaModel::MakeDeleteQuery($oFilter);
CMDBSource::Query($sSQL); if (!MetaModel::DBIsReadOnly())
{
CMDBSource::Query($sSQL);
}
$this->AfterDelete(); $this->AfterDelete();

View File

@@ -1401,6 +1401,7 @@ abstract class MetaModel
public static function Init_OverloadStateAttribute($sStateCode, $sAttCode, $iFlags) public static function Init_OverloadStateAttribute($sStateCode, $sAttCode, $iFlags)
{ {
// Warning: this is not sufficient: the flags have to be copied to the states that are inheriting from this state
$sTargetClass = self::GetCallersPHPClass("Init"); $sTargetClass = self::GetCallersPHPClass("Init");
self::$m_aStates[$sTargetClass][$sStateCode]['attribute_list'][$sAttCode] = $iFlags; self::$m_aStates[$sTargetClass][$sStateCode]['attribute_list'][$sAttCode] = $iFlags;
} }
@@ -2535,6 +2536,12 @@ abstract class MetaModel
return $aDataDump; return $aDataDump;
} }
// Temporary - investigate the cost of such a limitation
public static function DBIsReadOnly()
{
return self::$m_oConfig->Get('read_only');
}
protected static function MakeDictEntry($sKey, $sValueFromOldSystem, $sDefaultValue, &$bNotInDico) protected static function MakeDictEntry($sKey, $sValueFromOldSystem, $sDefaultValue, &$bNotInDico)
{ {
$sValue = Dict::S($sKey, 'x-no-nothing'); $sValue = Dict::S($sKey, 'x-no-nothing');
@@ -3505,14 +3512,20 @@ abstract class MetaModel
public static function BulkDelete(DBObjectSearch $oFilter) public static function BulkDelete(DBObjectSearch $oFilter)
{ {
$sSQL = self::MakeDeleteQuery($oFilter); $sSQL = self::MakeDeleteQuery($oFilter);
CMDBSource::Query($sSQL); if (!self::DBIsReadOnly())
{
CMDBSource::Query($sSQL);
}
} }
public static function BulkUpdate(DBObjectSearch $oFilter, array $aValues) public static function BulkUpdate(DBObjectSearch $oFilter, array $aValues)
{ {
// $aValues is an array of $sAttCode => $value // $aValues is an array of $sAttCode => $value
$sSQL = self::MakeUpdateQuery($oFilter, $aValues); $sSQL = self::MakeUpdateQuery($oFilter, $aValues);
CMDBSource::Query($sSQL); if (!self::DBIsReadOnly())
{
CMDBSource::Query($sSQL);
}
} }
// Links // Links

View File

@@ -372,6 +372,11 @@ class UserRights
public static function CanChangePassword() public static function CanChangePassword()
{ {
if (MetaModel::DBIsReadOnly())
{
return false;
}
if (!is_null(self::$m_oUser)) if (!is_null(self::$m_oUser))
{ {
return self::$m_oUser->CanChangePassword(); return self::$m_oUser->CanChangePassword();
@@ -554,6 +559,14 @@ class UserRights
if (self::IsAdministrator($oUser)) return true; if (self::IsAdministrator($oUser)) return true;
if (MetaModel::DBIsReadOnly())
{
if ($iActionCode == UR_ACTION_MODIFY) return false;
if ($iActionCode == UR_ACTION_DELETE) return false;
if ($iActionCode == UR_ACTION_BULK_MODIFY) return false;
if ($iActionCode == UR_ACTION_BULK_DELETE) return false;
}
if (MetaModel::HasCategory($sClass, 'bizmodel')) if (MetaModel::HasCategory($sClass, 'bizmodel'))
{ {
// #@# Temporary????? // #@# Temporary?????
@@ -584,6 +597,14 @@ class UserRights
if (self::IsAdministrator($oUser)) return true; if (self::IsAdministrator($oUser)) return true;
if (MetaModel::DBIsReadOnly())
{
if ($iActionCode == UR_ACTION_MODIFY) return false;
if ($iActionCode == UR_ACTION_DELETE) return false;
if ($iActionCode == UR_ACTION_BULK_MODIFY) return false;
if ($iActionCode == UR_ACTION_BULK_DELETE) return false;
}
if (MetaModel::HasCategory($sClass, 'bizmodel')) if (MetaModel::HasCategory($sClass, 'bizmodel'))
{ {
if (is_null($oUser)) if (is_null($oUser))
@@ -606,6 +627,14 @@ class UserRights
if (self::IsAdministrator($oUser)) return true; if (self::IsAdministrator($oUser)) return true;
if (MetaModel::DBIsReadOnly())
{
if ($iActionCode == UR_ACTION_MODIFY) return false;
if ($iActionCode == UR_ACTION_DELETE) return false;
if ($iActionCode == UR_ACTION_BULK_MODIFY) return false;
if ($iActionCode == UR_ACTION_BULK_DELETE) return false;
}
// this module is forbidden for non admins // this module is forbidden for non admins
if (MetaModel::HasCategory($sClass, 'addon/userrights')) return false; if (MetaModel::HasCategory($sClass, 'addon/userrights')) return false;