/**
  * Updates a contact's details in the DB according to the
  * values passed via AJAX
  * @global object $USER Moodle user object (session persistent)
  * @param int $addressbookId ID of addressbook to update
  * @param int $contactId ID of contact to update
  * @param string $contactFirstName Contact's first name
  * @param string $contactLastName Contact's last name
  * @param string $contactCompany Contact's employer
  * @param string $contactPhoneNumber Contact's phone number
  * @return string JSON-encoded response to request
  * @throws MoodletxtAJAXException
  * @version 2012061801
  * @since 2012090501
  */
 private function updateContact($addressbookId, $contactId, $contactFirstName, $contactLastName, $contactCompany, $contactPhoneNumber)
 {
     global $USER;
     // Check that user owns DB
     if (!$this->addressbookDAO->checkAddressbookOwnership($addressbookId, $USER->id)) {
         throw new MoodletxtAJAXException(get_string('errorbooknotowned', 'block_moodletxt'), MoodletxtAJAXException::$ERROR_NOT_ADDRESSBOOK_OWNER, null, false);
     }
     // Get record from DB and update it
     try {
         $contact = $this->addressbookDAO->getAddressbookContactById($addressbookId, $contactId);
         $contact->setFirstName($contactFirstName);
         $contact->setLastName($contactLastName);
         $contact->setCompanyName($contactCompany);
         $contact->setRecipientNumber(new MoodletxtPhoneNumber($contactPhoneNumber));
         $this->addressbookDAO->saveContact($contact);
     } catch (InvalidArgumentException $ex) {
         throw new MoodletxtAJAXException(get_string('errorbadcontactid', 'block_moodletxt'), MoodletxtAJAXException::$ERROR_CODE_BAD_CONTACT_ID, null, false);
     }
     return $this->buildResponse($contact);
 }
        foreach ($contactList as $contact) {
            $customFormData['potentialContacts'][$contact->getContactId()] = $contact->getFullNameForDisplay();
        }
    }
}
// POST PROCESSING FOR EDIT FORM
$editForm = new MoodletxtGroupEditForm(null, $customFormData);
$editData = $editForm->get_data();
if ($editData != null) {
    $editData = $editForm->cleanupFormData($editData);
    $groupObject = $addressbookDAO->getAddressbookGroupById($addressbook->getId(), $editData->editExistingGroup);
    if ($groupObject != null) {
        // Make sure collection is initialised, but empty
        $groupObject->setContacts(array());
        foreach ($editData->editGroupMembers as $contactId) {
            $groupObject->addContact($addressbookDAO->getAddressbookContactById($addressbook->getId(), $contactId));
        }
        $addressbookDAO->saveGroup($groupObject);
        $editForm->clearSubmittedValues();
        $notifications .= $output->notification(get_string('notifygroupupdated', 'block_moodletxt'), 'notifysuccess');
    }
}
// Populate group-contact associations
// after all updates are complete
$groupAssociationList = $addressbookDAO->getAddressbookGroupsForUser($USER->id, $addressbook->getId(), true);
foreach ($groupAssociationList as $group) {
    // Populate JS with contact IDs for each group
    if ($group->hasContacts()) {
        $contactIds = array();
        foreach ($group->getContacts() as $contact) {
            array_push($contactIds, $contact->getContactId());