views:

23

answers:

1

Hey I have been playing with the GDATA_Calendar implementation inside the Zend Framework and have been successfully able to create sub calendars.

However, I have been having trouble in dynamically sharing these calendars with users.

Looking over the official Google docs (http://code.google.com/apis/calendar/data/2.0/developers_guide_protocol.html#UpdateAcl) it seems to support changing the ACL on a given calendar to allow sharing with particular users.

Sadly I cannot seem to get this working.

Have even tried spawning my own client and setting the rawdata and enc types but it seems the GDATA implementation is overwriting the content types?

$client = Zend_Gdata_ClientLogin::getHttpClient($this->user, $this->pass, Zend_Gdata_Calendar::AUTH_SERVICE_NAME);
            $client->setMethod("POST");
            $client->setUri($appURL . "?alt=json");
            $client->setEncType("application/json");
            $client->setRawData('{'
  . '"data": {'
  . '"scope": "[email protected]",'
  . '"scopeType": "user",'
  . '"role": "editor"'
  . '}'
  . '}"', "application/json");
            Zend_Debug::dump($client);
        $response = $client->request();


        Zend_Debug::dump($response);

The resulting response shows

object(Zend_Http_Response)#558 (5) {
  ["version":protected] => string(3) "1.1"
  ["code":protected] => int(415)
  ["message":protected] => string(22) "Unsupported Media Type"
  ["headers":protected] => array(9) {
    ["Content-type"] => string(24) "text/html; charset=UTF-8"
    ["Date"] => string(29) "Mon, 18 Oct 2010 05:10:23 GMT"
    ["Expires"] => string(29) "Mon, 18 Oct 2010 05:10:23 GMT"
    ["Cache-control"] => string(18) "private, max-age=0"
    ["X-content-type-options"] => string(7) "nosniff"
    ["X-frame-options"] => string(10) "SAMEORIGIN"
    ["X-xss-protection"] => string(13) "1; mode=block"
    ["Server"] => string(3) "GSE"
    ["Connection"] => string(5) "close"
  }
  ["body":protected] => string(73) "Content-Type application/x-www-form-urlencoded is not a valid input type."
}

As you can see, it doesn't even seem to be accepting the content type specified?

Any help would be greatly appreciated

A: 
$data = "
    <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gAcl='http://schemas.google.com/acl/2007'&gt;
      <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/acl/2007#accessRule'/&gt;
      <gAcl:scope type='user' value='{$accountEmail}'></gAcl:scope>
      <gAcl:role value='http://schemas.google.com/gCal/2005#editor'&gt;
      </gAcl:role>
    </entry>
";

$response = $this->service->post(trim($data), $appURL);

Well - found the answer.. its finding this little function within the gdata service object and using that to push everything with the headers.

Hope that helps someone

RedMinger