Search code examples
phpcontactszend-gdata

Add a contact to a group using Zend_GData and Google Contacts API


I have an application using zend_gdata and create contact with the code below.

$doc  = new DOMDocument();
$doc->formatOutput = true;
$entry = $doc->createElement('atom:entry');
$entry->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:atom', 'http://www.w3.org/2005/Atom');
$entry->setAttributeNS('http://www.w3.org/2000/xmlns/' , 'xmlns:gd', 'http://schemas.google.com/g/2005');
$doc->appendChild($entry);

// add name element
$name = $doc->createElement('gd:name');
$entry->appendChild($name);

$fullName = $doc->createElement('gd:fullName', htmlentities($data->firstname . ' ' . $data->lastname));
$name->appendChild($fullName);

// insert entry
$entryResult = $gdata->insertEntry($doc->saveXML(), 'http://www.google.com/m8/feeds/contacts/default/full');

Is there a possibility, a function to add a group to the contact just created?


Solution

  • I have a big class and can't paste it all, you need to put this together somehow

    step 1)

    get all groups ( http://raiyaraj.wordpress.com/2008/09/17/gmail-gdata-contacts-group-via-proxy/) and find the id of your group or create it ( you can do it with zend framework) if it doesn't exist

    step 2)

    generate the xml

    // create new entry
            $doc  = new DOMDocument();
            $doc->formatOutput = true;
            $entry = $doc->createElement('atom:entry');
            $entry->setAttributeNS('http://www.w3.org/2000/xmlns/' , 'xmlns:atom', 'http://www.w3.org/2005/Atom');
            $entry->setAttributeNS('http://www.w3.org/2000/xmlns/' , 'xmlns:gd', 'http://schemas.google.com/g/2005');
            $entry->setAttributeNS('http://www.w3.org/2000/xmlns/' , 'xmlns:gContact', 'http://schemas.google.com/contact/2008');
            $doc->appendChild($entry);
    
    ...add various stuff....
        $name = $doc->createElement('gd:name');
                $entry->appendChild($name);
                $fullName = $doc->createElement('gd:fullName', $this->name);
                $name->appendChild($fullName);
    .....
    
            $group = $doc->createElement('gContact:groupMembershipInfo');
            $group->setAttribute('deleted' ,'false');
            $group->setAttribute('href' ,'http://www.google.com/m8/feeds/groups/' .urlencode($this->email) . '/base/'.$this->group_id);
            $entry->appendChild($group);
    

    step 3)

    connect to gmail and execute the query

    $service = $this->service;
    // perform login and set protocol version to 3.0
    $client = $service;
    $gdata = new Zend_Gdata($client);
    $gdata->setMajorProtocolVersion(3);
    $entryResult = $gdata->insertEntry($this->getXML(), 'https://www.google.com/m8/feeds/contacts/default/full');
    
    return $entryResult->getLink('edit');
    

    notice that you return the edit link so that if you save it, you can update the contact or or check for modifications