| {␊ | 
| $this->project = $extra['project'];␊ | 
| $members = $this->project->getMembershipData('string');␊ | 
| $conf = $this->project->getConf();␊ | 
| ␊ | 
| $this->fields['name'] = new Pluf_Form_Field_Varchar(␊ | 
| array('required' => true,␊ | 
| 'label' => __('Name'),␊ | 
|  | 
| ␊ | 
| $this->fields['shortdesc'] = new Pluf_Form_Field_Varchar(␊ | 
| array('required' => true,␊ | 
| 'label' => __('short description'),␊ | 
| 'label' => __('Short description'),␊ | 
| 'help_text' => __('A one line description of the project.'),␊ | 
| 'initial' => $this->project->shortdesc,␊ | 
| 'widget_attrs' => array('size' => '35'),␊ | 
| ));␊ | 
| ␊ | 
| if ($this->project->getConf()->getVal('scm') == 'mtn') {␊ | 
| $this->fields['mtn_master_branch'] = new Pluf_Form_Field_Varchar(␊ | 
| array('required' => false,␊ | 
| 'label' => __('Master branch'),␊ | 
| 'initial' => $conf->getVal('mtn_master_branch'),␊ | 
| 'widget_attrs' => array('size' => '35'),␊ | 
| 'help_text' => __('This should be a world-wide unique identifier for your project. A reverse DNS notation like "com.my-domain.my-project" is a good idea.'),␊ | 
| ));␊ | 
| }␊ | 
| ␊ | 
| $this->fields['owners'] = new Pluf_Form_Field_Varchar(␊ | 
| array('required' => false,␊ | 
| 'label' => __('Project owners'),␊ | 
|  | 
| ));␊ | 
| }␊ | 
| ␊ | 
| public function clean_mtn_master_branch()␊ | 
| {␊ | 
| $mtn_master_branch = mb_strtolower($this->cleaned_data['mtn_master_branch']);␊ | 
| if (!preg_match('/^([\w\d]+([-][\w\d]+)*)(\.[\w\d]+([-][\w\d]+)*)*$/',␊ | 
| $mtn_master_branch)) {␊ | 
| throw new Pluf_Form_Invalid(__(␊ | 
| 'The master branch is empty or contains illegal characters, '.␊ | 
| 'please use only letters, digits, dashs and dots as separators.'␊ | 
| ));␊ | 
| }␊ | 
| ␊ | 
| $sql = new Pluf_SQL('vkey=%s AND vdesc=%s AND project!=%s',␊ | 
| array('mtn_master_branch', $mtn_master_branch,␊ | 
| (string)$this->project->id));␊ | 
| $l = Pluf::factory('IDF_Conf')->getList(array('filter'=>$sql->gen()));␊ | 
| if ($l->count() > 0) {␊ | 
| throw new Pluf_Form_Invalid(__(␊ | 
| 'This master branch is already used. Please select another one.'␊ | 
| ));␊ | 
| }␊ | 
| ␊ | 
| return $mtn_master_branch;␊ | 
| }␊ | 
| ␊ | 
| public function clean_owners()␊ | 
| {␊ | 
| return IDF_Form_MembersConf::checkBadLogins($this->cleaned_data['owners']);␊ | 
|  | 
| if (!$this->isValid()) {␊ | 
| throw new Exception(__('Cannot save the model from an invalid form.'));␊ | 
| }␊ | 
| IDF_Form_MembersConf::updateMemberships($this->project, ␊ | 
| IDF_Form_MembersConf::updateMemberships($this->project,␊ | 
| $this->cleaned_data);␊ | 
| $this->project->membershipsUpdated();␊ | 
| $this->project->name = $this->cleaned_data['name'];␊ | 
| $this->project->shortdesc = $this->cleaned_data['shortdesc'];␊ | 
| $this->project->update();␊ | 
| ␊ | 
| $keys = array('mtn_master_branch');␊ | 
| foreach ($keys as $key) {␊ | 
| if (!empty($this->cleaned_data[$key])) {␊ | 
| $this->project->getConf()->setVal($key, $this->cleaned_data[$key]);␊ | 
| }␊ | 
| }␊ | 
| }␊ | 
| }␊ | 
| ␊ |