protected function _initialize()
 {
     parent::_setup(self::B2DBNAME, self::ID);
     parent::_addForeignKeyColumn(self::PROJECT_ID, Projects::getTable());
     parent::_addForeignKeyColumn(self::ROLE_ID, ListTypes::getTable());
     parent::_addForeignKeyColumn(self::TEAM_ID, Teams::getTable());
 }
예제 #2
0
 protected function _initialize()
 {
     parent::_setup(self::B2DBNAME, self::ID);
     parent::_addBoolean(self::CONFIRMED);
     parent::_addForeignKeyColumn(self::BUILD, Builds::getTable(), Builds::ID);
     parent::_addForeignKeyColumn(self::ISSUE, Issues::getTable(), Issues::ID);
     parent::_addForeignKeyColumn(self::STATUS, ListTypes::getTable(), ListTypes::ID);
 }
예제 #3
0
 protected function _initialize()
 {
     parent::_setup(self::B2DBNAME, self::ID);
     parent::_addVarchar(self::PERMISSION_TYPE, 100);
     parent::_addVarchar(self::TARGET_ID, 200, 0);
     parent::_addBoolean(self::ALLOWED);
     parent::_addVarchar(self::MODULE, 50);
     parent::_addForeignKeyColumn(self::UID, Users::getTable());
     parent::_addForeignKeyColumn(self::GID, Groups::getTable());
     parent::_addForeignKeyColumn(self::TID, Teams::getTable());
     parent::_addForeignKeyColumn(self::ROLE_ID, ListTypes::getTable());
 }
예제 #4
0
 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'));
     }
 }
예제 #5
0
 public function preloadValues()
 {
     static $preloaded = false;
     if (!$preloaded) {
         $milestones = tables\Milestones::getTable()->getByProjectID($this->getID());
         unset($milestones);
         $issuetypes = IssueType::getAll();
         unset($issuetypes);
         tables\ListTypes::getTable()->populateItemCache();
     }
     $preloaded = true;
 }
