/** * Displays the details of a request * @param WebPage $oP The current web page * @param Object $oObj The target object * @return void */ function ShowDetailsRequest(WebPage $oP, $oObj) { $sClass = get_class($oObj); $sLogAttCode = GetConstant($sClass, 'PUBLIC_LOG'); $sUserCommentAttCode = GetConstant($sClass, 'USER_COMMENT'); $bIsReopenButton = false; $bIsCloseButton = false; $bIsEscalateButton = false; $bEditAttachments = false; $aEditAtt = array(); // List of attributes editable in the main form if (!MetaModel::DBIsReadOnly()) { switch ($oObj->GetState()) { case 'resolved': $aEditAtt = array(); $aTransitions = $oObj->EnumTransitions(); $oSet = DBObjectSet::FromObject($oObj); // Add the "Reopen" button if this is valid action if (array_key_exists('ev_reopen', $aTransitions) && UserRights::IsStimulusAllowed($sClass, 'ev_reopen', $oSet)) { $bIsReopenButton = true; MakeStimulusForm($oP, $oObj, 'ev_reopen', array($sLogAttCode)); } // Add the "Close" button if this is valid action if (array_key_exists('ev_close', $aTransitions) && UserRights::IsStimulusAllowed($sClass, 'ev_close', $oSet)) { $bIsCloseButton = true; MakeStimulusForm($oP, $oObj, 'ev_close', array('user_satisfaction', $sUserCommentAttCode)); } break; case 'closed': // By convention 'closed' is the final state of a ticket and nothing can be done in such a state break; default: // In all other states, the only possible action is to update the ticket (both the case log and the attachments) // This update is possible only if the case log field is not read-only or hidden in the current state $iFlags = $oObj->GetAttributeFlags($sLogAttCode); $bReadOnly = ($iFlags & (OPT_ATT_READONLY | OPT_ATT_HIDDEN)) != 0; if ($bReadOnly) { $aEditAtt = array(); $bEditAttachments = false; } else { $aEditAtt = array($sLogAttCode => '????'); $bEditAttachments = true; } break; } } // REFACTORISER LA MISE EN FORME $oP->add("<h1 id=\"title_request_details\">" . $oObj->GetIcon() . " " . Dict::Format('Portal:TitleRequestDetailsFor_Request', $oObj->GetName()) . "</h1>\n"); $aAttList = json_decode(GetConstant($sClass, 'DETAILS_ZLIST'), true); switch ($oObj->GetState()) { case 'closed': $aAttList['centered'][] = 'user_satisfaction'; $aAttList['centered'][] = $sUserCommentAttCode; } // Remove the edited attribute from the shown attributes // foreach ($aEditAtt as $sAttCode => $foo) { foreach ($aAttList as $col => $aColumn) { if (in_array($sAttCode, $aColumn)) { if (($index = array_search($sAttCode, $aColumn)) !== false) { unset($aAttList[$col][$index]); } } } } $oP->add("<div class=\"wizContainer\" id=\"form_commment_request\">\n"); $oP->WizardFormStart('request_form', null); $oP->add('<div id="request_details">'); $oP->add('<table id="request_details_table">'); $oP->add('<tr>'); $oP->add('<td style="vertical-align:top;">'); $oP->DisplayObjectDetails($oObj, $aAttList['col:left']); $oP->add('</td>'); $oP->add('<td style="vertical-align:top;">'); $oP->DisplayObjectDetails($oObj, $aAttList['col:right']); $oP->add('</td>'); $oP->add('</tr>'); if (array_key_exists('centered', $aAttList)) { $oP->add('<tr>'); $oP->add('<td style="vertical-align:top;" colspan="2">'); $oP->DisplayObjectDetails($oObj, $aAttList['centered']); $oP->add('</td>'); $oP->add('</tr>'); } // REFACTORISER $oP->add('<tr>'); $oP->add('<td colspan="2" style="vertical-align:top;">'); $oAttPlugin = new AttachmentPlugIn(); if ($bEditAttachments) { $oAttPlugin->EnableDelete(false); $oAttPlugin->OnDisplayRelations($oObj, $oP, true); } else { $oAttPlugin->OnDisplayRelations($oObj, $oP, false); } $oP->add('</td>'); $oP->add('</tr>'); $oP->add('<tr>'); $oP->add('<td colspan="2" style="vertical-align:top;">'); //$oP->add("<form action=\"../portal/index.php\" id=\"request_form\" method=\"post\">\n"); //$oP->add('<table id=""><tr><td style="vertical-align:top;">'); //$oP->add("<h1 id=\"title_request_details\">".Dict::Format('Portal:CommentsFor_Request', $oObj->GetName())."</h1>\n"); $oP->add("<input type=\"hidden\" name=\"class\" value=\"{$sClass}\">"); $oP->add("<input type=\"hidden\" name=\"id\" value=\"" . $oObj->GetKey() . "\">"); $oP->add("<input type=\"hidden\" name=\"operation\" value=\"update_request\">"); $oP->add("<input type=\"hidden\" id=\"stimulus_to_apply\" name=\"apply_stimulus\" value=\"\">\n"); $oP->add_script(<<<EOF \tfunction SetStimulusToApply(sStimulusCode) \t{ \t\t\$('#stimulus_to_apply').val(sStimulusCode); \t} EOF ); $aEditFields = array(); // Intermediate array to avoid code duplication while splitting btw ticket_log and the rest foreach ($aEditAtt as $sAttCode => $foo) { $sValue = $oObj->Get($sAttCode); $sDisplayValue = $oObj->GetEditValue($sAttCode); $aArgs = array('this' => $oObj, 'formPrefix' => ''); $oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode); $sInputId = 'input_' . $sAttCode; $sHTMLValue = "<span id=\"field_{$sInputId}\">" . cmdbAbstractObject::GetFormElementForField($oP, $sClass, $sAttCode, $oAttDef, $sValue, $sDisplayValue, $sInputId, '', 0, $aArgs) . '</span>'; $aEditFields[$sAttCode] = array('label' => MetaModel::GetLabel($sClass, $sAttCode), 'value' => $sHTMLValue); } foreach ($aEditFields as $sAttCode => $aFieldSpec) { if ($sAttCode == $sLogAttCode) { // Skip, the public log will be displayed below the buttons continue; } $oP->add("<div class=\"edit_item\">"); $oP->add('<h1>' . $aFieldSpec['label'] . '</h1>'); $oP->add($aFieldSpec['value']); $oP->add('</div>'); } if ($bIsReopenButton) { $sStimulusCode = 'ev_reopen'; $sTitle = addslashes(Dict::S('Portal:Button:ReopenTicket')); $sOk = addslashes(Dict::S('UI:Button:Ok')); $oP->p('<input type="button" onClick="RunStimulusDialog(\'' . $sStimulusCode . '\', \'' . $sTitle . '\', \'' . $sOk . '\');" value="' . $sTitle . '...">'); } if ($bIsCloseButton) { $sStimulusCode = 'ev_close'; $sTitle = addslashes(Dict::S('Portal:Button:CloseTicket')); $sOk = addslashes(Dict::S('UI:Button:Ok')); $oP->p('<input type="button" onClick="RunStimulusDialog(\'' . $sStimulusCode . '\', \'' . $sTitle . '\', \'' . $sOk . '\');" value="' . $sTitle . '...">'); } elseif (count($aEditAtt) > 0) { $oP->p('<input type="submit" value="' . Dict::S('Portal:Button:UpdateRequest') . '">'); } if ($bIsEscalateButton) { $sStimulusCode = 'ev_timeout'; $oP->p('<input type="submit" onClick="SetStimulusToApply(\'' . $sStimulusCode . '\');" value="' . Dict::S('Portal:ButtonEscalate') . '">'); } $oP->add('</td>'); $oP->add('</tr>'); $oP->add('<tr>'); $oP->add('<td colspan="2" style="vertical-align:top;">'); if (isset($aEditFields[$sLogAttCode])) { $oP->add("<div class=\"edit_item\">"); $oP->add('<h1>' . $aEditFields[$sLogAttCode]['label'] . '</h1>'); $oP->add($aEditFields[$sLogAttCode]['value']); $oP->add('</div>'); } else { $oP->add('<h1>' . MetaModel::GetLabel($sClass, $sLogAttCode) . '</h1>'); $oP->add($oObj->GetAsHTML($sLogAttCode)); } $oP->add('</td>'); $oP->add('</tr>'); $oP->add('</table>'); $oP->add('</div>'); $oP->WizardFormEnd(); $oP->add('</div>'); }