Example #1
0
 /**
  * Add a related issue
  *
  * @param \thebuggenie\core\entities\Issue $related_issue
  *
  * @return boolean
  */
 public function addChildIssue(\thebuggenie\core\entities\Issue $related_issue, $epic = false)
 {
     if (!($row = tables\IssueRelations::getTable()->getIssueRelation($this->getID(), $related_issue->getID()))) {
         if (!$epic && !$this->getMilestone() instanceof Milestone && $related_issue->getMilestone() instanceof Milestone) {
             $related_issue->removeMilestone();
             $related_issue->save();
         } else {
             if ($this->getMilestone() instanceof Milestone) {
                 $related_issue->setMilestone($this->getMilestone()->getID());
                 $related_issue->save();
             }
         }
         $res = tables\IssueRelations::getTable()->addChildIssue($this->getID(), $related_issue->getID());
         $this->_child_issues = null;
         $related_issue->addLogEntry(tables\Log::LOG_ISSUE_DEPENDS, framework\Context::getI18n()->__('%issuetype %issue_no now depends on the solution of this %this_issuetype', array('%this_issuetype' => $related_issue->getIssueType()->getName(), '%issuetype' => $this->getIssueType()->getName(), '%issue_no' => $this->getFormattedIssueNo())));
         $this->addLogEntry(tables\Log::LOG_ISSUE_DEPENDS, framework\Context::getI18n()->__('This %this_issuetype now depends on the solution of %issuetype %issue_no', array('%this_issuetype' => $this->getIssueType()->getName(), '%issuetype' => $related_issue->getIssueType()->getName(), '%issue_no' => $related_issue->getFormattedIssueNo())));
         $this->calculateTime();
         $this->save();
         $last_updated = time();
         $this->touch($last_updated);
         $related_issue->touch($last_updated);
         return true;
     }
     return false;
 }
Example #2
0
 /**
  * Delete this issue
  */
 public function deleteIssue()
 {
     $this->_deleted = true;
     $this->touch();
     tables\IssueRelations::getTable()->removeIssueRelations($this->getID());
 }
