public function update()
 {
     $errorURL = isset($_REQUEST['return_url']) ? $_REQUEST['return_url'] : BASE_URL . '/people';
     if (isset($_REQUEST['person_id']) && $_REQUEST['person_id']) {
         try {
             $person = new Person($_REQUEST['person_id']);
         } catch (\Exception $e) {
             $_SESSION['errorMessages'][] = $e;
             header("Location: {$errorURL}");
             exit;
         }
     } else {
         $person = new Person();
     }
     if (isset($_POST['firstname'])) {
         try {
             $newRecord = $person->getId() ? false : true;
             $person->handleUpdate($_POST);
             $person->save();
             if ($newRecord) {
                 if (!empty($_POST['email'])) {
                     $email = new Email();
                     $email->setPerson($person);
                     $email->setEmail($_POST['email']);
                     $email->save();
                 }
                 if (!empty($_POST['phone'])) {
                     $phone = new Phone();
                     $phone->setPerson($person);
                     $phone->setNumber($_POST['phone']);
                     $phone->save();
                 }
             }
             if (isset($_REQUEST['return_url'])) {
                 $return_url = new Url($_REQUEST['return_url']);
                 $return_url->person_id = $person->getId();
             } elseif (isset($_REQUEST['callback'])) {
                 $return_url = new Url(BASE_URL . '/callback');
                 $return_url->callback = $_REQUEST['callback'];
                 $return_url->data = "{$person->getId()}";
             } else {
                 $return_url = $person->getURL();
             }
             header("Location: {$return_url}");
             exit;
         } catch (\Exception $e) {
             $_SESSION['errorMessages'][] = $e;
         }
     }
     $this->template->title = 'Update a person';
     $this->template->blocks[] = new Block('people/updatePersonForm.inc', array('person' => $person));
 }