public function runUpgrade(framework\Request $request) { $version_info = explode(',', file_get_contents(THEBUGGENIE_PATH . 'installed')); $this->current_version = $version_info[0]; $this->upgrade_available = $this->current_version != framework\Settings::getVersion(false); if ($this->upgrade_available) { $scope = new \thebuggenie\core\entities\Scope(); $scope->setID(1); $scope->setEnabled(); framework\Context::setScope($scope); if ($this->current_version == '3.2') { $this->statuses = \thebuggenie\core\entities\tables\ListTypes::getTable()->getStatusListForUpgrade(); $this->adminusername = \thebuggenie\core\modules\installation\upgrade_32\TBGUsersTable::getTable()->getAdminUsername(); } } $this->upgrade_complete = false; if ($this->upgrade_available && $request->isPost()) { $this->upgrade_complete = false; switch ($this->current_version) { case '3.2': $this->_upgradeFrom3dot2($request); break; default: $this->upgrade_complete = true; } if ($this->upgrade_complete) { $existing_installed_content = file_get_contents(THEBUGGENIE_PATH . 'installed'); file_put_contents(THEBUGGENIE_PATH . 'installed', framework\Settings::getVersion(false, false) . ', upgraded ' . date('d.m.Y H:i') . "\n" . $existing_installed_content); $this->current_version = framework\Settings::getVersion(false, false); $this->upgrade_available = false; } } elseif ($this->upgrade_available) { $this->permissions_ok = false; if (is_writable(THEBUGGENIE_PATH . 'installed') && is_writable(THEBUGGENIE_PATH . 'upgrade')) { $this->permissions_ok = true; } } elseif ($this->upgrade_complete) { $this->forward(framework\Context::getRouting()->generate('home')); } }
/** * Show an article * * @param \thebuggenie\core\framework\Request $request */ public function runEditArticle(framework\Request $request) { if (!$this->article->canEdit()) { framework\Context::setMessage('publish_article_error', framework\Context::getI18n()->__('You do not have permission to edit this article')); $this->forward(framework\Context::getRouting()->generate('publish_article', array('article_name' => $this->article_name))); } $this->article_route = $this->article->getID() ? 'publish_article_edit' : 'publish_article_new'; $this->article_route_params = $this->article->getID() ? array('article_name' => $this->article_name) : array(); if ($request->isPost()) { $this->preview = (bool) $request['preview']; $this->change_reason = $request['change_reason']; try { $this->article->setArticleType($request['article_type']); $this->article->setName($request['new_article_name']); $this->article->setParentArticle(Articles::getTable()->getArticleByName($request['parent_article_name'])); $this->article->setManualName($request['manual_name']); if ($this->article->getArticleType() == Article::TYPE_MANUAL && !$this->article->getName()) { $article_name_prefix = $this->article->getParentArticle() instanceof Article ? $this->article->getParentArticle()->getName() . ':' : $request['parent_article_name']; $this->article->setName(str_replace(' ', '', $article_name_prefix . $this->article->getManualName())); } $this->article->setContentSyntax($request['article_content_syntax']); $this->article->setContent($request->getRawParameter('article_content')); if (!$this->article->getName() || trim($this->article->getName()) == '' || !preg_match('/[\\w:]+/i', $this->article->getName())) { throw new \Exception(framework\Context::getI18n()->__('You need to specify a valid article name')); } if ($request['article_type'] == Article::TYPE_MANUAL && (!$this->article->getManualName() || trim($this->article->getManualName()) == '' || !preg_match('/[\\w:]+/i', $this->article->getManualName()))) { throw new \Exception(framework\Context::getI18n()->__('You need to specify a valid article name')); } if (!$this->preview && framework\Context::getModule('publish')->getSetting('require_change_reason') == 1 && (!$this->change_reason || trim($this->change_reason) == '')) { throw new \Exception(framework\Context::getI18n()->__('You have to provide a reason for the changes')); } if ($this->article->getLastUpdatedDate() != $request['last_modified']) { throw new \Exception(framework\Context::getI18n()->__('The file has been modified since you last opened it')); } if (($article = Article::getByName($request['new_new_article_name'])) && $article instanceof Article && $article->getID() != $request['article_id']) { throw new \Exception(framework\Context::getI18n()->__('An article with that name already exists. Please choose a different article name')); } if (!$this->preview) { $this->article->doSave(array(), $request['change_reason']); framework\Context::setMessage('publish_article_message', framework\Context::getI18n()->__('The article was saved')); $this->forward(framework\Context::getRouting()->generate('publish_article', array('article_name' => $this->article->getName()))); } } catch (\Exception $e) { $this->error = $e->getMessage(); } } }
/** * Milestone actions * * @Route(url="/milestone/:milestone_id/*") * * @param \thebuggenie\core\framework\Request $request */ public function runMilestone(framework\Request $request) { $milestone_id = $request['milestone_id'] ? $request['milestone_id'] : null; $milestone = new \thebuggenie\core\entities\Milestone($milestone_id); try { if (!$this->getUser()->canManageProject($this->selected_project) || !$this->getUser()->canManageProjectReleases($this->selected_project)) { throw new \Exception($this->getI18n()->__("You don't have access to modify milestones")); } switch (true) { case $request->isDelete(): $milestone->delete(); $no_milestone = new \thebuggenie\core\entities\Milestone(0); $no_milestone->setProject($milestone->getProject()); return $this->renderJSON(array('issue_count' => $no_milestone->countIssues(), 'hours' => $no_milestone->getHoursEstimated(), 'points' => $no_milestone->getPointsEstimated())); case $request->isPost(): $this->_saveMilestoneDetails($request, $milestone); $board = entities\tables\AgileBoards::getTable()->selectById($request['board_id']); if ($request->hasParameter('issues') && $request['include_selected_issues']) { \thebuggenie\core\entities\tables\Issues::getTable()->assignMilestoneIDbyIssueIDs($milestone->getID(), $request['issues']); } $message = framework\Context::getI18n()->__('Milestone saved'); return $this->renderJSON(array('message' => $message, 'component' => $this->getComponentHTML('agile/milestonebox', array('milestone' => $milestone, 'board' => $board)), 'milestone_id' => $milestone->getID())); default: return $this->renderJSON(array('content' => framework\Action::returnComponentHTML('agile/milestonebox', array('milestone' => $milestone)), 'milestone_id' => $milestone->getID(), 'milestone_name' => $milestone->getName(), 'milestone_order' => array_keys($milestone->getProject()->getMilestonesForRoadmap()))); } } catch (\Exception $e) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => $e->getMessage())); } }
/** * 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 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(); } }
public function runProjectWorkflowTable(framework\Request $request) { $this->selected_project = entities\Project::getB2DBTable()->selectById($request['project_id']); if ($request->isPost()) { try { $workflow_scheme = entities\WorkflowScheme::getB2DBTable()->selectById($request['new_workflow']); return $this->renderJSON(array('content' => $this->getComponentHTML('projectworkflow_table', array('project' => $this->selected_project, 'new_workflow' => $workflow_scheme)))); } catch (\Exception $e) { $this->getResponse()->setHTTPStatus(400); return $this->renderJSON(array('error' => framework\Context::geti18n()->__('This workflow scheme is not valid'))); } } }
public function runSiteIcons(framework\Request $request) { if ($this->getAccessLevel($request['section'], 'core') == framework\Settings::ACCESS_FULL) { if ($request->isPost()) { switch ($request['small_icon_action']) { case 'upload_file': $file = $request->handleUpload('small_icon'); framework\Settings::saveSetting(framework\Settings::SETTING_FAVICON_TYPE, framework\Settings::APPEARANCE_FAVICON_CUSTOM); framework\Settings::saveSetting(framework\Settings::SETTING_FAVICON_ID, $file->getID()); break; case 'clear_file': framework\Settings::saveSetting(framework\Settings::SETTING_FAVICON_TYPE, framework\Settings::APPEARANCE_FAVICON_THEME); break; } switch ($request['large_icon_action']) { case 'upload_file': $file = $request->handleUpload('large_icon'); framework\Settings::saveSetting(framework\Settings::SETTING_HEADER_ICON_TYPE, framework\Settings::APPEARANCE_HEADER_CUSTOM); framework\Settings::saveSetting(framework\Settings::SETTING_HEADER_ICON_ID, $file->getID()); break; case 'clear_file': framework\Settings::saveSetting(framework\Settings::SETTING_HEADER_ICON_TYPE, framework\Settings::APPEARANCE_HEADER_THEME); break; } } $route = framework\Context::getRouting()->generate('configure_settings'); if ($request->isAjaxCall()) { return $this->renderJSON(array('forward' => $route)); } else { $this->forward($route); } } return $this->forward403($this->getI18n()->__("You don't have access to perform this action")); }
/** * Milestone actions * * @Route(url="/:project_key/milestone/:milestone_id/actions/*", name='project_milestone') * * @param \thebuggenie\core\framework\Request $request */ public function runMilestone(framework\Request $request) { $milestone_id = $request['milestone_id'] ? $request['milestone_id'] : null; $milestone = new \thebuggenie\core\entities\Milestone($milestone_id); $action_option = str_replace($this->selected_project->getKey() . '/milestone/' . $request['milestone_id'] . '/', '', $request['url']); try { if (!($this->getUser()->canAddScrumSprints($this->selected_project) || $this->getUser()->canManageProjectReleases($this->selected_project) && $this->getUser()->canManageProject($this->selected_project))) { throw new \Exception($this->getI18n()->__("You don't have access to modify milestones")); } switch (true) { case $request->isDelete(): $milestone->delete(); $no_milestone = new \thebuggenie\core\entities\Milestone(0); $no_milestone->setProject($milestone->getProject()); return $this->renderJSON(array('issue_count' => $no_milestone->countIssues(), 'hours' => $no_milestone->getHoursEstimated(), 'points' => $no_milestone->getPointsEstimated())); case $request->isPost(): $this->_saveMilestoneDetails($request, $milestone); if ($request->hasParameter('issues') && $request['include_selected_issues']) { \thebuggenie\core\entities\tables\Issues::getTable()->assignMilestoneIDbyIssueIDs($milestone->getID(), $request['issues']); } $event = \thebuggenie\core\framework\Event::createNew('project', 'runMilestone::post', $milestone); $event->triggerUntilProcessed(); if ($event->isProcessed()) { $component = $event->getReturnValue(); } else { $component = $this->getComponentHTML('project/milestonebox', array('milestone' => $milestone, 'include_counts' => true)); } $message = framework\Context::getI18n()->__('Milestone saved'); return $this->renderJSON(array('message' => $message, 'component' => $component, 'milestone_id' => $milestone->getID())); case $action_option == 'details': \thebuggenie\core\framework\Context::performAction(new \thebuggenie\core\modules\project\controllers\Main(), 'project', 'MilestoneDetails'); return true; default: return $this->forward($this->getRouting()->generate('project_roadmap', array('project_key' => $this->selected_project->getKey()))); } } catch (\Exception $e) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => $e->getMessage())); } }
public function runEditSavedSearch(framework\Request $request) { if ($request->isPost()) { if ($request['delete_saved_search']) { try { if (!$this->search_object instanceof entities\SavedSearch || !$this->search_object->getB2DBID()) { throw new \Exception('not a saved search'); } if ($this->search_object->getUserID() == framework\Context::getUser()->getID() || $this->search_object->isPublic() && framework\Context::getUser()->canCreatePublicSearches()) { $this->search_object->delete(); return $this->renderJSON(array('failed' => false, 'message' => framework\Context::getI18n()->__('The saved search was deleted successfully'))); } } catch (\Exception $e) { return $this->renderJSON(array('failed' => true, 'message' => framework\Context::getI18n()->__('Cannot delete this saved search'))); } } elseif ($request['saved_search_name'] != '') { if (!$this->saved_search instanceof entities\SavedSearch) { $this->saved_search = new entities\SavedSearch(); } $this->saved_search->setName($request['saved_search_name']); $this->saved_search->setDescription($request['saved_search_description']); $this->saved_search->setIsPublic((bool) $request['saved_search_public']); $this->saved_search->save(); if ($request['saved_search_id']) { framework\Context::setMessage('search_message', framework\Context::getI18n()->__('The saved search was updated')); } else { framework\Context::setMessage('search_message', framework\Context::getI18n()->__('The saved search has been created')); } $params = array(); } else { framework\Context::setMessage('search_error', framework\Context::getI18n()->__('You have to specify a name for the saved search')); $params = array('fs' => $this->filters, 'groupby' => $this->groupby, 'grouporder' => $this->grouporder, 'templatename' => $this->templatename, 'saved_search' => $request['saved_search_id'], 'issues_per_page' => $this->ipp); } if (framework\Context::isProjectContext()) { $route = 'project_issues'; $params['project_key'] = framework\Context::getCurrentProject()->getKey(); } else { $route = 'search'; } $this->forward(framework\Context::getRouting()->generate($route, $params)); } }
/** * Configuration import page * * @param framework\Request $request */ public function runIndex(framework\Request $request) { if ($request->isPost()) { if ($request['import_sample_data']) { $transaction = \b2db\Core::startTransaction(); $users = array(); $user1 = new entities\User(); $user1->setUsername('john'); $user1->setPassword('john'); $user1->setBuddyname('John'); $user1->setRealname('John'); $user1->setActivated(); $user1->setEnabled(); $user1->save(); $users[] = $user1; $user2 = new entities\User(); $user2->setUsername('jane'); $user2->setPassword('jane'); $user2->setBuddyname('Jane'); $user2->setRealname('Jane'); $user2->setActivated(); $user2->setEnabled(); $user2->save(); $users[] = $user2; $user3 = new entities\User(); $user3->setUsername('jackdaniels'); $user3->setPassword('jackdaniels'); $user3->setBuddyname('Jack'); $user3->setRealname('Jack Daniels'); $user3->setActivated(); $user3->setEnabled(); $user3->save(); $users[] = $user3; $project1 = new entities\Project(); $project1->setName('Sample project 1'); $project1->setOwner($users[rand(0, 2)]); $project1->setLeader($users[rand(0, 2)]); $project1->setQaResponsible($users[rand(0, 2)]); $project1->setDescription('This is a sample project that is awesome. Try it out!'); $project1->setHomepage('http://www.google.com'); $project1->save(); $project2 = new entities\Project(); $project2->setName('Sample project 2'); $project2->setOwner($users[rand(0, 2)]); $project2->setLeader($users[rand(0, 2)]); $project2->setQaResponsible($users[rand(0, 2)]); $project2->setDescription('This is the second sample project. Not as awesome as the first one, but still worth a try!'); $project2->setHomepage('http://www.bing.com'); $project2->save(); foreach (array($project1, $project2) as $project) { for ($cc = 1; $cc <= 5; $cc++) { $milestone = new entities\Milestone(); $milestone->setName("Milestone {$cc}"); $milestone->setProject($project); $milestone->setType(entities\Milestone::TYPE_REGULAR); if ((bool) rand(0, 1)) { $milestone->setScheduledDate(NOW + 100000 * (20 * $cc)); } $milestone->save(); } } $p1_milestones = $project1->getMilestones(); $p2_milestones = $project2->getMilestones(); $issues = array(); $priorities = entities\Priority::getAll(); $categories = entities\Category::getAll(); $severities = entities\Severity::getAll(); $statuses = entities\Status::getAll(); $reproducabilities = entities\Reproducability::getAll(); $lorem_ipsum = \thebuggenie\modules\publish\entities\tables\Articles::getTable()->getArticleByName('LoremIpsum'); $lorem_words = explode(' ', $lorem_ipsum->getContent()); foreach (array('bugreport', 'featurerequest', 'enhancement', 'idea') as $issuetype) { $issuetype = entities\Issuetype::getByKeyish($issuetype); for ($cc = 1; $cc <= 10; $cc++) { $issue1 = new entities\Issue(); $issue1->setProject($project1); $issue1->setPostedBy($users[rand(0, 2)]); $issue1->setPosted(NOW - 86400 * rand(1, 30)); $title_string = ''; $description_string = ''; $rand_length = rand(4, 15); $ucnext = true; for ($ll = 1; $ll <= $rand_length; $ll++) { $word = str_replace(array(',', '.', "\r", "\n"), array('', '', '', ''), $lorem_words[array_rand($lorem_words)]); $word = $ucnext || rand(1, 40) == 19 ? ucfirst($word) : mb_strtolower($word); $title_string .= $word; $ucnext = false; if ($ll == $rand_length || rand(1, 15) == 5) { $title_string .= '.'; $ucnext = true; } $title_string .= ' '; } $rand_length = rand(40, 500); $ucnext = true; for ($ll = 1; $ll <= $rand_length; $ll++) { $word = str_replace(array(',', '.', "\r", "\n"), array('', '', '', ''), $lorem_words[array_rand($lorem_words)]); $word = $ucnext || rand(1, 40) == 19 ? ucfirst($word) : mb_strtolower($word); $description_string .= $word; $ucnext = false; if ($ll == $rand_length || rand(1, 15) == 5) { $description_string .= '.'; $ucnext = true; $description_string .= $ll != $rand_length && rand(1, 15) == 8 ? "\n\n" : ' '; } else { $description_string .= ' '; } } $issue1->setTitle(ucfirst($title_string)); $issue1->setDescription($description_string); $issue1->setIssuetype($issuetype); $issue1->setMilestone($p1_milestones[array_rand($p1_milestones)]); $issue1->setPriority($priorities[array_rand($priorities)]); $issue1->setCategory($categories[array_rand($categories)]); $issue1->setSeverity($severities[array_rand($severities)]); $issue1->setReproducability($reproducabilities[array_rand($reproducabilities)]); $issue1->setPercentCompleted(rand(0, 100)); $issue1->save(); $issue1->setStatus($statuses[array_rand($statuses)]); if (rand(0, 1)) { $issue1->setAssignee($users[array_rand($users)]); } $issue1->save(); $issues[] = $issue1; $issue2 = new entities\Issue(); $issue2->setProject($project2); $issue2->setPostedBy($users[rand(0, 2)]); $issue2->setPosted(NOW - 86400 * rand(1, 30)); $title_string = ''; $description_string = ''; $rand_length = rand(4, 15); $ucnext = true; for ($ll = 1; $ll <= $rand_length; $ll++) { $word = str_replace(array(',', '.', "\r", "\n"), array('', '', '', ''), $lorem_words[array_rand($lorem_words)]); $word = $ucnext || rand(1, 40) == 19 ? ucfirst($word) : mb_strtolower($word); $title_string .= $word; $ucnext = false; if ($ll == $rand_length || rand(1, 15) == 5) { $title_string .= '.'; $ucnext = true; } $title_string .= ' '; } $rand_length = rand(40, 500); $ucnext = true; for ($ll = 1; $ll <= $rand_length; $ll++) { $word = str_replace(array(',', '.', "\r", "\n"), array('', '', '', ''), $lorem_words[array_rand($lorem_words)]); $word = $ucnext || rand(1, 40) == 19 ? ucfirst($word) : mb_strtolower($word); $description_string .= $word; $ucnext = false; if ($ll == $rand_length || rand(1, 15) == 5) { $description_string .= '.'; $ucnext = true; $description_string .= $ll != $rand_length && rand(1, 15) == 8 ? "\n\n" : ' '; } else { $description_string .= ' '; } } $issue2->setTitle(ucfirst($title_string)); $issue2->setDescription($description_string); $issue2->setIssuetype($issuetype); $issue2->setMilestone($p2_milestones[array_rand($p2_milestones)]); $issue2->setPriority($priorities[array_rand($priorities)]); $issue2->setCategory($categories[array_rand($categories)]); $issue2->setSeverity($severities[array_rand($severities)]); $issue2->setReproducability($reproducabilities[array_rand($reproducabilities)]); $issue2->setPercentCompleted(rand(0, 100)); if (rand(0, 1)) { $issue1->setAssignee($users[array_rand($users)]); } $issue2->save(); $issue2->setStatus($statuses[array_rand($statuses)]); $issue2->save(); $issues[] = $issue2; } } $rand_issues_to_close = rand(8, 40); $resolutions = entities\Resolution::getAll(); for ($cc = 1; $cc <= $rand_issues_to_close; $cc++) { $issue = array_slice($issues, array_rand($issues), 1); $issue = $issue[0]; $issue->setResolution($resolutions[array_rand($resolutions)]); $issue->close(); $issue->save(); } $this->imported_data = true; $roles = entities\Role::getAll(); foreach (array($project1, $project2) as $project) { foreach ($users as $user) { $project->addAssignee($user, $roles[array_rand($roles)]); } } $transaction->commitAndEnd(); } } $project1 = entities\Project::getByKey('sampleproject1'); $project2 = entities\Project::getByKey('sampleproject2'); $this->canimport = !$project1 instanceof entities\Project && !$project2 instanceof entities\Project; }