TigerZF
🌐Español

37.9. Uso de Google Apps Provisioning

Google Apps es un servicio que permite a los administradores de dominio ofrecer a sus usuarios acceso gestionado a servicios de Google como Mail, Calendar, y Docs & Spreadsheets. La API de Provisioning ofrece una interfaz programática para configurar este servicio. En concreto, esta API permite a los administradores crear, obtener, actualizar y eliminar cuentas de usuario, apodos, grupos y listas de correo.

Esta librería implementa la versión 2.0 de la API de Provisioning. El acceso a su cuenta a través de la API de Provisioning debe habilitarse manualmente para cada dominio mediante el panel de control de Google Apps. Solo ciertos tipos de cuenta pueden habilitar esta característica.

Para más información sobre la API de Google Apps Provisioning, incluyendo instrucciones para habilitar el acceso a la API, consulte la Referencia de la API V2.0 de Provisioning.

[Note] Autenticación

La API de Provisioning no admite autenticación mediante AuthSub y no se permite el acceso anónimo. Todas las conexiones HTTP deben autenticarse usando autenticación ClientAuth.

37.9.1. Estableciendo el dominio actual

Para usar la API de Provisioning, el dominio que se administra debe especificarse en todas las URIs de las peticiones. Para facilitar el desarrollo, esta información se almacena tanto en las clases de servicio como de consulta de Gapps para usarla al construir las peticiones.

37.9.1.1. Estableciendo el dominio para la clase de servicio

Para establecer el dominio de las peticiones realizadas por la clase de servicio, llame a setDomain() o especifique el dominio al instanciar la clase de servicio. Por ejemplo:

$domain = "example.com";
$gdata = new Zend_Gdata_Gapps($client, $domain);

37.9.1.2. Estableciendo el dominio para las clases de consulta

Establecer el dominio para las peticiones realizadas por las clases de consulta es similar a establecerlo para la clase de servicio: llame a setDomain() o especifique el dominio al crear la consulta. Por ejemplo:

$domain = "example.com";
$query = new Zend_Gdata_Gapps_UserQuery($domain, $arg);

Cuando se usa un método de fábrica de la clase de servicio para crear una consulta, la clase de servicio establecerá automáticamente el dominio de la consulta para que coincida con el suyo propio. Como resultado, no es necesario especificar el dominio como parte de los argumentos del constructor.

$domain = "example.com";
$gdata = new Zend_Gdata_Gapps($client, $domain);
$query = $gdata->newUserQuery($arg);

37.9.2. Interactuando con usuarios

Cada cuenta de usuario en un dominio alojado en Google Apps se representa como una instancia de Zend_Gdata_Gapps_UserEntry. Esta clase proporciona acceso a todas las propiedades de la cuenta, incluyendo nombre, nombre de usuario, contraseña, derechos de acceso y cuota actual.

37.9.2.1. Creando una cuenta de usuario

Las cuentas de usuario se pueden crear llamando al método de conveniencia createUser():

$gdata->createUser('foo', 'Random', 'User', '••••••••');

Los usuarios también se pueden crear instanciando UserEntry, proporcionando un nombre de usuario, nombre, apellido y contraseña, y luego llamando a insertUser() sobre un objeto de servicio para subir la entrada al servidor.

$user = $gdata->newUserEntry();
$user->login = $gdata->newLogin();
$user->login->username = 'foo';
$user->login->password = '••••••••';
$user->name = $gdata->newName();
$user->name->givenName = 'Random';
$user->name->familyName = 'User';
$user = $gdata->insertUser($user);

La contraseña del usuario normalmente debe proporcionarse en texto plano. Opcionalmente, la contraseña se puede proporcionar como un resumen SHA-1 si login->passwordHashFunction se establece a 'SHA-1'.

37.9.2.2. Obteniendo una cuenta de usuario

Las cuentas de usuario individuales se pueden obtener llamando al método de conveniencia retrieveUser(). Si el usuario no se encuentra, se devolverá NULL.

$user = $gdata->retrieveUser('foo');