예제 #6
0
 public function findIssues($filters = array(), $results_per_page = 30, $offset = 0, $groupby = null, $grouporder = null, $sortfields = array(self::LAST_UPDATED => 'asc'))
 {
     $crit = $this->getCriteria();
     $crit->addWhere(self::DELETED, false);
     $crit->addWhere(self::SCOPE, framework\Context::getScope()->getID());
     if (count($filters) > 0) {
         $crit->addJoin(IssueCustomFields::getTable(), IssueCustomFields::ISSUE_ID, Issues::ID);
         $crit->addJoin(IssueAffectsComponent::getTable(), IssueAffectsComponent::ISSUE, self::ID);
         $crit->addJoin(IssueAffectsEdition::getTable(), IssueAffectsEdition::ISSUE, self::ID);
         $crit->addJoin(IssueAffectsBuild::getTable(), IssueAffectsBuild::ISSUE, self::ID);
         $filter_keys = array_keys($filters);
         foreach ($filters as $filter) {
             self::parseFilter($crit, $filter, $filter_keys);
         }
     }
     $crit->addSelectionColumn(self::ID);
     $crit->setDistinct();
     if ($offset != 0) {
         $crit->setOffset($offset);
     }
     $crit2 = clone $crit;
     $count = $this->doCount($crit2);
     if ($count > 0) {
         $crit3 = $this->getCriteria();
         if ($results_per_page != 0) {
             $crit->setLimit($results_per_page);
         }
         if ($offset != 0) {
             $crit->setOffset($offset);
         }
         if ($groupby !== null) {
             $grouporder = $grouporder !== null ? $grouporder == 'asc' ? Criteria::SORT_ASC : Criteria::SORT_DESC : Criteria::SORT_ASC;
             switch ($groupby) {
                 case 'category':
                     $crit->addJoin(ListTypes::getTable(), ListTypes::ID, self::CATEGORY);
                     $crit->addSelectionColumn(ListTypes::NAME);
                     $crit->addOrderBy(ListTypes::NAME, $grouporder);
                     $crit3->addJoin(ListTypes::getTable(), ListTypes::ID, self::CATEGORY);
                     $crit3->addOrderBy(ListTypes::NAME, $grouporder);
                     break;
                 case 'status':
                     $crit->addJoin(ListTypes::getTable(), ListTypes::ID, self::STATUS);
                     $crit->addSelectionColumn(self::STATUS);
                     $crit->addOrderBy(ListTypes::ORDER, Criteria::SORT_DESC);
                     $crit3->addJoin(ListTypes::getTable(), ListTypes::ID, self::STATUS);
                     $crit3->addOrderBy(ListTypes::ORDER, Criteria::SORT_DESC);
                     break;
                 case 'milestone':
                     $crit->addSelectionColumn(self::MILESTONE);
                     $crit->addSelectionColumn(self::PERCENT_COMPLETE);
                     $crit->addOrderBy(self::MILESTONE, $grouporder);
                     $crit->addOrderBy(self::PERCENT_COMPLETE, 'desc');
                     $crit3->addOrderBy(self::MILESTONE, $grouporder);
                     $crit3->addOrderBy(self::PERCENT_COMPLETE, 'desc');
                     break;
                 case 'assignee':
                     $crit->addSelectionColumn(self::ASSIGNEE_TEAM);
                     $crit->addSelectionColumn(self::ASSIGNEE_USER);
                     $crit->addOrderBy(self::ASSIGNEE_TEAM);
                     $crit->addOrderBy(self::ASSIGNEE_USER, $grouporder);
                     $crit3->addOrderBy(self::ASSIGNEE_TEAM);
                     $crit3->addOrderBy(self::ASSIGNEE_USER, $grouporder);
                     break;
                 case 'state':
                     $crit->addSelectionColumn(self::STATE);
                     $crit->addOrderBy(self::STATE, $grouporder);
                     $crit3->addOrderBy(self::STATE, $grouporder);
                     break;
                 case 'severity':
                     $crit->addJoin(ListTypes::getTable(), ListTypes::ID, self::SEVERITY);
                     $crit->addSelectionColumn(self::SEVERITY);
                     $crit->addOrderBy(ListTypes::ORDER, $grouporder);
                     $crit3->addJoin(ListTypes::getTable(), ListTypes::ID, self::SEVERITY);
                     $crit3->addOrderBy(ListTypes::ORDER, $grouporder);
                     break;
                 case 'user_pain':
                     $crit->addSelectionColumn(self::USER_PAIN);
                     $crit->addOrderBy(self::USER_PAIN, $grouporder);
                     $crit3->addOrderBy(self::USER_PAIN, $grouporder);
                     break;
                 case 'votes':
                     $crit->addSelectionColumn(self::VOTES_TOTAL);
                     $crit->addOrderBy(self::VOTES_TOTAL, $grouporder);
                     $crit3->addOrderBy(self::VOTES_TOTAL, $grouporder);
                     break;
                 case 'resolution':
                     $crit->addJoin(ListTypes::getTable(), ListTypes::ID, self::RESOLUTION);
                     $crit->addSelectionColumn(self::RESOLUTION);
                     $crit->addOrderBy(ListTypes::ORDER, $grouporder);
                     $crit3->addJoin(ListTypes::getTable(), ListTypes::ID, self::RESOLUTION);
                     $crit3->addOrderBy(ListTypes::ORDER, $grouporder);
                     break;
                 case 'priority':
                     $crit->addJoin(ListTypes::getTable(), ListTypes::ID, self::PRIORITY);
                     $crit->addSelectionColumn(self::PRIORITY);
                     $crit->addOrderBy(ListTypes::ORDER, $grouporder);
                     $crit3->addJoin(ListTypes::getTable(), ListTypes::ID, self::PRIORITY);
                     $crit3->addOrderBy(ListTypes::ORDER, $grouporder);
                     break;
                 case 'issuetype':
                     $crit->addJoin(IssueTypes::getTable(), IssueTypes::ID, self::ISSUE_TYPE);
                     $crit->addSelectionColumn(IssueTypes::NAME);
                     $crit->addOrderBy(IssueTypes::NAME, $grouporder);
                     $crit3->addJoin(IssueTypes::getTable(), IssueTypes::ID, self::ISSUE_TYPE);
                     $crit3->addOrderBy(IssueTypes::NAME, $grouporder);
                     break;
                 case 'edition':
                     $crit->addJoin(IssueAffectsEdition::getTable(), IssueAffectsEdition::ISSUE, self::ID);
                     $crit->addJoin(Editions::getTable(), Editions::ID, IssueAffectsEdition::EDITION, array(), Criteria::DB_LEFT_JOIN, IssueAffectsEdition::getTable());
                     $crit->addSelectionColumn(Editions::NAME);
                     $crit->addOrderBy(Editions::NAME, $grouporder);
                     $crit3->addJoin(IssueAffectsEdition::getTable(), IssueAffectsEdition::ISSUE, self::ID);
                     $crit3->addJoin(Editions::getTable(), Editions::ID, IssueAffectsEdition::EDITION, array(), Criteria::DB_LEFT_JOIN, IssueAffectsEdition::getTable());
                     $crit3->addOrderBy(Editions::NAME, $grouporder);
                     break;
                 case 'build':
                     $crit->addJoin(IssueAffectsBuild::getTable(), IssueAffectsBuild::ISSUE, self::ID);
                     $crit->addJoin(Builds::getTable(), Builds::ID, IssueAffectsBuild::BUILD, array(), Criteria::DB_LEFT_JOIN, IssueAffectsBuild::getTable());
                     $crit->addSelectionColumn(Builds::NAME);
                     $crit->addOrderBy(Builds::NAME, $grouporder);
                     $crit3->addJoin(IssueAffectsBuild::getTable(), IssueAffectsBuild::ISSUE, self::ID);
                     $crit3->addJoin(Builds::getTable(), Builds::ID, IssueAffectsBuild::BUILD, array(), Criteria::DB_LEFT_JOIN, IssueAffectsBuild::getTable());
                     $crit3->addOrderBy(Builds::NAME, $grouporder);
                     break;
                 case 'component':
                     $crit->addJoin(IssueAffectsComponent::getTable(), IssueAffectsComponent::ISSUE, self::ID);
                     $crit->addJoin(Components::getTable(), Components::ID, IssueAffectsComponent::COMPONENT, array(), Criteria::DB_LEFT_JOIN, IssueAffectsComponent::getTable());
                     $crit->addSelectionColumn(Components::NAME);
                     $crit->addOrderBy(Components::NAME, $grouporder);
                     $crit3->addJoin(IssueAffectsComponent::getTable(), IssueAffectsComponent::ISSUE, self::ID);
                     $crit3->addJoin(Components::getTable(), Components::ID, IssueAffectsComponent::COMPONENT, array(), Criteria::DB_LEFT_JOIN, IssueAffectsComponent::getTable());
                     $crit3->addOrderBy(Components::NAME, $grouporder);
                     break;
             }
         }
         foreach ($sortfields as $field => $sortorder) {
             $crit->addSelectionColumn($field);
             $crit->addOrderBy($field, $sortorder);
         }
         $res = $this->doSelect($crit, 'none');
         $ids = array();
         if ($res) {
             while ($row = $res->getNextRow()) {
                 $ids[] = $row->get(self::ID);
             }
             $ids = array_reverse($ids);
             $crit3->addWhere(self::ID, $ids, Criteria::DB_IN);
             foreach ($sortfields as $field => $sortorder) {
                 $crit3->addOrderBy($field, $sortorder);
             }
             $res = $this->doSelect($crit3);
             $rows = $res->getAllRows();
         } else {
             $rows = array();
         }
         unset($res);
         return array($rows, $count, $ids);
     } else {
         return array(null, 0, array());
     }
 }
