public function addPhone($number, $type = 'phone') { //remove non-numerican chars from number if (!($number = PhoneTable::formatForDb($number))) { return false; } //make sure Entity doesn't already have phone foreach ($this->Phone as $phone) { if ($phone->number == $number) { return false; } } //type must be phone or fax if (!in_array($type, PhoneTable::$types)) { throw new Exception("Invalid phone type: " . $type); } //create new phone $phone = new Phone(); $phone->number = $number; $phone->type = $type; $this->Phone[] = $phone; return $phone; }
public function executeEditPhone($request) { $this->phone = Doctrine::getTable('Phone')->find($request->getParameter('id')); $this->forward404Unless($this->phone); $this->entity = $this->phone->Entity; $this->forward404Unless($this->entity); $this->phone_form = new PhoneForm($this->phone); $this->reference_form = new ReferenceForm(); $this->reference_form->setSelectObject($this->entity, false, true); if ($request->isMethod('post')) { $params = $request->getParameter('phone'); $refParams = $request->getParameter('reference'); $this->phone_form->bind($params); $this->reference_form->bind($refParams); if ($this->phone_form->isValid() && $this->reference_form->isValid()) { //make sure number is unique $unique = true; $cleanNumber = PhoneTable::formatForDb($params['number']); foreach ($this->entity->Phone as $existingPhone) { if ($existingPhone->id != $this->phone->id && $existingPhone->number == $cleanNumber) { $unique = false; break; } } if ($unique) { $this->phone->number = $cleanNumber; $this->phone->type = $params['type']; //save phone and reference $this->phone->saveWithRequiredReference($refParams); $this->clearCache($this->entity); $this->redirect($this->entity->getInternalUrl('editContact')); } else { $validator = new sfValidatorString(array(), array('invalid' => 'This ' . strtolower($this->entity->getPrimaryExtension()) . ' already has that ' . $phone->type . ' number')); $this->phone_form->getErrorSchema()->addError(new sfValidatorError($validator, 'invalid')); } } } }