public function getTextColor() { if (!\thebuggenie\core\framework\Context::isCLI()) { \thebuggenie\core\framework\Context::loadLibrary('ui'); } $rgb = hex2rgb($this->_itemdata); return 0.299 * $rgb['red'] + 0.587 * $rgb['green'] + 0.114 * $rgb['blue'] > 170 ? '#333' : '#FFF'; }
public function runIssueEditTimeSpent(framework\Request $request) { try { $entry_id = $request['entry_id']; $spenttime = $entry_id ? tables\IssueSpentTimes::getTable()->selectById($entry_id) : new entities\IssueSpentTime(); if ($issue_id = $request['issue_id']) { $issue = entities\Issue::getB2DBTable()->selectById($issue_id); } else { throw new \Exception('no issue'); } framework\Context::loadLibrary('common'); $spenttime->editOrAdd($issue, $this->getUser(), array_only_with_default($request->getParameters(), array_merge(array('timespent_manual', 'timespent_specified_type', 'timespent_specified_value', 'timespent_activitytype', 'timespent_comment', 'edited_at'), \thebuggenie\core\entities\common\Timeable::getUnitsWithPoints()))); } catch (\Exception $e) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('edited' => 'error', 'error' => $e->getMessage())); } $this->return_data = array('edited' => 'ok'); }
protected function _parseText($options = array()) { $options = array_merge($options, $this->options); framework\Context::loadLibrary('common'); $output = ""; $text = $this->text; if (!isset($this->options['plain'])) { $this->list_level_types = array(); $this->list_level = 0; $this->deflist = false; $this->ignore_newline = false; $text = preg_replace_callback('/<(nowiki|pre)>(.*)<\\/(\\1)>(?!<\\/(\\1)>)/ismU', array($this, "_parse_save_nowiki"), $text); $text = preg_replace_callback('/[\\{]{3,3}([\\d|\\w|\\|]*)[\\}]{3,3}/ismU', array($this, "_parse_insert_variables"), $text); $text = preg_replace_callback('/(?<!\\{)[\\{]{2,2}([^{^}.]*)[\\}]{2,2}(?!\\})/ismU', array($this, "_parse_insert_template"), $text); if (isset($this->options['included'])) { $text = preg_replace_callback('/<noinclude>(.+?)<\\/noinclude>(?!<\\/noinclude>)/ism', array($this, "_parse_remove_noinclude"), $text); $text = preg_replace_callback('/<includeonly>(.+?)<\\/includeonly>(?!<\\/includeonly>)/ism', array($this, "_parse_preserve_includeonly"), $text); return $text; } if (!isset($this->options['included'])) { $text = preg_replace_callback('/<includeonly>(.+?)<\\/includeonly>(?!<\\/includeonly>)/ism', array($this, "_parse_remove_includeonly"), $text); $text = preg_replace_callback('/<noinclude>(.+?)<\\/noinclude>(?!<\\/noinclude>)/ism', array($this, "_parse_preserve_noinclude"), $text); } $text = preg_replace_callback('/<source((?:\\s+[^\\s]+=".*")*)>\\s*?(.+)\\s*?<\\/source>/ismU', array($this, "_parse_save_code"), $text); // Thanks to Mike Smith (scgtrp) for the above regexp $text = tbg_decodeUTF8($text, true); $text = preg_replace_callback('/<(strike|u|pre|tt|s|del|ins|u|blockquote|div|span|font|sub|sup)(\\s.*)?>(.*)<\\/(\\1)>/ismU', array($this, '_parse_allowed_tags'), $text); $text = str_replace('<br>', '<br>', $text); $lines = explode("\n", $text); foreach ($lines as $line) { if (mb_substr($line, -1) == "\r") { $line = mb_substr($line, 0, -1); } $output .= $this->_parse_line($line, $options); } // Check if we need to close any tags in case the list items, etc were the last line if ($this->list_level > 0) { $output .= $this->_parse_list(false, true); } if ($this->deflist) { $output .= $this->_parse_definitionlist(false, true); } if ($this->preformat) { $output .= $this->_parse_preformat(false, true); } if ($this->quote) { $output .= $this->_parse_quote(false, true); } $output .= $this->_parse_tablecloser(false); $this->nowikis = array_reverse($this->nowikis); $this->codeblocks = array_reverse($this->codeblocks); $this->elinks = array_reverse($this->elinks); if (!array_key_exists('ignore_toc', $options)) { $output = preg_replace_callback('/\\{\\{TOC\\}\\}/', array($this, "_parse_add_toc"), $output); } else { $output = str_replace('{{TOC}}', '', $output); } $output = preg_replace_callback('/~~~NOWIKI~~~/i', array($this, "_parse_restore_nowiki"), $output); if (!isset($options['no_code_highlighting'])) { $output = preg_replace_callback('/~~~CODE~~~/Ui', array($this, "_parse_restore_code"), $output); } $output = preg_replace_callback('/~~~ILINK~~~/i', array($this, "_parse_restore_ilink"), $output); $output = preg_replace_callback('/~~~ELINK~~~/i', array($this, "_parse_restore_elink"), $output); } else { $text = nl2br(tbg_decodeUTF8($text, true)); $text = preg_replace_callback(self::getIssueRegex(), array($this, '_parse_issuelink'), $text); $text = preg_replace_callback(self::getMentionsRegex(), array($this, '_parse_mention'), $text); $output = $text; } return $output; }
public function do_execute() { $this->cliEcho('Showing detailed information about '); $this->cliEcho($this->getProvidedArgument('project_key'), 'green'); $this->cliEcho(' issue '); $print_issue_number = $this->getProvidedArgument('issue_number'); if (is_numeric($print_issue_number)) { $print_issue_number = '#' . $print_issue_number; } $this->cliEcho($print_issue_number, 'yellow'); $this->cliEcho(' on '); $this->cliEcho($this->_getCurrentRemoteServer(), 'white', 'bold'); $this->cliEcho("\n"); $url_options = array('project_key' => $this->project_key, 'issue_no' => $this->issue_number, 'format' => 'json'); $this->cliEcho("\n"); $issue = $this->getRemoteResponse($this->getRemoteURL('api_viewissue', $url_options)); \thebuggenie\core\framework\Context::loadLibrary('common'); $this->cliEcho($print_issue_number, 'green', 'bold'); $this->cliEcho(" - "); $state = $issue->state == \thebuggenie\core\entities\Issue::STATE_OPEN ? 'OPEN' : 'CLOSED'; $this->cliEcho("[{$state}] ", 'cyan'); $this->cliEcho(html_entity_decode($issue->title), 'white', 'bold'); $this->cliEcho("\n"); $this->cliEcho("State: ", 'white', 'bold'); $this->cliEcho($state); $this->cliEcho("\n"); $this->cliEcho("Posted: ", 'white', 'bold'); $this->cliEcho(tbg_formatTime($issue->created_at, 21, true, true) . ' (' . $issue->created_at . ')'); $this->cliEcho("\n"); $this->cliEcho("Posted by: ", 'white', 'bold'); if ($issue->posted_by) { $this->cliEcho($issue->posted_by->name); } else { $this->cliEcho('-'); } $this->cliEcho("\n"); $this->cliEcho("Updated: ", 'white', 'bold'); $this->cliEcho(tbg_formatTime($issue->updated_at, 21, true, true) . ' (' . $issue->updated_at . ')'); $this->cliEcho("\n"); $this->cliEcho("Assigned to: ", 'white', 'bold'); if ($issue->assignee) { $this->cliEcho($issue->assignee->name); } else { $this->cliEcho('-'); } $this->cliEcho("\n"); $this->cliEcho("Status: ", 'white', 'bold'); if ($issue->status) { $this->cliEcho($issue->status->name); } else { $this->cliEcho('-'); } $this->cliEcho("\n"); foreach ($issue->visible_fields as $field => $details) { $name = ucfirst(str_replace('_', ' ', $field)); $this->cliEcho("{$name}: ", 'white', 'bold'); if (isset($issue->{$field})) { if ($field == 'estimated_time' || $field == 'spent_time') { if (isset($issue->{$field}->points)) { $this->cliEcho($issue->{$field}->points . 'p, ' . $issue->{$field}->hours . 'h, ' . $issue->{$field}->days . 'd, ' . $issue->{$field}->weeks . 'w, ' . $issue->{$field}->months . 'mo'); } else { $this->cliEcho('-'); } } else { if (is_object($issue->{$field})) { $this->cliEcho($issue->{$field}->name); } else { $this->cliEcho($issue->{$field}); } } } else { $this->cliEcho('-'); } $this->cliEcho("\n"); } if ($this->getProvidedArgument('include_comments', 'no') == 'yes') { $this->cliEcho("\n"); $this->cliEcho("Comments: \n", 'white', 'bold'); if (count($issue->comments) > 0) { foreach ($issue->comments as $comment) { if ($comment->system_comment && $this->getProvidedArgument('include_system_comments', 'no') != 'yes') { continue; } $this->cliEcho('Comment #' . $comment->comment_number, 'yellow', 'bold'); $this->cliEcho("\n"); $this->cliEcho('Posted by: ', 'white', 'bold'); if ($comment->posted_by) { $this->cliEcho($comment->posted_by->name); } else { $this->cliEcho("Unknown user"); } $this->cliEcho("\n"); $this->cliEcho('Posted: ', 'white', 'bold'); $this->cliEcho(tbg_formatTime($comment->created_at, 21, true, true) . ' (' . $comment->created_at . ')'); $this->cliEcho("\n"); $this->cliEcho('Comment: ', 'white', 'bold'); $this->cliEcho($comment->content); $this->cliEcho("\n"); $this->cliEcho('----------', 'white', 'bold'); $this->cliEcho("\n\n"); } } else { $this->cliEcho('There are no comments'); } } $this->cliEcho("\n\n"); }
<?php \thebuggenie\core\framework\Context::loadLibrary('ui'); ?> <div id="project_box_<?php echo $project->getID(); ?> " class="greybox" style="margin: 10px 0px 10px 0px; position: relative;"> <div style="padding: 3px; font-size: 14px;"> <?php if ($project->isArchived()) { ?> <span class="faded_out"><?php echo __('ARCHIVED'); ?> </span> <?php } ?> <strong><?php echo link_tag(make_url('project_dashboard', array('project_key' => $project->getKey())), $project->getName()); ?> </strong> <span class="project_key" style="position: relative;">(<div class="tooltip leftie"><?php echo __('This is the project key, used in most places when accessing the project'); ?> </div><?php echo $project->getKey(); ?> )</span> <?php if ($project->usePrefix()) {
public function getDateString() { framework\Context::loadLibrary('common'); $i18n = framework\Context::getI18n(); if ($this->hasStartingDate() && $this->hasScheduledDate()) { if ($this->getStartingDate() < NOW && $this->getScheduledDate() < NOW) { return $i18n->__('%milestone_name (started %start_date - ended %end_date)', array('%milestone_name' => '', '%start_date' => tbg_formatTime($this->getStartingDate(), 23, true, true), '%end_date' => tbg_formatTime($this->getScheduledDate(), 23, true, true))); } elseif ($this->getStartingDate() < NOW && $this->getScheduledDate() > NOW) { return $i18n->__('%milestone_name (started %start_date - ends %end_date)', array('%milestone_name' => '', '%start_date' => tbg_formatTime($this->getStartingDate(), 23, true, true), '%end_date' => tbg_formatTime($this->getScheduledDate(), 23, true, true))); } elseif ($this->getStartingDate() > NOW) { return $i18n->__('%milestone_name (starts %start_date - ended %end_date)', array('%milestone_name' => '', '%start_date' => tbg_formatTime($this->getStartingDate(), 23, true, true), '%end_date' => tbg_formatTime($this->getScheduledDate(), 23, true, true))); } } elseif ($this->hasStartingDate()) { if ($this->getStartingDate() < NOW) { return $i18n->__('%milestone_name (started %start_date)', array('%milestone_name' => '', '%start_date' => tbg_formatTime($this->getStartingDate(), 23, true, true))); } else { return $i18n->__('%milestone_name (starts %start_date)', array('%milestone_name' => '', '%start_date' => tbg_formatTime($this->getStartingDate(), 23, true, true))); } } elseif ($this->hasScheduledDate()) { if ($this->getScheduledDate() < NOW) { return $i18n->__('%milestone_name (released: %date)', array('%milestone_name' => '', '%date' => tbg_formatTime($this->getScheduledDate(), 23, true, true))); } else { return $i18n->__('%milestone_name (will be released: %date)', array('%milestone_name' => '', '%date' => tbg_formatTime($this->getScheduledDate(), 23, true, true))); } } elseif ($this->hasReachedDate()) { return $i18n->__('%milestone_name (reached: %date)', array('%milestone_name' => '', '%date' => tbg_formatTime($this->getReachedDate(), 23, true, true))); } return $i18n->__('Not scheduled'); }
/** * Check incoming email accounts for incoming emails * * @Route(url="/mailing/incoming_account/:account_id/check", name="check_account") * @param \thebuggenie\core\framework\Request $request * @return type * @throws \Exception */ public function runCheckIncomingAccount(framework\Request $request) { framework\Context::loadLibrary('common'); if ($account_id = $request['account_id']) { try { $account = new \thebuggenie\modules\mailing\entities\IncomingEmailAccount($account_id); try { if (!function_exists('imap_open')) { throw new \Exception($this->getI18n()->__('The php imap extension is not installed')); } framework\Context::getModule('mailing')->processIncomingEmailAccount($account); } catch (\Exception $e) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => $e->getMessage())); } return $this->renderJSON(array('account_id' => $account->getID(), 'time' => tbg_formatTime($account->getTimeLastFetched(), 6), 'count' => $account->getNumberOfEmailsLastFetched())); } catch (\Exception $e) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => $this->getI18n()->__('This is not a valid mailing account'))); } } else { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => $this->getI18n()->__('This is not a valid mailing account'))); } }
/** * Pre-execute function * * @param framework\Request $request * @param string $action */ public function preExecute(framework\Request $request, $action) { // forward 403 if you're not allowed here if ($request->isAjaxCall() == false) { $this->forward403unless(framework\Context::getUser()->canAccessConfigurationPage()); } $this->access_level = $this->getAccessLevel(framework\Settings::CONFIGURATION_SECTION_IMPORT, 'core'); if (!$request->isAjaxCall()) { $this->getResponse()->setPage('config'); framework\Context::loadLibrary('ui'); $this->getResponse()->addBreadcrumb(framework\Context::getI18n()->__('Configure %thebuggenie_name', array('%thebuggenie_name' => framework\Settings::getSiteHeaderName())), framework\Context::getRouting()->generate('configure'), $this->getResponse()->getPredefinedBreadcrumbLinks('configure')); } }
public function getArticleLinkTag($matches, $parser) { $article_link = $matches[0]; $parser->addInternalLinkOccurrence($article_link); $article_name = $this->getSpacedName($matches[0]); if (!framework\Context::isCLI()) { framework\Context::loadLibrary('ui'); return link_tag(make_url('publish_article', array('article_name' => $matches[0])), $article_name); } else { return $matches[0]; } }
/** * Configure general and server settings * * @param framework\Request $request The request object */ public function runSettings(framework\Request $request) { if (framework\Context::getRequest()->isPost()) { $this->forward403unless($this->access_level == framework\Settings::ACCESS_FULL); $settings = array(framework\Settings::SETTING_USER_DISPLAYNAME_FORMAT, framework\Settings::SETTING_ENABLE_GRAVATARS, framework\Settings::SETTING_IS_SINGLE_PROJECT_TRACKER, framework\Settings::SETTING_REQUIRE_LOGIN, framework\Settings::SETTING_ALLOW_REGISTRATION, framework\Settings::SETTING_ALLOW_OPENID, framework\Settings::SETTING_USER_GROUP, framework\Settings::SETTING_RETURN_FROM_LOGIN, framework\Settings::SETTING_RETURN_FROM_LOGOUT, framework\Settings::SETTING_IS_PERMISSIVE_MODE, framework\Settings::SETTING_ALLOW_PERSONA, framework\Settings::SETTING_REGISTRATION_DOMAIN_WHITELIST, framework\Settings::SETTING_SHOW_PROJECTS_OVERVIEW, framework\Settings::SETTING_KEEP_COMMENT_TRAIL_CLEAN, framework\Settings::SETTING_TBG_NAME, framework\Settings::SETTING_TBG_NAME_HTML, framework\Settings::SETTING_DEFAULT_CHARSET, framework\Settings::SETTING_DEFAULT_LANGUAGE, framework\Settings::SETTING_SERVER_TIMEZONE, framework\Settings::SETTING_SYNTAX_HIGHLIGHT_DEFAULT_LANGUAGE, framework\Settings::SETTING_SYNTAX_HIGHLIGHT_DEFAULT_INTERVAL, framework\Settings::SETTING_SYNTAX_HIGHLIGHT_DEFAULT_NUMBERING, framework\Settings::SETTING_PREVIEW_COMMENT_IMAGES, framework\Settings::SETTING_HEADER_LINK, framework\Settings::SETTING_MAINTENANCE_MESSAGE, framework\Settings::SETTING_MAINTENANCE_MODE, framework\Settings::SETTING_ELEVATED_LOGIN_DISABLED, framework\Settings::SETTING_NOTIFICATION_POLL_INTERVAL); foreach ($settings as $setting) { if (framework\Context::getRequest()->getParameter($setting) !== null) { $value = framework\Context::getRequest()->getParameter($setting); switch ($setting) { case framework\Settings::SETTING_TBG_NAME: $value = framework\Context::getRequest()->getParameter($setting, null, false); break; case framework\Settings::SETTING_SYNTAX_HIGHLIGHT_DEFAULT_INTERVAL: if (!is_numeric($value) || $value < 1) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => framework\Context::getI18n()->__('Please provide a valid setting for highlighting interval'))); } break; case framework\Settings::SETTING_DEFAULT_CHARSET: framework\Context::loadLibrary('common'); if ($value && !tbg_check_syntax($value, "CHARSET")) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => framework\Context::getI18n()->__('Please provide a valid setting for charset'))); } break; case framework\Settings::SETTING_NOTIFICATION_POLL_INTERVAL: if (!ctype_digit($value)) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => framework\Context::getI18n()->__('Please provide a valid setting for notification poll interval'))); } } framework\Settings::saveSetting($setting, $value); } } return $this->renderJSON(array('title' => framework\Context::getI18n()->__('All settings saved'))); } }
/** * Generate captcha picture * * @Route(name="captcha", url="/captcha/*") * @AnonymousRoute * * @param \thebuggenie\core\framework\Request $request The request object * @global array $_SESSION['activation_number'] The session captcha activation number */ public function runCaptcha(framework\Request $request) { framework\Context::loadLibrary('ui'); if (!function_exists('imagecreatetruecolor')) { return $this->return404(); } $this->getResponse()->setContentType('image/png'); $this->getResponse()->setDecoration(\thebuggenie\core\framework\Response::DECORATE_NONE); $chain = str_split($_SESSION['activation_number'], 1); $size = getimagesize(THEBUGGENIE_PATH . DS . 'themes' . DS . framework\Settings::getThemeName() . DS . 'numbers/0.png'); $captcha = imagecreatetruecolor($size[0] * sizeof($chain), $size[1]); foreach ($chain as $n => $number) { $pic = imagecreatefrompng(THEBUGGENIE_PATH . DS . 'themes' . DS . framework\Settings::getThemeName() . DS . "numbers/{$number}.png"); imagecopymerge($captcha, $pic, $size[0] * $n, 0, 0, 0, imagesx($pic), imagesy($pic), 100); imagedestroy($pic); } imagepng($captcha); imagedestroy($captcha); return true; }
/** * Poller for the planning page * * @Route(url="/boards/:board_id/poll/:mode") * * @param framework\Request $request */ public function runPoll(framework\Request $request) { $this->forward403unless($this->_checkProjectPageAccess('project_planning')); $last_refreshed = $request['last_refreshed']; $board = entities\tables\AgileBoards::getTable()->selectById($request['board_id']); $search_object = $board->getBacklogSearchObject(); if ($search_object instanceof \thebuggenie\core\entities\SavedSearch) { $search_object->setFilter('last_updated', \thebuggenie\core\entities\SearchFilter::createFilter('last_updated', array('o' => \b2db\Criteria::DB_GREATER_THAN_EQUAL, 'v' => $last_refreshed - 2))); } if ($request['mode'] == 'whiteboard') { $milestone_id = $request['milestone_id']; $ids = \thebuggenie\core\entities\tables\Issues::getTable()->getUpdatedIssueIDsByTimestampAndProjectIDAndMilestoneID($last_refreshed - 2, $this->selected_project->getID(), $milestone_id); } else { $ids = \thebuggenie\core\entities\tables\Issues::getTable()->getUpdatedIssueIDsByTimestampAndProjectIDAndIssuetypeID($last_refreshed - 2, $this->selected_project->getID()); $epic_ids = $board->getEpicIssuetypeID() ? \thebuggenie\core\entities\tables\Issues::getTable()->getUpdatedIssueIDsByTimestampAndProjectIDAndIssuetypeID($last_refreshed - 2, $this->selected_project->getID(), $board->getEpicIssuetypeID()) : array(); } $backlog_ids = array(); if ($search_object instanceof \thebuggenie\core\entities\SavedSearch) { foreach ($search_object->getIssues(true) as $backlog_issue) { foreach ($ids as $id_issue) { if ($id_issue['issue_id'] == $backlog_issue->getID()) { continue 2; } } $backlog_ids[] = array('issue_id' => $backlog_issue->getID(), 'last_updated' => $backlog_issue->getLastUpdatedTime()); } } \thebuggenie\core\framework\Context::loadLibrary('ui'); $whiteboard_url = make_url('agile_whiteboardissues', array('project_key' => $board->getProject()->getKey(), 'board_id' => $board->getID())); return $this->renderJSON(compact('ids', 'backlog_ids', 'epic_ids', 'milestone_id', 'whiteboard_url')); }
public function runBulkUpdateIssues(framework\Request $request) { $issue_ids = $request['issue_ids']; $options = array('issue_ids' => array_values($issue_ids)); framework\Context::loadLibrary('common'); $options['last_updated'] = tbg_formatTime(time(), 20); if (!empty($issue_ids)) { $options['bulk_action'] = $request['bulk_action']; switch ($request['bulk_action']) { case 'assign_milestone': $milestone = null; if ($request['milestone'] == 'new') { $milestone = new entities\Milestone(); $milestone->setProject(framework\Context::getCurrentProject()); $milestone->setName($request['milestone_name']); $milestone->save(); $options['milestone_url'] = framework\Context::getRouting()->generate('agile_milestone', array('project_key' => $milestone->getProject()->getKey(), 'milestone_id' => $milestone->getID())); } elseif ($request['milestone']) { $milestone = new entities\Milestone($request['milestone']); } $milestone_id = $milestone instanceof entities\Milestone ? $milestone->getID() : null; foreach (array_keys($issue_ids) as $issue_id) { if (is_numeric($issue_id)) { $issue = new entities\Issue($issue_id); $issue->setMilestone($milestone_id); $issue->save(); } } $options['milestone_id'] = $milestone_id; $options['milestone_name'] = $milestone_id ? $milestone->getName() : '-'; break; case 'set_status': if (is_numeric($request['status'])) { $status = new entities\Status($request['status']); foreach (array_keys($issue_ids) as $issue_id) { if (is_numeric($issue_id)) { $issue = new entities\Issue($issue_id); $issue->setStatus($status->getID()); $issue->save(); } } $options['status'] = array('color' => $status->getColor(), 'name' => $status->getName(), 'id' => $status->getID()); } break; case 'set_severity': if (is_numeric($request['severity'])) { $severity = $request['severity'] ? new entities\Severity($request['severity']) : null; foreach (array_keys($issue_ids) as $issue_id) { if (is_numeric($issue_id)) { $issue = new entities\Issue($issue_id); $severity_id = $severity instanceof entities\Severity ? $severity->getID() : 0; $issue->setSeverity($severity_id); $issue->save(); } } $options['severity'] = array('name' => $severity instanceof entities\Severity ? $severity->getName() : '-', 'id' => $severity instanceof entities\Severity ? $severity->getID() : 0); } break; case 'set_resolution': if (is_numeric($request['resolution'])) { $resolution = $request['resolution'] ? new entities\Resolution($request['resolution']) : null; foreach (array_keys($issue_ids) as $issue_id) { if (is_numeric($issue_id)) { $issue = new entities\Issue($issue_id); $resolution_id = $resolution instanceof entities\Resolution ? $resolution->getID() : 0; $issue->setResolution($resolution_id); $issue->save(); } } $options['resolution'] = array('name' => $resolution instanceof entities\Resolution ? $resolution->getName() : '-', 'id' => $resolution instanceof entities\Resolution ? $resolution->getID() : 0); } break; case 'set_priority': if (is_numeric($request['priority'])) { $priority = $request['priority'] ? new entities\Priority($request['priority']) : null; foreach (array_keys($issue_ids) as $issue_id) { if (is_numeric($issue_id)) { $issue = new entities\Issue($issue_id); $priority_id = $priority instanceof entities\Priority ? $priority->getID() : 0; $issue->setPriority($priority_id); $issue->save(); } } $options['priority'] = array('name' => $priority instanceof entities\Priority ? $priority->getName() : '-', 'id' => $priority instanceof entities\Priority ? $priority->getID() : 0); } break; case 'set_category': if (is_numeric($request['category'])) { $category = $request['category'] ? new entities\Category($request['category']) : null; foreach (array_keys($issue_ids) as $issue_id) { if (is_numeric($issue_id)) { $issue = new entities\Issue($issue_id); $category_id = $category instanceof entities\Category ? $category->getID() : 0; $issue->setCategory($category_id); $issue->save(); } } $options['category'] = array('name' => $category instanceof entities\Category ? $category->getName() : '-', 'id' => $category instanceof entities\Category ? $category->getID() : 0); } break; } } return $this->renderJSON($options); }
public function do_execute() { $this->cliEcho('Querying '); $this->cliEcho($this->_getCurrentRemoteServer(), 'white', 'bold'); $this->cliEcho(" for list of issues ...\n\n"); $this->cliEcho("Filters:\n", 'white', 'bold'); $options = array('format' => 'json'); $options["state"] = $this->getProvidedArgument("state", "open"); $this->cliEcho("State: "); $this->cliEcho($options["state"], "yellow", "bold"); $this->cliEcho("\n"); $options["issuetype"] = $this->getProvidedArgument("issuetype", "all"); $this->cliEcho("Issuetypes: "); $this->cliEcho($options["issuetype"], "yellow", "bold"); $this->cliEcho("\n"); $options["assigned_to"] = $this->getProvidedArgument("assigned_to", "all"); $this->cliEcho("Assigned to: "); $this->cliEcho($options["assigned_to"], "yellow", "bold"); $this->cliEcho("\n"); $options["assigned"] = $this->getProvidedArgument("state", "all"); $options['project_key'] = $this->getProvidedArgument('project_key'); $response = $this->getRemoteResponse($this->getRemoteURL('project_list_issues', $options)); $this->cliEcho("\n"); if (!empty($response) && $response->count > 0) { \thebuggenie\core\framework\Context::loadLibrary('common'); $this->cliEcho("The following {$response->count} issues were found:\n", 'white', 'bold'); foreach ($response->issues as $issue) { //$this->cliEcho("ID: {$issue->id} ", 'yellow'); if (mb_strtolower($options['state']) == 'all') { $this->cliEcho($issue->state == \thebuggenie\core\entities\Issue::STATE_OPEN ? "[open] " : "[closed] "); } $this->cliEcho($issue->issue_no, 'green', 'bold'); $this->cliEcho(" - "); $this->cliEcho(html_entity_decode($issue->title), 'white', 'bold'); $this->cliEcho("\n"); if ($this->getProvidedArgument('detailed', 'no') == 'yes') { $this->cliEcho("Posted: ", 'blue', 'bold'); $this->cliEcho(tbg_formatTime($issue->created_at, 21)); $this->cliEcho(" by "); $this->cliEcho($issue->posted_by, 'cyan'); $this->cliEcho("\n"); $this->cliEcho("Updated: ", 'blue', 'bold'); $this->cliEcho(tbg_formatTime($issue->last_updated, 21)); $this->cliEcho("\n"); $this->cliEcho("Assigned to: ", 'blue', 'bold'); $this->cliEcho($issue->assigned_to, 'yellow', 'bold'); $this->cliEcho(" | ", 'white', 'bold'); $this->cliEcho("Status: ", 'blue', 'bold'); $this->cliEcho($issue->status); $this->cliEcho("\n\n"); } } $this->cliEcho("\n"); $this->cliEcho("If you are going to update or query any of these issues, use the \n"); $this->cliEcho("issue number shown in front of the issue (do not include the \n"); $this->cliEcho("issue type), ex:\n"); $this->cliEcho("./tbg_cli", 'green'); $this->cliEcho(" remote:update_issue projectname "); $this->cliEcho("300\n", 'white', 'bold'); $this->cliEcho("./tbg_cli", 'green'); $this->cliEcho(" remote:show_issue projectname "); $this->cliEcho("300\n", 'white', 'bold'); $this->cliEcho("./tbg_cli", 'green'); $this->cliEcho(" remote:list_transitions projectname "); $this->cliEcho("300\n", 'white', 'bold'); $this->cliEcho("\nor\n"); $this->cliEcho("./tbg_cli", 'green'); $this->cliEcho(" remote:update_issue projectname "); $this->cliEcho("PREFIX-12\n", 'white', 'bold'); $this->cliEcho("./tbg_cli", 'green'); $this->cliEcho(" remote:show_issue projectname "); $this->cliEcho("PREFIX-12\n", 'white', 'bold'); $this->cliEcho("./tbg_cli", 'green'); $this->cliEcho(" remote:list_transitions projectname "); $this->cliEcho("PREFIX-12\n", 'white', 'bold'); $this->cliEcho("\n"); $this->cliEcho("\n"); } else { $this->cliEcho("No issues available matching your filters.\n\n"); } }
public function getAgileTextColor() { if (!framework\Context::isCLI()) { framework\Context::loadLibrary('ui'); } $rgb = hex2rgb($this->_scrumcolor); if (!$rgb) { return '#333'; } return 0.299 * $rgb['red'] + 0.587 * $rgb['green'] + 0.114 * $rgb['blue'] > 170 ? '#333' : '#FFF'; }
public function postConfigSettings(framework\Request $request) { framework\Context::loadLibrary('common'); $settings = array('smtp_host', 'smtp_port', 'smtp_user', 'smtp_pwd', 'smtp_encryption', 'timeout', 'mail_type', 'enable_outgoing_notifications', 'cli_mailing_url', 'headcharset', 'from_name', 'from_addr', 'use_queue', 'activation_needed', 'sendmail_command'); foreach ($settings as $setting) { if ($request->getParameter($setting) !== null || $setting == 'no_dash_f' || $setting == 'activation_needed') { $value = $request->getParameter($setting); switch ($setting) { case 'smtp_host': if ($request['mail_type'] == self::MAIL_TYPE_SMTP && !tbg_check_syntax($value, "MAILSERVER")) { throw new \Exception(framework\Context::getI18n()->__('Please provide a valid setting for SMTP server address')); } break; case 'from_addr': if (!tbg_check_syntax($value, "EMAIL")) { throw new \Exception(framework\Context::getI18n()->__('Please provide a valid setting for email "from"-address')); } break; case 'timeout': if ($request['mail_type'] == self::MAIL_TYPE_SMTP && !is_numeric($value) || $value < 0) { throw new \Exception(framework\Context::getI18n()->__('Please provide a valid setting for SMTP server timeout')); } break; case 'smtp_port': if ($request['mail_type'] == self::MAIL_TYPE_SMTP && !is_numeric($value) || $value < 1) { throw new \Exception(framework\Context::getI18n()->__('Please provide a valid setting for SMTP server port')); } break; case 'headcharset': // list of supported character sets based on PHP doc : http://www.php.net/manual/en/function.htmlentities.php if (!tbg_check_syntax($value, "CHARSET")) { throw new \Exception(framework\Context::getI18n()->__('Please provide a valid setting for email header charset')); } break; case 'activation_needed': $value = (int) $request->getParameter($setting, 0); break; case 'cli_mailing_url': $value = $request->getParameter($setting); if (substr($value, -1) == '/') { $value = substr($value, 0, strlen($value) - 1); } break; } $this->saveSetting($setting, $value); } } }
<?php include_component('publish/wikibreadcrumbs', array('article_name' => $article_name)); \thebuggenie\core\framework\Context::loadLibrary('publish/publish'); $tbg_response->setTitle($article_name); ?> <table style="margin-top: 0px; table-layout: fixed; width: 100%" cellpadding=0 cellspacing=0> <tr> <td class="side_bar"> <?php include_component('leftmenu', compact('article', 'special')); ?> </td> <td class="main_area article"> <a name="top"></a> <?php if ($component) { ?> <?php include_component("publish/special{$component}", compact('projectnamespace')); ?> <?php } else { ?> <div class="redbox" style="margin: 15px;"> <?php echo __('This special page does not exist'); ?> </div> <?php }
public function runTransitionIssues(framework\Request $request) { try { try { $transition = entities\WorkflowTransition::getB2DBTable()->selectById($request['transition_id']); } catch (\Exception $e) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => $this->getI18n()->__('This is not a valid transition'))); } $issue_ids = $request['issue_ids']; $status = null; $closed = false; foreach ($issue_ids as $issue_id) { $issue = entities\Issue::getB2DBTable()->selectById((int) $issue_id); if (!$issue->isWorkflowTransitionsAvailable() || !$transition->validateFromRequest($request)) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => framework\Context::getI18n()->__('The transition could not be applied to issue %issue_number because of %errors', array('%issue_number' => $issue->getFormattedIssueNo(), '%errors' => join(', ', $transition->getValidationErrors()))))); } try { $transition->transitionIssueToOutgoingStepFromRequest($issue, $request); } catch (\Exception $e) { $this->getResponse()->setHttpStatus(400); framework\Logging::log(framework\Logging::LEVEL_WARNING, 'Transition ' . $transition->getID() . ' failed for issue ' . $issue_id); framework\Logging::log(framework\Logging::LEVEL_WARNING, $e->getMessage()); return $this->renderJSON(array('error' => $this->getI18n()->__('The transition failed because of an error in the workflow. Check your workflow configuration.'))); } if ($status === null) { $status = $issue->getStatus(); } $closed = $issue->isClosed(); } framework\Context::loadLibrary('common'); $options = array('issue_ids' => array_keys($issue_ids), 'last_updated' => tbg_formatTime(time(), 20), 'closed' => $closed); $options['status'] = array('color' => $status->getColor(), 'name' => $status->getName(), 'id' => $status->getID()); if ($request->hasParameter('milestone_id')) { $milestone = new entities\Milestone($request['milestone_id']); $options['milestone_id'] = $milestone->getID(); $options['milestone_name'] = $milestone->getName(); } foreach (array('resolution', 'priority', 'category', 'severity') as $item) { $class = "\\thebuggenie\\core\\entities\\" . ucfirst($item); if ($request->hasParameter($item . '_id')) { if ($item_id = $request[$item . '_id']) { $itemobject = new $class($item_id); $itemname = $itemobject->getName(); } else { $item_id = 0; $itemname = '-'; } $options[$item] = array('name' => $itemname, 'id' => $item_id); } else { $method = 'get' . ucfirst($item); $itemname = $issue->{$method}() instanceof $class ? $issue->{$method}()->getName() : '-'; $item_id = $issue->{$method}() instanceof $class ? $issue->{$method}()->getID() : 0; $options[$item] = array('name' => $itemname, 'id' => $item_id); } } return $this->renderJSON($options); } catch (\Exception $e) { $this->getResponse()->setHttpStatus(400); framework\Logging::log(framework\Logging::LEVEL_WARNING, $e->getMessage()); return $this->renderJSON(array('error' => $this->getI18n()->__('An error occured when trying to apply the transition'))); } }