예제 #7
0
 /**
  * Returns all severities available
  *
  * @return array
  */
 public static function getAll()
 {
     return tables\ListTypes::getTable()->getAllByItemType(static::ITEMTYPE);
 }
 public function getRuleValueAsJoinedString()
 {
     $is_core = in_array($this->_name, array(self::RULE_STATUS_VALID, self::RULE_RESOLUTION_VALID, self::RULE_REPRODUCABILITY_VALID, self::RULE_PRIORITY_VALID, self::RULE_TEAM_MEMBERSHIP_VALID, self::RULE_ISSUE_IN_MILESTONE_VALID));
     $is_custom = $this->isCustom();
     $customtype = $this->getCustomType();
     if ($this->_name == self::RULE_STATUS_VALID) {
         $fieldname = '\\thebuggenie\\core\\entities\\Status';
     } elseif ($this->_name == self::RULE_RESOLUTION_VALID) {
         $fieldname = '\\thebuggenie\\core\\entities\\Resolution';
     } elseif ($this->_name == self::RULE_REPRODUCABILITY_VALID) {
         $fieldname = '\\thebuggenie\\core\\entities\\Reproducability';
     } elseif ($this->_name == self::RULE_PRIORITY_VALID) {
         $fieldname = '\\thebuggenie\\core\\entities\\Priority';
     } elseif ($this->_name == self::RULE_TEAM_MEMBERSHIP_VALID) {
         $fieldname = '\\thebuggenie\\core\\entities\\Team';
     } elseif ($this->_name == self::RULE_ISSUE_IN_MILESTONE_VALID) {
         $fieldname = '\\thebuggenie\\core\\entities\\Milestone';
     }
     if ($is_core || $is_custom) {
         $values = explode(',', $this->getRuleValue());
         if ($is_custom) {
             $custom_field_key = substr($this->_name, strlen(self::CUSTOMFIELD_VALIDATE_PREFIX) - 1);
             $custom_field = tables\CustomFields::getTable()->getByKey($custom_field_key);
         }
         $return_values = array();
         foreach ($values as $value) {
             try {
                 if ($is_core) {
                     $field = $fieldname::getB2DBTable()->selectByID((int) $value);
                 } elseif ($is_custom) {
                     switch ($customtype) {
                         case CustomDatatype::RADIO_CHOICE:
                         case CustomDatatype::DROPDOWN_CHOICE_TEXT:
                             $field = tables\CustomFieldOptions::getTable()->selectById((int) $value);
                             break;
                         case CustomDatatype::TEAM_CHOICE:
                             $field = Teams::getTable()->selectById((int) $value);
                             break;
                         case CustomDatatype::STATUS_CHOICE:
                             $field = ListTypes::getTable()->selectById((int) $value);
                             break;
                         case CustomDatatype::MILESTONE_CHOICE:
                             $field = Milestones::getTable()->selectById((int) $value);
                             break;
                         case CustomDatatype::CLIENT_CHOICE:
                             $field = Clients::getTable()->selectById((int) $value);
                             break;
                         case CustomDatatype::COMPONENTS_CHOICE:
                             $field = Components::getTable()->selectById((int) $value);
                             break;
                         case CustomDatatype::EDITIONS_CHOICE:
                             $field = Editions::getTable()->selectById((int) $value);
                             break;
                         case CustomDatatype::RELEASES_CHOICE:
                             $field = Builds::getTable()->selectById((int) $value);
                             break;
                     }
                 }
                 if ($field instanceof \thebuggenie\core\entities\common\Identifiable) {
                     if ($field instanceof Milestone || $field instanceof Component || $field instanceof Edition || $field instanceof Build) {
                         $return_values[] = $field->getProject()->getName() . ' - ' . $field->getName();
                     } elseif ($field instanceof Status) {
                         $return_values[] = '<span class="status_badge" style="background-color: ' . $field->getColor() . '; color: ' . $field->getTextColor() . ';">' . $field->getName() . '</span>';
                     } else {
                         $return_values[] = $field->getName();
                     }
                 }
             } catch (\Exception $e) {
             }
         }
         return join(' / ', $return_values);
     } else {
         $event = new \thebuggenie\core\framework\Event('core', 'WorkflowTransitionValidationRule::getRuleValueAsJoinedString', $this);
         $event->triggerUntilProcessed();
         return $event->getReturnValue();
     }
 }
