Взгляд сквозь пентапризму... - Google Docs ACL [Home page] [фото.сайт] [wishlist]
February 1st, 2009
06:06 pm

[Link]

Previous Entry Add to Memories Tell a Friend Next Entry
Google Docs ACL
Авось кому сгодится... Я на это убил достаточно времени: рыская по докам, конфам, сырцам...

Суть в том, что в Zend Framework реализован протокол GData v1... А работа с ACL есть во втором... Писать самому полностью поддержку v2 как то не хочется и времени нет... А вот при помощи пары ссылок...

Constructing unsupported XML elements using the PHP client library
Modifying the ACL feed for a Document

и скотча, я теперь умею управлять шарингом документов :)

<?php
/**
* @param $docId ID документа (http://docs.google.com/Doc?id=ТоЧтоТут_Написано)
* @param $roleValue права на документ: owner, writer, reader
* @param $user Google Account login
*/
        $feedUrl = 'http://docs.google.com/feeds/acl/private/full/document%3A' . $docId;

                // "Магическим" образом вытаскивем из сессии подготовленный и авторизованный клиент
        $google    = new Zend_Session_Namespace('Google');
        $gdata = new Zend_Gdata($google->client);
                // Здесь все, кто имеет доступ к документу с описанием прав.
                // Можно в принципе прямо в него писать
        //$aclFeed = $gdata->getFeed($feedUrl);
                // Создаем новую запись в ACL
        $entry = $gdata->newEntry();
        $entry->registerNamespace('gAcl=', 'http://schemas.google.com/acl/2007');

        $category = new Zend_Gdata_App_Extension_Category(
                                                  'http://schemas.google.com/acl/2007#accessRule',
                                                  'http://schemas.google.com/g/2005#kind');

        $role = new Zend_Gdata_App_Extension_Element('gAcl:role', 'gAcl', 'http://schemas.google.com/acl/2007');
        $role->setExtensionAttributes(array(
                            'value' => Array('namespaceUri' => null, 'name' => 'value', 'value' => $roleValue)
                            ));

        $scope = new Zend_Gdata_App_Extension_Element('scope', null, 'http://schemas.google.com/acl/2007');
        $scope->setExtensionAttributes(array(
                            'type' => array('namespaceUri' => null, 'name' => 'type', 'value'=>'user'),
                            'value' => array('namespaceUri' => null, 'name' => 'value', 'value' => $user)
                            ));
        //$entry->setCategory($category);
        $entry->setExtensionElements(array($category,$role,$scope));

        try
        {
                        // Универсальный вариант. Можно также напрямую писать в соответствующий фид.
            $gdata->insertEntry($entry, $feedUrl);
        }
        catch ( Exception $e )
        {
                        // Если, что-то пойдет не так, то тут можно это попробовать исправить
        }

* This source code was highlighted with Source Code Highlighter.


Tags: , , ,

(Leave a comment)

My Website Powered by LiveJournal.com

Advertisement