Example #3
0
 protected function moveIssues($project_id, $to_scope_id)
 {
     $crit = Issues::getTable()->getCriteria();
     $crit->addWhere('issues.project_id', $project_id);
     $crit->addSelectionColumn('issues.id', 'id');
     $issue_ids = [];
     if ($res = Issues::getTable()->doSelect($crit)) {
         while ($row = $res->getNextRow()) {
             $issue_ids[] = $row['id'];
         }
     }
     $this->cliEcho("------------------\n");
     $this->cliEcho('Moving ');
     $this->cliEcho(count($issue_ids), 'white', 'bold');
     $this->cliEcho(" issues\n");
     $this->cliEcho("------------------\n");
     if (!$issue_ids) {
         return;
     }
     $this->cliEcho("Moving comments... ");
     $comments_crit = Comments::getTable()->getCriteria();
     $comments_crit->addUpdate('comments.scope', $to_scope_id);
     $comments_crit->addWhere('comments.target_id', $issue_ids, Criteria::DB_IN);
     $comments_crit->addWhere('comments.target_type', Comment::TYPE_ISSUE);
     Comments::getTable()->doUpdate($comments_crit);
     $this->cliEcho(" done\n");
     $this->cliEcho("Moving log items... ");
     $logs_crit = Log::getTable()->getCriteria();
     $logs_crit->addUpdate('log.scope', $to_scope_id);
     $logs_crit->addWhere('log.target', $issue_ids, Criteria::DB_IN);
     $logs_crit->addWhere('log.target_type', Log::TYPE_ISSUE);
     Log::getTable()->doUpdate($logs_crit);
     $this->cliEcho(" done\n");
     $this->cliEcho("Moving attachments... ");
     $file_ids_crit = IssueFiles::getTable()->getCriteria();
     $file_ids_crit->addWhere('issuefiles.issue_id', $issue_ids, Criteria::DB_IN);
     $file_ids_crit->addSelectionColumn('issuefiles.file_id', 'file_id');
     $file_ids_crit->addSelectionColumn('issuefiles.id', 'id');
     $file_ids = [];
     $issue_file_ids = [];
     if ($res = IssueFiles::getTable()->doSelect($file_ids_crit)) {
         while ($row = $res->getNextRow()) {
             $file_ids[] = $row['file_id'];
             $issue_file_ids[] = $row['id'];
         }
     }
     if (count($file_ids)) {
         $file_crit = Files::getTable()->getCriteria();
         $file_crit->addUpdate('files.scope', $to_scope_id);
         $file_crit->addWhere('files.id', $file_ids, Criteria::DB_IN);
         Files::getTable()->doUpdate($file_crit);
         $issue_file_crit = IssueFiles::getTable()->getCriteria();
         $issue_file_crit->addUpdate('issuefiles.scope', $to_scope_id);
         $issue_file_crit->addWhere('issuefiles.id', $issue_file_ids, Criteria::DB_IN);
         IssueFiles::getTable()->doUpdate($issue_file_crit);
     }
     $this->cliEcho(" done\n");
     $this->cliEcho("Moving calculations and estimations... ");
     $estimates_crit = IssueEstimates::getTable()->getCriteria();
     $estimates_crit->addUpdate('issue_estimates.scope', $to_scope_id);
     $estimates_crit->addWhere('issue_estimates.issue_id', $issue_ids, Criteria::DB_IN);
     IssueEstimates::getTable()->doUpdate($estimates_crit);
     $spent_crit = IssueSpentTimes::getTable()->getCriteria();
     $spent_crit->addUpdate('issue_spenttimes.scope', $to_scope_id);
     $spent_crit->addWhere('issue_spenttimes.issue_id', $issue_ids, Criteria::DB_IN);
     IssueSpentTimes::getTable()->doUpdate($spent_crit);
     $this->cliEcho(" done\n");
     $this->cliEcho("Moving links, related and affected items");
     $tables = ['\\thebuggenie\\core\\entities\\tables\\IssueAffectsBuild' => 'issueaffectsbuild', '\\thebuggenie\\core\\entities\\tables\\IssueAffectsComponent' => 'issueaffectscomponent', '\\thebuggenie\\core\\entities\\tables\\IssueAffectsEdition' => 'issueaffectsedition'];
     foreach ($tables as $class_name => $table_name) {
         $crit = $class_name::getTable()->getCriteria();
         $crit->addUpdate($table_name . '.scope', $to_scope_id);
         $crit->addWhere($table_name . '.issue', $issue_ids, Criteria::DB_IN);
         $class_name::getTable()->doUpdate($crit);
     }
     $links_crit = Links::getTable()->getCriteria();
     $links_crit->addUpdate('links.scope', $to_scope_id);
     $links_crit->addWhere('links.target_id', $issue_ids, Criteria::DB_IN);
     $links_crit->addWhere('links.target_type', 'issue');
     Links::getTable()->doUpdate($links_crit);
     $related_crit = IssueRelations::getTable()->getCriteria();
     $related_crit->addUpdate('issuerelations.scope', $to_scope_id);
     $ctn = $related_crit->returnCriterion('issuerelations.child_id', $issue_ids, Criteria::DB_IN);
     $ctn->addOr('issuerelations.parent_id', $issue_ids, Criteria::DB_IN);
     $related_crit->addWhere($ctn);
     $votes_crit = Votes::getTable()->getCriteria();
     $votes_crit->addUpdate('votes.scope', $to_scope_id);
     $votes_crit->addWhere('votes.target', $issue_ids, Criteria::DB_IN);
     Votes::getTable()->doUpdate($votes_crit);
     $this->cliEcho(" done\n");
     $this->cliEcho("Updating user issue bookmarks");
     $user_issues_crit = UserIssues::getTable()->getCriteria();
     $user_issues_crit->addUpdate('userissues.scope', $to_scope_id);
     $user_issues_crit->addWhere('userissues.issue', $issue_ids, Criteria::DB_IN);
     UserIssues::getTable()->doUpdate($user_issues_crit);
     $this->cliEcho(" done\n");
     $this->updateCustomFields($issue_ids, $to_scope_id);
     $crit = Issues::getTable()->getCriteria();
     $crit->addUpdate('issues.scope', $to_scope_id);
     $crit->addWhere('issues.id', $issue_ids, Criteria::DB_IN);
     Issues::getTable()->doUpdate($crit);
     $this->cliEcho("------------------\n");
     $this->cliEcho("Done moving issues\n");
     $this->cliEcho("------------------\n");
 }