예제 #9
0
 /**
  * Returns all project roles available for a specific project
  *
  * @return array
  */
 public static function getByProjectID($project_id)
 {
     return tables\ListTypes::getTable()->getAllByItemTypeAndItemdata(self::ROLE, $project_id);
 }
예제 #10
0
 public function runConfigureWorkflowTransition(framework\Request $request)
 {
     $this->workflow = null;
     $this->transition = null;
     try {
         $this->workflow = tables\Workflows::getTable()->selectById((int) $request['workflow_id']);
         if ($request->hasParameter('transition_id')) {
             $mode = $request['mode'];
             $this->transition = tables\WorkflowTransitions::getTable()->selectById((int) $request['transition_id']);
             if ($request->isPost()) {
                 if ($mode == 'edit') {
                     if (!$this->transition->isInitialTransition()) {
                         $this->transition->setName($request['transition_name']);
                         $this->transition->setDescription($request['transition_description']);
                         if ($request['template']) {
                             $this->transition->setTemplate($request['template']);
                         } else {
                             $this->transition->setTemplate(null);
                         }
                     }
                     try {
                         $step = tables\WorkflowSteps::getTable()->selectById((int) $request['outgoing_step_id']);
                         $this->transition->setOutgoingStep($step);
                     } catch (\Exception $e) {
                     }
                     $this->transition->save();
                     $transition = $this->transition;
                     $redirect_transition = true;
                 } elseif ($mode == 'delete') {
                     $this->transition->deleteTransition($request['direction'], $request['step_id']);
                     $this->forward(framework\Context::getRouting()->generate('configure_workflow_step', array('workflow_id' => $this->workflow->getID(), 'step_id' => $request['step_id'])));
                 } elseif ($mode == 'delete_action') {
                     $this->action = tables\WorkflowTransitionActions::getTable()->selectById((int) $request['action_id']);
                     $this->action->delete();
                     return $this->renderJSON(array('message' => $this->getI18n()->__('The action has been deleted')));
                 } elseif ($mode == 'new_action') {
                     $action = new entities\WorkflowTransitionAction();
                     $action->setActionType($request['action_type']);
                     $action->setTransition($this->transition);
                     $action->setWorkflow($this->workflow);
                     $action->setTargetValue('');
                     $action->save();
                     return $this->renderJSON(array('content' => $this->getComponentHTML('configuration/workflowtransitionaction', array('action' => $action))));
                 } elseif ($mode == 'update_action') {
                     $this->action = tables\WorkflowTransitionActions::getTable()->selectById((int) $request['action_id']);
                     $this->action->setTargetValue($request['target_value']);
                     $this->action->save();
                     $text = $request['target_value'];
                     switch ($this->action->getActionType()) {
                         case entities\WorkflowTransitionAction::ACTION_ASSIGN_ISSUE:
                             if ($this->action->hasTargetValue()) {
                                 $target_details = explode('_', $this->action->getTargetValue());
                                 $text = $target_details[0] == 'user' ? entities\User::getB2DBTable()->selectById((int) $target_details[1])->getNameWithUsername() : entities\Team::getB2DBTable()->selectById((int) $target_details[1])->getName();
                             } else {
                                 $text = $this->getI18n()->__('User specified during transition');
                             }
                             break;
                         case entities\WorkflowTransitionAction::ACTION_SET_RESOLUTION:
                             $text = $this->action->getTargetValue() ? tables\ListTypes::getTable()->selectById((int) $this->action->getTargetValue())->getName() : $this->getI18n()->__('Resolution specified by user');
                             break;
                         case entities\WorkflowTransitionAction::ACTION_SET_REPRODUCABILITY:
                             $text = $this->action->getTargetValue() ? tables\ListTypes::getTable()->selectById((int) $this->action->getTargetValue())->getName() : $this->getI18n()->__('Reproducability specified by user');
                             break;
                         case entities\WorkflowTransitionAction::ACTION_SET_STATUS:
                             $target = $this->action->getTargetValue() ? tables\ListTypes::getTable()->selectById((int) $this->action->getTargetValue()) : null;
                             $text = $this->action->getTargetValue() ? '<span class="status_badge" style="background-color: ' . $target->getColor() . '; color: ' . $target->getTextColor() . ';">' . $target->getName() . '</span>' : $this->getI18n()->__('Status provided by user');
                             break;
                         case entities\WorkflowTransitionAction::ACTION_SET_PRIORITY:
                             $text = $this->action->getTargetValue() ? tables\ListTypes::getTable()->selectById((int) $this->action->getTargetValue())->getName() : $this->getI18n()->__('Priority specified by user');
                             break;
                         case entities\WorkflowTransitionAction::ACTION_SET_MILESTONE:
                             $target = $this->action->getTargetValue() ? \thebuggenie\core\entities\tables\ListTypes::getTable()->selectById((int) $this->action->getTargetValue()) : null;
                             $text = $this->action->getTargetValue() ? $target->getProject()->getName() . ' - ' . $target->getName() : $this->getI18n()->__('Milestone specified by user');
                             break;
                         case entities\WorkflowTransitionAction::CUSTOMFIELD_SET_PREFIX . $this->action->getCustomActionType():
                             switch (\thebuggenie\core\entities\CustomDatatype::getByKey($this->action->getCustomActionType())->getType()) {
                                 case \thebuggenie\core\entities\CustomDatatype::INPUT_TEXTAREA_MAIN:
                                 case \thebuggenie\core\entities\CustomDatatype::INPUT_TEXTAREA_SMALL:
                                     break;
                                 case \thebuggenie\core\entities\CustomDatatype::DATE_PICKER:
                                     return $this->renderJSON(array('content' => date('Y-m-d', (int) $text)));
                                     break;
                                 case \thebuggenie\core\entities\CustomDatatype::USER_CHOICE:
                                     return $this->renderJSON(array('content' => $this->getComponentHTML('main/userdropdown', array('user' => $text))));
                                     break;
                                 case \thebuggenie\core\entities\CustomDatatype::TEAM_CHOICE:
                                     return $this->renderJSON(array('content' => $this->getComponentHTML('main/teamdropdown', array('team' => $text))));
                                     break;
                                 case \thebuggenie\core\entities\CustomDatatype::CLIENT_CHOICE:
                                     if (is_numeric($this->action->getTargetValue())) {
                                         $text = $this->action->getTargetValue() ? \thebuggenie\core\entities\tables\Clients::getTable()->selectById((int) $this->action->getTargetValue())->getName() : $this->getI18n()->__('Value provided by user');
                                     }
                                     break;
                                 case \thebuggenie\core\entities\CustomDatatype::RELEASES_CHOICE:
                                     if (is_numeric($this->action->getTargetValue())) {
                                         $target = $this->action->getTargetValue() ? \thebuggenie\core\entities\tables\Builds::getTable()->selectById((int) $this->action->getTargetValue()) : null;
                                         $text = $this->action->getTargetValue() ? $target->getProject()->getName() . ' - ' . $target->getName() : $this->getI18n()->__('Value provided by user');
                                     }
                                     break;
                                 case \thebuggenie\core\entities\CustomDatatype::COMPONENTS_CHOICE:
                                     if (is_numeric($this->action->getTargetValue())) {
                                         $target = $this->action->getTargetValue() ? \thebuggenie\core\entities\tables\Components::getTable()->selectById((int) $this->action->getTargetValue()) : null;
                                         $text = $this->action->getTargetValue() ? $target->getProject()->getName() . ' - ' . $target->getName() : $this->getI18n()->__('Value provided by user');
                                     }
                                     break;
                                 case \thebuggenie\core\entities\CustomDatatype::EDITIONS_CHOICE:
                                     if (is_numeric($this->action->getTargetValue())) {
                                         $target = $this->action->getTargetValue() ? \thebuggenie\core\entities\tables\Editions::getTable()->selectById((int) $this->action->getTargetValue()) : null;
                                         $text = $this->action->getTargetValue() ? $target->getProject()->getName() . ' - ' . $target->getName() : $this->getI18n()->__('Value provided by user');
                                     }
                                     break;
                                 case \thebuggenie\core\entities\CustomDatatype::MILESTONE_CHOICE:
                                     if (is_numeric($this->action->getTargetValue())) {
                                         $target = $this->action->getTargetValue() ? \thebuggenie\core\entities\tables\Milestones::getTable()->selectById((int) $this->action->getTargetValue()) : null;
                                         $text = $this->action->getTargetValue() ? $target->getProject()->getName() . ' - ' . $target->getName() : $this->getI18n()->__('Value provided by user');
                                     }
                                     break;
                                 case \thebuggenie\core\entities\CustomDatatype::STATUS_CHOICE:
                                     if (is_numeric($this->action->getTargetValue())) {
                                         $target = $this->action->getTargetValue() ? tables\ListTypes::getTable()->selectById((int) $this->action->getTargetValue()) : null;
                                         $text = $this->action->getTargetValue() ? '<span class="status_badge" style="background-color: ' . $target->getColor() . '; color: ' . $target->getTextColor() . ';">' . $target->getName() . '</span>' : $this->getI18n()->__('Value provided by user');
                                     }
                                     break;
                                 case \thebuggenie\core\entities\CustomDatatype::DROPDOWN_CHOICE_TEXT:
                                 default:
                                     if (is_numeric($this->action->getTargetValue())) {
                                         $text = $this->action->getTargetValue() ? tables\CustomFieldOptions::getTable()->selectById((int) $this->action->getTargetValue())->getName() : $this->getI18n()->__('Value provided by user');
                                     }
                                     break;
                             }
                             break;
                     }
                     return $this->renderJSON(array('content' => $text));
                 } elseif ($mode == 'delete_validation_rule') {
                     $this->rule = tables\WorkflowTransitionValidationRules::getTable()->selectById((int) $request['rule_id']);
                     $this->rule->delete();
                     return $this->renderJSON(array('message' => $this->getI18n()->__('The validation rule has been deleted')));
                 } elseif ($mode == 'new_validation_rule') {
                     if (!in_array($request['postorpre'], array('post', 'pre'))) {
                         throw new \InvalidArgumentException($this->getI18n()->__('Invalid transition definition'));
                     }
                     $rule = new entities\WorkflowTransitionValidationRule();
                     if ($request['postorpre'] == 'post') {
                         $exists = (bool) $this->transition->hasPostValidationRule($request['rule']);
                         if (!$exists) {
                             $rule->setPost();
                         }
                     } elseif ($request['postorpre'] == 'pre') {
                         $exists = (bool) $this->transition->hasPreValidationRule($request['rule']);
                         if (!$exists) {
                             $rule->setPre();
                         }
                     }
                     if ($exists) {
                         $this->getResponse()->setHttpStatus(400);
                         return $this->renderJSON(array('message' => $this->getI18n()->__('This validation rule already exist')));
                     }
                     $rule->setRule($request['rule']);
                     $rule->setRuleValue('');
                     $rule->setTransition($this->transition);
                     $rule->setWorkflow($this->workflow);
                     $rule->save();
                     return $this->renderJSON(array('content' => $this->getComponentHTML('configuration/workflowtransitionvalidationrule', array('rule' => $rule))));
                 } elseif ($mode == 'update_validation_rule') {
                     $rule = tables\WorkflowTransitionValidationRules::getTable()->selectById((int) $request['rule_id']);
                     $text = null;
                     if ($rule->isCustom()) {
                         switch ($rule->getCustomType()) {
                             case entities\CustomDatatype::RADIO_CHOICE:
                             case entities\CustomDatatype::DROPDOWN_CHOICE_TEXT:
                             case entities\CustomDatatype::TEAM_CHOICE:
                             case entities\CustomDatatype::STATUS_CHOICE:
                             case entities\CustomDatatype::MILESTONE_CHOICE:
                             case entities\CustomDatatype::CLIENT_CHOICE:
                             case entities\CustomDatatype::COMPONENTS_CHOICE:
                             case entities\CustomDatatype::EDITIONS_CHOICE:
                             case entities\CustomDatatype::RELEASES_CHOICE:
                                 $rule->setRuleValue(join(',', $request['rule_value'] ?: array()));
                                 $text = $rule->getRuleValue() ? $rule->getRuleValueAsJoinedString() : $this->getI18n()->__('Any valid value');
                                 break;
                         }
                     } else {
                         switch ($rule->getRule()) {
                             case entities\WorkflowTransitionValidationRule::RULE_MAX_ASSIGNED_ISSUES:
                                 $rule->setRuleValue($request['rule_value']);
                                 $text = $rule->getRuleValue() ? $rule->getRuleValue() : $this->getI18n()->__('Unlimited');
                                 break;
                             case entities\WorkflowTransitionValidationRule::RULE_PRIORITY_VALID:
                             case entities\WorkflowTransitionValidationRule::RULE_REPRODUCABILITY_VALID:
                             case entities\WorkflowTransitionValidationRule::RULE_RESOLUTION_VALID:
                             case entities\WorkflowTransitionValidationRule::RULE_STATUS_VALID:
                             case entities\WorkflowTransitionValidationRule::RULE_TEAM_MEMBERSHIP_VALID:
                             case entities\WorkflowTransitionValidationRule::RULE_ISSUE_IN_MILESTONE_VALID:
                                 $rule->setRuleValue(join(',', $request['rule_value'] ?: array()));
                                 $text = $rule->getRuleValue() ? $rule->getRuleValueAsJoinedString() : $this->getI18n()->__('Any valid value');
                                 break;
                         }
                     }
                     $rule->save();
                     $this->rule = $rule;
                     return $this->renderJSON(array('content' => $text));
                 }
             }
         } elseif ($request->isPost() && $request->hasParameter('step_id')) {
             $step = tables\WorkflowSteps::getTable()->selectById((int) $request['step_id']);
             if ($request['add_transition_type'] == 'existing' && $request->hasParameter('existing_transition_id')) {
                 $transition = tables\WorkflowTransitions::getTable()->selectById((int) $request['existing_transition_id']);
                 $redirect_transition = false;
             } else {
                 if ($request['transition_name'] && $request['outgoing_step_id'] && $request->hasParameter('template')) {
                     if (($outgoing_step = tables\WorkflowSteps::getTable()->selectById((int) $request['outgoing_step_id'])) && $step instanceof entities\WorkflowStep) {
                         if (!$request['template'] || array_key_exists($request['template'], entities\WorkflowTransition::getTemplates())) {
                             $transition = new entities\WorkflowTransition();
                             $transition->setWorkflow($this->workflow);
                             $transition->setName($request['transition_name']);
                             $transition->setDescription($request['transition_description']);
                             $transition->setOutgoingStep($outgoing_step);
                             $transition->setTemplate($request['template']);
                             $transition->save();
                             $step->addOutgoingTransition($transition);
                             $redirect_transition = true;
                         } else {
                             throw new \InvalidArgumentException($this->getI18n()->__('Please select a valid template'));
                         }
                     } else {
                         throw new \InvalidArgumentException($this->getI18n()->__('Please select a valid outgoing step'));
                     }
                 } else {
                     throw new \InvalidArgumentException($this->getI18n()->__('Please fill in all required fields'));
                 }
             }
             $step->addOutgoingTransition($transition);
         } else {
             throw new \InvalidArgumentException('Invalid action');
         }
     } catch (\InvalidArgumentException $e) {
         $this->error = $e->getMessage();
     } catch (\Exception $e) {
         $this->error = $this->getI18n()->__('This workflow / transition does not exist');
     }
     if (isset($redirect_transition) && $redirect_transition) {
         $this->forward(framework\Context::getRouting()->generate('configure_workflow_transition', array('workflow_id' => $this->workflow->getID(), 'transition_id' => $transition->getID())));
     } elseif (isset($redirect_transition)) {
         $this->forward(framework\Context::getRouting()->generate('configure_workflow_steps', array('workflow_id' => $this->workflow->getID())));
     }
 }
                 echo __('Set issue field %key to %value', array('%key' => $action->getCustomActionType(), '%value' => '<span id="workflowtransitionaction_' . $action->getID() . '_value" style="font-weight: bold;">' . ($action->getTargetValue() ? \thebuggenie\core\entities\tables\Clients::getTable()->selectById((int) $action->getTargetValue())->getName() : __('Value provided by user')) . '</span>'));
                 break;
             case \thebuggenie\core\entities\CustomDatatype::RELEASES_CHOICE:
                 echo __('Set issue field %key to %value', array('%key' => $action->getCustomActionType(), '%value' => '<span id="workflowtransitionaction_' . $action->getID() . '_value" style="font-weight: bold;">' . ($action->getTargetValue() ? \thebuggenie\core\entities\tables\Builds::getTable()->selectById((int) $action->getTargetValue())->getName() : __('Value provided by user')) . '</span>'));
                 break;
             case \thebuggenie\core\entities\CustomDatatype::COMPONENTS_CHOICE:
                 echo __('Set issue field %key to %value', array('%key' => $action->getCustomActionType(), '%value' => '<span id="workflowtransitionaction_' . $action->getID() . '_value" style="font-weight: bold;">' . ($action->getTargetValue() ? \thebuggenie\core\entities\tables\Components::getTable()->selectById((int) $action->getTargetValue())->getName() : __('Value provided by user')) . '</span>'));
                 break;
             case \thebuggenie\core\entities\CustomDatatype::EDITIONS_CHOICE:
                 echo __('Set issue field %key to %value', array('%key' => $action->getCustomActionType(), '%value' => '<span id="workflowtransitionaction_' . $action->getID() . '_value" style="font-weight: bold;">' . ($action->getTargetValue() ? \thebuggenie\core\entities\tables\Editions::getTable()->selectById((int) $action->getTargetValue())->getName() : __('Value provided by user')) . '</span>'));
                 break;
             case \thebuggenie\core\entities\CustomDatatype::MILESTONE_CHOICE:
                 echo __('Set issue field %key to %value', array('%key' => $action->getCustomActionType(), '%value' => '<span id="workflowtransitionaction_' . $action->getID() . '_value" style="font-weight: bold;">' . ($action->getTargetValue() ? \thebuggenie\core\entities\tables\Milestones::getTable()->selectById((int) $action->getTargetValue())->getName() : __('Value provided by user')) . '</span>'));
                 break;
             case \thebuggenie\core\entities\CustomDatatype::STATUS_CHOICE:
                 echo __('Set issue field %key to %value', array('%key' => $action->getCustomActionType(), '%value' => '<span id="workflowtransitionaction_' . $action->getID() . '_value" style="font-weight: bold;">' . ($action->getTargetValue() ? \thebuggenie\core\entities\tables\ListTypes::getTable()->selectById((int) $action->getTargetValue())->getName() : __('Value provided by user')) . '</span>'));
                 break;
             case \thebuggenie\core\entities\CustomDatatype::DROPDOWN_CHOICE_TEXT:
             default:
                 echo __('Set issue field %key to %value', array('%key' => $action->getCustomActionType(), '%value' => '<span id="workflowtransitionaction_' . $action->getID() . '_value" style="font-weight: bold;">' . ($action->getTargetValue() ? \thebuggenie\core\entities\CustomDatatypeOption::getB2DBTable()->selectById((int) $action->getTargetValue())->getName() : __('Value provided by user')) . '</span>'));
                 break;
         }
         ?>
                 <?php 
     }
     ?>
             <?php 
 } elseif ($action->getTargetValue()) {
     ?>
                 <span class="generic_error_message"><?php 
     echo __('Invalid transition configuration');
예제 #12
0
 protected function moveDatatypes($project_id, $to_scope_id)
 {
     $this->cliEcho("Moving datatypes...");
     $datatype_criteria = ListTypes::getTable()->getCriteria();
     $datatype_criteria->addWhere('listtypes.scope', $to_scope_id);
     $to_scope_datatypes = [];
     $listtypes = ListTypes::getTable()->select($datatype_criteria);
     foreach ($listtypes as $listtype) {
         if (!array_key_exists($listtype->getItemtype(), $to_scope_datatypes)) {
             $to_scope_datatypes[$listtype->getItemtype()] = [];
         }
         $to_scope_datatypes[$listtype->getItemtype()][$listtype->getKey()] = $listtype;
     }
     $datatype_criteria = ListTypes::getTable()->getCriteria();
     $datatype_criteria->addWhere('listtypes.scope', $this->from_scope);
     $todo_datatypes = [];
     $listtypes = ListTypes::getTable()->select($datatype_criteria);
     foreach ($listtypes as $listtype) {
         if (!array_key_exists($listtype->getItemtype(), $todo_datatypes)) {
             $todo_datatypes[$listtype->getItemtype()] = [];
         }
         if (array_key_exists($listtype->getKey(), $to_scope_datatypes[$listtype->getItemtype()])) {
             $todo_datatypes[$listtype->getItemtype()][$listtype->getId()] = $to_scope_datatypes[$listtype->getItemtype()][$listtype->getKey()]->getId();
         } else {
             $new_listtype = clone $listtype;
             $new_listtype->setScope($to_scope_id);
             $new_listtype->save();
             $todo_datatypes[$listtype->getItemtype()][$listtype->getId()] = $new_listtype->getId();
         }
     }
     foreach ($todo_datatypes as $itemtype => $types) {
         switch ($itemtype) {
             case Datatype::STATUS:
                 $field = 'issue.status';
                 break;
             case Datatype::CATEGORY:
                 $field = 'issue.category';
                 break;
             case Datatype::ISSUETYPE:
                 $field = 'issue.issuetype';
                 break;
             case Datatype::PRIORITY:
                 $field = 'issue.priority';
                 break;
             case Datatype::REPRODUCABILITY:
                 $field = 'issue.reproducability';
                 break;
             case Datatype::RESOLUTION:
                 $field = 'issue.resolution';
                 break;
             case Datatype::SEVERITY:
                 $field = 'issue.severity';
                 break;
             default:
                 $field = false;
         }
         if ($field !== false) {
             foreach ($types as $current_type_id => $new_type_id) {
                 $crit = Issues::getTable()->getCriteria();
                 $crit->addWhere('issues.project_id', $project_id);
                 $crit->addWhere($field, $current_type_id);
                 $crit->addUpdate($field, $new_type_id);
                 Issues::getTable()->doUpdate($crit);
             }
         }
     }
     $this->cliEcho(" done\n");
 }