echo 'Username: ' . $user->login->userName . "\n";
echo 'Given Name: ' . $user->name->givenName . "\n";
echo 'Family Name: ' . $user->name->familyName . "\n";
echo 'Suspended: ' . ($user->login->suspended ? 'Yes' : 'No') . "\n";
echo 'Admin: ' . ($user->login->admin ? 'Yes' : 'No') . "\n"
echo 'Must Change Password: ' .
     ($user->login->changePasswordAtNextLogin ? 'Yes' : 'No') . "\n";
echo 'Has Agreed To Terms: ' .
     ($user->login->agreedToTerms ? 'Yes' : 'No') . "\n";

Los usuarios también se pueden obtener creando una instancia de Zend_Gdata_Gapps_UserQuery, estableciendo su propiedad username para que coincida con el nombre de usuario del usuario que se desea obtener, y llamando a getUserEntry() sobre un objeto de servicio con esa consulta.

$query = $gdata->newUserQuery('foo');
$user = $gdata->getUserEntry($query);

echo 'Username: ' . $user->login->userName . "\n";
echo 'Given Name: ' . $user->login->givenName . "\n";
echo 'Family Name: ' . $user->login->familyName . "\n";
echo 'Suspended: ' . ($user->login->suspended ? 'Yes' : 'No') . "\n";
echo 'Admin: ' . ($user->login->admin ? 'Yes' : 'No') . "\n"
echo 'Must Change Password: ' .
     ($user->login->changePasswordAtNextLogin ? 'Yes' : 'No') . "\n";
echo 'Has Agreed To Terms: ' .
     ($user->login->agreedToTerms ? 'Yes' : 'No') . "\n";

Si no se puede localizar el usuario especificado, se lanzará una ServiceException con un código de error Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST. Las ServiceExceptions se tratarán en el capítulo de excepciones.

37.9.2.3. Obteniendo todos los usuarios de un dominio

Para obtener todos los usuarios de un dominio, llame al método de conveniencia retrieveAllUsers().

$feed = $gdata->retrieveAllUsers();

foreach ($feed as $user) {
    echo "  * " . $user->login->username . ' (' . $user->name->givenName .
        ' ' . $user->name->familyName . ")\n";
}

Esto creará un objeto Zend_Gdata_Gapps_UserFeed que contiene cada usuario del dominio.

Alternativamente, llame a getUserFeed() sin opciones. Tenga en cuenta que en dominios más grandes este feed puede estar paginado por el servidor. Para más información sobre paginación, consulte el capítulo de paginación.

$feed = $gdata->getUserFeed();

foreach ($feed as $user) {
    echo "  * " . $user->login->username . ' (' . $user->name->givenName .
        ' ' . $user->name->familyName . ")\n";
}

37.9.2.4. Actualizando una cuenta de usuario

La forma más sencilla de actualizar una cuenta de usuario es obtener el usuario tal como se describe en las secciones anteriores, realizar los cambios deseados y luego llamar a save() sobre ese usuario. Cualquier cambio realizado se propagará al servidor.

$user = $gdata->retrieveUser('foo');
$user->name->givenName = 'Foo';
$user->name->familyName = 'Bar';
$user = $user->save();
37.9.2.4.1. Restableciendo la contraseña de un usuario

La contraseña de un usuario se puede restablecer a un nuevo valor actualizando la propiedad login->password.

$user = $gdata->retrieveUser('foo');
$user->login->password = '••••••••';
$user = $user->save();

Tenga en cuenta que no es posible recuperar una contraseña de esta manera, ya que las contraseñas almacenadas no se ponen a disposición mediante la API de Provisioning por motivos de seguridad.

37.9.2.4.2. Forzar a un usuario a cambiar su contraseña

Se puede obligar a un usuario a cambiar su contraseña en su próximo inicio de sesión estableciendo la propiedad login->changePasswordAtNextLogin a TRUE.

$user = $gdata->retrieveUser('foo');
$user->login->changePasswordAtNextLogin = true;
$user = $user->save();

De igual manera, esto se puede deshacer estableciendo la propiedad login->changePasswordAtNextLogin a FALSE.

37.9.2.4.3. Suspendiendo una cuenta de usuario

