コード例 #1
0
ファイル: Asset.php プロジェクト: AzerothShard/thebuggenie
 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());
 }
コード例 #2
0
ファイル: Auth_ldap.php プロジェクト: RTechSoft/thebuggenie
 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));
             }
         }
     }
 }
コード例 #3
0
ファイル: Main.php プロジェクト: thebuggenie/module-api
 /**
  * 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));
     }
 }
コード例 #4
0
ファイル: Mailing.php プロジェクト: RTechSoft/thebuggenie
 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);
         }
     }
 }
コード例 #5
0
ファイル: Main.php プロジェクト: pkdevboxy/thebuggenie
 /**
  * @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;
 }
コード例 #6
0
ファイル: User.php プロジェクト: underblaze/thebuggenie-4.1.0
 /**
  * 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;
 }
コード例 #7
0
ファイル: Main.php プロジェクト: underblaze/thebuggenie-4.1.0
 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 = '&amp;view=rev&amp;revision=%revno';
                 $link_file = '&amp;view=log';
                 $link_diff = '&amp;r1=%revno&amp;r2=%oldrev';
                 $link_view = '&amp;revision=%revno&amp;view=markup';
                 break;
             case 'viewvc_repo':
                 $base_url = $request['browser_url'];
                 $link_rev = '/?view=rev&amp;revision=%revno';
                 $link_file = '/%file?view=log';
                 $link_diff = '/%file?r1=%revno&amp;r2=%oldrev';
                 $link_view = '/%file?revision=%revno&amp;view=markup';
                 break;
             case 'websvn':
                 $base_url = $request['browser_url'];
                 $link_rev = '/revision.php?repname=' . $request['repository'] . '&amp;isdir=1&amp;rev=%revno';
                 $link_file = '/log.php?repname=' . $request['repository'] . '&amp;path=/%file';
                 $link_diff = '/comp.php?repname=' . $request['repository'] . '&amp;compare[]=/%file@%revno&amp;compare[]=/%file@%oldrev';
                 $link_view = '/filedetails.php?repname=' . $request['repository'] . '&path=/%file&amp;rev=%revno';
                 break;
             case 'websvn_mv':
                 $base_url = $request['browser_url'];
                 $link_rev = '/' . '?repname=' . $request['repository'] . '&amp;op=log&isdir=1&amp;rev=%revno';
                 $link_file = '/%file?repname=' . $request['repository'];
                 $link_diff = '/%file?repname=' . $request['repository'] . '&amp;compare[]=/%file@%revno&amp;compare[]=/%file@%oldrev';
                 $link_view = '/%file?repname=' . $request['repository'] . '&amp;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&amp;diff1=%oldrev&amp;fulldiff=1&amp;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();
     }
 }
コード例 #8
0
ファイル: Main.php プロジェクト: founderio/thebuggenie
 /**
  * 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();
     }
 }
コード例 #9
0
ファイル: Main.php プロジェクト: JonathanRH/thebuggenie
 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")));
 }
コード例 #10
0
ファイル: Asset.php プロジェクト: founderio/thebuggenie
 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());
 }
コード例 #11
0
ファイル: Publish.php プロジェクト: nrensen/thebuggenie
 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));
             }
         }
     }
 }
コード例 #12
0
ファイル: Main.php プロジェクト: nrensen/thebuggenie
 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');
         }
     }
 }
コード例 #13
0
ファイル: Main.php プロジェクト: nrensen/thebuggenie
 /**
  * @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);
     }
 }
コード例 #14
0
ファイル: Actions.php プロジェクト: RTechSoft/thebuggenie
 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')));
     }
 }
コード例 #15
0
ファイル: Main.php プロジェクト: JonathanRH/thebuggenie
 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;
 }
コード例 #16
0
ファイル: SavedSearch.php プロジェクト: RTechSoft/thebuggenie
 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();
 }
コード例 #17
0
 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;
     }
 }