- The object creation page now offers tha choice to create an instance of the sub-classes

- Made some objects abstract in the std config-management model
- The creation button is now labelled "Create" instead of "Apply" !
- Better display of long messages (or errors) in SetuWebpage.

SVN:trunk[529]
This commit is contained in:
Denis Flaven
2010-07-01 20:13:26 +00:00
parent d9725eec73
commit db3f3ff1cd
7 changed files with 88 additions and 25 deletions

View File

@@ -717,6 +717,7 @@ try
case 'new':
$sClass = utils::ReadParam('class', '');
$sStateCode = utils::ReadParam('state', '');
$bCheckSubClass = utils::ReadParam('checkSubclass', true);
if ( empty($sClass) )
{
throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'class'));
@@ -730,19 +731,77 @@ try
$oContext = new UserContext();
$aArgs = array_merge($oAppContext->GetAsHash(), utils::ReadParam('default', array()));
$sClassLabel = MetaModel::GetName($sClass);
$oP->set_title(Dict::Format('UI:CreationPageTitle_Class', $sClassLabel));
$oP->add("<h1><img src=\"".MetaModel::GetClassIcon($sClass)."\" style=\"vertical-align:middle;\">".Dict::Format('UI:CreationTitle_Class', $sClassLabel)."</h1>\n");
$oP->add("<div class=\"wizContainer\">\n");
$aDefaults = utils::ReadParam('default', array());
$aContext = $oAppContext->GetAsHash();
foreach($aContext as $key => $value)
// If the specified class has subclasses, ask the user an instance of which class to create
$aSubClasses = MetaModel::EnumChildClasses($sClass, ENUM_CHILD_CLASSES_ALL); // Including the specified class itself
$aPossibleClasses = array();
$sRealClass = '';
if ($bCheckSubClass)
{
$aDefaults[$key] = $value;
foreach($aSubClasses as $sCandidateClass)
{
if (!MetaModel::IsAbstract($sCandidateClass))
{
$aPossibleClasses[$sCandidateClass] = MetaModel::GetName($sCandidateClass);
}
}
// Only one of the subclasses can be instantiated...
if (count($aPossibleClasses) == 1)
{
$aKeys = array_keys($aPossibleClasses);
$sRealClass = $aKeys[0];
}
}
else
{
$sRealClass = $sClass;
}
if (!empty($sRealClass))
{
// Display the creation form
$sClassLabel = MetaModel::GetName($sRealClass);
$oP->set_title(Dict::Format('UI:CreationPageTitle_Class', $sClassLabel));
$oP->add("<h1><img src=\"".MetaModel::GetClassIcon($sRealClass)."\" style=\"vertical-align:middle;\">".Dict::Format('UI:CreationTitle_Class', $sClassLabel)."</h1>\n");
$oP->add("<div class=\"wizContainer\">\n");
$aDefaults = utils::ReadParam('default', array());
$aContext = $oAppContext->GetAsHash();
foreach($aContext as $key => $value)
{
$aDefaults[$key] = $value;
}
cmdbAbstractObject::DisplayCreationForm($oP, $sRealClass, null /* $oObjToClone */, array('default' => $aDefaults));
$oP->add("</div>\n");
}
else
{
// Select the derived class to create
$sClassLabel = MetaModel::GetName($sClass);
$oP->add("<h1><img src=\"".MetaModel::GetClassIcon($sClass)."\" style=\"vertical-align:middle;\">".Dict::Format('UI:CreationTitle_Class', $sClassLabel)."</h1>\n");
$oP->add("<div class=\"wizContainer\">\n");
$oP->add('<form>');
$oP->add('<p>'.Dict::Format('UI:SelectTheTypeOf_Class_ToCreate', $sClassLabel));
$aDefaults = utils::ReadParam('default', array());
$oP->add($oAppContext->GetForForm());
$oP->add("<input type=\"hidden\" name=\"state\" value=\"$sStateCode\">\n");
$oP->add("<input type=\"hidden\" name=\"operation\" value=\"new\">\n");
foreach($aDefaults as $key => $value)
{
$oP->add("<input type=\"hidden\" name=\"default[$key]\" value=\"$value\">\n");
$aDefaults[$key] = $value;
}
$oP->add('<select name="class">');
asort($aPossibleClasses);
foreach($aPossibleClasses as $sClassName => $sClassLabel)
{
$sSelected = ($sClassName == $sClass) ? 'selected' : '';
$oP->add("<option $sSelected value=\"$sClassName\">$sClassLabel</option>");
}
$oP->add('</select>');
$oP->add("&nbsp; <input type=\"submit\" value=\"".Dict::S('UI:Button:Apply')."\"></p>");
$oP->add('</form>');
$oP->add("</div>\n");
}
cmdbAbstractObject::DisplayCreationForm($oP, $sClass, null /* $oObjToClone */, array('default' => $aDefaults));
$oP->add("</div>\n");
break;
case 'apply_modify':