Se puede restringir a los usuarios el inicio de sesión sin eliminar su cuenta de usuario, en su lugar suspendiendo su cuenta de usuario. Las cuentas se pueden suspender o restaurar usando los métodos de conveniencia suspendUser() y restoreUser():

$gdata->suspendUser('foo');
$gdata->restoreUser('foo');

Alternativamente, puede establecer la propiedad login->suspended de UserEntry a TRUE.

$user = $gdata->retrieveUser('foo');
$user->login->suspended = true;
$user = $user->save();

Para restaurar el acceso del usuario, establezca la propiedad login->suspended a FALSE.

37.9.2.4.4. Concediendo derechos de administrador

A los usuarios se les puede conceder la capacidad de administrar su dominio estableciendo su propiedad login->admin a TRUE.

$user = $gdata->retrieveUser('foo');
$user->login->admin = true;
$user = $user->save();

Y, como cabría esperar, establecer la propiedad login->admin de un usuario a FALSE revoca sus derechos administrativos.

37.9.2.5. Eliminando cuentas de usuario

Eliminar una cuenta de usuario para la que ya se dispone de un UserEntry es tan sencillo como llamar a delete() sobre esa entrada.

$user = $gdata->retrieveUser('foo');
$user->delete();

Si no se dispone de acceso a un objeto UserEntry para una cuenta, use el método de conveniencia deleteUser().

$gdata->deleteUser('foo');

37.9.3. Interactuando con apodos

Los apodos sirven como alias de correo electrónico para usuarios existentes. Cada apodo contiene exactamente dos propiedades clave: su nombre y su propietario. Cualquier correo dirigido a un apodo se reenvía al usuario propietario de ese apodo.

Los apodos se representan como instancias de Zend_Gdata_Gapps_NicknameEntry.

37.9.3.1. Creando un apodo

Los apodos se pueden crear llamando al método de conveniencia createNickname():

$gdata->createNickname('foo', 'bar');

Los apodos también se pueden crear instanciando NicknameEntry, proporcionando al apodo un nombre y un propietario, y luego llamando a insertNickname() sobre un objeto de servicio para subir la entrada al servidor.

$nickname = $gdata->newNicknameEntry();
$nickname->login = $gdata->newLogin('foo');
$nickname->nickname = $gdata->newNickname('bar');
$nickname = $gdata->insertNickname($nickname);

37.9.3.2. Obteniendo un apodo

Los apodos se pueden obtener llamando al método de conveniencia retrieveNickname(). Esto devolverá NULL si no se encuentra un usuario.

$nickname = $gdata->retrieveNickname('bar');

echo 'Nickname: ' . $nickname->nickname->name . "\n";
echo 'Owner: ' . $nickname->login->username . "\n";

Los apodos individuales también se pueden obtener creando una instancia de Zend_Gdata_Gapps_NicknameQuery, estableciendo su propiedad nickname para que coincida con el apodo que se desea obtener, y llamando a getNicknameEntry() sobre un objeto de servicio con esa consulta.

$query = $gdata->newNicknameQuery('bar');
$nickname = $gdata->getNicknameEntry($query);

echo 'Nickname: ' . $nickname->nickname->name . "\n";
echo 'Owner: ' . $nickname->login->username . "\n";

Al igual que con los usuarios, si no se encuentra ningún apodo correspondiente se lanzará una ServiceException con un código de error Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST. De nuevo, esto se tratará en el capítulo de excepciones.

37.9.3.3. Obteniendo todos los apodos de un usuario

Para obtener todos los apodos asociados a un usuario determinado, llame al método de conveniencia retrieveNicknames().

$feed = $gdata->retrieveNicknames('foo');

foreach ($feed as $nickname) {
    echo '  * ' . $nickname->nickname->name . "\n";
}

Esto creará un objeto Zend_Gdata_Gapps_NicknameFeed que contiene cada apodo asociado al usuario especificado.

Alternativamente, cree un nuevo Zend_Gdata_Gapps_NicknameQuery, establezca su propiedad username al usuario deseado, y envíe la consulta llamando a getNicknameFeed() sobre un servicio objeto.

$query = $gdata->newNicknameQuery();
$query->setUsername('foo');
$feed = $gdata->getNicknameFeed($query);

