/** * 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; }