public function runResolve(framework\Request $request) { $theme = isset($request['theme_name']) ? $request['theme_name'] : framework\Settings::getThemeName(); if ($request->hasParameter('css')) { $this->getResponse()->setContentType('text/css'); if (!$request->hasParameter('theme_name')) { $basepath = THEBUGGENIE_PATH . 'public' . DS . 'css'; $asset = THEBUGGENIE_PATH . 'public' . DS . 'css' . DS . $request->getParameter('css'); } else { $basepath = THEBUGGENIE_PATH . 'themes'; $asset = THEBUGGENIE_PATH . 'themes' . DS . $theme . DS . 'css' . DS . $request->getParameter('css'); } } elseif ($request->hasParameter('js')) { $this->getResponse()->setContentType('text/javascript'); if ($request->hasParameter('theme_name')) { $basepath = THEBUGGENIE_PATH . 'themes'; $asset = THEBUGGENIE_PATH . 'themes' . DS . $theme . DS . 'js' . DS . $request->getParameter('js'); } elseif ($request->hasParameter('module_name') && framework\Context::isModuleLoaded($request['module_name'])) { $module_path = framework\Context::isInternalModule($request['module_name']) ? THEBUGGENIE_INTERNAL_MODULES_PATH : THEBUGGENIE_MODULES_PATH; $basepath = $module_path . $request['module_name'] . DS . 'public' . DS . 'js'; $asset = $module_path . $request['module_name'] . DS . 'public' . DS . 'js' . DS . $request->getParameter('js'); } else { $basepath = THEBUGGENIE_PATH . 'public' . DS . 'js'; $asset = THEBUGGENIE_PATH . 'public' . DS . 'js' . DS . $request->getParameter('js'); } } else { throw new \Exception('The expected theme Asset type is not supported.'); } $fileAsset = new AssetCollection(array(new FileAsset($asset, array(), $basepath))); $fileAsset->load(); // Do not decorate the asset with the theme's header/footer $this->getResponse()->setDecoration(framework\Response::DECORATE_NONE); return $this->renderText($fileAsset->dump()); }
public function postConfigSettings(framework\Request $request) { $settings = array('hostname', 'u_type', 'g_type', 'b_dn', 'groups', 'dn_attr', 'u_attr', 'g_attr', 'e_attr', 'f_attr', 'b_attr', 'g_dn', 'control_user', 'control_pass', 'integrated_auth', 'integrated_auth_header'); foreach ($settings as $setting) { if (($setting == 'u_type' || $setting == 'g_type' || $setting == 'dn_attr') && $request->getParameter($setting) == '') { if ($setting == 'u_type') { $this->saveSetting($setting, 'person'); } elseif ($setting == 'g_type') { $this->saveSetting($setting, 'group'); } else { $this->saveSetting($setting, 'entrydn'); } } elseif ($setting == 'integrated_auth') { $this->saveSetting($setting, (int) $request->getParameter($setting, 0)); } else { if ($request->hasParameter($setting)) { $this->saveSetting($setting, $request->getParameter($setting)); } } } }
/** * The currently selected project in actions where there is one * * @access protected * @property entities\Project $selected_project */ public function preExecute(framework\Request $request, $action) { try { // Default to JSON if nothing is specified. $newFormat = $request->getParameter('format', 'json'); $this->getResponse()->setTemplate(mb_strtolower($action) . '.' . $newFormat . '.php'); $this->getResponse()->setupResponseContentType($newFormat); if ($project_key = $request['project_key']) { $this->selected_project = entities\Project::getByKey($project_key); } elseif ($project_id = (int) $request['project_id']) { $this->selected_project = entities\Project::getB2DBTable()->selectByID($project_id); } if ($this->selected_project instanceof entities\Project) { framework\Context::setCurrentProject($this->selected_project); } $this->render_detail = !isset($request['nodetail']); } catch (\Exception $e) { $this->getResponse()->setHttpStatus(500); return $this->renderJSON(array('error' => 'An exception occurred: ' . $e)); } }
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); } } }
/** * @param framework\Request $request * @param null $milestone * @return null|\thebuggenie\core\entities\Milestone * @throws \Exception */ protected function _saveMilestoneDetails(framework\Request $request, $milestone = null) { if (!$request['name']) { throw new \Exception($this->getI18n()->__('You must provide a valid milestone name')); } if ($milestone === null) { $milestone = new \thebuggenie\core\entities\Milestone(); } $milestone->setName($request['name']); $milestone->setProject($this->selected_project); $milestone->setStarting((bool) $request['is_starting']); $milestone->setScheduled((bool) $request['is_scheduled']); $milestone->setDescription($request['description']); $milestone->setVisibleRoadmap($request['visibility_roadmap']); $milestone->setVisibleIssues($request['visibility_issues']); $milestone->setType($request->getParameter('milestone_type', \thebuggenie\core\entities\Milestone::TYPE_REGULAR)); if ($request->hasParameter('sch_month') && $request->hasParameter('sch_day') && $request->hasParameter('sch_year')) { $scheduled_date = mktime(23, 59, 59, framework\Context::getRequest()->getParameter('sch_month'), framework\Context::getRequest()->getParameter('sch_day'), framework\Context::getRequest()->getParameter('sch_year')); $milestone->setScheduledDate($scheduled_date); } else { $milestone->setScheduledDate(0); } if ($request->hasParameter('starting_month') && $request->hasParameter('starting_day') && $request->hasParameter('starting_year')) { $starting_date = mktime(0, 0, 1, framework\Context::getRequest()->getParameter('starting_month'), framework\Context::getRequest()->getParameter('starting_day'), framework\Context::getRequest()->getParameter('starting_year')); $milestone->setStartingDate($starting_date); } else { $milestone->setStartingDate(0); } $milestone->save(); return $milestone; }
/** * Returns the logged in user, or default user if not logged in * * @param \thebuggenie\core\framework\Request $request * @param \thebuggenie\core\framework\Action $action * * @return \thebuggenie\core\entities\User */ public static function loginCheck(framework\Request $request, framework\Action $action) { try { $authentication_method = $action->getAuthenticationMethodForAction(framework\Context::getRouting()->getCurrentRouteAction()); $user = null; $external = false; switch ($authentication_method) { case framework\Action::AUTHENTICATION_METHOD_ELEVATED: case framework\Action::AUTHENTICATION_METHOD_CORE: $username = $request['tbg3_username']; $password = $request['tbg3_password']; if ($authentication_method == framework\Action::AUTHENTICATION_METHOD_ELEVATED) { $elevated_password = $request['tbg3_elevated_password']; } $raw = true; // If no username and password specified, check if we have a session that exists already if ($username === null && $password === null) { if (framework\Context::getRequest()->hasCookie('tbg3_username') && framework\Context::getRequest()->hasCookie('tbg3_password')) { $username = framework\Context::getRequest()->getCookie('tbg3_username'); $password = framework\Context::getRequest()->getCookie('tbg3_password'); $user = self::getB2DBTable()->getByUsername($username); if ($authentication_method == framework\Action::AUTHENTICATION_METHOD_ELEVATED) { $elevated_password = framework\Context::getRequest()->getCookie('tbg3_elevated_password'); if ($user instanceof User && !$user->hasPasswordHash($password)) { $user = null; } else { if ($user instanceof User && !$user->hasPasswordHash($elevated_password)) { framework\Context::setUser($user); framework\Context::getRouting()->setCurrentRouteName('elevated_login_page'); throw new framework\exceptions\ElevatedLoginException('reenter'); } } } else { if ($user instanceof User && !$user->hasPasswordHash($password)) { $user = null; } } if (!$user instanceof User) { framework\Context::logout(); throw new \Exception('No such login'); } } } // If we have authentication details, validate them if (framework\Settings::isUsingExternalAuthenticationBackend() && $username !== null && $password !== null) { $external = true; framework\Logging::log('Authenticating with backend: ' . framework\Settings::getAuthenticationBackend(), 'auth', framework\Logging::LEVEL_INFO); try { $mod = framework\Context::getModule(framework\Settings::getAuthenticationBackend()); if ($mod->getType() !== Module::MODULE_AUTH) { framework\Logging::log('Auth module is not the right type', 'auth', framework\Logging::LEVEL_FATAL); } if (framework\Context::getRequest()->hasCookie('tbg3_username') && framework\Context::getRequest()->hasCookie('tbg3_password')) { $user = $mod->verifyLogin($username, $password); } else { $user = $mod->doLogin($username, $password); } if (!$user instanceof User) { // Invalid framework\Context::logout(); throw new \Exception('No such login'); //framework\Context::getResponse()->headerRedirect(framework\Context::getRouting()->generate('login')); } } catch (\Exception $e) { throw $e; } } elseif (framework\Settings::isUsingExternalAuthenticationBackend()) { $external = true; framework\Logging::log('Authenticating without credentials with backend: ' . framework\Settings::getAuthenticationBackend(), 'auth', framework\Logging::LEVEL_INFO); try { $mod = framework\Context::getModule(framework\Settings::getAuthenticationBackend()); if ($mod->getType() !== Module::MODULE_AUTH) { framework\Logging::log('Auth module is not the right type', 'auth', framework\Logging::LEVEL_FATAL); } $user = $mod->doAutoLogin(); if ($user == false) { // Invalid framework\Context::logout(); throw new \Exception('No such login'); //framework\Context::getResponse()->headerRedirect(framework\Context::getRouting()->generate('login')); } else { if ($user == true) { $user = null; } } } catch (\Exception $e) { throw $e; } } elseif ($username !== null && $password !== null && !$user instanceof User) { $external = false; framework\Logging::log('Using internal authentication', 'auth', framework\Logging::LEVEL_INFO); $user = self::getB2DBTable()->getByUsername($username); if ($user instanceof User && !$user->hasPassword($password)) { $user = null; } if (!$user instanceof User) { framework\Context::logout(); } } break; case framework\Action::AUTHENTICATION_METHOD_DUMMY: $user = self::getB2DBTable()->getByUserID(framework\Settings::getDefaultUserID()); break; case framework\Action::AUTHENTICATION_METHOD_CLI: $user = self::getB2DBTable()->getByUsername(framework\Context::getCurrentCLIusername()); break; case framework\Action::AUTHENTICATION_METHOD_RSS_KEY: $user = self::getB2DBTable()->getByRssKey($request['rsskey']); break; case framework\Action::AUTHENTICATION_METHOD_APPLICATION_PASSWORD: $user = self::getB2DBTable()->getByUsername($request['api_username']); if (!$user->authenticateApplicationPassword($request['api_token'])) { $user = null; } break; } if ($user === null && !framework\Settings::isLoginRequired()) { $user = self::getB2DBTable()->getByUserID(framework\Settings::getDefaultUserID()); } if ($user instanceof User) { if (!$user->isActivated()) { throw new \Exception('This account has not been activated yet'); } elseif (!$user->isEnabled()) { throw new \Exception('This account has been suspended'); } elseif (!$user->isConfirmedMemberOfScope(framework\Context::getScope())) { if (!framework\Settings::isRegistrationAllowed()) { throw new \Exception('This account does not have access to this scope'); } } if ($external == false && $authentication_method == framework\Action::AUTHENTICATION_METHOD_CORE) { $password = $user->getHashPassword(); if (!$request->hasCookie('tbg3_username') && !$user->isGuest()) { if ($request->getParameter('tbg3_rememberme')) { framework\Context::getResponse()->setCookie('tbg3_username', $user->getUsername()); framework\Context::getResponse()->setCookie('tbg3_password', $user->getPassword()); } else { framework\Context::getResponse()->setSessionCookie('tbg3_username', $user->getUsername()); framework\Context::getResponse()->setSessionCookie('tbg3_password', $user->getPassword()); } } } } elseif (framework\Settings::isLoginRequired()) { throw new \Exception('Login required'); } else { throw new \Exception('No such login'); } } catch (\Exception $e) { throw $e; } return $user; }
public function runConfigureProjectSettings(framework\Request $request) { $this->forward403unless($request->isPost()); if ($this->access_level != framework\Settings::ACCESS_FULL) { $project_id = $request['project_id']; $fields = array('vcs_mode', 'match_keywords', 'access_method', 'access_passkey', 'commit_url', 'log_url', 'blob_url', 'diff_url', 'browser_url', 'vcs_workflow', 'browser_type'); foreach ($fields as $field) { framework\Context::getModule('vcs_integration')->saveSetting($field . '_' . $project_id, $request->getParameter($field)); } switch ($request['browser_type']) { case 'viewvc': $base_url = $request['browser_url']; $link_rev = '&view=rev&revision=%revno'; $link_file = '&view=log'; $link_diff = '&r1=%revno&r2=%oldrev'; $link_view = '&revision=%revno&view=markup'; break; case 'viewvc_repo': $base_url = $request['browser_url']; $link_rev = '/?view=rev&revision=%revno'; $link_file = '/%file?view=log'; $link_diff = '/%file?r1=%revno&r2=%oldrev'; $link_view = '/%file?revision=%revno&view=markup'; break; case 'websvn': $base_url = $request['browser_url']; $link_rev = '/revision.php?repname=' . $request['repository'] . '&isdir=1&rev=%revno'; $link_file = '/log.php?repname=' . $request['repository'] . '&path=/%file'; $link_diff = '/comp.php?repname=' . $request['repository'] . '&compare[]=/%file@%revno&compare[]=/%file@%oldrev'; $link_view = '/filedetails.php?repname=' . $request['repository'] . '&path=/%file&rev=%revno'; break; case 'websvn_mv': $base_url = $request['browser_url']; $link_rev = '/' . '?repname=' . $request['repository'] . '&op=log&isdir=1&rev=%revno'; $link_file = '/%file?repname=' . $request['repository']; $link_diff = '/%file?repname=' . $request['repository'] . '&compare[]=/%file@%revno&compare[]=/%file@%oldrev'; $link_view = '/%file?repname=' . $request['repository'] . '&rev=%revno'; break; case 'loggerhead': $base_url = $request['browser_url']; $link_rev = '/revision/%revno'; $link_file = '/changes'; $link_diff = '/revision/%revno?compare_revid=%oldrev'; $link_view = '/annotate/head:/%file'; break; case 'gitweb': $base_url = $request['browser_url']; $link_rev = ';a=commitdiff;h=%revno'; $link_file = ';a=history;f=%file;hb=HEAD'; $link_diff = ';a=blobdiff;f=%file;hb=%revno;hpb=%oldrev'; $link_view = ';a=blob;f=%file;hb=%revno'; break; case 'cgit': $base_url = $request['browser_url']; $link_rev = '/commit/?id=%revno'; $link_file = '/log'; $link_diff = '/diff/%file?id=%revno?id2=%oldrev'; $link_view = '/tree/%file?id=%revno'; break; case 'hgweb': $base_url = $request['browser_url']; $link_rev = '/rev/%revno'; $link_file = '/log/tip/%file'; $link_diff = '/diff/%revno/%file'; $link_view = '/file/%revno/%file'; break; case 'github': $base_url = $request['browser_url']; $link_rev = '/commit/%revno'; $link_file = '/commits/%branch/%file'; $link_diff = '/commit/%revno'; $link_view = '/blob/%revno/%file'; break; case 'gitlab': $base_url = $request['browser_url']; $link_rev = '/commit/%revno'; $link_file = '/commits/%branch/%file'; $link_diff = '/commit/%revno'; $link_view = '/blob/%revno/%file'; break; case 'bitbucket': $base_url = $request['browser_url']; $link_rev = '/commits/%revno'; $link_file = '/history/%file'; $link_diff = '/commits/%revno#chg-%file'; $link_view = '/src/%revno/%file'; break; case 'gitorious': $base_url = $request['browser_url']; $link_rev = '/commit/%revno'; $link_file = '/blobs/history/%branch/%file'; $link_diff = '/commit/%revno'; $link_view = '/blobs/%revno/%file'; break; case 'rhodecode': $base_url = $request['browser_url']; $link_rev = '/changeset/%revno'; $link_file = '/changelog/%revno/%file'; $link_diff = '/diff/%file?diff2=%revno&diff1=%oldrev&fulldiff=1&diff=diff'; $link_view = '/files/%revno/%file'; break; } if ($request['browser_type'] != 'other') { framework\Context::getModule('vcs_integration')->saveSetting('browser_url_' . $project_id, $base_url); framework\Context::getModule('vcs_integration')->saveSetting('log_url_' . $project_id, $link_file); framework\Context::getModule('vcs_integration')->saveSetting('blob_url_' . $project_id, $link_view); framework\Context::getModule('vcs_integration')->saveSetting('diff_url_' . $project_id, $link_diff); framework\Context::getModule('vcs_integration')->saveSetting('commit_url_' . $project_id, $link_rev); } return $this->renderJSON(array('failed' => false, 'message' => framework\Context::getI18n()->__('Settings saved'))); } else { $this->forward403(); } }
/** * Save project settings * * @Route(url="/configure/project/:project_id/mailing", name="configure_settings") * @Parameters(config_module="core", section=15) * @param \thebuggenie\core\framework\Request $request * @return type */ public function runConfigureProjectSettings(framework\Request $request) { $this->forward403unless($request->isPost()); if ($this->access_level != framework\Settings::ACCESS_FULL) { $project_id = $request['project_id']; if (trim($request['mailing_from_address']) != '') { if (filter_var(trim($request['mailing_from_address']), FILTER_VALIDATE_EMAIL) !== false) { framework\Context::getModule('mailing')->saveSetting(Mailing::SETTING_PROJECT_FROM_ADDRESS . $project_id, trim(mb_strtolower($request->getParameter('mailing_from_address')))); if (trim($request['mailing_from_name']) !== '') { framework\Context::getModule('mailing')->saveSetting(Mailing::SETTING_PROJECT_FROM_NAME . $project_id, trim($request->getParameter('mailing_from_name'))); } else { framework\Context::getModule('mailing')->deleteSetting(Mailing::SETTING_PROJECT_FROM_NAME . $project_id); } } else { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('message' => framework\Context::getI18n()->__('Please enter a valid email address'))); } } elseif (trim($request['mailing_from_address']) == '') { framework\Context::getModule('mailing')->deleteSetting(Mailing::SETTING_PROJECT_FROM_ADDRESS . $project_id); framework\Context::getModule('mailing')->deleteSetting(Mailing::SETTING_PROJECT_FROM_NAME . $project_id); } return $this->renderJSON(array('failed' => false, 'message' => framework\Context::getI18n()->__('Settings saved'))); } else { $this->forward403(); } }
public function runProjectWorkflow(framework\Request $request) { if ($this->getUser()->canManageProject($this->selected_project) || $this->getUser()->canManageProjectReleases($this->selected_project)) { try { foreach ($this->selected_project->getIssuetypeScheme()->getIssuetypes() as $type) { $data = array(); foreach ($this->selected_project->getWorkflowScheme()->getWorkflowForIssuetype($type)->getSteps() as $step) { $data[] = array((string) $step->getID(), $request->getParameter('new_step_' . $type->getID() . '_' . $step->getID())); } $this->selected_project->convertIssueStepPerIssuetype($type, $data); } $this->selected_project->setWorkflowScheme(entities\WorkflowScheme::getB2DBTable()->selectById($request['workflow_id'])); $this->selected_project->save(); return $this->renderJSON(array('message' => framework\Context::geti18n()->__('Workflow scheme changed and issues updated'))); } catch (\Exception $e) { $this->getResponse()->setHTTPStatus(400); return $this->renderJSON(array('error' => framework\Context::geti18n()->__('An internal error occured'))); } } $this->getResponse()->setHTTPStatus(400); return $this->renderJSON(array('error' => framework\Context::geti18n()->__("You don't have access to perform this action"))); }
public function runResolve(framework\Request $request) { $theme = isset($request['theme_name']) ? $request['theme_name'] : framework\Settings::getThemeName(); $module_path = framework\Context::isInternalModule($request['module_name']) ? THEBUGGENIE_INTERNAL_MODULES_PATH : THEBUGGENIE_MODULES_PATH; if ($request->hasParameter('css')) { $this->getResponse()->setContentType('text/css'); if ($request->hasParameter('module_name') && framework\Context::isModuleLoaded($request['module_name'])) { $basepath = $module_path . $request['module_name'] . DS . 'public' . DS . 'css'; $asset = $module_path . $request['module_name'] . DS . 'public' . DS . 'css' . DS . $request->getParameter('css'); } elseif (!$request->hasParameter('theme_name')) { $basepath = THEBUGGENIE_PATH . 'public' . DS . 'css'; $asset = THEBUGGENIE_PATH . 'public' . DS . 'css' . DS . $request->getParameter('css'); } else { $basepath = THEBUGGENIE_PATH . 'themes'; $asset = THEBUGGENIE_PATH . 'themes' . DS . $theme . DS . 'css' . DS . $request->getParameter('css'); } } elseif ($request->hasParameter('js')) { $this->getResponse()->setContentType('text/javascript'); if ($request->hasParameter('theme_name')) { $basepath = THEBUGGENIE_PATH . 'themes'; $asset = THEBUGGENIE_PATH . 'themes' . DS . $theme . DS . 'js' . DS . $request->getParameter('js'); } elseif ($request->hasParameter('module_name') && framework\Context::isModuleLoaded($request['module_name'])) { $basepath = $module_path . $request['module_name'] . DS . 'public' . DS . 'js'; $asset = $module_path . $request['module_name'] . DS . 'public' . DS . 'js' . DS . $request->getParameter('js'); } else { $basepath = THEBUGGENIE_PATH . 'public' . DS . 'js'; $asset = THEBUGGENIE_PATH . 'public' . DS . 'js' . DS . $request->getParameter('js'); } } elseif ($request->hasParameter('image')) { $basepath = THEBUGGENIE_PATH . 'themes'; $asset = THEBUGGENIE_PATH . 'themes' . DS . $theme . DS . 'images'; if (isset($request['module_name'])) { $asset .= DS . "modules" . DS . $request['module_name']; } if (isset($request['folder'])) { $asset .= DS . $request['folder']; } $asset .= DS . $request->getParameter('image'); if (!file_exists($asset) && isset($request['module_name']) && framework\Context::isModuleLoaded($request['module_name'])) { $basepath = $module_path . $request['module_name'] . DS . 'public' . DS . 'images'; $asset = $module_path . $request['module_name'] . DS . 'public' . DS . 'images'; if (isset($request['folder'])) { $asset .= DS . $request['folder']; } $asset .= DS . $request->getParameter('image'); } $fileinfo = finfo_open(FILEINFO_MIME_TYPE); $mimetype = finfo_file($fileinfo, $asset); finfo_close($fileinfo); $this->getResponse()->setContentType($mimetype); } else { throw new \Exception('The expected theme Asset type is not supported.'); } $last_modified = filemtime($asset); $this->getResponse()->addHeader('Cache-Control: max-age=3600, must-revalidate'); $this->getResponse()->addHeader('Last-Modified: ' . gmdate('D, d M Y H:i:s ', $last_modified) . 'GMT'); $this->getResponse()->addHeader('ETag: ' . md5($last_modified)); if (!$this->getResponse()->isModified($last_modified)) { return $this->return304(); } $fileAsset = new AssetCollection(array(new FileAsset($asset, array(), $basepath))); $fileAsset->load(); // Do not decorate the asset with the theme's header/footer $this->getResponse()->setDecoration(framework\Response::DECORATE_NONE); return $this->renderText($fileAsset->dump()); }
public function postConfigSettings(\thebuggenie\core\framework\Request $request) { if ($request->hasParameter('import_articles')) { $cc = 0; foreach ($request['import_article'] as $article_name => $import) { $cc++; Articles::getTable()->deleteArticleByName(urldecode($article_name)); $content = file_get_contents(THEBUGGENIE_MODULES_PATH . 'publish' . DS . 'fixtures' . DS . $article_name); Article::createNew(urldecode($article_name), $content, null, array('overwrite' => true, 'noauthor' => true)); } framework\Context::setMessage('module_message', framework\Context::getI18n()->__('%number_of_articles articles imported successfully', array('%number_of_articles' => $cc))); } else { $settings = array('allow_camelcase_links', 'menu_title', 'hide_wiki_links', 'free_edit', 'require_change_reason'); foreach ($settings as $setting) { if ($request->hasParameter($setting)) { $this->saveSetting($setting, $request->getParameter($setting)); } } } }
public function runConfigureWorkflowSteps(framework\Request $request) { $this->workflow = null; $this->mode = $request->getParameter('mode', 'list'); try { $this->workflow = entities\Workflow::getB2DBTable()->selectById($request['workflow_id']); // $transition = new entities\WorkflowTransition(); // $step = tables\WorkflowSteps::getTable()->selectById(9); // $transition->setOutgoingStep($step); // $transition->setName('Initial transition'); // $transition->setWorkflow($this->workflow); // $transition->setScope(framework\Context::getScope()); // $transition->setDescription('This is the initial transition for issues using this workflow'); // $transition->save(); // $this->workflow->setInitialTransition($transition); // $this->workflow->save(); if ($this->mode == 'copy_workflow') { if ($new_name = $request['new_name']) { $new_workflow = $this->workflow->copy($new_name); return $this->renderJSON(array('content' => $this->getComponentHTML('configuration/workflow', array('workflow' => $new_workflow)), 'total_count' => entities\Workflow::getCustomWorkflowsCount(), 'more_available' => framework\Context::getScope()->hasCustomWorkflowsAvailable())); } else { $this->error = $this->getI18n()->__('Please enter a valid name'); } } elseif ($this->mode == 'delete_workflow') { $this->workflow->delete(); return $this->renderJSON(array('success' => true, 'message' => $this->getI18n()->__('The workflow was deleted'), 'total_count' => entities\Workflow::getCustomWorkflowsCount(), 'more_available' => framework\Context::getScope()->hasCustomWorkflowsAvailable())); } } catch (\Exception $e) { if ($request->getRequestedFormat() == 'json') { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('success' => false, 'message' => $this->getI18n()->__('An error occured'), 'error' => $e->getMessage())); } else { $this->error = $this->getI18n()->__('This workflow does not exist'); } } }
/** * @param framework\Request $request * @param $issue */ protected function _unlockIssueAfter(framework\Request $request, $issue) { tables\Permissions::getTable()->deleteByPermissionTargetIDAndModule('canviewissue', $issue->getID()); $al_users = $request->getParameter('access_list_users', array()); $al_teams = $request->getParameter('access_list_teams', array()); $i_al = $issue->getAccessList(); foreach ($i_al as $k => $item) { if ($item['target'] instanceof entities\Team) { $tid = $item['target']->getID(); if (array_key_exists($tid, $al_teams)) { unset($i_al[$k]); } } elseif ($item['target'] instanceof entities\User) { $uid = $item['target']->getID(); if (array_key_exists($uid, $al_users)) { unset($i_al[$k]); } } } foreach ($al_users as $uid) { framework\Context::setPermission('canviewissue', $issue->getID(), 'core', $uid, 0, 0, true); } foreach ($al_teams as $tid) { framework\Context::setPermission('canviewissue', $issue->getID(), 'core', 0, 0, $tid, true); } }
public function runAddFilter(framework\Request $request) { if ($request['filter_name'] == 'project_id' && count(entities\Project::getAll()) == 0) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => framework\Context::getI18n()->__('No projects exist so this filter can not be added'))); } elseif (in_array($request['filter_name'], entities\SearchFilter::getValidSearchFilters()) || entities\CustomDatatype::doesKeyExist($request['filter_name'])) { return $this->renderJSON(array('content' => $this->getComponentHTML('search/filter', array('filter' => $request['filter_name'], 'key' => $request->getParameter('key', 0))))); } else { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => framework\Context::getI18n()->__('This is not a valid search field'))); } }
protected function _upgradeFrom3dot2(framework\Request $request) { set_time_limit(0); \thebuggenie\core\entities\tables\Milestones::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGMilestone::getB2DBTable()); \thebuggenie\core\entities\tables\Projects::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGProjectsTable::getTable()); \thebuggenie\core\entities\tables\Log::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGLogTable::getTable()); \thebuggenie\core\entities\tables\Users::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGUsersTable::getTable()); \thebuggenie\core\entities\tables\Issues::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGIssuesTable::getTable()); \thebuggenie\core\entities\tables\Workflows::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGWorkflowsTable::getTable()); \thebuggenie\core\entities\tables\IssueSpentTimes::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGIssueSpentTimesTable::getTable()); \thebuggenie\core\entities\tables\Comments::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGCommentsTable::getTable()); \thebuggenie\core\entities\tables\SavedSearches::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGSavedSearchesTable::getTable()); \thebuggenie\core\entities\tables\Settings::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGSettingsTable::getTable()); \thebuggenie\core\entities\tables\Notifications::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGNotificationsTable::getTable()); \thebuggenie\core\entities\tables\Permissions::getTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGPermissionsTable::getTable()); \thebuggenie\core\entities\Dashboard::getB2DBTable()->create(); \thebuggenie\core\entities\DashboardView::getB2DBTable()->upgrade(\thebuggenie\core\modules\installation\upgrade_32\TBGDashboardViewsTable::getTable()); \thebuggenie\core\entities\ApplicationPassword::getB2DBTable()->create(); \thebuggenie\core\entities\NotificationSetting::getB2DBTable()->create(); $transaction = \b2db\Core::startTransaction(); // Upgrade user passwords switch ($request['upgrade_passwords']) { case 'manual': $password = $request['manual_password']; foreach (\thebuggenie\core\entities\tables\Users::getTable()->selectAll() as $user) { $user->setPassword($password); $user->save(); } break; case 'auto': $field = $request['upgrade_passwords_pick'] == 'username' ? 'username' : 'email'; foreach (\thebuggenie\core\entities\tables\Users::getTable()->selectAll() as $user) { if ($field == 'username' && trim($user->getUsername())) { $user->setPassword(trim($user->getUsername())); $user->save(); } elseif ($field == 'email' && trim($user->getEmail())) { $user->setPassword(trim($user->getEmail())); $user->save(); } } break; } $adminuser = \thebuggenie\core\entities\User::getB2DBTable()->selectById(1); $adminuser->setPassword($request['admin_password']); $adminuser->save(); // Add new settings framework\Settings::saveSetting(framework\Settings::SETTING_SERVER_TIMEZONE, 'core', date_default_timezone_get(), 0, 1); foreach ($request->getParameter('status') as $scope_id => $status_id) { $scope = \thebuggenie\core\entities\tables\Scopes::getTable()->selectById((int) $scope_id); if ($scope instanceof \thebuggenie\core\entities\Scope) { $epic = new \thebuggenie\core\entities\Issuetype(); $epic->setName('Epic'); $epic->setIcon('epic'); $epic->setDescription('Issue type suited for entering epics'); $epic->setScope($scope_id); $epic->save(); framework\Settings::saveSetting('issuetype_epic', $epic->getID(), 'core', $scope_id); foreach (\thebuggenie\core\entities\tables\Workflows::getTable()->getAll((int) $scope_id) as $workflow) { $transition = new \thebuggenie\core\entities\WorkflowTransition(); $steps = $workflow->getSteps(); $step = array_shift($steps); $step->setLinkedStatusID((int) $status_id); $step->save(); $transition->setOutgoingStep($step); $transition->setName('Issue created'); $transition->setWorkflow($workflow); $transition->setScope($scope); $transition->setDescription('This is the initial transition for issues using this workflow'); $transition->save(); $workflow->setInitialTransition($transition); $workflow->save(); } \thebuggenie\core\entities\ActivityType::loadFixtures($scope); } } $transaction->commitAndEnd(); framework\Context::finishUpgrading(); foreach (framework\Context::getModules() as $module) { $module->upgrade(); } $this->upgrade_complete = true; }
public function setValuesFromRequest(\thebuggenie\core\framework\Request $request) { if ($request->hasParameter('predefined_search')) { $this->setPredefinedVariables($request['predefined_search']); } else { $this->_templatename = $request->hasParameter('template') && self::isTemplateValid($request['template']) ? $request['template'] : 'results_normal'; $this->_templateparameter = $request['template_parameter']; $this->_issues_per_page = $request->getParameter('issues_per_page', 50); $this->_offset = $request->getParameter('offset', 0); if ($request['quicksearch']) { $this->setSortFields(array(tables\Issues::LAST_UPDATED => 'asc')); } $this->_filters = SearchFilter::getFromRequest($request, $this); $this->_applies_to_project = framework\Context::getCurrentProject(); $this->_columns = $request->getParameter('columns'); $this->_sortfields = $request->getParameter('sortfields'); $this->_groupby = $request['groupby']; $this->_grouporder = $request->getParameter('grouporder', 'asc'); if (in_array($this->_templatename, array('results_userpain_singlepainthreshold', 'results_userpain_totalpainthreshold'))) { $this->_searchtitle = framework\Context::getI18n()->__('Showing "bug report" issues sorted by user pain, threshold set at %threshold', array('%threshold' => $this->_templateparameter)); $this->_issues_per_page = 0; $this->_groupby = 'user_pain'; $this->_grouporder = 'desc'; $this->_filters['issuetype'] = SearchFilter::createFilter('issuetype', array('operator' => '=', 'value' => join(',', tables\IssueTypes::getTable()->getBugReportTypeIDs()))); } elseif ($this->_templatename == 'results_votes') { $this->_searchtitle = framework\Context::getI18n()->__('Showing issues ordered by number of votes'); $this->_issues_per_page = $request->getParameter('issues_per_page', 100); $this->_groupby = 'votes'; $this->_grouporder = 'desc'; } } $this->_setupGenericFilters(); }
public function isValid(\thebuggenie\core\framework\Request $request) { if ($this->_target_value) { return true; } switch ($this->_action_type) { case self::ACTION_ASSIGN_ISSUE: return (bool) $request['assignee_type'] && $request['assignee_id']; break; case self::ACTION_SET_MILESTONE: return (bool) $request->hasParameter('milestone_id'); break; case self::ACTION_SET_PRIORITY: return (bool) $request->hasParameter('priority_id'); break; case self::ACTION_SET_STATUS: return (bool) $request->hasParameter('status_id') && ($status = Status::getB2DBTable()->selectById((int) $request->getParameter('status_id'))) instanceof Status && $status->canUserSet(framework\Context::getUser()); break; case self::ACTION_SET_REPRODUCABILITY: return (bool) $request->hasParameter('reproducability_id'); break; case self::ACTION_SET_RESOLUTION: return (bool) $request->hasParameter('resolution_id'); break; default: return true; } }