foreach ($feed as $nickname) {
    echo '  * ' . $nickname->nickname->name . "\n";
}

37.9.3.4. Obteniendo todos los apodos de un dominio

Para obtener todos los apodos en un feed, simplemente llame al método de conveniencia retrieveAllNicknames()

$feed = $gdata->retrieveAllNicknames();

foreach ($feed as $nickname) {
    echo '  * ' . $nickname->nickname->name . ' => ' .
        $nickname->login->username . "\n";
}

Esto creará un objeto Zend_Gdata_Gapps_NicknameFeed que contiene cada apodo del dominio.

Alternativamente, llame a getNicknameFeed() sobre un objeto de servicio sin argumentos.

$feed = $gdata->getNicknameFeed();

foreach ($feed as $nickname) {
    echo '  * ' . $nickname->nickname->name . ' => ' .
        $nickname->login->username . "\n";
}

37.9.3.5. Eliminando un apodo

Eliminar un apodo para el que ya se dispone de un NicknameEntry es tan sencillo como llamar a delete() sobre esa entrada.

$nickname = $gdata->retrieveNickname('bar');
$nickname->delete();

Para los apodos de los que no se dispone de un NicknameEntry, use el método de conveniencia deleteNickname().

$gdata->deleteNickname('bar');

37.9.4. Interactuando con grupos

Google Groups permite a las personas publicar mensajes como en una lista de correo. Google está desaprobando la API Email List. Google Groups ofrece algunas características interesantes como grupos anidados y propietarios de grupos. Si desea iniciar una nueva lista de correo, es recomendable usar Google Groups en su lugar. El Email List de Google no es compatible con Google Groups. Así que si crea una lista de correo, no aparecerá como un grupo. Lo contrario también es cierto.

Cada grupo de un dominio se representa como una instancia de Zend_Gdata_Gapps_GroupEntry.

37.9.4.1. Creando un grupo

Los grupos se pueden crear llamando al método de conveniencia createGroup():

$gdata->createGroup('friends', 'The Friends Group');

Los grupos también se pueden crear instanciando GroupEntry, proporcionando un id de grupo y un nombre para el grupo, y luego llamando a insertGroup() sobre un objeto de servicio para subir la entrada al servidor.

$group = $gdata->newGroupEntry();

$properties[0] = $this->newProperty();
$properties[0]->name = 'groupId';
$properties[0]->value = 'friends';
$properties[1] = $this->newProperty();
$properties[1]->name = 'groupName';
$properties[1]->value = 'The Friends Group';

$group->property = $properties;

$group = $gdata->insertGroup($group);

37.9.4.2. Obteniendo un grupo individual

Para obtener un grupo individual, llame al método de conveniencia retrieveGroup():

$entry = $gdata->retrieveGroup('friends');

foreach ($entry->property as $p) {
    echo "Property Name: " . $p->name;
    echo "\nProperty Value: " . $p->value . "\n\n";
}

Esto creará un objeto Zend_Gdata_Gapps_GroupEntry que contiene las propiedades sobre el grupo.

Alternativamente, cree un nuevo Zend_Gdata_Gapps_GroupQuery, establezca su propiedad groupId al id de grupo deseado, y envíe la consulta llamando a getGroupEntry() sobre un objeto de servicio.

$query = $gdata->newGroupQuery();
$query->setGroupId('friends');
$entry = $gdata->getGroupEntry($query);

foreach ($entry->property as $p) {
    echo "Property Name: " . $p->name;
    echo "\nProperty Value: " . $p->value . "\n\n";
}

37.9.4.3. Obteniendo todos los grupos de un dominio

Para obtener todos los grupos de un dominio, llame al método de conveniencia retrieveAllGroups().

$feed = $gdata->retrieveAllGroups();

foreach ($feed->entry as $entry) {
    foreach ($entry->property as $p) {
        echo "Property Name: " . $p->name;
        echo "\nProperty Value: " . $p->value . "\n\n";
    }
    echo "\n\n";
}

Esto creará un objeto Zend_Gdata_Gapps_GroupFeed que contiene cada grupo del dominio.

Alternativamente, llame a getGroupFeed() sobre un objeto de servicio sin argumentos.

