/** * Renders the Issue History Tab * * @param mixed $_issuesContainer array of issues associated with current ticket * * @author Abhinav Kumar * @return boolean 'true' on success and 'false' otherwise * @throws SWIFT_Exception if class is not loaded */ public function RenderHistoryTab($_issuesContainer) { $_SWIFT = SWIFT::GetInstance(); $_JIRABridge = SWIFT_JIRABridge::GetInstance(); if (!$this->GetIsClassLoaded()) { throw new SWIFT_Exception(__CLASS__ . ' ' . SWIFT_CLASSNOTLOADED); } else { if (!is_array($_issuesContainer)) { throw new SWIFT_Exception(SWIFT_INVALIDDATA); } } $this->UserInterface->Start(get_class($this), '', SWIFT_UserInterface::MODE_INSERT, false); $_IssueHistoryTabObject = new SWIFT_UserInterfaceTab($this->UserInterface, 'history', '', 1, 'history', false, false, 4, ''); $_columnContainer = array(); // Issue ID $_columnContainer[0]['value'] = $this->Language->Get('jira_issueid'); $_columnContainer[0]['align'] = 'left'; $_columnContainer[0]['width'] = '10'; // Summary $_columnContainer[1]['value'] = $this->Language->Get('jira_summary'); $_columnContainer[1]['align'] = 'left'; $_columnContainer[1]['width'] = '100'; // Updated $_columnContainer[3]['value'] = $this->Language->Get('jira_updated'); $_columnContainer[3]['align'] = 'left'; $_columnContainer[3]['width'] = '10'; // Priority $_columnContainer[4]['value'] = $this->Language->Get('jira_priority'); $_columnContainer[4]['align'] = 'left'; $_columnContainer[4]['width'] = '10'; // Status $_columnContainer[5]['value'] = $this->Language->Get('jira_status'); $_columnContainer[5]['align'] = 'left'; $_columnContainer[5]['width'] = '10'; // Assigned To $_columnContainer[6]['value'] = $this->Language->Get('jira_assignedto'); $_columnContainer[6]['align'] = 'left'; $_columnContainer[6]['width'] = '10'; // Action $_columnContainer[7]['value'] = $this->Language->Get('jira_action'); $_columnContainer[7]['align'] = 'left'; $_columnContainer[7]['width'] = '10'; $_IssueHistoryTabObject->Row($_columnContainer, 'gridtabletitlerow'); if (empty($_issuesContainer)) { $_columnContainer = array(); $_columnContainer[0]['value'] = $this->Language->Get('jira_noissuefound'); $_columnContainer[0]['align'] = 'left'; $_columnContainer[0]['width'] = '100%'; $_IssueHistoryTabObject->Row($_columnContainer); $_renderHTML = $_IssueHistoryTabObject->GetDisplayHTML(true); $_renderHTML .= '<script language="Javascript" type="text/javascript">'; $_renderHTML .= 'ClearFunctionQueue();'; $_renderHTML .= '</script>'; echo $_renderHTML; return true; } foreach ($_issuesContainer as $_Issue) { $_columnContainer = array(); $_issueURL = $_SWIFT->Settings->Get('bj_jiraurl') . 'browse/' . $_Issue->GetKey(); // Key $_columnContainer[0]['value'] = '<a href="' . $_issueURL . '" target="_blank">' . htmlspecialchars($_Issue->GetKey()) . '</a>'; $_columnContainer[0]['align'] = 'left'; $_columnContainer[0]['width'] = '10'; // Summary $_columnContainer[1]['value'] = '<a href="' . $_issueURL . '" target="_blank">' . IIF(strlen($_Issue->GetSummary()) > 100, htmlspecialchars(substr($_Issue->GetSummary(), 0, 100)) . '...', htmlspecialchars($_Issue->GetSummary())) . '</a>'; $_columnContainer[1]['align'] = 'left'; $_columnContainer[1]['width'] = '100'; // Updated $_columnContainer[3]['value'] = htmlspecialchars(SWIFT_Date::EasyDate($_Issue->GetUpdated()) . IIF(SWIFT_Date::EasyDate($_Issue->GetUpdated()) == $this->Language->Get('edjustnow'), '', ' ago')); $_columnContainer[3]['align'] = 'left'; $_columnContainer[3]['width'] = '10'; // Priority $_columnContainer[4]['value'] = htmlspecialchars($_Issue->GetPriority()); $_columnContainer[4]['align'] = 'left'; $_columnContainer[4]['width'] = '10'; // Status $_columnContainer[5]['value'] = htmlspecialchars($_Issue->GetStatus()); $_columnContainer[5]['align'] = 'left'; $_columnContainer[5]['width'] = '10'; // Comments $_columnContainer[6]['value'] = htmlspecialchars($_Issue->GetAssignee()); $_columnContainer[6]['align'] = 'left'; $_columnContainer[6]['width'] = '10'; // Unlink $_columnContainer[7]['value'] = '<a title="' . $this->Language->Get('postJIRAComment') . '" href="#" onclick="postJIRAComment(\'' . $_Issue->GetKey() . '\')"> <img src="' . SWIFT::Get('swiftpath') . SWIFT_APPSDIRECTORY . '/jira/resources/icon-comment.gif' . '"/> </a>' . ' | ' . '<a title="' . $this->Language->Get('jira_unlinkissue') . '" href="#" onclick="unlinkJIRAIssue(\'' . $_Issue->GetKey() . '\')"> <img src="' . SWIFT::Get('swiftpath') . SWIFT_APPSDIRECTORY . '/jira/resources/edit_delete.png' . '"/> </a>'; $_columnContainer[7]['align'] = 'left'; $_columnContainer[7]['width'] = '10'; $_IssueHistoryTabObject->Row($_columnContainer, '', $_Issue->GetKey()); //Fetch the issue comments now if ($_JIRABridge) { $_commentsContainer = $_JIRABridge->FetchAllCommentsBy('issuekey', $_Issue->GetKey()); if (isset($_columnContainer) && _is_array($_commentsContainer)) { $_renderedNotes = array(); foreach ($_commentsContainer as $_JIRAComment) { $_renderedNotes[] = '<div class="notebackground"> <div class="notecontainer"> <div class="note">' . nl2br($_JIRAComment->GetRawBody(), true) . '</div> </div> <cite class="tip"> <strong> <img border="0" align="absmiddle" src="' . SWIFT::Get('themepath') . 'images/icon_user2.png"/> ' . $_JIRAComment->GetAuthor() . ' ' . htmlspecialchars(SWIFT_Date::EasyDate($_JIRAComment->GetUpdated())) . ' ago </strong><div style="float: right; padding-right: 4px;"></div> </cite> </div>'; } $_renderedNotes = implode('', $_renderedNotes); $_commentContainer[0]['value'] = '<div class="allnotes">' . $_renderedNotes . '</div>'; $_commentContainer[0]['width'] = '100'; $_commentContainer[0]['align'] = 'left'; $_commentContainer[0]['colspan'] = '7'; $_commentContainer[0]['style'] = 'background: none repeat scroll 0pt 0pt #F6F1E7; padding: 0px;'; $_IssueHistoryTabObject->Row($_commentContainer, '', $_Issue->GetKey()); } } } $_renderHTML = $_IssueHistoryTabObject->GetDisplayHTML(true); echo $_renderHTML; return true; }
/** * Renders Link Issue Form * * @param int $_ticketID The current ticket id * * @return boolean 'TRUE' on success and 'FALSE' otherwise * @throws SWIFT_Exception if class is not loaded or $_ticketID is not provided */ public function RenderLinkIssueForm($_ticketID) { $_SWIFT = SWIFT::GetInstance(); if (!$this->GetIsClassLoaded()) { throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED); } if (empty($_ticketID)) { throw new SWIFT_Exception('Ticket ID' . $this->Language->Get('jira_noempty')); } $_ticketID = (int) $_ticketID; $this->Load->Library('Ticket:Ticket', false, false, APP_TICKETS); $_SWIFT_TicketObject = SWIFT_Ticket::GetObjectOnID($_ticketID); $_ticketPostContainer = $_SWIFT_TicketObject->GetTicketPosts(); $_ticketPosts = array(); foreach ($_ticketPostContainer as $_TicketPost) { $_creater = $_TicketPost->GetProperty('fullname'); if ($_TicketPost->GetProperty('creator') == SWIFT_Ticket::CREATOR_STAFF) { $_staffDataStore = $_SWIFT->Staff->GetDataStore(); $_creater = $_staffDataStore['grouptitle']; } else { if ($_TicketPost->GetProperty('creator') == SWIFT_Ticket::CREATOR_USER) { $_creater .= ' (' . $this->Language->Get('jira_user') . ')'; } } $_postedOn = SWIFT_Date::Get(SWIFT_Date::TYPE_DATETIME, $_TicketPost->GetProperty('dateline')); $_ticketPosts[] = $_creater . ' - ' . $_postedOn . PHP_EOL . strip_tags(trim($_TicketPost->GetDisplayContents())) . PHP_EOL; } $_ticketPosts = implode(PHP_EOL, $_ticketPosts); $_ticketPosts = '[' . $_SWIFT_TicketObject->GetProperty('ticketmaskid') . ']: ' . $_SWIFT_TicketObject->GetProperty('subject') . PHP_EOL . '==================================================' . PHP_EOL . PHP_EOL . $_ticketPosts; $this->UserInterface->Start(get_class($this), '/JIRA/Bug/ProcessLinkIssueForm', SWIFT_UserInterface::MODE_INSERT, true); $_buttonText = '<input type="button" name="submitbutton" id="%formid%_submit" class="rebuttonblue" onclick="processIssueLinking(\'%formid%\');PreventDoubleClicking(this);" value="' . $this->Language->Get('jira_save') . '" /> <input type="button" name="submitbutton" id="%formid%_cancel" class="rebuttonred" onclick="javascript: $(\'.ui-icon-closethick\').click();" value="' . $this->Language->Get('jira_cancel') . '"/>'; $this->UserInterface->OverrideButtonText($_buttonText); $_GeneralTabObject = $this->UserInterface->AddTab($this->Language->Get('tabgeneral'), SWIFT::Get('swiftpath') . '__modules/jira/resources/postbugtojira_b.gif', 'general', true, false); $this->Load->Library('JIRA:JIRABridge', false, false, 'jira'); $_JIRABridge = SWIFT_JIRABridge::GetInstance(); if (!$_JIRABridge) { echo $this->Language->Get('jira_error'); } //Add form fields $_GeneralTabObject->Hidden('ticketId', $_ticketID); $_GeneralTabObject->Hidden('ticketkey', $_SWIFT_TicketObject->GetTicketDisplayID()); $_GeneralTabObject->Text('jira_issue_id', $this->Language->Get('jira_issue_id'), $this->Language->Get('jira_issue_id_desc'), '', 'text', 60); $_GeneralTabObject->Title('<label for="description">' . $this->Language->Get('jira_description') . '</label><br/><span class="tabledescription">' . $this->Language->Get('jira_sensitive') . '</span>'); $_GeneralTabObject->TextArea('description', '', $this->Language->Get('jira_description_desc'), $_ticketPosts, 3, 14); //Add Hidden fields - proves handy for Loading the view after update $this->UserInterface->Hidden('jira_ticketid', $_SWIFT_TicketObject->GetTicketID()); $this->UserInterface->Hidden('jira_listtype', 'inbox'); $this->UserInterface->Hidden('jira_departmentid', $_SWIFT_TicketObject->GetProperty('departmentid')); $this->UserInterface->Hidden('jira_ticketstatusid', $_SWIFT_TicketObject->GetProperty('ticketstatusid')); $this->UserInterface->Hidden('jira_tickettypeid', $_SWIFT_TicketObject->GetProperty('tickettypeid')); $this->UserInterface->End(); return true; }
/** * Render the Action forms * * @author Atul Atri * * @param array $_projectsOpts basecamp project list * @param array $_todoProjectList list of todo lists on basecamp in selected project * @param array $_personList list of persons * @param array $_ticketID ticket tid * @param String $_errorTitle Error title if some error needs to be rended * @param String $_errorMsg Error Message if some error needs to be rended * * @return bool "true" on Success, "false" otherwise */ public function RenderTodoExportForm($_projectsOpts, $_todoProjectList, $_personList, $_ticketID, $_errorTitle = '', $_errorMsg = '') { $this->UserInterface->Header($this->Language->Get('basecamp') . ' > ' . $this->Language->Get('basecamp_todoexportform')); $this->UserInterface->Start(get_class($this), '/basecamp/TodoManager/TodoExportFormSubmit', SWIFT_UserInterface::MODE_EDIT, false, false, false, false, 'todoExportFormResHolder', "SWIFT.Basecamp.AdminObject.RestoreTodoExportForm"); $this->UserInterface->Toolbar->AddButton($this->Language->Get('export')); $_ActionTab = $this->UserInterface->AddTab($this->Language->Get('basecamp_tab_export'), 'icon_form.gif', 'action', true); if ($_errorMsg) { if (!$_errorTitle) { $_errorTitle = $this->Language->Get('error'); } $_ActionTab->Error($_errorTitle, $_errorMsg, 'bc_todo_list_error'); } $_ActionTab->Select('todoproject', $this->Language->Get('basecamp_todoproject'), $this->Language->Get('d_basecamp_todoproject'), $_projectsOpts); $_ActionTab->Select('todolist', $this->Language->Get('basecamp_todlist'), $this->Language->Get('d_basecamp_todlist'), $_todoProjectList); $_ActionTab->Select('assignee', $this->Language->Get('basecamp_assignee'), $this->Language->Get('d_basecamp_assignee'), $_personList); $_ActionTab->date('duedate', $this->Language->Get('basecamp_duedate'), $this->Language->Get('d_basecamp_duedate')); $_SWIFT_TicketObject = SWIFT_Ticket::GetObjectOnID($_ticketID); $_ticketSub = trim($_SWIFT_TicketObject->subject); $_todoItemStr = '[' . $_SWIFT_TicketObject->ticketmaskid . '] ' . $_ticketSub; $_ActionTab->Text('todoitem', $this->Language->Get('basecamp_todoitem_name'), '', $_todoItemStr, 'text', 60); if ($_SWIFT_TicketObject->GetProperty('hasattachments')) { $_attachments = $_SWIFT_TicketObject->GetAttachmentContainer(); $_checkBoxContainer = array(); foreach ($_attachments as $_tmpArr) { foreach ($_tmpArr as $_nextAttachment) { $_attachementId = $_nextAttachment['attachmentid']; $_attachementSize = round($_nextAttachment['filesize'] / 1024, 2); $_tmp['value'] = $_attachementId; $_tmp['title'] = $_nextAttachment['filename'] . " ({$_attachementSize} KB)"; $_checkBoxContainer[$_attachementId] = $_tmp; } } $_ActionTab->CheckBoxList('todo_files', $this->Language->Get('basecamp_todo_files'), $this->Language->Get('d_basecamp_todo_files'), $_checkBoxContainer); } $_ticketPostContainer = $_SWIFT_TicketObject->GetTicketPosts(); $_ticketPosts = array(); foreach ($_ticketPostContainer as $_TicketPost) { $_creater = ucfirst($_TicketPost->GetProperty('fullname')); $_postedOn = SWIFT_Date::Get(SWIFT_Date::TYPE_DATETIME, $_TicketPost->GetProperty('dateline')); $_subStr = ''; if ($_TicketPost->GetProperty('creator') == SWIFT_Ticket::CREATOR_STAFF) { $_staffDataStore = $this->Staff->GetDataStore(); $_subStr .= '[' . $_staffDataStore['grouptitle'] . "] {$_creater} " . $this->Language->Get('bc_wrote_on') . " {$_postedOn}"; } else { if ($_TicketPost->GetProperty('creator') == SWIFT_Ticket::CREATOR_USER) { $_subStr .= '[' . $this->Language->Get('bc_user') . "] {$_creater} " . $this->Language->Get('bc_wrote_on') . " {$_postedOn}"; } } $_postContent = trim($_TicketPost->GetDisplayContents()); $_subStrLen = strlen($_subStr); $_ticketPosts[] = $_subStr . PHP_EOL . str_repeat('-', $_subStrLen) . PHP_EOL . strip_tags($_postContent); } $_firstComment = implode(PHP_EOL . PHP_EOL . PHP_EOL, $_ticketPosts); $_ActionTab->TextArea('todocomment', $this->Language->Get('basecamp_todocomment'), $this->Language->Get('d_basecamp_todocomment'), $_firstComment, 30, 20); $this->UserInterface->Hidden('todo_ticketid', $_ticketID); $this->UserInterface->End(); $this->UserInterface->Footer(); }