/** * Vote for this issue, returns false if user cant vote or has voted the same before * * @return boolean */ public function vote($up = true) { $user_id = framework\Context::getUser()->getID(); if (!$this->hasUserVoted($user_id, $up)) { tables\Votes::getTable()->addByUserIdAndIssueId($user_id, $this->getID(), $up); $this->_votes[$user_id] = $up ? 1 : -1; $this->_votes_total = array_sum($this->_votes); tables\Issues::getTable()->saveVotesTotalForIssueID($this->_votes_total, $this->getID()); return true; } else { return false; } }
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"); }