$feed = $gdata->getGroupFeed();

foreach ($feed->entry as $entry) {
    foreach ($entry->property as $p) {
        echo "Property Name: " . $p->name;
        echo "\nProperty Value: " . $p->value . "\n\n";
    }
    echo "\n\n";
}

37.9.4.4. Eliminando un grupo

Para eliminar un grupo, llame al método de conveniencia deleteGroup():

$gdata->deleteGroup('friends');

37.9.4.5. Actualizando un grupo

Los grupos se pueden actualizar llamando al método de conveniencia updateGroup():

$gdata->updateGroup('group-id-here', 'Group Name Here');

El primer parámetro es obligatorio. El segundo, tercer y cuarto parámetro, que representan el nombre del grupo, la descripción del grupo y el permiso de correo, respectivamente, son opcionales. Establecer cualquiera de estos parámetros opcionales a null no actualizará ese elemento.

37.9.4.6. Obteniendo todos los grupos de los que una persona es miembro

Para obtener todos los grupos de los que una persona en particular es miembro, llame al método de conveniencia retrieveGroups():

$feed = $gdata->retrieveGroups('baz@somewhere.com');

foreach ($feed->entry as $entry) {
    foreach ($entry->property as $p) {
        echo "Property Name: " . $p->name;
        echo "\nProperty Value: " . $p->value . "\n\n";
    }
    echo "\n\n";
}

Esto creará un objeto Zend_Gdata_Gapps_GroupFeed que contiene cada grupo asociado al miembro especificado.

Alternativamente, cree un nuevo Zend_Gdata_Gapps_GroupQuery, establezca su propiedad member a la dirección de correo deseada, y envíe la consulta llamando a getGroupFeed() sobre un objeto de servicio.

$query = $gdata->newGroupQuery();
$query->setMember('baz@somewhere.com');
$feed = $gdata->getGroupFeed($query);

foreach ($feed->entry as $entry) {
    foreach ($entry->property as $p) {
        echo "Property Name: " . $p->name;
        echo "\nProperty Value: " . $p->value . "\n\n";
    }
    echo "\n\n";
}

37.9.5. Interactuando con miembros de grupos

Cada miembro suscrito a un grupo se representa mediante una instancia de Zend_Gdata_Gapps_MemberEntry. A través de esta clase, se pueden añadir y eliminar destinatarios individuales de los grupos.

37.9.5.1. Añadiendo un miembro a un grupo

Para añadir un miembro a un grupo, simplemente llame al método de conveniencia addMemberToGroup():

$gdata->addMemberToGroup('bar@somewhere.com', 'friends');

37.9.5.2. Comprobar si un miembro pertenece a un grupo

Para comprobar si un miembro pertenece a un grupo, simplemente llame al método de conveniencia isMember():

$isMember = $gdata->isMember('bar@somewhere.com', 'friends');
var_dump($isMember);

El método devuelve un valor booleano. Si el miembro pertenece al grupo especificado, el método devuelve true; en caso contrario, devuelve false.

37.9.5.3. Eliminando un miembro de un grupo

Para eliminar un miembro de un grupo, llame al método de conveniencia removeMemberFromGroup():

$gdata->removeMemberFromGroup('baz', 'friends');

37.9.5.4. Obteniendo la lista de miembros de un grupo

El método de conveniencia retrieveAllMembers() se puede usar para obtener la lista de miembros de un grupo:

$feed = $gdata->retrieveAllMembers('friends');

foreach ($feed as $member) {
    foreach ($member->property as $p) {
        echo "Property Name: " . $p->name;
        echo "\nProperty Value: " . $p->value . "\n\n";
    }
}

Alternativamente, construya un nuevo MemberQuery, establezca su propiedad groupId para que coincida con el id de grupo deseado, y llame a getMemberFeed() sobre un objeto de servicio.

$query = $gdata->newMemberQuery();
$query->setGroupId('friends');
$feed = $gdata->getMemberFeed($query);

foreach ($feed as $member) {
    foreach ($member->property as $p) {
        echo "Property Name: " . $p->name;
        echo "\nProperty Value: " . $p->value . "\n\n";
    }
}

