Exemplo n.º 1
0
/**
 * Apply the 'next-action' to the given object or redirect to the page that prompts for additional information if needed
 * @param $oP WebPage The page for the output
 * @param $oObj CMDBObject The object to process
 * @param $sNextAction string The code of the stimulus for the 'action' (i.e. Transition) to apply
 */
function ApplyNextAction(Webpage $oP, CMDBObject $oObj, $sNextAction)
{
    // Here handle the apply stimulus
    $aTransitions = $oObj->EnumTransitions();
    $aStimuli = MetaModel::EnumStimuli(get_class($oObj));
    if (!isset($aTransitions[$sNextAction])) {
        // Invalid stimulus
        throw new ApplicationException(Dict::Format('UI:Error:Invalid_Stimulus_On_Object_In_State', $sNextAction, $oObj->GetName(), $oObj->GetStateLabel()));
    }
    // Get the list of missing mandatory fields for the target state, considering only the changes from the previous form (i.e don't prompt twice)
    $aExpectedAttributes = $oObj->GetExpectedAttributes($oObj->GetState(), $sNextAction, true);
    if (count($aExpectedAttributes) == 0) {
        // If all the mandatory fields are already present, just apply the transition silently...
        if ($oObj->ApplyStimulus($sNextAction)) {
            $oObj->DBUpdate();
        }
        ReloadAndDisplay($oP, $oObj);
    } else {
        // redirect to the 'stimulus' action
        $oAppContext = new ApplicationContext();
        //echo "<p>Missing Attributes <pre>".print_r($aExpectedAttributes, true)."</pre></p>\n";
        $oP->add_header('Location: ' . utils::GetAbsoluteUrlAppRoot() . 'pages/UI.php?operation=stimulus&class=' . get_class($oObj) . '&stimulus=' . $sNextAction . '&id=' . $oObj->getKey() . '&' . $oAppContext->GetForLink());
    }
}