/** * Returns the number of open/closed issues. * * @param string Status ('open'), 'closed' * @param IDF_Tag Subfilter with a label (null) * @return int Count */ public function getIssueCountByStatus($status = 'open', $label = null) { switch ($status) { case 'open': $key = 'labels_issue_open'; $default = IDF_Form_IssueTrackingConf::init_open; break; case 'closed': default: $key = 'labels_issue_closed'; $default = IDF_Form_IssueTrackingConf::init_closed; break; } $tags = array(); foreach ($this->getTagsFromConfig($key, $default, 'Status') as $tag) { $tags[] = (int) $tag->id; } if (count($tags) == 0) { return array(); } $sql = new Pluf_SQL(sprintf('project=%%s AND status IN (%s)', implode(', ', $tags)), array($this->id)); if (!is_null($label)) { $sql2 = new Pluf_SQL('idf_tag_id=%s', array($label->id)); $sql->SAnd($sql2); } $params = array('filter' => $sql->gen()); if (!is_null($label)) { $params['view'] = 'join_tags'; } $gissue = new IDF_Issue(); return $gissue->getCount($params); }
/** * Save the model in the database. * * @param bool Commit in the database or not. If not, the object * is returned but not saved in the database. * @return Object Model with data set from the form. */ function save($commit = true) { if (!$this->isValid()) { throw new Exception(__('Cannot save the model from an invalid form.')); } // Add a tag for each label $tags = array(); if ($this->show_full) { for ($i = 1; $i < 7; $i++) { if (strlen($this->cleaned_data['label' . $i]) > 0) { if (strpos($this->cleaned_data['label' . $i], ':') !== false) { list($class, $name) = explode(':', $this->cleaned_data['label' . $i], 2); list($class, $name) = array(trim($class), trim($name)); } else { $class = 'Other'; $name = trim($this->cleaned_data['label' . $i]); } $tags[] = IDF_Tag::add($name, $this->project, $class); } } } else { $tags[] = IDF_Tag::add('Medium', $this->project, 'Priority'); $tags[] = IDF_Tag::add('Defect', $this->project, 'Type'); } // Create the issue $issue = new IDF_Issue(); $issue->project = $this->project; $issue->submitter = $this->user; if ($this->show_full) { $issue->status = IDF_Tag::add(trim($this->cleaned_data['status']), $this->project, 'Status'); $issue->owner = self::findUser($this->cleaned_data['owner']); } else { $_t = $this->project->getTagIdsByStatus('open'); $issue->status = new IDF_Tag($_t[0]); // first one is the default $issue->owner = null; } $issue->summary = trim($this->cleaned_data['summary']); $issue->create(); foreach ($tags as $tag) { $issue->setAssoc($tag); } // add the first comment $comment = new IDF_IssueComment(); $comment->issue = $issue; $comment->content = $this->cleaned_data['content']; $comment->submitter = $this->user; $comment->create(); // If we have a file, create the IDF_IssueFile and attach // it to the comment. $created_files = array(); for ($i = 1; $i < 4; $i++) { if ($this->cleaned_data['attachment' . $i]) { $file = new IDF_IssueFile(); $file->attachment = $this->cleaned_data['attachment' . $i]; $file->submitter = $this->user; $file->comment = $comment; $file->create(); $created_files[] = $file; } } /** * [signal] * * IDF_Issue::create * * [sender] * * IDF_Form_IssueCreate * * [description] * * This signal allows an application to perform a set of tasks * just after the creation of an issue. The comment contains * the description of the issue. * * [parameters] * * array('issue' => $issue, * 'comment' => $comment, * 'files' => $attached_files); * */ $params = array('issue' => $issue, 'comment' => $comment, 'files' => $created_files); Pluf_Signal::send('IDF_Issue::create', 'IDF_Form_IssueCreate', $params); return $issue; }
public function testAddIssueComment() { $issue = new IDF_Issue(); $issue->project = $this->projects[0]; $issue->summary = 'This is a test issue'; $issue->submitter = $this->users[0]; $issue->create(); $ic = new IDF_IssueComment(); $ic->issue = $issue; $ic->submitter = $this->users[0]; $ic->content = 'toto'; $changes = array('s' => 'New summary', 'st' => 'Active', 't' => '-OS:Linux OS:Windows'); $ic->changes = $changes; $ic->create(); $comments = $issue->get_comments_list(); $this->assertEqual($changes, $comments[0]->changes); }