Esto creará un objeto Zend_Gdata_Gapps_MemberFeed que contiene cada miembro del grupo seleccionado.

37.9.6. Interactuando con propietarios de grupos

Cada propietario asociado a un grupo se representa mediante una instancia de Zend_Gdata_Gapps_OwnerEntry. A través de esta clase, se pueden añadir y eliminar propietarios individuales de los grupos.

37.9.6.1. Añadiendo un propietario a un grupo

Para añadir un propietario a un grupo, simplemente llame al método de conveniencia addOwnerToGroup():

$gdata->addOwnerToGroup('bar@somewhere.com', 'friends');

37.9.6.2. Obteniendo la lista de propietarios de un grupo

El método de conveniencia retrieveGroupOwners() se puede usar para obtener la lista de propietarios de un grupo:

$feed = $gdata->retrieveGroupOwners('friends');

foreach ($feed as $owner) {
    foreach ($owner->property as $p) {
        echo "Property Name: " . $p->name;
        echo "\nProperty Value: " . $p->value . "\n\n";
    }
}

Alternativamente, construya un nuevo OwnerQuery, establezca su propiedad groupId para que coincida con el id de grupo deseado, y llame a getOwnerFeed() sobre un objeto de servicio.

$query = $gdata->newOwnerQuery();
$query->setGroupId('friends');
$feed = $gdata->getOwnerFeed($query);

foreach ($feed as $owner) {
    foreach ($owner->property as $p) {
        echo "Property Name: " . $p->name;
        echo "\nProperty Value: " . $p->value . "\n\n";
    }
}

Esto creará un objeto Zend_Gdata_Gapps_OwnerFeed que contiene cada miembro del grupo seleccionado.

37.9.6.3. Comprobar si un correo es el propietario de un grupo

Para comprobar si un correo es el propietario de un grupo, simplemente llame al método de conveniencia isOwner():

$isOwner = $gdata->isOwner('bar@somewhere.com', 'friends');
var_dump($isOwner);

El método devuelve un valor booleano. Si el correo es el propietario de el grupo especificado, el método devuelve true; en caso contrario, devuelve false.

37.9.6.4. Eliminando un propietario de un grupo

Para eliminar un propietario de un grupo, llame al método de conveniencia removeOwnerFromGroup():

$gdata->removeOwnerFromGroup('baz@somewhere.com', 'friends');

37.9.7. Interactuando con listas de correo

Las listas de correo permiten a varios usuarios recibir el correo dirigido a una única dirección de correo. Los usuarios no necesitan ser miembros de este dominio para suscribirse a una lista de correo, siempre que se use su dirección de correo completa (incluyendo el dominio).

Cada lista de correo de un dominio se representa como una instancia de Zend_Gdata_Gapps_EmailListEntry.

37.9.7.1. Creando una lista de correo

Las listas de correo se pueden crear llamando al método de conveniencia createEmailList():

$gdata->createEmailList('friends');

Las listas de correo también se pueden crear instanciando EmailListEntry, proporcionando un nombre para la lista, y luego llamando a insertEmailList() sobre un objeto de servicio para subir la entrada al servidor.

$list = $gdata->newEmailListEntry();
$list->emailList = $gdata->newEmailList('friends');
$list = $gdata->insertEmailList($list);

37.9.7.2. Obteniendo todas las listas de correo a las que un destinatario está suscrito

Para obtener todas las listas de correo a las que un destinatario particular está suscrito, llame al método de conveniencia retrieveEmailLists():

$feed = $gdata->retrieveEmailLists('baz@somewhere.com');

foreach ($feed as $list) {
    echo '  * ' . $list->emailList->name . "\n";
}

Esto creará un objeto Zend_Gdata_Gapps_EmailListFeed que contiene cada lista de correo asociada al destinatario especificado.

Alternativamente, cree un nuevo Zend_Gdata_Gapps_EmailListQuery, establezca su propiedad recipient a la dirección de correo deseada, y envíe la consulta llamando a getEmailListFeed() sobre un objeto de servicio.

$query = $gdata->newEmailListQuery();
$query->setRecipient('baz@somewhere.com');
$feed = $gdata->getEmailListFeed($query);

