Finalized the module "user rights by profile". It is fully integrated with the application setup (inc. sample data). and it it now ready for developing the user management GUI

SVN:trunk[93]
This commit is contained in:
Romain Quetiez
2009-08-20 13:09:41 +00:00
parent ea59fa945a
commit daa9657e08
18 changed files with 2697 additions and 143 deletions

View File

@@ -14,6 +14,11 @@
*/
// It is supposed that this profile does exist in the DB
// Possible improvement: add it when executing the setup procedure
//
define('ADMIN_PROFILE_ID', 1);
class URP_Users extends DBObject
{
public static function Init()
@@ -106,7 +111,7 @@ class URP_Dimensions extends DBObject
MetaModel::Init_AddFilterFromAttribute("type");
}
public function CheckProjectionSpec($oProjectionSpec)
public function CheckProjectionSpec($oProjectionSpec, $sProjectedClass)
{
$sExpression = $oProjectionSpec->Get('value');
$sAttribute = $oProjectionSpec->Get('attribute');
@@ -129,30 +134,46 @@ class URP_Dimensions extends DBObject
// 2nd - compute the data type for the projection
//
$bIsOql = true;
$sExpressionClass = '';
try
$sTargetClass = '';
if (($sExpression == '<this>') || ($sExpression == '<user>'))
{
$oObjectSearch = DBObjectSearch::FromOQL($sExpression);
$sExpressionClass = $oObjectSearch->GetClass();
$sTargetClass = $sProjectedClass;
}
catch (OqlException $e)
elseif ($sExpression == '<any>')
{
$bIsOql = false;
$sTargetClass = '';
}
if ($bIsOql)
else
{
// Evaluate wether it is a constant or not
try
{
$oObjectSearch = DBObjectSearch::FromOQL($sExpression);
$sTargetClass = $oObjectSearch->GetClass();
}
catch (OqlException $e)
{
}
}
if (empty($sTargetClass))
{
$sFoundType = '_void_';
}
else
{
if (empty($sAttribute))
{
$sFoundType = $sExpressionClass;
$sFoundType = $sTargetClass;
}
else
{
if (!MetaModel::IsValidAttCode($sExpressionClass, $sAttribute))
if (!MetaModel::IsValidAttCode($sTargetClass, $sAttribute))
{
throw new CoreException('Unkown attribute code in projection specification', array('found' => $sAttribute, 'expecting' => MetaModel::GetAttributesList($sExpressionClass), 'class' => $sExpressionClass, 'projection' => $oProjectionSpec));
throw new CoreException('Unkown attribute code in projection specification', array('found' => $sAttribute, 'expecting' => MetaModel::GetAttributesList($sTargetClass), 'class' => $sTargetClass, 'projection' => $oProjectionSpec));
}
$oAttDef = MetaModel::GetAttributeDef($sExpressionClass, $sAttribute);
$oAttDef = MetaModel::GetAttributeDef($sTargetClass, $sAttribute);
if ($oAttDef->IsExternalKey())
{
$sFoundType = $oAttDef->GetTargetClass();
@@ -163,13 +184,9 @@ class URP_Dimensions extends DBObject
}
}
}
else
{
$sFoundType = '_scalar_';
}
// Compare the dimension type and projection type
if ($sFoundType != $sExpectedType)
if (($sFoundType != '_void_') && ($sFoundType != $sExpectedType))
{
throw new CoreException('Wrong type in projection specification', array('found' => $sFoundType, 'expecting' => $sExpectedType, 'expression' => $sExpression, 'attribute' => $sAttribute, 'projection' => $oProjectionSpec));
}
@@ -234,7 +251,7 @@ class URP_ProfileProjection extends DBObject
MetaModel::Init_AddAttribute(new AttributeExternalKey("profileid", array("targetclass"=>"URP_Profiles", "jointype"=> "", "label"=>"profile", "description"=>"usage profile", "allowed_values"=>null, "sql"=>"profileid", "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeExternalField("profile", array("label"=>"Profile", "description"=>"Profile name", "allowed_values"=>null, "extkey_attcode"=> 'profileid', "target_attcode"=>"name")));
MetaModel::Init_AddAttribute(new AttributeString("value", array("label"=>"Value expression", "description"=>"OQL expression (using \$user) | constant | <any>", "allowed_values"=>null, "sql"=>"value", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("value", array("label"=>"Value expression", "description"=>"OQL expression (using \$user) | constant | <any> | <user>+attribute code", "allowed_values"=>null, "sql"=>"value", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("attribute", array("label"=>"Attribute", "description"=>"Target attribute code (optional)", "allowed_values"=>null, "sql"=>"attribute", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
//MetaModel::Init_InheritFilters();
@@ -245,17 +262,30 @@ class URP_ProfileProjection extends DBObject
public function ProjectUser(URP_Users $oUser)
{
$sExpr = $this->Get('value');
if (strtolower(substr($sExpr, 0, 6)) == 'select')
if ($sExpr == '<user>')
{
$sColumn = $this->Get('attribute');
if (empty($sColumn))
{
$aRes = array($oUser->GetKey());
}
else
{
$aRes = array($oUser->Get($sColumn));
}
}
elseif ($sExpr == '<any>')
{
$aRes = null;
}
elseif (strtolower(substr($sExpr, 0, 6)) == 'select')
{
$sColumn = $this->Get('attribute');
// SELECT...
$oValueSetDef = new ValueSetObjects($sExpr, $sColumn);
$aValues = $oValueSetDef->GetValues(array('user' => $oUser), '');
$aRes = array_values($aValues);
}
elseif ($sExpr == '<any>')
{
$aRes = null;
$aRes = array_keys($aValues);
}
else
{
@@ -291,24 +321,42 @@ class URP_ClassProjection extends DBObject
MetaModel::Init_AddAttribute(new AttributeString("class", array("label"=>"Class", "description"=>"Target class", "allowed_values"=>null, "sql"=>"class", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("value", array("label"=>"Value expression", "description"=>"OQL expression (using \$this) | constant | <any>", "allowed_values"=>null, "sql"=>"value", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("value", array("label"=>"Value expression", "description"=>"OQL expression (using \$this) | constant | <any> | <this>+attribute code", "allowed_values"=>null, "sql"=>"value", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("attribute", array("label"=>"Attribute", "description"=>"Target attribute code (optional)", "allowed_values"=>null, "sql"=>"attribute", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
//MetaModel::Init_InheritFilters();
MetaModel::Init_AddFilterFromAttribute("dimensionid");
// #@# verifier
MetaModel::Init_AddFilterFromAttribute("class");
}
public function ProjectObject($oObject)
{
$sExpr = $this->Get('value');
if (strtolower(substr($sExpr, 0, 6)) == 'select')
if ($sExpr == '<this>')
{
$sColumn = $this->Get('attribute');
if (empty($sColumn))
{
$aRes = array($oObject->GetKey());
}
else
{
$aRes = array($oObject->Get($sColumn));
}
}
elseif ($sExpr == '<any>')
{
$aRes = null;
}
elseif (strtolower(substr($sExpr, 0, 6)) == 'select')
{
$sColumn = $this->Get('attribute');
// SELECT...
$oValueSetDef = new ValueSetObjects($sExpr, $sColumn);
$aValues = $oValueSetDef->GetValues(array('user' => $oObject), '');
$aRes = array_values($aValues);
$aValues = $oValueSetDef->GetValues(array('this' => $oObject), '');
$aRes = array_keys($aValues);
}
elseif ($sExpr == '<any>')
{
@@ -357,6 +405,7 @@ class URP_ActionGrant extends DBObject
MetaModel::Init_AddFilterFromAttribute("profileid");
MetaModel::Init_AddFilterFromAttribute("profile");
MetaModel::Init_AddFilterFromAttribute("class");
MetaModel::Init_AddFilterFromAttribute("permission");
MetaModel::Init_AddFilterFromAttribute("action");
}
@@ -396,6 +445,7 @@ class URP_StimulusGrant extends DBObject
MetaModel::Init_AddFilterFromAttribute("profileid");
MetaModel::Init_AddFilterFromAttribute("profile");
MetaModel::Init_AddFilterFromAttribute("class");
MetaModel::Init_AddFilterFromAttribute("permission");
MetaModel::Init_AddFilterFromAttribute("stimulus");
}
@@ -446,19 +496,22 @@ class UserRightsProfile extends UserRightsAddOnAPI
);
// Installation: create the very first user
public function CreateAdministrator($sAdminUser, $sAdminPwd, $sAdminEmail, $sFirstName, $sLastName, $sPhoneNumber)
public function CreateAdministrator($sAdminUser, $sAdminPwd)
{
// Maybe we should check that no other user with userid == 0 exists
$oUser = new URP_Users();
$oUser->Set('login', $sAdminUser);
$oUser->Set('password', $sAdminPwd);
$oUser->Set('email', $sAdminEmail);
$oUser->Set('firstname', $sFirstName);
$oUser->Set('lastname', $sLastName);
$oUser->Set('phonenumber', $sPhoneNumber);
$oUser->Set('userid', 1); // one is for root !
$oUser->Set('email', 'n/a');
$oUser->Set('firstname', 'administrator');
$oUser->Set('lastname', 'itop');
$oUser->Set('userid', 1); // let's mark it as #1 (for what purpose?)
$iUserId = $oUser->DBInsertNoReload();
$this->SetupUser($iUserId, true);
// Add this user to the very specific 'admin' profile
$oUserProfile = new URP_UserProfile();
$oUserProfile->Set('userid', $iUserId);
$oUserProfile->Set('profileid', ADMIN_PROFILE_ID);
$oUserProfile->DBInsertNoReload();
return true;
}
@@ -543,9 +596,9 @@ class UserRightsProfile extends UserRightsAddOnAPI
{
$iProfileId = $oProfile->GetKey();
// Create grant records, for any class where it applies
// Create grant records, for any class where it matters (the rest could be done later on)
//
foreach(array('bizmodel', 'application', 'gui', 'core/cmdb') as $sCategory)
foreach(array('bizmodel') as $sCategory)
{
foreach (MetaModel::GetClasses($sCategory) as $sClass)
{
@@ -633,6 +686,8 @@ class UserRightsProfile extends UserRightsAddOnAPI
protected $m_aUserProfiles = array(); // userid,profileid -> object
protected $m_aProPro = array(); // profileid,dimensionid -> object
protected $m_aAdmins = array(); // id of users being linked to the profile #ADMIN_PROFILE_ID
protected $m_aClassActionGrants = array(); // profile, class, action -> permission
protected $m_aObjectActionGrants = array(); // userid, class, id, action -> permission, list of attributes
@@ -667,7 +722,11 @@ class UserRightsProfile extends UserRightsAddOnAPI
$oUserProfileSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_UserProfile"));
while ($oUserProfile = $oUserProfileSet->Fetch())
{
$this->m_aUserProfiles[$oUserProfile->Get('userid')][$oUserProfile->Get('profileid')] = $oUserProfile;
$this->m_aUserProfiles[$oUserProfile->Get('userid')][$oUserProfile->Get('profileid')] = $oUserProfile;
if ($oUserProfile->Get('profileid') == ADMIN_PROFILE_ID)
{
$this->m_aAdmins[] = $oUserProfile->Get('userid');
}
}
$oProProSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_ProfileProjection"));
@@ -734,7 +793,7 @@ exit;
if (isset($aTest)) return $aTest;
// Get the permission for this profile/class/action
$oSearch = DBObjectSearch::FromOQL("SELECT URP_ActionGrant WHERE class = :class AND action = :action AND profileid = :profile");
$oSearch = DBObjectSearch::FromOQL("SELECT URP_ActionGrant WHERE class = :class AND action = :action AND profileid = :profile AND permission = 'yes'");
$oSet = new DBObjectSet($oSearch, array(), array('class'=>$sClass, 'action'=>$sAction, 'profile'=>$iProfile));
if ($oSet->Count() < 1)
{
@@ -764,14 +823,24 @@ exit;
{
continue; // loop to the next profile
}
elseif ($oGrantRecord->Get('permission') == 'yes')
else
{
$iInstancePermission = UR_ALLOWED_YES;
// merge the list of attributes allowed for this profile
// update the list of attributes with those allowed for this profile
//
$oSearch = DBObjectSearch::FromOQL("SELECT URP_AttributeGrant WHERE actiongrantid = :actiongrantid");
$oSet = new DBObjectSet($oSearch, array(), array('actiongrantid' => $oGrantRecord->GetKey()));
$aAttributes = array_merge($aAttributes, $oSet->GetColumnAsArray('attcode', false));
$aProfileAttributes = $oSet->GetColumnAsArray('attcode', false);
if (count($aProfileAttributes) == 0)
{
$aAllAttributes = array_keys(MetaModel::ListAttributeDefs($sClass));
$aAttributes = array_merge($aAttributes, $aAllAttributes);
}
else
{
$aAttributes = array_merge($aAttributes, $aProfileAttributes);
}
}
}
@@ -785,6 +854,9 @@ exit;
public function IsActionAllowed($iUserId, $sClass, $iActionCode, dbObjectSet $oInstances)
{
// super admin rights
if (in_array($iUserId, $this->m_aAdmins)) return true;
$oUser = $this->m_aUsers[$iUserId];
$oInstances->Rewind();
@@ -798,6 +870,7 @@ exit;
if ($iInstancePermission != $iGlobalPermission)
{
$iGlobalPermission = UR_ALLOWED_DEPENDS;
break;
}
}
else
@@ -805,6 +878,8 @@ exit;
$iGlobalPermission = $iInstancePermission;
}
}
$oInstances->Rewind();
if (isset($iGlobalPermission))
{
return $iGlobalPermission;
@@ -817,6 +892,9 @@ exit;
public function IsActionAllowedOnAttribute($iUserId, $sClass, $sAttCode, $iActionCode, dbObjectSet $oInstances)
{
// super admin rights
if (in_array($iUserId, $this->m_aAdmins)) return true;
$oUser = $this->m_aUsers[$iUserId];
$oInstances->Rewind();
@@ -846,6 +924,8 @@ exit;
$iGlobalPermission = $iInstancePermission;
}
}
$oInstances->Rewind();
if (isset($iGlobalPermission))
{
return $iGlobalPermission;
@@ -858,6 +938,9 @@ exit;
public function IsStimulusAllowed($iUserId, $sClass, $sStimulusCode, dbObjectSet $oInstances)
{
// super admin rights
if (in_array($iUserId, $this->m_aAdmins)) return true;
$oUser = $this->m_aUsers[$iUserId];
// Note: this code is VERY close to the code of IsActionAllowed()
@@ -869,19 +952,14 @@ exit;
foreach($this->GetMatchingProfiles($oUser, $oObject) as $iProfile)
{
// Get the permission for this profile/class/stimulus
$oSearch = DBObjectSearch::FromOQL("SELECT URP_StimulusGrant WHERE class = :class AND stimulus = :stimulus AND profileid = :profile");
$oSearch = DBObjectSearch::FromOQL("SELECT URP_StimulusGrant WHERE class = :class AND stimulus = :stimulus AND profileid = :profile AND permission = 'yes'");
$oSet = new DBObjectSet($oSearch, array(), array('class'=>$sClass, 'stimulus'=>$sStimulusCode, 'profile'=>$iProfile));
if ($oSet->Count() < 1)
{
return UR_ALLOWED_NO;
}
$oGrantRecord = $oSet->Fetch();
$sPermission = $oGrantRecord->Get('permission');
if ($sPermission == 'yes')
{
$iInstancePermission = UR_ALLOWED_YES;
}
// no need to fetch the record, we've requested the records having permission = 'yes'
$iInstancePermission = UR_ALLOWED_YES;
}
if (isset($iGlobalPermission))
{
@@ -895,6 +973,8 @@ exit;
$iGlobalPermission = $iInstancePermission;
}
}
$oInstances->Rewind();
if (isset($iGlobalPermission))
{
return $iGlobalPermission;
@@ -918,28 +998,31 @@ exit;
$aObjectProjection = $this->m_aClassProjs[$sClass][$iDimension]->ProjectObject($oObject);
$aRes = array();
foreach ($this->m_aUserProfiles[$iUser] as $iProfile => $oProfile)
if (array_key_exists($iUser, $this->m_aUserProfiles) > 0)
{
if (is_null($aObjectProjection))
foreach ($this->m_aUserProfiles[$iUser] as $iProfile => $oProfile)
{
$aRes[] = $iProfile;
}
else
{
// user projection to be cached on a given page !
$aUserProjection = $this->m_aProPros[$iProfile][$iDimension]->ProjectUser($oUser);
if (is_null($aUserProjection))
if (is_null($aObjectProjection))
{
$aRes[] = $iProfile;
}
else
{
$aMatchingValues = array_intersect($aObjectProjection, $aUserProjection);
if (count($aMatchingValues) > 0)
// user projection to be cached on a given page !
$aUserProjection = $this->m_aProPros[$iProfile][$iDimension]->ProjectUser($oUser);
if (is_null($aUserProjection))
{
$aRes[] = $iProfile;
}
else
{
$aMatchingValues = array_intersect($aObjectProjection, $aUserProjection);
if (count($aMatchingValues) > 0)
{
$aRes[] = $iProfile;
}
}
}
}
}

View File

@@ -249,7 +249,7 @@ class bizPerson extends bizContact
"name_attcode" => "name",
"state_attcode" => "",
"reconc_keys" => array("org_name", "first_name", "name"), // comment en définir plusieurs
// "reconc_keys" => array("org_name", "employe_number"),
// "reconc_keys" => array("org_name", "employee_number"),
"db_table" => "persons", // Can it use the same physical DB table as any contact ?
"db_key_field" => "id",
"db_finalclass_field" => "",
@@ -258,20 +258,21 @@ class bizPerson extends bizContact
MetaModel::Init_Params($aParams);
MetaModel::Init_InheritAttributes();
MetaModel::Init_AddAttribute(new AttributeString("first_name", array("label"=>"first Name", "description"=>"First name", "allowed_values"=>null, "sql"=>"first_name", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("employe_number", array("label"=>"Employe Number", "description"=>"employe number", "allowed_values"=>null, "sql"=>"employe_number", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("employee_number", array("label"=>"Employee Number", "description"=>"employee number", "allowed_values"=>null, "sql"=>"employee_number", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
// MetaModel::Init_AddAttribute(new AttributeExternalKey("login_id", array("targetclass"=>"URP_Users", "label"=>"Login", "description"=>"Login information", "allowed_values"=>null, "sql"=>"login_id", "is_null_allowed"=>true, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeExternalKey("login_id", array("targetclass"=>"URP_Users", "label"=>"Login", "description"=>"Login information", "allowed_values"=>null, "sql"=>"login_id", "is_null_allowed"=>true, "depends_on"=>array())));
MetaModel::Init_InheritFilters();
MetaModel::Init_AddFilterFromAttribute("first_name");
MetaModel::Init_AddFilterFromAttribute("employe_number");
MetaModel::Init_AddFilterFromAttribute("employee_number");
MetaModel::Init_AddFilterFromAttribute("login_id");
// Display lists
MetaModel::Init_SetZListItems('details', array('first_name', 'name', 'status', 'org_id', 'email', 'location_id', 'phone', 'employe_number')); // Attributes to be displayed for the complete details
MetaModel::Init_SetZListItems('details', array('first_name', 'name', 'status', 'org_id', 'email', 'location_id', 'phone', 'employee_number', 'login_id')); // Attributes to be displayed for the complete details
MetaModel::Init_SetZListItems('list', array('first_name', 'name', 'status', 'org_id', 'email', 'location_id', 'phone')); // Attributes to be displayed for a list
// Search criteria
MetaModel::Init_SetZListItems('standard_search', array('first_name', 'name', 'status', 'email', 'location_id', 'phone', 'employe_number')); // Criteria of the std search form
MetaModel::Init_SetZListItems('advanced_search', array('first_name', 'name', 'status', 'email', 'location_id', 'phone', 'employe_number')); // Criteria of the advanced search form
MetaModel::Init_SetZListItems('standard_search', array('first_name', 'name', 'status', 'email', 'location_id', 'phone', 'employee_number', 'login_id')); // Criteria of the std search form
MetaModel::Init_SetZListItems('advanced_search', array('first_name', 'name', 'status', 'email', 'location_id', 'phone', 'employee_number', 'login_id')); // Criteria of the advanced search form
}
public function Generate(cmdbDataGenerator $oGenerator)

View File

@@ -194,8 +194,13 @@ class CMDBChangeOpSetAttribute extends CMDBChangeOp
public function GetDescription()
{
$sResult = '';
$oEmptySet = new DBObjectSet($this->Get('objclass'));
if (UserRights::IsActionAllowedOnAttribute($this->Get('objclass'), $this->Get('attcode'), UR_ACTION_READ, $oEmptySet) == UR_ALLOWED_YES)
$oTargetObjectClass = $this->Get('objclass');
$oTargetObjectKey = $this->Get('objkey');
$oTargetSearch = new DBObjectSearch($oTargetObjectClass);
$oTargetSearch->AddCondition('id', $oTargetObjectKey);
$oMonoObjectSet = new DBObjectSet($oTargetSearch);
if (UserRights::IsActionAllowedOnAttribute($this->Get('objclass'), $this->Get('attcode'), UR_ACTION_READ, $oMonoObjectSet) == UR_ALLOWED_YES)
{
$oAttDef = MetaModel::GetAttributeDef($this->Get('objclass'), $this->Get('attcode'));
$sAttName = $oAttDef->GetLabel();

View File

@@ -21,7 +21,7 @@ class DBObjectSet
private $m_aId2Row;
private $m_iCurrRow;
public function __construct($oFilter, $aOrderBy = array(), $aArgs = array())
public function __construct(DBObjectSearch $oFilter, $aOrderBy = array(), $aArgs = array())
{
$this->m_oFilter = $oFilter;
$this->m_aOrderBy = $aOrderBy;

View File

@@ -1173,6 +1173,32 @@ abstract class MetaModel
protected static $m_aQueryStructCache = array();
protected static function PrepareQueryArguments($aArgs)
{
// Translate any object into scalars
//
$aScalarArgs = array();
foreach($aArgs as $sArgName => $value)
{
if (self::IsValidObject($value))
{
$aScalarArgs[$sArgName] = $value->GetKey();
$aScalarArgs[$sArgName.'->id'] = $value->GetKey();
$sClass = get_class($value);
foreach(self::ListAttributeDefs($sClass) as $sAttCode => $oAttDef)
{
$aScalarArgs[$sArgName.'->'.$sAttCode] = $value->Get($sAttCode);
}
}
else
{
$aScalarArgs[$sArgName] = (string) $value;
}
}
return $aScalarArgs;
}
public static function MakeSelectQuery(DBObjectSearch $oFilter, $aOrderBy = array(), $aArgs = array())
{
// Query caching
@@ -1219,30 +1245,9 @@ abstract class MetaModel
}
}
// Prepare arguments (translate any object into scalars)
//
$aScalarArgs = $oFilter->GetInternalParams();
foreach($aArgs as $sArgName => $value)
{
if (self::IsValidObject($value))
{
$aScalarArgs[$sArgName] = $value->GetKey();
$aScalarArgs[$sArgName.'->id'] = $value->GetKey();
$sClass = get_class($value);
foreach(self::ListAttributeDefs($sClass) as $sAttCode => $oAttDef)
{
$aScalarArgs[$sArgName.'->'.$sAttCode] = $value->Get($sAttCode);
}
}
else
{
$aScalarArgs[$sArgName] = (string) $value;
}
}
// Go
//
$aScalarArgs = array_merge(self::PrepareQueryArguments($aArgs), $oFilter->GetInternalParams());
$sRes = $oSelect->RenderSelect($aOrderBy, $aScalarArgs);
if (self::$m_bTraceQueries)
@@ -1277,17 +1282,18 @@ abstract class MetaModel
echo "<p>Count of built queries: ".count(self::$m_aQueriesLog)."</p>";
}
public static function MakeDeleteQuery(DBObjectSearch $oFilter)
public static function MakeDeleteQuery(DBObjectSearch $oFilter, $aArgs = array())
{
$aTranslation = array();
$aClassAliases = array();
$aTableAliases = array();
$oConditionTree = $oFilter->GetCriteria();
$oSelect = self::MakeQuery($oFilter->GetClassAlias(), $oConditionTree, $aClassAliases, $aTableAliases, $aTranslation, $oFilter);
return $oSelect->RenderDelete();
$aScalarArgs = array_merge(self::PrepareQueryArguments($aArgs), $oFilter->GetInternalParams());
return $oSelect->RenderDelete($aScalarArgs);
}
public static function MakeUpdateQuery(DBObjectSearch $oFilter, $aValues)
public static function MakeUpdateQuery(DBObjectSearch $oFilter, $aValues, $aArgs = array())
{
// $aValues is an array of $sAttCode => $value
$aTranslation = array();
@@ -1295,7 +1301,8 @@ abstract class MetaModel
$aTableAliases = array();
$oConditionTree = $oFilter->GetCriteria();
$oSelect = self::MakeQuery($oFilter->GetClassAlias(), $oConditionTree, $aClassAliases, $aTableAliases, $aTranslation, $oFilter, array(), $aValues);
return $oSelect->RenderUpdate();
$aScalarArgs = array_merge(self::PrepareQueryArguments($aArgs), $oFilter->GetInternalParams());
return $oSelect->RenderUpdate($aScalarArgs);
}
private static function MakeQuery($sGlobalTargetAlias, &$oConditionTree, &$aClassAliases, &$aTableAliases, &$aTranslation, DBObjectSearch $oFilter, $aExpectedAtts = array(), $aValues = array())
@@ -2439,6 +2446,9 @@ abstract class MetaModel
if (self::DBExists())
{
CMDBSource::SelectDB(self::$m_sDBName);
// Some of the init could not be done earlier (requiring classes to be declared and DB to be accessible)
self::InitPlugins();
}
else
{
@@ -2447,8 +2457,6 @@ abstract class MetaModel
throw new CoreException('Database not found, check your configuration file', array('config_file'=>$sConfigFile, 'db_name'=>self::$m_sDBName));
}
}
// Some of the init could not be done earlier (requiring classes to be declared and DB to be accessible)
self::InitPlugins();
}
public static function LoadConfig($sConfigFile)

View File

@@ -171,7 +171,7 @@ class SQLQuery
}
// Interface, build the SQL query
public function RenderDelete()
public function RenderDelete($aArgs = array())
{
// The goal will be to complete the list as we build the Joins
$aFrom = array();
@@ -193,12 +193,12 @@ class SQLQuery
throw new CoreException("Building a request wich will delete every object of a given table -looks suspicious- please use truncate instead...");
}
*/
$sWhere = self::ClauseWhere($oCondition);
$sWhere = self::ClauseWhere($oCondition, $aArgs);
return "DELETE $sDelete FROM $sFrom WHERE $sWhere";
}
// Interface, build the SQL query
public function RenderUpdate()
public function RenderUpdate($aArgs = array())
{
// The goal will be to complete the list as we build the Joins
$aFrom = array();
@@ -210,7 +210,7 @@ class SQLQuery
$sFrom = self::ClauseFrom($aFrom);
$sValues = self::ClauseValues($aSetValues);
$sWhere = self::ClauseWhere($oCondition);
$sWhere = self::ClauseWhere($oCondition, $aArgs);
return "UPDATE $sFrom SET $sValues WHERE $sWhere";
}

View File

@@ -52,18 +52,18 @@ function ComputeProjections($oPage, $sScope)
foreach ($aDimensions as $iDimension => $oDimension)
{
// #@# to be moved, may be time consuming
$oDimension->CheckProjectionSpec($aClassProjs[$sClass][$iDimension]);
$oDimension->CheckProjectionSpec($aClassProjs[$sClass][$iDimension], $sClass);
$aValues = $aClassProjs[$sClass][$iDimension]->ProjectObject($oObject);
if (is_null($aValues))
{
$sValues = '<any>';
$sValues = htmlentities('<any>');
}
else
{
$sValues = implode(', ', $aValues);
}
$oObjectProj['dim'.$oDimension->GetKey()] = htmlentities($sValues);
$oObjectProj['dim'.$oDimension->GetKey()] = $sValues;
}
$aDisplayData[] = $oObjectProj;

View File

@@ -62,18 +62,18 @@ function ComputeProjections($oPage)
foreach ($aDimensions as $iDimension => $oDimension)
{
// #@# to be moved, may be time consuming
$oDimension->CheckProjectionSpec($aProPros[$iProfile][$iDimension]);
$oDimension->CheckProjectionSpec($aProPros[$iProfile][$iDimension], get_class($oUser));
$aValues = $aProPros[$iProfile][$iDimension]->ProjectUser($oUser);
if (is_null($aValues))
{
$sValues = '<any>';
$sValues = htmlentities('<any>');
}
else
{
$sValues = implode(', ', $aValues);
}
$aUserProfileProj['dim'.$oDimension->GetKey()] = htmlentities($sValues);
$aUserProfileProj['dim'.$oDimension->GetKey()] = $sValues;
}
$aDisplayData[] = $aUserProfileProj;

View File

@@ -45,18 +45,18 @@ function ComputeObjectProjections($oPage, $oObject)
foreach ($aDimensions as $iDimension => $oDimension)
{
// #@# to be moved, may be time consuming
$oDimension->CheckProjectionSpec($aClassProjs[$sClass][$iDimension]);
$oDimension->CheckProjectionSpec($aClassProjs[$sClass][$iDimension], $sClass);
$aValues = $aClassProjs[$sClass][$iDimension]->ProjectObject($oObject);
if (is_null($aValues))
{
$sValues = '<any>';
$sValues = htmlentities('<any>');
}
else
{
$sValues = implode(', ', $aValues);
}
$oObjectProj['dim'.$oDimension->GetKey()] = htmlentities($sValues);
$oObjectProj['dim'.$oDimension->GetKey()] = $sValues;
}
$aDisplayData[] = $oObjectProj;
@@ -117,18 +117,18 @@ function ComputeUserProjections($oPage, $oUser)
foreach ($aDimensions as $iDimension => $oDimension)
{
// #@# to be moved, may be time consuming
$oDimension->CheckProjectionSpec($aProPros[$iProfile][$iDimension]);
$oDimension->CheckProjectionSpec($aProPros[$iProfile][$iDimension], get_class($oUser));
$aValues = $aProPros[$iProfile][$iDimension]->ProjectUser($oUser);
if (is_null($aValues))
{
$sValues = '<any>';
$sValues = htmlentities('<any>');
}
else
{
$sValues = implode(', ', $aValues);
}
$aUserProfileProj['dim'.$oDimension->GetKey()] = htmlentities($sValues);
$aUserProfileProj['dim'.$oDimension->GetKey()] = $sValues;
}
$aDisplayData[] = $aUserProfileProj;

View File

@@ -8,7 +8,8 @@
<phone></phone>
<location_id>29</location_id>
<first_name>Jules</first_name>
<employe_number></employe_number>
<employee_number></employee_number>
<login_id></login_id>
</bizPerson>
<bizPerson id="20">
<name>Dumas</name>
@@ -18,7 +19,8 @@
<phone></phone>
<location_id>1</location_id>
<first_name>Dumas</first_name>
<employe_number></employe_number>
<employee_number></employee_number>
<login_id></login_id>
</bizPerson>
<bizPerson id="7">
<name>Hugo</name>
@@ -28,6 +30,7 @@
<phone>33172382223</phone>
<location_id>1</location_id>
<first_name>Victor</first_name>
<employe_number>e12345</employe_number>
<employee_number>e12345</employee_number>
<login_id></login_id>
</bizPerson>
</Set>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<Set>
<URP_Dimensions id="1">
<name>organization</name>
<description></description>
<type>bizOrganization</type>
</URP_Dimensions>
<URP_Dimensions id="2">
<name>site</name>
<description></description>
<type></type>
</URP_Dimensions>
</Set>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<Set>
<URP_Profiles id="1">
<name>Administrator</name>
<description>Has the rights on everything (ignores the grant records)</description>
</URP_Profiles>
<URP_Profiles id="2">
<name>Delivery Manager France</name>
<description>Persons in charge of the operations for French customers</description>
</URP_Profiles>
</Set>

View File

@@ -0,0 +1,555 @@
<?xml version="1.0" encoding="UTF-8"?>
<Set>
<URP_ClassProjection id="1">
<dimensionid>1</dimensionid>
<class>bizOrganization</class>
<value>&lt;this&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="2">
<dimensionid>1</dimensionid>
<class>logRealObject</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="3">
<dimensionid>1</dimensionid>
<class>bizContact</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="4">
<dimensionid>1</dimensionid>
<class>bizPerson</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="5">
<dimensionid>1</dimensionid>
<class>bizTeam</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="6">
<dimensionid>1</dimensionid>
<class>bizDocument</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="7">
<dimensionid>1</dimensionid>
<class>bizDocVersion</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="8">
<dimensionid>1</dimensionid>
<class>lnkDocumentRealObject</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="9">
<dimensionid>1</dimensionid>
<class>lnkContactRealObject</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="10">
<dimensionid>1</dimensionid>
<class>logInfra</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="11">
<dimensionid>1</dimensionid>
<class>bizLocation</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="12">
<dimensionid>1</dimensionid>
<class>bizCircuit</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="13">
<dimensionid>1</dimensionid>
<class>bizInterface</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="14">
<dimensionid>1</dimensionid>
<class>lnkInterfaces</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="15">
<dimensionid>1</dimensionid>
<class>bizDevice</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="16">
<dimensionid>1</dimensionid>
<class>bizPC</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="17">
<dimensionid>1</dimensionid>
<class>bizServer</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="18">
<dimensionid>1</dimensionid>
<class>bizNetworkDevice</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="19">
<dimensionid>1</dimensionid>
<class>bizInfraGroup</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="20">
<dimensionid>1</dimensionid>
<class>bizApplication</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="21">
<dimensionid>1</dimensionid>
<class>lnkInfraGrouping</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="22">
<dimensionid>1</dimensionid>
<class>lnkClientServer</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="23">
<dimensionid>1</dimensionid>
<class>bizPatch</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="24">
<dimensionid>1</dimensionid>
<class>bizIncidentTicket</class>
<value>&lt;this&gt;</value>
<attribute>customer_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="25">
<dimensionid>1</dimensionid>
<class>lnkRelatedTicket</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="26">
<dimensionid>1</dimensionid>
<class>lnkInfraTicket</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="27">
<dimensionid>1</dimensionid>
<class>lnkContactTicket</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="28">
<dimensionid>1</dimensionid>
<class>bizWorkgroup</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="29">
<dimensionid>1</dimensionid>
<class>bizContract</class>
<value>&lt;this&gt;</value>
<attribute>org_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="30">
<dimensionid>1</dimensionid>
<class>lnkInfraContract</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="31">
<dimensionid>1</dimensionid>
<class>lnkContactContract</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="32">
<dimensionid>1</dimensionid>
<class>lnkDocumentContract</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="33">
<dimensionid>1</dimensionid>
<class>bizChangeTicket</class>
<value>&lt;this&gt;</value>
<attribute>customer_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="34">
<dimensionid>1</dimensionid>
<class>lnkInfraChangeTicket</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="35">
<dimensionid>1</dimensionid>
<class>lnkContactChange</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="36">
<dimensionid>1</dimensionid>
<class>bizKnownError</class>
<value>&lt;this&gt;</value>
<attribute>cust_id</attribute>
</URP_ClassProjection>
<URP_ClassProjection id="37">
<dimensionid>1</dimensionid>
<class>lnkInfraError</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="38">
<dimensionid>1</dimensionid>
<class>lnkDocumentError</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="39">
<dimensionid>1</dimensionid>
<class>AuditCategory</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="40">
<dimensionid>1</dimensionid>
<class>AuditRule</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="41">
<dimensionid>1</dimensionid>
<class>menuNode</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="42">
<dimensionid>1</dimensionid>
<class>CMDBChange</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="43">
<dimensionid>1</dimensionid>
<class>CMDBChangeOp</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="44">
<dimensionid>1</dimensionid>
<class>CMDBChangeOpCreate</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="45">
<dimensionid>1</dimensionid>
<class>CMDBChangeOpDelete</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="46">
<dimensionid>1</dimensionid>
<class>CMDBChangeOpSetAttribute</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="47">
<dimensionid>2</dimensionid>
<class>bizOrganization</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="48">
<dimensionid>2</dimensionid>
<class>logRealObject</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="49">
<dimensionid>2</dimensionid>
<class>bizContact</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="50">
<dimensionid>2</dimensionid>
<class>bizPerson</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="51">
<dimensionid>2</dimensionid>
<class>bizTeam</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="52">
<dimensionid>2</dimensionid>
<class>bizDocument</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="53">
<dimensionid>2</dimensionid>
<class>bizDocVersion</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="54">
<dimensionid>2</dimensionid>
<class>lnkDocumentRealObject</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="55">
<dimensionid>2</dimensionid>
<class>lnkContactRealObject</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="56">
<dimensionid>2</dimensionid>
<class>logInfra</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="57">
<dimensionid>2</dimensionid>
<class>bizLocation</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="58">
<dimensionid>2</dimensionid>
<class>bizCircuit</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="59">
<dimensionid>2</dimensionid>
<class>bizInterface</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="60">
<dimensionid>2</dimensionid>
<class>lnkInterfaces</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="61">
<dimensionid>2</dimensionid>
<class>bizDevice</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="62">
<dimensionid>2</dimensionid>
<class>bizPC</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="63">
<dimensionid>2</dimensionid>
<class>bizServer</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="64">
<dimensionid>2</dimensionid>
<class>bizNetworkDevice</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="65">
<dimensionid>2</dimensionid>
<class>bizInfraGroup</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="66">
<dimensionid>2</dimensionid>
<class>bizApplication</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="67">
<dimensionid>2</dimensionid>
<class>lnkInfraGrouping</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="68">
<dimensionid>2</dimensionid>
<class>lnkClientServer</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="69">
<dimensionid>2</dimensionid>
<class>bizPatch</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="70">
<dimensionid>2</dimensionid>
<class>bizIncidentTicket</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="71">
<dimensionid>2</dimensionid>
<class>lnkRelatedTicket</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="72">
<dimensionid>2</dimensionid>
<class>lnkInfraTicket</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="73">
<dimensionid>2</dimensionid>
<class>lnkContactTicket</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="74">
<dimensionid>2</dimensionid>
<class>bizWorkgroup</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="75">
<dimensionid>2</dimensionid>
<class>bizContract</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="76">
<dimensionid>2</dimensionid>
<class>lnkInfraContract</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="77">
<dimensionid>2</dimensionid>
<class>lnkContactContract</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="78">
<dimensionid>2</dimensionid>
<class>lnkDocumentContract</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="79">
<dimensionid>2</dimensionid>
<class>bizChangeTicket</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="80">
<dimensionid>2</dimensionid>
<class>lnkInfraChangeTicket</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="81">
<dimensionid>2</dimensionid>
<class>lnkContactChange</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="82">
<dimensionid>2</dimensionid>
<class>bizKnownError</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="83">
<dimensionid>2</dimensionid>
<class>lnkInfraError</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="84">
<dimensionid>2</dimensionid>
<class>lnkDocumentError</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="85">
<dimensionid>2</dimensionid>
<class>AuditCategory</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="86">
<dimensionid>2</dimensionid>
<class>AuditRule</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="87">
<dimensionid>2</dimensionid>
<class>menuNode</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="88">
<dimensionid>2</dimensionid>
<class>CMDBChange</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="89">
<dimensionid>2</dimensionid>
<class>CMDBChangeOp</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="90">
<dimensionid>2</dimensionid>
<class>CMDBChangeOpCreate</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="91">
<dimensionid>2</dimensionid>
<class>CMDBChangeOpDelete</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
<URP_ClassProjection id="92">
<dimensionid>2</dimensionid>
<class>CMDBChangeOpSetAttribute</class>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ClassProjection>
</Set>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<Set>
<URP_ProfileProjection id="1">
<dimensionid>1</dimensionid>
<profileid>2</profileid>
<value>1;2</value>
<attribute></attribute>
</URP_ProfileProjection>
<URP_ProfileProjection id="3">
<dimensionid>2</dimensionid>
<profileid>2</profileid>
<value>&lt;any&gt;</value>
<attribute></attribute>
</URP_ProfileProjection>
</Set>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<Set>
</Set>

View File

@@ -0,0 +1,189 @@
<?xml version="1.0" encoding="UTF-8"?>
<Set>
<URP_StimulusGrant id="1">
<profileid>2</profileid>
<class>bizServer</class>
<permission>no</permission>
<stimulus>ev_store</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="2">
<profileid>2</profileid>
<class>bizServer</class>
<permission>no</permission>
<stimulus>ev_ship</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="3">
<profileid>2</profileid>
<class>bizServer</class>
<permission>no</permission>
<stimulus>ev_plug</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="4">
<profileid>2</profileid>
<class>bizServer</class>
<permission>no</permission>
<stimulus>ev_configuration_finished</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="5">
<profileid>2</profileid>
<class>bizServer</class>
<permission>no</permission>
<stimulus>ev_val_failed</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="6">
<profileid>2</profileid>
<class>bizServer</class>
<permission>no</permission>
<stimulus>ev_mtp</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="7">
<profileid>2</profileid>
<class>bizServer</class>
<permission>no</permission>
<stimulus>ev_start_change</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="8">
<profileid>2</profileid>
<class>bizServer</class>
<permission>no</permission>
<stimulus>ev_end_change</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="9">
<profileid>2</profileid>
<class>bizServer</class>
<permission>no</permission>
<stimulus>ev_decommission</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="10">
<profileid>2</profileid>
<class>bizServer</class>
<permission>no</permission>
<stimulus>ev_obsolete</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="11">
<profileid>2</profileid>
<class>bizServer</class>
<permission>no</permission>
<stimulus>ev_recycle</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="12">
<profileid>2</profileid>
<class>bizIncidentTicket</class>
<permission>no</permission>
<stimulus>ev_assign</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="13">
<profileid>2</profileid>
<class>bizIncidentTicket</class>
<permission>no</permission>
<stimulus>ev_reassign</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="14">
<profileid>2</profileid>
<class>bizIncidentTicket</class>
<permission>no</permission>
<stimulus>ev_start_working</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="15">
<profileid>2</profileid>
<class>bizIncidentTicket</class>
<permission>no</permission>
<stimulus>ev_close</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="16">
<profileid>2</profileid>
<class>bizContract</class>
<permission>no</permission>
<stimulus>ev_freeze_version</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="17">
<profileid>2</profileid>
<class>bizContract</class>
<permission>no</permission>
<stimulus>ev_sign</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="18">
<profileid>2</profileid>
<class>bizContract</class>
<permission>no</permission>
<stimulus>ev_begin</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="19">
<profileid>2</profileid>
<class>bizContract</class>
<permission>no</permission>
<stimulus>ev_notice</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="20">
<profileid>2</profileid>
<class>bizContract</class>
<permission>no</permission>
<stimulus>ev_terminate</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="21">
<profileid>2</profileid>
<class>bizContract</class>
<permission>no</permission>
<stimulus>ev_elapsed</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="22">
<profileid>2</profileid>
<class>bizChangeTicket</class>
<permission>yes</permission>
<stimulus>ev_validate</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="23">
<profileid>2</profileid>
<class>bizChangeTicket</class>
<permission>yes</permission>
<stimulus>ev_reject</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="24">
<profileid>2</profileid>
<class>bizChangeTicket</class>
<permission>no</permission>
<stimulus>ev_reopen</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="25">
<profileid>2</profileid>
<class>bizChangeTicket</class>
<permission>no</permission>
<stimulus>ev_plan</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="26">
<profileid>2</profileid>
<class>bizChangeTicket</class>
<permission>yes</permission>
<stimulus>ev_approve</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="27">
<profileid>2</profileid>
<class>bizChangeTicket</class>
<permission>no</permission>
<stimulus>ev_replan</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="28">
<profileid>2</profileid>
<class>bizChangeTicket</class>
<permission>yes</permission>
<stimulus>ev_notapprove</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="29">
<profileid>2</profileid>
<class>bizChangeTicket</class>
<permission>no</permission>
<stimulus>ev_implement</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="30">
<profileid>2</profileid>
<class>bizChangeTicket</class>
<permission>no</permission>
<stimulus>ev_monitor</stimulus>
</URP_StimulusGrant>
<URP_StimulusGrant id="31">
<profileid>2</profileid>
<class>bizChangeTicket</class>
<permission>yes</permission>
<stimulus>ev_finish</stimulus>
</URP_StimulusGrant>
</Set>

View File

@@ -1,27 +1,36 @@
SET WEBROOT=http://localhost:81
SET USER=Erwan
SET PWD=Taloc
REM The order (numbering) of the files is important since
REM it dictates the order to import them back
wget --output-document=01.organizations.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizOrganization&format=xml"
wget --output-document=02.locations.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizLocation&format=xml"
wget --output-document=03.persons.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizPerson&format=xml"
wget --output-document=04.teams.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizTeam&format=xml"
wget --output-document=05.pcs.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizPC&format=xml"
wget --output-document=06.servers.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizServer&format=xml"
wget --output-document=07.applications.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizApplication&format=xml"
wget --output-document=08.nw-devices.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizNetworkDevice&format=xml"
wget --output-document=09.links_contacts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkContactRealObject&format=xml"
wget --output-document=10.workgroups.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizWorkgroup&format=xml"
wget --output-document=11.incidents.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizIncidentTicket&format=xml"
wget --output-document=12.relatedtickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkRelatedTicket&format=xml"
wget --output-document=13.infratickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkInfraTicket&format=xml"
wget --output-document=14.contacttickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkContactTicket&format=xml"
wget --output-document=15.changetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizChangeTicket&format=xml"
wget --output-document=16.infrachangetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkInfraChangeTicket&format=xml"
wget --output-document=17.contactchangetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkContactChange&format=xml"
wget --output-document=18.contracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizContract&format=xml"
wget --output-document=19.infracontracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkInfraContract&format=xml"
wget --output-document=20.contactcontracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkContactContract&format=xml"
wget --output-document=21.auditcategories.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT AuditCategory&format=xml"
wget --output-document=22.auditrules.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT AuditRule&format=xml"
wget --output-document=01.organizations.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizOrganization&format=xml"
wget --output-document=02.locations.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizLocation&format=xml"
wget --output-document=03.persons.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizPerson&format=xml"
wget --output-document=04.teams.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizTeam&format=xml"
wget --output-document=05.pcs.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizPC&format=xml"
wget --output-document=06.servers.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizServer&format=xml"
wget --output-document=07.applications.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizApplication&format=xml"
wget --output-document=08.nw-devices.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizNetworkDevice&format=xml"
wget --output-document=09.links_contacts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkContactRealObject&format=xml"
wget --output-document=10.workgroups.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizWorkgroup&format=xml"
wget --output-document=11.incidents.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizIncidentTicket&format=xml"
wget --output-document=12.relatedtickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkRelatedTicket&format=xml"
wget --output-document=13.infratickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkInfraTicket&format=xml"
wget --output-document=14.contacttickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkContactTicket&format=xml"
wget --output-document=15.changetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizChangeTicket&format=xml"
wget --output-document=16.infrachangetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkInfraChangeTicket&format=xml"
wget --output-document=17.contactchangetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkContactChange&format=xml"
wget --output-document=18.contracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizContract&format=xml"
wget --output-document=19.infracontracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkInfraContract&format=xml"
wget --output-document=20.contactcontracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkContactContract&format=xml"
wget --output-document=21.auditcategories.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT AuditCategory&format=xml"
wget --output-document=22.auditrules.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT AuditRule&format=xml"
wget --output-document=23.dimensions.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_Dimensions&format=xml"
wget --output-document=24.profiles.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_Profiles&format=xml"
wget --output-document=25.classprojection.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_ClassProjection&format=xml"
wget --output-document=26.profileprojection.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_ProfileProjection&format=xml"
wget --output-document=27.actiongrant.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_ActionGrant&format=xml"
wget --output-document=28.attributegrant.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_AttributeGrant&format=xml"
wget --output-document=29.stimulusgrant.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_StimulusGrant&format=xml"
pause