| $this->project->membershipsUpdated();␊ | 
| }␊ | 
| ␊ | 
| public function clean_owners()␊ | 
| {␊ | 
| return self::checkBadLogins($this->cleaned_data['owners']);␊ | 
| }␊ | 
| ␊ | 
| public function clean_members()␊ | 
| {␊ | 
| return self::checkBadLogins($this->cleaned_data['members']);␊ | 
| }␊ | 
| ␊ | 
| /**␊ | 
| * From the input, find the bad logins.␊ | 
| *␊ | 
| * Throw a Pluf_Form_Invalid exception when bad logins are found.␊ | 
| *␊ | 
| * @param string Comma, new line delimited list of logins␊ | 
| * @return string Comma, new line delimited list of logins␊ | 
| */␊ | 
| public static function checkBadLogins($logins)␊ | 
| {␊ | 
| $bad = array();␊ | 
| foreach (preg_split("/\015\012|\015|\012|\,/", $logins, -1, PREG_SPLIT_NO_EMPTY) as $login) {␊ | 
| $sql = new Pluf_SQL('login=%s', array(trim($login)));␊ | 
| try {␊ | 
| $user = Pluf::factory('Pluf_User')->getOne(array('filter'=>$sql->gen()));␊ | 
| if (null == $user) {␊ | 
| $bad[] = $login;␊ | 
| }␊ | 
| } catch (Exception $e) {␊ | 
| $bad[] = $login;␊ | 
| }␊ | 
| }␊ | 
| $n = count($bad);␊ | 
| if ($n) {␊ | 
| $badlogins = Pluf_esc(implode(', ', $bad));␊ | 
| throw new Pluf_Form_Invalid(sprintf(_n('The following login is invalid: %s.', 'The following login are invalids: %s.', $n), $badlogins));␊ | 
| }␊ | 
| return $logins;␊ | 
| }␊ | 
| ␊ | 
| /**␊ | 
| * The update of the memberships is done in different places. This␊ | 
| * avoids duplicating code.␊ |