Пример #1
0
 /**
  * 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);
 }
Пример #2
0
 /**
  * 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;
 }
Пример #3
0
 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);
 }