foreach ($feed as $list) {
    echo '  * ' . $list->emailList->name . "\n";
}

37.9.7.3. Obteniendo todas las listas de correo de un dominio

Para obtener todas las listas de correo de un dominio, llame al método de conveniencia retrieveAllEmailLists().

$feed = $gdata->retrieveAllEmailLists();

foreach ($feed as $list) {
    echo '  * ' . $list->emailList->name . "\n";
}

Esto creará un objeto Zend_Gdata_Gapps_EmailListFeed que contiene cada lista de correo del dominio.

Alternativamente, llame a getEmailListFeed() sobre un objeto de servicio sin argumentos.

$feed = $gdata->getEmailListFeed();

foreach ($feed as $list) {
    echo '  * ' . $list->emailList->name . "\n";
}

37.9.7.4. Eliminando una lista de correo

Para eliminar una lista de correo, llame al método de conveniencia deleteEmailList():

$gdata->deleteEmailList('friends');

37.9.8. Interactuando con destinatarios de listas de correo

Cada destinatario suscrito a una lista de correo se representa mediante una instancia de Zend_Gdata_Gapps_EmailListRecipient. A través de esta clase, se pueden añadir y eliminar destinatarios individuales de las listas de correo.

37.9.8.1. Añadiendo un destinatario a una lista de correo

Para añadir un destinatario a una lista de correo, simplemente llame al método de conveniencia addRecipientToEmailList():

$gdata->addRecipientToEmailList('bar@somewhere.com', 'friends');

37.9.8.2. Obteniendo la lista de suscriptores de una lista de correo

El método de conveniencia retrieveAllRecipients() se puede usar para obtener la lista de suscriptores de una lista de correo:

$feed = $gdata->retrieveAllRecipients('friends');

foreach ($feed as $recipient) {
    echo '  * ' . $recipient->who->email . "\n";
}

Alternativamente, construya un nuevo EmailListRecipientQuery, establezca su propiedad emailListName para que coincida con la lista de correo deseada, y llame a getEmailListRecipientFeed() sobre un objeto de servicio.

$query = $gdata->newEmailListRecipientQuery();
$query->setEmailListName('friends');
$feed = $gdata->getEmailListRecipientFeed($query);

foreach ($feed as $recipient) {
    echo '  * ' . $recipient->who->email . "\n";
}

Esto creará un objeto Zend_Gdata_Gapps_EmailListRecipientFeed que contiene cada destinatario de la lista de correo seleccionada.

37.9.8.3. Eliminando un destinatario de una lista de correo

Para eliminar un destinatario de una lista de correo, llame al método de conveniencia removeRecipientFromEmailList():

$gdata->removeRecipientFromEmailList('baz@somewhere.com', 'friends');

37.9.9. Gestión de errores

Además del conjunto estándar de excepciones lanzadas por Zend_Gdata, las peticiones que usan la API de Provisioning también pueden lanzar una Zend_Gdata_Gapps_ServiceException. Estas excepciones indican que se produjo un error específico de la API que impide que la petición se complete.

Cada instancia de ServiceException puede contener uno o más objetos Error. Cada uno de estos objetos contiene un código de error, un motivo y (opcionalmente) la entrada que provocó la excepción. En la documentación de la API de Zend Framework, bajo Zend_Gdata_Gapps_Error, se proporciona una lista completa de los códigos de error conocidos. Además, la lista de errores autorizada está disponible en línea en Google Apps Provisioning API V2.0 Reference: Appendix D.

Aunque la lista completa de errores recibidos está disponible dentro de ServiceException como un array llamando a getErrors(), a menudo resulta conveniente saber si ocurrió un error específico concreto. Para estos casos, la presencia de un error se puede determinar llamando a hasError().

El siguiente ejemplo muestra cómo detectar si un recurso solicitado no existe y gestionar el fallo con elegancia:

function retrieveUser ($username) {
    $query = $gdata->newUserQuery($username);
    try {
        $user = $gdata->getUserEntry($query);
    } catch (Zend_Gdata_Gapps_ServiceException $e) {
        // Set the user to null if not found
        if ($e->hasError(Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST)) {
            $user = null;
        } else {
            throw $e;
        }
    }
    return $user;
}